diff --git a/source/engine.cpp b/source/engine.cpp index 1e84109..e07156a 100644 --- a/source/engine.cpp +++ b/source/engine.cpp @@ -1623,9 +1623,10 @@ void Engine::updateDemoMode() { demo_next_action_time_ = logo_min_time_ + (rand() % 1000) / 1000.0f * interval_range; } - // Solo salir automáticamente si NO llegamos desde MANUAL + // Solo salir automáticamente si la entrada a LOGO fue automática (desde DEMO) + // No salir si el usuario entró manualmente con tecla K // Probabilidad de salir: 60% en cada acción → sale rápido (relación DEMO:LOGO = 6:1) - if (previous_app_mode_ != AppMode::SANDBOX && rand() % 100 < 60) { + if (!logo_entered_manually_ && rand() % 100 < 60) { exitLogoMode(true); // Volver a DEMO/DEMO_LITE } } @@ -1992,6 +1993,9 @@ void Engine::enterLogoMode(bool from_demo) { logo_target_flip_percentage_ = 0.0f; logo_current_flip_count_ = 0; + // Guardar si entrada fue manual (tecla K) o automática (desde DEMO) + logo_entered_manually_ = !from_demo; + // Cambiar a modo LOGO (guarda previous_app_mode_ automáticamente) setState(AppMode::LOGO); } @@ -2029,6 +2033,9 @@ void Engine::exitLogoMode(bool return_to_demo) { } } + // Resetear flag de entrada manual + logo_entered_manually_ = false; + if (!return_to_demo) { // Salida manual (tecla K): volver a MANUAL setState(AppMode::SANDBOX); diff --git a/source/engine.h b/source/engine.h index b998123..d399a54 100644 --- a/source/engine.h +++ b/source/engine.h @@ -120,6 +120,9 @@ class Engine { float logo_target_flip_percentage_ = 0.0f; // % de flip a esperar (0.2-0.8) int logo_current_flip_count_ = 0; // Flips observados hasta ahora + // Control de entrada manual vs automática a LOGO MODE + bool logo_entered_manually_ = false; // true si se activó con tecla K, false si automático desde DEMO + // Estado previo antes de entrar a Logo Mode (para restaurar al salir) int logo_previous_theme_ = 0; // Índice de tema (0-9) size_t logo_previous_texture_index_ = 0;