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:
54
ROADMAP.md
54
ROADMAP.md
@@ -74,7 +74,57 @@
|
|||||||
- ✅ Help text con `--help`
|
- ✅ Help text con `--help`
|
||||||
- Ejemplo: `./vibe3_physics -w 1920 -h 1080 -f`
|
- 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)
|
**Descripción:** Las pelotas cambian de tamaño cuando están quietas (bug visual)
|
||||||
**Prioridad:** Alta (bug visible)
|
**Prioridad:** Alta (bug visible)
|
||||||
**Estimación:** 30 minutos
|
**Estimación:** 30 minutos
|
||||||
@@ -87,7 +137,7 @@
|
|||||||
- **Investigar:** Ball::render(), scale calculations, depth brightness
|
- **Investigar:** Ball::render(), scale calculations, depth brightness
|
||||||
- **Solución esperada:** Tamaño constante independiente de velocidad
|
- **Solución esperada:** Tamaño constante independiente de velocidad
|
||||||
|
|
||||||
### 5. ⏳ Sistema de Release
|
### 6. ⏳ Sistema de Release
|
||||||
**Descripción:** Empaquetado para distribución standalone
|
**Descripción:** Empaquetado para distribución standalone
|
||||||
**Prioridad:** Baja
|
**Prioridad:** Baja
|
||||||
**Estimación:** 30 minutos
|
**Estimación:** 30 minutos
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 720 B After Width: | Height: | Size: 618 B |
@@ -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)
|
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)
|
// 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
|
// Estructura para representar colores RGB
|
||||||
struct Color {
|
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%)
|
constexpr int DEMO_LITE_WEIGHT_IMPULSE = 10; // Aplicar impulso (10%)
|
||||||
// TOTAL: 100
|
// 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
|
constexpr float PI = 3.14159265358979323846f; // Constante PI
|
||||||
@@ -102,9 +102,15 @@ class Engine {
|
|||||||
// Sistema de Modo DEMO (auto-play)
|
// Sistema de Modo DEMO (auto-play)
|
||||||
bool demo_mode_enabled_ = false; // ¿Está activo el modo demo completo?
|
bool demo_mode_enabled_ = false; // ¿Está activo el modo demo completo?
|
||||||
bool demo_lite_enabled_ = false; // ¿Está activo el modo demo lite?
|
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_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)
|
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
|
// Batch rendering
|
||||||
std::vector<SDL_Vertex> batch_vertices_;
|
std::vector<SDL_Vertex> batch_vertices_;
|
||||||
std::vector<int> batch_indices_;
|
std::vector<int> batch_indices_;
|
||||||
@@ -137,6 +143,11 @@ class Engine {
|
|||||||
void randomizeOnDemoStart(bool is_lite);
|
void randomizeOnDemoStart(bool is_lite);
|
||||||
void toggleGravityOnOff();
|
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
|
// Sistema de transiciones LERP
|
||||||
float lerp(float a, float b, float t) const { return a + (b - a) * t; }
|
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
|
Color getInterpolatedColor(size_t ball_index) const; // Obtener color interpolado durante transición
|
||||||
|
|||||||
Reference in New Issue
Block a user