PROBLEMA RESUELTO:
En modo SHAPE (figuras 3D), al cambiar el número de pelotas (teclas 1-8),
las nuevas pelotas aparecían en pantalla pero NO formaban la figura hasta
pulsar de nuevo la tecla de figura (Q/W/E/R/T).
CAUSA RAÍZ:
1. changeScenario() creaba pelotas nuevas en centro de pantalla
2. generateShape() generaba puntos target de la figura
3. PERO las pelotas nuevas no tenían shape_attraction_active=true
4. Sin atracción activa, las pelotas no se movían hacia sus targets
CAMBIOS IMPLEMENTADOS:
1. Ball class (ball.h/ball.cpp):
- Constructor ahora acepta parámetro Y explícito
- Eliminado hardcodeo Y=0.0f en inicialización de pos_
2. SceneManager (scene_manager.cpp):
- PHYSICS mode: Y = 0.0f (parte superior, comportamiento original)
- SHAPE mode: Y = screen_height_/2.0f (centro vertical) ✅
- BOIDS mode: Y = rand() (posición Y aleatoria)
- Ball constructor llamado con parámetro Y según modo
3. Engine (engine.cpp:514-521):
- Tras generateShape(), activar enableShapeAttraction(true) en todas
las pelotas nuevas
- Garantiza que las pelotas converjan inmediatamente hacia figura
RESULTADO:
✅ Cambiar escenario (1-8) en modo SHAPE regenera automáticamente la figura
✅ No requiere pulsar tecla de figura de nuevo
✅ Transición suave e inmediata hacia nueva configuración
ARCHIVOS MODIFICADOS:
- source/ball.h: Constructor acepta parámetro Y
- source/ball.cpp: Usar Y en lugar de hardcode 0.0f
- source/scene/scene_manager.cpp: Inicializar Y según SimulationMode
- source/engine.cpp: Activar shape attraction tras changeScenario()
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
CAMBIOS:
- Debug HUD reorganizado en layout de 2 columnas (LEFT/RIGHT, sin centro)
- Añadidos getters públicos en Engine para info de sistema
- changeScenario() ahora preserva el SimulationMode actual
- Inicialización de pelotas según modo (PHYSICS/SHAPE/BOIDS)
- Eliminada duplicación de logo_entered_manually_ (ahora en StateManager)
ARCHIVOS MODIFICADOS:
- engine.h: Añadidos 8 getters públicos para UIManager
- engine.cpp: changeScenario() pasa current_mode_ a SceneManager
- scene_manager.h: changeScenario() acepta parámetro SimulationMode
- scene_manager.cpp: Inicialización según modo (RULES.md líneas 23-26)
- ui_manager.h: render() acepta Engine* y renderDebugHUD() actualizado
- ui_manager.cpp: Debug HUD con columnas LEFT (sistema) y RIGHT (física)
REGLAS.md IMPLEMENTADO:
✅ Líneas 23-26: Inicialización diferenciada por modo
- PHYSICS: Top, 75% distribución central en X, velocidades aleatorias
- SHAPE: Centro de pantalla, sin velocidad inicial
- BOIDS: Posiciones y velocidades aleatorias
✅ Líneas 88-96: Debug HUD con información de sistema completa
BUGS CORREGIDOS:
- Fix: Cambiar escenario (1-8) en FIGURE ya no resetea a PHYSICS ❌→✅
- Fix: Las pelotas se inicializan correctamente según el modo activo
- Fix: AppMode movido de centro a izquierda en Debug HUD
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>