@tsparticles/plugin-emitters 4.0.0-alpha.2 → 4.0.0-alpha.4

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.
Files changed (73) hide show
  1. package/129.min.js +2 -0
  2. package/129.min.js.LICENSE.txt +1 -0
  3. package/246.min.js +2 -0
  4. package/246.min.js.LICENSE.txt +1 -0
  5. package/330.min.js +2 -0
  6. package/330.min.js.LICENSE.txt +1 -0
  7. package/{921.min.js → 490.min.js} +2 -2
  8. package/490.min.js.LICENSE.txt +1 -0
  9. package/849.min.js +2 -0
  10. package/849.min.js.LICENSE.txt +1 -0
  11. package/940.min.js +2 -0
  12. package/940.min.js.LICENSE.txt +1 -0
  13. package/browser/EmitterInstance.js +10 -14
  14. package/browser/EmittersInstancesManager.js +69 -0
  15. package/browser/EmittersInteractor.js +112 -0
  16. package/browser/EmittersPlugin.js +8 -55
  17. package/browser/EmittersPluginInstance.js +42 -0
  18. package/browser/ShapeManager.js +4 -4
  19. package/browser/constants.js +4 -0
  20. package/browser/index.js +8 -4
  21. package/cjs/EmitterInstance.js +10 -14
  22. package/cjs/EmittersInstancesManager.js +69 -0
  23. package/cjs/EmittersInteractor.js +112 -0
  24. package/cjs/EmittersPlugin.js +8 -55
  25. package/cjs/EmittersPluginInstance.js +42 -0
  26. package/cjs/ShapeManager.js +4 -4
  27. package/cjs/constants.js +4 -0
  28. package/cjs/index.js +8 -4
  29. package/dist_browser_EmitterInstance_js.js +30 -0
  30. package/dist_browser_EmittersInstancesManager_js.js +90 -0
  31. package/dist_browser_EmittersInteractor_js.js +100 -0
  32. package/dist_browser_EmittersPluginInstance_js.js +30 -0
  33. package/dist_browser_EmittersPlugin_js.js +2 -22
  34. package/dist_browser_ShapeManager_js.js +2 -2
  35. package/esm/EmitterInstance.js +10 -14
  36. package/esm/EmittersInstancesManager.js +69 -0
  37. package/esm/EmittersInteractor.js +112 -0
  38. package/esm/EmittersPlugin.js +8 -55
  39. package/esm/EmittersPluginInstance.js +42 -0
  40. package/esm/ShapeManager.js +4 -4
  41. package/esm/constants.js +4 -0
  42. package/esm/index.js +8 -4
  43. package/package.json +3 -2
  44. package/report.html +1 -1
  45. package/tsparticles.plugin.emitters.js +48 -20
  46. package/tsparticles.plugin.emitters.min.js +1 -1
  47. package/tsparticles.plugin.emitters.min.js.LICENSE.txt +1 -1
  48. package/types/EmitterContainer.d.ts +8 -7
  49. package/types/EmitterInstance.d.ts +2 -3
  50. package/types/EmittersEngine.d.ts +2 -2
  51. package/types/EmittersInstancesManager.d.ts +15 -0
  52. package/types/EmittersInteractor.d.ts +18 -0
  53. package/types/EmittersPlugin.d.ts +6 -7
  54. package/types/EmittersPluginInstance.d.ts +14 -0
  55. package/types/constants.d.ts +2 -0
  56. package/types/index.d.ts +2 -2
  57. package/types/types.d.ts +15 -9
  58. package/umd/EmitterInstance.js +10 -14
  59. package/umd/EmittersInstancesManager.js +117 -0
  60. package/umd/EmittersInteractor.js +126 -0
  61. package/umd/EmittersPlugin.js +42 -55
  62. package/umd/EmittersPluginInstance.js +56 -0
  63. package/umd/ShapeManager.js +4 -4
  64. package/umd/constants.js +17 -0
  65. package/umd/index.js +8 -4
  66. package/214.min.js +0 -2
  67. package/214.min.js.LICENSE.txt +0 -1
  68. package/921.min.js.LICENSE.txt +0 -1
  69. package/browser/Emitters.js +0 -128
  70. package/cjs/Emitters.js +0 -128
  71. package/esm/Emitters.js +0 -128
  72. package/types/Emitters.d.ts +0 -24
  73. package/umd/Emitters.js +0 -142
