/** * Tree Silhouette System Models * * Type definitions for tree silhouette rendering system. */ export type TreeType = "pine" | "fir" | "spruce" | "oak" | "maple" | "poplar" | "willow" | "dead"; export interface TreeTypeVisibility { pine: boolean; fir: boolean; spruce: boolean; oak: boolean; maple: boolean; poplar: boolean; willow: boolean; dead: boolean; } export interface RenderedTree { id: string; x: number; height: number; width: number; type: TreeType; layer: number; seed: number; imageFilename?: string; } /** * Grid-based placement configuration. * Each layer uses specific columns to avoid overlap within a layer. * Layers use offset columns so trees naturally interleave. */ export interface LayerConfig { columns: number[]; heightPresets: number[]; widthRange: [number, number]; } /** * Species-specific scale factors for realistic proportions. * Based on natural growth characteristics of each tree type. */ export interface TreeTypeScale { heightMin: number; heightMax: number; widthMin: number; widthMax: number; } /** * Configurable placement parameters. * Exposed for Lab UI sliders. */ export interface PlacementConfig { /** Minimum spacing for same-layer trees (0-0.15, higher = more spread out) */ minSpacing: number; /** Cross-layer collision threshold (0-0.15, higher = more separation between layers) */ crossLayerThreshold: number; /** Position jitter amount (0-0.5, higher = more random placement) */ jitter: number; /** Hero anchor strength (0-1, 0 = disabled, 1 = always snap to thirds) */ heroStrength: number; } /** * Internal placement constants derived from PlacementConfig. */ export interface PlacementConstants { HERO_ANCHORS: number[]; MIN_SPACING: { far: number; mid: number; near: number; }; CROSS_LAYER_THRESHOLD: number; NUDGE_STEP: number; MAX_NUDGE: number; EDGE_MARGIN: number; HERO_HEIGHT_BOOST: number; HERO_SNAP_DISTANCE: number; JITTER: number; } /** * A placed tree for collision detection. */ export interface PlacedTree { x: number; layer: number; } /** * Ecological zone defines which tree types are weighted in a region of the canvas. * x positions are normalized 0-1 across the canvas width. */ export interface EcologicalZone { startX: number; endX: number; weights: Partial>; } /** * An ecological pattern defines how tree types are distributed across the scene. */ export interface EcologicalPattern { id: string; name: string; description: string; zones: EcologicalZone[]; } export interface RGB { r: number; g: number; b: number; } /** * Colors for rendering a tree at a given depth. */ export interface TreeColors { silhouette: RGB; } export interface TreeSilhouetteStyle { farSilhouette: RGB; nearSilhouette: RGB; rimLight: RGB | null; farBaseRatio: number; nearBaseRatio: number; rimOpacity: readonly [number, number]; rimBlur: readonly [number, number]; } export interface TreeSilhouetteSystemOptions { layerConfigs?: readonly LayerConfig[]; style?: Partial; } //# sourceMappingURL=tree-silhouette-models.d.ts.map