1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Absorbers = void 0;
|
4 | const AbsorberInstance_1 = require("./AbsorberInstance");
|
5 | const Utils_1 = require("../../Utils");
|
6 | const Absorber_1 = require("./Options/Classes/Absorber");
|
7 | const Enums_1 = require("./Enums");
|
8 | class 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 | }
|
116 | exports.Absorbers = Absorbers;
|