diff --git a/data/gfx/player/player.ani b/data/gfx/player/player.ani index 9fff605..7f4f078 100644 --- a/data/gfx/player/player.ani +++ b/data/gfx/player/player.ani @@ -45,7 +45,7 @@ frames=20,21,22,23 [animation] name=death -speed=15 +speed=10 loop=0 frames=24,25,26,27 [/animation] \ No newline at end of file diff --git a/source/player.cpp b/source/player.cpp index 20b255d..6235882 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -175,39 +175,27 @@ void Player::move() // Mueve el jugador a derecha o izquierda pos_x_ += vel_x_; - // Si el jugador abandona el area de juego por los laterales - if ((pos_x_ < param.game.play_area.rect.x - 5) || (pos_x_ + WIDTH_ > play_area_.w + 5)) - { - // Restaura su posición - pos_x_ -= vel_x_; - } + // Si el jugador abandona el area de juego por los laterales, restaura su posición + const float min_x = param.game.play_area.rect.x - 5; + const float max_x = play_area_.w + 5 - WIDTH_; + if ((pos_x_ < min_x) || (pos_x_ > max_x)) + pos_x_ = std::clamp(pos_x_, min_x, max_x); // Actualiza la posición del sprite - player_sprite_->setPosX(getPosX()); + player_sprite_->setPosX(pos_x_); player_sprite_->setPosY(pos_y_); power_sprite_->setPosX(getPosX() - power_up_desp_x_); } else if (isDying()) { - player_sprite_->update(); - - // Si el cadaver abandona el area de juego por los laterales + // Si el cadaver abandona el area de juego por los laterales lo hace rebotar if ((player_sprite_->getPosX() < param.game.play_area.rect.x) || (player_sprite_->getPosX() + WIDTH_ > play_area_.w)) - { - // Restaura su posición - const float vx = player_sprite_->getVelX(); - player_sprite_->setPosX(player_sprite_->getPosX() - vx); - - // Rebota - player_sprite_->setVelX(-vx); - } + player_sprite_->setVelX(-player_sprite_->getVelX()); // Si el cadaver abandona el area de juego por abajo if (player_sprite_->getPosY() > param.game.play_area.rect.h) - { setStatusPlaying(PlayerStatus::DIED); - } } } @@ -215,12 +203,8 @@ void Player::move() void Player::render() { if (power_up_ && isPlaying()) - { if (power_up_counter_ > (POWERUP_COUNTER_ / 4) || power_up_counter_ % 20 > 4) - { power_sprite_->render(); - } - } if (isRenderable()) player_sprite_->render(); @@ -270,16 +254,14 @@ void Player::setAnimation() } // Actualiza las animaciones de los sprites - player_sprite_->update(); - - // powerSprite->setFlip(flip_walk); + player_sprite_->update(); // Hace avanzar las animaciones y mueve el cadaver del jugador power_sprite_->update(); } // Obtiene el valor de la variable int Player::getPosX() const { - return int(pos_x_); + return static_cast(pos_x_); } // Obtiene el valor de la variable