@@ -0,0 +1,126 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "@tsparticles/plugin-interactivity", "@tsparticles/engine", "./Options/Classes/Emitter.js", "./constants.js"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EmittersInteractor = void 0;
13
+ const plugin_interactivity_1 = require("@tsparticles/plugin-interactivity");
14
+ const engine_1 = require("@tsparticles/engine");
15
+ const Emitter_js_1 = require("./Options/Classes/Emitter.js");
16
+ const constants_js_1 = require("./constants.js");
17
+ const emittersMode = "emitters";
18
+ class EmittersInteractor extends plugin_interactivity_1.ExternalInteractorBase {
19
+ constructor(instancesManager, container) {
20
+ super(container);
21
+ this._instancesManager = instancesManager;
22
+ this.handleClickMode = (mode, interactivityData) => {
23
+ const container = this.container, options = container.actualOptions, modeEmitters = options.interactivity.modes.emitters;
24
+ if (!modeEmitters || mode !== emittersMode) {
25
+ return;
26
+ }
27
+ let emittersModeOptions;
28
+ if ((0, engine_1.isArray)(modeEmitters.value)) {
29
+ const minLength = 0, modeEmittersCount = modeEmitters.value.length;
30
+ if (modeEmittersCount > minLength && modeEmitters.random.enable) {
31
+ emittersModeOptions = [];
32
+ const usedIndexes = new Set();
33
+ for (let i = 0; i < modeEmitters.random.count; i++) {
34
+ const idx = (0, engine_1.arrayRandomIndex)(modeEmitters.value);
35
+ if (usedIndexes.has(idx) && usedIndexes.size < modeEmittersCount) {
36
+ i--;
37
+ continue;
38
+ }
39
+ usedIndexes.add(idx);
40
+ const selectedOptions = (0, engine_1.itemFromArray)(modeEmitters.value, idx);
41
+ if (!selectedOptions) {
42
+ continue;
43
+ }
44
+ emittersModeOptions.push(selectedOptions);
45
+ }
46
+ }
47
+ else {
48
+ emittersModeOptions = modeEmitters.value;
49
+ }
50
+ }
51
+ else {
52
+ emittersModeOptions = modeEmitters.value;
53
+ }
54
+ const emittersOptions = emittersModeOptions, ePosition = interactivityData.mouse.clickPosition;
55
+ void (0, engine_1.executeOnSingleOrMultiple)(emittersOptions, async (emitter) => {
56
+ await this._instancesManager.addEmitter(this.container, emitter, ePosition);
57
+ });
58
+ };
59
+ }
60
+ clear() {
61
+ }
62
+ init() {
63
+ }
64
+ interact(_interactivityData, delta) {
65
+ for (const emitter of this._instancesManager.getArray(this.container)) {
66
+ emitter.update(delta);
67
+ }
68
+ }
69
+ isEnabled(interactivityData, particle) {
70
+ const container = this.container, options = container.actualOptions, mouse = interactivityData.mouse, events = (particle?.interactivity ?? options.interactivity).events;
71
+ if (!mouse.clickPosition || !events.onClick.enable) {
72
+ return false;
73
+ }
74
+ return (0, engine_1.isInArray)(emittersMode, events.onClick.mode);
75
+ }
76
+ loadModeOptions(options, ...sources) {
77
+ options.emitters = {
78
+ random: constants_js_1.defaultRandomOptions,
79
+ value: [],
80
+ };
81
+ for (const source of sources) {
82
+ if (!source?.emitters) {
83
+ continue;
84
+ }
85
+ if ((0, engine_1.isArray)(source.emitters)) {
86
+ for (const emitter of source.emitters) {
87
+ const tmp = new Emitter_js_1.Emitter();
88
+ tmp.load(emitter);
89
+ options.emitters.value.push(tmp);
90
+ }
91
+ }
92
+ else if (Object.hasOwn(source.emitters, "value")) {
93
+ const emitterModeOptions = source.emitters;
94
+ options.emitters.random.enable = emitterModeOptions.random?.enable ?? options.emitters.random.enable;
95
+ options.emitters.random.count = emitterModeOptions.random?.count ?? options.emitters.random.count;
96
+ if ((0, engine_1.isArray)(emitterModeOptions.value)) {
97
+ for (const emitter of emitterModeOptions.value) {
98
+ const tmp = new Emitter_js_1.Emitter();
99
+ tmp.load(emitter);
100
+ options.emitters.value.push(tmp);
101
+ }
102
+ }
103
+ else {
104
+ const tmp = new Emitter_js_1.Emitter();
105
+ tmp.load(emitterModeOptions.value);
106
+ options.emitters.value.push(tmp);
107
+ }
108
+ }
109
+ else {
110
+ const tmp = new Emitter_js_1.Emitter();
111
+ tmp.load(source.emitters);
112
+ options.emitters.value.push(tmp);
113
+ }
114
+ }
115
+ }
116
+ removeEmitter(emitter) {
117
+ const index = this._instancesManager.getArray(this.container).indexOf(emitter), minIndex = 0, deleteCount = 1;
118
+ if (index >= minIndex) {
119
+ this._instancesManager.getArray(this.container).splice(index, deleteCount);
120
+ }
121
+ }
122
+ reset() {
123
+ }
124
+ }
125
+ exports.EmittersInteractor = EmittersInteractor;
126
+ });
@@ -1,28 +1,61 @@
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || (function () {
18
+ var ownKeys = function(o) {
19
+ ownKeys = Object.getOwnPropertyNames || function (o) {
20
+ var ar = [];
21
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
22
+ return ar;
23
+ };
24
+ return ownKeys(o);
25
+ };
26
+ return function (mod) {
27
+ if (mod && mod.__esModule) return mod;
28
+ var result = {};
29
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
30
+ __setModuleDefault(result, mod);
31
+ return result;
32
+ };
33
+ })();
1
34
  (function (factory) {
2
35
  if (typeof module === "object" && typeof module.exports === "object") {
3
36
  var v = factory(require, exports);
4
37
  if (v !== undefined) module.exports = v;
5
38
  }
6
39
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "@tsparticles/engine", "./Options/Classes/Emitter.js", "./Enums/EmitterClickMode.js", "./Emitters.js"], factory);
40
+ define(["require", "exports", "@tsparticles/engine", "./Options/Classes/Emitter.js"], factory);
8
41
  }
