#pragma once #include #include #include "defines.hpp" // for Color /** * ThemeSnapshot: "Fotografía" del estado de un tema en un momento dado * * Propósito: * - Capturar el estado visual completo de un tema (estático o dinámico) * - Permitir LERP entre cualquier par de temas (incluso dinámicos en movimiento) * - Snapshot temporal que existe solo durante la transición (se libera al completar) * * Uso en PHASE 3: * - Al cambiar de tema, se captura snapshot del tema origen * - Durante transición, se hace LERP: snapshot → tema destino * - Al completar transición (progress = 1.0), se libera snapshot * * Contenido capturado: * - Colores de fondo (degradado top/bottom) * - Colores de texto UI * - Colores de pelotas (suficientes para escenario máximo) * - Nombres del tema (para debug display durante transición) */ struct ThemeSnapshot { // Colores de fondo degradado float bg_top_r, bg_top_g, bg_top_b; float bg_bottom_r, bg_bottom_g, bg_bottom_b; // Color de texto UI int text_color_r, text_color_g, text_color_b; // Color de fondo de notificaciones int notif_bg_r, notif_bg_g, notif_bg_b; // Nombres del tema (para mostrar "SOURCE → TARGET" durante transición) std::string name_en; std::string name_es; // Colores de pelotas capturados (índice = ball_index % ball_colors.size()) // Se capturan suficientes colores para cubrir escenario máximo (50,000 pelotas) // Nota: Si el tema tiene 8 colores y capturamos 50,000, habrá repetición // pero permite LERP correcto incluso con muchas pelotas std::vector ball_colors; };