void Overseer::update() { Ogre::WindowEventUtilities::messagePump(); Ogre::Real timeSinceLastFrame = (timer.getMilliseconds()-lastTime)/1000.0f; lastTime = (Ogre::Real)timer.getMilliseconds(); inputManager->capture(); guiManager->update(timeSinceLastFrame); stateMutex.lock(); if (!states.empty()) states.back()->update(timeSinceLastFrame); manageStates(); stateMutex.unlock(); root->renderOneFrame(); }
void Game::gameLoop() { running = true; const sf::Time dt = sf::seconds(1.f / ticksPerSecond); sf::Time lastTime = gameTime.getElapsedTime(); sf::Time lag = sf::seconds(0); #ifdef DEBUG const float FRAMES_TO_TIME = 60.f; sf::Clock framesClock; unsigned int frameCounter = 0; #endif while(running) { sf::Time newTime = gameTime.getElapsedTime(); sf::Time frameTime = newTime - lastTime; lastTime = newTime; lag += frameTime; while(lag >= dt) { handleEvents(); update(dt); lag -= dt; } draw(); #ifdef DEBUG // frames per second measurement frameCounter++; if(frameCounter >= FRAMES_TO_TIME) { fps.setString(std::to_string(FRAMES_TO_TIME / framesClock.restart().asSeconds()).substr(0, 8)); frameCounter = 0; } #endif // make state changes last, since they affect everything else manageStates(); } }