fix: la inmunitat del jugador no funcionava

This commit is contained in:
2024-07-25 18:13:34 +02:00
parent cff1df19c2
commit 18eab9fe0d
3 changed files with 24 additions and 32 deletions

View File

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

View File

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

View File

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