import { arrayRandomIndex, executeOnSingleOrMultiple, itemFromArray } from "tsparticles-engine"; import { Emitter } from "./Options/Classes/Emitter"; import { EmitterInstance } from "./EmitterInstance"; export class Emitters { constructor(engine, container) { this.container = container; this._engine = engine; this.array = []; this.emitters = []; this.interactivityEmitters = { random: { count: 1, enable: false, }, value: [], }; container.getEmitter = (idxOrName) => idxOrName === undefined || typeof idxOrName === "number" ? this.array[idxOrName || 0] : this.array.find((t) => t.name === idxOrName); container.addEmitter = (options, position) => this.addEmitter(options, position); container.removeEmitter = (idxOrName) => { const emitter = container.getEmitter(idxOrName); if (emitter) { this.removeEmitter(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(); } }; } addEmitter(options, position) { const emitterOptions = new Emitter(); emitterOptions.load(options); const emitter = new EmitterInstance(this._engine, this, this.container, emitterOptions, position); this.array.push(emitter); return emitter; } handleClickMode(mode) { const emitterOptions = this.emitters, modeEmitters = this.interactivityEmitters; if (mode === "emitter") { let emittersModeOptions; if (modeEmitters && modeEmitters.value instanceof Array) { if (modeEmitters.value.length > 0 && modeEmitters.random.enable) { emittersModeOptions = []; const usedIndexes = []; for (let i = 0; i < modeEmitters.random.count; i++) { const idx = arrayRandomIndex(modeEmitters.value); if (usedIndexes.includes(idx) && usedIndexes.length < modeEmitters.value.length) { i--; continue; } usedIndexes.push(idx); emittersModeOptions.push(itemFromArray(modeEmitters.value, idx)); } } else { emittersModeOptions = modeEmitters.value; } } else { emittersModeOptions = modeEmitters === null || modeEmitters === void 0 ? void 0 : modeEmitters.value; } const emittersOptions = emittersModeOptions !== null && emittersModeOptions !== void 0 ? emittersModeOptions : emitterOptions, ePosition = this.container.interactivity.mouse.clickPosition; executeOnSingleOrMultiple(emittersOptions, (emitter) => { this.addEmitter(emitter, ePosition); }); } } async init() { this.emitters = this.container.actualOptions.emitters; this.interactivityEmitters = this.container.actualOptions.interactivity.modes.emitters; if (this.emitters instanceof Array) { for (const emitterOptions of this.emitters) { this.addEmitter(emitterOptions); } } else { this.addEmitter(this.emitters); } } pause() { for (const emitter of this.array) { emitter.pause(); } } play() { for (const emitter of this.array) { emitter.play(); } } removeEmitter(emitter) { const index = this.array.indexOf(emitter); if (index >= 0) { this.array.splice(index, 1); } } resize() { for (const emitter of this.array) { emitter.resize(); } } stop() { this.array = []; } update(delta) { for (const emitter of this.array) { emitter.update(delta); } } }