9
42
  })(function (require, exports) {
10
43
  "use strict";
44
+ var __syncRequire = typeof module === "object" && typeof module.exports === "object";
11
45
  Object.defineProperty(exports, "__esModule", { value: true });
12
46
  exports.EmittersPlugin = void 0;
13
47
  const engine_1 = require("@tsparticles/engine");
14
48
  const Emitter_js_1 = require("./Options/Classes/Emitter.js");
15
- const EmitterClickMode_js_1 = require("./Enums/EmitterClickMode.js");
16
- const Emitters_js_1 = require("./Emitters.js");
17
49
  class EmittersPlugin {
18
- constructor(engine) {
19
- this._engine = engine;
50
+ constructor(instancesManager) {
51
+ this._instancesManager = instancesManager;
20
52
  this.id = "emitters";
21
53
  }
22
- getPlugin(container) {
23
- return Promise.resolve(new Emitters_js_1.Emitters(this._engine, container));
54
+ async getPlugin(container) {
55
+ const { EmittersPluginInstance } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersPluginInstance.js"))) : new Promise((resolve_1, reject_1) => { require(["./EmittersPluginInstance.js"], resolve_1, reject_1); }).then(__importStar));
56
+ return new EmittersPluginInstance(this._instancesManager, container);
24
57
  }
25
- loadOptions(options, source) {
58
+ loadOptions(_container, options, source) {
26
59
  if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
27
60
  return;
28
61
  }
@@ -33,59 +66,13 @@
33
66
  return tmp;
34
67
  });
35
68
  }
36
- const interactivityEmitters = source?.interactivity?.modes?.emitters;
37
- if (interactivityEmitters) {
38
- if ((0, engine_1.isArray)(interactivityEmitters)) {
39
- options.interactivity.modes.emitters = {
40
- random: {
41
- count: 1,
42
- enable: true,
43
- },
44
- value: interactivityEmitters.map(s => {
45
- const tmp = new Emitter_js_1.Emitter();
46
- tmp.load(s);
47
- return tmp;
48
- }),
49
- };
50
- }
51
- else {
52
- const emitterMode = interactivityEmitters;
53
- if ((0, engine_1.isArray)(emitterMode.value)) {
54
- options.interactivity.modes.emitters = {
55
- random: {
56
- count: emitterMode.random.count,
57
- enable: emitterMode.random.enable,
58
- },
59
- value: emitterMode.value.map(s => {
60
- const tmp = new Emitter_js_1.Emitter();
61
- tmp.load(s);
62
- return tmp;
63
- }),
64
- };
65
- }
66
- else {
67
- const tmp = new Emitter_js_1.Emitter();
68
- tmp.load(emitterMode.value);
69
- options.interactivity.modes.emitters = {
70
- random: {
71
- count: emitterMode.random.count,
72
- enable: emitterMode.random.enable,
73
- },
74
- value: tmp,
75
- };
76
- }
77
- }
78
- }
79
69
  }
80
70
  needsPlugin(options) {
81
71
  if (!options) {
82
72
  return false;
83
73
  }
84
74
  const emitters = options.emitters;
85
- return (((0, engine_1.isArray)(emitters) && !!emitters.length) ||
86
- emitters !== undefined ||
87
- (!!options.interactivity?.events?.onClick?.mode &&
88
- (0, engine_1.isInArray)(EmitterClickMode_js_1.EmitterClickMode.emitter, options.interactivity.events.onClick.mode)));
75
+ return ((0, engine_1.isArray)(emitters) && !!emitters.length) || emitters !== undefined;
89
76
  }
90
77
  }
91
78
  exports.EmittersPlugin = EmittersPlugin;
@@ -0,0 +1,56 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "@tsparticles/engine"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EmittersPluginInstance = void 0;
13
+ const engine_1 = require("@tsparticles/engine");
14
+ class EmittersPluginInstance {
15
+ constructor(instancesManager, container) {
16
+ this.container = container;
17
+ this._instancesManager = instancesManager;
18
+ this._instancesManager.initContainer(container);
19
+ }
20
+ async init() {
21
+ const emittersOptions = this.container.actualOptions.emitters;
22
+ if ((0, engine_1.isArray)(emittersOptions)) {
23
+ for (const emitterOptions of emittersOptions) {
24
+ await this._instancesManager.addEmitter(this.container, emitterOptions);
25
+ }
26
+ }
27
+ else {
28
+ await this._instancesManager.addEmitter(this.container, emittersOptions);
29
+ }
30
+ }
31
+ pause() {
32
+ for (const emitter of this._instancesManager.getArray(this.container)) {
33
+ emitter.pause();
34
+ }
35
+ }
36
+ play() {
37
+ for (const emitter of this._instancesManager.getArray(this.container)) {
38
+ emitter.play();
39
+ }
40
+ }
41
+ resize() {
42
+ for (const emitter of this._instancesManager.getArray(this.container)) {
43
+ emitter.resize();
44
+ }
45
+ }
46
+ stop() {
47
+ this._instancesManager.clear(this.container);
48
+ }
49
+ update(delta) {
50
+ this._instancesManager.getArray(this.container).forEach(emitter => {
51
+ emitter.update(delta);
52
+ });
53
+ }
54
+ }
55
+ exports.EmittersPluginInstance = EmittersPluginInstance;
56
+ });
@@ -10,18 +10,18 @@
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ShapeManager = void 0;
13
- const shapeGeneratorss = new Map();
13
+ const shapeGenerators = new Map();
14
14
  class ShapeManager {
15
15
  addShapeGenerator(name, generator) {
16
16
  if (!this.getShapeGenerator(name)) {
17
- shapeGeneratorss.set(name, generator);
17
+ shapeGenerators.set(name, generator);
18
18
  }
19
19
  }
20
20
  getShapeGenerator(name) {
21
- return shapeGeneratorss.get(name);
21
+ return shapeGenerators.get(name);
22
22
  }
23
23
  getSupportedShapeGenerators() {
24
- return shapeGeneratorss.keys();
24
+ return shapeGenerators.keys();
25
25
  }
26
26
  }
