// enemy_config.hpp - Configuració d'un tipus d'enemic carregada des de YAML // © 2026 JailDesigner // // Una instància per tipus (Pentagon/Square/Pinwheel), carregada un cop al // startup per EnemyRegistry i compartida entre totes les instàncies d'aquell // tipus. Estructura paral·lela a PlayerConfig. #pragma once #include #include #include #include "external/fkyaml_node.hpp" #include "game/entities/enemy.hpp" // EnemyType struct EnemyConfig { struct ShapeCfg { std::string path; float scale; // multiplicador visual + hitbox sobre la mida nativa del .shp float collision_factor; // ajust opcional del hitbox respecte el cercle circumscrit (default 1.0) }; struct PhysicsCfg { float mass; float speed; float rotation_delta_min; float rotation_delta_max; }; // Camps específics de cada AI. Els no aplicables a un tipus queden a 0.0F // i no s'usen — el dispatch viu a Enemy::behaviorXxx. struct BehaviorCfg { // Pentagon float zigzag_prob_per_second{0.0F}; float angle_change_max{0.0F}; // Square float tracking_strength{0.0F}; float tracking_interval{0.0F}; // Pinwheel float rotation_proximity_multiplier{0.0F}; float proximity_distance{0.0F}; }; struct ColorsCfg { SDL_Color normal; SDL_Color wounded; }; std::string name; EnemyType ai_type; ShapeCfg shape; PhysicsCfg physics; BehaviorCfg behavior; ColorsCfg colors; int score; // Parseja un descriptor d'enemic. expected_ai_type valida que ai_type del // YAML coincideix amb el tipus que el caller espera (segons el directori). static auto fromYaml(const fkyaml::node& node, EnemyType expected_ai_type) -> std::optional; };