diff --git a/ROADMAP.md b/ROADMAP.md index d53942d..e3e4eb8 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -74,7 +74,57 @@ - ✅ Help text con `--help` - Ejemplo: `./vibe3_physics -w 1920 -h 1080 -f` -### 4. 🐛 Corregir Escalado de Pelotas en Reposo +### 4. 🎯 Implementar Modo Logo (Easter Egg) +**Descripción:** Modo especial que muestra el logo JAILGAMES como "marca de agua" +**Prioridad:** Alta (característica distintiva) +**Estimación:** 2 horas +**Detalles:** + +#### Configuración Modo Logo: +- **Figura:** Solo PNG_SHAPE (logo JAILGAMES) +- **Textura:** Siempre "tiny" (pelota más pequeña) +- **Tema:** Siempre MONOCHROME (blanco puro) +- **Escala:** 120% (figuras más grandes que normal) +- **Pelotas mínimas:** 500 +- **Tecla manual:** K (activa/desactiva modo logo) + +#### Comportamiento en Modo Logo: +- Alterna entre modo SHAPE y modo PHYSICS (como DEMO) +- Mantiene configuración fija (no cambia tema/textura/escala) +- Es como un "DEMO específico del logo" + +#### Integración con DEMO LITE: +- **Requisitos para salto automático:** + - Mínimo 500 pelotas + - Tema MONOCHROME activo + - Si se cumplen → cambia automáticamente textura a "tiny" y escala a 120% +- **Duración:** Menos tiempo que DEMO normal (es un "recordatorio") +- **Después:** Vuelve a DEMO LITE normal + +#### Integración con DEMO: +- **Requisitos:** Mínimo 500 pelotas +- **Acción:** Cambia automáticamente a: MONOCHROME + tiny + escala 120% +- **Duración:** Menos tiempo que acciones normales +- **Después:** Vuelve a DEMO normal + +#### Proporción temporal sugerida: +- DEMO/DEMO_LITE normal: 80-90% del tiempo +- Modo Logo: 10-20% del tiempo (aparición ocasional como "easter egg") + +### 5. ⏳ Mejorar Sistema de Vértices PNG_SHAPE +**Descripción:** Con 50 pelotas no activa modo vértices correctamente +**Prioridad:** Baja (mejora visual) +**Estimación:** 1 hora +**Detalles:** +- **Comportamiento actual:** Con 50 pelotas usa filas alternas en bordes +- **Comportamiento deseado:** Activar modo VÉRTICES (extremos izq/der de cada fila) +- **Problema:** Condición `num_points < 150` no es suficientemente agresiva +- **Solución propuesta:** + - Ajustar umbrales de activación de vértices + - Mejorar algoritmo extractCornerVertices() para detectar puntos clave + - Considerar densidad de píxeles en decisión (no solo cantidad absoluta) + +### 5. 🐛 Corregir Escalado de Pelotas en Reposo **Descripción:** Las pelotas cambian de tamaño cuando están quietas (bug visual) **Prioridad:** Alta (bug visible) **Estimación:** 30 minutos @@ -87,7 +137,7 @@ - **Investigar:** Ball::render(), scale calculations, depth brightness - **Solución esperada:** Tamaño constante independiente de velocidad -### 5. ⏳ Sistema de Release +### 6. ⏳ Sistema de Release **Descripción:** Empaquetado para distribución standalone **Prioridad:** Baja **Estimación:** 30 minutos diff --git a/data/shapes/jailgames.png b/data/shapes/jailgames.png index 619f9d4..8aa1b96 100644 Binary files a/data/shapes/jailgames.png and b/data/shapes/jailgames.png differ diff --git a/source/defines.h b/source/defines.h index 1078b13..8ff5351 100644 --- a/source/defines.h +++ b/source/defines.h @@ -39,7 +39,7 @@ constexpr float GRAVITY_CHANGE_LATERAL_MAX = 0.08f; // Velocidad lateral máxim constexpr float BALL_SPAWN_MARGIN = 0.15f; // Margen lateral para spawn (0.25 = 25% a cada lado) // Escenarios de número de pelotas (teclas 1-8) -constexpr int BALL_COUNT_SCENARIOS[8] = {1, 10, 100, 500, 1000, 10000, 50000, 100000}; +constexpr int BALL_COUNT_SCENARIOS[8] = {10, 50, 100, 500, 1000, 5000, 10000, 50000}; // Estructura para representar colores RGB struct Color { @@ -206,4 +206,15 @@ constexpr int DEMO_LITE_WEIGHT_TOGGLE_PHYSICS = 20; // Toggle física ↔ figur constexpr int DEMO_LITE_WEIGHT_IMPULSE = 10; // Aplicar impulso (10%) // TOTAL: 100 +// 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 = 2.0f; // Tiempo mínimo entre alternancia SHAPE/PHYSICS +constexpr float LOGO_ACTION_INTERVAL_MAX = 5.0f; // Tiempo máximo entre alternancia SHAPE/PHYSICS +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 + constexpr float PI = 3.14159265358979323846f; // Constante PI \ No newline at end of file diff --git a/source/engine.h b/source/engine.h index d7044f0..339f760 100644 --- a/source/engine.h +++ b/source/engine.h @@ -102,9 +102,15 @@ class Engine { // Sistema de Modo DEMO (auto-play) bool demo_mode_enabled_ = false; // ¿Está activo el modo demo completo? bool demo_lite_enabled_ = false; // ¿Está activo el modo demo lite? + bool logo_mode_enabled_ = false; // ¿Está activo el modo logo (easter egg)? 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) + // Estado previo antes de entrar a Logo Mode (para restaurar al salir) + ColorTheme logo_previous_theme_ = ColorTheme::SUNSET; + size_t logo_previous_texture_index_ = 0; + float logo_previous_shape_scale_ = 1.0f; + // Batch rendering std::vector batch_vertices_; std::vector batch_indices_; @@ -137,6 +143,11 @@ class Engine { void randomizeOnDemoStart(bool is_lite); void toggleGravityOnOff(); + // Sistema de Modo Logo (easter egg) + void toggleLogoMode(); // Activar/desactivar modo logo manual (tecla K) + void enterLogoMode(bool from_demo = false); // Entrar al modo logo (manual o automático) + void exitLogoMode(bool return_to_demo = false); // Salir del modo logo + // Sistema de transiciones LERP float lerp(float a, float b, float t) const { return a + (b - a) * t; } Color getInterpolatedColor(size_t ball_index) const; // Obtener color interpolado durante transición