UNPKG

@tsparticles/plugin-emitters

Version:

tsParticles emitters plugin

72 lines (71 loc) 2.65 kB
import { isNumber } from "@tsparticles/engine"; import { Emitter } from "./Options/Classes/Emitter.js"; const defaultIndex = 0; export class EmittersInstancesManager { #containerArrays; #pluginManager; constructor(pluginManager) { this.#containerArrays = new Map(); this.#pluginManager = pluginManager; } async addEmitter(container, options, position) { const emitterOptions = new Emitter(); emitterOptions.load(options); const { EmitterInstance } = await import("./EmitterInstance.js"), emitter = new EmitterInstance(this.#pluginManager, container, (emitter) => { this.removeEmitter(container, emitter); }, emitterOptions, position); await emitter.init(); this.getArray(container).push(emitter); return emitter; } clear(container) { this.initContainer(container); this.#containerArrays.set(container, []); } getArray(container) { this.initContainer(container); let array = this.#containerArrays.get(container); if (!array) { array = []; this.#containerArrays.set(container, array); } return array; } initContainer(container) { if (this.#containerArrays.has(container)) { return; } this.#containerArrays.set(container, []); container.getEmitter = (idxOrName) => { const array = this.getArray(container); return idxOrName === undefined || isNumber(idxOrName) ? array[idxOrName ?? defaultIndex] : array.find(t => t.name === idxOrName); }; container.addEmitter = async (options, position) => this.addEmitter(container, options, position); container.removeEmitter = (idxOrName) => { const emitter = container.getEmitter?.(idxOrName); if (emitter) { this.removeEmitter(container, emitter); } }; container.playEmitter = (idxOrName) => { const emitter = container.getEmitter?.(idxOrName); if (emitter) { emitter.externalPlay(); } }; container.pauseEmitter = (idxOrName) => { const emitter = container.getEmitter?.(idxOrName); if (emitter) { emitter.externalPause(); } }; } removeEmitter(container, emitter) { const index = this.getArray(container).indexOf(emitter), minIndex = 0, deleteCount = 1; if (index >= minIndex) { this.getArray(container).splice(index, deleteCount); } } }