/** * Procedural Forest System * * Master orchestrator for the A+++ procedural forest background. * Coordinates all subsystems to create an immersive, layered forest scene: * * - ParallaxForestComposer: Multi-layer tree distribution with parallax * - AtmosphericFogSystem: Distance fog, ground mist, wispy patches * - GroundLayerSystem: Bushes, grass, ferns * - WindAnimator: Organic sway animation for vegetation * - EasterEggSystem: Owls, bats, moon, shooting stars * * Provides unified API for initialization, updates, and rendering data. */ import { type ParallaxForestConfig, type ForestLayer, type ForestTreeInstance } from "./composition/ParallaxForestComposer.js"; import { type FogConfig, type FogLayer, type GroundFogData, type FogPatch, type MistLayerData } from "./atmosphere/AtmosphericFogSystem.js"; import { type GroundLayerConfig, type GroundElement, type GrassTuft } from "./ground/GroundLayerSystem.js"; import { type WindConfig, type WindDisplacement, WIND_PRESETS } from "./animation/WindAnimator.js"; import { EasterEggSystem, type EasterEggConfig, type OwlSilhouette, type BatFlock, type ShootingStar, type GlowingEyes } from "./ambient/EasterEggSystem.js"; import { MoonRenderer, type MoonConfig, type MoonState } from "../../../core/services/MoonRenderer.js"; export type QualityLevel = "low" | "medium" | "high" | "ultra"; export interface ProceduralForestConfig { width: number; height: number; quality?: QualityLevel; forest?: Partial; fog?: Partial; ground?: Partial; wind?: Partial; easterEggs?: Partial; moon?: Partial; seed?: number; enabled: boolean; parallaxEnabled: boolean; windEnabled: boolean; fogEnabled: boolean; groundEnabled: boolean; easterEggsEnabled: boolean; moonEnabled: boolean; } export interface ProceduralForestStats { trees: { total: number; deciduous: number; conifer: number; bare: number; }; ground: { bushes: number; grassTufts: number; ferns: number; }; wind: { strength: number; gustActive: boolean; }; easterEggs: { owls: number; batFlocks: number; shootingStars: number; glowingEyes: number; }; layers: number; } export interface ForestRenderData { trees: ForestTreeInstance[]; groundElements: GroundElement[]; grassTufts: GrassTuft[]; moonRenderer: MoonRenderer | null; shootingStars: ShootingStar[]; batFlocks: BatFlock[]; owls: OwlSilhouette[]; glowingEyes: GlowingEyes[]; fogLayers: FogLayer[]; windStrength: number; gustActive: boolean; } export declare class ProceduralForestSystem { private config; private forestComposer; private fogSystem; private groundSystem; private windAnimator; private easterEggSystem; private moonRenderer; private initialized; private time; private lastUpdateTime; private quality; constructor(config?: Partial); /** * Initialize the system - generates all content * Call this once at startup */ initialize(): void; /** * Generate all procedural content * Call this once at startup or when regenerating the scene */ private generate; /** * Place owls on suitable trees */ private placeOwlsOnTrees; /** * Update all animated systems * @param currentTime Current timestamp in milliseconds (from requestAnimationFrame) */ update(currentTime: number): void; /** * Update parallax based on input (mouse position, device tilt, etc.) * @param value -1 to 1 */ updateParallax(value: number): void; /** * Get all forest layers (far to near) */ getLayers(): ForestLayer[]; /** * Get all trees sorted for rendering */ getAllTrees(): ForestTreeInstance[]; /** * Get wind displacement for a point */ getWindDisplacement(worldX: number, worldY: number, heightRatio: number, scale?: number): WindDisplacement; /** * Get wind displacement for grass */ getGrassWindDisplacement(worldX: number, heightRatio: number): WindDisplacement; /** * Get distance fog opacity for a depth */ getFogOpacity(depth: number): number; /** * Alias for getFogOpacity - used by renderer */ getDistanceFogOpacity(depth: number): number; /** * Get ground fog data */ getGroundFog(): GroundFogData | null; /** * Get wispy fog patches */ getWispyPatches(): FogPatch[]; /** * Get mist layers */ getMistLayers(): MistLayerData[]; /** * Get all fog layers for rendering */ getAllFogLayers(): FogLayer[]; /** * Get ground elements (bushes, ferns) */ getGroundElements(): GroundElement[]; /** * Get grass tufts */ getGrassTufts(): GrassTuft[]; /** * Get owl silhouettes */ getOwls(): OwlSilhouette[]; /** * Get active bat flocks */ getBatFlocks(): BatFlock[]; /** * Get moon renderer for direct rendering */ getMoonRenderer(): MoonRenderer | null; /** * Get moon state data */ getMoonState(): MoonState | null; /** * Get active shooting stars */ getShootingStars(): ShootingStar[]; /** * Get glowing eyes */ getGlowingEyes(): GlowingEyes[]; /** * Get bat wing geometry for rendering */ getBatWingPoints(bat: import("./ambient/EasterEggSystem.js").Bat): ReturnType; /** * Get access to the easter egg system for rendering */ getEasterEggSystem(): EasterEggSystem; /** * Get all render data in one call - used by ForestCanvasRenderer */ getRenderData(): ForestRenderData; /** * Trigger a wind gust */ triggerGust(): void; /** * Check if a gust is currently active */ isGustActive(): boolean; /** * Get current wind strength */ getWindStrength(): number; /** * Set wind preset */ setWindPreset(preset: keyof typeof WIND_PRESETS): void; /** * Regenerate everything with a new seed */ regenerate(seed?: number): void; /** * Resize all systems */ resize(width: number, height: number): void; setEnabled(enabled: boolean): void; setParallaxEnabled(enabled: boolean): void; setWindEnabled(enabled: boolean): void; setFogEnabled(enabled: boolean): void; setGroundEnabled(enabled: boolean): void; setEasterEggsEnabled(enabled: boolean): void; setMoonEnabled(enabled: boolean): void; setMoonConfig(config: Partial): void; setWindConfig(config: Partial): void; setFogConfig(config: Partial): void; setEasterEggConfig(config: Partial): void; /** * Set quality level - adjusts detail and particle counts */ setQuality(quality: QualityLevel): void; getConfig(): ProceduralForestConfig; /** * Get comprehensive stats for debug display */ getStats(): ProceduralForestStats; /** * Check if system has been initialized */ isInitialized(): boolean; } export { WIND_PRESETS }; export type { ForestLayer, ForestTreeInstance, FogLayer, GroundFogData, FogPatch, MistLayerData, GroundElement, GrassTuft, WindDisplacement, OwlSilhouette, BatFlock, ShootingStar, GlowingEyes, MoonConfig, MoonState, }; export { MoonRenderer }; //# sourceMappingURL=ProceduralForestSystem.d.ts.map