import { type Particle, type ParticleInitialState, type Vector3Like } from "./Particle.js";
export interface ParticleBurst {
    time: number;
    count: number;
    interval?: number;
    cycles?: number;
}
export type ParticleEmitterShape = {
    type: "point";
    position?: Partial<Vector3Like>;
} | {
    type: "box";
    center?: Partial<Vector3Like>;
    size: Partial<Vector3Like>;
} | {
    type: "sphere";
    center?: Partial<Vector3Like>;
    radius: number;
    shell?: boolean;
} | {
    type: "circle";
    center?: Partial<Vector3Like>;
    radius: number;
    arc?: number;
    filled?: boolean;
} | {
    type: "cone";
    origin?: Partial<Vector3Like>;
    radius: number;
    length: number;
    angle?: number;
    emitFromVolume?: boolean;
};
export interface ParticleEmitterOptions {
    seed?: number;
    emissionRate?: number;
    maxParticles?: number;
    duration?: number;
    looping?: boolean;
    lifetime?: number | {
        min: number;
        max: number;
    };
    speed?: number | {
        min: number;
        max: number;
    };
    shape?: ParticleEmitterShape;
    bursts?: readonly ParticleBurst[];
    initial?: Omit<ParticleInitialState, "id" | "age" | "lifetime" | "position" | "velocity">;
}
export interface EmissionResult {
    particles: Particle[];
    requested: number;
    emitted: number;
}
export declare class ParticleEmitter {
    readonly random: () => number;
    readonly maxParticles: number;
    readonly bursts: readonly ParticleBurst[];
    emissionRate: number;
    duration: number;
    looping: boolean;
    lifetime: number | {
        min: number;
        max: number;
    };
    speed: number | {
        min: number;
        max: number;
    };
    shape: ParticleEmitterShape;
    initial: Omit<ParticleInitialState, "id" | "age" | "lifetime" | "position" | "velocity">;
    elapsedTime: number;
    paused: boolean;
    private emissionCarry;
    private nextParticleId;
    private burstExecutions;
    constructor(options?: ParticleEmitterOptions);
    reset(): void;
    emit(deltaTime: number, capacity?: number): EmissionResult;
    createParticle(): Particle;
    private advanceTime;
    private countContinuous;
    private countBursts;
}
//# sourceMappingURL=ParticleEmitter.d.ts.map