Implementar Temas Dinámicos (Keyframe Sequence System)
✨ NUEVAS CARACTERÍSTICAS: **Sistema de Temas Dinámicos Animados:** - 3 temas dinámicos predefinidos con transiciones automáticas - Keyframe sequence: múltiples estados intermedios con duraciones configurables - Interpolación LERP entre keyframes (fondo + colores de pelotas) - Loop infinito automático **Temas Implementados:** 1. **SUNRISE (Numpad 8)** - Amanecer: Noche → Alba → Día - 4 keyframes: Azul nocturno → Naranja-rosa alba → Amarillo brillante día → Loop - Duraciones: 0s → 4s → 3s → 5s (total: 12s por ciclo) 2. **OCEAN WAVES (Numpad 9)** - Olas Oceánicas: Profundidad ↔ Superficie - 3 keyframes: Azul marino oscuro ↔ Turquesa brillante - Duraciones: 0s → 4s → 4s (total: 8s por ciclo) 3. **NEON PULSE (Numpad 0)** - Pulso Neón: Apagado ↔ Encendido - 3 keyframes: Negro apagado ↔ Cian-magenta vibrante - Duraciones: 0s → 1.5s → 1.5s (total: 3s ping-pong rápido) **Controles:** - Numpad 8/9/0: Activar tema dinámico SUNRISE/OCEAN WAVES/NEON PULSE - Shift+D: Pausar/reanudar animación de tema dinámico activo - Temas estáticos (1-7) desactivan modo dinámico automáticamente **Arquitectura:** - defines.h: Estructuras DynamicThemeKeyframe + DynamicTheme - engine.h: Estado dinámico (keyframes, progress, pausa) - engine.cpp: - initializeDynamicThemes(): 3 temas predefinidos con keyframes - updateDynamicTheme(): Motor de animación (avance keyframes + loop) - activateDynamicTheme(): Iniciar tema dinámico - pauseDynamicTheme(): Toggle pausa con Shift+D - renderGradientBackground(): Soporte interpolación keyframes - getInterpolatedColor(): Soporte colores dinámicos **Detalles Técnicos:** - Transiciones suaves independientes del framerate (delta_time) - Compatibilidad total con sistema LERP estático existente - Desactivación mutua: tema estático desactiva dinámico (y viceversa) - Velocidades variables por transición (1.5s - 5s configurables) - Display automático de nombre de tema al activar 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -99,6 +99,15 @@ class Engine {
|
||||
// Temas de colores definidos
|
||||
ThemeColors themes_[7]; // 7 temas: SUNSET, OCEAN, NEON, FOREST, RGB, MONOCHROME, LAVENDER
|
||||
|
||||
// Sistema de Temas Dinámicos (animados)
|
||||
DynamicTheme dynamic_themes_[3]; // 3 temas dinámicos predefinidos
|
||||
bool dynamic_theme_active_ = false; // ¿Tema dinámico activo?
|
||||
int current_dynamic_theme_index_ = -1; // Índice del tema dinámico actual (-1 = ninguno)
|
||||
size_t current_keyframe_index_ = 0; // Keyframe actual
|
||||
size_t target_keyframe_index_ = 1; // Próximo keyframe
|
||||
float dynamic_transition_progress_ = 0.0f; // Progreso 0.0-1.0 hacia próximo keyframe
|
||||
bool dynamic_theme_paused_ = false; // Pausa manual con Shift+D
|
||||
|
||||
// Sistema de Figuras 3D (polimórfico)
|
||||
SimulationMode current_mode_ = SimulationMode::PHYSICS;
|
||||
ShapeType current_shape_type_ = ShapeType::SPHERE; // Tipo de figura actual
|
||||
@@ -150,6 +159,12 @@ class Engine {
|
||||
std::string gravityDirectionToString(GravityDirection direction) const;
|
||||
void initializeThemes();
|
||||
|
||||
// Sistema de Temas Dinámicos
|
||||
void initializeDynamicThemes(); // Inicializar 3 temas dinámicos predefinidos
|
||||
void updateDynamicTheme(); // Actualizar animación de tema dinámico (llamado cada frame)
|
||||
void activateDynamicTheme(int index); // Activar tema dinámico (0-2)
|
||||
void pauseDynamicTheme(); // Toggle pausa de animación (Shift+D)
|
||||
|
||||
// Sistema de gestión de estados (MANUAL/DEMO/DEMO_LITE/LOGO)
|
||||
void setState(AppMode new_mode); // Cambiar modo de aplicación (mutuamente excluyente)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user