Añadir tema RGB y actualizar documentación completa

- Añadido nuevo tema RGB con fondo blanco puro y colores matemáticos
- Actualizado README.md con controles actuales y nuevas características
- Reorganizada documentación de controles por categorías
- Corregida información obsoleta (resolución, temas, problemas)
- Añadido control KP_5 para selección directa del tema RGB
- Mejorada visibilidad del texto adaptando colores por tema

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-18 22:08:28 +02:00
parent 7b24e387b7
commit ac57755bd2
5 changed files with 68 additions and 31 deletions

View File

@@ -49,7 +49,7 @@
| **→** | **Gravedad hacia DERECHA** | | **→** | **Gravedad hacia DERECHA** |
| V | Alternar V-Sync ON/OFF | | V | Alternar V-Sync ON/OFF |
| H | **Toggle debug display (FPS, V-Sync, física, gravedad)** | | H | **Toggle debug display (FPS, V-Sync, física, gravedad)** |
| F1-F4 | Selección directa de tema (Atardecer/Océano/Neón/Bosque) | | Num 1-4 | Selección directa de tema (Atardecer/Océano/Neón/Bosque) |
| T | Ciclar entre temas de colores | | T | Ciclar entre temas de colores |
| 1-8 | Cambiar número de pelotas (1 a 100,000) | | 1-8 | Cambiar número de pelotas (1 a 100,000) |
| ESPACIO | Impulsar pelotas hacia arriba | | ESPACIO | Impulsar pelotas hacia arriba |

View File

