import type { Particle, Surface, WeatherConfig } from '../types.js';
export interface StepMetrics {
    collisionChecks: number;
    deposits: number;
    transfers: number;
    slides: number;
    slideMass: number;
}
export interface EmissionBounds {
    x: number;
    y: number;
    width: number;
    height: number;
}
export declare class ParticleSystem {
    private static readonly transientLimit;
    readonly particles: Particle[];
    private readonly random;
    private readonly index;
    private intensity;
    private requestedIntensity;
    private initialized;
    private clumpCount;
    private gustStrength;
    private gustRemaining;
    private flowing;
    private contacts;
    private sources;
    private emission;
    constructor(seed?: number);
    setIntensity(amount: number): void;
    gust(strength?: number, duration?: number): void;
    clear(): void;
    spawnClump(x: number, y: number, mass: number, vx: number, vy: number, source?: Surface): void;
    burst(x: number, y: number, count: number, kind?: Particle['kind']): void;
    step(dt: number, time: number, width: number, height: number, config: WeatherConfig, surfaces: readonly Surface[], quality?: number, emissionBounds?: EmissionBounds): StepMetrics;
    private createFlake;
    private moveContact;
}
//# sourceMappingURL=ParticleSystem.d.ts.map