return speed;
}
+bool
+MainLoop::has_no_pending_fadeout() const
+{
+ return screen_fade.get() == NULL || screen_fade->done();
+}
+
void
MainLoop::draw_fps(DrawingContext& context, float fps_fps)
{
MainLoop::handle_screen_switch()
{
while( (next_screen.get() != NULL || nextpop) &&
- (screen_fade.get() == NULL || screen_fade->done())) {
+ has_no_pending_fadeout()) {
if(current_screen.get() != NULL) {
current_screen->leave();
}
elapsed_ticks = 0;
}
+ if(elapsed_ticks < ticks_per_frame)
+ {
+ Uint32 delay_ticks = ticks_per_frame - elapsed_ticks;
+ SDL_Delay(delay_ticks);
+ last_ticks += delay_ticks;
+ elapsed_ticks += delay_ticks;
+ }
+
int frames = 0;
- if (elapsed_ticks > ticks_per_frame)
+ while(elapsed_ticks >= ticks_per_frame && frames < MAX_FRAME_SKIP)
{
- while(elapsed_ticks > ticks_per_frame && frames < MAX_FRAME_SKIP)
- {
- elapsed_ticks -= ticks_per_frame;
- float timestep = 1.0 / LOGICAL_FPS;
- real_time += timestep;
- timestep *= speed;
- game_time += timestep;
-
- process_events();
- update_gamelogic(timestep);
- frames += 1;
- }
-
- draw(context);
+ elapsed_ticks -= ticks_per_frame;
+ float timestep = 1.0 / LOGICAL_FPS;
+ real_time += timestep;
+ timestep *= speed;
+ game_time += timestep;
+
+ process_events();
+ update_gamelogic(timestep);
+ frames += 1;
}
- sound_manager->update();
+ draw(context);
- SDL_Delay(0);
+ sound_manager->update();
}
}