@codexo/exojs 0.7.12 → 0.8.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 (219) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/core/Application.d.ts +3 -1
  3. package/dist/esm/core/Application.js +7 -6
  4. package/dist/esm/core/Application.js.map +1 -1
  5. package/dist/esm/core/Scene.d.ts +30 -0
  6. package/dist/esm/core/Scene.js +56 -0
  7. package/dist/esm/core/Scene.js.map +1 -1
  8. package/dist/esm/core/SceneManager.js +2 -2
  9. package/dist/esm/core/SceneManager.js.map +1 -1
  10. package/dist/esm/debug/DebugOverlay.js +2 -2
  11. package/dist/esm/debug/DebugOverlay.js.map +1 -1
  12. package/dist/esm/debug/PointerStackLayer.js +1 -1
  13. package/dist/esm/debug/PointerStackLayer.js.map +1 -1
  14. package/dist/esm/index.js +32 -10
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/input/ArcadeStickGamepadMapping.js +18 -19
  17. package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
  18. package/dist/esm/input/Gamepad.d.ts +164 -62
  19. package/dist/esm/input/Gamepad.js +290 -134
  20. package/dist/esm/input/Gamepad.js.map +1 -1
  21. package/dist/esm/input/GamepadAxis.d.ts +120 -0
  22. package/dist/esm/input/GamepadAxis.js +106 -0
  23. package/dist/esm/input/GamepadAxis.js.map +1 -0
  24. package/dist/esm/input/GamepadButton.d.ts +110 -0
  25. package/dist/esm/input/GamepadButton.js +99 -0
  26. package/dist/esm/input/GamepadButton.js.map +1 -0
  27. package/dist/esm/input/GamepadDefinitions.js +4 -0
  28. package/dist/esm/input/GamepadDefinitions.js.map +1 -1
  29. package/dist/esm/input/GamepadMapping.d.ts +28 -24
  30. package/dist/esm/input/GamepadMapping.js +33 -16
  31. package/dist/esm/input/GamepadMapping.js.map +1 -1
  32. package/dist/esm/input/GamepadPromptLayouts.d.ts +10 -8
  33. package/dist/esm/input/GamepadPromptLayouts.js +21 -20
  34. package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
  35. package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +6 -3
  36. package/dist/esm/input/GenericDualAnalogGamepadMapping.js +55 -46
  37. package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
  38. package/dist/esm/input/InputBinding.d.ts +74 -0
  39. package/dist/esm/input/InputBinding.js +100 -0
  40. package/dist/esm/input/InputBinding.js.map +1 -0
  41. package/dist/esm/input/InputManager.d.ts +79 -33
  42. package/dist/esm/input/InputManager.js +229 -104
  43. package/dist/esm/input/InputManager.js.map +1 -1
  44. package/dist/esm/input/InteractionManager.d.ts +1 -1
  45. package/dist/esm/input/InteractionManager.js +13 -13
  46. package/dist/esm/input/InteractionManager.js.map +1 -1
  47. package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +14 -9
  48. package/dist/esm/input/JoyConLeftGamepadMapping.js +39 -9
  49. package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
  50. package/dist/esm/input/JoyConRightGamepadMapping.d.ts +14 -9
  51. package/dist/esm/input/JoyConRightGamepadMapping.js +35 -9
  52. package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
  53. package/dist/esm/input/Pointer.d.ts +84 -71
  54. package/dist/esm/input/Pointer.js +71 -71
  55. package/dist/esm/input/Pointer.js.map +1 -1
  56. package/dist/esm/input/SteamDeckGamepadMapping.d.ts +18 -0
  57. package/dist/esm/input/SteamDeckGamepadMapping.js +76 -0
  58. package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -0
  59. package/dist/esm/input/index.d.ts +7 -4
  60. package/dist/esm/input/types.d.ts +0 -76
  61. package/dist/esm/input/types.js +1 -80
  62. package/dist/esm/input/types.js.map +1 -1
  63. package/dist/esm/particles/ParticleSystem.d.ts +180 -83
  64. package/dist/esm/particles/ParticleSystem.js +446 -133
  65. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  66. package/dist/esm/particles/distributions/BoxArea.d.ts +17 -0
  67. package/dist/esm/particles/distributions/BoxArea.js +48 -0
  68. package/dist/esm/particles/distributions/BoxArea.js.map +1 -0
  69. package/dist/esm/particles/distributions/CircleArea.d.ts +19 -0
  70. package/dist/esm/particles/distributions/CircleArea.js +33 -0
  71. package/dist/esm/particles/distributions/CircleArea.js.map +1 -0
  72. package/dist/esm/particles/distributions/ConeDirection.d.ts +28 -0
  73. package/dist/esm/particles/distributions/ConeDirection.js +44 -0
  74. package/dist/esm/particles/distributions/ConeDirection.js.map +1 -0
  75. package/dist/esm/particles/distributions/Constant.d.ts +17 -0
  76. package/dist/esm/particles/distributions/Constant.js +35 -0
  77. package/dist/esm/particles/distributions/Constant.js.map +1 -0
  78. package/dist/esm/particles/distributions/Curve.d.ts +30 -0
  79. package/dist/esm/particles/distributions/Curve.js +53 -0
  80. package/dist/esm/particles/distributions/Curve.js.map +1 -0
  81. package/dist/esm/particles/distributions/Distribution.d.ts +45 -0
  82. package/dist/esm/particles/distributions/Gradient.d.ts +40 -0
  83. package/dist/esm/particles/distributions/Gradient.js +72 -0
  84. package/dist/esm/particles/distributions/Gradient.js.map +1 -0
  85. package/dist/esm/particles/distributions/LineSegment.d.ts +15 -0
  86. package/dist/esm/particles/distributions/LineSegment.js +27 -0
  87. package/dist/esm/particles/distributions/LineSegment.js.map +1 -0
  88. package/dist/esm/particles/distributions/Range.d.ts +12 -0
  89. package/dist/esm/particles/distributions/Range.js +19 -0
  90. package/dist/esm/particles/distributions/Range.js.map +1 -0
  91. package/dist/esm/particles/distributions/VectorRange.d.ts +20 -0
  92. package/dist/esm/particles/distributions/VectorRange.js +31 -0
  93. package/dist/esm/particles/distributions/VectorRange.js.map +1 -0
  94. package/dist/esm/particles/distributions/index.d.ts +12 -0
  95. package/dist/esm/particles/gpu/ParticleGpuState.d.ts +57 -0
  96. package/dist/esm/particles/gpu/ParticleGpuState.js +508 -0
  97. package/dist/esm/particles/gpu/ParticleGpuState.js.map +1 -0
  98. package/dist/esm/particles/index.d.ts +2 -10
  99. package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +24 -0
  100. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +60 -0
  101. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -0
  102. package/dist/esm/particles/modules/ApplyForce.d.ts +20 -0
  103. package/dist/esm/particles/modules/ApplyForce.js +48 -0
  104. package/dist/esm/particles/modules/ApplyForce.js.map +1 -0
  105. package/dist/esm/particles/modules/AttractToPoint.d.ts +27 -0
  106. package/dist/esm/particles/modules/AttractToPoint.js +73 -0
  107. package/dist/esm/particles/modules/AttractToPoint.js.map +1 -0
  108. package/dist/esm/particles/modules/BurstSpawn.d.ts +53 -0
  109. package/dist/esm/particles/modules/BurstSpawn.js +94 -0
  110. package/dist/esm/particles/modules/BurstSpawn.js.map +1 -0
  111. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +22 -0
  112. package/dist/esm/particles/modules/ColorOverLifetime.js +65 -0
  113. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -0
  114. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +27 -0
  115. package/dist/esm/particles/modules/ColorOverSpeed.js +86 -0
  116. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -0
  117. package/dist/esm/particles/modules/DeathModule.d.ts +24 -0
  118. package/dist/esm/particles/modules/DeathModule.js +25 -0
  119. package/dist/esm/particles/modules/DeathModule.js.map +1 -0
  120. package/dist/esm/particles/modules/Drag.d.ts +20 -0
  121. package/dist/esm/particles/modules/Drag.js +45 -0
  122. package/dist/esm/particles/modules/Drag.js.map +1 -0
  123. package/dist/esm/particles/modules/OrbitalForce.d.ts +28 -0
  124. package/dist/esm/particles/modules/OrbitalForce.js +65 -0
  125. package/dist/esm/particles/modules/OrbitalForce.js.map +1 -0
  126. package/dist/esm/particles/modules/RateSpawn.d.ts +41 -0
  127. package/dist/esm/particles/modules/RateSpawn.js +76 -0
  128. package/dist/esm/particles/modules/RateSpawn.js.map +1 -0
  129. package/dist/esm/particles/modules/RepelFromPoint.d.ts +24 -0
  130. package/dist/esm/particles/modules/RepelFromPoint.js +76 -0
  131. package/dist/esm/particles/modules/RepelFromPoint.js.map +1 -0
  132. package/dist/esm/particles/modules/RotateOverLifetime.d.ts +20 -0
  133. package/dist/esm/particles/modules/RotateOverLifetime.js +43 -0
  134. package/dist/esm/particles/modules/RotateOverLifetime.js.map +1 -0
  135. package/dist/esm/particles/modules/ScaleOverLifetime.d.ts +26 -0
  136. package/dist/esm/particles/modules/ScaleOverLifetime.js +59 -0
  137. package/dist/esm/particles/modules/ScaleOverLifetime.js.map +1 -0
  138. package/dist/esm/particles/modules/SpawnModule.d.ts +30 -0
  139. package/dist/esm/particles/modules/SpawnModule.js +31 -0
  140. package/dist/esm/particles/modules/SpawnModule.js.map +1 -0
  141. package/dist/esm/particles/modules/SpawnOnDeath.d.ts +24 -0
  142. package/dist/esm/particles/modules/SpawnOnDeath.js +47 -0
  143. package/dist/esm/particles/modules/SpawnOnDeath.js.map +1 -0
  144. package/dist/esm/particles/modules/Turbulence.d.ts +30 -0
  145. package/dist/esm/particles/modules/Turbulence.js +122 -0
  146. package/dist/esm/particles/modules/Turbulence.js.map +1 -0
  147. package/dist/esm/particles/modules/UpdateModule.d.ts +95 -0
  148. package/dist/esm/particles/modules/UpdateModule.js +66 -0
  149. package/dist/esm/particles/modules/UpdateModule.js.map +1 -0
  150. package/dist/esm/particles/modules/VelocityOverLifetime.d.ts +30 -0
  151. package/dist/esm/particles/modules/VelocityOverLifetime.js +84 -0
  152. package/dist/esm/particles/modules/VelocityOverLifetime.js.map +1 -0
  153. package/dist/esm/particles/modules/WgslContribution.d.ts +81 -0
  154. package/dist/esm/particles/modules/WgslContribution.js +34 -0
  155. package/dist/esm/particles/modules/WgslContribution.js.map +1 -0
  156. package/dist/esm/particles/modules/index.d.ts +22 -0
  157. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +9 -14
  158. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +90 -61
  159. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
  160. package/dist/esm/rendering/webgl2/glsl/particle.vert.js +1 -1
  161. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +9 -0
  162. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +107 -23
  163. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  164. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.d.ts +52 -0
  165. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +29 -0
  166. package/dist/esm/rendering/webgpu/compute/index.d.ts +3 -0
  167. package/dist/esm/resources/CacheFirstStrategy.d.ts +7 -4
  168. package/dist/esm/resources/CacheFirstStrategy.js +11 -8
  169. package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
  170. package/dist/esm/resources/CacheStrategy.d.ts +14 -6
  171. package/dist/esm/resources/Loader.d.ts +8 -3
  172. package/dist/esm/resources/Loader.js +19 -37
  173. package/dist/esm/resources/Loader.js.map +1 -1
  174. package/dist/esm/resources/NetworkOnlyStrategy.d.ts +3 -0
  175. package/dist/esm/resources/NetworkOnlyStrategy.js +8 -3
  176. package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
  177. package/dist/esm/resources/factories/ImageFactory.d.ts +2 -2
  178. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  179. package/dist/esm/resources/factories/TextureFactory.d.ts +2 -2
  180. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  181. package/dist/esm/resources/factories/VttFactory.d.ts +3 -3
  182. package/dist/esm/resources/factories/VttFactory.js +83 -6
  183. package/dist/esm/resources/factories/VttFactory.js.map +1 -1
  184. package/dist/exo.esm.js +4028 -1518
  185. package/dist/exo.esm.js.map +1 -1
  186. package/package.json +2 -1
  187. package/dist/esm/input/GamepadChannels.d.ts +0 -47
  188. package/dist/esm/input/GamepadChannels.js +0 -53
  189. package/dist/esm/input/GamepadChannels.js.map +0 -1
  190. package/dist/esm/input/GamepadControl.d.ts +0 -33
  191. package/dist/esm/input/GamepadControl.js +0 -42
  192. package/dist/esm/input/GamepadControl.js.map +0 -1
  193. package/dist/esm/input/Input.d.ts +0 -52
  194. package/dist/esm/input/Input.js +0 -90
  195. package/dist/esm/input/Input.js.map +0 -1
  196. package/dist/esm/particles/Particle.d.ts +0 -77
  197. package/dist/esm/particles/Particle.js +0 -143
  198. package/dist/esm/particles/Particle.js.map +0 -1
  199. package/dist/esm/particles/ParticleProperties.d.ts +0 -29
  200. package/dist/esm/particles/affectors/ColorAffector.d.ts +0 -30
  201. package/dist/esm/particles/affectors/ColorAffector.js +0 -55
  202. package/dist/esm/particles/affectors/ColorAffector.js.map +0 -1
  203. package/dist/esm/particles/affectors/ForceAffector.d.ts +0 -24
  204. package/dist/esm/particles/affectors/ForceAffector.js +0 -39
  205. package/dist/esm/particles/affectors/ForceAffector.js.map +0 -1
  206. package/dist/esm/particles/affectors/ParticleAffector.d.ts +0 -19
  207. package/dist/esm/particles/affectors/ScaleAffector.d.ts +0 -23
  208. package/dist/esm/particles/affectors/ScaleAffector.js +0 -38
  209. package/dist/esm/particles/affectors/ScaleAffector.js.map +0 -1
  210. package/dist/esm/particles/affectors/TorqueAffector.d.ts +0 -23
  211. package/dist/esm/particles/affectors/TorqueAffector.js +0 -37
  212. package/dist/esm/particles/affectors/TorqueAffector.js.map +0 -1
  213. package/dist/esm/particles/emitters/ParticleEmitter.d.ts +0 -19
  214. package/dist/esm/particles/emitters/ParticleOptions.d.ts +0 -62
  215. package/dist/esm/particles/emitters/ParticleOptions.js +0 -120
  216. package/dist/esm/particles/emitters/ParticleOptions.js.map +0 -1
  217. package/dist/esm/particles/emitters/UniversalEmitter.d.ts +0 -40
  218. package/dist/esm/particles/emitters/UniversalEmitter.js +0 -68
  219. package/dist/esm/particles/emitters/UniversalEmitter.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleSystem.js","sources":["../../../../src/particles/ParticleSystem.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ParticleSystem.js","sources":["../../../../src/particles/ParticleSystem.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Vector } from '@/math/Vector';
