Refactor fase 10: Implementar BoidManager completo

Cambios realizados:
- Creado BoidManager (source/boids_mgr/) con algoritmo de Reynolds (1987)
  * Separación: Evitar colisiones con vecinos cercanos
  * Alineación: Seguir dirección promedio del grupo
  * Cohesión: Moverse hacia centro de masa del grupo
  * Wrapping boundaries (teletransporte en bordes)
  * Velocidad y fuerza limitadas (steering behavior)
- Añadido BOIDS a enum SimulationMode (defines.h)
- Añadidas constantes de configuración boids (defines.h)
- Integrado BoidManager en Engine (inicialización, update, toggle)
- Añadido binding de tecla J para toggleBoidsMode() (input_handler.cpp)
- Añadidos helpers en Ball: getVelocity(), setVelocity(), setPosition()
- Actualizado CMakeLists.txt para incluir source/boids_mgr/*.cpp

Arquitectura:
- BoidManager sigue el patrón establecido (similar a ShapeManager)
- Gestión independiente del comportamiento de enjambre
- Tres reglas de Reynolds implementadas correctamente
- Compatible con sistema de resolución dinámica

Estado: Compilación exitosa, BoidManager funcional
Próximo paso: Testing y ajuste de parámetros boids

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-11 21:38:05 +02:00
parent 39c0a24a45
commit 1bb8807060
8 changed files with 486 additions and 3 deletions

View File

@@ -133,7 +133,8 @@ enum class ShapeType {
// Enum para modo de simulación
enum class SimulationMode {
PHYSICS, // Modo física normal con gravedad
SHAPE // Modo figura 3D (Shape polimórfico)
SHAPE, // Modo figura 3D (Shape polimórfico)
BOIDS // Modo enjambre (Boids - comportamiento emergente)
};
// Enum para modo de aplicación (mutuamente excluyentes)
@@ -287,6 +288,16 @@ constexpr float LOGO_FLIP_TRIGGER_MIN = 0.20f; // 20% mínimo de progres
constexpr float LOGO_FLIP_TRIGGER_MAX = 0.80f; // 80% máximo de progreso de flip para trigger
constexpr int LOGO_FLIP_WAIT_PROBABILITY = 50; // 50% probabilidad de elegir el camino "esperar flip"
// Configuración de Modo BOIDS (comportamiento de enjambre)
constexpr float BOID_SEPARATION_RADIUS = 30.0f; // Radio para evitar colisiones (píxeles)
constexpr float BOID_ALIGNMENT_RADIUS = 50.0f; // Radio para alinear velocidad con vecinos
constexpr float BOID_COHESION_RADIUS = 80.0f; // Radio para moverse hacia centro del grupo
constexpr float BOID_SEPARATION_WEIGHT = 1.5f; // Peso de separación (evitar colisiones)
constexpr float BOID_ALIGNMENT_WEIGHT = 1.0f; // Peso de alineación (seguir dirección del grupo)
constexpr float BOID_COHESION_WEIGHT = 0.8f; // Peso de cohesión (moverse al centro)
constexpr float BOID_MAX_SPEED = 3.0f; // Velocidad máxima (píxeles/frame)
constexpr float BOID_MAX_FORCE = 0.1f; // Fuerza máxima de steering
constexpr float PI = 3.14159265358979323846f; // Constante PI
// Función auxiliar para obtener la ruta del directorio del ejecutable