import type { Vector3 } from '@holoscript/core'; /** * ParticleEmitter.ts * * Particle emission system: shapes, lifetime, velocity, * color/size over lifetime curves, and sub-emitters. * * @module particles */ export type IVector3 = Vector3; export interface IColor { r: number; g: number; b: number; a: number; } export interface CurveKeyframe { time: number; value: number; } export type EmissionShape = 'point' | 'sphere' | 'box' | 'cone' | 'circle' | 'line'; export interface EmitterConfig { id: string; maxParticles: number; emissionRate: number; emissionShape: EmissionShape; shapeParams: { radius?: number; angle?: number; extents?: IVector3; length?: number; }; lifetime: { min: number; max: number; }; startSpeed: { min: number; max: number; }; startSize: { min: number; max: number; }; startColor: IColor; endColor?: IColor; gravity: number; sizeOverLifetime?: CurveKeyframe[]; alphaOverLifetime?: CurveKeyframe[]; speedOverLifetime?: CurveKeyframe[]; worldSpace: boolean; prewarm: boolean; } export interface Particle { position: IVector3; velocity: IVector3; color: IColor; size: number; age: number; lifetime: number; alive: boolean; startSpeed: number; } export interface EmitterState { id: string; playing: boolean; elapsed: number; emissionAccum: number; aliveCount: number; totalEmitted: number; } export declare class ParticleEmitter { readonly config: EmitterConfig; private particles; private state; constructor(config: EmitterConfig); play(): void; pause(): void; stop(): void; isPlaying(): boolean; getState(): EmitterState; update(dt: number): Particle[]; private emit; private sampleShape; private randomDirection; private createDeadParticle; getAliveParticles(): Particle[]; getAliveCount(): number; getCapacity(): number; } //# sourceMappingURL=ParticleEmitter.d.ts.map