27
27
  exports.ShapeManager = ShapeManager;
@@ -0,0 +1,17 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.defaultRandomOptions = void 0;
13
+ exports.defaultRandomOptions = {
14
+ count: 1,
15
+ enable: true,
16
+ };
17
+ });
package/umd/index.js CHANGED
@@ -48,15 +48,19 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
48
48
  Object.defineProperty(exports, "__esModule", { value: true });
49
49
  exports.loadEmittersPlugin = loadEmittersPlugin;
50
50
  function loadEmittersPlugin(engine) {
51
- engine.checkVersion("4.0.0-alpha.2");
51
+ engine.checkVersion("4.0.0-alpha.4");
52
52
  engine.register(async (e) => {
53
- const { ShapeManager } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ShapeManager.js"))) : new Promise((resolve_1, reject_1) => { require(["./ShapeManager.js"], resolve_1, reject_1); }).then(__importStar)), { EmittersPlugin } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersPlugin.js"))) : new Promise((resolve_2, reject_2) => { require(["./EmittersPlugin.js"], resolve_2, reject_2); }).then(__importStar));
53
+ const { loadInteractivityPlugin } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("@tsparticles/plugin-interactivity"))) : new Promise((resolve_1, reject_1) => { require(["@tsparticles/plugin-interactivity"], resolve_1, reject_1); }).then(__importStar)), { ShapeManager } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ShapeManager.js"))) : new Promise((resolve_2, reject_2) => { require(["./ShapeManager.js"], resolve_2, reject_2); }).then(__importStar)), { EmittersInstancesManager } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersInstancesManager.js"))) : new Promise((resolve_3, reject_3) => { require(["./EmittersInstancesManager.js"], resolve_3, reject_3); }).then(__importStar)), { EmittersPlugin } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersPlugin.js"))) : new Promise((resolve_4, reject_4) => { require(["./EmittersPlugin.js"], resolve_4, reject_4); }).then(__importStar)), instancesManager = new EmittersInstancesManager(e);
54
+ loadInteractivityPlugin(e);
54
55
  e.emitterShapeManager ??= new ShapeManager();
55
56
  e.addEmitterShapeGenerator ??= (name, generator) => {
56
57
  e.emitterShapeManager?.addShapeGenerator(name, generator);
57
58
  };
