X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameloop.cpp;h=78b4a88e7cc94ec181ed8794c72a3ba8e2bf731d;hb=cdb879de1ef50e2d2fb1aead922775d202ddd114;hp=a44cd8e907b1ce8413a8cc2389af75f8551d903c;hpb=263262d1c9a0ce12c639c01c58d638f8b17a3d7b;p=supertux.git diff --git a/src/gameloop.cpp b/src/gameloop.cpp index a44cd8e90..78b4a88e7 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -188,6 +188,7 @@ GameSession::on_escape_press() else if (!Menu::current()) { Menu::set_current(game_menu); + st_pause_ticks_start(); } } @@ -217,7 +218,8 @@ GameSession::process_events() if (Menu::current()) { Menu::current()->event(event); - st_pause_ticks_start(); + if(!Menu::current()) + st_pause_ticks_stop(); } switch(event.type) @@ -259,7 +261,18 @@ GameSession::process_events() if (Menu::current()) { Menu::current()->event(event); - st_pause_ticks_start(); + 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); } else { @@ -424,6 +437,7 @@ GameSession::check_end_conditions() last_x_pos = -1; music_manager->play_music(level_end_song, 0); endsequence_timer.start(7000); + tux->invincible_timer.start(7000); //FIXME: Implement a winning timer for the end sequence (with special winning animation etc.) } else if(end_sequence && !endsequence_timer.check()) { @@ -440,11 +454,11 @@ GameSession::check_end_conditions() last_x_pos = -1; music_manager->play_music(level_end_song, 0); endsequence_timer.start(7000); // 5 seconds until we finish the map + tux->invincible_timer.start(7000); //FIXME: Implement a winning timer for the end sequence (with special winning animation etc.) } else if (!end_sequence && tux->is_dead()) { player_status.bonus = PlayerStatus::NO_BONUS; - player_status.lives -= 1; if (player_status.lives < 0) { // No more lives!? @@ -546,7 +560,6 @@ GameSession::run() draw(); - float overlap = 0.0f; while (exit_status == NONE) { /* Calculate the movement-factor */ @@ -569,19 +582,12 @@ GameSession::run() // determistic and not different on different machines if(!game_pause && !Menu::current()) { - frame_ratio *= game_speed; - frame_ratio += overlap; - while (frame_ratio > 0) - { - // Update the world - check_end_conditions(); - if (end_sequence == ENDSEQUENCE_RUNNING) - action(.5f); - else if(end_sequence == NO_ENDSEQUENCE) - action(1.0f); - frame_ratio -= 1.0f; - } - overlap = frame_ratio; + // Update the world + check_end_conditions(); + if (end_sequence == ENDSEQUENCE_RUNNING) + action(frame_ratio/2); + else if(end_sequence == NO_ENDSEQUENCE) + action(frame_ratio); } else {