#pragma once #include #include // Para shared_ptr #include // Para string class SurfaceAnimatedSprite; // lines 7-7 // Estructura para pasar los datos de un enemigo struct EnemyData { std::string surface_path; // Ruta al fichero con la textura std::string animation_path; // Ruta al fichero con la animación int w; // Anchura del enemigo int h; // Altura del enemigo float x; // Posición inicial en el eje X float y; // Posición inicial en el eje Y float vx; // Velocidad en el eje X float vy; // Velocidad en el eje Y int x1; // Limite izquierdo de la ruta en el eje X int x2; // Limite derecho de la ruta en el eje X int y1; // Limite superior de la ruta en el eje Y int y2; // Limite inferior de la ruta en el eje Y bool flip; // Indica si el enemigo hace flip al terminar su ruta bool mirror; // Indica si el enemigo está volteado verticalmente int frame; // Frame inicial para la animación del enemigo std::string color; // Color del enemigo }; class Enemy { private: // Objetos y punteros std::shared_ptr sprite_; // Sprite del enemigo // Variables Uint8 color_; // Color del enemigo std::string color_string_; // Color del enemigo en formato texto int x1_; // Limite izquierdo de la ruta en el eje X int x2_; // Limite derecho de la ruta en el eje X int y1_; // Limite superior de la ruta en el eje Y int y2_; // Limite inferior de la ruta en el eje Y SDL_FRect collider_; // Caja de colisión bool should_flip_; // Indica si el enemigo hace flip al terminar su ruta bool should_mirror_; // Indica si el enemigo se dibuja volteado verticalmente // Comprueba si ha llegado al limite del recorrido para darse media vuelta void checkPath(); public: // Constructor explicit Enemy(const EnemyData& enemy); // Destructor ~Enemy() = default; // Pinta el enemigo en pantalla void render(); // Actualiza las variables del objeto void update(float delta_time); // Devuelve el rectangulo que contiene al enemigo auto getRect() -> SDL_FRect; // Obtiene el rectangulo de colision del enemigo auto getCollider() -> SDL_FRect&; };