afegits diferents enemics

This commit is contained in:
2025-12-03 13:47:31 +01:00
parent 1441134aea
commit 622ccd22bc
6 changed files with 463 additions and 58 deletions

View File

@@ -10,13 +10,36 @@
#include "core/graphics/shape.hpp"
#include "core/types.hpp"
// Tipus d'enemic
enum class TipusEnemic : uint8_t {
PENTAGON = 0, // Pentàgon esquivador (zigzag)
QUADRAT = 1, // Quadrat perseguidor (tracks ship)
MOLINILLO = 2 // Molinillo agressiu (fast, spinning)
};
// Estat d'animació (palpitació i rotació accelerada)
struct AnimacioEnemic {
// Palpitation (breathing effect)
bool palpitacio_activa = false;
float palpitacio_fase = 0.0f; // Phase in cycle (0.0-2π)
float palpitacio_frequencia = 2.0f; // Hz (cycles per second)
float palpitacio_amplitud = 0.15f; // Scale variation (±15%)
float palpitacio_temps_restant = 0.0f; // Time remaining (seconds)
// Rotation acceleration (long-term spin modulation)
float drotacio_base = 0.0f; // Base rotation speed (rad/s)
float drotacio_objetivo = 0.0f; // Target rotation speed (rad/s)
float drotacio_t = 0.0f; // Interpolation progress (0.0-1.0)
float drotacio_duracio = 0.0f; // Duration of transition (seconds)
};
class Enemic {
public:
Enemic()
: renderer_(nullptr) {}
Enemic(SDL_Renderer* renderer);
void inicialitzar();
void inicialitzar(TipusEnemic tipus = TipusEnemic::PENTAGON);
void actualitzar(float delta_time);
void dibuixar() const;
@@ -26,6 +49,9 @@ class Enemic {
const std::shared_ptr<Graphics::Shape>& get_forma() const { return forma_; }
void destruir() { esta_ = false; }
// Set ship position reference for tracking behavior
void set_ship_position(const Punt* ship_pos) { ship_position_ = ship_pos; }
private:
SDL_Renderer* renderer_;
@@ -41,5 +67,25 @@ class Enemic {
bool esta_;
float brightness_; // Factor de brillantor (0.0-1.0)
// [NEW] Enemy type and configuration
TipusEnemic tipus_;
// [NEW] Animation state
AnimacioEnemic animacio_;
// [NEW] Behavior state (type-specific)
float tracking_timer_; // For Quadrat: time since last angle update
const Punt* ship_position_; // Pointer to ship position (for tracking)
// [EXISTING] Private methods
void mou(float delta_time);
// [NEW] Private methods
void actualitzar_animacio(float delta_time);
void actualitzar_palpitacio(float delta_time);
void actualitzar_rotacio_accelerada(float delta_time);
void comportament_pentagon(float delta_time);
void comportament_quadrat(float delta_time);
void comportament_molinillo(float delta_time);
float calcular_escala_actual() const; // Returns scale with palpitation applied
};