diff options
author | Jean-Luc Peurière <jlp@nerim.net> | 2005-12-18 22:10:26 +0300 |
---|---|---|
committer | Jean-Luc Peurière <jlp@nerim.net> | 2005-12-18 22:10:26 +0300 |
commit | 63d0e03bcfd6a9d1e0ce800d2f7d797e336f7f21 (patch) | |
tree | e530c810698df762d41b2eaa8c9a22225a69d509 /source/gameengine/Ketsji/KX_KetsjiEngine.cpp | |
parent | c33831ac1632ac0a0e42e174035dd0d0ea15a087 (diff) |
applying Volker Mische engine patch
correct bug #3594
Diffstat (limited to 'source/gameengine/Ketsji/KX_KetsjiEngine.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_KetsjiEngine.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index a163e8fde58..e82ecd83fee 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -99,6 +99,9 @@ const char KX_KetsjiEngine::m_profileLabels[tc_numCategories][15] = { double KX_KetsjiEngine::m_ticrate = DEFAULT_LOGIC_TIC_RATE; +double KX_KetsjiEngine::m_suspendedtime = 0.0; +double KX_KetsjiEngine::m_suspendeddelta = 0.0; + /** * Constructor of the Ketsji Engine @@ -355,6 +358,12 @@ void KX_KetsjiEngine::NextFrame() if (!scene->IsSuspended()) { + // if the scene was suspended recalcutlate the delta tu "curtime" + m_suspendedtime = scene->getSuspendedTime(); + if (scene->getSuspendedTime()!=0.0) + scene->setSuspendedDelta(scene->getSuspendedDelta()+curtime-scene->getSuspendedTime()); + m_suspendeddelta = scene->getSuspendedDelta(); + m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); m_logger->StartLog(tc_network, m_kxsystem->GetTimeInSeconds(), true); scene->GetNetworkScene()->proceed(localtime); @@ -403,7 +412,11 @@ void KX_KetsjiEngine::NextFrame() m_sceneconverter->WritePhysicsObjectToAnimationIpo(m_currentFrame++); } + scene->setSuspendedTime(0.0); } // suspended + else + if(scene->getSuspendedTime()==0.0) + scene->setSuspendedTime(curtime); DoSound(scene); @@ -439,6 +452,12 @@ void KX_KetsjiEngine::NextFrame() if (!scene->IsSuspended()) { + // if the scene was suspended recalcutlate the delta tu "curtime" + m_suspendedtime = scene->getSuspendedTime(); + if (scene->getSuspendedTime()!=0.0) + scene->setSuspendedDelta(scene->getSuspendedDelta()+curtime-scene->getSuspendedTime()); + m_suspendeddelta = scene->getSuspendedDelta(); + // set Python hooks for each scene PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); PHY_SetActiveScene(scene); @@ -459,7 +478,12 @@ void KX_KetsjiEngine::NextFrame() // Actuators can affect the scenegraph m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true); scene->UpdateParents(curtime); + + scene->setSuspendedTime(0.0); } // suspended + else + if(scene->getSuspendedTime()==0.0) + scene->setSuspendedTime(curtime); DoSound(scene); @@ -1224,6 +1248,11 @@ bool KX_KetsjiEngine::GetUseFixedTime(void) const return m_bFixedTime; } +double KX_KetsjiEngine::GetSuspendedDelta() +{ + return m_suspendeddelta; +} + double KX_KetsjiEngine::GetTicRate() { return m_ticrate; |