#include "game/entities/path_enemy.hpp" #include "core/rendering/sprite/animated_sprite.hpp" // Para AnimatedSprite // Constructor: delega al base y almacena boundaries PathEnemy::PathEnemy(const Data& data) : Enemy(data), x1_(data.x1), x2_(data.x2), y1_(data.y1), y2_(data.y2) { } // Actualiza posición y animación del enemigo void PathEnemy::update(float delta_time) { sprite_->update(delta_time); checkPath(); collider_ = getRect(); } #ifdef _DEBUG // Resetea el enemigo a su posición inicial (para editor) void PathEnemy::resetToInitialPosition(const Data& data) { sprite_->setPosX(data.x); sprite_->setPosY(data.y); sprite_->setVelX(data.vx); sprite_->setVelY(data.vy); x1_ = data.x1; x2_ = data.x2; y1_ = data.y1; y2_ = data.y2; applyFlipMirror(data.vx); collider_ = getRect(); } #endif // Comprueba si ha llegado al limite del recorrido para darse media vuelta void PathEnemy::checkPath() { // NOLINT(readability-make-member-function-const) if (sprite_->getPosX() > x2_ || sprite_->getPosX() < x1_) { // Recoloca if (sprite_->getPosX() > x2_) { sprite_->setPosX(x2_); } else { sprite_->setPosX(x1_); } // Cambia el sentido sprite_->setVelX(sprite_->getVelX() * (-1)); // Invierte el sprite if (should_flip_) { sprite_->flip(); } } if (sprite_->getPosY() > y2_ || sprite_->getPosY() < y1_) { // Recoloca if (sprite_->getPosY() > y2_) { sprite_->setPosY(y2_); } else { sprite_->setPosY(y1_); } // Cambia el sentido sprite_->setVelY(sprite_->getVelY() * (-1)); // Invierte el sprite if (should_flip_) { sprite_->flip(); } } }