new: el joc es pausa si traus el menu de servei (de paso serveix com a botó de pausa per a la recre, que no en tenia)

This commit is contained in:
2025-07-14 08:49:41 +02:00
parent 7340b349b1
commit e14336bad9
3 changed files with 40 additions and 30 deletions

View File

@@ -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;

View File

@@ -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)

View File

@@ -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<std::shared_ptr<Player>> 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