@tsparticles/engine 4.0.0-alpha.8 → 4.0.0-beta.1

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 (307) hide show
  1. package/155.min.js +1 -0
  2. package/README.md +41 -28
  3. package/browser/Core/CanvasManager.js +303 -0
  4. package/browser/Core/Container.js +134 -101
  5. package/browser/Core/Engine.js +29 -162
  6. package/browser/Core/Particle.js +197 -183
  7. package/browser/Core/ParticlesManager.js +363 -0
  8. package/browser/Core/RenderManager.js +303 -0
  9. package/browser/Core/Retina.js +6 -6
  10. package/browser/Core/Utils/Constants.js +2 -2
  11. package/browser/Core/Utils/EventListeners.js +67 -63
  12. package/browser/Core/Utils/PluginManager.js +145 -0
  13. package/browser/Core/Utils/Ranges.js +29 -10
  14. package/browser/Core/Utils/SpatialHashGrid.js +102 -0
  15. package/browser/Core/Utils/Vectors.js +17 -18
  16. package/browser/Options/Classes/AnimatableColor.js +1 -0
  17. package/browser/Options/Classes/AnimationOptions.js +8 -0
  18. package/browser/Options/Classes/Background/Background.js +6 -0
  19. package/browser/Options/Classes/ColorAnimation.js +12 -1
  20. package/browser/Options/Classes/FullScreen/FullScreen.js +2 -0
  21. package/browser/Options/Classes/HslAnimation.js +4 -5
  22. package/browser/Options/Classes/Options.js +67 -8
  23. package/browser/Options/Classes/OptionsColor.js +1 -0
  24. package/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  25. package/browser/Options/Classes/Particles/Effect/Effect.js +3 -4
  26. package/browser/Options/Classes/Particles/Fill.js +28 -0
  27. package/browser/Options/Classes/Particles/Move/Move.js +17 -3
  28. package/browser/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  29. package/browser/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  30. package/browser/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  31. package/browser/Options/Classes/Particles/Move/OutModes.js +5 -0
  32. package/browser/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  33. package/browser/Options/Classes/Particles/Move/Spin.js +3 -0
  34. package/browser/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  35. package/browser/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  36. package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  37. package/browser/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  38. package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  39. package/browser/Options/Classes/Particles/ParticlesOptions.js +29 -9
  40. package/browser/Options/Classes/Particles/Shape/Shape.js +3 -4
  41. package/browser/Options/Classes/Particles/Size/Size.js +1 -0
  42. package/browser/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  43. package/browser/Options/Classes/Particles/Stroke.js +3 -0
  44. package/browser/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  45. package/browser/Options/Classes/ResizeEvent.js +2 -0
  46. package/browser/Options/Classes/ValueWithRandom.js +3 -4
  47. package/browser/Utils/CanvasUtils.js +44 -51
  48. package/browser/Utils/ColorUtils.js +51 -40
  49. package/browser/Utils/EventDispatcher.js +1 -0
  50. package/browser/Utils/LogUtils.js +1 -0
  51. package/browser/Utils/MathUtils.js +12 -7
  52. package/browser/Utils/OptionsUtils.js +2 -2
  53. package/browser/Utils/Utils.js +109 -31
  54. package/browser/exports.js +1 -2
  55. package/cjs/Core/CanvasManager.js +303 -0
  56. package/cjs/Core/Container.js +134 -101
  57. package/cjs/Core/Engine.js +29 -162
  58. package/cjs/Core/Particle.js +197 -183
  59. package/cjs/Core/ParticlesManager.js +363 -0
  60. package/cjs/Core/RenderManager.js +303 -0
  61. package/cjs/Core/Retina.js +6 -6
  62. package/cjs/Core/Utils/Constants.js +2 -2
  63. package/cjs/Core/Utils/EventListeners.js +67 -63
  64. package/cjs/Core/Utils/PluginManager.js +145 -0
  65. package/cjs/Core/Utils/Ranges.js +29 -10
  66. package/cjs/Core/Utils/SpatialHashGrid.js +102 -0
  67. package/cjs/Core/Utils/Vectors.js +17 -18
  68. package/cjs/Options/Classes/AnimatableColor.js +1 -0
  69. package/cjs/Options/Classes/AnimationOptions.js +8 -0
  70. package/cjs/Options/Classes/Background/Background.js +6 -0
  71. package/cjs/Options/Classes/ColorAnimation.js +12 -1
  72. package/cjs/Options/Classes/FullScreen/FullScreen.js +2 -0
  73. package/cjs/Options/Classes/HslAnimation.js +4 -5
  74. package/cjs/Options/Classes/Options.js +67 -8
  75. package/cjs/Options/Classes/OptionsColor.js +1 -0
  76. package/cjs/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  77. package/cjs/Options/Classes/Particles/Effect/Effect.js +3 -4
  78. package/cjs/Options/Classes/Particles/Fill.js +28 -0
  79. package/cjs/Options/Classes/Particles/Move/Move.js +17 -3
  80. package/cjs/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  81. package/cjs/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  82. package/cjs/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  83. package/cjs/Options/Classes/Particles/Move/OutModes.js +5 -0
  84. package/cjs/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  85. package/cjs/Options/Classes/Particles/Move/Spin.js +3 -0
  86. package/cjs/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  87. package/cjs/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  88. package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  89. package/cjs/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  90. package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  91. package/cjs/Options/Classes/Particles/ParticlesOptions.js +29 -9
  92. package/cjs/Options/Classes/Particles/Shape/Shape.js +3 -4
  93. package/cjs/Options/Classes/Particles/Size/Size.js +1 -0
  94. package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  95. package/cjs/Options/Classes/Particles/Stroke.js +3 -0
  96. package/cjs/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  97. package/cjs/Options/Classes/ResizeEvent.js +2 -0
  98. package/cjs/Options/Classes/ValueWithRandom.js +3 -4
  99. package/cjs/Utils/CanvasUtils.js +44 -51
  100. package/cjs/Utils/ColorUtils.js +51 -40
  101. package/cjs/Utils/EventDispatcher.js +1 -0
  102. package/cjs/Utils/LogUtils.js +1 -0
  103. package/cjs/Utils/MathUtils.js +12 -7
  104. package/cjs/Utils/OptionsUtils.js +2 -2
  105. package/cjs/Utils/Utils.js +109 -31
  106. package/cjs/exports.js +1 -2
  107. package/dist_browser_Core_Container_js.js +30 -20
  108. package/esm/Core/CanvasManager.js +303 -0
  109. package/esm/Core/Container.js +134 -101
  110. package/esm/Core/Engine.js +29 -162
  111. package/esm/Core/Particle.js +197 -183
  112. package/esm/Core/ParticlesManager.js +363 -0
  113. package/esm/Core/RenderManager.js +303 -0
  114. package/esm/Core/Retina.js +6 -6
  115. package/esm/Core/Utils/Constants.js +2 -2
  116. package/esm/Core/Utils/EventListeners.js +67 -63
  117. package/esm/Core/Utils/PluginManager.js +145 -0
  118. package/esm/Core/Utils/Ranges.js +29 -10
  119. package/esm/Core/Utils/SpatialHashGrid.js +102 -0
  120. package/esm/Core/Utils/Vectors.js +17 -18
  121. package/esm/Options/Classes/AnimatableColor.js +1 -0
  122. package/esm/Options/Classes/AnimationOptions.js +8 -0
  123. package/esm/Options/Classes/Background/Background.js +6 -0
  124. package/esm/Options/Classes/ColorAnimation.js +12 -1
  125. package/esm/Options/Classes/FullScreen/FullScreen.js +2 -0
  126. package/esm/Options/Classes/HslAnimation.js +4 -5
  127. package/esm/Options/Classes/Options.js +67 -8
  128. package/esm/Options/Classes/OptionsColor.js +1 -0
  129. package/esm/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  130. package/esm/Options/Classes/Particles/Effect/Effect.js +3 -4
  131. package/esm/Options/Classes/Particles/Fill.js +28 -0
  132. package/esm/Options/Classes/Particles/Move/Move.js +17 -3
  133. package/esm/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  134. package/esm/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  135. package/esm/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  136. package/esm/Options/Classes/Particles/Move/OutModes.js +5 -0
  137. package/esm/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  138. package/esm/Options/Classes/Particles/Move/Spin.js +3 -0
  139. package/esm/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  140. package/esm/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  141. package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  142. package/esm/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  143. package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  144. package/esm/Options/Classes/Particles/ParticlesOptions.js +29 -9
  145. package/esm/Options/Classes/Particles/Shape/Shape.js +3 -4
  146. package/esm/Options/Classes/Particles/Size/Size.js +1 -0
  147. package/esm/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  148. package/esm/Options/Classes/Particles/Stroke.js +3 -0
  149. package/esm/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  150. package/esm/Options/Classes/ResizeEvent.js +2 -0
  151. package/esm/Options/Classes/ValueWithRandom.js +3 -4
  152. package/esm/Utils/CanvasUtils.js +44 -51
  153. package/esm/Utils/ColorUtils.js +51 -40
  154. package/esm/Utils/EventDispatcher.js +1 -0
  155. package/esm/Utils/LogUtils.js +1 -0
  156. package/esm/Utils/MathUtils.js +12 -7
  157. package/esm/Utils/OptionsUtils.js +2 -2
  158. package/esm/Utils/Utils.js +109 -31
  159. package/esm/exports.js +1 -2
  160. package/package.json +1 -1
  161. package/report.html +84 -29
  162. package/scripts/install.js +4 -20
  163. package/tsparticles.engine.js +98 -86
  164. package/tsparticles.engine.min.js +2 -2
  165. package/types/Core/CanvasManager.d.ts +39 -0
  166. package/types/Core/Container.d.ts +29 -14
  167. package/types/Core/Engine.d.ts +2 -61
  168. package/types/Core/Interfaces/IColorManager.d.ts +0 -1
  169. package/types/Core/Interfaces/IContainerPlugin.d.ts +10 -8
  170. package/types/Core/Interfaces/IDrawParticleParams.d.ts +2 -1
  171. package/types/Core/Interfaces/IPalette.d.ts +7 -0
  172. package/types/Core/Interfaces/IParticleOpacityData.d.ts +1 -0
  173. package/types/Core/Interfaces/IParticleRetinaProps.d.ts +4 -4
  174. package/types/Core/Interfaces/IParticleUpdater.d.ts +2 -1
  175. package/types/Core/Interfaces/IParticleValueAnimation.d.ts +3 -3
  176. package/types/Core/Interfaces/IShapeDrawData.d.ts +10 -1
  177. package/types/Core/Interfaces/IShapeDrawer.d.ts +0 -1
  178. package/types/Core/Interfaces/IShapeValues.d.ts +0 -1
  179. package/types/Core/Particle.d.ts +7 -11
  180. package/types/Core/{Particles.d.ts → ParticlesManager.d.ts} +15 -14
  181. package/types/Core/RenderManager.d.ts +49 -0
  182. package/types/Core/Retina.d.ts +0 -2
  183. package/types/Core/Utils/Constants.d.ts +2 -2
  184. package/types/Core/Utils/PluginManager.d.ts +62 -0
  185. package/types/Core/Utils/Ranges.d.ts +4 -1
  186. package/types/Core/Utils/SpatialHashGrid.d.ts +25 -0
  187. package/types/Core/Utils/Vectors.d.ts +8 -10
  188. package/types/Options/Classes/ColorAnimation.d.ts +3 -1
  189. package/types/Options/Classes/HslAnimation.d.ts +3 -4
  190. package/types/Options/Classes/Options.d.ts +5 -3
  191. package/types/Options/Classes/Particles/Effect/Effect.d.ts +0 -1
  192. package/types/Options/Classes/Particles/Fill.d.ts +12 -0
  193. package/types/Options/Classes/Particles/Move/Move.d.ts +0 -2
  194. package/types/Options/Classes/Particles/ParticlesOptions.d.ts +5 -5
  195. package/types/Options/Classes/Particles/Shape/Shape.d.ts +0 -1
  196. package/types/Options/Classes/ValueWithRandom.d.ts +0 -1
  197. package/types/Options/Interfaces/IColorAnimation.d.ts +2 -0
  198. package/types/Options/Interfaces/IOptions.d.ts +1 -0
  199. package/types/Options/Interfaces/Particles/Effect/IEffect.d.ts +0 -1
  200. package/types/Options/Interfaces/Particles/IFill.d.ts +9 -0
  201. package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +2 -2
  202. package/types/Options/Interfaces/Particles/IStroke.d.ts +2 -2
  203. package/types/Options/Interfaces/Particles/Move/IMove.d.ts +0 -2
  204. package/types/Options/Interfaces/Particles/Shape/IShape.d.ts +0 -1
  205. package/types/Types/CanvasContextType.d.ts +1 -0
  206. package/types/Types/EngineInitializers.d.ts +6 -3
  207. package/types/Utils/CanvasUtils.d.ts +13 -16
  208. package/types/Utils/ColorUtils.d.ts +11 -10
  209. package/types/Utils/LogUtils.d.ts +1 -0
  210. package/types/Utils/MathUtils.d.ts +2 -0
  211. package/types/Utils/OptionsUtils.d.ts +2 -2
  212. package/types/Utils/Utils.d.ts +8 -1
  213. package/types/export-types.d.ts +7 -7
  214. package/types/exports.d.ts +1 -2
  215. package/umd/Core/CanvasManager.js +317 -0
  216. package/umd/Core/Container.js +134 -101
  217. package/umd/Core/Engine.js +28 -161
  218. package/umd/Core/Particle.js +198 -184
  219. package/umd/Core/{Particles.js → ParticlesManager.js} +186 -167
  220. package/umd/Core/RenderManager.js +317 -0
  221. package/umd/Core/Retina.js +6 -6
  222. package/umd/Core/Utils/Constants.js +3 -3
  223. package/umd/Core/Utils/EventListeners.js +67 -63
  224. package/umd/Core/Utils/PluginManager.js +159 -0
  225. package/umd/Core/Utils/Ranges.js +28 -9
  226. package/umd/Core/Utils/SpatialHashGrid.js +116 -0
  227. package/umd/Core/Utils/Vectors.js +17 -18
  228. package/umd/Options/Classes/AnimatableColor.js +1 -0
  229. package/umd/Options/Classes/AnimationOptions.js +8 -0
  230. package/umd/Options/Classes/Background/Background.js +6 -0
  231. package/umd/Options/Classes/ColorAnimation.js +12 -1
  232. package/umd/Options/Classes/FullScreen/FullScreen.js +2 -0
  233. package/umd/Options/Classes/HslAnimation.js +5 -6
  234. package/umd/Options/Classes/Options.js +67 -8
  235. package/umd/Options/Classes/OptionsColor.js +1 -0
  236. package/umd/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  237. package/umd/Options/Classes/Particles/Effect/Effect.js +3 -4
  238. package/umd/Options/Classes/Particles/Fill.js +42 -0
  239. package/umd/Options/Classes/Particles/Move/Move.js +18 -4
  240. package/umd/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  241. package/umd/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  242. package/umd/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  243. package/umd/Options/Classes/Particles/Move/OutModes.js +5 -0
  244. package/umd/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  245. package/umd/Options/Classes/Particles/Move/Spin.js +3 -0
  246. package/umd/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  247. package/umd/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  248. package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  249. package/umd/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  250. package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  251. package/umd/Options/Classes/Particles/ParticlesOptions.js +30 -10
  252. package/umd/Options/Classes/Particles/Shape/Shape.js +3 -4
  253. package/umd/Options/Classes/Particles/Size/Size.js +1 -0
  254. package/umd/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  255. package/umd/Options/Classes/Particles/Stroke.js +3 -0
  256. package/umd/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  257. package/umd/Options/Classes/ResizeEvent.js +2 -0
  258. package/umd/Options/Classes/ValueWithRandom.js +3 -4
  259. package/umd/Utils/CanvasUtils.js +44 -53
  260. package/umd/Utils/ColorUtils.js +51 -39
  261. package/umd/Utils/EventDispatcher.js +1 -0
  262. package/umd/Utils/LogUtils.js +1 -0
  263. package/umd/Utils/MathUtils.js +14 -7
  264. package/umd/Utils/OptionsUtils.js +2 -2
  265. package/umd/Utils/Utils.js +111 -32
  266. package/umd/exports.js +2 -3
  267. package/794.min.js +0 -2
  268. package/794.min.js.LICENSE.txt +0 -1
  269. package/browser/Core/Canvas.js +0 -469
  270. package/browser/Core/Particles.js +0 -344
  271. package/browser/Core/Utils/Point.js +0 -6
  272. package/browser/Core/Utils/QuadTree.js +0 -59
  273. package/browser/Options/Classes/Particles/Move/MoveAttract.js +0 -33
  274. package/cjs/Core/Canvas.js +0 -469
  275. package/cjs/Core/Particles.js +0 -344
  276. package/cjs/Core/Utils/Point.js +0 -6
  277. package/cjs/Core/Utils/QuadTree.js +0 -59
  278. package/cjs/Options/Classes/Particles/Move/MoveAttract.js +0 -33
  279. package/esm/Core/Canvas.js +0 -469
  280. package/esm/Core/Particles.js +0 -344
  281. package/esm/Core/Utils/Point.js +0 -6
  282. package/esm/Core/Utils/QuadTree.js +0 -59
  283. package/esm/Options/Classes/Particles/Move/MoveAttract.js +0 -33
  284. package/tsparticles.engine.min.js.LICENSE.txt +0 -1
  285. package/types/Core/Canvas.d.ts +0 -55
  286. package/types/Core/Interfaces/IMovePathGenerator.d.ts +0 -10
  287. package/types/Core/Interfaces/IParticleMover.d.ts +0 -7
  288. package/types/Core/Utils/Point.d.ts +0 -7
  289. package/types/Core/Utils/QuadTree.d.ts +0 -18
  290. package/types/Options/Classes/Particles/Move/MoveAttract.d.ts +0 -12
  291. package/types/Options/Interfaces/Particles/Move/IMoveAttract.d.ts +0 -7
  292. package/umd/Core/Canvas.js +0 -483
  293. package/umd/Core/Utils/Point.js +0 -20
  294. package/umd/Core/Utils/QuadTree.js +0 -73
  295. package/umd/Options/Classes/Particles/Move/MoveAttract.js +0 -47
  296. /package/browser/Core/Interfaces/{IMovePathGenerator.js → IPalette.js} +0 -0
  297. /package/browser/{Core/Interfaces/IParticleMover.js → Options/Interfaces/Particles/IFill.js} +0 -0
  298. /package/browser/{Options/Interfaces/Particles/Move/IMoveAttract.js → Types/CanvasContextType.js} +0 -0
  299. /package/cjs/Core/Interfaces/{IMovePathGenerator.js → IPalette.js} +0 -0
  300. /package/cjs/{Core/Interfaces/IParticleMover.js → Options/Interfaces/Particles/IFill.js} +0 -0
  301. /package/cjs/{Options/Interfaces/Particles/Move/IMoveAttract.js → Types/CanvasContextType.js} +0 -0
  302. /package/esm/Core/Interfaces/{IMovePathGenerator.js → IPalette.js} +0 -0
  303. /package/esm/{Core/Interfaces/IParticleMover.js → Options/Interfaces/Particles/IFill.js} +0 -0
  304. /package/esm/{Options/Interfaces/Particles/Move/IMoveAttract.js → Types/CanvasContextType.js} +0 -0
  305. /package/umd/Core/Interfaces/{IMovePathGenerator.js → IPalette.js} +0 -0
  306. /package/umd/{Core/Interfaces/IParticleMover.js → Options/Interfaces/Particles/IFill.js} +0 -0
  307. /package/umd/{Options/Interfaces/Particles/Move/IMoveAttract.js → Types/CanvasContextType.js} +0 -0
