afegit "z-order" per als jugadors

This commit is contained in:
2025-07-13 12:08:02 +02:00
parent e882a22b3c
commit 91839b3444
2 changed files with 30 additions and 5 deletions

View File

@@ -212,7 +212,7 @@ void Game::updatePlayers()
// Comprueba la colisión entre el jugador y los globos
if (checkPlayerBalloonCollision(player))
{
killPlayer(player);
handlePlayerCollision(player);
if (demo_.enabled && allPlayersAreNotPlaying())
{
@@ -225,6 +225,9 @@ void Game::updatePlayers()
checkPlayerItemCollision(player);
}
}
// Organiza la lista de jugadores
movePlayersToFront();
}
// Dibuja a los jugadores
@@ -899,8 +902,8 @@ void Game::renderPathSprites()
}
}
// Acciones a realizar cuando el jugador muere
void Game::killPlayer(std::shared_ptr<Player> &player)
// Acciones a realizar cuando el jugador colisiona con un globo
void Game::handlePlayerCollision(std::shared_ptr<Player> &player)
{
if (!player->isPlaying() || player->isInvulnerable())
{
@@ -925,6 +928,7 @@ void Game::killPlayer(std::shared_ptr<Player> &player)
screen_->shake();
playSound("voice_no.wav");
player->setPlayingState(PlayerState::DYING);
players_to_reorder.push_back(player);
if (allPlayersAreNotPlaying())
{
// No se puede subir poder de fase si no hay nadie jugando
@@ -2026,6 +2030,26 @@ void Game::playSound(const std::string &name)
audio->playSound(name);
}
// Organiza los jugadores para que los vivos se pinten sobre los muertos
void Game::movePlayersToFront()
{
if (players_to_reorder.empty())
return;
for (auto& player : players_to_reorder)
{
auto it = std::find(players_.begin(), players_.end(), player);
if (it != players_.end() && it != players_.begin())
{
std::shared_ptr<Player> dyingPlayer = *it;
players_.erase(it);
players_.insert(players_.begin(), dyingPlayer);
}
}
players_to_reorder.clear();
}
#ifdef DEBUG
// Comprueba los eventos en el modo DEBUG
void Game::checkDebugEvents(const SDL_Event &event)