Fix: Resolver crash de nullptr en Engine::initialize() y documentar facade pattern

PROBLEMA CRÍTICO RESUELTO:
- El programa compilaba pero crasheaba inmediatamente al ejecutar
- Stack trace apuntaba a UIManager::updatePhysicalWindowSize() (línea 135)
- Root cause: Engine::initialize() llamaba updatePhysicalWindowSize() en línea 228
  ANTES de crear ui_manager_ en línea 232 → nullptr dereference

SOLUCIÓN:
- Calcular tamaño físico de ventana inline sin llamar al método completo
- Usar SDL_GetWindowSizeInPixels() directamente antes de crear ui_manager_
- Pasar valores calculados a UIManager::initialize()

CAMBIOS ADICIONALES:
1. engine.h: Documentar duplicación pragmática Engine ↔ StateManager
   - Variables de estado DEMO/LOGO mantenidas temporalmente en Engine
   - StateManager mantiene current_app_mode_ (fuente de verdad)
   - Comentarios explicativos para futuras migraciones

2. shape_manager.cpp: Documentar facade pattern completo
   - Añadidos comentarios extensivos explicando stubs
   - Cada método stub documenta por qué Engine mantiene implementación
   - Clarifica dependencias (SceneManager, UIManager, notificaciones)

RESULTADO:
 Compilación exitosa (sin errores)
 Aplicación ejecuta sin crashes
 Inicialización de UIManager correcta
 Todos los recursos cargan apropiadamente

Archivos modificados:
- source/engine.cpp: Fix de inicialización (líneas 227-238)
- source/engine.h: Documentación de estado duplicado
- source/shapes_mgr/shape_manager.cpp: Documentación facade

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-11 16:54:23 +02:00
parent 1c38ab2009
commit 0fe2efc051
3 changed files with 42 additions and 16 deletions

View File

@@ -127,9 +127,11 @@ class Engine {
float shape_scale_factor_ = 1.0f; // Factor de escala manual (Numpad +/-)
bool depth_zoom_enabled_ = true; // Zoom por profundidad Z activado
// Sistema de Modo DEMO (auto-play)
AppMode current_app_mode_ = AppMode::SANDBOX; // Modo actual (mutuamente excluyente)
AppMode previous_app_mode_ = AppMode::SANDBOX; // Modo previo antes de entrar a LOGO
// Sistema de Modo DEMO (auto-play) y LOGO
// NOTA: Estado parcialmente duplicado con StateManager por pragmatismo
// StateManager mantiene current_app_mode_ (fuente de verdad)
// Engine mantiene variables de implementación temporalmente
AppMode previous_app_mode_ = AppMode::SANDBOX; // Modo previo antes de entrar a LOGO (temporal)
float demo_timer_ = 0.0f; // Contador de tiempo para próxima acción
float demo_next_action_time_ = 0.0f; // Tiempo aleatorio hasta próxima acción (segundos)