@@ -4,112 +4,41 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "./Utils/Constants.js", "../Enums/Types/EventType.js", "../Enums/Modes/LimitMode.js", "./Particle.js", "./Utils/Point.js", "./Utils/QuadTree.js", "./Utils/Ranges.js", "../Utils/LogUtils.js", "../Utils/OptionsUtils.js"], factory);
7
+ define(["require", "exports", "./Utils/Constants.js", "../Enums/Types/EventType.js", "../Enums/Modes/LimitMode.js", "./Particle.js", "./Utils/SpatialHashGrid.js", "../Utils/LogUtils.js", "../Utils/OptionsUtils.js"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Particles = void 0;
12
+ exports.ParticlesManager = void 0;
13
13
  const Constants_js_1 = require("./Utils/Constants.js");
14
14
  const EventType_js_1 = require("../Enums/Types/EventType.js");
15
15
  const LimitMode_js_1 = require("../Enums/Modes/LimitMode.js");
16
16
  const Particle_js_1 = require("./Particle.js");
17
- const Point_js_1 = require("./Utils/Point.js");
18
- const QuadTree_js_1 = require("./Utils/QuadTree.js");
19
- const Ranges_js_1 = require("./Utils/Ranges.js");
17
+ const SpatialHashGrid_js_1 = require("./Utils/SpatialHashGrid.js");
20
18
  const LogUtils_js_1 = require("../Utils/LogUtils.js");
21
19
  const OptionsUtils_js_1 = require("../Utils/OptionsUtils.js");
22
- const qTreeRectangle = (canvasSize) => {
23
- const { height, width } = canvasSize;
24
- return new Ranges_js_1.Rectangle(Constants_js_1.posOffset * width, Constants_js_1.posOffset * height, Constants_js_1.sizeFactor * width, Constants_js_1.sizeFactor * height);
25
- };
26
- class Particles {
27
- constructor(engine, container) {
28
- this._addToPool = (...particles) => {
29
- this._pool.push(...particles);
30
- };
31
- this._applyDensity = (options, pluginsCount, group, groupOptions) => {
32
- const numberOptions = options.number;
33
- if (!numberOptions.density.enable) {
34
- if (group === undefined) {
35
- this._limit = numberOptions.limit.value;
36
- }
37
- else if (groupOptions?.number.limit.value ?? numberOptions.limit.value) {
38
- this._groupLimits.set(group, groupOptions?.number.limit.value ?? numberOptions.limit.value);
39
- }
40
- return;
41
- }
42
- const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > Constants_js_1.minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + pluginsCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);
43
- if (group === undefined) {
44
- this._limit = numberOptions.limit.value * densityFactor;
45
- }
46
- else {
47
- this._groupLimits.set(group, numberOptions.limit.value * densityFactor);
48
- }
49
- if (particlesCount < particlesNumber) {
50
- this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);
51
- }
52
- else if (particlesCount > particlesNumber) {
53
- this.removeQuantity(particlesCount - particlesNumber, group);
54
- }
55
- };
56
- this._initDensityFactor = densityOptions => {
57
- const container = this._container;
58
- if (!container.canvas.element || !densityOptions.enable) {
59
- return Constants_js_1.defaultDensityFactor;
60
- }
61
- const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;
62
- return (canvas.width * canvas.height) / (densityOptions.height * densityOptions.width * pxRatio ** Constants_js_1.squareExp);
63
- };
64
- this._pushParticle = (position, overrideOptions, group, initializer) => {
65
- try {
66
- const particle = this._pool.pop() ?? new Particle_js_1.Particle(this._engine, this._container);
67
- particle.init(this._nextId, position, overrideOptions, group);
68
- let canAdd = true;
69
- if (initializer) {
70
- canAdd = initializer(particle);
71
- }
72
- if (!canAdd) {
73
- return;
74
- }
75
- this._array.push(particle);
76
- this._zArray.push(particle);
77
- this._nextId++;
78
- this._engine.dispatchEvent(EventType_js_1.EventType.particleAdded, {
79
- container: this._container,
80
- data: {
81
- particle,
82
- },
83
- });
84
- return particle;
85
- }
86
- catch (e) {
87
- (0, LogUtils_js_1.getLogger)().warning(`error adding particle: ${e}`);
88
- }
89
- return undefined;
90
- };
91
- this._removeParticle = (index, group, override) => {
92
- const particle = this._array[index];
93
- if (!particle) {
94
- return false;
95
- }
96
- if (particle.group !== group) {
97
- return false;
98
- }
99
- const zIdx = this._zArray.indexOf(particle);
100
- this._array.splice(index, Constants_js_1.deleteCount);
101
- this._zArray.splice(zIdx, Constants_js_1.deleteCount);
102
- particle.destroy(override);
103
- this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
104
- container: this._container,
105
- data: {
106
- particle,
107
- },
108
- });
109
- this._addToPool(particle);
110
- return true;
111
- };
112
- this._engine = engine;
20
+ class ParticlesManager {
21
+ checkParticlePositionPlugins;
22
+ grid;
23
+ _array;
24
+ _container;
25
+ _groupLimits;
26
+ _limit;
27
+ _maxZIndex;
28
+ _minZIndex;
29
+ _needsSort;
30
+ _nextId;
31
+ _particleResetPlugins;
32
+ _particleUpdatePlugins;
33
+ _pluginManager;
34
+ _pool;
35
+ _postParticleUpdatePlugins;
36
+ _postUpdatePlugins;
37
+ _resizeFactor;
38
+ _updatePlugins;
39
+ _zArray;
40
+ constructor(pluginManager, container) {
41
+ this._pluginManager = pluginManager;
113
42
  this._container = container;
114
43
  this._nextId = 0;
115
44
  this._array = [];
@@ -118,12 +47,15 @@
118
47
  this._limit = 0;
119
48
  this._groupLimits = new Map();
120
49
  this._needsSort = false;
121
- this._lastZIndex = 0;
122
- this._pluginsInitialized = false;
123
- const canvasSize = container.canvas.size;
124
- this.quadTree = new QuadTree_js_1.QuadTree(qTreeRectangle(canvasSize), Constants_js_1.qTreeCapacity);
125
- this.movers = [];
126
- this.updaters = [];
50
+ this._minZIndex = 0;
51
+ this._maxZIndex = 0;
52
+ this.grid = new SpatialHashGrid_js_1.SpatialHashGrid(Constants_js_1.spatialHashGridCellSize);
53
+ this.checkParticlePositionPlugins = [];
54
+ this._particleResetPlugins = [];
55
+ this._particleUpdatePlugins = [];
56
+ this._postUpdatePlugins = [];
57
+ this._postParticleUpdatePlugins = [];
58
+ this._updatePlugins = [];
127
59
  }
128
60
  get count() {
129
61
  return this._array.length;
@@ -144,20 +76,48 @@
144
76
  return;
145
77
  }
146
78
  break;
79
+ default:
80
+ break;
147
81
  }
