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

@@ -239,11 +239,16 @@ bool Engine::initialize(int width, int height, int zoom, bool fullscreen) {
// Inicializar ShapeManager (gestión de figuras 3D)
shape_manager_ = std::make_unique<ShapeManager>();
shape_manager_->initialize(this); // Callback al Engine
shape_manager_->initialize(this, scene_manager_.get(), ui_manager_.get(), nullptr,
current_screen_width_, current_screen_height_);
// Inicializar StateManager (gestión de estados DEMO/LOGO)
state_manager_ = std::make_unique<StateManager>();
state_manager_->initialize(this); // Callback al Engine
// Actualizar ShapeManager con StateManager (dependencia circular - StateManager debe existir primero)
shape_manager_->initialize(this, scene_manager_.get(), ui_manager_.get(), state_manager_.get(),
current_screen_width_, current_screen_height_);
}
return success;
@@ -1564,6 +1569,13 @@ void Engine::switchTextureInternal(bool show_notification) {
}
}
// ============================================================================
// Sistema de Figuras 3D - IMPLEMENTACIONES COMPLETAS TEMPORALES (hasta Fase 8)
// ============================================================================
// NOTA FASE 7: Engine mantiene implementaciones completas para DEMO/LOGO
// ShapeManager tiene implementaciones paralelas que se usan para controles manuales del usuario
// TODO FASE 8: Eliminar estas implementaciones cuando migremos DEMO/LOGO a StateManager
// Sistema de Figuras 3D - Alternar entre modo física y última figura (Toggle con tecla F)
void Engine::toggleShapeModeInternal(bool force_gravity_on_exit) {
if (current_mode_ == SimulationMode::PHYSICS) {