Files
coffee-crisis/source/game/entities/bullet.h
T

89 lines
2.5 KiB
C++

#pragma once
#include <SDL3/SDL.h>
#include <cstdint> // for uint8_t
#include "utils/utils.h" // for Circle
class Sprite;
class Texture;
// Tipus de bala. Enum class fortament tipat per evitar confusió accidental
// amb altres `int`/`Uint8` (p.ex. el `owner` a `createBullet`).
enum class BulletKind : std::uint8_t {
NONE = 0, // bala desactivada / fora de pantalla
UP = 1,
LEFT = 2,
RIGHT = 3,
};
// Tipos de retorno de la función move de la bala
constexpr int BULLET_MOVE_OK = 0;
constexpr int BULLET_MOVE_OUT = 1;
// Clase Bullet
class Bullet {
private:
// Objetos y punteros
Sprite *sprite; // Sprite con los graficos y métodos de pintado
// Variables
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
BulletKind kind; // Tipo de objeto
int owner; // Identificador del dueño del objeto
Circle collider; // Circulo de colisión del objeto
// Alinea el circulo de colisión con el objeto
void shiftColliders();
public:
// Constructor
Bullet(int x, int y, BulletKind kind, bool poweredUp, int owner, Texture *texture, SDL_Renderer *renderer);
// Destructor
~Bullet();
Bullet(const Bullet &) = delete;
auto operator=(const Bullet &) -> Bullet & = delete;
// Pinta el objeto en pantalla
void render();
// Actualiza la posición y estado del objeto
auto move() -> Uint8;
// Comprueba si el objeto está habilitado
[[nodiscard]] auto isEnabled() const -> bool;
// Deshabilita el objeto
void disable();
// Obtiene el valor de la variable
[[nodiscard]] auto getPosX() const -> int;
// Obtiene el valor de la variable
[[nodiscard]] auto getPosY() const -> int;
// Establece el valor de la variable
void setPosX(int x);
// Establece el valor de la variable
void setPosY(int y);
// Obtiene el valor de la variable
[[nodiscard]] auto getVelY() const -> int;
// Obtiene el valor de la variable
[[nodiscard]] auto getKind() const -> BulletKind;
// Obtiene el valor de la variable
[[nodiscard]] auto getOwner() const -> int;
// Obtiene el circulo de colisión
auto getCollider() -> Circle &;
};