#pragma once #include // for SDL_Rect #include // for Uint8 #include // for unique_ptr #include "sprite.h" // for Sprite #include "utils.h" // for circle_t class Texture; // lines 9-9 // Enumeración para los diferentes tipos de balas enum class BulletType { UP, LEFT, RIGHT, NULL_TYPE }; // Enumeración para los resultados del movimiento de la bala enum class BulletMoveStatus : Uint8 { OK = 0, OUT = 1 }; // Clase Bullet class Bullet { private: int posX; // Posición en el eje X int posY; // Posición en el eje Y Uint8 width; // Ancho del objeto Uint8 height; // Alto del objeto int velX; // Velocidad en el eje X int velY; // Velocidad en el eje Y BulletType kind; // Tipo de objeto int owner; // Identificador del dueño del objeto circle_t collider; // Círculo de colisión del objeto SDL_Rect *playArea; // Rectángulo con la zona de juego std::unique_ptr sprite; // Sprite con los gráficos y métodos de pintado void shiftColliders(); // Alinea el círculo de colisión con el objeto public: Bullet(int x, int y, BulletType kind, bool poweredUp, int owner, SDL_Rect *playArea, Texture *texture); ~Bullet() = default; void render(); // Pinta el objeto en pantalla BulletMoveStatus move(); // Actualiza la posición y estado del objeto bool isEnabled() const; // Comprueba si el objeto está habilitado void disable(); // Deshabilita el objeto int getPosX() const; int getPosY() const; void setPosX(int x); void setPosY(int y); int getVelY() const; BulletType getKind() const; int getOwner() const; circle_t &getCollider(); };