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** |
| V | Alternar V-Sync ON/OFF |
| 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 |
| 1-8 | Cambiar número de pelotas (1 a 100,000) |
| 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
- **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
- **Renderizado batch optimizado**: Sistema de batch rendering con SDL_RenderGeometry para 50K+ sprites
- **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 de Sistema
| Tecla | Accion |
|-------|--------|
| `H` | **Alternar debug display (FPS, V-Sync, valores fisica)** |
| `V` | **Alternar V-Sync ON/OFF** |
| `F1-F4` | **Seleccion directa de tema de colores (Atardecer/Oceano/Neon/Bosque)** |
| `T` | **Ciclar entre temas de colores** |
| `ESC` | Salir del programa |
### 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) |
| `ESPACIO` | Impulsar todas las pelotas hacia arriba |
| `G` | Alternar direccion de la gravedad |
| `ESC` | Salir del programa |
| `G` | Alternar direccion de la gravedad (↓↑←→) |
## 📊 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 derecha**: Contador FPS en tiempo real en **amarillo**
- **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
**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
| Tecla | Tema | Descripcion | Fondo | Paleta de Pelotas |
|-------|------|-------------|-------|-------------------|
| `F1` | **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 |
| `F3` | **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_1` | **ATARDECER** | Colores calidos de puesta de sol | Degradado naranja-rojo | Tonos naranjas, rojos y amarillos |
| `KP_2` | **OCEANO** | Ambiente marino refrescante | Degradado azul-cian | Azules, cianes y verdes agua |
| `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 |
### 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
- **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
@@ -143,7 +168,7 @@ make
## 📊 Detalles Tecnicos
### Configuracion Actual
- **Resolucion**: 320x240 pixeles (escalado x3 = 960x720)
- **Resolucion**: 640x360 pixeles (escalado x2 = 1280x720)
- **Sistema de timing**: Delta time independiente del framerate
- **Fisica**: Gravedad constante (0.2f), rebotes con perdida de energia
- **Tamaño de pelota**: 10x10 pixeles
@@ -349,9 +374,7 @@ Para contribuir al proyecto:
## 🐛 Problemas Conocidos
- FPS drops significativos con >10,000 pelotas
- Timing dependiente del framerate (solucion en desarrollo)
- Sin interpolacion en el renderizado
Ninguno conocido. El sistema esta completamente funcional con delta time implementado.
---

View File

@@ -54,5 +54,6 @@ 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
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:
// 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
break;
@@ -224,6 +224,11 @@ void Engine::handleEvents() {
initBalls(scenario_);
break;
case SDLK_KP_5:
current_theme_ = ColorTheme::RGB;
initBalls(scenario_);
break;
case SDLK_1:
scenario_ = 0;
initBalls(scenario_);
@@ -313,22 +318,26 @@ void Engine::render() {
}
if (show_text_) {
dbg_print(text_pos_, 8, text_.c_str(), 255, 255, 255);
// 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
// Colores acordes a cada tema (para texto del número de pelotas y nombre del tema)
int theme_colors[][3] = {
{255, 140, 60}, // ATARDECER: Naranja cálido
{80, 200, 255}, // OCEANO: Azul océano
{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_);
// 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]);
}

View File

@@ -73,7 +73,7 @@ private:
};
// Temas de colores definidos
ThemeColors themes_[4] = {
ThemeColors themes_[5] = {
// SUNSET: Naranjas, rojos, amarillos, rosas
{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)
@@ -89,7 +89,11 @@ private:
// FOREST: Verdes, marrones, amarillos otoño
{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)
{{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