From adb29b1197758d6b6cc9abcf5fe00a375d4494e5 Mon Sep 17 00:00:00 2001 From: xezon <4720891+xezon@users.noreply.github.com> Date: Thu, 14 May 2026 13:40:46 +0200 Subject: [PATCH] bugfix(gameengine): Fix logic in GameEngine::canUpdateRegularGameLogic() --- .../Code/GameEngine/Include/Common/GameEngine.h | 4 ++-- .../Code/GameEngine/Source/Common/GameEngine.cpp | 15 +++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GameEngine.h b/GeneralsMD/Code/GameEngine/Include/Common/GameEngine.h index 20e7188b3e6..bcf91c3643f 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 a34487538d8..3f2b57b490c 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp @@ -815,7 +815,7 @@ void GameEngine::resetSubsystems() } /// ----------------------------------------------------------------------------------------------- -Bool GameEngine::canUpdateGameLogic() +Bool GameEngine::canUpdateGameLogic(UnsignedInt logicTimeQueryFlags) { // Must be first. TheGameLogic->preUpdate(); @@ -829,7 +829,7 @@ Bool GameEngine::canUpdateGameLogic() } else { - return canUpdateRegularGameLogic(); + return canUpdateRegularGameLogic(logicTimeQueryFlags); } } @@ -850,11 +850,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; @@ -862,7 +861,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; @@ -912,7 +911,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();