diff --git a/Generals/Code/GameEngine/Include/Common/GameEngine.h b/Generals/Code/GameEngine/Include/Common/GameEngine.h index 67a45eb5f2..8dfb25151a 100644 --- a/Generals/Code/GameEngine/Include/Common/GameEngine.h +++ b/Generals/Code/GameEngine/Include/Common/GameEngine.h @@ -80,9 +80,9 @@ class GameEngine : public SubsystemInterface virtual void resetSubsystems(); - Bool canUpdateGameLogic(); + Bool canUpdateGameLogic(UnsignedInt logicTimeQueryFlags); Bool canUpdateNetworkGameLogic(); - Bool canUpdateRegularGameLogic(); + Bool canUpdateRegularGameLogic(UnsignedInt logicTimeQueryFlags); virtual FileSystem *createFileSystem(); ///< Factory for FileSystem classes virtual LocalFileSystem *createLocalFileSystem() = 0; ///< Factory for LocalFileSystem classes diff --git a/Generals/Code/GameEngine/Source/Common/GameEngine.cpp b/Generals/Code/GameEngine/Source/Common/GameEngine.cpp index 0350d007b2..135766458f 100644 --- a/Generals/Code/GameEngine/Source/Common/GameEngine.cpp +++ b/Generals/Code/GameEngine/Source/Common/GameEngine.cpp @@ -649,7 +649,7 @@ void GameEngine::resetSubsystems() } /// ----------------------------------------------------------------------------------------------- -Bool GameEngine::canUpdateGameLogic() +Bool GameEngine::canUpdateGameLogic(UnsignedInt logicTimeQueryFlags) { // Must be first. TheGameLogic->preUpdate(); @@ -663,7 +663,7 @@ Bool GameEngine::canUpdateGameLogic() } else { - return canUpdateRegularGameLogic(); + return canUpdateRegularGameLogic(logicTimeQueryFlags); } } @@ -684,11 +684,10 @@ Bool GameEngine::canUpdateNetworkGameLogic() } /// ----------------------------------------------------------------------------------------------- -Bool GameEngine::canUpdateRegularGameLogic() +Bool GameEngine::canUpdateRegularGameLogic(UnsignedInt logicTimeQueryFlags) { - const Bool enabled = TheFramePacer->isLogicTimeScaleEnabled(); - const Int logicTimeScaleFps = TheFramePacer->getLogicTimeScaleFps(); - const Int maxRenderFps = TheFramePacer->getFramesPerSecondLimit(); + const Int logicTimeScaleFps = TheFramePacer->getActualLogicTimeScaleFps(logicTimeQueryFlags); + const Int maxRenderFps = TheFramePacer->getActualFramesPerSecondLimit(); #if defined(_ALLOW_DEBUG_CHEATS_IN_RELEASE) const Bool useFastMode = TheGlobalData->m_TiVOFastMode; @@ -696,7 +695,7 @@ Bool GameEngine::canUpdateRegularGameLogic() const Bool useFastMode = TheGlobalData->m_TiVOFastMode && TheGameLogic->isInReplayGame(); #endif - if (useFastMode || !enabled || logicTimeScaleFps >= maxRenderFps) + if (useFastMode || logicTimeScaleFps >= maxRenderFps) { // Logic time scale is uncapped or larger equal Render FPS. Update straight away. return true; @@ -746,7 +745,7 @@ void GameEngine::update() } } - const Bool canUpdate = canUpdateGameLogic(); + const Bool canUpdate = canUpdateGameLogic(FramePacer::IgnoreFrozenTime | FramePacer::IgnoreHaltedGame); const Bool canUpdateLogic = canUpdate && !TheFramePacer->isGameHalted() && !TheFramePacer->isTimeFrozen(); const Bool canUpdateScript = canUpdate && !TheFramePacer->isGameHalted(); diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GameEngine.h b/GeneralsMD/Code/GameEngine/Include/Common/GameEngine.h index 20e7188b3e..bcf91c3643 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GameEngine.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GameEngine.h @@ -79,9 +79,9 @@ class GameEngine : public SubsystemInterface virtual void resetSubsystems(); - Bool canUpdateGameLogic(); + Bool canUpdateGameLogic(UnsignedInt logicTimeQueryFlags); Bool canUpdateNetworkGameLogic(); - Bool canUpdateRegularGameLogic(); + Bool canUpdateRegularGameLogic(UnsignedInt logicTimeQueryFlags); virtual FileSystem *createFileSystem(); ///< Factory for FileSystem classes virtual LocalFileSystem *createLocalFileSystem() = 0; ///< Factory for LocalFileSystem classes diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp index ad861da8d9..92743bf0f5 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp @@ -813,7 +813,7 @@ void GameEngine::resetSubsystems() } /// ----------------------------------------------------------------------------------------------- -Bool GameEngine::canUpdateGameLogic() +Bool GameEngine::canUpdateGameLogic(UnsignedInt logicTimeQueryFlags) { // Must be first. TheGameLogic->preUpdate(); @@ -827,7 +827,7 @@ Bool GameEngine::canUpdateGameLogic() } else { - return canUpdateRegularGameLogic(); + return canUpdateRegularGameLogic(logicTimeQueryFlags); } } @@ -848,11 +848,10 @@ Bool GameEngine::canUpdateNetworkGameLogic() } /// ----------------------------------------------------------------------------------------------- -Bool GameEngine::canUpdateRegularGameLogic() +Bool GameEngine::canUpdateRegularGameLogic(UnsignedInt logicTimeQueryFlags) { - const Bool enabled = TheFramePacer->isLogicTimeScaleEnabled(); - const Int logicTimeScaleFps = TheFramePacer->getLogicTimeScaleFps(); - const Int maxRenderFps = TheFramePacer->getFramesPerSecondLimit(); + const Int logicTimeScaleFps = TheFramePacer->getActualLogicTimeScaleFps(logicTimeQueryFlags); + const Int maxRenderFps = TheFramePacer->getActualFramesPerSecondLimit(); #if defined(_ALLOW_DEBUG_CHEATS_IN_RELEASE) const Bool useFastMode = TheGlobalData->m_TiVOFastMode; @@ -860,7 +859,7 @@ Bool GameEngine::canUpdateRegularGameLogic() const Bool useFastMode = TheGlobalData->m_TiVOFastMode && TheGameLogic->isInReplayGame(); #endif - if (useFastMode || !enabled || logicTimeScaleFps >= maxRenderFps) + if (useFastMode || logicTimeScaleFps >= maxRenderFps) { // Logic time scale is uncapped or larger equal Render FPS. Update straight away. return true; @@ -910,7 +909,7 @@ void GameEngine::update() } } - const Bool canUpdate = canUpdateGameLogic(); + const Bool canUpdate = canUpdateGameLogic(FramePacer::IgnoreFrozenTime | FramePacer::IgnoreHaltedGame); const Bool canUpdateLogic = canUpdate && !TheFramePacer->isGameHalted() && !TheFramePacer->isTimeFrozen(); const Bool canUpdateScript = canUpdate && !TheFramePacer->isGameHalted();