diff --git a/source/player.cpp b/source/player.cpp index 2838985..cb0c551 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -182,11 +182,22 @@ void Player::move() // Si el cadaver toca el suelo cambia el estado if (player_sprite_->getPosY() > param.game.play_area.rect.h - HEIGHT_) { - setPlayingState(PlayerState::DIED); - pos_x_ = player_sprite_->getPosX(); - pos_y_ = default_pos_y_; - player_sprite_->clear(); - shiftSprite(); + if (player_sprite_->getVelY() < 2.0f) + { + // Si la velocidad de rebote es baja, termina de rebotar y cambia de estado + setPlayingState(PlayerState::DIED); + pos_x_ = player_sprite_->getPosX(); + pos_y_ = default_pos_y_; + player_sprite_->clear(); + shiftSprite(); + } + else + { + // Decrementa las velocidades de rebote + player_sprite_->setPosY(param.game.play_area.rect.h - HEIGHT_); + player_sprite_->setVelY(player_sprite_->getVelY() * -0.5f); + player_sprite_->setVelX(player_sprite_->getVelX() * 0.75f); + } } break; }