148
82
  }
149
- return this._pushParticle(position, overrideOptions, group, initializer);
83
+ try {
84
+ const particle = this._pool.pop() ?? new Particle_js_1.Particle(this._pluginManager, this._container);
85
+ particle.init(this._nextId, position, overrideOptions, group);
86
+ let canAdd = true;
87
+ if (initializer) {
88
+ canAdd = initializer(particle);
89
+ }
90
+ if (!canAdd) {
91
+ this._pool.push(particle);
92
+ return;
93
+ }
94
+ this._array.push(particle);
95
+ this._zArray.push(particle);
96
+ this._nextId++;
97
+ this._container.dispatchEvent(EventType_js_1.EventType.particleAdded, {
98
+ particle,
99
+ });
100
+ return particle;
101
+ }
102
+ catch (e) {
103
+ (0, LogUtils_js_1.getLogger)().warning(`error adding particle: ${e}`);
104
+ }
105
+ return undefined;
150
106
  }
151
107
  clear() {
152
108
  this._array = [];
153
109
  this._zArray = [];
154
- this._pluginsInitialized = false;
155
110
  }
156
111
  destroy() {
157
112
  this._array = [];
113
+ this._pool.length = 0;
158
114
  this._zArray = [];
159
- this.movers = [];
160
- this.updaters = [];
115
+ this.checkParticlePositionPlugins = [];
116
+ this._particleResetPlugins = [];
117
+ this._particleUpdatePlugins = [];
118
+ this._postUpdatePlugins = [];
119
+ this._postParticleUpdatePlugins = [];
120
+ this._updatePlugins = [];
161
121
  }
