2023-02-17 11:06:01 +01:00

61 lines
2.2 KiB
JavaScript

import { executeOnSingleOrMultiple, itemFromSingleOrMultiple } from "tsparticles-engine";
import { AbsorberInstance } from "./AbsorberInstance";
export class Absorbers {
constructor(container) {
this.container = container;
this.array = [];
this.absorbers = [];
this.interactivityAbsorbers = [];
container.getAbsorber = (idxOrName) => idxOrName === undefined || typeof idxOrName === "number"
? this.array[idxOrName || 0]
: this.array.find((t) => t.name === idxOrName);
container.addAbsorber = (options, position) => this.addAbsorber(options, position);
}
addAbsorber(options, position) {
const absorber = new AbsorberInstance(this, this.container, options, position);
this.array.push(absorber);
return absorber;
}
draw(context) {
for (const absorber of this.array) {
absorber.draw(context);
}
}
handleClickMode(mode) {
const absorberOptions = this.absorbers, modeAbsorbers = this.interactivityAbsorbers;
if (mode === "absorber") {
const absorbersModeOptions = itemFromSingleOrMultiple(modeAbsorbers), absorbersOptions = absorbersModeOptions !== null && absorbersModeOptions !== void 0 ? absorbersModeOptions : itemFromSingleOrMultiple(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;
this.addAbsorber(absorbersOptions, aPosition);
}
}
async init() {
this.absorbers = this.container.actualOptions.absorbers;
this.interactivityAbsorbers = this.container.actualOptions.interactivity.modes.absorbers;
executeOnSingleOrMultiple(this.absorbers, (absorber) => {
this.addAbsorber(absorber);
});
}
particleUpdate(particle) {
for (const absorber of this.array) {
absorber.attract(particle);
if (particle.destroyed) {
break;
}
}
}
removeAbsorber(absorber) {
const index = this.array.indexOf(absorber);
if (index >= 0) {
this.array.splice(index, 1);
}
}
resize() {
for (const absorber of this.array) {
absorber.resize();
}
}
stop() {
this.array = [];
}
}