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:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user