1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-01 12:15:35 +00:00

Fix the Viewer's FrameStamp not being set correctly during Engine::frame

This commit is contained in:
scrawl 2015-06-14 15:27:33 +02:00
parent f70250a296
commit 195e1a8410
2 changed files with 16 additions and 13 deletions

View file

@ -82,7 +82,7 @@ void OMW::Engine::executeLocalScripts()
localScripts.setIgnore (MWWorld::Ptr()); localScripts.setIgnore (MWWorld::Ptr());
} }
double OMW::Engine::frame(float frametime) void OMW::Engine::frame(float frametime)
{ {
try try
{ {
@ -101,17 +101,14 @@ double OMW::Engine::frame(float frametime)
if (mUseSound) if (mUseSound)
MWBase::Environment::get().getSoundManager()->update(frametime); MWBase::Environment::get().getSoundManager()->update(frametime);
// GUI active? Most game processing will be paused, but scripts still run.
bool guiActive = MWBase::Environment::get().getWindowManager()->isGuiMode();
if (!guiActive)
mSimulationTime += frametime;
// Main menu opened? Then scripts are also paused. // Main menu opened? Then scripts are also paused.
bool paused = MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_MainMenu); bool paused = MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_MainMenu);
// update game state // update game state
MWBase::Environment::get().getStateManager()->update (frametime); MWBase::Environment::get().getStateManager()->update (frametime);
bool guiActive = MWBase::Environment::get().getWindowManager()->isGuiMode();
osg::Timer_t beforeScriptTick = osg::Timer::instance()->tick(); osg::Timer_t beforeScriptTick = osg::Timer::instance()->tick();
if (MWBase::Environment::get().getStateManager()->getState()== if (MWBase::Environment::get().getStateManager()->getState()==
MWBase::StateManager::State_Running) MWBase::StateManager::State_Running)
@ -193,7 +190,6 @@ double OMW::Engine::frame(float frametime)
{ {
std::cerr << "Error in framelistener: " << e.what() << std::endl; std::cerr << "Error in framelistener: " << e.what() << std::endl;
} }
return mSimulationTime;
} }
OMW::Engine::Engine(Files::ConfigurationManager& configurationManager) OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
@ -214,7 +210,6 @@ OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
, mFSStrict (false) , mFSStrict (false)
, mScriptBlacklistUse (true) , mScriptBlacklistUse (true)
, mNewGame (false) , mNewGame (false)
, mSimulationTime(0.0)
, mCfgMgr(configurationManager) , mCfgMgr(configurationManager)
{ {
Misc::Rng::init(); Misc::Rng::init();
@ -679,14 +674,24 @@ void OMW::Engine::go()
// Start the main rendering loop // Start the main rendering loop
osg::Timer frameTimer; osg::Timer frameTimer;
double simulationTime = 0.0;
while (!mViewer->done() && !MWBase::Environment::get().getStateManager()->hasQuitRequest()) while (!mViewer->done() && !MWBase::Environment::get().getStateManager()->hasQuitRequest())
{ {
double dt = frameTimer.time_s(); double dt = frameTimer.time_s();
frameTimer.setStartTick(); frameTimer.setStartTick();
dt = std::min(dt, 0.2); dt = std::min(dt, 0.2);
double simulationTime = frame(dt); bool guiActive = MWBase::Environment::get().getWindowManager()->isGuiMode();
mViewer->frame(simulationTime); if (!guiActive)
simulationTime += dt;
mViewer->advance(simulationTime);
frame(dt);
mViewer->eventTraversal();
mViewer->updateTraversal();
mViewer->renderingTraversals();
} }
// Save user settings // Save user settings

View file

@ -106,7 +106,6 @@ namespace OMW
bool mNewGame; bool mNewGame;
osg::Timer_t mStartTick; osg::Timer_t mStartTick;
double mSimulationTime;
// not implemented // not implemented
Engine (const Engine&); Engine (const Engine&);
@ -114,8 +113,7 @@ namespace OMW
void executeLocalScripts(); void executeLocalScripts();
/// @return The new simulationTime void frame (float dt);
double frame (float dt);
/// Load settings from various files, returns the path to the user settings file /// Load settings from various files, returns the path to the user settings file
std::string loadSettings (Settings::Manager & settings); std::string loadSettings (Settings::Manager & settings);