#pragma once #include #include // Para shared_ptr #include // Para string class SurfaceAnimatedSprite; // lines 7-7 class Enemy { public: struct Data { 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 float vx{0.0F}; // Velocidad en el eje X float vy{0.0F}; // Velocidad en el eje Y int x1{0}; // Límite izquierdo de la ruta en el eje X int x2{0}; // Límite derecho de la ruta en el eje X int y1{0}; // Límite superior de la ruta en el eje Y int y2{0}; // Límite inferior de la ruta en el eje Y bool flip{false}; // Indica si el enemigo hace flip al terminar su ruta bool mirror{false}; // Indica si el enemigo está volteado verticalmente int frame{0}; // Frame inicial para la animación del enemigo std::string color; // Color del enemigo }; explicit Enemy(const Data& enemy); // Constructor ~Enemy() = default; // Destructor void render(); // Pinta el enemigo en pantalla void update(float delta_time); // Actualiza las variables del objeto auto getRect() -> SDL_FRect; // Devuelve el rectangulo que contiene al enemigo auto getCollider() -> SDL_FRect&; // Obtiene el rectangulo de colision del enemigo private: void checkPath(); // Comprueba si ha llegado al limite del recorrido para darse media vuelta std::shared_ptr sprite_; // Sprite del enemigo // Variables Uint8 color_{0}; // Color del enemigo std::string color_string_; // Color del enemigo en formato texto 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 };