#pragma once #include #include "jail_engine/animatedsprite.h" #include "jail_engine/asset.h" #include "jail_engine/utils.h" #include #ifndef ENEMY_H #define ENEMY_H using namespace std; // Estructura para pasar los datos de un enemigo struct enemy_t { SDL_Renderer *renderer; // El renderizador de la ventana animatedSprite_t *animation; // Puntero a las animaciones del enemigo string animationString; // 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 string color; // Color del enemigo palette_e palette; // Paleta de colores }; class Enemy { private: // Objetos y punteros AnimatedSprite *sprite; // Sprite del enemigo // Variables color_t color; // Color del enemigo string colorString; // Color del enemigo en formato texto palette_e palette; // Paleta de colores 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_Rect collider; // Caja de colisión bool doFlip; // Indica si el enemigo hace flip al terminar su ruta bool 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 Enemy(enemy_t enemy); // Destructor ~Enemy(); // Pinta el enemigo en pantalla void render(); // Actualiza las variables del objeto void update(); // Devuelve el rectangulo que contiene al enemigo SDL_Rect getRect(); // Obtiene el rectangulo de colision del enemigo SDL_Rect &getCollider(); // Recarga la textura void reLoadTexture(); // Asigna la paleta void setPalette(palette_e pal); }; #endif