import { activeVibe } from '../settings'; import { hexToRgb } from '../utils/hex-to-rgb'; import { type VibeId } from '../vibes'; import { RenderInputs } from './game-loop-types'; export class RenderInputCache { private cachedVibeId: VibeId | null = null; private cachedRenderInputs?: RenderInputs; private previousAccentColor = ''; public invalidate(): void { this.cachedVibeId = null; this.cachedRenderInputs = undefined; } public get(): RenderInputs { if (this.cachedRenderInputs && this.cachedVibeId === activeVibe.id) { return this.cachedRenderInputs; } this.cachedVibeId = activeVibe.id; this.cachedRenderInputs = { channelColors: activeVibe.colors.map(hexToRgb), backgroundColor: hexToRgb(activeVibe.backgroundColor), }; return this.cachedRenderInputs; } public updateAccentColor(color: [number, number, number]): void { const accentColor = `rgb(${Math.round(color[0] * 255)},${Math.round( color[1] * 255 )},${Math.round(color[2] * 255)})`; if (this.previousAccentColor === accentColor) { return; } this.previousAccentColor = accentColor; document.documentElement.style.setProperty('--accent-color', accentColor); } }