61 lines
2.2 KiB
JavaScript
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 = [];
|
|
}
|
|
}
|