@tsparticles/engine 4.0.0-alpha.8 → 4.0.0-beta.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.
Files changed (274) hide show
  1. package/164.min.js +1 -0
  2. package/README.md +41 -7
  3. package/browser/Core/Canvas.js +238 -137
  4. package/browser/Core/Container.js +80 -74
  5. package/browser/Core/Engine.js +43 -64
  6. package/browser/Core/Particle.js +182 -169
  7. package/browser/Core/Particles.js +187 -138
  8. package/browser/Core/Retina.js +5 -0
  9. package/browser/Core/Utils/Constants.js +2 -2
  10. package/browser/Core/Utils/EventListeners.js +67 -63
  11. package/browser/Core/Utils/Ranges.js +29 -10
  12. package/browser/Core/Utils/SpatialHashGrid.js +102 -0
  13. package/browser/Core/Utils/Vectors.js +17 -18
  14. package/browser/Options/Classes/AnimatableColor.js +1 -0
  15. package/browser/Options/Classes/AnimationOptions.js +8 -0
  16. package/browser/Options/Classes/Background/Background.js +6 -0
  17. package/browser/Options/Classes/ColorAnimation.js +12 -1
  18. package/browser/Options/Classes/FullScreen/FullScreen.js +2 -0
  19. package/browser/Options/Classes/HslAnimation.js +4 -5
  20. package/browser/Options/Classes/Options.js +63 -4
  21. package/browser/Options/Classes/OptionsColor.js +1 -0
  22. package/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  23. package/browser/Options/Classes/Particles/Effect/Effect.js +3 -4
  24. package/browser/Options/Classes/Particles/Fill.js +28 -0
  25. package/browser/Options/Classes/Particles/Move/Move.js +17 -3
  26. package/browser/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  27. package/browser/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  28. package/browser/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  29. package/browser/Options/Classes/Particles/Move/OutModes.js +5 -0
  30. package/browser/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  31. package/browser/Options/Classes/Particles/Move/Spin.js +3 -0
  32. package/browser/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  33. package/browser/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  34. package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  35. package/browser/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  36. package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  37. package/browser/Options/Classes/Particles/ParticlesOptions.js +25 -5
  38. package/browser/Options/Classes/Particles/Shape/Shape.js +3 -4
  39. package/browser/Options/Classes/Particles/Size/Size.js +1 -0
  40. package/browser/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  41. package/browser/Options/Classes/Particles/Stroke.js +3 -0
  42. package/browser/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  43. package/browser/Options/Classes/ResizeEvent.js +2 -0
  44. package/browser/Options/Classes/ValueWithRandom.js +3 -4
  45. package/browser/Utils/CanvasUtils.js +44 -51
  46. package/browser/Utils/ColorUtils.js +30 -19
  47. package/browser/Utils/EventDispatcher.js +1 -0
  48. package/browser/Utils/MathUtils.js +12 -7
  49. package/browser/Utils/Utils.js +109 -31
  50. package/browser/exports.js +1 -2
  51. package/cjs/Core/Canvas.js +238 -137
  52. package/cjs/Core/Container.js +80 -74
  53. package/cjs/Core/Engine.js +43 -64
  54. package/cjs/Core/Particle.js +182 -169
  55. package/cjs/Core/Particles.js +187 -138
  56. package/cjs/Core/Retina.js +5 -0
  57. package/cjs/Core/Utils/Constants.js +2 -2
  58. package/cjs/Core/Utils/EventListeners.js +67 -63
  59. package/cjs/Core/Utils/Ranges.js +29 -10
  60. package/cjs/Core/Utils/SpatialHashGrid.js +102 -0
  61. package/cjs/Core/Utils/Vectors.js +17 -18
  62. package/cjs/Options/Classes/AnimatableColor.js +1 -0
  63. package/cjs/Options/Classes/AnimationOptions.js +8 -0
  64. package/cjs/Options/Classes/Background/Background.js +6 -0
  65. package/cjs/Options/Classes/ColorAnimation.js +12 -1
  66. package/cjs/Options/Classes/FullScreen/FullScreen.js +2 -0
  67. package/cjs/Options/Classes/HslAnimation.js +4 -5
  68. package/cjs/Options/Classes/Options.js +63 -4
  69. package/cjs/Options/Classes/OptionsColor.js +1 -0
  70. package/cjs/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  71. package/cjs/Options/Classes/Particles/Effect/Effect.js +3 -4
  72. package/cjs/Options/Classes/Particles/Fill.js +28 -0
  73. package/cjs/Options/Classes/Particles/Move/Move.js +17 -3
  74. package/cjs/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  75. package/cjs/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  76. package/cjs/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  77. package/cjs/Options/Classes/Particles/Move/OutModes.js +5 -0
  78. package/cjs/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  79. package/cjs/Options/Classes/Particles/Move/Spin.js +3 -0
  80. package/cjs/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  81. package/cjs/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  82. package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  83. package/cjs/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  84. package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  85. package/cjs/Options/Classes/Particles/ParticlesOptions.js +25 -5
  86. package/cjs/Options/Classes/Particles/Shape/Shape.js +3 -4
  87. package/cjs/Options/Classes/Particles/Size/Size.js +1 -0
  88. package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  89. package/cjs/Options/Classes/Particles/Stroke.js +3 -0
  90. package/cjs/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  91. package/cjs/Options/Classes/ResizeEvent.js +2 -0
  92. package/cjs/Options/Classes/ValueWithRandom.js +3 -4
  93. package/cjs/Utils/CanvasUtils.js +44 -51
  94. package/cjs/Utils/ColorUtils.js +30 -19
  95. package/cjs/Utils/EventDispatcher.js +1 -0
  96. package/cjs/Utils/MathUtils.js +12 -7
  97. package/cjs/Utils/Utils.js +109 -31
  98. package/cjs/exports.js +1 -2
  99. package/dist_browser_Core_Container_js.js +12 -12
  100. package/esm/Core/Canvas.js +238 -137
  101. package/esm/Core/Container.js +80 -74
  102. package/esm/Core/Engine.js +43 -64
  103. package/esm/Core/Particle.js +182 -169
  104. package/esm/Core/Particles.js +187 -138
  105. package/esm/Core/Retina.js +5 -0
  106. package/esm/Core/Utils/Constants.js +2 -2
  107. package/esm/Core/Utils/EventListeners.js +67 -63
  108. package/esm/Core/Utils/Ranges.js +29 -10
  109. package/esm/Core/Utils/SpatialHashGrid.js +102 -0
  110. package/esm/Core/Utils/Vectors.js +17 -18
  111. package/esm/Options/Classes/AnimatableColor.js +1 -0
  112. package/esm/Options/Classes/AnimationOptions.js +8 -0
  113. package/esm/Options/Classes/Background/Background.js +6 -0
  114. package/esm/Options/Classes/ColorAnimation.js +12 -1
  115. package/esm/Options/Classes/FullScreen/FullScreen.js +2 -0
  116. package/esm/Options/Classes/HslAnimation.js +4 -5
  117. package/esm/Options/Classes/Options.js +63 -4
  118. package/esm/Options/Classes/OptionsColor.js +1 -0
  119. package/esm/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  120. package/esm/Options/Classes/Particles/Effect/Effect.js +3 -4
  121. package/esm/Options/Classes/Particles/Fill.js +28 -0
  122. package/esm/Options/Classes/Particles/Move/Move.js +17 -3
  123. package/esm/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  124. package/esm/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  125. package/esm/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  126. package/esm/Options/Classes/Particles/Move/OutModes.js +5 -0
  127. package/esm/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  128. package/esm/Options/Classes/Particles/Move/Spin.js +3 -0
  129. package/esm/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  130. package/esm/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  131. package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  132. package/esm/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  133. package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  134. package/esm/Options/Classes/Particles/ParticlesOptions.js +25 -5
  135. package/esm/Options/Classes/Particles/Shape/Shape.js +3 -4
  136. package/esm/Options/Classes/Particles/Size/Size.js +1 -0
  137. package/esm/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  138. package/esm/Options/Classes/Particles/Stroke.js +3 -0
  139. package/esm/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  140. package/esm/Options/Classes/ResizeEvent.js +2 -0
  141. package/esm/Options/Classes/ValueWithRandom.js +3 -4
  142. package/esm/Utils/CanvasUtils.js +44 -51
  143. package/esm/Utils/ColorUtils.js +30 -19
  144. package/esm/Utils/EventDispatcher.js +1 -0
  145. package/esm/Utils/MathUtils.js +12 -7
  146. package/esm/Utils/Utils.js +109 -31
  147. package/esm/exports.js +1 -2
  148. package/package.json +1 -1
  149. package/report.html +1 -1
  150. package/scripts/install.js +4 -20
  151. package/tsparticles.engine.js +93 -91
  152. package/tsparticles.engine.min.js +2 -2
  153. package/types/Core/Canvas.d.ts +17 -2
  154. package/types/Core/Container.d.ts +3 -7
  155. package/types/Core/Engine.d.ts +13 -20
  156. package/types/Core/Interfaces/IColorManager.d.ts +0 -1
  157. package/types/Core/Interfaces/IContainerPlugin.d.ts +2 -1
  158. package/types/Core/Interfaces/IPalette.d.ts +7 -0
  159. package/types/Core/Interfaces/IParticleOpacityData.d.ts +1 -0
  160. package/types/Core/Interfaces/IParticleValueAnimation.d.ts +3 -3
  161. package/types/Core/Interfaces/IShapeDrawData.d.ts +8 -0
  162. package/types/Core/Interfaces/IShapeDrawer.d.ts +0 -1
  163. package/types/Core/Interfaces/IShapeValues.d.ts +0 -1
  164. package/types/Core/Particle.d.ts +3 -7
  165. package/types/Core/Particles.d.ts +15 -7
  166. package/types/Core/Utils/Constants.d.ts +2 -2
  167. package/types/Core/Utils/Ranges.d.ts +4 -1
  168. package/types/Core/Utils/SpatialHashGrid.d.ts +25 -0
  169. package/types/Core/Utils/Vectors.d.ts +8 -10
  170. package/types/Options/Classes/ColorAnimation.d.ts +3 -1
  171. package/types/Options/Classes/HslAnimation.d.ts +3 -4
  172. package/types/Options/Classes/Options.d.ts +2 -0
  173. package/types/Options/Classes/Particles/Effect/Effect.d.ts +0 -1
  174. package/types/Options/Classes/Particles/Fill.d.ts +12 -0
  175. package/types/Options/Classes/Particles/Move/Move.d.ts +0 -2
  176. package/types/Options/Classes/Particles/ParticlesOptions.d.ts +2 -2
  177. package/types/Options/Classes/Particles/Shape/Shape.d.ts +0 -1
  178. package/types/Options/Classes/ValueWithRandom.d.ts +0 -1
  179. package/types/Options/Interfaces/IColorAnimation.d.ts +2 -0
  180. package/types/Options/Interfaces/IOptions.d.ts +1 -0
  181. package/types/Options/Interfaces/Particles/Effect/IEffect.d.ts +0 -1
  182. package/types/Options/Interfaces/Particles/IFill.d.ts +9 -0
  183. package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +2 -2
  184. package/types/Options/Interfaces/Particles/IStroke.d.ts +2 -2
  185. package/types/Options/Interfaces/Particles/Move/IMove.d.ts +0 -2
  186. package/types/Options/Interfaces/Particles/Shape/IShape.d.ts +0 -1
  187. package/types/Types/EngineInitializers.d.ts +6 -3
  188. package/types/Utils/CanvasUtils.d.ts +6 -12
  189. package/types/Utils/ColorUtils.d.ts +3 -2
  190. package/types/Utils/MathUtils.d.ts +2 -0
  191. package/types/Utils/Utils.d.ts +8 -1
  192. package/types/export-types.d.ts +3 -5
  193. package/types/exports.d.ts +1 -2
  194. package/umd/Core/Canvas.js +237 -136
  195. package/umd/Core/Container.js +80 -74
  196. package/umd/Core/Engine.js +42 -63
  197. package/umd/Core/Particle.js +183 -170
  198. package/umd/Core/Particles.js +187 -138
  199. package/umd/Core/Retina.js +5 -0
  200. package/umd/Core/Utils/Constants.js +3 -3
  201. package/umd/Core/Utils/EventListeners.js +67 -63
  202. package/umd/Core/Utils/Ranges.js +28 -9
  203. package/umd/Core/Utils/SpatialHashGrid.js +116 -0
  204. package/umd/Core/Utils/Vectors.js +17 -18
  205. package/umd/Options/Classes/AnimatableColor.js +1 -0
  206. package/umd/Options/Classes/AnimationOptions.js +8 -0
  207. package/umd/Options/Classes/Background/Background.js +6 -0
  208. package/umd/Options/Classes/ColorAnimation.js +12 -1
  209. package/umd/Options/Classes/FullScreen/FullScreen.js +2 -0
  210. package/umd/Options/Classes/HslAnimation.js +5 -6
  211. package/umd/Options/Classes/Options.js +63 -4
  212. package/umd/Options/Classes/OptionsColor.js +1 -0
  213. package/umd/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  214. package/umd/Options/Classes/Particles/Effect/Effect.js +3 -4
  215. package/umd/Options/Classes/Particles/Fill.js +42 -0
  216. package/umd/Options/Classes/Particles/Move/Move.js +18 -4
  217. package/umd/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  218. package/umd/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  219. package/umd/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  220. package/umd/Options/Classes/Particles/Move/OutModes.js +5 -0
  221. package/umd/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  222. package/umd/Options/Classes/Particles/Move/Spin.js +3 -0
  223. package/umd/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  224. package/umd/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  225. package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  226. package/umd/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  227. package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  228. package/umd/Options/Classes/Particles/ParticlesOptions.js +26 -6
  229. package/umd/Options/Classes/Particles/Shape/Shape.js +3 -4
  230. package/umd/Options/Classes/Particles/Size/Size.js +1 -0
  231. package/umd/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  232. package/umd/Options/Classes/Particles/Stroke.js +3 -0
  233. package/umd/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  234. package/umd/Options/Classes/ResizeEvent.js +2 -0
  235. package/umd/Options/Classes/ValueWithRandom.js +3 -4
  236. package/umd/Utils/CanvasUtils.js +44 -53
  237. package/umd/Utils/ColorUtils.js +30 -18
  238. package/umd/Utils/EventDispatcher.js +1 -0
  239. package/umd/Utils/MathUtils.js +14 -7
  240. package/umd/Utils/Utils.js +111 -32
  241. package/umd/exports.js +2 -3
  242. package/794.min.js +0 -2
  243. package/794.min.js.LICENSE.txt +0 -1
  244. package/browser/Core/Utils/Point.js +0 -6
  245. package/browser/Core/Utils/QuadTree.js +0 -59
  246. package/browser/Options/Classes/Particles/Move/MoveAttract.js +0 -33
  247. package/cjs/Core/Utils/Point.js +0 -6
  248. package/cjs/Core/Utils/QuadTree.js +0 -59
  249. package/cjs/Options/Classes/Particles/Move/MoveAttract.js +0 -33
  250. package/esm/Core/Interfaces/IMovePathGenerator.js +0 -1
  251. package/esm/Core/Interfaces/IParticleMover.js +0 -1
  252. package/esm/Core/Utils/Point.js +0 -6
  253. package/esm/Core/Utils/QuadTree.js +0 -59
  254. package/esm/Options/Classes/Particles/Move/MoveAttract.js +0 -33
  255. package/esm/Options/Interfaces/Particles/Move/IMoveAttract.js +0 -1
  256. package/tsparticles.engine.min.js.LICENSE.txt +0 -1
  257. package/types/Core/Interfaces/IMovePathGenerator.d.ts +0 -10
  258. package/types/Core/Interfaces/IParticleMover.d.ts +0 -7
  259. package/types/Core/Utils/Point.d.ts +0 -7
  260. package/types/Core/Utils/QuadTree.d.ts +0 -18
  261. package/types/Options/Classes/Particles/Move/MoveAttract.d.ts +0 -12
  262. package/types/Options/Interfaces/Particles/Move/IMoveAttract.d.ts +0 -7
  263. package/umd/Core/Utils/Point.js +0 -20
  264. package/umd/Core/Utils/QuadTree.js +0 -73
  265. package/umd/Options/Classes/Particles/Move/MoveAttract.js +0 -47
  266. package/umd/Options/Interfaces/Particles/Move/IMoveAttract.js +0 -12
  267. /package/browser/Core/Interfaces/{IMovePathGenerator.js → IPalette.js} +0 -0
  268. /package/browser/{Core/Interfaces/IParticleMover.js → Options/Interfaces/Particles/IFill.js} +0 -0
  269. /package/{browser/Options/Interfaces/Particles/Move/IMoveAttract.js → cjs/Core/Interfaces/IPalette.js} +0 -0
  270. /package/cjs/{Core/Interfaces/IMovePathGenerator.js → Options/Interfaces/Particles/IFill.js} +0 -0
  271. /package/{cjs/Core/Interfaces/IParticleMover.js → esm/Core/Interfaces/IPalette.js} +0 -0
  272. /package/{cjs/Options/Interfaces/Particles/Move/IMoveAttract.js → esm/Options/Interfaces/Particles/IFill.js} +0 -0
  273. /package/umd/Core/Interfaces/{IMovePathGenerator.js → IPalette.js} +0 -0
  274. /package/umd/{Core/Interfaces/IParticleMover.js → Options/Interfaces/Particles/IFill.js} +0 -0
