From 804159597671b128381674a322f4097d08271551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Fri, 14 Oct 2022 10:44:50 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20contador=20al=20quitar=20el=20me?= =?UTF-8?q?nu=20de=20pausa=20del=20juego?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/game.cpp | 115 +++++++++++++++++++++++++++++++++--------------- source/game.h | 9 ++-- 2 files changed, 84 insertions(+), 40 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index 4ff7372..8e5c917 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -273,6 +273,8 @@ void Game::init() powerBallEnabled = false; powerBallCounter = 0; coffeeMachineEnabled = false; + pauseCounter = 0; + leavingPauseMenu = false; if (demo.enabled) { @@ -3073,11 +3075,6 @@ void Game::checkGameInput() if (input->checkInput(INPUT_CANCEL, REPEAT_FALSE, options->input[i].deviceType, options->input[i].id)) { section.subsection = GAME_SECTION_PAUSE; - - if (JA_GetMusicState() == JA_MUSIC_PLAYING) - { - JA_PauseMusic(); - } } if (demo.counter < TOTAL_DEMO_DATA) @@ -3289,41 +3286,61 @@ void Game::updatePausedGame() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza la lógica del menu de pausa - pauseMenu->update(); - - // Comprueba las entradas para el menu - pauseMenu->checkInput(); - - // Comprueba si se ha seleccionado algún item del menú - switch (pauseMenu->getItemSelected()) + if (leavingPauseMenu) { - case 1: - section.name = PROG_SECTION_GAME; - section.subsection = numPlayers == 1 ? GAME_SECTION_PLAY_1P : GAME_SECTION_PLAY_2P; - - if (JA_GetMusicState() == JA_MUSIC_PAUSED) - { - JA_ResumeMusic(); + if (pauseCounter > 0) + { // El contador está descendiendo + const bool a = pauseCounter == 90; + const bool b = pauseCounter == 60; + const bool c = pauseCounter == 30; + if (a || b || c) + { + JA_PlaySound(clockSound); + } + pauseCounter--; } - break; + else + { // Ha finalizado el contador + section.name = PROG_SECTION_GAME; + section.subsection = numPlayers == 1 ? GAME_SECTION_PLAY_1P : GAME_SECTION_PLAY_2P; - case 2: - fade->setFadeType(FADE_CENTER); - fade->activateFade(); - break; - - default: - break; + if (JA_GetMusicState() == JA_MUSIC_PAUSED) + { + JA_ResumeMusic(); + } + } } + else + { // Actualiza la lógica del menu de pausa + pauseMenu->update(); - // Actualiza el fade - fade->update(); - if (fade->hasEnded()) - { - section.name = PROG_SECTION_TITLE; - section.subsection = TITLE_SECTION_1; - JA_StopMusic(); + // Comprueba las entradas para el menu + pauseMenu->checkInput(); + + // Comprueba si se ha seleccionado algún item del menú + switch (pauseMenu->getItemSelected()) + { + case 1: + leavingPauseMenu = true; + break; + + case 2: + fade->setFadeType(FADE_CENTER); + fade->activateFade(); + break; + + default: + break; + } + + // Actualiza el fade + fade->update(); + if (fade->hasEnded()) + { + section.name = PROG_SECTION_TITLE; + section.subsection = TITLE_SECTION_1; + JA_StopMusic(); + } } } } @@ -3361,7 +3378,14 @@ void Game::renderPausedGame() renderFlashEffect(); } - pauseMenu->render(); + if (leavingPauseMenu) + { + textNokiaBig2->writeCentered(SCREEN_CENTER_X, PLAY_AREA_FIRST_QUARTER_Y, std::to_string((pauseCounter / 30) + 1)); + } + else + { + pauseMenu->render(); + } fade->render(); // Vuelca el contenido del renderizador en pantalla @@ -3371,8 +3395,18 @@ void Game::renderPausedGame() // Bucle para el menu de pausa del juego void Game::runPausedGame() { + // Pone en pausa la música + if (JA_GetMusicState() == JA_MUSIC_PLAYING) + { + JA_PauseMusic(); + } + // Reinicia el menu pauseMenu->reset(); + leavingPauseMenu = false; + + // Inicializa variables + pauseCounter = 90; while ((section.subsection == GAME_SECTION_PAUSE) && (section.name == PROG_SECTION_GAME)) { @@ -3715,6 +3749,15 @@ void Game::checkEventHandler() section.name = PROG_SECTION_QUIT; break; } + + else if (eventHandler->type == SDL_WINDOWEVENT) + { + if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_LOST) + { + section.subsection = GAME_SECTION_PAUSE; + } + } + else if (eventHandler->type == SDL_KEYDOWN && eventHandler->key.repeat == 0) { switch (eventHandler->key.keysym.scancode) diff --git a/source/game.h b/source/game.h index 9eb03eb..f7e0b78 100644 --- a/source/game.h +++ b/source/game.h @@ -193,10 +193,9 @@ private: JA_Music gameMusic; // Musica de fondo // Variables - int numPlayers; // Numero de jugadores - Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa - Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa - + int numPlayers; // Numero de jugadores + Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa + Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 hiScore; // Puntuación máxima bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima section_t section; // Seccion actual dentro del juego @@ -236,6 +235,8 @@ private: demo_t demo; // Variable con todas las variables relacionadas con el modo demo int totalPowerToCompleteGame; // La suma del poder necesario para completar todas las fases int cloudsSpeed; // Velocidad a la que se desplazan las nubes + int pauseCounter; // Contador para salir del menu de pausa y volver al juego + bool leavingPauseMenu; // Indica si esta saliendo del menu de pausa para volver al juego // Actualiza el juego void update();