162
122
  drawParticles(delta) {
163
123
  for (const particle of this._zArray) {
@@ -175,14 +135,46 @@
175
135
  }
176
136
  async init() {
177
137
  const container = this._container, options = container.actualOptions;
178
- this._lastZIndex = 0;
138
+ this._minZIndex = 0;
139
+ this._maxZIndex = 0;
179
140
  this._needsSort = false;
141
+ this.checkParticlePositionPlugins = [];
142
+ this._updatePlugins = [];
143
+ this._particleUpdatePlugins = [];
144
+ this._postUpdatePlugins = [];
145
+ this._particleResetPlugins = [];
146
+ this._postParticleUpdatePlugins = [];
147
+ this.grid = new SpatialHashGrid_js_1.SpatialHashGrid(Constants_js_1.spatialHashGridCellSize * container.retina.pixelRatio);
180
148
  for (const plugin of container.plugins) {
181
149
  if (plugin.redrawInit) {
182
150
  await plugin.redrawInit();
183
151
  }
152
+ if (plugin.checkParticlePosition) {
153
+ this.checkParticlePositionPlugins.push(plugin);
154
+ }
155
+ if (plugin.update) {
156
+ this._updatePlugins.push(plugin);
157
+ }
158
+ if (plugin.particleUpdate) {
159
+ this._particleUpdatePlugins.push(plugin);
160
+ }
161
+ if (plugin.postUpdate) {
162
+ this._postUpdatePlugins.push(plugin);
163
+ }
164
+ if (plugin.particleReset) {
165
+ this._particleResetPlugins.push(plugin);
166
+ }
167
+ if (plugin.postParticleUpdate) {
168
+ this._postParticleUpdatePlugins.push(plugin);
169
+ }
170
+ }
171
+ await this._container.initDrawersAndUpdaters();
172
+ for (const drawer of this._container.effectDrawers.values()) {
173
+ await drawer.init?.(container);
174
+ }
175
+ for (const drawer of this._container.shapeDrawers.values()) {
176
+ await drawer.init?.(container);
184
177
  }
185
- await this.initPlugins();
186
178
  let handled = false;
187
179
  for (const plugin of container.plugins) {
188
180
  handled = plugin.particlesInitialization?.() ?? handled;
@@ -206,17 +198,6 @@
206
198
  }
207
199
  }
208
200
  }
