UNPKG

4.22 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Absorbers = void 0;
4const AbsorberInstance_1 = require("./AbsorberInstance");
5const Utils_1 = require("../../Utils");
6const Absorber_1 = require("./Options/Classes/Absorber");
7const Enums_1 = require("./Enums");
8class Absorbers {
9 constructor(container) {
10 this.container = container;
11 this.array = [];
12 this.absorbers = [];
13 this.interactivityAbsorbers = [];
14 const overridableContainer = container;
15 overridableContainer.addAbsorber = (options, position) => this.addAbsorber(options, position);
16 }
17 init(options) {
18 var _a, _b;
19 if (!options) {
20 return;
21 }
22 if (options.absorbers) {
23 if (options.absorbers instanceof Array) {
24 this.absorbers = options.absorbers.map((s) => {
25 const tmp = new Absorber_1.Absorber();
26 tmp.load(s);
27 return tmp;
28 });
29 }
30 else {
31 if (this.absorbers instanceof Array) {
32 this.absorbers = new Absorber_1.Absorber();
33 }
34 this.absorbers.load(options.absorbers);
35 }
36 }
37 const interactivityAbsorbers = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.absorbers;
38 if (interactivityAbsorbers) {
39 if (interactivityAbsorbers instanceof Array) {
40 this.interactivityAbsorbers = interactivityAbsorbers.map((s) => {
41 const tmp = new Absorber_1.Absorber();
42 tmp.load(s);
43 return tmp;
44 });
45 }
46 else {
47 if (this.interactivityAbsorbers instanceof Array) {
48 this.interactivityAbsorbers = new Absorber_1.Absorber();
49 }
50 this.interactivityAbsorbers.load(interactivityAbsorbers);
51 }
52 }
53 if (this.absorbers instanceof Array) {
54 for (const absorberOptions of this.absorbers) {
55 this.addAbsorber(absorberOptions);
56 }
57 }
58 else {
59 this.addAbsorber(this.absorbers);
60 }
61 }
62 particleUpdate(particle) {
63 for (const absorber of this.array) {
64 absorber.attract(particle);
65 if (particle.destroyed) {
66 break;
67 }
68 }
69 }
70 draw(context) {
71 for (const absorber of this.array) {
72 context.save();
73 absorber.draw(context);
74 context.restore();
75 }
76 }
77 stop() {
78 this.array = [];
79 }
80 resize() {
81 for (const absorber of this.array) {
82 absorber.resize();
83 }
84 }
85 handleClickMode(mode) {
86 const container = this.container;
87 const absorberOptions = this.absorbers;
88 const modeAbsorbers = this.interactivityAbsorbers;
89 if (mode === Enums_1.AbsorberClickMode.absorber) {
90 let absorbersModeOptions;
91 if (modeAbsorbers instanceof Array) {
92 if (modeAbsorbers.length > 0) {
93 absorbersModeOptions = Utils_1.Utils.itemFromArray(modeAbsorbers);
94 }
95 }
96 else {
97 absorbersModeOptions = modeAbsorbers;
98 }
99 const absorbersOptions = absorbersModeOptions !== null && absorbersModeOptions !== void 0 ? absorbersModeOptions : (absorberOptions instanceof Array ? Utils_1.Utils.itemFromArray(absorberOptions) : absorberOptions);
100 const aPosition = container.interactivity.mouse.clickPosition;
101 this.addAbsorber(absorbersOptions, aPosition);
102 }
103 }
104 addAbsorber(options, position) {
105 const absorber = new AbsorberInstance_1.AbsorberInstance(this, this.container, options, position);
106 this.array.push(absorber);
107 return absorber;
108 }
109 removeAbsorber(absorber) {
110 const index = this.array.indexOf(absorber);
111 if (index >= 0) {
112 this.array.splice(index, 1);
113 }
114 }
115}
116exports.Absorbers = Absorbers;