X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameloop.cpp;h=838ccd7d29fa2123601ad4ac69d2bd7aa182d6be;hb=aadd77c676baae31db931c8e64cd1713c24289d5;hp=e0cbe6a92a6ea50147be6fba3ae45490ded4f217;hpb=234eef12ae725e40b14f9ebb7f8308fbe6fb06b8;p=supertux.git diff --git a/src/gameloop.cpp b/src/gameloop.cpp index e0cbe6a92..838ccd7d2 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -191,7 +191,7 @@ GameSession::process_events() switch(event.type) { case SDL_QUIT: /* Quit event - quit: */ - quit = 1; + quit = true; break; case SDL_KEYDOWN: /* A keypress! */ key = event.key.keysym.sym; @@ -205,7 +205,7 @@ GameSession::process_events() if(!game_pause) { if(st_gl_mode == ST_GL_TEST) - quit = 1; + quit = true; else if(show_menu) { Menu::set_current(game_menu); @@ -367,9 +367,9 @@ GameSession::action() } else { - level_free_gfx(); + world->get_level()->free_gfx(); world->get_level()->cleanup(); - level_free_song(); + world->get_level()->free_song(); unloadshared(); world->arrays_free(); return(0); @@ -392,9 +392,9 @@ GameSession::action() if (score > hs_score) save_hs(score); } - level_free_gfx(); + world->get_level()->free_gfx(); world->get_level()->cleanup(); - level_free_song(); + world->get_level()->free_song(); unloadshared(); world->arrays_free(); return(0); @@ -421,10 +421,12 @@ GameSession::action() world->arrays_free(); activate_bad_guys(world->get_level()); world->activate_particle_systems(); - level_free_gfx(); + + world->get_level()->free_gfx(); world->get_level()->load_gfx(); - level_free_song(); + world->get_level()->free_song(); world->get_level()->load_song(); + if(st_gl_mode != ST_GL_TEST) levelintro(); start_timers(); @@ -452,10 +454,7 @@ GameSession::action() void GameSession::draw() { - - world->draw(); - drawstatus(); if(game_pause) @@ -470,12 +469,11 @@ GameSession::draw() } if(show_menu) - { - menu_process_current(); - mouse_cursor->draw(); - } + { + menu_process_current(); + mouse_cursor->draw(); + } - /* (Update it all!) */ updatescreen(); } @@ -486,13 +484,8 @@ GameSession::run() current_ = this; int fps_cnt; - bool jump; bool done; - /* --- MAIN GAME LOOP!!! --- */ - jump = false; - done = false; - quit = 0; global_frame_counter = 0; game_pause = 0; timer_init(&fps_timer,true); @@ -511,10 +504,11 @@ GameSession::run() {} draw(); - do - { - jump = false; + done = false; + quit = false; + while (!done && !quit) + { /* Calculate the movement-factor */ frame_ratio = ((double)(update_time-last_update_time))/((double)FRAME_RATE); if(frame_ratio > 1.5) /* Quick hack to correct the unprecise CPU clocks a little bit. */ @@ -617,17 +611,14 @@ GameSession::run() /* Pause till next frame, if the machine running the game is too fast: */ /* FIXME: Works great for in OpenGl mode, where the CPU doesn't have to do that much. But the results in SDL mode aren't perfect (thought the 100 FPS are reached), even on an AMD2500+. */ - if(last_update_time >= update_time - 12 && !jump) { + if(last_update_time >= update_time - 12) { SDL_Delay(10); update_time = st_get_ticks(); } /*if((update_time - last_update_time) < 10) SDL_Delay((11 - (update_time - last_update_time))/2);*/ - - /* Handle time: */ - if (timer_check(&time_left)) { /* are we low on time ? */ @@ -642,7 +633,6 @@ GameSession::run() else tux.kill(KILL); - /* Calculate frames per second */ if(show_fps) { @@ -655,15 +645,14 @@ GameSession::run() fps_cnt = 0; } } - } - while (!done && !quit); halt_music(); - level_free_gfx(); + world->get_level()->free_gfx(); world->get_level()->cleanup(); - level_free_song(); + world->get_level()->free_song(); + unloadshared(); world->arrays_free(); @@ -860,10 +849,12 @@ GameSession::loadgame(int slot) world->arrays_free(); activate_bad_guys(world->get_level()); world->activate_particle_systems(); - level_free_gfx(); + + world->get_level()->free_gfx(); world->get_level()->load_gfx(); - level_free_song(); + world->get_level()->free_song(); world->get_level()->load_song(); + levelintro(); update_time = st_get_ticks();