From 027e83036023bee3d182c2bd3266a3b09e11b06e Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 22 Feb 2012 00:45:18 -0500 Subject: [PATCH] Keep dynamics asleep during init process When we set the global pose and transform, we wake up dynamics. This can be somewhat evil, so we put them back to sleep as they are supposed to be. --- Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp b/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp index adf614e2..d81f9387 100644 --- a/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp +++ b/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp @@ -1220,8 +1220,9 @@ void plPXPhysical::GetSyncState(hsPoint3& pos, hsQuat& rot, hsVector3& linV, hsV void plPXPhysical::SetSyncState(hsPoint3* pos, hsQuat* rot, hsVector3* linV, hsVector3* angV) { - bool initialSync = plNetClientApp::GetInstance()->IsLoadingInitialAgeState() && - plNetClientApp::GetInstance()->GetJoinOrder() == 0; + bool isLoading = plNetClientApp::GetInstance()->IsLoadingInitialAgeState(); + bool isFirstIn = plNetClientApp::GetInstance()->GetJoinOrder() == 0; + bool initialSync = isLoading && isFirstIn; // If the physical has fallen out of the sim, and this is initial age state, and we're // the first person in, reset it to the original position. (ie, prop the default state @@ -1243,6 +1244,11 @@ void plPXPhysical::SetSyncState(hsPoint3* pos, hsQuat* rot, hsVector3* linV, hsV if (angV) SetAngularVelocitySim(*angV); + // If we're loading the age, then we should ensure the objects + // stay asleep if they're supposed to be asleep. + if (isLoading && GetProperty(plSimulationInterface::kStartInactive) && !fActor->readBodyFlag(NX_BF_KINEMATIC)) + fActor->putToSleep(); + SendNewLocation(false, true); }