// bullet.hpp - Clase para projectils de la ship // © 1999 Visente i Sergi (versión Pascal) // © 2025 Port a C++20 con SDL3 #pragma once #include #include #include "core/defaults.hpp" #include "core/entities/entity.hpp" #include "core/types.hpp" class Bullet : public Entities::Entity { public: Bullet() : Entity(nullptr) {} Bullet(SDL_Renderer* renderer); void init() override; void disparar(const Vec2& position, float angle, uint8_t owner_id); void update(float delta_time) override; void draw() const override; // Override: Interfície d'Entity [[nodiscard]] bool isActive() const override { return esta_; } // Override: Interfície de colisión [[nodiscard]] float getCollisionRadius() const override { return Defaults::Entities::BULLET_RADIUS; } [[nodiscard]] bool isCollidable() const override { return esta_ && grace_timer_ <= 0.0F; } // Getters (API pública sin canvis) [[nodiscard]] bool esta_activa() const { return esta_; } [[nodiscard]] uint8_t get_owner_id() const { return owner_id_; } [[nodiscard]] float get_grace_timer() const { return grace_timer_; } void desactivar() { esta_ = false; } private: // Membres específics de Bullet (heretats: renderer_, shape_, center_, angle_, brightness_) float velocity_; bool esta_; uint8_t owner_id_; // 0=P1, 1=P2 float grace_timer_; // Grace period timer (0.0 = vulnerable) void mou(float delta_time); };