62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h> // Para SDL_FPoint
|
|
|
|
#include <memory> // Para std::unique_ptr y std::shared_ptr
|
|
|
|
#include "sprite.h" // Para Sprite
|
|
#include "texture.h" // Para Texture
|
|
|
|
// Estructura que representa una colisión o impacto visual
|
|
struct Hit {
|
|
private:
|
|
// Indica si el Hit está activo o no
|
|
bool enabled_{false};
|
|
|
|
// Sprite asociado al Hit, gestionado con un puntero único
|
|
std::unique_ptr<Sprite> sprite_;
|
|
|
|
public:
|
|
// Elimina el constructor por defecto para obligar a pasar una textura
|
|
Hit() = delete;
|
|
|
|
// Constructor que obliga a pasar una textura compartida para crear el Sprite
|
|
// Esto evita que se pueda crear un Hit sin recursos gráficos válidos
|
|
explicit Hit(std::shared_ptr<Texture> texture)
|
|
: sprite_(std::make_unique<Sprite>(texture)) {}
|
|
|
|
// Establece la posición del Sprite en el espacio
|
|
void setPos(SDL_FPoint position) {
|
|
SDL_FPoint centered_position = {position.x - (sprite_->getWidth() / 2), position.y - (sprite_->getHeight() / 2)};
|
|
sprite_->setPosition(centered_position);
|
|
}
|
|
|
|
// Activa o desactiva el Hit
|
|
void enable(bool value) {
|
|
enabled_ = value;
|
|
}
|
|
|
|
// Consulta si el Hit está activo
|
|
[[nodiscard]] auto isEnabled() const -> bool {
|
|
return enabled_;
|
|
}
|
|
|
|
// Crea un "Hit" en la posición especificada
|
|
void create(SDL_FPoint position) {
|
|
setPos(position);
|
|
enable(true);
|
|
}
|
|
|
|
// Dibuja el hit
|
|
void render() {
|
|
if (enabled_) {
|
|
sprite_->render();
|
|
}
|
|
}
|
|
|
|
// Deshabilita el hit
|
|
void disable() {
|
|
enabled_ = false;
|
|
}
|
|
};
|