new: ja es pot començar el joc els dos jugador a l'hora

new: feedback visual per a saber qui ha pulsat start en la pantalla de titol
Player: afegit estat RESPAWNING per no tindre que estar fent cabrioles amb la invulnerabilitat al crear als jugadors
This commit is contained in:
2025-07-14 11:41:12 +02:00
parent e14336bad9
commit 31910b8a74
9 changed files with 309 additions and 112 deletions

View File

@@ -927,7 +927,7 @@ void Game::handlePlayerCollision(std::shared_ptr<Player> &player)
playSound("player_collision.wav");
screen_->shake();
playSound("voice_no.wav");
player->setPlayingState(PlayerState::DYING);
player->setPlayingState(PlayerState::ROLLING);
players_to_reorder.push_back(player);
if (allPlayersAreNotPlaying())
{
@@ -1586,9 +1586,7 @@ void Game::handlePlayerContinue(const std::shared_ptr<Player> &player)
const auto controllerIndex = player->getController();
if (input_->checkInput(InputAction::START, INPUT_DO_NOT_ALLOW_REPEAT, Options::controllers[controllerIndex].type, Options::controllers[controllerIndex].index))
{
player->setPlayingState(PlayerState::PLAYING);
player->addCredit();
playSound("voice_thankyou.wav");
player->setPlayingState(PlayerState::RESPAWNING);
}
// Disminuye el contador de continuación si se presiona cualquier botón de disparo.
@@ -1799,10 +1797,17 @@ void Game::initPlayers(int player_id)
players_.back()->setName(Lang::getText("[SCOREBOARD] 2"));
players_.back()->setController(getController(players_.back()->getId()));
// Activa el jugador que coincide con el "player_id"
auto player = getPlayer(player_id);
player->setPlayingState((demo_.enabled) ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
player->setInvulnerable(false);
// Activa el jugador que coincide con el "player_id" o ambos si es "0"
if (player_id == 0)
{
// Activa ambos jugadores
getPlayer(1)->setPlayingState(demo_.enabled ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
getPlayer(2)->setPlayingState(demo_.enabled ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
}
else
{
getPlayer(player_id)->setPlayingState(demo_.enabled ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
}
}
// Hace sonar la música
@@ -2053,30 +2058,29 @@ void Game::movePlayersToFront()
// Comprueba si está activo el menu de servicio para poner el juego en pausa
void Game::checkServiceMenu()
{
if (demo_.enabled)
return;
if (demo_.enabled)
return;
static bool was_paused_before_service_menu = false;
static bool service_menu_was_active = false;
static bool was_paused_before_service_menu = false;
static bool service_menu_was_active = false;
bool service_menu_is_active = ServiceMenu::get()->isEnabled();
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);
}
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;
service_menu_was_active = service_menu_is_active;
}
#ifdef DEBUG
// Comprueba los eventos en el modo DEBUG
void Game::checkDebugEvents(const SDL_Event &event)