diff --git a/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp b/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp index e68d1544..b8d89793 100644 --- a/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp +++ b/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp @@ -56,6 +56,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "pnSceneObject/plCoordinateInterface.h" #include "pnNetCommon/plSDLTypes.h" #include "plMessage/plCollideMsg.h" +#include "plMessage/plAgeLoadedMsg.h" #include "plModifier/plDetectorLog.h" @@ -358,6 +359,7 @@ void plSimulationMgr::Init() { gTheInstance->RegisterAs(kSimulationMgr_KEY); gTheInstance->GetKey()->RefObject(); + plgDispatch::Dispatch()->RegisterForExactType(plAgeLoadedMsg::Index(), gTheInstance->GetKey()); } else { @@ -377,6 +379,7 @@ void plSimulationMgr::Shutdown() // UnRef to match our Ref in Init(). Unless something strange is // going on, this should destroy the instance and set gTheInstance to nil. // gTheInstance->GetKey()->UnRefObject(); + plgDispatch::Dispatch()->UnRegisterForExactType(plAgeLoadedMsg::Index(), gTheInstance->GetKey()); gTheInstance->UnRegister(); // this will destroy the instance gTheInstance = nil; } @@ -756,6 +759,13 @@ void plSimulationMgr::ISendUpdates() hsBool plSimulationMgr::MsgReceive(plMessage *msg) { + // Suspend/resume the simulation based on whether or not we're in an age... + if (plAgeLoadedMsg* aMsg = plAgeLoadedMsg::ConvertNoRef(msg)) + { + fSuspended = !aMsg->fLoaded; + return true; + } + return hsKeyedObject::MsgReceive(msg); }