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();
}
Example #2
0
	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();
		}
	}