/** * Core model interfaces for the background system */ import type { Dimensions, QualityLevel, PerformanceMetrics, AccessibilitySettings } from "./types.js"; /** * Animation component interface - stateful components that render to canvas */ export interface AnimationComponent { initialize: (dimensions: Dimensions, quality: QualityLevel) => void; update: (dimensions: Dimensions) => void; draw: (ctx: CanvasRenderingContext2D, dimensions: Dimensions) => void; cleanup: () => void; setQuality: (quality: QualityLevel) => void; setAccessibility?: (settings: AccessibilitySettings) => void; } /** * Animation system interface - functional pattern for stateless systems */ export interface AnimationSystem { initialize: (dimensions: Dimensions, quality: QualityLevel) => T; update: (state: T, dimensions: Dimensions) => T; draw: (state: T, ctx: CanvasRenderingContext2D, dimensions: Dimensions) => void; cleanup?: () => void; setQuality?: (quality: QualityLevel) => void; adjustToResize?: (state: T, oldDimensions: Dimensions, newDimensions: Dimensions, quality: QualityLevel) => T; setAccessibility?: (settings: AccessibilitySettings) => void; } /** * Background system interface - the main contract all backgrounds implement */ export interface BackgroundSystem { initialize: (dimensions: Dimensions, quality: QualityLevel) => void; update: (dimensions: Dimensions, frameMultiplier?: number) => void; draw: (ctx: CanvasRenderingContext2D, dimensions: Dimensions) => void; setQuality: (quality: QualityLevel) => void; cleanup: () => void; handleResize?: (oldDimensions: Dimensions, newDimensions: Dimensions) => void; setAccessibility?: (settings: AccessibilitySettings) => void; getMetrics?: () => PerformanceMetrics; /** * Set the current pointer position (canvas-logical px) for interactive * backgrounds (e.g. fish cursor flee). active=false when pointer left. * pointerType lets motion effects keep touch input flat. */ setPointer?: (x: number, y: number, active: boolean, pointerType?: string) => void; /** * Tap-test the background at (x, y) in canvas-logical px. Interactive * backgrounds (e.g. ocean jellyfish) hit-test their elements and, on a hit, * trigger feedback (flash) and return a note mapping the caller can sonify. * pitch01 in [0,1] (higher = higher pitch), pan in [-1,1]. */ pokeAt?: (x: number, y: number) => { hit: boolean; pitch01: number; pan: number; } | void; } //# sourceMappingURL=models.d.ts.map