void Game::Loop(void) { Logger::Log() << "Loop()"; // Clock used in restricting Update loop to a fixed rate sf::Clock update_clock; update_clock.Reset(); // Update immediately Uint32 next_update = update_clock.GetElapsedTime(); // Loop while IsRunning returns true while(IsRunning() && window.IsOpened()) { IState* currentState = stateManager.GetActiveState(); // Check for corrupt state returned by our StateManager assert(NULL != currentState && "Game::Loop() received a bad pointer"); while (update_clock.GetElapsedTime() > next_update) { sf::Event event; while(window.PollEvent(event)) { switch (event.Type) { case sf::Event::Closed: // Window closed Quit(EXIT_SUCCESS); break; case sf::Event::GainedFocus: // Window gained focus // resume state currentState->Resume(); break; case sf::Event::LostFocus: // Window lost focus // Pause state currentState->Pause(); break; case sf::Event::Resized: // Window resized break; default: // Allow state to handle events currentState->HandleEvents(event); break; } } // Update current state currentState->UpdateFixed(); next_update += update_rate; } // Draw current state currentState->Draw(); window.Display(); // Cleanup state } }