From e14336bad9e3ac6cb6264b4de35896ba206c0859 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 14 Jul 2025 08:49:41 +0200 Subject: [PATCH] =?UTF-8?q?new:=20el=20joc=20es=20pausa=20si=20traus=20el?= =?UTF-8?q?=20menu=20de=20servei=20(de=20paso=20serveix=20com=20a=20bot?= =?UTF-8?q?=C3=B3=20de=20pausa=20per=20a=20la=20recre,=20que=20no=20en=20t?= =?UTF-8?q?enia)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/director.cpp | 2 +- source/sections/game.cpp | 47 ++++++++++++++++++++++++---------------- source/sections/game.h | 21 +++++++++--------- 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/source/director.cpp b/source/director.cpp index 6f36cbe..689c72d 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -49,7 +49,7 @@ Director::Director(int argc, const char *argv[]) Section::name = Section::Name::GAME; Section::options = Section::Options::GAME_PLAY_1P; #elif DEBUG - Section::name = Section::Name::GAME; + Section::name = Section::Name::TITLE; Section::options = Section::Options::GAME_PLAY_1P; #else // NORMAL GAME Section::name = Section::Name::LOGO; diff --git a/source/sections/game.cpp b/source/sections/game.cpp index ec1885a..99d3f6f 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -977,6 +977,7 @@ void Game::update() { ticks_ = SDL_GetTicks(); + checkServiceMenu(); updateDemo(); #ifdef RECORDING updateRecording(); @@ -1366,25 +1367,6 @@ void Game::checkInput() // Verifica los inputs globales. GlobalInputs::check(); - - // Comprueba si se ha activado/desactivado el menu de servcicio para poner/quitar la pausa - // Debe ir despues de GlobalInputs::check() que es el que activa/desactiva el menu de servicio - if (Input::get()->checkInput(InputAction::SERVICE, INPUT_DO_NOT_ALLOW_REPEAT)) - { - static bool wasPausedBeforeServiceMenu = false; - - if (ServiceMenu::get()->isEnabled()) - { - // Guardamos el estado actual antes de modificarlo - wasPausedBeforeServiceMenu = paused_; - pause(true); - } - else - { - // Restauramos el estado anterior - pause(wasPausedBeforeServiceMenu); - } - } } // Verifica si alguno de los controladores ha solicitado una pausa y actualiza el estado de pausa del juego. @@ -2068,6 +2050,33 @@ void Game::movePlayersToFront() players_to_reorder.clear(); } +// Comprueba si está activo el menu de servicio para poner el juego en pausa +void Game::checkServiceMenu() +{ + if (demo_.enabled) + return; + + static bool was_paused_before_service_menu = false; + static bool service_menu_was_active = false; + + bool service_menu_is_active = ServiceMenu::get()->isEnabled(); + + if (service_menu_is_active && !service_menu_was_active) + { + // El menú acaba de abrirse + was_paused_before_service_menu = paused_; + pause(true); + } + else if (!service_menu_is_active && service_menu_was_active) + { + // El menú acaba de cerrarse + pause(was_paused_before_service_menu); + } + + service_menu_was_active = service_menu_is_active; +} + + #ifdef DEBUG // Comprueba los eventos en el modo DEBUG void Game::checkDebugEvents(const SDL_Event &event) diff --git a/source/sections/game.h b/source/sections/game.h index 6986690..5fcde3f 100644 --- a/source/sections/game.h +++ b/source/sections/game.h @@ -144,16 +144,16 @@ private: bool coffee_machine_enabled_ = false; // Indica si hay una máquina de café en el terreno de juego bool hi_score_achieved_ = false; // Indica si se ha superado la puntuación máxima bool paused_ = false; // Indica si el juego está pausado (no se deberia de poder utilizar en el modo arcade) - //bool paused_by_service_menu_ = false; - float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad - int counter_ = 0; // Contador para el juego - int game_completed_counter_ = 0; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos - int game_over_counter_ = GAME_OVER_COUNTER_; // Contador para el estado de fin de partida - int time_stopped_counter_ = 0; // Temporizador para llevar la cuenta del tiempo detenido - int total_power_to_complete_game_; // La suma del poder necesario para completar todas las fases - int menace_current_ = 0; // Nivel de amenaza actual - int menace_threshold_ = 0; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el número de globos - GameState state_ = GameState::FADE_IN; // Estado + // bool paused_by_service_menu_ = false; + float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad + int counter_ = 0; // Contador para el juego + int game_completed_counter_ = 0; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos + int game_over_counter_ = GAME_OVER_COUNTER_; // Contador para el estado de fin de partida + int time_stopped_counter_ = 0; // Temporizador para llevar la cuenta del tiempo detenido + int total_power_to_complete_game_; // La suma del poder necesario para completar todas las fases + int menace_current_ = 0; // Nivel de amenaza actual + int menace_threshold_ = 0; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el número de globos + GameState state_ = GameState::FADE_IN; // Estado std::vector> players_to_reorder; #ifdef DEBUG @@ -245,6 +245,7 @@ private: void checkAndUpdateBalloonSpeed(); // Actualiza la velocidad de los globos en funcion del poder acumulado de la fase void setState(GameState state); // Cambia el estado del juego void movePlayersToFront(); // Organiza los jugadores para que los vivos se pinten sobre los muertos + void checkServiceMenu(); // Comprueba si está activo el menu de servicio para poner el juego en pausa #ifdef RECORDING void updateRecording(); // Actualiza las variables durante el modo de grabación #endif