new: el jugador explota els globos per contacte si estos estan parats

This commit is contained in:
2025-07-14 14:08:08 +02:00
parent de560ee7e2
commit 3d26a3022c
5 changed files with 36 additions and 17 deletions

View File

@@ -210,14 +210,26 @@ void Game::updatePlayers()
if (player->isPlaying())
{
// Comprueba la colisión entre el jugador y los globos
if (checkPlayerBalloonCollision(player))
{
handlePlayerCollision(player);
auto balloon = checkPlayerBalloonCollision(player);
if (demo_.enabled && allPlayersAreNotPlaying())
// Si hay colisión
if (balloon)
{
// Si el globo está parado y el temporizador activo, lo explota
if (balloon->isStopped() && time_stopped_counter_ > 0)
{
fade_out_->setType(FadeType::RANDOM_SQUARE);
fade_out_->activate();
balloon_manager_->popBalloon(balloon);
}
// En caso contrario, el jugador ha sido golpeado por un globo activo
else
{
handlePlayerCollision(player);
if (demo_.enabled && allPlayersAreNotPlaying())
{
fade_out_->setType(FadeType::RANDOM_SQUARE);
fade_out_->activate();
}
}
}
@@ -443,20 +455,20 @@ void Game::destroyAllItems()
}
// Comprueba la colisión entre el jugador y los globos activos
bool Game::checkPlayerBalloonCollision(std::shared_ptr<Player> &player)
std::shared_ptr<Balloon> Game::checkPlayerBalloonCollision(std::shared_ptr<Player> &player)
{
for (auto &balloon : balloon_manager_->getBalloons())
{
if (!balloon->isStopped() && !balloon->isInvulnerable() && !balloon->isPowerBall())
if (!balloon->isInvulnerable() && !balloon->isPowerBall())
{
if (checkCollision(player->getCollider(), balloon->getCollider()))
{
return true;
return balloon; // Devuelve el globo con el que se ha producido la colisión
}
}
}
return false;
return nullptr; // No se ha producido ninguna colisión
}
// Comprueba la colisión entre el jugador y los items