From 18eab9fe0d0b1f235cff68fc973a5bef2b40d9e9 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 25 Jul 2024 18:13:34 +0200 Subject: [PATCH] fix: la inmunitat del jugador no funcionava --- source/game.cpp | 18 +++++++++--------- source/player.cpp | 32 ++++++++++++-------------------- source/player.h | 6 +++--- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index 9373531..ba63ae2 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -311,16 +311,16 @@ void Game::init(int playerID) players[otherPlayer - 1]->enable(true); } - // Añade 0, 1 o 2 cafes al jugador 1 - for (int i = 0; i < rand() % 3; ++i) + for (auto player : players) { - players[0]->giveExtraHit(); - } + // Añade 0, 1 o 2 cafes al jugador + for (int i = 0; i < rand() % 3; ++i) + { + player->giveExtraHit(); + } - // Añade 0, 1 o 2 cafes al jugador 2 - for (int i = 0; i < rand() % 3; ++i) - { - players[1]->giveExtraHit(); + // Empieza sin inmunidad + player->setInvulnerable(false); } // Deshabilita los sonidos @@ -2453,7 +2453,7 @@ void Game::renderSmartSprites() // Acciones a realizar cuando el jugador muere void Game::killPlayer(Player *player) { - if (!player->isEnabled() && player->isInvulnerable()) + if (!player->isEnabled() || player->isInvulnerable()) { // Si no está habilitado o tiene inmunidad, no hace nada return; } diff --git a/source/player.cpp b/source/player.cpp index 5e26706..77f3e50 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -281,11 +281,7 @@ void Player::update() shiftColliders(); updateCooldown(); updatePowerUpCounter(); - updateInvulnerableCounter(); - if (invulnerable) - { - invulnerableCounter % 8 > 3 ? playerSprite->getTexture()->setPalette(coffees) : playerSprite->getTexture()->setPalette(3); - } + updateInvulnerable(); } // Obtiene la puntuación del jugador @@ -360,10 +356,11 @@ bool Player::isInvulnerable() return invulnerable; } -// Establece el valor de la variable +// Establece el valor del estado void Player::setInvulnerable(bool value) { invulnerable = value; + invulnerableCounter = invulnerable ? PLAYER_INVULNERABLE_COUNTER : 0; } // Obtiene el valor de la variable @@ -378,20 +375,20 @@ void Player::setInvulnerableCounter(int value) invulnerableCounter = value; } -// Actualiza el valor de la variable -void Player::updateInvulnerableCounter() +// Monitoriza el estado +void Player::updateInvulnerable() { if (invulnerable) { if (invulnerableCounter > 0) { invulnerableCounter--; + invulnerableCounter % 8 > 3 ? playerSprite->getTexture()->setPalette(coffees) : playerSprite->getTexture()->setPalette(3); } else { - invulnerable = false; - invulnerableCounter = PLAYER_INVULNERABLE_COUNTER; - playerSprite->getTexture()->setPalette(0); + setInvulnerable(false); + playerSprite->getTexture()->setPalette(coffees); } } } @@ -448,8 +445,8 @@ void Player::giveExtraHit() if (coffees < 2) { coffees++; + playerSprite->getTexture()->setPalette(coffees); } - playerSprite->getTexture()->setPalette(coffees); } // Quita el toque extra al jugador @@ -458,16 +455,11 @@ void Player::removeExtraHit() if (coffees > 0) { coffees--; + setInvulnerable(true); + playerSprite->getTexture()->setPalette(coffees); } - if (coffees == 0) - { - extraHit = false; - } - - invulnerable = true; - invulnerableCounter = PLAYER_INVULNERABLE_COUNTER; - playerSprite->getTexture()->setPalette(coffees); + extraHit = coffees == 0 ? false : true; } // Habilita la entrada de ordenes diff --git a/source/player.h b/source/player.h index 45c9358..9dc4333 100644 --- a/source/player.h +++ b/source/player.h @@ -69,8 +69,8 @@ private: // Actualiza el circulo de colisión a la posición del jugador void shiftColliders(); - // Actualiza el valor de la variable - void updateInvulnerableCounter(); + // Monitoriza el estado + void updateInvulnerable(); public: @@ -158,7 +158,7 @@ public: // Obtiene el valor de la variable bool isInvulnerable(); - // Establece el valor de la variable + // Establece el valor del estado void setInvulnerable(bool value); // Obtiene el valor de la variable