From 326c74750855e8bfa43ff28d5a6a1d420525c74b Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 15 Jun 2014 00:09:12 +0200 Subject: [PATCH] Don't run scripts when in pause menu (Fixes #1495) --- apps/openmw/engine.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 46f384f594..f8b4c98568 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -91,7 +91,11 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) if (mUseSound) MWBase::Environment::get().getSoundManager()->update(frametime); - bool paused = MWBase::Environment::get().getWindowManager()->isGuiMode(); + // GUI active? Most game processing will be paused, but scripts still run. + bool guiActive = MWBase::Environment::get().getWindowManager()->isGuiMode(); + + // Main menu opened? Then scripts are also paused. + bool paused = MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_MainMenu); // update game state MWBase::Environment::get().getStateManager()->update (frametime); @@ -99,15 +103,18 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) if (MWBase::Environment::get().getStateManager()->getState()== MWBase::StateManager::State_Running) { - // global scripts - MWBase::Environment::get().getScriptManager()->getGlobalScripts().run(); - - // local scripts - executeLocalScripts(); - - MWBase::Environment::get().getWorld()->markCellAsUnchanged(); - if (!paused) + { + // global scripts + MWBase::Environment::get().getScriptManager()->getGlobalScripts().run(); + + // local scripts + executeLocalScripts(); + + MWBase::Environment::get().getWorld()->markCellAsUnchanged(); + } + + if (!guiActive) MWBase::Environment::get().getWorld()->advanceTime( frametime*MWBase::Environment::get().getWorld()->getTimeScaleFactor()/3600); } @@ -118,14 +125,14 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) MWBase::StateManager::State_NoGame) { MWBase::Environment::get().getMechanicsManager()->update(frametime, - paused); + guiActive); } if (MWBase::Environment::get().getStateManager()->getState()== MWBase::StateManager::State_Running) { MWWorld::Ptr player = mEnvironment.getWorld()->getPlayerPtr(); - if(!paused && player.getClass().getCreatureStats(player).isDead()) + if(!guiActive && player.getClass().getCreatureStats(player).isDead()) MWBase::Environment::get().getStateManager()->endGame(); } @@ -133,7 +140,7 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) if (MWBase::Environment::get().getStateManager()->getState()!= MWBase::StateManager::State_NoGame) { - MWBase::Environment::get().getWorld()->update(frametime, paused); + MWBase::Environment::get().getWorld()->update(frametime, guiActive); } // update GUI