import * as THREE from 'three'; import { BaseScatterSystem, BaseScatterConfig, ChunkData } from '../core'; /** * Configuration for physics-based scatter */ export interface PhysicsScatterConfig extends BaseScatterConfig { /** Height to drop instances from */ dropHeight: number; /** Bounds for dropping instances */ dropBounds: THREE.Box3; /** Number of physics simulation steps */ simulationSteps?: number; /** Gravity vector */ gravity?: THREE.Vector3; /** Enable collisions between instances */ enableCollisions?: boolean; /** Mesh to use as ground for collision */ groundMesh?: THREE.Mesh; /** Callback before simulation starts */ beforeSimulation?: (body: PhysicsBody, index: number) => void; /** Callback after simulation completes */ afterSimulation?: (position: THREE.Vector3, rotation: THREE.Quaternion, index: number) => void; } /** * Physics body for simulation */ export interface PhysicsBody { position: THREE.Vector3; velocity: THREE.Vector3; rotation: THREE.Quaternion; angularVelocity: THREE.Vector3; mass: number; restitution: number; friction: number; } /** * Scatter system using physics simulation for natural placement */ export declare class PhysicsScatterSystem extends BaseScatterSystem { private dropHeight; private dropBounds; private simulationSteps; private gravity; private enableCollisions; private groundMesh?; private beforeSimulation?; private afterSimulation?; private simulatedPositions; private isSimulated; constructor(config: PhysicsScatterConfig); protected initializeDistribution(): Promise; private runPhysicsSimulation; protected updateChunks(): void; protected populateChunk(chunk: ChunkData, centerX: number, centerZ: number): void; /** * Re-run the physics simulation */ resimulate(): Promise; } //# sourceMappingURL=PhysicsScatterSystem.d.ts.map