From 95ab6dea469d433ea6aa851128ac41515a4e534e Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 4 Oct 2025 06:58:39 +0200 Subject: [PATCH] =?UTF-8?q?Implementar=20tema=20MONOCHROME=20(6=C2=BA=20te?= =?UTF-8?q?ma=20visual)=20-=20Tecla=20KP=5F6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fondo negro degradado (similar a NEON) - 8 tonos de gris: blanco puro a gris muy oscuro - Estética minimalista monocromática - Ciclo con tecla B incluye nuevo tema - Actualizado README con documentación 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 6 ++- ROADMAP.md | 111 ++++++++++++++++++++++++++++++++++++++++++++ data/ball.png | Bin 162 -> 162 bytes data/ball_small.png | Bin 0 -> 122 bytes source/defines.h | 11 +++-- source/engine.cpp | 21 +++++++++ source/engine.h | 2 +- 7 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 ROADMAP.md create mode 100644 data/ball_small.png diff --git a/README.md b/README.md index 47fa835..22151b4 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ El nombre refleja su proposito: **ViBe** (vibe-coding experimental) + **Physics* | `KP_3` | **Tema NEON (colores vibrantes)** | | `KP_4` | **Tema BOSQUE (verdes naturales)** | | `KP_5` | **Tema RGB (fondo blanco, colores matematicos)** | +| `KP_6` | **Tema MONOCHROME (fondo negro, sprites grises)** | | `B` | **Ciclar entre todos los temas** | ### Controles de Simulacion @@ -91,7 +92,7 @@ Cuando se activa el debug display con la tecla `H`: ## 🎨 Sistema de Temas de Colores -**ViBe1 Delta** incluye 5 temas visuales que transforman completamente la apariencia del simulador: +**ViBe3 Physics** incluye 6 temas visuales que transforman completamente la apariencia del simulador: ### Temas Disponibles @@ -102,10 +103,11 @@ Cuando se activa el debug display con la tecla `H`: | `KP_3` | **NEON** | Colores vibrantes futuristas | Degradado magenta-cian | Magentas, cianes y rosas brillantes | | `KP_4` | **BOSQUE** | Naturaleza verde relajante | Degradado verde oscuro-claro | Verdes naturales y tierra | | `KP_5` | **RGB** | Colores matematicos puros | Fondo blanco solido | RGB puros y subdivisiones matematicas | +| `KP_6` | **MONOCHROME** | Estetica minimalista monocromatica | Degradado negro | 8 tonos de gris (blanco a oscuro) | ### Controles de Temas -- **Seleccion directa**: Usa `KP_1`, `KP_2`, `KP_3`, `KP_4` o `KP_5` para cambiar inmediatamente al tema deseado +- **Seleccion directa**: Usa `KP_1` a `KP_6` para cambiar inmediatamente al tema deseado - **Ciclado secuencial**: Presiona `B` para avanzar al siguiente tema en orden - **Indicador visual**: El nombre del tema aparece temporalmente en el centro de la pantalla con colores tematicos - **Regeneracion automatica**: Las pelotas adoptan automaticamente la nueva paleta de colores al cambiar tema diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..92a5599 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,111 @@ +# ROADMAP - ViBe3 Physics + +## Estado Actual ✅ + +### Figuras 3D (8/8 Completadas) +- ✅ Q - SPHERE (Esfera Fibonacci) +- ✅ W - WAVE_GRID (Malla ondeante) +- ✅ E - HELIX (Espiral helicoidal) +- ✅ R - TORUS (Toroide/donut) +- ✅ T - CUBE (Cubo rotante) +- ✅ Y - CYLINDER (Cilindro) +- ✅ U - ICOSAHEDRON (Icosaedro D20) +- ✅ I - ATOM (Núcleo + órbitas) + +### Temas Visuales (5/6) +- ✅ SUNSET (Atardecer) +- ✅ OCEAN (Océano) +- ✅ NEON (Neón vibrante) +- ✅ FOREST (Bosque) +- ✅ RGB (Círculo cromático matemático) +- ⏳ MONOCHROME (Monocromo - próximo) + +--- + +## Mejoras de Presentación 🎨 + +### 1. ⏳ Tema MONOCHROME +**Descripción:** Tema monocromo con fondo negro degradado y sprites blancos sin colorear +**Prioridad:** Alta +**Estimación:** 30 minutos +**Detalles:** +- Fondo negro degradado (similar a NEON) +- Sprites base color blanco (255, 255, 255) +- Solo modulación de depth (brillo), sin cambio de hue +- Tecla KP_6 para selección directa + +### 2. ⏳ Cambio de Tema con LERP +**Descripción:** Transición suave entre temas sin reiniciar escenario +**Prioridad:** Alta +**Estimación:** 1 hora +**Detalles:** +- Interpolación lineal (LERP) de colores RGB +- Transición gradual de 0.5-1.0 segundos +- Mantener pelotas existentes, solo cambiar colores +- Fondo degradado también con LERP +- No llamar a `initBalls()`, solo actualizar colores + +### 3. ⏳ Cambio de Textura en Caliente +**Descripción:** Cambiar sprite/textura sin resetear física +**Prioridad:** Media +**Estimación:** 1 hora +**Detalles:** +- Sistema de gestión de múltiples texturas +- Cargar texturas al inicio (ball.png, ball_small.png, etc.) +- Actualizar collision box dinámicamente según tamaño +- Tecla dedicada (ej: `N`) para ciclar texturas +- Mantener física actual, solo cambiar render + +### 4. ⏳ Modo DEMO (Auto-play) +**Descripción:** Modo demostración automática con acciones aleatorias +**Prioridad:** Alta +**Estimación:** 1.5 horas +**Detalles:** +- Toggle con tecla `D` +- Timer que ejecuta acciones cada 3-8 segundos +- Acciones: cambiar gravedad, activar figura, cambiar tema, impulso +- Secuencia pseudo-aleatoria pero visualmente coherente +- Pausable con cualquier tecla de usuario +- Indicador visual "DEMO MODE" en pantalla + +### 5. ⏳ Sistema de Release +**Descripción:** Empaquetado para distribución standalone +**Prioridad:** Media +**Estimación:** 30 minutos +**Detalles:** +- Crear carpeta `release/` +- Script Python `pack_resources.py` para empaquetar +- Incluir SDL3.dll +- Incluir icon.png (si existe) +- Empaquetar `data/` en archivo .dat o .zip +- Target `make release` en Makefile +- README.txt con instrucciones + +--- + +## Futuras Mejoras (Ideas) + +### Performance +- [ ] Spatial partitioning para colisiones ball-to-ball +- [ ] Level-of-detail para 100K+ pelotas +- [ ] GPU compute shaders para física masiva + +### Efectos Visuales +- [ ] Trails (estelas de movimiento) +- [ ] Heatmaps de velocidad/energía +- [ ] Bloom/glow para sprites + +### Física Avanzada +- [ ] Colisiones entre partículas +- [ ] Viento (fuerza horizontal) +- [ ] Campos magnéticos (atracción/repulsión) +- [ ] Turbulencia + +### Interactividad +- [ ] Mouse: click para aplicar fuerzas +- [ ] Mouse: drag para crear campos +- [ ] Mouse wheel: ajustar intensidad + +--- + +**Última actualización:** 2025-10-04 diff --git a/data/ball.png b/data/ball.png index 4ead2915859c5d701f404437e6517d0b0c921680..6b1cc9c1e8f8a9a98b0320b8d2bbbb0e7a216170 100644 GIT binary patch delta 36 rcmZ3)xQKCrGwbr%hQ@Ozdbo+aeb}vcO4rt$0SG)@{an^LB{Ts5@-7T{ delta 36 qcmZ3)xQKCrGwU>ItJQNRdbo+0_H-I}xQ0Jx00K`}KbLh*2~7arJ`1}5 diff --git a/data/ball_small.png b/data/ball_small.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd2b391c5402024874a44e9de2f4c0d60f2f41d GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJ3i-X*q7}lMWc?sm0c)B=-aLkPD zJ;=*oz`?ZecYeq23;jZm_cknG=$-vB--%(xsuw2gp4)QYedhhXxgTe~DWM4fFCr>I literal 0 HcmV?d00001 diff --git a/source/defines.h b/source/defines.h index 2713da3..6d71104 100644 --- a/source/defines.h +++ b/source/defines.h @@ -53,11 +53,12 @@ enum class GravityDirection { // Enum para temas de colores (seleccionables con teclado numérico) enum class ColorTheme { - SUNSET = 0, // Naranjas, rojos, amarillos, rosas - OCEAN = 1, // Azules, turquesas, blancos - NEON = 2, // Cian, magenta, verde lima, amarillo vibrante - FOREST = 3, // Verdes, marrones, amarillos otoño - RGB = 4 // RGB puros y subdivisiones matemáticas (fondo blanco) + SUNSET = 0, // Naranjas, rojos, amarillos, rosas + OCEAN = 1, // Azules, turquesas, blancos + NEON = 2, // Cian, magenta, verde lima, amarillo vibrante + FOREST = 3, // Verdes, marrones, amarillos otoño + RGB = 4, // RGB puros y subdivisiones matemáticas (fondo blanco) + MONOCHROME = 5 // Fondo negro degradado, sprites blancos monocromáticos }; // Enum para tipo de figura 3D diff --git a/source/engine.cpp b/source/engine.cpp index 3702333..246f2d7 100644 --- a/source/engine.cpp +++ b/source/engine.cpp @@ -316,6 +316,11 @@ void Engine::handleEvents() { initBalls(scenario_); break; + case SDLK_KP_6: + current_theme_ = ColorTheme::MONOCHROME; + initBalls(scenario_); + break; + // Control de escala de figura (solo en modo SHAPE) case SDLK_KP_PLUS: if (current_mode_ == SimulationMode::SHAPE) { @@ -979,6 +984,22 @@ void Engine::initializeThemes() { {255, 0, 64} // 345° - Magenta claro-Rojo } }; + + // MONOCHROME: Fondo negro degradado, sprites blancos monocromáticos (8 tonos grises) + themes_[5] = { + 20.0f / 255.0f, 20.0f / 255.0f, 20.0f / 255.0f, // Fondo superior (gris muy oscuro) + 0.0f / 255.0f, 0.0f / 255.0f, 0.0f / 255.0f, // Fondo inferior (negro puro) + { + {255, 255, 255}, // Blanco puro + {230, 230, 230}, // Gris muy claro + {200, 200, 200}, // Gris claro + {170, 170, 170}, // Gris medio-claro + {140, 140, 140}, // Gris medio + {110, 110, 110}, // Gris medio-oscuro + {80, 80, 80}, // Gris oscuro + {50, 50, 50} // Gris muy oscuro + } + }; } void Engine::checkAutoRestart() { diff --git a/source/engine.h b/source/engine.h index f9d0e3f..e3f504a 100644 --- a/source/engine.h +++ b/source/engine.h @@ -79,7 +79,7 @@ private: }; // Temas de colores definidos - ThemeColors themes_[5]; + ThemeColors themes_[6]; // 6 temas: SUNSET, OCEAN, NEON, FOREST, RGB, MONOCHROME // Sistema de Figuras 3D (polimórfico) SimulationMode current_mode_ = SimulationMode::PHYSICS;