209
- async initPlugins() {
210
- if (this._pluginsInitialized) {
211
- return;
212
- }
213
- const container = this._container;
214
- this.movers = await this._engine.getMovers(container, true);
215
- this.updaters = await this._engine.getUpdaters(container, true);
216
- for (const pathGenerator of container.pathGenerators.values()) {
217
- pathGenerator.init(container);
218
- }
219
- }
220
201
  push(nb, position, overrideOptions, group) {
221
202
  for (let i = 0; i < nb; i++) {
222
203
  this.addParticle(position, overrideOptions, group);
@@ -225,7 +206,7 @@
225
206
  async redraw() {
226
207
  this.clear();
227
208
  await this.init();
228
- this._container.canvas.drawParticles({ value: 0, factor: 0 });
209
+ this._container.canvas.render.drawParticles({ value: 0, factor: 0 });
229
210
  }
230
211
  remove(particle, group, override) {
231
212
  this.removeAt(this._array.indexOf(particle), undefined, group, override);
@@ -258,25 +239,21 @@
258
239
  if (!groupData) {
259
240
  continue;
260
241
  }
261
- const groupDataOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, this._container, groupData);
242
+ const groupDataOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._pluginManager, this._container, groupData);
262
243
  this._applyDensity(groupDataOptions, pluginsCount, group);
263
244
  }
