Browse Source

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.
Adam Johnson 13 years ago
parent
commit
027e830360
  1. 10
      Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp

10
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) void plPXPhysical::SetSyncState(hsPoint3* pos, hsQuat* rot, hsVector3* linV, hsVector3* angV)
{ {
bool initialSync = plNetClientApp::GetInstance()->IsLoadingInitialAgeState() && bool isLoading = plNetClientApp::GetInstance()->IsLoadingInitialAgeState();
plNetClientApp::GetInstance()->GetJoinOrder() == 0; 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 // 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 // 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) if (angV)
SetAngularVelocitySim(*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); SendNewLocation(false, true);
} }

Loading…
Cancel
Save