#pragma once #include // Para Uint8 #include // Para shared_ptr, unique_ptr #include "sprite.h" // Para Sprite #include "utils.h" // Para Circle class Texture; // lines 8-8 // Tipos de balas enum class BulletType : Uint8 { UP, LEFT, RIGHT, NONE }; // Resultado del movimiento de la bala enum class BulletMoveStatus : Uint8 { OK = 0, OUT = 1 }; // Clase Bullet class Bullet { private: // Constantes static constexpr int BULLET_WIDTH_ = 12; static constexpr int BULLET_HEIGHT_ = 12; static constexpr int BULLET_VEL_Y_ = -3; static constexpr int BULLET_VEL_X_LEFT_ = -2; static constexpr int BULLET_VEL_X_RIGHT_ = 2; std::unique_ptr sprite_; // Sprite con los gráficos y métodos de pintado int pos_x_; // Posición en el eje X int pos_y_; // Posición en el eje Y int vel_x_; // Velocidad en el eje X BulletType bullet_type_; // Tipo de objeto int owner_; // Identificador del dueño del objeto Circle collider_; // Círculo de colisión del objeto void shiftColliders(); // Alinea el círculo de colisión con el objeto void shiftSprite(); // Alinea el sprite con el objeto public: // Constructor Bullet(int x, int y, BulletType bullet_type, bool powered_up, int owner, std::shared_ptr texture); // Destructor ~Bullet() = default; // Pinta el objeto en pantalla void render(); // Actualiza la posición y estado del objeto BulletMoveStatus move(); // Comprueba si el objeto está habilitado bool isEnabled() const; // Deshabilita el objeto void disable(); // Obtiene parámetros int getOwner() const; Circle &getCollider(); };