264
245
  this._applyDensity(options.particles, pluginsCount);
265
246
  }
266
247
  setLastZIndex(zIndex) {
267
- this._lastZIndex = zIndex;
268
- this._needsSort = this._needsSort || this._lastZIndex < zIndex;
248
+ this._needsSort ||= zIndex >= this._maxZIndex || (zIndex > this._minZIndex && zIndex < this._maxZIndex);
269
249
  }
270
250
  setResizeFactor(factor) {
271
251
  this._resizeFactor = factor;
272
252
  }
273
253
  update(delta) {
274
- const container = this._container, particlesToDelete = new Set();
275
- this.quadTree = new QuadTree_js_1.QuadTree(qTreeRectangle(container.canvas.size), Constants_js_1.qTreeCapacity);
276
- for (const pathGenerator of container.pathGenerators.values()) {
277
- pathGenerator.update();
278
- }
279
- for (const plugin of container.plugins) {
254
+ const particlesToDelete = new Set();
255
+ this.grid.clear();
256
+ for (const plugin of this._updatePlugins) {
280
257
  plugin.update?.(delta);
281
258
  }
282
259
  const resizeFactor = this._resizeFactor;
@@ -288,71 +265,113 @@
288
265
  particle.initialPosition.y *= resizeFactor.height;
289
266
  }
290
267
  particle.ignoresResizeRatio = false;
291
- for (const plugin of this._container.plugins) {
292
- if (plugin.particleReset) {
293
- plugin.particleReset(particle);
294
- }
268
+ for (const plugin of this._particleResetPlugins) {
269
+ plugin.particleReset?.(particle);
295
270
  }
296
- for (const plugin of this._container.plugins) {
271
+ for (const plugin of this._particleUpdatePlugins) {
297
272
  if (particle.destroyed) {
298
273
  break;
299
274
  }
300
275
  plugin.particleUpdate?.(particle, delta);
301
276
  }
302
- for (const mover of this.movers) {
303
- if (mover.isEnabled(particle)) {
304
- mover.move(particle, delta);
305
- }
306
- }
307
277
  if (particle.destroyed) {
308
278
  particlesToDelete.add(particle);
309
279
  continue;
310
280
  }
311
- this.quadTree.insert(new Point_js_1.Point(particle.getPosition(), particle));
281
+ this.grid.insert(particle);
312
282
  }
313
- if (particlesToDelete.size) {
314
- const checkDelete = (p) => !particlesToDelete.has(p);
315
- this._array = this.filter(checkDelete);
316
- this._zArray = this._zArray.filter(checkDelete);
317
- for (const particle of particlesToDelete) {
318
- this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
319
- container: this._container,
320
- data: {
321
- particle,
322
- },
323
- });
324
- }
325
- this._addToPool(...particlesToDelete);
326
- }
327
- for (const plugin of container.plugins) {
328
- if (plugin.postUpdate) {
329
- plugin.postUpdate(delta);
330
- }
283
+ for (const plugin of this._postUpdatePlugins) {
284
+ plugin.postUpdate?.(delta);
331
285
  }
332
286
  for (const particle of this._array) {
333
- for (const updater of this.updaters) {
287
+ if (particle.destroyed) {
288
+ particlesToDelete.add(particle);
289
+ continue;
290
+ }
291
+ for (const updater of this._container.particleUpdaters) {
334
292
  updater.update(particle, delta);
335
293
  }
336
294
  if (!particle.destroyed && !particle.spawning) {
337
- for (const plugin of container.plugins) {
338
- if (plugin.postParticleUpdate) {
339
- plugin.postParticleUpdate(particle, delta);
340
- }
295
+ for (const plugin of this._postParticleUpdatePlugins) {
296
+ plugin.postParticleUpdate?.(particle, delta);
341
297
  }
342
298
  }
299
+ else if (particle.destroyed) {
300
+ particlesToDelete.add(particle);
301
+ }
302
+ }
303
+ if (particlesToDelete.size) {
304
+ for (const particle of particlesToDelete) {
305
+ this.remove(particle);
306
+ }
343
307
  }
344
308
  delete this._resizeFactor;
345
309
  if (this._needsSort) {
346
310
  const zArray = this._zArray;
347
311
  zArray.sort((a, b) => b.position.z - a.position.z || a.id - b.id);
348
- const lastItem = zArray[zArray.length - Constants_js_1.lengthOffset];
349
- if (!lastItem) {
312
+ const firstItem = zArray[Constants_js_1.minIndex], lastItem = zArray[zArray.length - Constants_js_1.lengthOffset];
313
+ if (!firstItem || !lastItem) {
350
314
  return;
351
315
  }
352
- this._lastZIndex = lastItem.position.z;
316
+ this._maxZIndex = firstItem.position.z;
317
+ this._minZIndex = lastItem.position.z;
353
318
  this._needsSort = false;
354
319
  }
355
320
  }
321
+ _addToPool = (...particles) => {
322
+ this._pool.push(...particles);
323
+ };
324
+ _applyDensity = (options, pluginsCount, group, groupOptions) => {
325
+ const numberOptions = options.number;
326
+ if (!numberOptions.density.enable) {
327
+ if (group === undefined) {
328
+ this._limit = numberOptions.limit.value;
329
+ }
330
+ else if (groupOptions?.number.limit.value ?? numberOptions.limit.value) {
331
+ this._groupLimits.set(group, groupOptions?.number.limit.value ?? numberOptions.limit.value);
332
+ }
333
+ return;
334
+ }
335
+ const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > Constants_js_1.minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + pluginsCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);
336
+ if (group === undefined) {
337
+ this._limit = numberOptions.limit.value * densityFactor;
338
+ }
339
+ else {
340
+ this._groupLimits.set(group, numberOptions.limit.value * densityFactor);
341
+ }
342
+ if (particlesCount < particlesNumber) {
343
+ this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);
344
+ }
345
+ else if (particlesCount > particlesNumber) {
346
+ this.removeQuantity(particlesCount - particlesNumber, group);
347
+ }
348
+ };
349
+ _initDensityFactor = densityOptions => {
350
+ const container = this._container;
351
+ if (!container.canvas.element || !densityOptions.enable) {
352
+ return Constants_js_1.defaultDensityFactor;
353
+ }
354
+ const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;
355
+ return (canvas.width * canvas.height) / (densityOptions.height * densityOptions.width * pxRatio ** Constants_js_1.squareExp);
356
+ };
357
+ _removeParticle = (index, group, override) => {
358
+ const particle = this._array[index];
359
+ if (!particle) {
360
+ return false;
361
+ }
362
+ if (particle.group !== group) {
363
+ return false;
364
+ }
365
+ const zIdx = this._zArray.indexOf(particle);
366
+ this._array.splice(index, Constants_js_1.deleteCount);
367
+ this._zArray.splice(zIdx, Constants_js_1.deleteCount);
368
+ particle.destroy(override);
369
+ this._container.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
370
+ particle,
371
+ });
372
+ this._addToPool(particle);
373
+ return true;
374
+ };
356
375
  }
357
- exports.Particles = Particles;
376
+ exports.ParticlesManager = ParticlesManager;
358
377
  });