WIP: Preparar infraestructura para Modo Logo (easter egg)

ROADMAP:
- Añadida tarea #4: Implementar Modo Logo (easter egg)
- Documentada integración con DEMO y DEMO LITE
- Añadida tarea #5: Mejorar sistema vértices PNG_SHAPE

INFRAESTRUCTURA AÑADIDA:
- engine.h: Variable logo_mode_enabled_ + estado previo
- engine.h: Métodos toggleLogoMode(), enterLogoMode(), exitLogoMode()
- defines.h: Constantes LOGO_MODE_* (min balls, scale, timings)
- defines.h: Probabilidades de salto desde DEMO/DEMO_LITE

PENDIENTE IMPLEMENTAR:
- Funciones enterLogoMode() y exitLogoMode()
- Integración con tecla K
- Lógica salto automático desde DEMO/DEMO_LITE
- Excluir PNG_SHAPE de arrays aleatorios
- Display visual "LOGO MODE"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-04 17:45:04 +02:00
parent db3d4d6630
commit f0baa51415
4 changed files with 75 additions and 3 deletions

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 720 B

After

Width:  |  Height:  |  Size: 618 B

View File

@@ -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

View File

@@ -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<SDL_Vertex> batch_vertices_;
std::vector<int> 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