import type { IBackgroundSystem } from "../../../core/contracts/IBackgroundSystem.js"; import type { Dimensions, QualityLevel } from "../../../core/domain/types.js"; import type { AccessibilitySettings } from "../../../core/domain/types.js"; import { type TreeTypeVisibility, type PlacementConfig, type EcologicalPattern, type RenderedTree } from "./TreeSilhouetteSystem.js"; export type { PlacementConfig }; export interface ForestLayers { gradient: boolean; stars: boolean; moon: boolean; shootingStars: boolean; trees: boolean; grass: boolean; ambientParticles: boolean; campfire: boolean; fireflies: boolean; } export declare class ForestBackgroundSystem implements IBackgroundSystem { private fireflySystem; private treeSystem; private ambientParticleSystem; private campfireSystem; private moonRenderer; private fireflies; private stars; private grassBlades; private grassByLayer; private shootingStar; private framesSinceLastShootingStar; private animationTime; private quality; private isInitialized; private reducedMotion; private dimensions; private mouseX; private mouseY; private targetMouseX; private targetMouseY; private parallaxEnabled; private readonly PARALLAX_CONFIG; private readonly FIREFLY_TREE_INTERLEAVE; private readonly gradientStops; private layerVisibility; constructor(); private generateStars; /** * Get the ground/base Y position for a grass layer * Matches the tree layer ground positions (below the horizon) */ private getGrassLayerBaseY; private generateGrass; initialize(dimensions: Dimensions, quality: QualityLevel): void; update(dimensions: Dimensions, frameMultiplier?: number): void; private updateShootingStar; draw(ctx: CanvasRenderingContext2D, dimensions: Dimensions): void; private drawBackground; private drawStars; private drawMoon; private drawShootingStar; private drawGround; private rebucketGrass; private drawGrassLayer; private lightenColor; setQuality(quality: QualityLevel): void; setAccessibility(settings: AccessibilitySettings): void; handleResize(oldDimensions: Dimensions, newDimensions: Dimensions): void; setLayerVisibility(layers: Partial): void; getLayerVisibility(): ForestLayers; setTreeVisibility(visibility: Partial): void; getTreeVisibility(): TreeTypeVisibility; regenerateTrees(): void; setPlacementConfig(config: Partial): void; getPlacementConfig(): PlacementConfig; resetPlacementConfig(): void; /** * Set the ecological pattern for tree distribution * @param patternId Pattern ID (e.g., "random", "conifer-ridge", "riparian") */ setEcologicalPattern(patternId: string): void; /** * Get the current ecological pattern ID */ getEcologicalPatternId(): string; /** * Get the current ecological pattern details */ getEcologicalPattern(): EcologicalPattern; /** * Get all available ecological patterns */ getAvailablePatterns(): EcologicalPattern[]; /** * Set a random ecological pattern (excluding "random" uniform distribution) * Returns the selected pattern ID */ setRandomEcologicalPattern(): string; /** * Update mouse position for parallax effect * @param clientX - Mouse X position in viewport * @param clientY - Mouse Y position in viewport * @param viewportWidth - Viewport width * @param viewportHeight - Viewport height */ updateMousePosition(clientX: number, clientY: number, viewportWidth: number, viewportHeight: number): void; /** * Enable or disable parallax effect */ setParallaxEnabled(enabled: boolean): void; /** * Calculate parallax offset for a given depth layer * Returns pixel offset to apply when drawing */ private getParallaxOffset; /** * Get parallax intensity for a tree layer (0-6) */ private getTreeLayerParallax; /** * Get parallax intensity for a grass layer (0-2) */ private getGrassLayerParallax; getStats(): { fireflies: number; stars: number; ambientParticles: number; hasShootingStar: boolean; }; /** * Get all currently rendered trees */ getRenderedTrees(): RenderedTree[]; /** * Remove a tree by its ID and re-render */ removeTree(treeId: string): boolean; /** * Remove all trees using a specific image filename */ removeTreesByImage(imageFilename: string): number; /** * Get tree counts by layer */ getTreeCounts(): { total: number; byLayer: number[]; }; cleanup(): void; } //# sourceMappingURL=ForestBackgroundSystem.d.ts.map