@tsparticles/plugin-absorbers 3.2.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/AbsorberInstance.js +5 -6
- package/browser/Absorbers.js +8 -6
- package/browser/AbsorbersPlugin.js +6 -5
- package/browser/Enums/AbsorberClickMode.js +4 -1
- package/browser/index.js +1 -1
- package/cjs/AbsorberInstance.js +4 -5
- package/cjs/Absorbers.js +8 -29
- package/cjs/AbsorbersPlugin.js +6 -28
- package/cjs/Enums/AbsorberClickMode.js +5 -0
- package/cjs/index.js +2 -14
- package/esm/AbsorberInstance.js +5 -6
- package/esm/Absorbers.js +8 -6
- package/esm/AbsorbersPlugin.js +6 -5
- package/esm/Enums/AbsorberClickMode.js +4 -1
- package/esm/index.js +1 -1
- package/package.json +2 -2
- package/report.html +1 -1
- package/tsparticles.plugin.absorbers.js +72 -200
- package/tsparticles.plugin.absorbers.min.js +1 -1
- package/tsparticles.plugin.absorbers.min.js.LICENSE.txt +1 -1
- package/types/AbsorberInstance.d.ts +1 -1
- package/types/Absorbers.d.ts +2 -2
- package/types/AbsorbersPlugin.d.ts +1 -1
- package/types/Enums/AbsorberClickMode.d.ts +1 -1
- package/umd/AbsorberInstance.js +4 -5
- package/umd/Absorbers.js +9 -31
- package/umd/AbsorbersPlugin.js +7 -30
- package/umd/Enums/AbsorberClickMode.js +5 -0
- package/umd/index.js +3 -16
- package/142.min.js +0 -2
- package/142.min.js.LICENSE.txt +0 -1
- package/28.min.js +0 -2
- package/28.min.js.LICENSE.txt +0 -1
- package/327.min.js +0 -2
- package/327.min.js.LICENSE.txt +0 -1
- package/dist_browser_AbsorberInstance_js.js +0 -30
- package/dist_browser_AbsorbersPlugin_js.js +0 -60
- package/dist_browser_Absorbers_js.js +0 -30
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, getDistance, getDistances, getRandom, getRangeValue, getStyleFromRgb, isPointInside, percentDenominator, rangeColorToRgb, } from "@tsparticles/engine";
|
|
1
|
+
import { RotateDirection, Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, getDistance, getDistances, getRandom, getRangeValue, getStyleFromRgb, isPointInside, percentDenominator, rangeColorToRgb, } from "@tsparticles/engine";
|
|
2
2
|
import { Absorber } from "./Options/Classes/Absorber.js";
|
|
3
3
|
const squareExp = 2, absorbFactor = 0.033, minOrbitLength = 0, minRadius = 0, minMass = 0, origin = {
|
|
4
4
|
x: 0,
|
|
@@ -39,13 +39,13 @@ export class AbsorberInstance {
|
|
|
39
39
|
}
|
|
40
40
|
if (particle.absorberOrbitDirection === undefined) {
|
|
41
41
|
particle.absorberOrbitDirection =
|
|
42
|
-
particle.velocity.x >= minVelocity ?
|
|
42
|
+
particle.velocity.x >= minVelocity ? RotateDirection.clockwise : RotateDirection.counterClockwise;
|
|
43
43
|
}
|
|
44
44
|
const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;
|
|
45
45
|
particle.velocity.setTo(Vector.origin);
|
|
46
46
|
const updateFunc = {
|
|
47
|
-
x: orbitDirection ===
|
|
48
|
-
y: orbitDirection ===
|
|
47
|
+
x: orbitDirection === RotateDirection.clockwise ? Math.cos : Math.sin,
|
|
48
|
+
y: orbitDirection === RotateDirection.clockwise ? Math.sin : Math.cos,
|
|
49
49
|
};
|
|
50
50
|
particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
|
|
51
51
|
particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
|
|
@@ -135,14 +135,13 @@ export class AbsorberInstance {
|
|
|
135
135
|
this._updateParticlePosition(particle, v);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
draw(context) {
|
|
139
139
|
context.translate(this.position.x, this.position.y);
|
|
140
140
|
context.beginPath();
|
|
141
141
|
context.arc(origin.x, origin.y, this.size, minAngle, maxAngle, false);
|
|
142
142
|
context.closePath();
|
|
143
143
|
context.fillStyle = getStyleFromRgb(this.color, this.opacity);
|
|
144
144
|
context.fill();
|
|
145
|
-
await Promise.resolve();
|
|
146
145
|
}
|
|
147
146
|
resize() {
|
|
148
147
|
const initialPosition = this.initialPosition;
|
package/browser/Absorbers.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { executeOnSingleOrMultiple, isNumber, itemFromSingleOrMultiple, } from "@tsparticles/engine";
|
|
2
|
+
import { AbsorberClickMode } from "./Enums/AbsorberClickMode.js";
|
|
3
|
+
import { AbsorberInstance } from "./AbsorberInstance.js";
|
|
2
4
|
const defaultIndex = 0;
|
|
3
5
|
export class Absorbers {
|
|
4
6
|
constructor(container) {
|
|
@@ -8,22 +10,22 @@ export class Absorbers {
|
|
|
8
10
|
this.interactivityAbsorbers = [];
|
|
9
11
|
container.getAbsorber = (idxOrName) => idxOrName === undefined || isNumber(idxOrName)
|
|
10
12
|
? this.array[idxOrName ?? defaultIndex]
|
|
11
|
-
: this.array.find(
|
|
13
|
+
: this.array.find(t => t.name === idxOrName);
|
|
12
14
|
container.addAbsorber = async (options, position) => this.addAbsorber(options, position);
|
|
13
15
|
}
|
|
14
16
|
async addAbsorber(options, position) {
|
|
15
|
-
const
|
|
17
|
+
const absorber = new AbsorberInstance(this, this.container, options, position);
|
|
16
18
|
this.array.push(absorber);
|
|
17
|
-
return absorber;
|
|
19
|
+
return Promise.resolve(absorber);
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
draw(context) {
|
|
20
22
|
for (const absorber of this.array) {
|
|
21
|
-
|
|
23
|
+
absorber.draw(context);
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
handleClickMode(mode) {
|
|
25
27
|
const absorberOptions = this.absorbers, modeAbsorbers = this.interactivityAbsorbers;
|
|
26
|
-
if (mode ===
|
|
28
|
+
if (mode === AbsorberClickMode.absorber) {
|
|
27
29
|
const absorbersModeOptions = itemFromSingleOrMultiple(modeAbsorbers), absorbersOptions = absorbersModeOptions ?? itemFromSingleOrMultiple(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;
|
|
28
30
|
void this.addAbsorber(absorbersOptions, aPosition);
|
|
29
31
|
}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import { executeOnSingleOrMultiple, isArray, isInArray, } from "@tsparticles/engine";
|
|
2
2
|
import { Absorber } from "./Options/Classes/Absorber.js";
|
|
3
|
+
import { AbsorberClickMode } from "./Enums/AbsorberClickMode.js";
|
|
4
|
+
import { Absorbers } from "./Absorbers.js";
|
|
3
5
|
export class AbsorbersPlugin {
|
|
4
6
|
constructor() {
|
|
5
7
|
this.id = "absorbers";
|
|
6
8
|
}
|
|
7
9
|
async getPlugin(container) {
|
|
8
|
-
|
|
9
|
-
return new Absorbers(container);
|
|
10
|
+
return Promise.resolve(new Absorbers(container));
|
|
10
11
|
}
|
|
11
12
|
loadOptions(options, source) {
|
|
12
13
|
if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
16
|
if (source?.absorbers) {
|
|
16
|
-
options.absorbers = executeOnSingleOrMultiple(source.absorbers,
|
|
17
|
+
options.absorbers = executeOnSingleOrMultiple(source.absorbers, absorber => {
|
|
17
18
|
const tmp = new Absorber();
|
|
18
19
|
tmp.load(absorber);
|
|
19
20
|
return tmp;
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
|
-
options.interactivity.modes.absorbers = executeOnSingleOrMultiple(source?.interactivity?.modes?.absorbers,
|
|
23
|
+
options.interactivity.modes.absorbers = executeOnSingleOrMultiple(source?.interactivity?.modes?.absorbers, absorber => {
|
|
23
24
|
const tmp = new Absorber();
|
|
24
25
|
tmp.load(absorber);
|
|
25
26
|
return tmp;
|
|
@@ -37,7 +38,7 @@ export class AbsorbersPlugin {
|
|
|
37
38
|
return true;
|
|
38
39
|
}
|
|
39
40
|
else if (options.interactivity?.events?.onClick?.mode &&
|
|
40
|
-
isInArray(
|
|
41
|
+
isInArray(AbsorberClickMode.absorber, options.interactivity.events.onClick.mode)) {
|
|
41
42
|
return true;
|
|
42
43
|
}
|
|
43
44
|
return false;
|
package/browser/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { AbsorbersPlugin } from "./AbsorbersPlugin.js";
|
|
1
2
|
export async function loadAbsorbersPlugin(engine, refresh = true) {
|
|
2
|
-
const { AbsorbersPlugin } = await import("./AbsorbersPlugin.js");
|
|
3
3
|
await engine.addPlugin(new AbsorbersPlugin(), refresh);
|
|
4
4
|
}
|
|
5
5
|
export * from "./AbsorberContainer.js";
|
package/cjs/AbsorberInstance.js
CHANGED
|
@@ -42,13 +42,13 @@ class AbsorberInstance {
|
|
|
42
42
|
}
|
|
43
43
|
if (particle.absorberOrbitDirection === undefined) {
|
|
44
44
|
particle.absorberOrbitDirection =
|
|
45
|
-
particle.velocity.x >= minVelocity ?
|
|
45
|
+
particle.velocity.x >= minVelocity ? engine_1.RotateDirection.clockwise : engine_1.RotateDirection.counterClockwise;
|
|
46
46
|
}
|
|
47
47
|
const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;
|
|
48
48
|
particle.velocity.setTo(engine_1.Vector.origin);
|
|
49
49
|
const updateFunc = {
|
|
50
|
-
x: orbitDirection ===
|
|
51
|
-
y: orbitDirection ===
|
|
50
|
+
x: orbitDirection === engine_1.RotateDirection.clockwise ? Math.cos : Math.sin,
|
|
51
|
+
y: orbitDirection === engine_1.RotateDirection.clockwise ? Math.sin : Math.cos,
|
|
52
52
|
};
|
|
53
53
|
particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
|
|
54
54
|
particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
|
|
@@ -138,14 +138,13 @@ class AbsorberInstance {
|
|
|
138
138
|
this._updateParticlePosition(particle, v);
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
draw(context) {
|
|
142
142
|
context.translate(this.position.x, this.position.y);
|
|
143
143
|
context.beginPath();
|
|
144
144
|
context.arc(origin.x, origin.y, this.size, minAngle, maxAngle, false);
|
|
145
145
|
context.closePath();
|
|
146
146
|
context.fillStyle = (0, engine_1.getStyleFromRgb)(this.color, this.opacity);
|
|
147
147
|
context.fill();
|
|
148
|
-
await Promise.resolve();
|
|
149
148
|
}
|
|
150
149
|
resize() {
|
|
151
150
|
const initialPosition = this.initialPosition;
|
package/cjs/Absorbers.js
CHANGED
|
@@ -1,30 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.Absorbers = void 0;
|
|
27
4
|
const engine_1 = require("@tsparticles/engine");
|
|
5
|
+
const AbsorberClickMode_js_1 = require("./Enums/AbsorberClickMode.js");
|
|
6
|
+
const AbsorberInstance_js_1 = require("./AbsorberInstance.js");
|
|
28
7
|
const defaultIndex = 0;
|
|
29
8
|
class Absorbers {
|
|
30
9
|
constructor(container) {
|
|
@@ -34,22 +13,22 @@ class Absorbers {
|
|
|
34
13
|
this.interactivityAbsorbers = [];
|
|
35
14
|
container.getAbsorber = (idxOrName) => idxOrName === undefined || (0, engine_1.isNumber)(idxOrName)
|
|
36
15
|
? this.array[idxOrName ?? defaultIndex]
|
|
37
|
-
: this.array.find(
|
|
16
|
+
: this.array.find(t => t.name === idxOrName);
|
|
38
17
|
container.addAbsorber = async (options, position) => this.addAbsorber(options, position);
|
|
39
18
|
}
|
|
40
19
|
async addAbsorber(options, position) {
|
|
41
|
-
const
|
|
20
|
+
const absorber = new AbsorberInstance_js_1.AbsorberInstance(this, this.container, options, position);
|
|
42
21
|
this.array.push(absorber);
|
|
43
|
-
return absorber;
|
|
22
|
+
return Promise.resolve(absorber);
|
|
44
23
|
}
|
|
45
|
-
|
|
24
|
+
draw(context) {
|
|
46
25
|
for (const absorber of this.array) {
|
|
47
|
-
|
|
26
|
+
absorber.draw(context);
|
|
48
27
|
}
|
|
49
28
|
}
|
|
50
29
|
handleClickMode(mode) {
|
|
51
30
|
const absorberOptions = this.absorbers, modeAbsorbers = this.interactivityAbsorbers;
|
|
52
|
-
if (mode ===
|
|
31
|
+
if (mode === AbsorberClickMode_js_1.AbsorberClickMode.absorber) {
|
|
53
32
|
const absorbersModeOptions = (0, engine_1.itemFromSingleOrMultiple)(modeAbsorbers), absorbersOptions = absorbersModeOptions ?? (0, engine_1.itemFromSingleOrMultiple)(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;
|
|
54
33
|
void this.addAbsorber(absorbersOptions, aPosition);
|
|
55
34
|
}
|
package/cjs/AbsorbersPlugin.js
CHANGED
|
@@ -1,51 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.AbsorbersPlugin = void 0;
|
|
27
4
|
const engine_1 = require("@tsparticles/engine");
|
|
28
5
|
const Absorber_js_1 = require("./Options/Classes/Absorber.js");
|
|
6
|
+
const AbsorberClickMode_js_1 = require("./Enums/AbsorberClickMode.js");
|
|
7
|
+
const Absorbers_js_1 = require("./Absorbers.js");
|
|
29
8
|
class AbsorbersPlugin {
|
|
30
9
|
constructor() {
|
|
31
10
|
this.id = "absorbers";
|
|
32
11
|
}
|
|
33
12
|
async getPlugin(container) {
|
|
34
|
-
|
|
35
|
-
return new Absorbers(container);
|
|
13
|
+
return Promise.resolve(new Absorbers_js_1.Absorbers(container));
|
|
36
14
|
}
|
|
37
15
|
loadOptions(options, source) {
|
|
38
16
|
if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
|
|
39
17
|
return;
|
|
40
18
|
}
|
|
41
19
|
if (source?.absorbers) {
|
|
42
|
-
options.absorbers = (0, engine_1.executeOnSingleOrMultiple)(source.absorbers,
|
|
20
|
+
options.absorbers = (0, engine_1.executeOnSingleOrMultiple)(source.absorbers, absorber => {
|
|
43
21
|
const tmp = new Absorber_js_1.Absorber();
|
|
44
22
|
tmp.load(absorber);
|
|
45
23
|
return tmp;
|
|
46
24
|
});
|
|
47
25
|
}
|
|
48
|
-
options.interactivity.modes.absorbers = (0, engine_1.executeOnSingleOrMultiple)(source?.interactivity?.modes?.absorbers,
|
|
26
|
+
options.interactivity.modes.absorbers = (0, engine_1.executeOnSingleOrMultiple)(source?.interactivity?.modes?.absorbers, absorber => {
|
|
49
27
|
const tmp = new Absorber_js_1.Absorber();
|
|
50
28
|
tmp.load(absorber);
|
|
51
29
|
return tmp;
|
|
@@ -63,7 +41,7 @@ class AbsorbersPlugin {
|
|
|
63
41
|
return true;
|
|
64
42
|
}
|
|
65
43
|
else if (options.interactivity?.events?.onClick?.mode &&
|
|
66
|
-
(0, engine_1.isInArray)(
|
|
44
|
+
(0, engine_1.isInArray)(AbsorberClickMode_js_1.AbsorberClickMode.absorber, options.interactivity.events.onClick.mode)) {
|
|
67
45
|
return true;
|
|
68
46
|
}
|
|
69
47
|
return false;
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbsorberClickMode = void 0;
|
|
4
|
+
var AbsorberClickMode;
|
|
5
|
+
(function (AbsorberClickMode) {
|
|
6
|
+
AbsorberClickMode["absorber"] = "absorber";
|
|
7
|
+
})(AbsorberClickMode || (exports.AbsorberClickMode = AbsorberClickMode = {}));
|
package/cjs/index.js
CHANGED
|
@@ -10,26 +10,14 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
15
|
};
|
|
28
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
17
|
exports.loadAbsorbersPlugin = void 0;
|
|
18
|
+
const AbsorbersPlugin_js_1 = require("./AbsorbersPlugin.js");
|
|
30
19
|
async function loadAbsorbersPlugin(engine, refresh = true) {
|
|
31
|
-
|
|
32
|
-
await engine.addPlugin(new AbsorbersPlugin(), refresh);
|
|
20
|
+
await engine.addPlugin(new AbsorbersPlugin_js_1.AbsorbersPlugin(), refresh);
|
|
33
21
|
}
|
|
34
22
|
exports.loadAbsorbersPlugin = loadAbsorbersPlugin;
|
|
35
23
|
__exportStar(require("./AbsorberContainer.js"), exports);
|
package/esm/AbsorberInstance.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, getDistance, getDistances, getRandom, getRangeValue, getStyleFromRgb, isPointInside, percentDenominator, rangeColorToRgb, } from "@tsparticles/engine";
|
|
1
|
+
import { RotateDirection, Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, getDistance, getDistances, getRandom, getRangeValue, getStyleFromRgb, isPointInside, percentDenominator, rangeColorToRgb, } from "@tsparticles/engine";
|
|
2
2
|
import { Absorber } from "./Options/Classes/Absorber.js";
|
|
3
3
|
const squareExp = 2, absorbFactor = 0.033, minOrbitLength = 0, minRadius = 0, minMass = 0, origin = {
|
|
4
4
|
x: 0,
|
|
@@ -39,13 +39,13 @@ export class AbsorberInstance {
|
|
|
39
39
|
}
|
|
40
40
|
if (particle.absorberOrbitDirection === undefined) {
|
|
41
41
|
particle.absorberOrbitDirection =
|
|
42
|
-
particle.velocity.x >= minVelocity ?
|
|
42
|
+
particle.velocity.x >= minVelocity ? RotateDirection.clockwise : RotateDirection.counterClockwise;
|
|
43
43
|
}
|
|
44
44
|
const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;
|
|
45
45
|
particle.velocity.setTo(Vector.origin);
|
|
46
46
|
const updateFunc = {
|
|
47
|
-
x: orbitDirection ===
|
|
48
|
-
y: orbitDirection ===
|
|
47
|
+
x: orbitDirection === RotateDirection.clockwise ? Math.cos : Math.sin,
|
|
48
|
+
y: orbitDirection === RotateDirection.clockwise ? Math.sin : Math.cos,
|
|
49
49
|
};
|
|
50
50
|
particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
|
|
51
51
|
particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
|
|
@@ -135,14 +135,13 @@ export class AbsorberInstance {
|
|
|
135
135
|
this._updateParticlePosition(particle, v);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
draw(context) {
|
|
139
139
|
context.translate(this.position.x, this.position.y);
|
|
140
140
|
context.beginPath();
|
|
141
141
|
context.arc(origin.x, origin.y, this.size, minAngle, maxAngle, false);
|
|
142
142
|
context.closePath();
|
|
143
143
|
context.fillStyle = getStyleFromRgb(this.color, this.opacity);
|
|
144
144
|
context.fill();
|
|
145
|
-
await Promise.resolve();
|
|
146
145
|
}
|
|
147
146
|
resize() {
|
|
148
147
|
const initialPosition = this.initialPosition;
|
package/esm/Absorbers.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { executeOnSingleOrMultiple, isNumber, itemFromSingleOrMultiple, } from "@tsparticles/engine";
|
|
2
|
+
import { AbsorberClickMode } from "./Enums/AbsorberClickMode.js";
|
|
3
|
+
import { AbsorberInstance } from "./AbsorberInstance.js";
|
|
2
4
|
const defaultIndex = 0;
|
|
3
5
|
export class Absorbers {
|
|
4
6
|
constructor(container) {
|
|
@@ -8,22 +10,22 @@ export class Absorbers {
|
|
|
8
10
|
this.interactivityAbsorbers = [];
|
|
9
11
|
container.getAbsorber = (idxOrName) => idxOrName === undefined || isNumber(idxOrName)
|
|
10
12
|
? this.array[idxOrName ?? defaultIndex]
|
|
11
|
-
: this.array.find(
|
|
13
|
+
: this.array.find(t => t.name === idxOrName);
|
|
12
14
|
container.addAbsorber = async (options, position) => this.addAbsorber(options, position);
|
|
13
15
|
}
|
|
14
16
|
async addAbsorber(options, position) {
|
|
15
|
-
const
|
|
17
|
+
const absorber = new AbsorberInstance(this, this.container, options, position);
|
|
16
18
|
this.array.push(absorber);
|
|
17
|
-
return absorber;
|
|
19
|
+
return Promise.resolve(absorber);
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
draw(context) {
|
|
20
22
|
for (const absorber of this.array) {
|
|
21
|
-
|
|
23
|
+
absorber.draw(context);
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
handleClickMode(mode) {
|
|
25
27
|
const absorberOptions = this.absorbers, modeAbsorbers = this.interactivityAbsorbers;
|
|
26
|
-
if (mode ===
|
|
28
|
+
if (mode === AbsorberClickMode.absorber) {
|
|
27
29
|
const absorbersModeOptions = itemFromSingleOrMultiple(modeAbsorbers), absorbersOptions = absorbersModeOptions ?? itemFromSingleOrMultiple(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;
|
|
28
30
|
void this.addAbsorber(absorbersOptions, aPosition);
|
|
29
31
|
}
|
package/esm/AbsorbersPlugin.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import { executeOnSingleOrMultiple, isArray, isInArray, } from "@tsparticles/engine";
|
|
2
2
|
import { Absorber } from "./Options/Classes/Absorber.js";
|
|
3
|
+
import { AbsorberClickMode } from "./Enums/AbsorberClickMode.js";
|
|
4
|
+
import { Absorbers } from "./Absorbers.js";
|
|
3
5
|
export class AbsorbersPlugin {
|
|
4
6
|
constructor() {
|
|
5
7
|
this.id = "absorbers";
|
|
6
8
|
}
|
|
7
9
|
async getPlugin(container) {
|
|
8
|
-
|
|
9
|
-
return new Absorbers(container);
|
|
10
|
+
return Promise.resolve(new Absorbers(container));
|
|
10
11
|
}
|
|
11
12
|
loadOptions(options, source) {
|
|
12
13
|
if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
16
|
if (source?.absorbers) {
|
|
16
|
-
options.absorbers = executeOnSingleOrMultiple(source.absorbers,
|
|
17
|
+
options.absorbers = executeOnSingleOrMultiple(source.absorbers, absorber => {
|
|
17
18
|
const tmp = new Absorber();
|
|
18
19
|
tmp.load(absorber);
|
|
19
20
|
return tmp;
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
|
-
options.interactivity.modes.absorbers = executeOnSingleOrMultiple(source?.interactivity?.modes?.absorbers,
|
|
23
|
+
options.interactivity.modes.absorbers = executeOnSingleOrMultiple(source?.interactivity?.modes?.absorbers, absorber => {
|
|
23
24
|
const tmp = new Absorber();
|
|
24
25
|
tmp.load(absorber);
|
|
25
26
|
return tmp;
|
|
@@ -37,7 +38,7 @@ export class AbsorbersPlugin {
|
|
|
37
38
|
return true;
|
|
38
39
|
}
|
|
39
40
|
else if (options.interactivity?.events?.onClick?.mode &&
|
|
40
|
-
isInArray(
|
|
41
|
+
isInArray(AbsorberClickMode.absorber, options.interactivity.events.onClick.mode)) {
|
|
41
42
|
return true;
|
|
42
43
|
}
|
|
43
44
|
return false;
|
package/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { AbsorbersPlugin } from "./AbsorbersPlugin.js";
|
|
1
2
|
export async function loadAbsorbersPlugin(engine, refresh = true) {
|
|
2
|
-
const { AbsorbersPlugin } = await import("./AbsorbersPlugin.js");
|
|
3
3
|
await engine.addPlugin(new AbsorbersPlugin(), refresh);
|
|
4
4
|
}
|
|
5
5
|
export * from "./AbsorberContainer.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsparticles/plugin-absorbers",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "tsParticles absorbers plugin",
|
|
5
5
|
"homepage": "https://particles.js.org",
|
|
6
6
|
"repository": {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"./package.json": "./package.json"
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
|
-
"@tsparticles/engine": "^3.
|
|
89
|
+
"@tsparticles/engine": "^3.4.0"
|
|
90
90
|
},
|
|
91
91
|
"publishConfig": {
|
|
92
92
|
"access": "public"
|
package/report.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8"/>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
6
|
-
<title>@tsparticles/plugin-absorbers [
|
|
6
|
+
<title>@tsparticles/plugin-absorbers [13 May 2024 at 00:09]</title>
|
|
7
7
|
<link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
|
|
8
8
|
|
|
9
9
|
<script>
|