#pragma once #include // Para SDL_FPoint #include // 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_; 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) : sprite_(std::make_unique(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; } };