// bala.hpp - Classe per a projectils de la nau // © 1999 Visente i Sergi (versió Pascal) // © 2025 Port a C++20 amb SDL3 #pragma once #include #include #include "core/defaults.hpp" #include "core/entities/entitat.hpp" #include "core/types.hpp" class Bala : public Entities::Entitat { public: Bala() : Entitat(nullptr) {} Bala(SDL_Renderer* renderer); void inicialitzar() override; void disparar(const Punt& posicio, float angle, uint8_t owner_id); void actualitzar(float delta_time) override; void dibuixar() const override; // Override: Interfície d'Entitat [[nodiscard]] bool esta_actiu() const override { return esta_; } // Override: Interfície de col·lisió [[nodiscard]] float get_collision_radius() const override { return Defaults::Entities::BULLET_RADIUS; } [[nodiscard]] bool es_collidable() const override { return esta_ && grace_timer_ <= 0.0F; } // Getters (API pública sense 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 Bala (heretats: renderer_, forma_, centre_, angle_, brightness_) float velocitat_; bool esta_; uint8_t owner_id_; // 0=P1, 1=P2 float grace_timer_; // Grace period timer (0.0 = vulnerable) void mou(float delta_time); };