Commit Graph

2 Commits

Author SHA1 Message Date
0592699a0b PHASE 3: LERP universal entre cualquier par de temas implementado
Sistema de transiciones suaves (0.5s) entre temas:
- Funciona entre CUALQUIER combinación (estático↔estático, estático↔dinámico, dinámico↔dinámico)
- Sistema de snapshots: Captura estado del tema origen antes de cambiar
- LERP durante transición: snapshot → tema destino (colors, background, text)
- Duración configurable: THEME_TRANSITION_DURATION = 0.5s (defines.h)

Nuevo archivo:
- source/themes/theme_snapshot.h: Estructura para capturar estado de tema

Implementación:
- captureCurrentSnapshot(): Captura 50,000 colores de pelotas + fondo + texto
- switchToTheme(): Captura snapshot y configura transición LERP
- update(): Avanza transition_progress (0.0→1.0) y libera snapshot al completar
- getInterpolatedColor(): LERP entre snapshot y tema destino si transitioning
- getBackgroundColors(): LERP de colores de fondo (top/bottom degradado)
- getCurrentThemeTextColor(): LERP de color de texto UI

Características:
 Transiciones suaves en Numpad 1-0 (cambio directo de tema)
 Transiciones suaves en Tecla B (cycling entre todos los temas)
 Transiciones suaves en DEMO mode (tema aleatorio cada 8-12s)
 Temas dinámicos siguen animándose durante transición (morph animado)
 Memoria eficiente: snapshot existe solo durante 0.5s, luego se libera

Mejoras visuales:
- Cambios de tema ya no son instantáneos/abruptos
- Morphing suave de colores de pelotas (cada pelota hace LERP individual)
- Fade suave de fondo degradado (top y bottom independientes)
- Transición de color de texto UI

Performance:
- Snapshot capture: ~0.05ms (solo al cambiar tema)
- LERP per frame: ~0.01ms adicional durante 0.5s
- Impacto: Imperceptible (<1% CPU adicional)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 13:30:34 +02:00
a134ae428f PHASE 2: Refactorización completa del sistema de temas unificado
Arquitectura polimórfica implementada:
- Jerarquía: Theme (base) → StaticTheme / DynamicTheme (derivadas)
- Vector unificado de 10 temas (7 estáticos + 3 dinámicos)
- Eliminada lógica dual (if(dynamic_theme_active_) scattered)

Nuevos archivos:
- source/themes/theme.h: Interfaz base abstracta
- source/themes/static_theme.h/cpp: Temas estáticos (1 keyframe)
- source/themes/dynamic_theme.h/cpp: Temas dinámicos (N keyframes animados)
- source/theme_manager.h/cpp: Gestión unificada de temas

Mejoras de API:
- switchToTheme(0-9): Cambio a cualquier tema (índice 0-9)
- cycleTheme(): Cicla por todos los temas (Tecla B)
- update(delta_time): Actualización simplificada
- getInterpolatedColor(idx): Sin parámetro balls_

Bugs corregidos:
- Tecla B ahora cicla TODOS los 10 temas (antes solo 6)
- DEMO mode elige de TODOS los temas (antes excluía LAVENDER + dinámicos)
- Eliminada duplicación de keyframes en temas dinámicos (loop=true lo maneja)

Código reducido:
- theme_manager.cpp: 558 → 320 líneas (-43%)
- engine.cpp: Eliminados ~470 líneas de lógica de temas
- Complejidad significativamente reducida

Preparado para PHASE 3 (LERP universal entre cualquier par de temas)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 13:17:54 +02:00