@@ -14,6 +14,9 @@
14
14
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
15
15
  const MathUtils_js_1 = require("../../../../Utils/MathUtils.js");
16
16
  class Spin {
17
+ acceleration;
18
+ enable;
19
+ position;
17
20
  constructor() {
18
21
  this.acceleration = 0;
19
22
  this.enable = false;
@@ -12,6 +12,9 @@
12
12
  exports.ParticlesDensity = void 0;
13
13
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
14
14
  class ParticlesDensity {
15
+ enable;
16
+ height;
17
+ width;
15
18
  constructor() {
16
19
  this.enable = false;
17
20
  this.width = 1920;
@@ -14,6 +14,9 @@
14
14
  const ParticlesNumberLimit_js_1 = require("./ParticlesNumberLimit.js");
15
15
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
16
16
  class ParticlesNumber {
17
+ density;
18
+ limit;
19
+ value;
17
20
  constructor() {
18
21
  this.density = new ParticlesDensity_js_1.ParticlesDensity();
19
22
  this.limit = new ParticlesNumberLimit_js_1.ParticlesNumberLimit();
@@ -13,6 +13,8 @@
13
13
  const LimitMode_js_1 = require("../../../../Enums/Modes/LimitMode.js");
14
14
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
15
15
  class ParticlesNumberLimit {
16
+ mode;
17
+ value;
16
18
  constructor() {
17
19
  this.mode = LimitMode_js_1.LimitMode.delete;
18
20
  this.value = 0;
@@ -14,6 +14,7 @@
14
14
  const ValueWithRandom_js_1 = require("../../ValueWithRandom.js");
15
15
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
16
16
  class Opacity extends ValueWithRandom_js_1.RangedAnimationValueWithRandom {
17
+ animation;
17
18
  constructor() {
18
19
  super();
19
20
  this.animation = new OpacityAnimation_js_1.OpacityAnimation();
@@ -14,6 +14,7 @@
14
14
  const AnimationOptions_js_1 = require("../../AnimationOptions.js");
15
15
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
16
16
  class OpacityAnimation extends AnimationOptions_js_1.RangedAnimationOptions {
17
+ destroy;
17
18
  constructor() {
18
19
  super();
19
20
  this.destroy = DestroyType_js_1.DestroyType.none;
@@ -4,15 +4,15 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "../../../Utils/Utils.js", "../AnimatableColor.js", "./Effect/Effect.js", "./Move/Move.js", "./Opacity/Opacity.js", "./Bounce/ParticlesBounce.js", "./Number/ParticlesNumber.js", "./Shape/Shape.js", "./Size/Size.js", "./Stroke.js", "./ZIndex/ZIndex.js", "../../../Utils/TypeUtils.js"], factory);
7
+ define(["require", "exports", "../../../Utils/Utils.js", "./Effect/Effect.js", "./Fill.js", "./Move/Move.js", "./Opacity/Opacity.js", "./Bounce/ParticlesBounce.js", "./Number/ParticlesNumber.js", "./Shape/Shape.js", "./Size/Size.js", "./Stroke.js", "./ZIndex/ZIndex.js", "../../../Utils/TypeUtils.js"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ParticlesOptions = void 0;
13
13
  const Utils_js_1 = require("../../../Utils/Utils.js");
14
- const AnimatableColor_js_1 = require("../AnimatableColor.js");
15
14
  const Effect_js_1 = require("./Effect/Effect.js");
15
+ const Fill_js_1 = require("./Fill.js");
16
16
  const Move_js_1 = require("./Move/Move.js");
17
17
  const Opacity_js_1 = require("./Opacity/Opacity.js");
18
18
  const ParticlesBounce_js_1 = require("./Bounce/ParticlesBounce.js");
@@ -23,13 +23,26 @@
23
23
  const ZIndex_js_1 = require("./ZIndex/ZIndex.js");
24
24
  const TypeUtils_js_1 = require("../../../Utils/TypeUtils.js");
25
25
  class ParticlesOptions {
26
+ bounce;
27
+ effect;
28
+ fill;
29
+ groups;
30
+ move;
31
+ number;
32
+ opacity;
33
+ reduceDuplicates;
34
+ shape;
35
+ size;
36
+ stroke;
37
+ zIndex;
38
+ _container;
39
+ _engine;
26
40
  constructor(engine, container) {
27
41
  this._engine = engine;
28
42
  this._container = container;
29
43
  this.bounce = new ParticlesBounce_js_1.ParticlesBounce();
30
- this.color = new AnimatableColor_js_1.AnimatableColor();
31
- this.color.value = "#fff";
32
44
  this.effect = new Effect_js_1.Effect();
45
+ this.fill = new Fill_js_1.Fill();
33
46
  this.groups = {};
34
47
  this.move = new Move_js_1.Move();
35
48
  this.number = new ParticlesNumber_js_1.ParticlesNumber();
@@ -46,7 +59,7 @@
46
59
  }
47
60
  if (data.groups !== undefined) {
48
61
  for (const group of Object.keys(data.groups)) {
49
- if (!Object.hasOwn(data.groups, group)) {
62
+ if (!(group in data.groups)) {
50
63
  continue;
51
64
  }
52
65
  const item = data.groups[group];
@@ -59,7 +72,6 @@
59
72
  this.reduceDuplicates = data.reduceDuplicates;
60
73
  }
61
74
  this.bounce.load(data.bounce);
62
- this.color.load(AnimatableColor_js_1.AnimatableColor.create(this.color, data.color));
63
75
  this.effect.load(data.effect);
64
76
  this.move.load(data.move);
65
77
  this.number.load(data.number);
@@ -67,6 +79,14 @@
67
79
  this.shape.load(data.shape);
68
80
  this.size.load(data.size);
69
81
  this.zIndex.load(data.zIndex);
82
+ const fillToLoad = data.fill;
83
+ if (fillToLoad) {
84
+ this.fill = (0, Utils_js_1.executeOnSingleOrMultiple)(fillToLoad, t => {
85
+ const tmp = new Fill_js_1.Fill();
86
+ tmp.load(t);
87
+ return tmp;
88
+ });
89
+ }
70
90
  const strokeToLoad = data.stroke;
71
91
  if (strokeToLoad) {
72
92
  this.stroke = (0, Utils_js_1.executeOnSingleOrMultiple)(strokeToLoad, t => {
@@ -13,9 +13,11 @@
13
13
  const Utils_js_1 = require("../../../../Utils/Utils.js");
14
14
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
15
15
  class Shape {
16
+ close;
17
+ options;
18
+ type;
16
19
  constructor() {
17
20
  this.close = true;
18
- this.fill = true;
19
21
  this.options = {};
20
22
  this.type = "circle";
21
23
  }
@@ -35,9 +37,6 @@
35
37
  if (data.close !== undefined) {
36
38
  this.close = data.close;
37
39
  }
38
- if (data.fill !== undefined) {
39
- this.fill = data.fill;
40
- }
41
40
  if (data.type !== undefined) {
42
41
  this.type = data.type;
43
42
  }
@@ -14,6 +14,7 @@
14
14
  const SizeAnimation_js_1 = require("./SizeAnimation.js");
15
15
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
16
16
  class Size extends ValueWithRandom_js_1.RangedAnimationValueWithRandom {
17
+ animation;
17
18
  constructor() {
18
19
  super();
19
20
  this.animation = new SizeAnimation_js_1.SizeAnimation();
@@ -14,6 +14,7 @@
14
14
  const AnimationOptions_js_1 = require("../../AnimationOptions.js");
15
15
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
16
16
  class SizeAnimation extends AnimationOptions_js_1.RangedAnimationOptions {
17
+ destroy;
17
18
  constructor() {
18
19
  super();
19
20
  this.destroy = DestroyType_js_1.DestroyType.none;
@@ -14,6 +14,9 @@
14
14
  const TypeUtils_js_1 = require("../../../Utils/TypeUtils.js");
15
15
  const MathUtils_js_1 = require("../../../Utils/MathUtils.js");
16
16
  class Stroke {
17
+ color;
18
+ opacity;
19
+ width;
17
20
  constructor() {
18
21
  this.width = 0;
19
22
  }
@@ -13,6 +13,9 @@
13
13
  const ValueWithRandom_js_1 = require("../../ValueWithRandom.js");
14
14
  const TypeUtils_js_1 = require("../../../../Utils/TypeUtils.js");
15
15
  class ZIndex extends ValueWithRandom_js_1.ValueWithRandom {
16
+ opacityRate;
17
+ sizeRate;
18
+ velocityRate;
16
19
  constructor() {
17
20
  super();
18
21
  this.opacityRate = 1;
@@ -12,6 +12,8 @@
12
12
  exports.ResizeEvent = void 0;
13
13
  const TypeUtils_js_1 = require("../../Utils/TypeUtils.js");
14
14
  class ResizeEvent {
15
+ delay;
16
+ enable;
15
17
  constructor() {
16
18
  this.delay = 0.5;
17
19
  this.enable = true;
@@ -14,6 +14,7 @@
14
14
  const TypeUtils_js_1 = require("../../Utils/TypeUtils.js");
15
15
  const MathUtils_js_1 = require("../../Utils/MathUtils.js");
16
16
  class ValueWithRandom {
17
+ value;
17
18
  constructor() {
18
19
  this.value = 0;
19
20
  }
@@ -28,10 +29,7 @@
28
29
  }
29
30
  exports.ValueWithRandom = ValueWithRandom;
30
31
  class AnimationValueWithRandom extends ValueWithRandom {
31
- constructor() {
32
- super();
33
- this.animation = new AnimationOptions_js_1.AnimationOptions();
34
- }
32
+ animation = new AnimationOptions_js_1.AnimationOptions();
35
33
  load(data) {
36
34
  super.load(data);
37
35
  if ((0, TypeUtils_js_1.isNull)(data)) {
@@ -45,6 +43,7 @@
45
43
  }
46
44
  exports.AnimationValueWithRandom = AnimationValueWithRandom;
47
45
  class RangedAnimationValueWithRandom extends AnimationValueWithRandom {
46
+ animation;
48
47
  constructor() {
49
48
  super();
50
49
  this.animation = new AnimationOptions_js_1.RangedAnimationOptions();
@@ -4,12 +4,11 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "../Core/Utils/Constants.js", "../Enums/Types/AlterType.js"], factory);
7
+ define(["require", "exports", "../Core/Utils/Constants.js"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.drawLine = drawLine;
13
12
  exports.paintBase = paintBase;
14
13
  exports.paintImage = paintImage;
15
14
  exports.clear = clear;
@@ -20,15 +19,7 @@
20
19
  exports.drawShapeAfterDraw = drawShapeAfterDraw;
21
20
  exports.drawShapeBeforeDraw = drawShapeBeforeDraw;
22
21
  exports.drawParticlePlugin = drawParticlePlugin;
23
- exports.alterHsl = alterHsl;
24
22
  const Constants_js_1 = require("../Core/Utils/Constants.js");
25
- const AlterType_js_1 = require("../Enums/Types/AlterType.js");
26
- function drawLine(context, begin, end) {
27
- context.beginPath();
28
- context.moveTo(begin.x, begin.y);
29
- context.lineTo(end.x, end.y);
30
- context.closePath();
31
- }
32
23
  function paintBase(context, dimension, baseColor) {
33
24
  context.fillStyle = baseColor ?? "rgba(0,0,0,0)";
34
25
  context.fillRect(Constants_js_1.originPoint.x, Constants_js_1.originPoint.y, dimension.width, dimension.height);
@@ -37,20 +28,24 @@
37
28
  if (!image) {
38
29
  return;
39
30
  }
31
+ const prevAlpha = context.globalAlpha;
40
32
  context.globalAlpha = opacity;
41
33
  context.drawImage(image, Constants_js_1.originPoint.x, Constants_js_1.originPoint.y, dimension.width, dimension.height);
42
- context.globalAlpha = 1;
34
+ context.globalAlpha = prevAlpha;
43
35
  }
44
36
  function clear(context, dimension) {
45
37
  context.clearRect(Constants_js_1.originPoint.x, Constants_js_1.originPoint.y, dimension.width, dimension.height);
46
38
  }
47
39
  function drawParticle(data) {
48
- const { container, context, particle, delta, colorStyles, radius, opacity, transform } = data, pos = particle.getPosition(), transformData = particle.getTransformData(transform);
40
+ const { container, context, particle, delta, colorStyles, radius, opacity, transform } = data, { effectDrawers, shapeDrawers } = container.particles, pos = particle.getPosition(), transformData = particle.getTransformData(transform), drawScale = Constants_js_1.defaultZoom, drawPosition = {
41
+ x: pos.x,
42
+ y: pos.y,
43
+ };
49
44
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);
50
45
  if (colorStyles.fill) {
51
46
  context.fillStyle = colorStyles.fill;
52
47
  }
53
- const strokeWidth = particle.strokeWidth ?? Constants_js_1.minStrokeWidth;
48
+ const fillEnabled = !!particle.fillEnabled, strokeWidth = particle.strokeWidth ?? Constants_js_1.minStrokeWidth;
54
49
  context.lineWidth = strokeWidth;
55
50
  if (colorStyles.stroke) {
56
51
  context.strokeStyle = colorStyles.stroke;
@@ -59,49 +54,54 @@
59
54
  context,
60
55
  particle,
61
56
  radius,
57
+ drawRadius: radius * drawScale,
62
58
  opacity,
63
59
  delta,
64
60
  pixelRatio: container.retina.pixelRatio,
65
- fill: particle.shapeFill,
66
- stroke: strokeWidth > Constants_js_1.minStrokeWidth || !particle.shapeFill,
61
+ fill: fillEnabled,
62
+ stroke: strokeWidth > Constants_js_1.minStrokeWidth,
67
63
  transformData,
64
+ position: { ...pos },
65
+ drawPosition,
66
+ drawScale,
68
67
  };
69
- drawBeforeEffect(container, drawData);
70
- drawShapeBeforeDraw(container, drawData);
71
- drawShape(container, drawData);
72
- drawShapeAfterDraw(container, drawData);
73
- drawAfterEffect(container, drawData);
68
+ for (const plugin of container.plugins) {
69
+ plugin.drawParticleTransform?.(drawData);
70
+ }
71
+ const effect = particle.effect ? effectDrawers.get(particle.effect) : undefined, shape = particle.shape ? shapeDrawers.get(particle.shape) : undefined;
72
+ drawBeforeEffect(effect, drawData);
73
+ drawShapeBeforeDraw(shape, drawData);
74
+ drawShape(shape, drawData);
75
+ drawShapeAfterDraw(shape, drawData);
76
+ drawAfterEffect(effect, drawData);
74
77
  context.resetTransform();
75
78
  }
76
- function drawAfterEffect(container, data) {
79
+ function drawAfterEffect(drawer, data) {
80
+ if (!drawer?.drawAfter) {
81
+ return;
82
+ }
77
83
  const { particle } = data;
78
84
  if (!particle.effect) {
79
85
  return;
80
86
  }
81
- const drawer = container.effectDrawers.get(particle.effect), drawFunc = drawer?.drawAfter;
82
- if (!drawFunc) {
87
+ drawer.drawAfter(data);
88
+ }
89
+ function drawBeforeEffect(drawer, data) {
90
+ if (!drawer?.drawBefore) {
83
91
  return;
84
92
  }
85
- drawFunc(data);
86
- }
87
- function drawBeforeEffect(container, data) {
88
93
  const { particle } = data;
89
94
  if (!particle.effect) {
90
95
  return;
91
96
  }
92
- const drawer = container.effectDrawers.get(particle.effect);
93
- if (!drawer?.drawBefore) {
94
- return;
95
- }
96
97
  drawer.drawBefore(data);
97
98
  }
98
- function drawShape(container, data) {
99
- const { context, particle, stroke } = data;
100
- if (!particle.shape) {
99
+ function drawShape(drawer, data) {
100
+ if (!drawer) {
101
101
  return;
102
102
  }
103
- const drawer = container.shapeDrawers.get(particle.shape);
104
- if (!drawer) {
103
+ const { context, fill, particle, stroke } = data;
104
+ if (!particle.shape) {
105
105
  return;
106
106
  }
107
107
  context.beginPath();
@@ -112,30 +112,28 @@
112
112
  if (stroke) {
113
113
  context.stroke();
114
114
  }
115
- if (particle.shapeFill) {
115
+ if (fill) {
116
116
  context.fill();
117
117
  }
118
118
  }
119
- function drawShapeAfterDraw(container, data) {
120
- const { particle } = data;
121
- if (!particle.shape) {
122
- return;
123
- }
124
- const drawer = container.shapeDrawers.get(particle.shape);
119
+ function drawShapeAfterDraw(drawer, data) {
125
120
  if (!drawer?.afterDraw) {
126
121
  return;
127
122
  }
128
- drawer.afterDraw(data);
129
- }
130
- function drawShapeBeforeDraw(container, data) {
131
123
  const { particle } = data;
132
124
  if (!particle.shape) {
133
125
  return;
134
126
  }
135
- const drawer = container.shapeDrawers.get(particle.shape);
127
+ drawer.afterDraw(data);
128
+ }
129
+ function drawShapeBeforeDraw(drawer, data) {
136
130
  if (!drawer?.beforeDraw) {
137
131
  return;
138
132
  }
133
+ const { particle } = data;
134
+ if (!particle.shape) {
135
+ return;
136
+ }
139
137
  drawer.beforeDraw(data);
140
138
  }
141
139
  function drawParticlePlugin(context, plugin, particle, delta) {
@@ -144,11 +142,4 @@
144
142
  }
145
143
  plugin.drawParticle(context, particle, delta);
146
144
  }
147
- function alterHsl(color, type, value) {
148
- return {
149
- h: color.h,
150
- s: color.s,
151
- l: color.l + (type === AlterType_js_1.AlterType.darken ? -Constants_js_1.lFactor : Constants_js_1.lFactor) * value,
152
- };
153
- }
154
145
  });
@@ -4,7 +4,7 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "./MathUtils.js", "../Core/Utils/Constants.js", "./TypeUtils.js", "../Enums/AnimationStatus.js", "./Utils.js"], factory);
7
+ define(["require", "exports", "./MathUtils.js", "../Core/Utils/Constants.js", "./TypeUtils.js", "../Enums/Types/AlterType.js", "../Enums/AnimationStatus.js", "./Utils.js"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
@@ -28,9 +28,11 @@
28
28
  exports.getHslAnimationFromHsl = getHslAnimationFromHsl;
29
29
  exports.updateColorValue = updateColorValue;
30
30
  exports.updateColor = updateColor;
31
+ exports.alterHsl = alterHsl;
31
32
  const MathUtils_js_1 = require("./MathUtils.js");
32
33
  const Constants_js_1 = require("../Core/Utils/Constants.js");
33
34
  const TypeUtils_js_1 = require("./TypeUtils.js");
35
+ const AlterType_js_1 = require("../Enums/Types/AlterType.js");
34
36
  const AnimationStatus_js_1 = require("../Enums/AnimationStatus.js");
35
37
  const Utils_js_1 = require("./Utils.js");
36
38
  const styleCache = new Map(), maxCacheSize = 1000, firstIndex = 0, rgbFixedPrecision = 2, hslFixedPrecision = 2;
@@ -219,10 +221,10 @@
219
221
  }
220
222
  function colorMix(color1, color2, size1, size2) {
221
223
  let rgb1 = color1, rgb2 = color2;
222
- if (!Object.hasOwn(rgb1, "r")) {
224
+ if (!("r" in rgb1)) {
223
225
  rgb1 = hslToRgb(color1);
224
226
  }
225
- if (!Object.hasOwn(rgb2, "r")) {
227
+ if (!("r" in rgb2)) {
226
228
  rgb2 = hslToRgb(color2);
227
229
  }
228
230
  return {
@@ -275,27 +277,33 @@
275
277
  }
276
278
  }
277
279
  function getHslFromAnimation(animation) {
278
- return animation !== undefined
279
- ? {
280
+ return animation === undefined
281
+ ? undefined
282
+ : {
280
283
  h: animation.h.value,
281
284
  s: animation.s.value,
282
285
  l: animation.l.value,
283
- }
284
- : undefined;
286
+ };
285
287
  }
286
288
  function getHslAnimationFromHsl(hsl, animationOptions, reduceFactor) {
287
289
  const resColor = {
288
290
  h: {
289
291
  enable: false,
290
292
  value: hsl.h,
293
+ min: Constants_js_1.hMin,
294
+ max: Constants_js_1.hMax,
291
295
  },
292
296
  s: {
293
297
  enable: false,
294
298
  value: hsl.s,
299
+ min: Constants_js_1.sMin,
300
+ max: Constants_js_1.sMax,
295
301
  },
296
302
  l: {
297
303
  enable: false,
298
304
  value: hsl.l,
305
+ min: Constants_js_1.lMin,
306
+ max: Constants_js_1.lMax,
299
307
  },
300
308
  };
301
309
  if (animationOptions) {
@@ -307,6 +315,8 @@
307
315
  }
308
316
  function setColorAnimation(colorValue, colorAnimation, reduceFactor) {
309
317
  colorValue.enable = colorAnimation.enable;
318
+ colorValue.min = colorAnimation.min;
319
+ colorValue.max = colorAnimation.max;
310
320
  if (colorValue.enable) {
311
321
  colorValue.velocity = ((0, MathUtils_js_1.getRangeValue)(colorAnimation.speed) / Constants_js_1.percentDenominator) * reduceFactor;
312
322
  colorValue.decay = Constants_js_1.decayOffset - (0, MathUtils_js_1.getRangeValue)(colorAnimation.decay);
@@ -326,7 +336,7 @@
326
336
  colorValue.velocity = Constants_js_1.defaultVelocity;
327
337
  }
328
338
  }
329
- function updateColorValue(data, range, decrease, delta) {
339
+ function updateColorValue(data, decrease, delta) {
330
340
  const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;
331
341
  if (!data.enable ||
332
342
  ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {
@@ -339,7 +349,7 @@
339
349
  if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
340
350
  return;
341
351
  }
342
- const offset = data.offset ? (0, MathUtils_js_1.randomInRangeValue)(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = (0, MathUtils_js_1.getRangeMax)(range), min = (0, MathUtils_js_1.getRangeMin)(range);
352
+ const offset = data.offset ? (0, MathUtils_js_1.randomInRangeValue)(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = data.max, min = data.min;
343
353
  if (!decrease || data.status === AnimationStatus_js_1.AnimationStatus.increasing) {
344
354
  data.value += velocity;
345
355
  if (data.value > max) {
@@ -355,8 +365,7 @@
355
365
  }
356
366
  else {
357
367
  data.value -= velocity;
358
- const minValue = 0;
359
- if (data.value < minValue) {
368
+ if (data.value < min) {
360
369
  data.loops ??= 0;
361
370
  data.loops++;
362
371
  data.status = AnimationStatus_js_1.AnimationStatus.increasing;
@@ -371,13 +380,16 @@
371
380
  if (!color) {
372
381
  return;
373
382
  }
374
- const { h, s, l } = color, ranges = {
375
- h: { min: Constants_js_1.hMin, max: Constants_js_1.hMax },
376
- s: { min: Constants_js_1.sMin, max: Constants_js_1.sMax },
377
- l: { min: Constants_js_1.lMin, max: Constants_js_1.lMax },
383
+ const { h, s, l } = color;
384
+ updateColorValue(h, false, delta);
385
+ updateColorValue(s, true, delta);
386
+ updateColorValue(l, true, delta);
387
+ }
388
+ function alterHsl(color, type, value) {
389
+ return {
390
+ h: color.h,
391
+ s: color.s,
392
+ l: color.l + (type === AlterType_js_1.AlterType.darken ? -Constants_js_1.lFactor : Constants_js_1.lFactor) * value,
378
393
  };
379
- updateColorValue(h, ranges.h, false, delta);
380
- updateColorValue(s, ranges.s, true, delta);
381
- updateColorValue(l, ranges.l, true, delta);
382
394
  }
383
395
  });
@@ -12,6 +12,7 @@
12
12
  exports.EventDispatcher = void 0;
13
13
  const Constants_js_1 = require("../Core/Utils/Constants.js");
14
14
  class EventDispatcher {
15
+ _listeners;
15
16
  constructor() {
16
17
  this._listeners = new Map();
17
18
  }
@@ -23,7 +23,9 @@
23
23
  exports.getRangeMax = getRangeMax;
24
24
  exports.setRangeValue = setRangeValue;
25
25
  exports.getDistances = getDistances;
26
+ exports.getDistanceSq = getDistanceSq;
26
27
  exports.getDistance = getDistance;
28
+ exports.checkDistance = checkDistance;
27
29
  exports.degToRad = degToRad;
28
30
  exports.getParticleDirectionAngle = getParticleDirectionAngle;
29
31
  exports.getParticleBaseVelocity = getParticleBaseVelocity;
@@ -57,10 +59,8 @@
57
59
  return getRandom() * (max - min) + min;
58
60
  }
59
61
  function setAnimationFunctions(nextFrame, cancel) {
60
- _animationLoop.nextFrame = (callback) => nextFrame(callback);
61
- _animationLoop.cancel = (handle) => {
62
- cancel(handle);
63
- };
62
+ _animationLoop.nextFrame = nextFrame;
63
+ _animationLoop.cancel = cancel;
64
64
  }
65
65
  function animate(fn) {
66
66
  return _animationLoop.nextFrame(fn);
@@ -104,11 +104,18 @@
104
104
  : setRangeValue(min, max);
105
105
  }
106
106
  function getDistances(pointA, pointB) {
107
- const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y, squareExp = 2;
108
- return { dx: dx, dy: dy, distance: Math.sqrt(dx ** squareExp + dy ** squareExp) };
107
+ const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y;
108
+ return { dx: dx, dy: dy, distance: Math.hypot(dx, dy) };
109
+ }
110
+ function getDistanceSq(pointA, pointB) {
111
+ const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y;
112
+ return dx * dx + dy * dy;
109
113
  }
110
114
  function getDistance(pointA, pointB) {
111
- return getDistances(pointA, pointB).distance;
115
+ return Math.sqrt(getDistanceSq(pointA, pointB));
116
+ }
117
+ function checkDistance(pointA, pointB, distance) {
118
+ return getDistanceSq(pointA, pointB) <= distance * distance;
112
119
  }
113
120
  function degToRad(degrees) {
114
121
  return degrees * degToRadFactor;