State *Application::CurrentState() {
- return states.top();
+ return states.empty() ? 0 : states.top();
}
void Application::UpdateState() {
void Application::Loop() {
Uint32 now(SDL_GetTicks());
Uint32 deltaT(now - last);
+ GlobalTimers().Update(deltaT);
if (deltaT > 34) deltaT = 34;
+ if (CurrentState()) {
+ CurrentState()->GraphicsTimers().Update(deltaT);
+ }
HandleEvents();
- UpdateWorld(deltaT);
- Render();
+ if (!StateChangePending()) {
+ UpdateWorld(deltaT);
+ Render();
+ }
last = now;
UpdateState();
break;
}
}
- CurrentState()->HandleInput(input);
+ CurrentState()->HandleEvents(input);
}
void Application::UpdateWorld(Uint32 deltaT) {
if (!CurrentState()) return;
for (Uint32 i(0); i < deltaT; ++i) {
+ CurrentState()->PhysicsTimers().Update(0.001f);
CurrentState()->UpdateWorld(0.001f);
}
}