58
- const plugin = new EmittersPlugin(e);
59
- e.addPlugin(plugin);
59
+ e.addPlugin(new EmittersPlugin(instancesManager));
60
+ e.addInteractor?.("externalEmitters", async (container) => {
61
+ const { EmittersInteractor } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersInteractor.js"))) : new Promise((resolve_5, reject_5) => { require(["./EmittersInteractor.js"], resolve_5, reject_5); }).then(__importStar));
62
+ return new EmittersInteractor(instancesManager, container);
63
+ });
60
64
  });
61
65
  }
62
66
  __exportStar(require("./EmitterShapeBase.js"), exports);
package/214.min.js DELETED
@@ -1,2 +0,0 @@
1
- /*! For license information please see 214.min.js.LICENSE.txt */
2
- (this.webpackChunk_tsparticles_plugin_emitters=this.webpackChunk_tsparticles_plugin_emitters||[]).push([[214],{214(t,i,e){e.d(i,{EmittersPlugin:()=>m});var s=e(303);class o{constructor(){this.wait=!1}load(t){(0,s.isNull)(t)||(void 0!==t.count&&(this.count=t.count),void 0!==t.delay&&(this.delay=(0,s.setRangeValue)(t.delay)),void 0!==t.duration&&(this.duration=(0,s.setRangeValue)(t.duration)),void 0!==t.wait&&(this.wait=t.wait))}}class n{constructor(){this.quantity=1,this.delay=.1}load(t){(0,s.isNull)(t)||(void 0!==t.quantity&&(this.quantity=(0,s.setRangeValue)(t.quantity)),void 0!==t.delay&&(this.delay=(0,s.setRangeValue)(t.delay)))}}class a{constructor(){this.color=!1,this.opacity=!1}load(t){(0,s.isNull)(t)||(void 0!==t.color&&(this.color=t.color),void 0!==t.opacity&&(this.opacity=t.opacity))}}class r{constructor(){this.options={},this.replace=new a,this.type="square"}load(t){(0,s.isNull)(t)||(void 0!==t.options&&(this.options=(0,s.deepExtend)({},t.options??{})),this.replace.load(t.replace),void 0!==t.type&&(this.type=t.type))}}class h{constructor(){this.mode=s.PixelMode.percent,this.height=0,this.width=0}load(t){(0,s.isNull)(t)||(void 0!==t.mode&&(this.mode=t.mode),void 0!==t.height&&(this.height=t.height),void 0!==t.width&&(this.width=t.width))}}class l{constructor(){this.autoPlay=!0,this.fill=!0,this.life=new o,this.rate=new n,this.shape=new r,this.startCount=0}load(t){(0,s.isNull)(t)||(void 0!==t.autoPlay&&(this.autoPlay=t.autoPlay),void 0!==t.size&&(this.size??=new h,this.size.load(t.size)),void 0!==t.direction&&(this.direction=t.direction),this.domId=t.domId,void 0!==t.fill&&(this.fill=t.fill),this.life.load(t.life),this.name=t.name,this.particles=(0,s.executeOnSingleOrMultiple)(t.particles,(t=>(0,s.deepExtend)({},t))),this.rate.load(t.rate),this.shape.load(t.shape),void 0!==t.position&&(this.position={},void 0!==t.position.x&&(this.position.x=(0,s.setRangeValue)(t.position.x)),void 0!==t.position.y&&(this.position.y=(0,s.setRangeValue)(t.position.y))),void 0!==t.spawnColor&&(this.spawnColor??=new s.AnimatableColor,this.spawnColor.load(t.spawnColor)),void 0!==t.startCount&&(this.startCount=t.startCount))}}var c=e(271);function d(t,i){t.color?t.color.value=i:t.color={value:i}}class u{constructor(t,i,e,o,n){this.emitters=i,this.container=e,this._destroy=()=>{this._mutationObserver?.disconnect(),this._mutationObserver=void 0,this._resizeObserver?.disconnect(),this._resizeObserver=void 0,this.emitters.removeEmitter(this),this._engine.dispatchEvent("emitterDestroyed",{container:this.container,data:{emitter:this}})},this._prepareToDie=()=>{if(this._paused)return;const t=void 0!==this.options.life.duration?(0,s.getRangeValue)(this.options.life.duration):void 0;(this._lifeCount>0||this._immortal)&&void 0!==t&&t>0&&(this._duration=t*s.millisecondsToSeconds)},this._setColorAnimation=(t,i,e,o=1)=>{const n=this.container;if(!t.enable)return i;const a=(0,s.randomInRangeValue)(t.offset),r=(0,s.getRangeValue)(this.options.rate.delay),h=n.retina.reduceFactor?r*s.millisecondsToSeconds/n.retina.reduceFactor:1/0;return(i+(0,s.getRangeValue)(t.speed)*n.fpsLimit/h+a*o)%e},this._engine=t,this._currentDuration=0,this._currentEmitDelay=0,this._currentSpawnDelay=0,this._initialPosition=n,o instanceof l?this.options=o:(this.options=new l,this.options.load(o)),this._spawnDelay=e.retina.reduceFactor?(0,s.getRangeValue)(this.options.life.delay??0)*s.millisecondsToSeconds/e.retina.reduceFactor:1/0,this.position=this._initialPosition??this._calcPosition(),this.name=this.options.name,this.fill=this.options.fill,this._firstSpawn=!this.options.life.wait,this._startParticlesAdded=!1;const a=(0,s.deepExtend)({},this.options.particles);if(a.move??={},a.move.direction??=this.options.direction,this.options.spawnColor&&(this.spawnColor=(0,s.rangeColorToHsl)(this._engine,this.options.spawnColor)),this._paused=!this.options.autoPlay,this._particlesOptions=a,this._size=this._calcSize(),this.size=(0,s.getSize)(this._size,this.container.canvas.size),this._lifeCount=this.options.life.count??-1,this._immortal=this._lifeCount<=0,this.options.domId){const t=(0,s.safeDocument)().getElementById(this.options.domId);t&&(this._mutationObserver=new MutationObserver((()=>{this.resize()})),this._resizeObserver=new ResizeObserver((()=>{this.resize()})),this._mutationObserver.observe(t,{attributes:!0,attributeFilter:["style","width","height"]}),this._resizeObserver.observe(t))}const r=this.options.shape,h=this._engine.emitterShapeManager?.getShapeGenerator(r.type);h&&(this._shape=h.generate(this.position,this.size,this.fill,r.options)),this._engine.dispatchEvent("emitterCreated",{container:e,data:{emitter:this}}),this.play()}externalPause(){this._paused=!0,this.pause()}externalPlay(){this._paused=!1,this.play()}async init(){await(this._shape?.init())}pause(){this._paused||delete this._emitDelay}play(){if(this._paused)return;if(!(this._lifeCount>0||this._immortal)&&this.options.life.count||!(this._firstSpawn||this._currentSpawnDelay>=(this._spawnDelay??0)))return;const t=this.container;if(void 0===this._emitDelay){const i=(0,s.getRangeValue)(this.options.rate.delay);this._emitDelay=t.retina.reduceFactor?i*s.millisecondsToSeconds/t.retina.reduceFactor:1/0}(this._lifeCount>0||this._immortal)&&this._prepareToDie()}resize(){const t=this._initialPosition,i=this.container;this.position=t&&(0,s.isPointInside)(t,i.canvas.size,s.Vector.origin)?t:this._calcPosition(),this._size=this._calcSize(),this.size=(0,s.getSize)(this._size,i.canvas.size),this._shape?.resize(this.position,this.size)}update(t){if(this._paused)return;const i=this.container;this._firstSpawn&&(this._firstSpawn=!1,this._currentSpawnDelay=this._spawnDelay??0,this._currentEmitDelay=this._emitDelay??0),this._startParticlesAdded||(this._startParticlesAdded=!0,this._emitParticles(this.options.startCount)),void 0!==this._duration&&(this._currentDuration+=t.value,this._currentDuration>=this._duration&&(this.pause(),void 0!==this._spawnDelay&&delete this._spawnDelay,this._immortal||this._lifeCount--,this._lifeCount>0||this._immortal?(this.position=this._calcPosition(),this._shape?.resize(this.position,this.size),this._spawnDelay=i.retina.reduceFactor?(0,s.getRangeValue)(this.options.life.delay??0)*s.millisecondsToSeconds/i.retina.reduceFactor:1/0):this._destroy(),this._currentDuration-=this._duration,delete this._duration)),void 0!==this._spawnDelay&&(this._currentSpawnDelay+=t.value,this._currentSpawnDelay>=this._spawnDelay&&(this._engine.dispatchEvent("emitterPlay",{container:this.container}),this.play(),this._currentSpawnDelay-=this._currentSpawnDelay,delete this._spawnDelay)),void 0!==this._emitDelay&&(this._currentEmitDelay+=t.value,this._currentEmitDelay>=this._emitDelay&&(this._emit(),this._currentEmitDelay-=this._emitDelay))}_calcPosition(){const t=this.container;if(this.options.domId){const i=(0,s.safeDocument)().getElementById(this.options.domId);if(i){const e=i.getBoundingClientRect(),o=t.retina.pixelRatio;return{x:(e.x+e.width*s.half)*o,y:(e.y+e.height*s.half)*o}}}return(0,s.calcPositionOrRandomFromSizeRanged)({size:t.canvas.size,position:this.options.position})}_calcSize(){const t=this.container;if(this.options.domId){const i=(0,s.safeDocument)().getElementById(this.options.domId);if(i){const e=i.getBoundingClientRect();return{width:e.width*t.retina.pixelRatio,height:e.height*t.retina.pixelRatio,mode:s.PixelMode.precise}}}return this.options.size??(()=>{const t=new h;return t.load({height:0,mode:s.PixelMode.percent,width:0}),t})()}_emit(){if(this._paused)return;const t=(0,s.getRangeValue)(this.options.rate.quantity);this._emitParticles(t)}_emitParticles(t){const i=(0,s.itemFromSingleOrMultiple)(this._particlesOptions),e=this.container.retina.reduceFactor;for(let o=0;o<t*e;o++){const t=(0,s.deepExtend)({},i);if(this.spawnColor){const i=this.options.spawnColor?.animation;if(i){const t={h:s.hMax,s:s.sMax,l:s.lMax},e=3.6;this.spawnColor.h=this._setColorAnimation(i.h,this.spawnColor.h,t.h,e),this.spawnColor.s=this._setColorAnimation(i.s,this.spawnColor.s,t.s),this.spawnColor.l=this._setColorAnimation(i.l,this.spawnColor.l,t.l)}d(t,this.spawnColor)}const e=this.options.shape;let o=this.position;if(this._shape){const i=this._shape.randomPosition();if(i){o=i.position;const s=e.replace;s.color&&i.color&&d(t,i.color),s.opacity&&(t.opacity?t.opacity.value=i.opacity:t.opacity={value:i.opacity})}else o=null}o&&this.container.particles.addParticle(o,t)}}}class p{constructor(t,i){this.container=i,this._engine=t,this.array=[],this.emitters=[],this.interactivityEmitters={random:{count:1,enable:!1},value:[]};i.getEmitter=t=>void 0===t||(0,s.isNumber)(t)?this.array[t??0]:this.array.find((i=>i.name===t)),i.addEmitter=async(t,i)=>this.addEmitter(t,i),i.removeEmitter=t=>{const e=i.getEmitter(t);e&&this.removeEmitter(e)},i.playEmitter=t=>{const e=i.getEmitter(t);e&&e.externalPlay()},i.pauseEmitter=t=>{const e=i.getEmitter(t);e&&e.externalPause()}}async addEmitter(t,i){const e=new l;e.load(t);const s=new u(this._engine,this,this.container,e,i);return await s.init(),this.array.push(s),s}handleClickMode(t){const i=this.interactivityEmitters;if(t!==c.c.emitter)return;let e;if((0,s.isArray)(i.value)){const t=0;if(i.value.length>t&&i.random.enable){e=[];const t=[];for(let o=0;o<i.random.count;o++){const n=(0,s.arrayRandomIndex)(i.value);if(t.includes(n)&&t.length<i.value.length){o--;continue}t.push(n);const a=(0,s.itemFromArray)(i.value,n);a&&e.push(a)}}else e=i.value}else e=i.value;const o=e,n=this.container.interactivity.mouse.clickPosition;(0,s.executeOnSingleOrMultiple)(o,(async t=>{await this.addEmitter(t,n)}))}async init(){if(this.emitters=this.container.actualOptions.emitters,this.interactivityEmitters=this.container.actualOptions.interactivity.modes.emitters,(0,s.isArray)(this.emitters))for(const t of this.emitters)await this.addEmitter(t);else await this.addEmitter(this.emitters)}pause(){for(const t of this.array)t.pause()}play(){for(const t of this.array)t.play()}removeEmitter(t){const i=this.array.indexOf(t);i>=0&&this.array.splice(i,1)}resize(){for(const t of this.array)t.resize()}stop(){this.array=[]}update(t){for(const i of this.array)i.update(t)}}class m{constructor(t){this._engine=t,this.id="emitters"}getPlugin(t){return Promise.resolve(new p(this._engine,t))}loadOptions(t,i){if(!this.needsPlugin(t)&&!this.needsPlugin(i))return;i?.emitters&&(t.emitters=(0,s.executeOnSingleOrMultiple)(i.emitters,(t=>{const i=new l;return i.load(t),i})));const e=i?.interactivity?.modes?.emitters;if(e)if((0,s.isArray)(e))t.interactivity.modes.emitters={random:{count:1,enable:!0},value:e.map((t=>{const i=new l;return i.load(t),i}))};else{const i=e;if((0,s.isArray)(i.value))t.interactivity.modes.emitters={random:{count:i.random.count,enable:i.random.enable},value:i.value.map((t=>{const i=new l;return i.load(t),i}))};else{const e=new l;e.load(i.value),t.interactivity.modes.emitters={random:{count:i.random.count,enable:i.random.enable},value:e}}}}needsPlugin(t){if(!t)return!1;const i=t.emitters;return(0,s.isArray)(i)&&!!i.length||void 0!==i||!!t.interactivity?.events?.onClick?.mode&&(0,s.isInArray)(c.c.emitter,t.interactivity.events.onClick.mode)}}}}]);
@@ -1 +0,0 @@
1
- /*! tsParticles Emitters Plugin v4.0.0-alpha.2 by Matteo Bruni */
@@ -1 +0,0 @@
1
- /*! tsParticles Emitters Plugin v4.0.0-alpha.2 by Matteo Bruni */
@@ -1,128 +0,0 @@
1
- import { arrayRandomIndex, executeOnSingleOrMultiple, isArray, isNumber, itemFromArray, } from "@tsparticles/engine";
2
- import { Emitter } from "./Options/Classes/Emitter.js";
3
- import { EmitterClickMode } from "./Enums/EmitterClickMode.js";
4
- import { EmitterInstance } from "./EmitterInstance.js";
5
- export class Emitters {
6
- constructor(engine, container) {
7
- this.container = container;
8
- this._engine = engine;
9
- this.array = [];
10
- this.emitters = [];
11
- this.interactivityEmitters = {
12
- random: {
13
- count: 1,
14
- enable: false,
15
- },
16
- value: [],
17
- };
18
- const defaultIndex = 0;
19
- container.getEmitter = (idxOrName) => idxOrName === undefined || isNumber(idxOrName)
20
- ? this.array[idxOrName ?? defaultIndex]
21
- : this.array.find(t => t.name === idxOrName);
22
- container.addEmitter = async (options, position) => this.addEmitter(options, position);
23
- container.removeEmitter = (idxOrName) => {
24
- const emitter = container.getEmitter(idxOrName);
25
- if (emitter) {
26
- this.removeEmitter(emitter);
27
- }
28
- };
29
- container.playEmitter = (idxOrName) => {
30
- const emitter = container.getEmitter(idxOrName);
31
- if (emitter) {
32
- emitter.externalPlay();
33
- }
34
- };
35
- container.pauseEmitter = (idxOrName) => {
36
- const emitter = container.getEmitter(idxOrName);
37
- if (emitter) {
38
- emitter.externalPause();
39
- }
40
- };
41
- }
42
- async addEmitter(options, position) {
43
- const emitterOptions = new Emitter();
44
- emitterOptions.load(options);
45
- const emitter = new EmitterInstance(this._engine, this, this.container, emitterOptions, position);
46
- await emitter.init();
47
- this.array.push(emitter);
48
- return emitter;
49
- }
50
- handleClickMode(mode) {
51
- const modeEmitters = this.interactivityEmitters;
52
- if (mode !== EmitterClickMode.emitter) {
53
- return;
54
- }
55
- let emittersModeOptions;
56
- if (isArray(modeEmitters.value)) {
57
- const minLength = 0;
58
- if (modeEmitters.value.length > minLength && modeEmitters.random.enable) {
59
- emittersModeOptions = [];
60
- const usedIndexes = [];
61
- for (let i = 0; i < modeEmitters.random.count; i++) {
62
- const idx = arrayRandomIndex(modeEmitters.value);
63
- if (usedIndexes.includes(idx) && usedIndexes.length < modeEmitters.value.length) {
64
- i--;
65
- continue;
66
- }
67
- usedIndexes.push(idx);
68
- const selectedOptions = itemFromArray(modeEmitters.value, idx);
69
- if (!selectedOptions) {
70
- continue;
71
- }
72
- emittersModeOptions.push(selectedOptions);
73
- }
74
- }
75
- else {
76
- emittersModeOptions = modeEmitters.value;
77
- }
78
- }
79
- else {
80
- emittersModeOptions = modeEmitters.value;
81
- }
82
- const emittersOptions = emittersModeOptions, ePosition = this.container.interactivity.mouse.clickPosition;
83
- void executeOnSingleOrMultiple(emittersOptions, async (emitter) => {
84
- await this.addEmitter(emitter, ePosition);
85
- });
86
- }
87
- async init() {
88
- this.emitters = this.container.actualOptions.emitters;
89
- this.interactivityEmitters = this.container.actualOptions.interactivity.modes.emitters;
90
- if (isArray(this.emitters)) {
91
- for (const emitterOptions of this.emitters) {
92
- await this.addEmitter(emitterOptions);
93
- }
94
- }
95
- else {
96
- await this.addEmitter(this.emitters);
97
- }
98
- }
99
- pause() {
100
- for (const emitter of this.array) {
101
- emitter.pause();
102
- }
103
- }
104
- play() {
105
- for (const emitter of this.array) {
106
- emitter.play();
107
- }
108
- }
109
- removeEmitter(emitter) {
110
- const index = this.array.indexOf(emitter), minIndex = 0, deleteCount = 1;
111
- if (index >= minIndex) {
112
- this.array.splice(index, deleteCount);
113
- }
114
- }
115
- resize() {
116
- for (const emitter of this.array) {
117
- emitter.resize();
118
- }
119
- }
120
- stop() {
121
- this.array = [];
122
- }
123
- update(delta) {
124
- for (const emitter of this.array) {
125
- emitter.update(delta);
126
- }
127
- }
128
- }