#pragma once #include #include // for uint8_t #include "utils/utils.h" // for Circle class Sprite; class Texture; // Clase Bullet class Bullet { public: // Tipus de bala. Enum class fortament tipat per evitar confusió accidental // amb altres `int`/`Uint8` (p.ex. el `owner` a `createBullet`). enum class Kind : std::uint8_t { NONE = 0, // bala desactivada / fora de pantalla UP = 1, LEFT = 2, RIGHT = 3, }; // Resultado de Bullet::move() enum class MoveResult : std::uint8_t { OK = 0, OUT = 1, }; Bullet(int x, int y, Kind kind, bool powered_up, int owner, Texture *texture, SDL_Renderer *renderer); // Constructor ~Bullet(); // Destructor Bullet(const Bullet &) = delete; auto operator=(const Bullet &) -> Bullet & = delete; void render(); // Pinta el objeto en pantalla auto move() -> MoveResult; // Actualiza la posición y estado del objeto void disable(); // Deshabilita el objeto [[nodiscard]] auto isEnabled() const -> bool; // Comprueba si el objeto está habilitado [[nodiscard]] auto getPosX() const -> int; // Obtiene el valor de la variable [[nodiscard]] auto getPosY() const -> int; // Obtiene el valor de la variable [[nodiscard]] auto getVelY() const -> int; // Obtiene el valor de la variable [[nodiscard]] auto getKind() const -> Kind; // Obtiene el valor de la variable [[nodiscard]] auto getOwner() const -> int; // Obtiene el valor de la variable void setPosX(int x); // Establece el valor de la variable void setPosY(int y); // Establece el valor de la variable auto getCollider() -> Circle &; // Obtiene el circulo de colisión private: // Objetos y punteros Sprite *sprite_; // Sprite con los graficos y métodos de pintado // Variables int pos_x_; // Posición en el eje X int pos_y_; // Posición en el eje Y Uint8 width_; // Ancho del objeto Uint8 height_; // Alto del objeto int vel_x_; // Velocidad en el eje X int vel_y_; // Velocidad en el eje Y Kind kind_; // Tipo de objeto int owner_; // Identificador del dueño del objeto Circle collider_; // Circulo de colisión del objeto void shiftColliders(); // Alinea el circulo de colisión con el objeto };