feat(entities): migrar paràmetres compartits dels enemics a cada YAML
This commit is contained in:
@@ -80,6 +80,60 @@ namespace {
|
||||
out.speed = p["speed"].get_value<float>();
|
||||
out.rotation_delta_min = p["rotation_delta_min"].get_value<float>();
|
||||
out.rotation_delta_max = p["rotation_delta_max"].get_value<float>();
|
||||
out.restitution = p["restitution"].get_value<float>();
|
||||
out.linear_damping = p["linear_damping"].get_value<float>();
|
||||
out.angular_damping = p["angular_damping"].get_value<float>();
|
||||
return true;
|
||||
}
|
||||
|
||||
auto parseAnimation(const fkyaml::node& node, const std::string& name, EnemyConfig::AnimationCfg& out) -> bool {
|
||||
if (!node.contains("animation") ||
|
||||
!node["animation"].contains("pulse") ||
|
||||
!node["animation"].contains("rotation_accel")) {
|
||||
std::cerr << "[EnemyConfig] Error: falta 'animation.pulse' o 'animation.rotation_accel' a " << name << '\n';
|
||||
return false;
|
||||
}
|
||||
const auto& p = node["animation"]["pulse"];
|
||||
out.pulse.trigger_prob_per_second = p["trigger_prob_per_second"].get_value<float>();
|
||||
out.pulse.duration_min = p["duration_min"].get_value<float>();
|
||||
out.pulse.duration_max = p["duration_max"].get_value<float>();
|
||||
out.pulse.amplitude_min = p["amplitude_min"].get_value<float>();
|
||||
out.pulse.amplitude_max = p["amplitude_max"].get_value<float>();
|
||||
out.pulse.frequency_min = p["frequency_min"].get_value<float>();
|
||||
out.pulse.frequency_max = p["frequency_max"].get_value<float>();
|
||||
|
||||
const auto& r = node["animation"]["rotation_accel"];
|
||||
out.rotation_accel.trigger_prob_per_second = r["trigger_prob_per_second"].get_value<float>();
|
||||
out.rotation_accel.duration_min = r["duration_min"].get_value<float>();
|
||||
out.rotation_accel.duration_max = r["duration_max"].get_value<float>();
|
||||
out.rotation_accel.multiplier_min = r["multiplier_min"].get_value<float>();
|
||||
out.rotation_accel.multiplier_max = r["multiplier_max"].get_value<float>();
|
||||
return true;
|
||||
}
|
||||
|
||||
auto parseWounded(const fkyaml::node& node, const std::string& name, EnemyConfig::WoundedCfg& out) -> bool {
|
||||
if (!node.contains("wounded")) {
|
||||
std::cerr << "[EnemyConfig] Error: falta 'wounded' a " << name << '\n';
|
||||
return false;
|
||||
}
|
||||
const auto& w = node["wounded"];
|
||||
out.duration = w["duration"].get_value<float>();
|
||||
out.blink_hz = w["blink_hz"].get_value<float>();
|
||||
return true;
|
||||
}
|
||||
|
||||
auto parseSpawn(const fkyaml::node& node, const std::string& name, EnemyConfig::SpawnCfg& out) -> bool {
|
||||
if (!node.contains("spawn")) {
|
||||
std::cerr << "[EnemyConfig] Error: falta 'spawn' a " << name << '\n';
|
||||
return false;
|
||||
}
|
||||
const auto& s = node["spawn"];
|
||||
out.invulnerability_duration = s["invulnerability_duration"].get_value<float>();
|
||||
out.invulnerability_brightness_start = s["invulnerability_brightness_start"].get_value<float>();
|
||||
out.invulnerability_brightness_end = s["invulnerability_brightness_end"].get_value<float>();
|
||||
out.invulnerability_scale_start = s["invulnerability_scale_start"].get_value<float>();
|
||||
out.invulnerability_scale_end = s["invulnerability_scale_end"].get_value<float>();
|
||||
out.safety_distance = s["safety_distance"].get_value<float>();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -134,6 +188,9 @@ auto EnemyConfig::fromYaml(const fkyaml::node& node, EnemyType expected_ai_type)
|
||||
if (!parseShape(node, cfg.name, cfg.shape)) { return std::nullopt; }
|
||||
if (!parsePhysics(node, cfg.name, cfg.physics)) { return std::nullopt; }
|
||||
parseBehavior(node, cfg.behavior);
|
||||
if (!parseAnimation(node, cfg.name, cfg.animation)) { return std::nullopt; }
|
||||
if (!parseWounded(node, cfg.name, cfg.wounded)) { return std::nullopt; }
|
||||
if (!parseSpawn(node, cfg.name, cfg.spawn)) { return std::nullopt; }
|
||||
if (!parseColors(node, cfg.name, cfg.colors)) { return std::nullopt; }
|
||||
if (!parseScore(node, cfg.name, cfg.score)) { return std::nullopt; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user