diff --git a/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp b/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp index c4367b3d..a979aae1 100644 --- a/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp +++ b/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.cpp @@ -390,8 +390,6 @@ plSimulationMgr* plSimulationMgr::GetInstance() plSimulationMgr::plSimulationMgr() : fSuspended(true) - , fMaxDelta(kDefaultMaxDelta) - , fStepSize(kDefaultStepSize) , fLOSDispatch(new plLOSDispatch()) , fSoundMgr(new plPhysicsSoundMgr) , fLog(nil) @@ -450,16 +448,20 @@ NxScene* plSimulationMgr::GetScene(plKey world) if (!scene) { - uint32_t maxSteps = (uint32_t)ceil(fMaxDelta / fStepSize); - NxSceneDesc sceneDesc; sceneDesc.gravity.set(0, 0, -32.174049f); sceneDesc.userTriggerReport = &gSensorReport; sceneDesc.userContactReport = &gContactReport; - sceneDesc.maxTimestep = fStepSize; - sceneDesc.maxIter = maxSteps; scene = fSDK->createScene(sceneDesc); + // See "Advancing The Simulation State" in the PhysX SDK Documentation + // This will cause PhysX to only update for our step size. If we call simulate + // faster than that, PhysX will return immediately. If we call it slower than that, + // PhysX will do some extra steps for us (isn't that nice?). + // Anyway, this should be a good way to make us independent of the framerate. + // If not, I blame the usual suspects (Tye, eap, etc...) + scene->setTiming(kDefaultStepSize); + // Most physicals use the default friction and restitution values, so we // make them the default. NxMaterial* mat = scene->getMaterialFromIndex(0); @@ -602,12 +604,6 @@ void plSimulationMgr::Advance(float delSecs) if (fSuspended) return; - if (delSecs > fMaxDelta) - { - if (fExtraProfile) - Log("Step clamped from %f to limit of %f", delSecs, fMaxDelta); - delSecs = fMaxDelta; - } plProfile_IncCount(StepLen, (int)(delSecs*1000)); #ifndef PLASMA_EXTERNAL_RELASE @@ -771,26 +767,6 @@ hsBool plSimulationMgr::MsgReceive(plMessage *msg) // ///////////////////////////////////////////////////////////////// -void plSimulationMgr::SetMaxDelta(float maxDelta) -{ - fMaxDelta = maxDelta; -} - -float plSimulationMgr::GetMaxDelta() const -{ - return fMaxDelta; -} - -void plSimulationMgr::SetStepsPerSecond(int stepsPerSecond) -{ - fStepSize = 1.0f / (float)stepsPerSecond; -} - -int plSimulationMgr::GetStepsPerSecond() -{ - return (int)((1.0 / fStepSize) + 0.5f); // round to nearest int -} - int plSimulationMgr::GetMaterialIdx(NxScene* scene, float friction, float restitution) { if (friction == 0.5f && restitution == 0.5f) diff --git a/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.h b/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.h index d22fc286..2a75d943 100644 --- a/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.h +++ b/Sources/Plasma/PubUtilLib/plPhysX/plSimulationMgr.h @@ -115,20 +115,6 @@ protected: plSimulationMgr(); virtual ~plSimulationMgr(); - // Set the maximum amount of time (in seconds) that the physics will advance - // between frames. If a frame-to-frame delta is bigger than this, we'll - // clamp it to this value. - // WARNING: animation doesn't do this, so if we clamp the time animated - // physicals and the avatar may move at a faster rate than usual. - void SetMaxDelta(float maxDelta); - float GetMaxDelta() const; - - // Set the number of steps per second that physics will advance. - // The more steps per second, the less fallthough and more accurate - // simulation response. - void SetStepsPerSecond(int stepsPerSecond); - int GetStepsPerSecond(); - // Walk through the synchronization requests and send them as appropriate. void IProcessSynchs(); @@ -151,9 +137,6 @@ protected: // but nothing will move. bool fSuspended; - float fMaxDelta; - float fStepSize; - // A utility class to keep track of a request for a physical synchronization. // These requests must pass a certain criteria (see the code for the latest) // before they are actually either sent over the network or rejected.