polimorfise d'enemics

moving platforms
This commit is contained in:
2026-04-08 14:09:28 +02:00
parent 5e02854e7a
commit 73a520bf3c
20 changed files with 632 additions and 106 deletions

View File

@@ -10,6 +10,7 @@ class AnimatedSprite;
class Enemy {
public:
struct Data {
std::string type{"path"}; // Tipo de enemigo (path, etc.)
std::string animation_path; // Ruta al fichero con la animación
float x{0.0F}; // Posición inicial en el eje X
float y{0.0F}; // Posición inicial en el eje Y
@@ -25,30 +26,26 @@ class Enemy {
};
explicit Enemy(const Data& enemy); // Constructor
~Enemy() = default; // Destructor
virtual ~Enemy() = default; // Destructor virtual
void render(); // Pinta el enemigo en pantalla
void update(float delta_time); // Actualiza las variables del objeto
virtual void render(); // Pinta el enemigo en pantalla
virtual void update(float delta_time) = 0; // Actualiza las variables del objeto (pura virtual)
#ifdef _DEBUG
void updateAnimation(float delta_time); // Solo actualiza la animación sin mover al enemigo
void resetToInitialPosition(const Data& data); // Resetea el enemigo a su posición inicial (para editor)
virtual void updateAnimation(float delta_time); // Solo actualiza la animación sin mover al enemigo
virtual void resetToInitialPosition(const Data& data) = 0; // Resetea a posición inicial (pura virtual)
#endif
auto getRect() -> SDL_FRect; // Devuelve el rectangulo que contiene al enemigo
auto getCollider() -> SDL_FRect&; // Obtiene el rectangulo de colision del enemigo
private:
// Factory: crea el subtipo de enemigo correcto según data.type
static auto create(const Data& data) -> std::shared_ptr<Enemy>;
protected:
void applyFlipMirror(float vx); // Aplica flip horizontal y/o mirror vertical al sprite
void checkPath(); // Comprueba si ha llegado al limite del recorrido para darse media vuelta
std::shared_ptr<AnimatedSprite> sprite_; // Sprite del enemigo
// Variables
int x1_{0}; // Limite izquierdo de la ruta en el eje X
int x2_{0}; // Limite derecho de la ruta en el eje X
int y1_{0}; // Limite superior de la ruta en el eje Y
int y2_{0}; // Limite inferior de la ruta en el eje Y
SDL_FRect collider_{}; // Caja de colisión
bool should_flip_{false}; // Indica si el enemigo hace flip al terminar su ruta
bool should_mirror_{false}; // Indica si el enemigo se dibuja volteado verticalmente
SDL_FRect collider_{}; // Caja de colisión
bool should_flip_{false}; // Indica si el enemigo hace flip al terminar su ruta
bool should_mirror_{false}; // Indica si el enemigo se dibuja volteado verticalmente
};