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:
@@ -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 |
|
||||||
|
|||||||
55
README.md
55
README.md
@@ -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
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
};
|
};
|
||||||
@@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user