@tsparticles/plugin-polygon-mask 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/Enums/PolygonMaskInlineArrangement.js +8 -1
- package/browser/Enums/PolygonMaskMoveType.js +5 -1
- package/browser/Enums/PolygonMaskType.js +7 -1
- package/browser/Options/Classes/PolygonMask.js +3 -2
- package/browser/Options/Classes/PolygonMaskInline.js +2 -1
- package/browser/Options/Classes/PolygonMaskMove.js +2 -1
- package/browser/PolygonMaskInstance.js +33 -34
- package/browser/PolygonMaskPlugin.js +5 -4
- package/browser/index.js +1 -1
- package/cjs/Enums/PolygonMaskInlineArrangement.js +9 -0
- package/cjs/Enums/PolygonMaskMoveType.js +6 -0
- package/cjs/Enums/PolygonMaskType.js +8 -0
- package/cjs/Options/Classes/PolygonMask.js +3 -2
- package/cjs/Options/Classes/PolygonMaskInline.js +2 -1
- package/cjs/Options/Classes/PolygonMaskMove.js +2 -1
- package/cjs/PolygonMaskInstance.js +37 -61
- package/cjs/PolygonMaskPlugin.js +5 -27
- package/cjs/index.js +2 -14
- package/cjs/pathseg.js +1 -0
- package/esm/Enums/PolygonMaskInlineArrangement.js +8 -1
- package/esm/Enums/PolygonMaskMoveType.js +5 -1
- package/esm/Enums/PolygonMaskType.js +7 -1
- package/esm/Options/Classes/PolygonMask.js +3 -2
- package/esm/Options/Classes/PolygonMaskInline.js +2 -1
- package/esm/Options/Classes/PolygonMaskMove.js +2 -1
- package/esm/PolygonMaskInstance.js +33 -34
- package/esm/PolygonMaskPlugin.js +5 -4
- package/esm/index.js +1 -1
- package/package.json +2 -2
- package/report.html +1 -1
- package/tsparticles.plugin.polygon-mask.js +122 -200
- package/tsparticles.plugin.polygon-mask.min.js +1 -1
- package/tsparticles.plugin.polygon-mask.min.js.LICENSE.txt +1 -1
- package/types/Enums/PolygonMaskInlineArrangement.d.ts +1 -1
- package/types/Enums/PolygonMaskMoveType.d.ts +1 -1
- package/types/Enums/PolygonMaskType.d.ts +1 -1
- package/types/PolygonMaskInstance.d.ts +2 -2
- package/types/PolygonMaskPlugin.d.ts +1 -1
- package/umd/Enums/PolygonMaskInlineArrangement.js +9 -0
- package/umd/Enums/PolygonMaskMoveType.js +6 -0
- package/umd/Enums/PolygonMaskType.js +8 -0
- package/umd/Options/Classes/PolygonMask.js +4 -3
- package/umd/Options/Classes/PolygonMaskInline.js +3 -2
- package/umd/Options/Classes/PolygonMaskMove.js +3 -2
- package/umd/PolygonMaskInstance.js +38 -63
- package/umd/PolygonMaskPlugin.js +6 -29
- package/umd/index.js +3 -16
- package/719.min.js +0 -2
- package/719.min.js.LICENSE.txt +0 -1
- package/787.min.js +0 -2
- package/787.min.js.LICENSE.txt +0 -1
- package/856.min.js +0 -2
- package/856.min.js.LICENSE.txt +0 -1
- package/dist_browser_PolygonMaskInstance_js.js +0 -30
- package/dist_browser_PolygonMaskPlugin_js.js +0 -90
- package/dist_browser_utils_js.js +0 -30
|
@@ -1 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export var PolygonMaskInlineArrangement;
|
|
2
|
+
(function (PolygonMaskInlineArrangement) {
|
|
3
|
+
PolygonMaskInlineArrangement["equidistant"] = "equidistant";
|
|
4
|
+
PolygonMaskInlineArrangement["onePerPoint"] = "one-per-point";
|
|
5
|
+
PolygonMaskInlineArrangement["perPoint"] = "per-point";
|
|
6
|
+
PolygonMaskInlineArrangement["randomLength"] = "random-length";
|
|
7
|
+
PolygonMaskInlineArrangement["randomPoint"] = "random-point";
|
|
8
|
+
})(PolygonMaskInlineArrangement || (PolygonMaskInlineArrangement = {}));
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
export
|
|
1
|
+
export var PolygonMaskType;
|
|
2
|
+
(function (PolygonMaskType) {
|
|
3
|
+
PolygonMaskType["inline"] = "inline";
|
|
4
|
+
PolygonMaskType["inside"] = "inside";
|
|
5
|
+
PolygonMaskType["outside"] = "outside";
|
|
6
|
+
PolygonMaskType["none"] = "none";
|
|
7
|
+
})(PolygonMaskType || (PolygonMaskType = {}));
|
|
@@ -3,6 +3,7 @@ import { PolygonMaskDraw } from "./PolygonMaskDraw.js";
|
|
|
3
3
|
import { PolygonMaskInline } from "./PolygonMaskInline.js";
|
|
4
4
|
import { PolygonMaskLocalSvg } from "./PolygonMaskLocalSvg.js";
|
|
5
5
|
import { PolygonMaskMove } from "./PolygonMaskMove.js";
|
|
6
|
+
import { PolygonMaskType } from "../../Enums/PolygonMaskType.js";
|
|
6
7
|
export class PolygonMask {
|
|
7
8
|
constructor() {
|
|
8
9
|
this.draw = new PolygonMaskDraw();
|
|
@@ -10,7 +11,7 @@ export class PolygonMask {
|
|
|
10
11
|
this.inline = new PolygonMaskInline();
|
|
11
12
|
this.move = new PolygonMaskMove();
|
|
12
13
|
this.scale = 1;
|
|
13
|
-
this.type =
|
|
14
|
+
this.type = PolygonMaskType.none;
|
|
14
15
|
}
|
|
15
16
|
load(data) {
|
|
16
17
|
if (!data) {
|
|
@@ -29,7 +30,7 @@ export class PolygonMask {
|
|
|
29
30
|
this.enable = data.enable;
|
|
30
31
|
}
|
|
31
32
|
else {
|
|
32
|
-
this.enable = this.type !==
|
|
33
|
+
this.enable = this.type !== PolygonMaskType.none;
|
|
33
34
|
}
|
|
34
35
|
if (data.url !== undefined) {
|
|
35
36
|
this.url = data.url;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { PolygonMaskInlineArrangement, } from "../../Enums/PolygonMaskInlineArrangement.js";
|
|
1
2
|
export class PolygonMaskInline {
|
|
2
3
|
constructor() {
|
|
3
|
-
this.arrangement =
|
|
4
|
+
this.arrangement = PolygonMaskInlineArrangement.onePerPoint;
|
|
4
5
|
}
|
|
5
6
|
load(data) {
|
|
6
7
|
if (!data) {
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { deepExtend, errorPrefix, getDistance, getDistances, getRandom, isArray, isString, itemFromArray, percentDenominator, } from "@tsparticles/engine";
|
|
1
|
+
import { OutModeDirection, deepExtend, errorPrefix, getDistance, getDistances, getRandom, isArray, isString, itemFromArray, percentDenominator, } from "@tsparticles/engine";
|
|
2
|
+
import { calcClosestPointOnSegment, drawPolygonMask, drawPolygonMaskPath, parsePaths, segmentBounce } from "./utils.js";
|
|
3
|
+
import { PolygonMaskInlineArrangement } from "./Enums/PolygonMaskInlineArrangement.js";
|
|
4
|
+
import { PolygonMaskType } from "./Enums/PolygonMaskType.js";
|
|
2
5
|
const noPolygonDataLoaded = `${errorPrefix} No polygon data loaded.`, noPolygonFound = `${errorPrefix} No polygon found, you need to specify SVG url in config.`, origin = {
|
|
3
6
|
x: 0,
|
|
4
7
|
y: 0,
|
|
5
8
|
}, half = 0.5, double = 2;
|
|
6
9
|
export class PolygonMaskInstance {
|
|
7
10
|
constructor(container, engine) {
|
|
8
|
-
this._checkInsidePolygon =
|
|
11
|
+
this._checkInsidePolygon = position => {
|
|
9
12
|
const container = this._container, options = container.actualOptions.polygon;
|
|
10
|
-
if (!options?.enable || options.type ===
|
|
13
|
+
if (!options?.enable || options.type === PolygonMaskType.none || options.type === PolygonMaskType.inline) {
|
|
11
14
|
return true;
|
|
12
15
|
}
|
|
13
16
|
if (!this.raw) {
|
|
@@ -21,11 +24,11 @@ export class PolygonMaskInstance {
|
|
|
21
24
|
inside = !inside;
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
|
-
if (options.type ===
|
|
27
|
+
if (options.type === PolygonMaskType.inside) {
|
|
25
28
|
return inside;
|
|
26
29
|
}
|
|
27
30
|
else {
|
|
28
|
-
return options.type ===
|
|
31
|
+
return options.type === PolygonMaskType.outside ? !inside : false;
|
|
29
32
|
}
|
|
30
33
|
};
|
|
31
34
|
this._createPath2D = () => {
|
|
@@ -75,7 +78,7 @@ export class PolygonMaskInstance {
|
|
|
75
78
|
if (!req.ok) {
|
|
76
79
|
throw new Error(`${errorPrefix} occurred during polygon mask download`);
|
|
77
80
|
}
|
|
78
|
-
return
|
|
81
|
+
return this._parseSvgPath(await req.text(), force);
|
|
79
82
|
};
|
|
80
83
|
this._drawPoints = () => {
|
|
81
84
|
if (!this.raw) {
|
|
@@ -88,7 +91,7 @@ export class PolygonMaskInstance {
|
|
|
88
91
|
});
|
|
89
92
|
}
|
|
90
93
|
};
|
|
91
|
-
this._getEquidistantPointByIndex =
|
|
94
|
+
this._getEquidistantPointByIndex = index => {
|
|
92
95
|
const container = this._container, options = container.actualOptions, polygonMaskOptions = options.polygon;
|
|
93
96
|
if (!polygonMaskOptions) {
|
|
94
97
|
return;
|
|
@@ -114,7 +117,7 @@ export class PolygonMaskInstance {
|
|
|
114
117
|
y: (point?.y ?? origin.y) * scale + (this.offset?.y ?? origin.y),
|
|
115
118
|
};
|
|
116
119
|
};
|
|
117
|
-
this._getPointByIndex =
|
|
120
|
+
this._getPointByIndex = index => {
|
|
118
121
|
if (!this.raw?.length) {
|
|
119
122
|
throw new Error(noPolygonDataLoaded);
|
|
120
123
|
}
|
|
@@ -167,14 +170,14 @@ export class PolygonMaskInstance {
|
|
|
167
170
|
const namespaces = 'xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"';
|
|
168
171
|
svg = `<svg ${namespaces} width="${data.size.width}" height="${data.size.height}">${path}</svg>`;
|
|
169
172
|
}
|
|
170
|
-
this.raw =
|
|
173
|
+
this.raw = this._parseSvgPath(svg, force);
|
|
171
174
|
}
|
|
172
175
|
this._createPath2D();
|
|
173
176
|
this._engine.dispatchEvent("polygonMaskLoaded", {
|
|
174
177
|
container: this._container,
|
|
175
178
|
});
|
|
176
179
|
};
|
|
177
|
-
this._parseSvgPath =
|
|
180
|
+
this._parseSvgPath = (xml, force) => {
|
|
178
181
|
const forceDownload = force ?? false;
|
|
179
182
|
if (this.paths !== undefined && !forceDownload) {
|
|
180
183
|
return this.raw;
|
|
@@ -209,24 +212,22 @@ export class PolygonMaskInstance {
|
|
|
209
212
|
x: (canvasSize.width * position.x) / percentDenominator - this.dimension.width * half,
|
|
210
213
|
y: (canvasSize.height * position.y) / percentDenominator - this.dimension.height * half,
|
|
211
214
|
};
|
|
212
|
-
const { parsePaths } = await import("./utils.js");
|
|
213
215
|
return parsePaths(this.paths, scale, this.offset);
|
|
214
216
|
};
|
|
215
|
-
this._polygonBounce =
|
|
217
|
+
this._polygonBounce = (particle, delta, direction) => {
|
|
216
218
|
const options = this._container.actualOptions.polygon;
|
|
217
|
-
if (!this.raw || !options?.enable || direction !==
|
|
219
|
+
if (!this.raw || !options?.enable || direction !== OutModeDirection.top) {
|
|
218
220
|
return false;
|
|
219
221
|
}
|
|
220
|
-
if (options.type ===
|
|
222
|
+
if (options.type === PolygonMaskType.inside || options.type === PolygonMaskType.outside) {
|
|
221
223
|
let closest, dx, dy;
|
|
222
224
|
const pos = particle.getPosition(), radius = particle.getRadius(), offset = 1;
|
|
223
225
|
for (let i = 0, j = this.raw.length - offset; i < this.raw.length; j = i++) {
|
|
224
|
-
const pi = this.raw[i], pj = this.raw[j]
|
|
226
|
+
const pi = this.raw[i], pj = this.raw[j];
|
|
225
227
|
closest = calcClosestPointOnSegment(pi, pj, pos);
|
|
226
228
|
const dist = getDistances(pos, closest);
|
|
227
229
|
[dx, dy] = [dist.dx, dist.dy];
|
|
228
230
|
if (dist.distance < radius) {
|
|
229
|
-
const { segmentBounce } = await import("./utils.js");
|
|
230
231
|
segmentBounce(pi, pj, particle.velocity);
|
|
231
232
|
return true;
|
|
232
233
|
}
|
|
@@ -245,7 +246,7 @@ export class PolygonMaskInstance {
|
|
|
245
246
|
return true;
|
|
246
247
|
}
|
|
247
248
|
}
|
|
248
|
-
else if (options.type ===
|
|
249
|
+
else if (options.type === PolygonMaskType.inline && particle.initialPosition) {
|
|
249
250
|
const dist = getDistance(particle.initialPosition, particle.getPosition()), { velocity } = particle;
|
|
250
251
|
if (dist > this._moveRadius) {
|
|
251
252
|
velocity.x = velocity.y * half - velocity.x;
|
|
@@ -261,19 +262,19 @@ export class PolygonMaskInstance {
|
|
|
261
262
|
return;
|
|
262
263
|
}
|
|
263
264
|
let position;
|
|
264
|
-
if (options.type ===
|
|
265
|
+
if (options.type === PolygonMaskType.inline) {
|
|
265
266
|
switch (options.inline.arrangement) {
|
|
266
|
-
case
|
|
267
|
+
case PolygonMaskInlineArrangement.randomPoint:
|
|
267
268
|
position = this._getRandomPoint();
|
|
268
269
|
break;
|
|
269
|
-
case
|
|
270
|
+
case PolygonMaskInlineArrangement.randomLength:
|
|
270
271
|
position = this._getRandomPointByLength();
|
|
271
272
|
break;
|
|
272
|
-
case
|
|
273
|
+
case PolygonMaskInlineArrangement.equidistant:
|
|
273
274
|
position = this._getEquidistantPointByIndex(container.particles.count);
|
|
274
275
|
break;
|
|
275
|
-
case
|
|
276
|
-
case
|
|
276
|
+
case PolygonMaskInlineArrangement.onePerPoint:
|
|
277
|
+
case PolygonMaskInlineArrangement.perPoint:
|
|
277
278
|
default:
|
|
278
279
|
position = this._getPointByIndex(container.particles.count);
|
|
279
280
|
}
|
|
@@ -304,11 +305,11 @@ export class PolygonMaskInstance {
|
|
|
304
305
|
clickPositionValid(position) {
|
|
305
306
|
const options = this._container.actualOptions.polygon;
|
|
306
307
|
return (!!options?.enable &&
|
|
307
|
-
options.type !==
|
|
308
|
-
options.type !==
|
|
308
|
+
options.type !== PolygonMaskType.none &&
|
|
309
|
+
options.type !== PolygonMaskType.inline &&
|
|
309
310
|
this._checkInsidePolygon(position));
|
|
310
311
|
}
|
|
311
|
-
|
|
312
|
+
draw(context) {
|
|
312
313
|
if (!this.paths?.length) {
|
|
313
314
|
return;
|
|
314
315
|
}
|
|
@@ -327,11 +328,9 @@ export class PolygonMaskInstance {
|
|
|
327
328
|
continue;
|
|
328
329
|
}
|
|
329
330
|
if (path2d && this.offset) {
|
|
330
|
-
const { drawPolygonMaskPath } = await import("./utils.js");
|
|
331
331
|
drawPolygonMaskPath(context, path2d, polygonDraw.stroke, this.offset);
|
|
332
332
|
}
|
|
333
333
|
else if (rawData) {
|
|
334
|
-
const { drawPolygonMask } = await import("./utils.js");
|
|
335
334
|
drawPolygonMask(context, rawData, polygonDraw.stroke);
|
|
336
335
|
}
|
|
337
336
|
}
|
|
@@ -347,8 +346,8 @@ export class PolygonMaskInstance {
|
|
|
347
346
|
await this._initRawData();
|
|
348
347
|
}
|
|
349
348
|
}
|
|
350
|
-
|
|
351
|
-
return
|
|
349
|
+
particleBounce(particle, delta, direction) {
|
|
350
|
+
return this._polygonBounce(particle, delta, direction);
|
|
352
351
|
}
|
|
353
352
|
particlePosition(position) {
|
|
354
353
|
const options = this._container.actualOptions.polygon, defaultLength = 0;
|
|
@@ -360,9 +359,9 @@ export class PolygonMaskInstance {
|
|
|
360
359
|
particlesInitialization() {
|
|
361
360
|
const options = this._container.actualOptions.polygon;
|
|
362
361
|
if (options?.enable &&
|
|
363
|
-
options.type ===
|
|
364
|
-
(options.inline.arrangement ===
|
|
365
|
-
options.inline.arrangement ===
|
|
362
|
+
options.type === PolygonMaskType.inline &&
|
|
363
|
+
(options.inline.arrangement === PolygonMaskInlineArrangement.onePerPoint ||
|
|
364
|
+
options.inline.arrangement === PolygonMaskInlineArrangement.perPoint)) {
|
|
366
365
|
this._drawPoints();
|
|
367
366
|
return true;
|
|
368
367
|
}
|
|
@@ -370,7 +369,7 @@ export class PolygonMaskInstance {
|
|
|
370
369
|
}
|
|
371
370
|
resize() {
|
|
372
371
|
const container = this._container, options = container.actualOptions.polygon;
|
|
373
|
-
if (!(options?.enable && options.type !==
|
|
372
|
+
if (!(options?.enable && options.type !== PolygonMaskType.none)) {
|
|
374
373
|
return;
|
|
375
374
|
}
|
|
376
375
|
if (this.redrawTimeout) {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { PolygonMask } from "./Options/Classes/PolygonMask.js";
|
|
2
|
+
import { PolygonMaskInstance } from "./PolygonMaskInstance.js";
|
|
3
|
+
import { PolygonMaskType } from "./Enums/PolygonMaskType.js";
|
|
2
4
|
export class PolygonMaskPlugin {
|
|
3
5
|
constructor(engine) {
|
|
4
6
|
this.id = "polygonMask";
|
|
5
7
|
this._engine = engine;
|
|
6
8
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return new PolygonMaskInstance(container, this._engine);
|
|
9
|
+
getPlugin(container) {
|
|
10
|
+
return Promise.resolve(new PolygonMaskInstance(container, this._engine));
|
|
10
11
|
}
|
|
11
12
|
loadOptions(options, source) {
|
|
12
13
|
if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
|
|
@@ -20,6 +21,6 @@ export class PolygonMaskPlugin {
|
|
|
20
21
|
}
|
|
21
22
|
needsPlugin(options) {
|
|
22
23
|
return (options?.polygon?.enable ??
|
|
23
|
-
(options?.polygon?.type !== undefined && options.polygon.type !==
|
|
24
|
+
(options?.polygon?.type !== undefined && options.polygon.type !== PolygonMaskType.none));
|
|
24
25
|
}
|
|
25
26
|
}
|
package/browser/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./pathseg.js";
|
|
2
|
+
import { PolygonMaskPlugin } from "./PolygonMaskPlugin.js";
|
|
2
3
|
export async function loadPolygonMaskPlugin(engine, refresh = true) {
|
|
3
|
-
const { PolygonMaskPlugin } = await import("./PolygonMaskPlugin.js");
|
|
4
4
|
await engine.addPlugin(new PolygonMaskPlugin(engine), refresh);
|
|
5
5
|
}
|
|
6
6
|
export * from "./Enums/PolygonMaskInlineArrangement.js";
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolygonMaskInlineArrangement = void 0;
|
|
4
|
+
var PolygonMaskInlineArrangement;
|
|
5
|
+
(function (PolygonMaskInlineArrangement) {
|
|
6
|
+
PolygonMaskInlineArrangement["equidistant"] = "equidistant";
|
|
7
|
+
PolygonMaskInlineArrangement["onePerPoint"] = "one-per-point";
|
|
8
|
+
PolygonMaskInlineArrangement["perPoint"] = "per-point";
|
|
9
|
+
PolygonMaskInlineArrangement["randomLength"] = "random-length";
|
|
10
|
+
PolygonMaskInlineArrangement["randomPoint"] = "random-point";
|
|
11
|
+
})(PolygonMaskInlineArrangement || (exports.PolygonMaskInlineArrangement = PolygonMaskInlineArrangement = {}));
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolygonMaskMoveType = void 0;
|
|
4
|
+
var PolygonMaskMoveType;
|
|
5
|
+
(function (PolygonMaskMoveType) {
|
|
6
|
+
PolygonMaskMoveType["path"] = "path";
|
|
7
|
+
PolygonMaskMoveType["radius"] = "radius";
|
|
8
|
+
})(PolygonMaskMoveType || (exports.PolygonMaskMoveType = PolygonMaskMoveType = {}));
|
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolygonMaskType = void 0;
|
|
4
|
+
var PolygonMaskType;
|
|
5
|
+
(function (PolygonMaskType) {
|
|
6
|
+
PolygonMaskType["inline"] = "inline";
|
|
7
|
+
PolygonMaskType["inside"] = "inside";
|
|
8
|
+
PolygonMaskType["outside"] = "outside";
|
|
9
|
+
PolygonMaskType["none"] = "none";
|
|
10
|
+
})(PolygonMaskType || (exports.PolygonMaskType = PolygonMaskType = {}));
|
|
@@ -6,6 +6,7 @@ const PolygonMaskDraw_js_1 = require("./PolygonMaskDraw.js");
|
|
|
6
6
|
const PolygonMaskInline_js_1 = require("./PolygonMaskInline.js");
|
|
7
7
|
const PolygonMaskLocalSvg_js_1 = require("./PolygonMaskLocalSvg.js");
|
|
8
8
|
const PolygonMaskMove_js_1 = require("./PolygonMaskMove.js");
|
|
9
|
+
const PolygonMaskType_js_1 = require("../../Enums/PolygonMaskType.js");
|
|
9
10
|
class PolygonMask {
|
|
10
11
|
constructor() {
|
|
11
12
|
this.draw = new PolygonMaskDraw_js_1.PolygonMaskDraw();
|
|
@@ -13,7 +14,7 @@ class PolygonMask {
|
|
|
13
14
|
this.inline = new PolygonMaskInline_js_1.PolygonMaskInline();
|
|
14
15
|
this.move = new PolygonMaskMove_js_1.PolygonMaskMove();
|
|
15
16
|
this.scale = 1;
|
|
16
|
-
this.type =
|
|
17
|
+
this.type = PolygonMaskType_js_1.PolygonMaskType.none;
|
|
17
18
|
}
|
|
18
19
|
load(data) {
|
|
19
20
|
if (!data) {
|
|
@@ -32,7 +33,7 @@ class PolygonMask {
|
|
|
32
33
|
this.enable = data.enable;
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
|
-
this.enable = this.type !==
|
|
36
|
+
this.enable = this.type !== PolygonMaskType_js_1.PolygonMaskType.none;
|
|
36
37
|
}
|
|
37
38
|
if (data.url !== undefined) {
|
|
38
39
|
this.url = data.url;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PolygonMaskInline = void 0;
|
|
4
|
+
const PolygonMaskInlineArrangement_js_1 = require("../../Enums/PolygonMaskInlineArrangement.js");
|
|
4
5
|
class PolygonMaskInline {
|
|
5
6
|
constructor() {
|
|
6
|
-
this.arrangement =
|
|
7
|
+
this.arrangement = PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.onePerPoint;
|
|
7
8
|
}
|
|
8
9
|
load(data) {
|
|
9
10
|
if (!data) {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PolygonMaskMove = void 0;
|
|
4
|
+
const PolygonMaskMoveType_js_1 = require("../../Enums/PolygonMaskMoveType.js");
|
|
4
5
|
class PolygonMaskMove {
|
|
5
6
|
constructor() {
|
|
6
7
|
this.radius = 10;
|
|
7
|
-
this.type =
|
|
8
|
+
this.type = PolygonMaskMoveType_js_1.PolygonMaskMoveType.path;
|
|
8
9
|
}
|
|
9
10
|
load(data) {
|
|
10
11
|
if (!data) {
|
|
@@ -1,39 +1,19 @@
|
|
|
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.PolygonMaskInstance = void 0;
|
|
27
4
|
const engine_1 = require("@tsparticles/engine");
|
|
5
|
+
const utils_js_1 = require("./utils.js");
|
|
6
|
+
const PolygonMaskInlineArrangement_js_1 = require("./Enums/PolygonMaskInlineArrangement.js");
|
|
7
|
+
const PolygonMaskType_js_1 = require("./Enums/PolygonMaskType.js");
|
|
28
8
|
const noPolygonDataLoaded = `${engine_1.errorPrefix} No polygon data loaded.`, noPolygonFound = `${engine_1.errorPrefix} No polygon found, you need to specify SVG url in config.`, origin = {
|
|
29
9
|
x: 0,
|
|
30
10
|
y: 0,
|
|
31
11
|
}, half = 0.5, double = 2;
|
|
32
12
|
class PolygonMaskInstance {
|
|
33
13
|
constructor(container, engine) {
|
|
34
|
-
this._checkInsidePolygon =
|
|
14
|
+
this._checkInsidePolygon = position => {
|
|
35
15
|
const container = this._container, options = container.actualOptions.polygon;
|
|
36
|
-
if (!options?.enable || options.type ===
|
|
16
|
+
if (!options?.enable || options.type === PolygonMaskType_js_1.PolygonMaskType.none || options.type === PolygonMaskType_js_1.PolygonMaskType.inline) {
|
|
37
17
|
return true;
|
|
38
18
|
}
|
|
39
19
|
if (!this.raw) {
|
|
@@ -47,11 +27,11 @@ class PolygonMaskInstance {
|
|
|
47
27
|
inside = !inside;
|
|
48
28
|
}
|
|
49
29
|
}
|
|
50
|
-
if (options.type ===
|
|
30
|
+
if (options.type === PolygonMaskType_js_1.PolygonMaskType.inside) {
|
|
51
31
|
return inside;
|
|
52
32
|
}
|
|
53
33
|
else {
|
|
54
|
-
return options.type ===
|
|
34
|
+
return options.type === PolygonMaskType_js_1.PolygonMaskType.outside ? !inside : false;
|
|
55
35
|
}
|
|
56
36
|
};
|
|
57
37
|
this._createPath2D = () => {
|
|
@@ -101,7 +81,7 @@ class PolygonMaskInstance {
|
|
|
101
81
|
if (!req.ok) {
|
|
102
82
|
throw new Error(`${engine_1.errorPrefix} occurred during polygon mask download`);
|
|
103
83
|
}
|
|
104
|
-
return
|
|
84
|
+
return this._parseSvgPath(await req.text(), force);
|
|
105
85
|
};
|
|
106
86
|
this._drawPoints = () => {
|
|
107
87
|
if (!this.raw) {
|
|
@@ -114,7 +94,7 @@ class PolygonMaskInstance {
|
|
|
114
94
|
});
|
|
115
95
|
}
|
|
116
96
|
};
|
|
117
|
-
this._getEquidistantPointByIndex =
|
|
97
|
+
this._getEquidistantPointByIndex = index => {
|
|
118
98
|
const container = this._container, options = container.actualOptions, polygonMaskOptions = options.polygon;
|
|
119
99
|
if (!polygonMaskOptions) {
|
|
120
100
|
return;
|
|
@@ -140,7 +120,7 @@ class PolygonMaskInstance {
|
|
|
140
120
|
y: (point?.y ?? origin.y) * scale + (this.offset?.y ?? origin.y),
|
|
141
121
|
};
|
|
142
122
|
};
|
|
143
|
-
this._getPointByIndex =
|
|
123
|
+
this._getPointByIndex = index => {
|
|
144
124
|
if (!this.raw?.length) {
|
|
145
125
|
throw new Error(noPolygonDataLoaded);
|
|
146
126
|
}
|
|
@@ -193,14 +173,14 @@ class PolygonMaskInstance {
|
|
|
193
173
|
const namespaces = 'xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"';
|
|
194
174
|
svg = `<svg ${namespaces} width="${data.size.width}" height="${data.size.height}">${path}</svg>`;
|
|
195
175
|
}
|
|
196
|
-
this.raw =
|
|
176
|
+
this.raw = this._parseSvgPath(svg, force);
|
|
197
177
|
}
|
|
198
178
|
this._createPath2D();
|
|
199
179
|
this._engine.dispatchEvent("polygonMaskLoaded", {
|
|
200
180
|
container: this._container,
|
|
201
181
|
});
|
|
202
182
|
};
|
|
203
|
-
this._parseSvgPath =
|
|
183
|
+
this._parseSvgPath = (xml, force) => {
|
|
204
184
|
const forceDownload = force ?? false;
|
|
205
185
|
if (this.paths !== undefined && !forceDownload) {
|
|
206
186
|
return this.raw;
|
|
@@ -235,25 +215,23 @@ class PolygonMaskInstance {
|
|
|
235
215
|
x: (canvasSize.width * position.x) / engine_1.percentDenominator - this.dimension.width * half,
|
|
236
216
|
y: (canvasSize.height * position.y) / engine_1.percentDenominator - this.dimension.height * half,
|
|
237
217
|
};
|
|
238
|
-
|
|
239
|
-
return parsePaths(this.paths, scale, this.offset);
|
|
218
|
+
return (0, utils_js_1.parsePaths)(this.paths, scale, this.offset);
|
|
240
219
|
};
|
|
241
|
-
this._polygonBounce =
|
|
220
|
+
this._polygonBounce = (particle, delta, direction) => {
|
|
242
221
|
const options = this._container.actualOptions.polygon;
|
|
243
|
-
if (!this.raw || !options?.enable || direction !==
|
|
222
|
+
if (!this.raw || !options?.enable || direction !== engine_1.OutModeDirection.top) {
|
|
244
223
|
return false;
|
|
245
224
|
}
|
|
246
|
-
if (options.type ===
|
|
225
|
+
if (options.type === PolygonMaskType_js_1.PolygonMaskType.inside || options.type === PolygonMaskType_js_1.PolygonMaskType.outside) {
|
|
247
226
|
let closest, dx, dy;
|
|
248
227
|
const pos = particle.getPosition(), radius = particle.getRadius(), offset = 1;
|
|
249
228
|
for (let i = 0, j = this.raw.length - offset; i < this.raw.length; j = i++) {
|
|
250
|
-
const pi = this.raw[i], pj = this.raw[j]
|
|
251
|
-
closest = calcClosestPointOnSegment(pi, pj, pos);
|
|
229
|
+
const pi = this.raw[i], pj = this.raw[j];
|
|
230
|
+
closest = (0, utils_js_1.calcClosestPointOnSegment)(pi, pj, pos);
|
|
252
231
|
const dist = (0, engine_1.getDistances)(pos, closest);
|
|
253
232
|
[dx, dy] = [dist.dx, dist.dy];
|
|
254
233
|
if (dist.distance < radius) {
|
|
255
|
-
|
|
256
|
-
segmentBounce(pi, pj, particle.velocity);
|
|
234
|
+
(0, utils_js_1.segmentBounce)(pi, pj, particle.velocity);
|
|
257
235
|
return true;
|
|
258
236
|
}
|
|
259
237
|
}
|
|
@@ -271,7 +249,7 @@ class PolygonMaskInstance {
|
|
|
271
249
|
return true;
|
|
272
250
|
}
|
|
273
251
|
}
|
|
274
|
-
else if (options.type ===
|
|
252
|
+
else if (options.type === PolygonMaskType_js_1.PolygonMaskType.inline && particle.initialPosition) {
|
|
275
253
|
const dist = (0, engine_1.getDistance)(particle.initialPosition, particle.getPosition()), { velocity } = particle;
|
|
276
254
|
if (dist > this._moveRadius) {
|
|
277
255
|
velocity.x = velocity.y * half - velocity.x;
|
|
@@ -287,19 +265,19 @@ class PolygonMaskInstance {
|
|
|
287
265
|
return;
|
|
288
266
|
}
|
|
289
267
|
let position;
|
|
290
|
-
if (options.type ===
|
|
268
|
+
if (options.type === PolygonMaskType_js_1.PolygonMaskType.inline) {
|
|
291
269
|
switch (options.inline.arrangement) {
|
|
292
|
-
case
|
|
270
|
+
case PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.randomPoint:
|
|
293
271
|
position = this._getRandomPoint();
|
|
294
272
|
break;
|
|
295
|
-
case
|
|
273
|
+
case PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.randomLength:
|
|
296
274
|
position = this._getRandomPointByLength();
|
|
297
275
|
break;
|
|
298
|
-
case
|
|
276
|
+
case PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.equidistant:
|
|
299
277
|
position = this._getEquidistantPointByIndex(container.particles.count);
|
|
300
278
|
break;
|
|
301
|
-
case
|
|
302
|
-
case
|
|
279
|
+
case PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.onePerPoint:
|
|
280
|
+
case PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.perPoint:
|
|
303
281
|
default:
|
|
304
282
|
position = this._getPointByIndex(container.particles.count);
|
|
305
283
|
}
|
|
@@ -330,11 +308,11 @@ class PolygonMaskInstance {
|
|
|
330
308
|
clickPositionValid(position) {
|
|
331
309
|
const options = this._container.actualOptions.polygon;
|
|
332
310
|
return (!!options?.enable &&
|
|
333
|
-
options.type !==
|
|
334
|
-
options.type !==
|
|
311
|
+
options.type !== PolygonMaskType_js_1.PolygonMaskType.none &&
|
|
312
|
+
options.type !== PolygonMaskType_js_1.PolygonMaskType.inline &&
|
|
335
313
|
this._checkInsidePolygon(position));
|
|
336
314
|
}
|
|
337
|
-
|
|
315
|
+
draw(context) {
|
|
338
316
|
if (!this.paths?.length) {
|
|
339
317
|
return;
|
|
340
318
|
}
|
|
@@ -353,12 +331,10 @@ class PolygonMaskInstance {
|
|
|
353
331
|
continue;
|
|
354
332
|
}
|
|
355
333
|
if (path2d && this.offset) {
|
|
356
|
-
|
|
357
|
-
drawPolygonMaskPath(context, path2d, polygonDraw.stroke, this.offset);
|
|
334
|
+
(0, utils_js_1.drawPolygonMaskPath)(context, path2d, polygonDraw.stroke, this.offset);
|
|
358
335
|
}
|
|
359
336
|
else if (rawData) {
|
|
360
|
-
|
|
361
|
-
drawPolygonMask(context, rawData, polygonDraw.stroke);
|
|
337
|
+
(0, utils_js_1.drawPolygonMask)(context, rawData, polygonDraw.stroke);
|
|
362
338
|
}
|
|
363
339
|
}
|
|
364
340
|
}
|
|
@@ -373,8 +349,8 @@ class PolygonMaskInstance {
|
|
|
373
349
|
await this._initRawData();
|
|
374
350
|
}
|
|
375
351
|
}
|
|
376
|
-
|
|
377
|
-
return
|
|
352
|
+
particleBounce(particle, delta, direction) {
|
|
353
|
+
return this._polygonBounce(particle, delta, direction);
|
|
378
354
|
}
|
|
379
355
|
particlePosition(position) {
|
|
380
356
|
const options = this._container.actualOptions.polygon, defaultLength = 0;
|
|
@@ -386,9 +362,9 @@ class PolygonMaskInstance {
|
|
|
386
362
|
particlesInitialization() {
|
|
387
363
|
const options = this._container.actualOptions.polygon;
|
|
388
364
|
if (options?.enable &&
|
|
389
|
-
options.type ===
|
|
390
|
-
(options.inline.arrangement ===
|
|
391
|
-
options.inline.arrangement ===
|
|
365
|
+
options.type === PolygonMaskType_js_1.PolygonMaskType.inline &&
|
|
366
|
+
(options.inline.arrangement === PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.onePerPoint ||
|
|
367
|
+
options.inline.arrangement === PolygonMaskInlineArrangement_js_1.PolygonMaskInlineArrangement.perPoint)) {
|
|
392
368
|
this._drawPoints();
|
|
393
369
|
return true;
|
|
394
370
|
}
|
|
@@ -396,7 +372,7 @@ class PolygonMaskInstance {
|
|
|
396
372
|
}
|
|
397
373
|
resize() {
|
|
398
374
|
const container = this._container, options = container.actualOptions.polygon;
|
|
399
|
-
if (!(options?.enable && options.type !==
|
|
375
|
+
if (!(options?.enable && options.type !== PolygonMaskType_js_1.PolygonMaskType.none)) {
|
|
400
376
|
return;
|
|
401
377
|
}
|
|
402
378
|
if (this.redrawTimeout) {
|