feat: Argumentos CLI para establecer AppMode inicial
Permite arrancar directamente en modo DEMO, DEMO_LITE, LOGO o SANDBOX mediante argumentos de línea de comandos, eliminando necesidad de cambiar manualmente el modo después del arranque. Nuevos argumentos: - `-m, --mode <mode>` - Establece modo inicial - `sandbox` - Control manual (default) - `demo` - Auto-play completo (figuras + temas + colisiones) - `demo-lite` - Auto-play simple (solo física/figuras) - `logo` - Modo logo (easter egg con convergencia) Ejemplos de uso: ```bash # Arrancar en modo DEMO ./vibe3_physics --mode demo ./vibe3_physics -m demo # Arrancar en DEMO_LITE (solo física) ./vibe3_physics -m demo-lite # Arrancar directo en LOGO ./vibe3_physics --mode logo # Combinar con otros argumentos ./vibe3_physics -w 1920 -h 1080 --mode demo ./vibe3_physics -F -m demo-lite # Fullscreen + DEMO_LITE ``` Implementación: 1. main.cpp: Parsing de argumento --mode con validación 2. engine.h: Nuevo parámetro `initial_mode` en initialize() 3. engine.cpp: Aplicación del modo vía StateManager::setState() Si no se especifica --mode, se usa SANDBOX (comportamiento actual). El modo se aplica después de inicializar StateManager, garantizando que todos los componentes estén listos antes del cambio de estado. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
// getExecutableDirectory() ya está definido en defines.h como inline
|
||||
|
||||
// Implementación de métodos públicos
|
||||
bool Engine::initialize(int width, int height, int zoom, bool fullscreen) {
|
||||
bool Engine::initialize(int width, int height, int zoom, bool fullscreen, AppMode initial_mode) {
|
||||
bool success = true;
|
||||
|
||||
// Obtener resolución de pantalla para validación
|
||||
@@ -246,6 +246,11 @@ bool Engine::initialize(int width, int height, int zoom, bool fullscreen) {
|
||||
state_manager_ = std::make_unique<StateManager>();
|
||||
state_manager_->initialize(this); // Callback al Engine
|
||||
|
||||
// Establecer modo inicial si no es SANDBOX (default)
|
||||
if (initial_mode != AppMode::SANDBOX) {
|
||||
state_manager_->setState(initial_mode, current_screen_width_, current_screen_height_);
|
||||
}
|
||||
|
||||
// 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_);
|
||||
|
||||
Reference in New Issue
Block a user