feat(entities): migrar la configuració dels 3 enemics a data/entities/<type>/*.yaml
This commit is contained in:
1 parent
ed4d3a3915
commit
39bda0775e
14 files changed
+431
-212
No files matched your search
@@ -0,0 +1,62 @@
|
||||
// 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 <SDL3/SDL.h>
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
#include "external/fkyaml_node.hpp"
|
||||
#include "game/entities/enemy.hpp" // EnemyType
|
||||
|
||||
struct EnemyConfig {
|
||||
struct ShapeCfg {
|
||||
std::string path;
|
||||
};
|
||||
|
||||
struct PhysicsCfg {
|
||||
float mass;
|
||||
float speed;
|
||||
float rotation_delta_min;
|
||||
float rotation_delta_max;
|
||||
float collision_radius;
|
||||
};
|
||||
|
||||
// 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<EnemyConfig>;
|
||||
};
|
||||
Reference in new issue
Block a user