X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameloop.cpp;h=625afee490a2d2e13c5765ba7c01f1d2e77d2623;hb=a28d9c1e7fc6b8b2a5c9e139560143e9b74813ea;hp=251dafdcd2fa9bfa2484874073e261f158c243e8;hpb=e776775f2ef6a3843cb83b39b34980d98e208f2f;p=supertux.git diff --git a/src/gameloop.cpp b/src/gameloop.cpp index 251dafdcd..625afee49 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -178,6 +178,8 @@ GameSession::start_timers() void GameSession::on_escape_press() { + if(world->get_tux()->dying || end_sequence != NO_ENDSEQUENCE) + return; // don't let the player open the menu, when he is dying if(game_pause) return; @@ -187,6 +189,16 @@ GameSession::on_escape_press() } else if (!Menu::current()) { + /* Tell Tux that the keys are all down, otherwise + it could have nasty bugs, like going allways to the right + or whatever that key does */ + Player& tux = *world->get_tux(); + tux.key_event((SDLKey)keymap.jump, UP); + tux.key_event((SDLKey)keymap.duck, UP); + tux.key_event((SDLKey)keymap.left, UP); + tux.key_event((SDLKey)keymap.right, UP); + tux.key_event((SDLKey)keymap.fire, UP); + Menu::set_current(game_menu); st_pause_ticks_start(); } @@ -261,18 +273,8 @@ GameSession::process_events() if (Menu::current()) { Menu::current()->event(event); - if(!Menu::current()) - st_pause_ticks_stop(); - - /* Tell Tux that the keys are all down, otherwise - it could have nasty bugs, like going allways to the right - or whatever that key does */ - Player& tux = *world->get_tux(); - tux.key_event((SDLKey)keymap.jump, UP); - tux.key_event((SDLKey)keymap.duck, UP); - tux.key_event((SDLKey)keymap.left, UP); - tux.key_event((SDLKey)keymap.right, UP); - tux.key_event((SDLKey)keymap.fire, UP); + if(!Menu::current()) + st_pause_ticks_stop(); } else { @@ -466,9 +468,6 @@ GameSession::check_end_conditions() if (player_status.lives < 0) { // No more lives!? - if(st_gl_mode != ST_GL_TEST) - drawendscreen(); - exit_status = ES_GAME_OVER; } else @@ -683,63 +682,39 @@ GameSession::drawstatus() } if(!time_left.check()) { - white_text->draw("TIME'S UP", 224, 0, 1); + white_text->draw("TIME'S UP", screen->w/2 - white_text->w*8, 0, 1); } else if (time_left.get_left() > TIME_WARNING || (global_frame_counter % 10) < 5) { sprintf(str, "%d", time_left.get_left() / 1000 ); - white_text->draw("TIME", 224, 0, 1); - gold_text->draw(str, 304, 0, 1); + white_text->draw("TIME", screen->w/2 - white_text->w*4, 0, 1); + gold_text->draw(str, screen->w/2 + gold_text->w, 0, 1); } sprintf(str, "%d", player_status.distros); - white_text->draw("COINS", screen->h, 0, 1); - gold_text->draw(str, 608, 0, 1); + white_text->draw("COINS", screen->w - white_text->w*9, 0, 1); + gold_text->draw(str, screen->w - gold_text->w*2, 0, 1); - white_text->draw("LIVES", 480, 20); + white_text->draw("LIVES", screen->w - white_text->w*9, 20); if (player_status.lives >= 5) { sprintf(str, "%dx", player_status.lives); - gold_text->draw_align(str, 617, 20, A_RIGHT, A_TOP); - tux_life->draw(565+(18*3), 20); + gold_text->draw_align(str, screen->w - gold_text->w, 20, A_RIGHT, A_TOP); + tux_life->draw(screen->w - gold_text->w, 20); } else { for(int i= 0; i < player_status.lives; ++i) - tux_life->draw(565+(18*i),20); + tux_life->draw(screen->w - tux_life->w*4 +(tux_life->w*i), 20); } if(show_fps) { sprintf(str, "%2.1f", fps_fps); - white_text->draw("FPS", screen->h, 40, 1); - gold_text->draw(str, screen->h + 60, 40, 1); + white_text->draw("FPS", screen->w - white_text->w*9, 40, 1); + gold_text->draw_align(str, screen->w, 40, A_RIGHT, A_TOP); } } void -GameSession::drawendscreen() -{ - char str[80]; - - if (get_level()->img_bkgd) - get_level()->draw_bg(); - else - drawgradient(get_level()->bkgd_top, get_level()->bkgd_bottom); - - blue_text->drawf("GAMEOVER", 0, 200, A_HMIDDLE, A_TOP, 1); - - sprintf(str, "SCORE: %d", player_status.score); - gold_text->drawf(str, 0, 224, A_HMIDDLE, A_TOP, 1); - - sprintf(str, "COINS: %d", player_status.distros); - gold_text->drawf(str, 0, 256, A_HMIDDLE, A_TOP, 1); - - flipscreen(); - - SDL_Event event; - wait_for_event(event,2000,5000,true); -} - -void GameSession::drawresultscreen(void) { char str[80];