diff --git a/source/player.cpp b/source/player.cpp index 16f9499..948bef2 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -196,7 +196,10 @@ void Player::handlePlayingMovement(float delta_time) { } void Player::handleRecoverMovement() { - if (player_sprite_->getCurrentAnimationFrame() == 10) { playSound("voice_recover.wav"); } + if (player_sprite_->getCurrentAnimationFrame() == 10 && !recover_sound_triggered_) { + playSound("voice_recover.wav"); + recover_sound_triggered_ = true; + } if (player_sprite_->animationIsCompleted()) { setPlayingState(State::RESPAWNING); } } @@ -559,6 +562,7 @@ void Player::setPlayingState(State state) { switch (playing_state_) { case State::RECOVER: { + recover_sound_triggered_ = false; score_ = 0; // Pon los puntos a cero para que no se vea en el marcador score_multiplier_ = 1.0F; setScoreboardMode(Scoreboard::Mode::SCORE); diff --git a/source/player.hpp b/source/player.hpp index 742e1c4..6ea1cc6 100644 --- a/source/player.hpp +++ b/source/player.hpp @@ -190,7 +190,6 @@ class Player { [[nodiscard]] auto getZOrder() const -> size_t { return z_order_; } void setZOrder(size_t z_order) { z_order_ = z_order; } - // Puntuación y juego [[nodiscard]] auto getScore() const -> int { return score_; } [[nodiscard]] auto getScoreMultiplier() const -> float { return score_multiplier_; } @@ -328,6 +327,7 @@ class Player { bool demo_ = false; // Para que el jugador sepa si está en el modo demostración bool game_completed_ = false; // Indica si ha completado el juego bool uses_keyboard_ = false; // Indica si usa el teclado como dispositivo de control + bool recover_sound_triggered_ = false; // Indica si ya ha sonado el sonido en el estado RECOVER // --- Métodos internos --- void shiftColliders(); // Actualiza el círculo de colisión a la posición del jugador