import type { mat4, vec2, vec3, vec4 } from '@predy-js/render-interface'; import type { ValueGetter } from '../../math/ValueGetter'; import type { GeometryOptions, Renderer, SharedShaderWithSource } from '@predy-js/render-interface'; import { Geometry, Mesh, Texture } from '@predy-js/render-interface'; import type { PredyPlayerRenderFrame } from '../../render/PredyPlayerRenderFrame'; import { type GradientColorValue, type ParticleItem } from '@predy-js/specification'; import type { MeshRendererOptions } from './ParticleSystem'; export type Point = { delay?: number; pos: vec3; vel: vec3; lifetime: number; color: vec4; rot: vec3; uv: number[]; size: vec2; dirX: vec3; dirY: vec3; sprite?: [start: number, duration: number, cycles: number]; }; interface ParticleMeshData { gravityModifier: ValueGetter; sizeOverLifetime?: { x: ValueGetter; y?: ValueGetter; separateAxes?: boolean; }; forceTarget?: { curve: ValueGetter; target: vec3; }; colorOverLifetime?: { color?: GradientColorValue | Texture; opacity?: ValueGetter; separateAxes?: boolean; }; linearVelOverLifetime?: { asMovement?: boolean; x?: ValueGetter; y?: ValueGetter; z?: ValueGetter; enabled?: boolean; }; orbitalVelOverLifetime?: { asRotation?: boolean; x?: ValueGetter; y?: ValueGetter; z?: ValueGetter; enabled?: boolean; center?: vec3; }; rotationOverLifetime?: { asRotation?: boolean; x?: ValueGetter; y?: ValueGetter; z?: ValueGetter; }; speedOverLifetime?: ValueGetter; } export interface ParticleMeshConstructor extends ParticleMeshData { renderMode?: number; blending?: number; mask?: number; maskMode?: number; side?: number; filter?: any; transparentOcclusion?: boolean; matrix?: mat4; sprite?: { animate?: boolean; blend?: boolean; col: number; row: number; total: number; }; gravity?: vec3; useSprite?: boolean; textureFlip?: boolean; occlusion?: boolean; diffuse?: Texture; meshSlots?: number[]; forceTarget?: { curve: ValueGetter; target: vec3; }; listIndex: number; duration: number; maxCount: number; shaderCachePrefix: string; name: string; anchor: vec2; renderFrame: PredyPlayerRenderFrame; } export declare function getParticleMeshShader(item: ParticleItem, renderer: Renderer, env: string): { shader: SharedShaderWithSource; vertex: number; fragment: number; }; export declare function modifyMaxKeyframeShader(shader: SharedShaderWithSource, maxVertex: number, maxFrag: number): void; export declare class ParticleMesh implements ParticleMeshData { particleOrigin: number; duration: number; geometry: Geometry; mesh: Mesh; particleCount: number; maxParticleBufferCount: number; gravityModifier: ValueGetter; sizeOverLifetime?: { x: ValueGetter; y?: ValueGetter; separateAxes?: boolean; }; forceTarget?: { curve: ValueGetter; target: vec3; }; colorOverLifetime?: { color?: GradientColorValue; opacity?: ValueGetter; separateAxes?: boolean; }; linearVelOverLifetime?: { asMovement?: boolean; x?: ValueGetter; y?: ValueGetter; z?: ValueGetter; enabled?: boolean; }; orbitalVelOverLifetime?: { asRotation?: boolean; x?: ValueGetter; y?: ValueGetter; z?: ValueGetter; enabled?: boolean; center?: vec3; }; rotationOverLifetime?: { asRotation?: boolean; x?: ValueGetter; y?: ValueGetter; z?: ValueGetter; }; speedOverLifetime?: ValueGetter; emitterMatrix: mat4; readonly renderFrame: PredyPlayerRenderFrame; readonly useSprite: boolean; readonly textureOffsets: number[]; readonly maxCount: number; private _time; private anchor; constructor(props: ParticleMeshConstructor, options: MeshRendererOptions); get time(): any; set time(v: any); setTimeAndOpacity(time: number, opacity: number): void; static geometry(useSprite: any, name?: string): GeometryOptions; getPointColor(index: any): number[]; set modelMatrix(m4: mat4); getPointDuration(index: any): number; getPointPosition(index: any, out?: vec3): vec3; clearPoints(): void; resetGeometryData(geometry: any): void; reverseTime(time: any): void; removePoint(index: any): void; setPoint(point: Point, index: any): ParticleMesh; } export {};