Files
coffee_crisis_arcade_edition/source/hit.h
2025-08-06 13:05:04 +02:00

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;
}
};