Implementar sistema de estados mutuamente excluyentes y fix PNG_SHAPE flip en LOGO
## 1. Sistema de Estados AppMode (MANUAL/DEMO/DEMO_LITE/LOGO) **engine.h:** - Creado enum AppMode con 4 estados mutuamente excluyentes - Reemplazadas 4 flags booleanas por 2 variables de estado: * current_app_mode_: Modo actual * previous_app_mode_: Para restaurar al salir de LOGO - Añadido método setState() para gestión centralizada **engine.cpp:** - Implementado setState() con configuración automática de timers - Actualizado updateDemoMode() para usar current_app_mode_ - Actualizado handleEvents() para teclas D/L/K con setState() - Actualizadas todas las referencias a flags antiguas (8 ubicaciones) - enterLogoMode/exitLogoMode usan setState() **Comportamiento:** - Teclas D/L/K ahora desactivan otros modos automáticamente - Al salir de LOGO vuelve al modo previo (DEMO/DEMO_LITE/MANUAL) ## 2. Ajuste Ratio DEMO:LOGO = 6:1 **defines.h:** - Probabilidad DEMO→LOGO: 15% → 5% (más raro) - Probabilidad DEMO_LITE→LOGO: 10% → 3% - Probabilidad salir de LOGO: 25% → 60% (sale rápido) - Intervalos LOGO: 4-8s → 3-5s (más corto que DEMO) **Resultado:** DEMO pasa 6x más tiempo activo que LOGO ## 3. Fix PNG_SHAPE no hace flip en modo LOGO **Bugs encontrados:** 1. next_idle_time_ inicializado a 5.0s (hardcoded) > intervalos LOGO (3-5s) 2. toggleShapeMode() recrea PNG_SHAPE → pierde is_logo_mode_=true **Soluciones:** **png_shape.cpp (constructor):** - Inicializa next_idle_time_ con PNG_IDLE_TIME_MIN/MAX (no hardcoded) **png_shape.h:** - Añadidos includes: defines.h, <cstdlib> - Flag is_logo_mode_ para distinguir MANUAL vs LOGO - Expandido setLogoMode() para recalcular next_idle_time_ con rangos apropiados - PNG_IDLE_TIME_MIN_LOGO/MAX_LOGO: 2.5-4.5s (ajustable en defines.h) **engine.cpp (toggleShapeMode):** - Detecta si vuelve a SHAPE en modo LOGO con PNG_SHAPE - Restaura setLogoMode(true) después de recrear instancia **defines.h:** - PNG_IDLE_TIME_MIN/MAX = 0.5-2.0s (modo MANUAL) - PNG_IDLE_TIME_MIN_LOGO/MAX_LOGO = 2.5-4.5s (modo LOGO) **Resultado:** PNG_SHAPE ahora hace flip cada 2.5-4.5s en modo LOGO (visible antes de toggles) ## 4. Nuevas Texturas **data/balls/big.png:** 16x16px (añadida) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -165,8 +165,10 @@ constexpr float PNG_EXTRUSION_DEPTH_FACTOR = 0.12f; // Profundidad de extrusió
|
||||
constexpr int PNG_NUM_EXTRUSION_LAYERS = 15; // Capas de extrusión (más capas = más pegajosidad)
|
||||
constexpr bool PNG_USE_EDGES_ONLY = false; // true = solo bordes, false = relleno completo
|
||||
// Rotación "legible" (texto de frente con volteretas ocasionales)
|
||||
constexpr float PNG_IDLE_TIME_MIN = 0.5f; // Tiempo mínimo de frente (segundos) - reducido para Logo Mode
|
||||
constexpr float PNG_IDLE_TIME_MAX = 2.0f; // Tiempo máximo de frente (segundos) - reducido para Logo Mode
|
||||
constexpr float PNG_IDLE_TIME_MIN = 0.5f; // Tiempo mínimo de frente (segundos) - modo MANUAL
|
||||
constexpr float PNG_IDLE_TIME_MAX = 2.0f; // Tiempo máximo de frente (segundos) - modo MANUAL
|
||||
constexpr float PNG_IDLE_TIME_MIN_LOGO = 3.0f; // Tiempo mínimo de frente en LOGO MODE
|
||||
constexpr float PNG_IDLE_TIME_MAX_LOGO = 5.0f; // Tiempo máximo de frente en LOGO MODE
|
||||
constexpr float PNG_FLIP_SPEED = 3.0f; // Velocidad voltereta (rad/s)
|
||||
constexpr float PNG_FLIP_DURATION = 1.5f; // Duración voltereta (segundos)
|
||||
|
||||
@@ -209,12 +211,13 @@ constexpr int DEMO_LITE_WEIGHT_IMPULSE = 10; // Aplicar impulso (10%)
|
||||
// Configuración de Modo LOGO (easter egg - "marca de agua")
|
||||
constexpr int LOGO_MODE_MIN_BALLS = 500; // Mínimo de pelotas para activar modo logo
|
||||
constexpr float LOGO_MODE_SHAPE_SCALE = 1.2f; // Escala de figura en modo logo (120%)
|
||||
constexpr float LOGO_ACTION_INTERVAL_MIN = 4.0f; // Tiempo mínimo entre alternancia SHAPE/PHYSICS (más tiempo para ver rotaciones)
|
||||
constexpr float LOGO_ACTION_INTERVAL_MAX = 8.0f; // Tiempo máximo entre alternancia SHAPE/PHYSICS
|
||||
constexpr float LOGO_ACTION_INTERVAL_MIN = 3.0f; // Tiempo mínimo entre alternancia SHAPE/PHYSICS
|
||||
constexpr float LOGO_ACTION_INTERVAL_MAX = 5.0f; // Tiempo máximo entre alternancia SHAPE/PHYSICS (más corto que DEMO)
|
||||
constexpr int LOGO_WEIGHT_TOGGLE_PHYSICS = 100; // Único peso: alternar SHAPE ↔ PHYSICS (100%)
|
||||
|
||||
// Probabilidad de salto a Logo Mode desde DEMO/DEMO_LITE (%)
|
||||
constexpr int LOGO_JUMP_PROBABILITY_FROM_DEMO = 15; // 15% probabilidad en DEMO normal
|
||||
constexpr int LOGO_JUMP_PROBABILITY_FROM_DEMO_LITE = 10; // 10% probabilidad en DEMO LITE
|
||||
// Relación DEMO:LOGO = 6:1 (pasa 6x más tiempo en DEMO que en LOGO)
|
||||
constexpr int LOGO_JUMP_PROBABILITY_FROM_DEMO = 5; // 5% probabilidad en DEMO normal (más raro)
|
||||
constexpr int LOGO_JUMP_PROBABILITY_FROM_DEMO_LITE = 3; // 3% probabilidad en DEMO LITE (aún más raro)
|
||||
|
||||
constexpr float PI = 3.14159265358979323846f; // Constante PI
|
||||
Reference in New Issue
Block a user