2
+ import type { Distribution } from './Distribution';
3
+ /**
4
+ * Random point inside an axis-aligned box. With `mode: 'edge'` the result
5
+ * lies on the perimeter (uniform along all four edges combined); with
6
+ * `mode: 'volume'` (default) it's uniformly distributed across the area.
7
+ */
8
+ export declare class BoxArea implements Distribution<Vector> {
9
+ minX: number;
10
+ maxX: number;
11
+ minY: number;
12
+ maxY: number;
13
+ mode: 'volume' | 'edge';
14
+ private readonly _scratch;
15
+ constructor(minX: number, maxX: number, minY: number, maxY: number, mode?: 'volume' | 'edge');
16
+ sample(out?: Vector): Vector;
17
+ }
@@ -0,0 +1,48 @@
1
+ import { Vector } from '../../math/Vector.js';
2
+
3
+ /**
4
+ * Random point inside an axis-aligned box. With `mode: 'edge'` the result
5
+ * lies on the perimeter (uniform along all four edges combined); with
6
+ * `mode: 'volume'` (default) it's uniformly distributed across the area.
7
+ */
8
+ class BoxArea {
9
+ minX;
10
+ maxX;
11
+ minY;
12
+ maxY;
13
+ mode;
14
+ _scratch = new Vector();
15
+ constructor(minX, maxX, minY, maxY, mode = 'volume') {
16
+ this.minX = minX;
17
+ this.maxX = maxX;
18
+ this.minY = minY;
19
+ this.maxY = maxY;
20
+ this.mode = mode;
21
+ }
22
+ sample(out = this._scratch) {
23
+ if (this.mode === 'volume') {
24
+ out.set(this.minX + Math.random() * (this.maxX - this.minX), this.minY + Math.random() * (this.maxY - this.minY));
25
+ return out;
26
+ }
27
+ const w = this.maxX - this.minX;
28
+ const h = this.maxY - this.minY;
29
+ const perimeter = (w + h) * 2;
30
+ const t = Math.random() * perimeter;
31
+ if (t < w) {
32
+ out.set(this.minX + t, this.minY);
33
+ }
34
+ else if (t < w + h) {
35
+ out.set(this.maxX, this.minY + (t - w));
36
+ }
37
+ else if (t < w * 2 + h) {
38
+ out.set(this.maxX - (t - w - h), this.maxY);
39
+ }
40
+ else {
41
+ out.set(this.minX, this.maxY - (t - w * 2 - h));
42
+ }
43
+ return out;
44
+ }
45
+ }
46
+
47
+ export { BoxArea };
48
+ //# sourceMappingURL=BoxArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxArea.js","sources":["../../../../../src/particles/distributions/BoxArea.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;;AAIG;MACU,OAAO,CAAA;AAIL,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,IAAA;AAPM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;IAExC,WAAA,CACW,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAA,GAA0B,QAAQ,EAAA;QAJlC,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;IACZ;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxB,YAAA,GAAG,CAAC,GAAG,CACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EACnD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CACtD;AAED,YAAA,OAAO,GAAG;QACd;QAEA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC/B,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS;AAEnC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QACrC;AAAO,aAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C;aAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QAC/C;aAAO;YACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,GAAG;IACd;AACH;;;;"}
@@ -0,0 +1,19 @@
1
+ import { Vector } from '@/math/Vector';
2
+ import type { Distribution } from './Distribution';
3
+ /**
4
+ * Random point on or inside a circle of radius `radius`, centred at
5
+ * `(centerX, centerY)`. With `mode: 'edge'` the result lies exactly on the
6
+ * circumference; with `mode: 'volume'` (default) it lies anywhere in the
7
+ * disk, with uniform area density (sqrt-of-random-radius distribution).
8
+ *
9
+ * Use as a spawn-position distribution for circular emitters.
10
+ */
11
+ export declare class CircleArea implements Distribution<Vector> {
12
+ centerX: number;
13
+ centerY: number;
14
+ radius: number;
15
+ mode: 'volume' | 'edge';
16
+ private readonly _scratch;
17
+ constructor(centerX: number, centerY: number, radius: number, mode?: 'volume' | 'edge');
18
+ sample(out?: Vector): Vector;
19
+ }
@@ -0,0 +1,33 @@
1
+ import { Vector } from '../../math/Vector.js';
2
+
3
+ const tau = Math.PI * 2;
4
+ /**
5
+ * Random point on or inside a circle of radius `radius`, centred at
6
+ * `(centerX, centerY)`. With `mode: 'edge'` the result lies exactly on the
7
+ * circumference; with `mode: 'volume'` (default) it lies anywhere in the
8
+ * disk, with uniform area density (sqrt-of-random-radius distribution).
9
+ *
10
+ * Use as a spawn-position distribution for circular emitters.
11
+ */
12
+ class CircleArea {
13
+ centerX;
14
+ centerY;
15
+ radius;
16
+ mode;
17
+ _scratch = new Vector();
18
+ constructor(centerX, centerY, radius, mode = 'volume') {
19
+ this.centerX = centerX;
20
+ this.centerY = centerY;
21
+ this.radius = radius;
22
+ this.mode = mode;
23
+ }
24
+ sample(out = this._scratch) {
25
+ const angle = Math.random() * tau;
26
+ const r = this.mode === 'edge' ? this.radius : this.radius * Math.sqrt(Math.random());
27
+ out.set(this.centerX + Math.cos(angle) * r, this.centerY + Math.sin(angle) * r);
28
+ return out;
29
+ }
30
+ }
31
+
32
+ export { CircleArea };
33
+ //# sourceMappingURL=CircleArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircleArea.js","sources":["../../../../../src/particles/distributions/CircleArea.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AAEvB;;;;;;;AAOG;MACU,UAAU,CAAA;AAIR,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,MAAA;AACA,IAAA,IAAA;AANM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;AAExC,IAAA,WAAA,CACW,OAAe,EACf,OAAe,EACf,MAAc,EACd,OAA0B,QAAQ,EAAA;QAHlC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,IAAI,GAAJ,IAAI;IACZ;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAErF,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE/E,QAAA,OAAO,GAAG;IACd;AACH;;;;"}
@@ -0,0 +1,28 @@
1
+ import { Vector } from '@/math/Vector';
2
+ import type { Distribution } from './Distribution';
3
+ /**
4
+ * Random unit vector inside a cone, scaled by a speed magnitude.
5
+ *
6
+ * The cone is centred on `directionAngle` (in radians, 0 = +X, π/2 = +Y for
7
+ * screen-down coordinates) and spans `±halfAngle` radians around it. Speed
8
+ * is sampled uniformly in `[minSpeed, maxSpeed]`.
9
+ *
10
+ * Use for emission cones, explosions, fountain spread — anywhere the
11
+ * direction has a preferred axis with bounded variance.
12
+ *
13
+ * @example
14
+ * // Upward fountain with ±15° spread, 200-300 px/s:
15
+ * const up = new ConeDirection(-Math.PI / 2, Math.PI / 12, 200, 300);
16
+ * up.sample(particle.velocity);
17
+ */
18
+ export declare class ConeDirection implements Distribution<Vector> {
19
+ directionAngle: number;
20
+ halfAngle: number;
21
+ minSpeed: number;
22
+ maxSpeed: number;
23
+ private readonly _scratch;
24
+ constructor(directionAngle: number, halfAngle: number, minSpeed: number, maxSpeed: number);
25
+ sample(out?: Vector): Vector;
26
+ /** Convenience: omnidirectional emission (full circle, 0..2π). */
27
+ static omni(minSpeed: number, maxSpeed: number): ConeDirection;
28
+ }
@@ -0,0 +1,44 @@
1
+ import { Vector } from '../../math/Vector.js';
2
+
3
+ const tau = Math.PI * 2;
4
+ /**
5
+ * Random unit vector inside a cone, scaled by a speed magnitude.
6
+ *
7
+ * The cone is centred on `directionAngle` (in radians, 0 = +X, π/2 = +Y for
8
+ * screen-down coordinates) and spans `±halfAngle` radians around it. Speed
9
+ * is sampled uniformly in `[minSpeed, maxSpeed]`.
10
+ *
11
+ * Use for emission cones, explosions, fountain spread — anywhere the
12
+ * direction has a preferred axis with bounded variance.
13
+ *
14
+ * @example
15
+ * // Upward fountain with ±15° spread, 200-300 px/s:
16
+ * const up = new ConeDirection(-Math.PI / 2, Math.PI / 12, 200, 300);
17
+ * up.sample(particle.velocity);
18
+ */
19
+ class ConeDirection {
20
+ directionAngle;
21
+ halfAngle;
22
+ minSpeed;
23
+ maxSpeed;
24
+ _scratch = new Vector();
25
+ constructor(directionAngle, halfAngle, minSpeed, maxSpeed) {
26
+ this.directionAngle = directionAngle;
27
+ this.halfAngle = halfAngle;
28
+ this.minSpeed = minSpeed;
29
+ this.maxSpeed = maxSpeed;
30
+ }
31
+ sample(out = this._scratch) {
32
+ const angle = this.directionAngle + (Math.random() * 2 - 1) * this.halfAngle;
33
+ const speed = this.minSpeed + Math.random() * (this.maxSpeed - this.minSpeed);
34
+ out.set(Math.cos(angle) * speed, Math.sin(angle) * speed);
35
+ return out;
36
+ }
37
+ /** Convenience: omnidirectional emission (full circle, 0..2π). */
38
+ static omni(minSpeed, maxSpeed) {
39
+ return new ConeDirection(0, tau / 2, minSpeed, maxSpeed);
40
+ }
41
+ }
42
+
43
+ export { ConeDirection };
44
+ //# sourceMappingURL=ConeDirection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConeDirection.js","sources":["../../../../../src/particles/distributions/ConeDirection.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AAEvB;;;;;;;;;;;;;;AAcG;MACU,aAAa,CAAA;AAIX,IAAA,cAAA;AACA,IAAA,SAAA;AACA,IAAA,QAAA;AACA,IAAA,QAAA;AANM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;AAExC,IAAA,WAAA,CACW,cAAsB,EACtB,SAAiB,EACjB,QAAgB,EAChB,QAAgB,EAAA;QAHhB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAEzD,QAAA,OAAO,GAAG;IACd;;AAGO,IAAA,OAAO,IAAI,CAAC,QAAgB,EAAE,QAAgB,EAAA;AACjD,QAAA,OAAO,IAAI,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC5D;AACH;;;;"}
@@ -0,0 +1,17 @@
1
+ import type { Distribution, LifetimeFunction } from './Distribution';
2
+ /**
3
+ * Distribution that always returns the same value. Implements both
4
+ * {@link Distribution} and {@link LifetimeFunction} so it can stand in
5
+ * wherever a randomized or time-parameterised value is expected.
6
+ *
7
+ * For mutable types (Vector, Color, ...) the constant value is copied into
8
+ * `out` if provided, otherwise the constructor's value is returned directly.
9
+ * Mutating that returned reference mutates the distribution's source.
10
+ */
11
+ export declare class Constant<T> implements Distribution<T>, LifetimeFunction<T> {
12
+ value: T;
13
+ constructor(value: T);
14
+ sample(out?: T): T;
15
+ evaluate(_t: number, out?: T): T;
16
+ private _copyOrReturn;
17
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Distribution that always returns the same value. Implements both
3
+ * {@link Distribution} and {@link LifetimeFunction} so it can stand in
4
+ * wherever a randomized or time-parameterised value is expected.
5
+ *
6
+ * For mutable types (Vector, Color, ...) the constant value is copied into
7
+ * `out` if provided, otherwise the constructor's value is returned directly.
8
+ * Mutating that returned reference mutates the distribution's source.
9
+ */
10
+ class Constant {
11
+ value;
12
+ constructor(value) {
13
+ this.value = value;
14
+ }
15
+ sample(out) {
16
+ return this._copyOrReturn(out);
17
+ }
18
+ evaluate(_t, out) {
19
+ return this._copyOrReturn(out);
20
+ }
21
+ _copyOrReturn(out) {
22
+ if (out === undefined || out === null) {
23
+ return this.value;
24
+ }
25
+ const target = out;
26
+ if (typeof target.copy === 'function') {
27
+ target.copy(this.value);
28
+ return out;
29
+ }
30
+ return this.value;
31
+ }
32
+ }
33
+
34
+ export { Constant };
35
+ //# sourceMappingURL=Constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Constant.js","sources":["../../../../../src/particles/distributions/Constant.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;;;AAQG;MACU,QAAQ,CAAA;AACS,IAAA,KAAA;AAA1B,IAAA,WAAA,CAA0B,KAAQ,EAAA;QAAR,IAAA,CAAA,KAAK,GAAL,KAAK;IAAM;AAE9B,IAAA,MAAM,CAAC,GAAO,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IAClC;IAEO,QAAQ,CAAC,EAAU,EAAE,GAAO,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IAClC;AAEQ,IAAA,aAAa,CAAC,GAAO,EAAA;QACzB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;YACnC,OAAO,IAAI,CAAC,KAAK;QACrB;QAEA,MAAM,MAAM,GAAG,GAAqC;AAEpD,QAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACnC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAEvB,YAAA,OAAO,GAAG;QACd;QAEA,OAAO,IAAI,CAAC,KAAK;IACrB;AACH;;;;"}
@@ -0,0 +1,30 @@
1
+ import type { LifetimeFunction } from './Distribution';
2
+ /** A keyframe in a {@link Curve}: value `v` at lifetime ratio `t` in `[0, 1]`. */
3
+ export interface CurveKey {
4
+ t: number;
5
+ v: number;
6
+ }
7
+ /**
8
+ * Piecewise-linear keyframe curve sampled by lifetime ratio `t` in `[0, 1]`.
9
+ *
10
+ * Keyframes are stored sorted by `t` and clamped at the endpoints — sampling
11
+ * outside the keyframe range returns the nearest endpoint value. The
12
+ * implementation tracks the last accessed segment so monotonically advancing
13
+ * `t` (the typical case for per-particle lifetime sampling) costs O(1)
14
+ * amortized per call instead of O(log n).
15
+ *
16
+ * @example
17
+ * // Scale pulses up then down over lifetime:
18
+ * const sizeCurve = new Curve([
19
+ * { t: 0, v: 0.2 },
20
+ * { t: 0.4, v: 1.5 },
21
+ * { t: 1, v: 0.0 },
22
+ * ]);
23
+ * scale.x = scale.y = sizeCurve.evaluate(particle.elapsedRatio);
24
+ */
25
+ export declare class Curve implements LifetimeFunction<number> {
26
+ private readonly _keys;
27
+ private _lastSegment;
28
+ constructor(keys: ReadonlyArray<CurveKey>);
29
+ evaluate(t: number): number;
30
+ }
@@ -0,0 +1,53 @@
1
+ const compareT = (a, b) => a.t - b.t;
2
+ /**
3
+ * Piecewise-linear keyframe curve sampled by lifetime ratio `t` in `[0, 1]`.
4
+ *
5
+ * Keyframes are stored sorted by `t` and clamped at the endpoints — sampling
6
+ * outside the keyframe range returns the nearest endpoint value. The
7
+ * implementation tracks the last accessed segment so monotonically advancing
8
+ * `t` (the typical case for per-particle lifetime sampling) costs O(1)
9
+ * amortized per call instead of O(log n).
10
+ *
11
+ * @example
12
+ * // Scale pulses up then down over lifetime:
13
+ * const sizeCurve = new Curve([
14
+ * { t: 0, v: 0.2 },
15
+ * { t: 0.4, v: 1.5 },
16
+ * { t: 1, v: 0.0 },
17
+ * ]);
18
+ * scale.x = scale.y = sizeCurve.evaluate(particle.elapsedRatio);
19
+ */
20
+ class Curve {
21
+ _keys;
22
+ _lastSegment = 0;
23
+ constructor(keys) {
24
+ if (keys.length === 0) {
25
+ throw new Error('Curve requires at least one keyframe.');
26
+ }
27
+ this._keys = [...keys].sort(compareT);
28
+ }
29
+ evaluate(t) {
30
+ const keys = this._keys;
31
+ const last = keys.length - 1;
32
+ if (t <= keys[0].t)
33
+ return keys[0].v;
34
+ if (t >= keys[last].t)
35
+ return keys[last].v;
36
+ // Cache-friendly forward search: most callers sweep t monotonically.
37
+ let segment = this._lastSegment;
38
+ if (t < keys[segment].t) {
39
+ segment = 0;
40
+ }
41
+ while (segment < last && t > keys[segment + 1].t) {
42
+ segment++;
43
+ }
44
+ this._lastSegment = segment;
45
+ const a = keys[segment];
46
+ const b = keys[segment + 1];
47
+ const ratio = (t - a.t) / (b.t - a.t);
48
+ return a.v + (b.v - a.v) * ratio;
49
+ }
50
+ }
51
+
52
+ export { Curve };
53
+ //# sourceMappingURL=Curve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Curve.js","sources":["../../../../../src/particles/distributions/Curve.ts"],"sourcesContent":[null],"names":[],"mappings":"AAQA,MAAM,QAAQ,GAAG,CAAC,CAAW,EAAE,CAAW,KAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;AAiBG;MACU,KAAK,CAAA;AACG,IAAA,KAAK;IACd,YAAY,GAAG,CAAC;AAExB,IAAA,WAAA,CAAmB,IAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC5D;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;AAEO,IAAA,QAAQ,CAAC,CAAS,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAE5B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAG1C,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY;QAE/B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO,GAAG,CAAC;QACf;AAEA,QAAA,OAAO,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAE3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAErC,QAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK;IACpC;AACH;;;;"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Value distribution sampled at particle spawn time. Each `sample()` call
3
+ * may return a different value — used to randomize spawn properties
4
+ * (lifetime, position, velocity, scale, tint, ...) without per-particle
5
+ * subclassing.
6
+ *
7
+ * Implementations come in two flavours:
8
+ *
9
+ * - **Stateless / scalar** (e.g. {@link Constant}, {@link Range}) just
10
+ * return a `T` directly.
11
+ * - **Mutable-target** (Vector / Color distributions) accept an optional
12
+ * `out` parameter and write into it in place. Pass your own scratch
13
+ * instance to avoid per-spawn heap allocations; omit it to use the
14
+ * distribution's internal scratch (only valid until the next call).
15
+ *
16
+ * @example
17
+ * const lifetime = new Range(0.5, 1.5); // seconds, uniform
18
+ * const velocity = new VectorRange(-50, 50, -200, -100);
19
+ * const tint = new Gradient([
20
+ * { t: 0, color: Color.white },
21
+ * { t: 0.7, color: Color.yellow },
22
+ * { t: 1, color: Color.transparent },
23
+ * ]);
24
+ *
25
+ * for (let i = 0; i < count; i++) {
26
+ * particle.totalLifetime = lifetime.sample();
27
+ * velocity.sample(particle.velocity);
28
+ * // tint is applied per-frame by ColorOverLifetime, not at spawn.
29
+ * }
30
+ */
31
+ export interface Distribution<T> {
32
+ sample(out?: T): T;
33
+ }
34
+ /**
35
+ * Lifetime-parameterised function that produces a deterministic `T` for a
36
+ * given lifetime ratio `t` in `[0, 1]`. Used by per-frame update modules
37
+ * that interpolate over particle lifetime — `ColorOverLifetime` (Gradient),
38
+ * `ScaleOverLifetime` (Curve), etc.
39
+ *
40
+ * Mutable-target rule: same as {@link Distribution} — pass your own scratch
41
+ * via `out` for hot loops, omit for one-off calls.
42
+ */
43
+ export interface LifetimeFunction<T> {
44
+ evaluate(t: number, out?: T): T;
45
+ }
@@ -0,0 +1,40 @@
1
+ import { Color } from '@/core/Color';
2
+ import type { LifetimeFunction } from './Distribution';
3
+ /** A keyframe in a {@link Gradient}: color at lifetime ratio `t` in `[0, 1]`. */
4
+ export interface GradientKey {
5
+ t: number;
6
+ color: Color;
7
+ }
8
+ /**
9
+ * Piecewise-linear color gradient sampled by lifetime ratio `t` in `[0, 1]`.
10
+ * Keyframes are stored sorted by `t`; sampling outside the range returns
11
+ * the nearest endpoint color. Like {@link Curve}, the last accessed segment
12
+ * is cached so monotonically advancing `t` is O(1) amortised.
13
+ *
14
+ * Two output paths:
15
+ * - {@link evaluate} — writes into a `Color` instance (own scratch by default).
16
+ * - {@link evaluateRgba} — returns the packed `0xAABBGGRR` u32 directly,
17
+ * skipping the Color object. Use this in tight per-particle inner loops
18
+ * that write into a `Uint32Array` instance buffer.
19
+ *
20
+ * @example
21
+ * const fire = new Gradient([
22
+ * { t: 0, color: new Color(1, 1, 1, 1) }, // white
23
+ * { t: 0.3, color: new Color(1, 0.7, 0.1, 1) }, // orange
24
+ * { t: 0.7, color: new Color(0.4, 0.1, 0, 0.6) },
25
+ * { t: 1, color: new Color(0, 0, 0, 0) }, // transparent black
26
+ * ]);
27
+ */
28
+ export declare class Gradient implements LifetimeFunction<Color> {
29
+ private readonly _keys;
30
+ private readonly _scratch;
31
+ private _lastSegment;
32
+ constructor(keys: ReadonlyArray<GradientKey>);
33
+ evaluate(t: number, out?: Color): Color;
34
+ /**
35
+ * Returns the gradient sample at `t` packed into a single 32-bit RGBA
36
+ * integer (`0xAABBGGRR`). Avoids the {@link Color} object on the hot
37
+ * path; suitable for direct write into a `Uint32Array` instance buffer.
38
+ */
39
+ evaluateRgba(t: number): number;
40
+ }
@@ -0,0 +1,72 @@
1
+ import { Color } from '../../core/Color.js';
2
+
3
+ const compareT = (a, b) => a.t - b.t;
4
+ /**
5
+ * Piecewise-linear color gradient sampled by lifetime ratio `t` in `[0, 1]`.
6
+ * Keyframes are stored sorted by `t`; sampling outside the range returns
7
+ * the nearest endpoint color. Like {@link Curve}, the last accessed segment
8
+ * is cached so monotonically advancing `t` is O(1) amortised.
9
+ *
10
+ * Two output paths:
11
+ * - {@link evaluate} — writes into a `Color` instance (own scratch by default).
12
+ * - {@link evaluateRgba} — returns the packed `0xAABBGGRR` u32 directly,
13
+ * skipping the Color object. Use this in tight per-particle inner loops
14
+ * that write into a `Uint32Array` instance buffer.
15
+ *
16
+ * @example
17
+ * const fire = new Gradient([
18
+ * { t: 0, color: new Color(1, 1, 1, 1) }, // white
19
+ * { t: 0.3, color: new Color(1, 0.7, 0.1, 1) }, // orange
20
+ * { t: 0.7, color: new Color(0.4, 0.1, 0, 0.6) },
21
+ * { t: 1, color: new Color(0, 0, 0, 0) }, // transparent black
22
+ * ]);
23
+ */
24
+ class Gradient {
25
+ _keys;
26
+ _scratch = new Color();
27
+ _lastSegment = 0;
28
+ constructor(keys) {
29
+ if (keys.length === 0) {
30
+ throw new Error('Gradient requires at least one keyframe.');
31
+ }
32
+ this._keys = [...keys].map((k) => ({ t: k.t, color: k.color.clone() })).sort(compareT);
33
+ }
34
+ evaluate(t, out = this._scratch) {
35
+ const keys = this._keys;
36
+ const last = keys.length - 1;
37
+ if (t <= keys[0].t) {
38
+ out.copy(keys[0].color);
39
+ return out;
40
+ }
41
+ if (t >= keys[last].t) {
42
+ out.copy(keys[last].color);
43
+ return out;
44
+ }
45
+ let segment = this._lastSegment;
46
+ if (t < keys[segment].t) {
47
+ segment = 0;
48
+ }
49
+ while (segment < last && t > keys[segment + 1].t) {
50
+ segment++;
51
+ }
52
+ this._lastSegment = segment;
53
+ const a = keys[segment].color;
54
+ const b = keys[segment + 1].color;
55
+ const ka = keys[segment].t;
56
+ const kb = keys[segment + 1].t;
57
+ const ratio = (t - ka) / (kb - ka);
58
+ out.set(a.r + (b.r - a.r) * ratio, a.g + (b.g - a.g) * ratio, a.b + (b.b - a.b) * ratio, a.a + (b.a - a.a) * ratio);
59
+ return out;
60
+ }
61
+ /**
62
+ * Returns the gradient sample at `t` packed into a single 32-bit RGBA
63
+ * integer (`0xAABBGGRR`). Avoids the {@link Color} object on the hot
64
+ * path; suitable for direct write into a `Uint32Array` instance buffer.
65
+ */
66
+ evaluateRgba(t) {
67
+ return this.evaluate(t, this._scratch).toRgba();
68
+ }
69
+ }
70
+
71
+ export { Gradient };
72
+ //# sourceMappingURL=Gradient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gradient.js","sources":["../../../../../src/particles/distributions/Gradient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Vector } from '@/math/Vector';
2
+ import type { Distribution } from './Distribution';
3
+ /**
4
+ * Random point on a line segment between `(x0, y0)` and `(x1, y1)`. Uniform
5
+ * parameter distribution: `t = Math.random()` then `lerp(start, end, t)`.
6
+ */
7
+ export declare class LineSegment implements Distribution<Vector> {
8
+ x0: number;
9
+ y0: number;
10
+ x1: number;
11
+ y1: number;
12
+ private readonly _scratch;
13
+ constructor(x0: number, y0: number, x1: number, y1: number);
14
+ sample(out?: Vector): Vector;
15
+ }
@@ -0,0 +1,27 @@
1
+ import { Vector } from '../../math/Vector.js';
2
+
3
+ /**
4
+ * Random point on a line segment between `(x0, y0)` and `(x1, y1)`. Uniform
5
+ * parameter distribution: `t = Math.random()` then `lerp(start, end, t)`.
6
+ */
7
+ class LineSegment {
8
+ x0;
9
+ y0;
10
+ x1;
11
+ y1;
12
+ _scratch = new Vector();
13
+ constructor(x0, y0, x1, y1) {
14
+ this.x0 = x0;
15
+ this.y0 = y0;
16
+ this.x1 = x1;
17
+ this.y1 = y1;
18
+ }
19
+ sample(out = this._scratch) {
20
+ const t = Math.random();
21
+ out.set(this.x0 + (this.x1 - this.x0) * t, this.y0 + (this.y1 - this.y0) * t);
22
+ return out;
23
+ }
24
+ }
25
+
26
+ export { LineSegment };
27
+ //# sourceMappingURL=LineSegment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineSegment.js","sources":["../../../../../src/particles/distributions/LineSegment.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;AAGG;MACU,WAAW,CAAA;AAIT,IAAA,EAAA;AACA,IAAA,EAAA;AACA,IAAA,EAAA;AACA,IAAA,EAAA;AANM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;AAExC,IAAA,WAAA,CACW,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EAAA;QAHV,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,EAAE,GAAF,EAAE;IACV;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;AACrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AAEvB,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAE7E,QAAA,OAAO,GAAG;IACd;AACH;;;;"}
@@ -0,0 +1,12 @@
1
+ import type { Distribution } from './Distribution';
2
+ /**
3
+ * Uniform random number in `[min, max]`. Each `sample()` returns a fresh
4
+ * roll; the bounds are inclusive on both ends (modulo the rounding bias
5
+ * inherent to `Math.random()`).
6
+ */
7
+ export declare class Range implements Distribution<number> {
8
+ min: number;
9
+ max: number;
10
+ constructor(min: number, max: number);
11
+ sample(): number;
12
+ }