import type { AccessibilitySettings, Dimensions, PerformanceMetrics, QualityLevel } from "../../../core/domain/types.js"; import type { IBackgroundSystem } from "../../../core/contracts/IBackgroundSystem.js"; import type { FishMarineLife, JellyfishMarineLife } from "../domain/models/OceanModels.js"; import type { IBubblePhysics } from "./contracts/IBubblePhysics.js"; import type { IParticleSystem } from "./contracts/IParticleSystem.js"; import type { ILightRayCalculator } from "./contracts/ILightRayCalculator.js"; import type { IFishAnimator } from "./contracts/IFishAnimator.js"; import type { IJellyfishAnimator } from "./contracts/IJellyfishAnimator.js"; import type { IGradientRenderer } from "./contracts/IGradientRenderer.js"; import type { ILightRayRenderer } from "./contracts/ILightRayRenderer.js"; import type { IBubbleRenderer } from "./contracts/IBubbleRenderer.js"; import type { IParticleRenderer } from "./contracts/IParticleRenderer.js"; import type { IFishRenderer } from "./contracts/IFishRenderer.js"; import type { IJellyfishRenderer } from "./contracts/IJellyfishRenderer.js"; /** * Ocean Background Orchestrator * * Thin coordinator that delegates to focused, single-responsibility services. * Each service handles exactly one concern (physics, animation, or rendering). */ export interface OceanLayers { gradient: boolean; lightRays: boolean; caustics: boolean; particles: boolean; bubbles: boolean; fish: boolean; jellyfish: boolean; } export declare class OceanBackgroundOrchestrator implements IBackgroundSystem { private bubblePhysics; private particleSystem; private lightRayCalculator; private fishAnimator; private jellyfishAnimator; private gradientRenderer; private lightRayRenderer; private bubbleRenderer; private particleRenderer; private fishRenderer; private jellyfishRenderer; private state; private quality; private accessibility; private animationTime; private perfMonitor; private pointer; /** Last dimensions seen by update() — pokeAt needs them for pitch/pan mapping. */ private lastDimensions; private layerVisibility; constructor(bubblePhysics: IBubblePhysics, particleSystem: IParticleSystem, lightRayCalculator: ILightRayCalculator, fishAnimator: IFishAnimator, jellyfishAnimator: IJellyfishAnimator, gradientRenderer: IGradientRenderer, lightRayRenderer: ILightRayRenderer, bubbleRenderer: IBubbleRenderer, particleRenderer: IParticleRenderer, fishRenderer: IFishRenderer, jellyfishRenderer: IJellyfishRenderer); /** * Factory method: creates a fully-wired orchestrator using the service factory. * Use this instead of calling the constructor directly. */ static create(): OceanBackgroundOrchestrator; private createEmptyState; initialize(dimensions: Dimensions, quality: QualityLevel, options?: { spawnFishOnScreen?: boolean; }): Promise; private prePopulateElements; update(dimensions: Dimensions, frameMultiplier?: number): void; draw(ctx: CanvasRenderingContext2D, dimensions: Dimensions): void; setQuality(quality: QualityLevel): void; setPointer(x: number, y: number, active: boolean): void; /** * Hit-test a tap against the jellyfish swarm. Finds the closest jelly whose bell * covers (x, y) and, on a hit, lights its bell from within (flashTimer) and * returns the note mapping the caller uses to ring a chime. * * pitch01 — 0..1, higher on screen → higher note (vertical xylophone, mirrors * the 3D depth→pitch assignment). * pan — -1..1 from horizontal position. * * Bell radius is size*0.6 (renderer treats `size` as the full bell diameter, so * the true radius is ~size*0.5; the extra margin makes taps land easily). */ pokeAt(x: number, y: number): { hit: boolean; pitch01: number; pan: number; }; setAccessibilitySettings(settings: AccessibilitySettings): void; setThumbnailMode(enabled: boolean): void; setLayerVisibility(layers: Partial): void; getLayerVisibility(): OceanLayers; getStats(): { fish: number; jellyfish: number; bubbles: number; particles: number; }; /** * Get the current fish array for external access (e.g., Fish Behavior Lab) */ getFish(): FishMarineLife[]; /** * Get the fish animator for external access (e.g., Fish Behavior Lab) * Used for accessing sub-handlers like hunting, interactions, etc. */ getFishAnimator(): IFishAnimator; /** * Get the jellyfish animator for external access (e.g., Fish Behavior Lab) */ getJellyfishAnimator(): IJellyfishAnimator; /** * Get the current jellyfish array for external access (e.g., Fish Behavior Lab) */ getJellyfish(): JellyfishMarineLife[]; getMetrics(): PerformanceMetrics; handleResize(oldDimensions: Dimensions, newDimensions: Dimensions): void; cleanup(): void; dispose(): void; } //# sourceMappingURL=OceanBackgroundOrchestrator.d.ts.map