Browse Source

Fix floating/exploding dynamic physicals

Only put dynamics to sleep if they're at the initial location. This
prevents baskets from exploding on touch by an avatar and should
theoretically make the doggone slave cave kickables activate the pressure
plates.
Adam Johnson 11 years ago
parent
commit
bc76f4d760
  1. 11
      Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp

11
Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp

@ -1059,10 +1059,13 @@ 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 // If we're loading the age, then we should ensure the objects stay asleep if they're supposed to be asleep.
// stay asleep if they're supposed to be asleep. // NOTE: We should only do this if the objects are not at their initial locations. Otherwise, they might
if (isLoading && GetProperty(plSimulationInterface::kStartInactive) && !fActor->readBodyFlag(NX_BF_KINEMATIC)) // sleep inside each other and explode or float randomly in midair
fActor->putToSleep(); if (isLoading && GetProperty(plSimulationInterface::kStartInactive) && !fActor->readBodyFlag(NX_BF_KINEMATIC)) {
if (!pos && !rot)
fActor->putToSleep();
}
SendNewLocation(false, true); SendNewLocation(false, true);
} }

Loading…
Cancel
Save