feat(entities): derivar collision_radius del shape + scale/collision_factor al YAML

This commit is contained in:
2026-05-25 11:29:43 +02:00
parent da8eab330d
commit 866a057704
12 changed files with 149 additions and 104 deletions
+9 -6
View File
@@ -55,22 +55,24 @@ void Enemy::init(EnemyType type, const Vec2* ship_pos) {
config_ = &EnemyRegistry::get(type);
const EnemyConfig& cfg = *config_;
collision_radius_ = cfg.physics.collision_radius;
// Cas Square: resetejar tracking timer al spawn.
if (type_ == EnemyType::SQUARE) {
tracking_timer_ = 0.0F;
tracking_strength_ = cfg.behavior.tracking_strength;
}
body_.setMass(cfg.physics.mass);
body_.radius = collision_radius_;
shape_ = Graphics::ShapeLoader::load(cfg.shape.path);
if (!shape_ || !shape_->isValid()) {
std::cerr << "[Enemy] Error: no se ha podido cargar " << cfg.shape.path << '\n';
}
// Radi de col·lisió derivat del cercle circumscrit de la shape * scale * collision_factor.
const float BOUNDING = (shape_ != nullptr) ? shape_->getBoundingRadius() : 0.0F;
collision_radius_ = BOUNDING * cfg.shape.scale * cfg.shape.collision_factor;
body_.setMass(cfg.physics.mass);
body_.radius = collision_radius_;
// Posición aleatoria con comprobación de seguridad
float min_x;
float max_x;
@@ -188,7 +190,8 @@ void Enemy::draw() const {
if (!is_active_ || !shape_) {
return;
}
const float SCALE = computeCurrentScale();
// El SCALE final = escala base del YAML * modulador dinàmic (spawn/pulse).
const float SCALE = config_->shape.scale * computeCurrentScale();
SDL_Color color = config_->colors.normal;
// Parpadeo dorado mientras está herido.