Refactor Fase 7: Crear ShapeManager funcional (código duplicado temporal)

ENFOQUE PRAGMÁTICO:
- ShapeManager creado e implementado completamente
- Código DUPLICADO entre Engine y ShapeManager temporalmente
- Engine mantiene implementación para DEMO/LOGO (hasta Fase 8)
- Compilación exitosa, aplicación funcional

ARCHIVOS CREADOS/MODIFICADOS:
1. shape_manager.h:
   - Interfaz completa de ShapeManager
   - Métodos públicos para control de figuras 3D
   - Referencias a Scene/UI/StateManager

2. shape_manager.cpp:
   - Implementación completa de todos los métodos
   - toggleShapeMode(), activateShape(), update(), generateShape()
   - Sistema de atracción física con spring forces
   - Cálculo de convergencia para LOGO MODE
   - Includes de todas las Shape classes

3. engine.h:
   - Variables de figuras 3D MANTENIDAS (duplicadas con ShapeManager)
   - Comentarios documentando duplicación temporal
   - TODO markers para Fase 8

4. engine.cpp:
   - Inicialización de ShapeManager con dependencias
   - Métodos de figuras restaurados (no eliminados)
   - Código DEMO/LOGO funciona con variables locales
   - Sistema de rendering usa current_mode_ local

DUPLICACIÓN TEMPORAL DOCUMENTADA:
```cpp
// Engine mantiene:
- current_mode_, current_shape_type_, last_shape_type_
- active_shape_, shape_scale_factor_, depth_zoom_enabled_
- shape_convergence_
- toggleShapeModeInternal(), activateShapeInternal()
- updateShape(), generateShape(), clampShapeScale()
```

JUSTIFICACIÓN:
- Migrar ShapeManager sin migrar DEMO/LOGO causaba conflictos masivos
- Enfoque incremental: Fase 7 (ShapeManager) → Fase 8 (DEMO/LOGO)
- Permite compilación y testing entre fases
- ShapeManager está listo para uso futuro en controles manuales

RESULTADO:
 Compilación exitosa (1 warning menor)
 Aplicación funciona correctamente
 Todas las características operativas
 ShapeManager completamente implementado
 Listo para Fase 8 (migración DEMO/LOGO a StateManager)

PRÓXIMOS PASOS (Fase 8):
1. Migrar lógica DEMO/LOGO de Engine a StateManager
2. Convertir métodos de Engine en wrappers a StateManager/ShapeManager
3. Eliminar código duplicado
4. Limpieza final

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-11 17:39:28 +02:00
parent d62b8e5f52
commit 83ea03fda3
4 changed files with 308 additions and 35 deletions

View File

@@ -120,6 +120,9 @@ class Engine {
int theme_page_ = 0; // Página actual de temas (0 o 1) para acceso por Numpad
// Sistema de Figuras 3D (polimórfico)
// NOTA FASE 7: Variables DUPLICADAS temporalmente con ShapeManager
// ShapeManager es la fuente de verdad, Engine mantiene copias para DEMO/LOGO
// TODO FASE 8: Eliminar duplicación cuando migremos DEMO/LOGO a StateManager
SimulationMode current_mode_ = SimulationMode::PHYSICS;
ShapeType current_shape_type_ = ShapeType::SPHERE; // Tipo de figura actual
ShapeType last_shape_type_ = ShapeType::SPHERE; // Última figura para toggle F
@@ -136,6 +139,8 @@ class Engine {
float demo_next_action_time_ = 0.0f; // Tiempo aleatorio hasta próxima acción (segundos)
// Sistema de convergencia para LOGO MODE (escala con resolución)
// NOTA FASE 7: shape_convergence_ duplicado con ShapeManager temporalmente
// TODO FASE 8: Eliminar cuando migremos DEMO/LOGO
float shape_convergence_ = 0.0f; // % de pelotas cerca del objetivo (0.0-1.0)
float logo_convergence_threshold_ = 0.90f; // Threshold aleatorio (75-100%)
float logo_min_time_ = 3.0f; // Tiempo mínimo escalado con resolución
@@ -199,6 +204,8 @@ class Engine {
void addSpriteToBatch(float x, float y, float w, float h, int r, int g, int b, float scale = 1.0f);
// Sistema de Figuras 3D - Métodos privados
// NOTA FASE 7: Métodos DUPLICADOS con ShapeManager (Engine mantiene implementación para DEMO/LOGO)
// TODO FASE 8: Convertir en wrappers puros cuando migremos DEMO/LOGO
void toggleShapeModeInternal(bool force_gravity_on_exit = true); // Implementación interna del toggle
void activateShapeInternal(ShapeType type); // Implementación interna de activación
void updateShape(); // Actualizar figura activa