import * as THREE from "three"; import { NodeMaterial } from "three/webgpu"; import type { SpriteResource } from "../SpriteResourceManager"; export interface ParticleEffectParameters { resource: SpriteResource; animNumFrames?: number; animFrameOffset?: number; frameDuration?: number; loop?: boolean; scale?: number; renderOrder?: number; depthWrite?: boolean; maxParticles: number; lifetimeMsMin: number; lifetimeMsMax: number; origins: THREE.Vector3[]; spawnRadius: number | THREE.Vector3; initialVelocityMin: THREE.Vector3; initialVelocityMax: THREE.Vector3; angularVelocityMin: THREE.Vector3; angularVelocityMax: THREE.Vector3; gravity?: THREE.Vector3; randomGravityFactorMinMax?: THREE.Vector2; scaleOverLifeMinMax?: THREE.Vector2; fadeOut?: boolean; materialFactory?: () => NodeMaterial; } export declare class SpriteParticleGenerator { private scene; private baseConfig; private autoSpawnConfig; private _currentOriginIndex; private instanceManager; private material; private texture; private particleDataAttribute; private velocityAttribute; private angularVelAttribute; private scaleDataAttribute; private timeUniform; private gravityUniform; private animationUniform; private sheetNumFramesUniform; private particleSlots; private currentTime; private maxParticles; private isInitialized; constructor(scene: THREE.Scene, initialBaseConfig: ParticleEffectParameters); private _ensureInitialized; private _initializeGPUParticleSystem; private _createGPUMaterial; private _resolveCurrentOrigin; getActiveParticleCount(): number; private _resolveSpawnRadius; private _spawnParticle; spawnParticles(count: number, overrides?: Partial): Promise; setAutoSpawn(ratePerSecond: number, autoSpawnParamOverrides?: Partial): void; hasAutoSpawn(): boolean; stopAutoSpawn(): void; update(deltaTimeMs: number): Promise; dispose(): void; }