import Renderable, { RenderableOpts } from '../Renderable'; import ParticleEmitter from './Emitter'; import ParticleField from './Field'; import Renderer from '../Renderer'; interface ParticleRenderableOpts extends RenderableOpts { loop: boolean; oneshot: boolean; /** * Duration of particle system in milliseconds */ duration: number; spriteAnimationTileX: number; spriteAnimationTileY: number; spriteAnimationRepeat: number; } /** * @example * const particleRenderable = new clay.particle.ParticleRenderable({ * spriteAnimationTileX: 4, * spriteAnimationTileY: 4, * spriteAnimationRepeat: 1 * }); * scene.add(particleRenderable); * // Enable uv animation in the shader * particleRenderable.material.define('both', 'UV_ANIMATION'); * const Emitter = clay.particle.Emitter; * const Vector3 = clay.Vector3; * const emitter = new Emitter({ * max: 2000, * amount: 100, * life: Emitter.random1D(10, 20), * position: Emitter.vector(new Vector3()), * velocity: Emitter.random3D(new Vector3(-10, 0, -10), new Vector3(10, 0, 10)); * }); * particleRenderable.addEmitter(emitter); * const gravityField = new clay.particle.ForceField(); * gravityField.force.y = -10; * particleRenderable.addField(gravityField); * ... * animation.on('frame', function(frameTime) { * particleRenderable.updateParticles(frameTime); * renderer.render(scene, camera); * }); */ interface ParticleRenderable extends ParticleRenderableOpts { } declare class ParticleRenderable extends Renderable { mode: number; ignorePicking: boolean; culling: boolean; frustumCulling: boolean; castShadow: boolean; receiveShadow: boolean; _elapsedTime: number; _emitting: boolean; private _emitters; private _fields; private _particles; constructor(opts?: Partial); /** * Add emitter * @param {clay.particle.Emitter} emitter */ addEmitter(emitter: ParticleEmitter): void; /** * Remove emitter * @param {clay.particle.Emitter} emitter */ removeEmitter(emitter: ParticleEmitter): void; /** * Add field * @param {clay.particle.Field} field */ addField(field: ParticleField): void; /** * Remove field * @param {clay.particle.Field} field */ removeField(field: ParticleField): void; /** * Reset the particle system. */ reset(): void; /** * @param {number} deltaTime */ updateParticles(deltaTime: number): void; _updateVertices(): void; /** * @return {boolean} */ isFinished(): boolean; /** * @param {clay.Renderer} renderer */ dispose(renderer: Renderer): void; /** * @return {clay.particle.ParticleRenderable} */ clone(): ParticleRenderable; } export default ParticleRenderable;