From ac57755bd2993ee50f5e895430b5053bd183cc3f Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 18 Sep 2025 22:08:28 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adir=20tema=20RGB=20y=20actualizar=20doc?= =?UTF-8?q?umentaci=C3=B3n=20completa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- CLAUDE.md | 2 +- README.md | 55 +++++++++++++++++++++++++++++++++-------------- source/defines.h | 3 ++- source/engine.cpp | 31 ++++++++++++++++---------- source/engine.h | 8 +++++-- 5 files changed, 68 insertions(+), 31 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b061837..0bb5b56 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 | diff --git a/README.md b/README.md index 30d1955..0e5143d 100644 --- a/README.md +++ b/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 - **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. --- diff --git a/source/defines.h b/source/defines.h index 6e7fc0d..6713e0c 100644 --- a/source/defines.h +++ b/source/defines.h @@ -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) }; \ No newline at end of file diff --git a/source/engine.cpp b/source/engine.cpp index 4b6d387..fcdb30b 100644 --- a/source/engine.cpp +++ b/source/engine.cpp @@ -199,7 +199,7 @@ void Engine::handleEvents() { case SDLK_T: // Ciclar al siguiente tema - current_theme_ = static_cast((static_cast(current_theme_) + 1) % 4); + current_theme_ = static_cast((static_cast(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(current_theme_)]; - int theme_text_width = static_cast(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(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(current_theme_)]; + int theme_text_width = static_cast(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]); } diff --git a/source/engine.h b/source/engine.h index 43937ad..18a7b47 100644 --- a/source/engine.h +++ b/source/engine.h @@ -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