feat: Bordes como obstáculos + Variables BOIDS ajustables + Fix tecla G
**1. Bordes como obstáculos (no más wrapping):** - Implementada fuerza de repulsión cuando boids se acercan a bordes - Nueva regla: Boundary Avoidance (evitar bordes) - Fuerza proporcional a cercanía (0% en margen, 100% en colisión) - Constantes: BOID_BOUNDARY_MARGIN (50px), BOID_BOUNDARY_WEIGHT (7200 px/s²) **2. Variables ajustables en runtime:** - Añadidas 11 variables miembro en BoidManager (inicializadas con defines.h) - Permite modificar comportamiento sin recompilar - Variables: radios (separation/alignment/cohesion), weights, speeds, boundary - Base para futuras herramientas de debug/tweaking visual **3. Fix tecla G (BOIDS → PHYSICS):** - Corregido: toggleBoidsMode() ahora acepta parámetro force_gravity_on - handleGravityToggle() pasa explícitamente false para preservar inercia - Transición BOIDS→PHYSICS ahora mantiene gravedad OFF correctamente **Implementación:** - defines.h: +2 constantes (BOUNDARY_MARGIN, BOUNDARY_WEIGHT) - boid_manager.h: +11 variables miembro ajustables - boid_manager.cpp: - Constructor inicializa variables - Todas las funciones usan variables en lugar de constantes - applyBoundaries() completamente reescrito (repulsión vs wrapping) - engine.h/cpp: toggleBoidsMode() con parámetro opcional 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -103,10 +103,24 @@ class BoidManager {
|
||||
// FASE 2: Grid reutilizable para búsquedas de vecinos
|
||||
SpatialGrid spatial_grid_;
|
||||
|
||||
// === Parámetros ajustables en runtime (inicializados con valores de defines.h) ===
|
||||
// Permite modificar comportamiento sin recompilar (para tweaking/debug visual)
|
||||
float separation_radius_; // Radio de separación (evitar colisiones)
|
||||
float alignment_radius_; // Radio de alineación (matching de velocidad)
|
||||
float cohesion_radius_; // Radio de cohesión (centro de masa)
|
||||
float separation_weight_; // Peso fuerza de separación (aceleración px/s²)
|
||||
float alignment_weight_; // Peso fuerza de alineación (steering proporcional)
|
||||
float cohesion_weight_; // Peso fuerza de cohesión (aceleración px/s²)
|
||||
float max_speed_; // Velocidad máxima (px/s)
|
||||
float min_speed_; // Velocidad mínima (px/s)
|
||||
float max_force_; // Fuerza máxima de steering (px/s)
|
||||
float boundary_margin_; // Margen para repulsión de bordes (px)
|
||||
float boundary_weight_; // Peso fuerza de repulsión de bordes (aceleración px/s²)
|
||||
|
||||
// Métodos privados para las reglas de Reynolds
|
||||
void applySeparation(Ball* boid, float delta_time);
|
||||
void applyAlignment(Ball* boid, float delta_time);
|
||||
void applyCohesion(Ball* boid, float delta_time);
|
||||
void applyBoundaries(Ball* boid); // Mantener boids dentro de pantalla
|
||||
void applyBoundaries(Ball* boid); // Repulsión de bordes (ya no wrapping)
|
||||
void limitSpeed(Ball* boid); // Limitar velocidad máxima
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user