@@ -8,7 +8,10 @@ El nombre refleja su proposito: **ViBe** (vibe-coding experimental) + **Physics*
- **Simulacion de fisica**: Gravedad, rebotes y colisiones con perdida de energia - **Simulacion de fisica**: Gravedad, rebotes y colisiones con perdida de energia
- **Multiples escenarios**: 8 configuraciones predefinidas (1 a 100,000 pelotas) - **Multiples escenarios**: 8 configuraciones predefinidas (1 a 100,000 pelotas)
- **Sistema de temas visuales**: 4 temas de colores con fondos degradados y paletas tematicas - **Sistema de temas visuales**: 5 temas de colores con fondos degradados y paletas tematicas
- **Sistema de zoom dinamico**: F1/F2 para ajustar el zoom de ventana (1x-10x)
- **Modos fullscreen**: F3 para fullscreen normal, F4 para real fullscreen con resolucion nativa
- **Gravedad multidireccional**: Gravedad hacia abajo, arriba, izquierda o derecha
- **Interactividad**: Controles de teclado para modificar el comportamiento - **Interactividad**: Controles de teclado para modificar el comportamiento
- **Renderizado batch optimizado**: Sistema de batch rendering con SDL_RenderGeometry para 50K+ sprites - **Renderizado batch optimizado**: Sistema de batch rendering con SDL_RenderGeometry para 50K+ sprites
- **Colores tematicos**: Paletas de 8 colores por tema aplicadas proceduralmente - **Colores tematicos**: Paletas de 8 colores por tema aplicadas proceduralmente
@@ -17,16 +20,37 @@ El nombre refleja su proposito: **ViBe** (vibe-coding experimental) + **Physics*
## 🎮 Controles ## 🎮 Controles
### Controles de Sistema
| Tecla | Accion | | Tecla | Accion |
|-------|--------| |-------|--------|
| `H` | **Alternar debug display (FPS, V-Sync, valores fisica)** | | `H` | **Alternar debug display (FPS, V-Sync, valores fisica)** |
| `V` | **Alternar V-Sync ON/OFF** | | `V` | **Alternar V-Sync ON/OFF** |
| `F1-F4` | **Seleccion directa de tema de colores (Atardecer/Oceano/Neon/Bosque)** | | `ESC` | Salir del programa |
| `T` | **Ciclar entre temas de colores** |
### Controles de Ventana
| Tecla | Accion |
|-------|--------|
| `F1` | **Zoom out (reducir zoom ventana)** |
| `F2` | **Zoom in (aumentar zoom ventana)** |
| `F3` | **Toggle fullscreen normal** |
| `F4` | **Toggle real fullscreen (resolucion nativa)** |
### Controles de Temas
| Tecla | Accion |
|-------|--------|
| `KP_1` | **Tema ATARDECER (colores calidos)** |
| `KP_2` | **Tema OCEANO (azules y cianes)** |
| `KP_3` | **Tema NEON (colores vibrantes)** |
| `KP_4` | **Tema BOSQUE (verdes naturales)** |
| `KP_5` | **Tema RGB (fondo blanco, colores matematicos)** |
| `T` | **Ciclar entre todos los temas** |
### Controles de Simulacion
| Tecla | Accion |
|-------|--------|
| `1-8` | Cambiar numero de pelotas (1, 10, 100, 500, 1K, 10K, 50K, 100K) | | `1-8` | Cambiar numero de pelotas (1, 10, 100, 500, 1K, 10K, 50K, 100K) |
| `ESPACIO` | Impulsar todas las pelotas hacia arriba | | `ESPACIO` | Impulsar todas las pelotas hacia arriba |
| `G` | Alternar direccion de la gravedad | | `G` | Alternar direccion de la gravedad (↓↑←→) |
| `ESC` | Salir del programa |
## 📊 Informacion en Pantalla ## 📊 Informacion en Pantalla
@@ -40,24 +64,25 @@ Cuando se activa el debug display con la tecla `H`:
- **Esquina superior izquierda**: Estado V-Sync (VSYNC ON/OFF) en **cian** - **Esquina superior izquierda**: Estado V-Sync (VSYNC ON/OFF) en **cian**
- **Esquina superior derecha**: Contador FPS en tiempo real en **amarillo** - **Esquina superior derecha**: Contador FPS en tiempo real en **amarillo**
- **Lineas 3-5**: Valores fisica primera pelota (GRAV, VY, FLOOR) en **magenta** - **Lineas 3-5**: Valores fisica primera pelota (GRAV, VY, FLOOR) en **magenta**
- **Linea 6**: Tema activo (THEME SUNSET/OCEAN/NEON/FOREST) en **amarillo claro** - **Linea 6**: Tema activo (THEME SUNSET/OCEAN/NEON/FOREST/RGB) en **amarillo claro**
## 🎨 Sistema de Temas de Colores ## 🎨 Sistema de Temas de Colores
**ViBe1 Delta** incluye 4 temas visuales que transforman completamente la apariencia del simulador: **ViBe1 Delta** incluye 5 temas visuales que transforman completamente la apariencia del simulador:
### Temas Disponibles ### Temas Disponibles
| Tecla | Tema | Descripcion | Fondo | Paleta de Pelotas | | Tecla | Tema | Descripcion | Fondo | Paleta de Pelotas |
|-------|------|-------------|-------|-------------------| |-------|------|-------------|-------|-------------------|
| `F1` | **ATARDECER** | Colores calidos de puesta de sol | Degradado naranja-rojo | Tonos naranjas, rojos y amarillos | | `KP_1` | **ATARDECER** | Colores calidos de puesta de sol | Degradado naranja-rojo | Tonos naranjas, rojos y amarillos |
| `F2` | **OCEANO** | Ambiente marino refrescante | Degradado azul-cian | Azules, cianes y verdes agua | | `KP_2` | **OCEANO** | Ambiente marino refrescante | Degradado azul-cian | Azules, cianes y verdes agua |
| `F3` | **NEON** | Colores vibrantes futuristas | Degradado magenta-cian | Magentas, cianes y rosas brillantes | | `KP_3` | **NEON** | Colores vibrantes futuristas | Degradado magenta-cian | Magentas, cianes y rosas brillantes |
| `F4` | **BOSQUE** | Naturaleza verde relajante | Degradado verde oscuro-claro | Verdes naturales y tierra | | `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 |
### Controles de Temas ### Controles de Temas
- **Seleccion directa**: Usa `F1`, `F2`, `F3` o `F4` para cambiar inmediatamente al tema deseado - **Seleccion directa**: Usa `KP_1`, `KP_2`, `KP_3`, `KP_4` o `KP_5` para cambiar inmediatamente al tema deseado
- **Ciclado secuencial**: Presiona `T` para avanzar al siguiente tema en orden - **Ciclado secuencial**: Presiona `T` para avanzar al siguiente tema en orden
- **Indicador visual**: El nombre del tema aparece temporalmente en el centro de la pantalla con colores tematicos - **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 - **Regeneracion automatica**: Las pelotas adoptan automaticamente la nueva paleta de colores al cambiar tema
@@ -143,7 +168,7 @@ make
## 📊 Detalles Tecnicos ## 📊 Detalles Tecnicos
### Configuracion Actual ### Configuracion Actual
- **Resolucion**: 320x240 pixeles (escalado x3 = 960x720) - **Resolucion**: 640x360 pixeles (escalado x2 = 1280x720)
- **Sistema de timing**: Delta time independiente del framerate - **Sistema de timing**: Delta time independiente del framerate
- **Fisica**: Gravedad constante (0.2f), rebotes con perdida de energia - **Fisica**: Gravedad constante (0.2f), rebotes con perdida de energia
- **Tamaño de pelota**: 10x10 pixeles - **Tamaño de pelota**: 10x10 pixeles
@@ -349,9 +374,7 @@ Para contribuir al proyecto:
## 🐛 Problemas Conocidos ## 🐛 Problemas Conocidos
- FPS drops significativos con >10,000 pelotas Ninguno conocido. El sistema esta completamente funcional con delta time implementado.
- Timing dependiente del framerate (solucion en desarrollo)
- Sin interpolacion en el renderizado
--- ---

View File

@@ -54,5 +54,6 @@ enum class ColorTheme {
SUNSET = 0, // Naranjas, rojos, amarillos, rosas SUNSET = 0, // Naranjas, rojos, amarillos, rosas
OCEAN = 1, // Azules, turquesas, blancos OCEAN = 1, // Azules, turquesas, blancos
NEON = 2, // Cian, magenta, verde lima, amarillo vibrante NEON = 2, // Cian, magenta, verde lima, amarillo vibrante
FOREST = 3 // Verdes, marrones, amarillos otoño FOREST = 3, // Verdes, marrones, amarillos otoño
RGB = 4 // RGB puros y subdivisiones matemáticas (fondo blanco)
}; };

View File

@@ -199,7 +199,7 @@ void Engine::handleEvents() {
case SDLK_T: case SDLK_T:
// Ciclar al siguiente tema // Ciclar al siguiente tema
current_theme_ = static_cast<ColorTheme>((static_cast<int>(current_theme_) + 1) % 4); current_theme_ = static_cast<ColorTheme>((static_cast<int>(current_theme_) + 1) % (sizeof(themes_) / sizeof(themes_[0])));
initBalls(scenario_); // Regenerar bolas con nueva paleta initBalls(scenario_); // Regenerar bolas con nueva paleta
break; break;
@@ -224,6 +224,11 @@ void Engine::handleEvents() {
initBalls(scenario_); initBalls(scenario_);
break; break;
case SDLK_KP_5:
current_theme_ = ColorTheme::RGB;
initBalls(scenario_);
break;
case SDLK_1: case SDLK_1:
scenario_ = 0; scenario_ = 0;
initBalls(scenario_); initBalls(scenario_);
@@ -313,22 +318,26 @@ void Engine::render() {
} }
if (show_text_) { if (show_text_) {
dbg_print(text_pos_, 8, text_.c_str(), 255, 255, 255); // Colores acordes a cada tema (para texto del número de pelotas y nombre del tema)
// Mostrar nombre del tema en castellano debajo del número de pelotas
std::string theme_names_es[] = {"ATARDECER", "OCEANO", "NEON", "BOSQUE"};
std::string theme_name = theme_names_es[static_cast<int>(current_theme_)];
int theme_text_width = static_cast<int>(theme_name.length() * 8); // 8 píxeles por carácter
int theme_x = (current_screen_width_ - theme_text_width) / 2; // Centrar horizontalmente
// Colores acordes a cada tema
int theme_colors[][3] = { int theme_colors[][3] = {
{255, 140, 60}, // ATARDECER: Naranja cálido {255, 140, 60}, // ATARDECER: Naranja cálido
{80, 200, 255}, // OCEANO: Azul océano {80, 200, 255}, // OCEANO: Azul océano
{255, 60, 255}, // NEON: Magenta brillante {255, 60, 255}, // NEON: Magenta brillante
{100, 255, 100} // BOSQUE: Verde natural {100, 255, 100}, // BOSQUE: Verde natural
{100, 100, 100} // RGB: Gris oscuro (para contraste con fondo blanco)
}; };
int theme_idx = static_cast<int>(current_theme_); int theme_idx = static_cast<int>(current_theme_);
// Texto del número de pelotas con color del tema
dbg_print(text_pos_, 8, text_.c_str(), theme_colors[theme_idx][0], theme_colors[theme_idx][1], theme_colors[theme_idx][2]);
// Mostrar nombre del tema en castellano debajo del número de pelotas
std::string theme_names_es[] = {"ATARDECER", "OCEANO", "NEON", "BOSQUE", "RGB"};
std::string theme_name = theme_names_es[static_cast<int>(current_theme_)];
int theme_text_width = static_cast<int>(theme_name.length() * 8); // 8 píxeles por carácter
int theme_x = (current_screen_width_ - theme_text_width) / 2; // Centrar horizontalmente
// Texto del nombre del tema con el mismo color
dbg_print(theme_x, 24, theme_name.c_str(), theme_colors[theme_idx][0], theme_colors[theme_idx][1], theme_colors[theme_idx][2]); dbg_print(theme_x, 24, theme_name.c_str(), theme_colors[theme_idx][0], theme_colors[theme_idx][1], theme_colors[theme_idx][2]);
} }

View File

@@ -73,7 +73,7 @@ private:
}; };
// Temas de colores definidos // Temas de colores definidos
ThemeColors themes_[4] = { ThemeColors themes_[5] = {
// SUNSET: Naranjas, rojos, amarillos, rosas // SUNSET: Naranjas, rojos, amarillos, rosas
{180.0f / 255.0f, 140.0f / 255.0f, 100.0f / 255.0f, // Fondo superior (naranja suave) {180.0f / 255.0f, 140.0f / 255.0f, 100.0f / 255.0f, // Fondo superior (naranja suave)
40.0f / 255.0f, 20.0f / 255.0f, 60.0f / 255.0f, // Fondo inferior (púrpura oscuro) 40.0f / 255.0f, 20.0f / 255.0f, 60.0f / 255.0f, // Fondo inferior (púrpura oscuro)
@@ -89,7 +89,11 @@ private:
// FOREST: Verdes, marrones, amarillos otoño // FOREST: Verdes, marrones, amarillos otoño
{144.0f / 255.0f, 238.0f / 255.0f, 144.0f / 255.0f, // Fondo superior (verde claro) {144.0f / 255.0f, 238.0f / 255.0f, 144.0f / 255.0f, // Fondo superior (verde claro)
101.0f / 255.0f, 67.0f / 255.0f, 33.0f / 255.0f, // Fondo inferior (marrón tierra) 101.0f / 255.0f, 67.0f / 255.0f, 33.0f / 255.0f, // Fondo inferior (marrón tierra)
{{34, 139, 34}, {107, 142, 35}, {154, 205, 50}, {255, 215, 0}, {210, 180, 140}, {160, 82, 45}, {218, 165, 32}, {50, 205, 50}}} {{34, 139, 34}, {107, 142, 35}, {154, 205, 50}, {255, 215, 0}, {210, 180, 140}, {160, 82, 45}, {218, 165, 32}, {50, 205, 50}}},
// RGB: Colores RGB puros y subdivisiones matemáticas
{1.0f, 1.0f, 1.0f, // Fondo superior (blanco puro)
1.0f, 1.0f, 1.0f, // Fondo inferior (blanco puro) - sin degradado
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {0, 255, 255}, {255, 0, 255}, {128, 255, 128}, {255, 128, 128}}}
}; };
// Batch rendering // Batch rendering