#pragma once #include #include // Para shared_ptr #include // Para string class SurfaceAnimatedSprite; // lines 7-7 class Enemy { public: // --- Estructuras --- struct Data { std::string surface_path{}; // Ruta al fichero con la textura std::string animation_path{}; // Ruta al fichero con la animación /* [DOC:29/10/2025] w i h ja no fan falta, se pilla del .ANI int w = 0; // Anchura del enemigo int h = 0; // Altura del enemigo [/DOC] */ 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 // Constructor por defecto Data() = default; }; // --- Constructor y Destructor --- explicit Enemy(const Data& enemy); ~Enemy() = default; // --- Funciones --- 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: // --- 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(); };