import type { Ray } from '../../math/raycast'; import type { Point } from './ParticleMesh'; import { ParticleMesh } from './ParticleMesh'; import type { ShapeGenerator } from '../../shape/type'; import type { ValueGetter } from '../../math/ValueGetter'; import { Burst } from './Burst'; import { TrailMesh } from './TrailMesh'; import type { color } from '../../color'; import type { Mesh, Renderer, vec4, vec3 } from '@predy-js/render-interface'; import { Texture } from '@predy-js/render-interface'; import type { Transform } from '../../math/Transform'; import type { ParticleItem, ParticleInteractionBehavior } from '@predy-js/specification'; import type { ParticleVFXItem } from './ParticleVFXItem'; import type { Composition } from '../../player/Composition'; type ParticleSystemRayCastOptions = { ray: Ray; radius: number; removeParticle?: boolean; multiple: boolean; bound?: any; }; type ParticleOptions = { startSpeed: ValueGetter; startLifetime: ValueGetter; startDelay: ValueGetter; startColor: ValueGetter; start3DRotation?: boolean; startRotationX?: ValueGetter; startRotationY?: ValueGetter; startRotationZ?: ValueGetter; startRotation?: ValueGetter; start3DSize: boolean; startSizeX?: ValueGetter; startSizeY?: ValueGetter; startSize?: ValueGetter; sizeAspect?: ValueGetter; startTurbulence: boolean; turbulenceX?: ValueGetter; turbulenceY?: ValueGetter; turbulenceZ?: ValueGetter; turbulence?: [ turbulenceX: ValueGetter, turbulenceY: ValueGetter, turbulenceZ: ValueGetter ]; duration: number; looping: boolean; maxCount: number; gravity: number[]; gravityModifier: ValueGetter; endBehavior: number; renderLevel: string; particleFollowParent?: boolean; }; type ParticleEmissionOptions = { rateOverTime: ValueGetter; bursts: Burst[]; burstOffsets: { [key: string]: vec3[]; }; }; type TrailOptions = { lifetime: ValueGetter; minimumVertexDistance: number; dieWithParticles: boolean; sizeAffectsWidth: boolean; parentAffectsPosition: boolean; inheritParticleColor: boolean; inheritParticleLifetime: boolean; maxPointPerTrail: number; colorOverLifetime: number[]; widthOverTrail: ValueGetter; colorOverTrail: number[]; opacityOverLifetime: ValueGetter; texture?: Texture; orderOffset?: number; blending: number; occlusion: boolean; transparentOcclusion: boolean; textureMap?: vec4; }; export type ParticleInteraction = { behavior?: ParticleInteractionBehavior; multiple?: boolean; radius: number; }; interface ParticleTextureSheetAnimation { col: number; row: number; total: number; animate: boolean; animationDelay: ValueGetter; animationDuration: ValueGetter; endAtLifetime: ValueGetter; cycles: ValueGetter; blend: boolean; } export interface MeshRendererOptions { renderer: Renderer; emptyTexture: Texture; cachePrefix: string; env?: string; cid?: string; composition: Composition; } export declare class ParticleSystem { reusable: boolean; renderMatrix: Object; particleMesh: ParticleMesh; trailMesh?: TrailMesh; options: ParticleOptions; shape: ShapeGenerator; emission: ParticleEmissionOptions; trails: TrailOptions; meshes: Mesh[]; textureSheetAnimation: ParticleTextureSheetAnimation; interaction?: ParticleInteraction; emissionStopped: boolean; _info: { generatedCount: number; }; name: string; private _lastUpdate; private _loopStartTime; private _particleLink; private _parentTransform; private _started; private _ended; private _lastEmitTime; private _frozen; private _upDirectionWorld; private _uvs; private readonly transform; private readonly _worldMat4; constructor(props: ParticleItem, rendererOpt: MeshRendererOptions, vfxItem: ParticleVFXItem); get timePassed(): number; get lifetime(): number; set parentTransform(t: Transform); set hide(h: any); getTextures(): Texture[]; start(timeDelayed: number): this; stop(): void; reset(): this; updateTime(timeDelta: number): void; updateRenderData(): void; _updateTrail(): void; _updateEmitterTransform(): void; _onDestroy(item: any): void; raycast(options: ParticleSystemRayCastOptions): vec3[]; _addParticle(point: Point, maxCount: number): void; clearPointTrail(pointIndex: number): void; updatePointTrail(pointIndex: number, emitterLifetime: number, size: number, startTime: number): void; onEnd(particle: ParticleSystem): void; onIterate(particle: ParticleSystem): void; initPoint(data: any): Point; addBurst(burst: Burst, offsets: vec3[]): number; removeBurst(index: any): void; createPoint(lifetime: any): Point; } export {};