import type { Vector3 } from '@holoscript/core'; /** * ParticleSystem.ts * * High-performance particle system with object pooling. * Manages particle lifecycle: birth, update, death, recycling. */ export interface Color4 { r: number; g: number; b: number; a: number; } export interface Particle { alive: boolean; age: number; lifetime: number; x: number; y: number; z: number; vx: number; vy: number; vz: number; ax: number; ay: number; az: number; size: number; sizeStart: number; sizeEnd: number; color: Color4; colorStart: Color4; colorEnd: Color4; rotation: number; rotationSpeed: number; } export type EmitterShape = 'point' | 'sphere' | 'cone' | 'box'; export interface EmitterConfig { /** Shape of the emission volume */ shape: EmitterShape; /** Particles emitted per second */ rate: number; /** Burst: emit N particles instantly */ burst?: number; /** Max active particles */ maxParticles: number; /** Particle lifetime range [min, max] seconds */ lifetime: [number, number]; /** Initial speed range [min, max] */ speed: [number, number]; /** Initial size range [min, max] */ size: [number, number]; /** End size range [min, max] */ sizeEnd: [number, number]; /** Start color */ colorStart: Color4; /** End color (interpolates over lifetime) */ colorEnd: Color4; /** Emitter world position */ position: [number, number, number]; /** For cone shape: half-angle in radians */ coneAngle?: number; /** For sphere/box: radius/extents */ radius?: number; /** Rotation speed range [min, max] */ rotationSpeed?: [number, number]; /** Direction bias (normalized) */ direction?: Vector3; } export declare class ParticleSystem { private pool; private config; private emitAccumulator; private activeCount; private _isEmitting; private totalElapsed; /** External affectors applied each frame */ private affectors; constructor(config: EmitterConfig); private ensureLegacyPositionAliases; private createDeadParticle; /** * Add an affector function that runs on each particle per update. */ addAffector(fn: (p: Particle, delta: number) => void): void; /** * Start/stop emitting new particles. */ setEmitting(emitting: boolean): void; isEmitting(): boolean; /** * Emit a burst of N particles immediately. */ burst(count: number): void; /** * Update all particles. Call every frame. */ update(delta: number): void; private emitOne; private sampleEmitterShape; /** * Get all alive particles (for rendering). */ getAliveParticles(): Particle[]; /** * Get active particle count. */ getActiveCount(): number; /** * Get the config. */ getConfig(): EmitterConfig; /** * Update emitter position. */ setPosition(x: number, y: number, z: number): void; } //# sourceMappingURL=ParticleSystem.d.ts.map