three-nebula 10.0.3 → 11.1.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 (247) hide show
  1. package/.claude/rules/no-coauthor.md +4 -0
  2. package/CHANGELOG.md +33 -0
  3. package/dist/three-nebula.cjs +109 -0
  4. package/dist/three-nebula.cjs.map +1 -0
  5. package/dist/three-nebula.mjs +2968 -0
  6. package/dist/three-nebula.mjs.map +1 -0
  7. package/dist/three-nebula.umd.js +109 -0
  8. package/dist/three-nebula.umd.js.map +1 -0
  9. package/package.json +32 -56
  10. package/specs/01-emitter-hierarchy.md +200 -0
  11. package/specs/02-determinism-scrubbing.md +188 -0
  12. package/specs/03-sound-renderer.md +183 -0
  13. package/specs/04-schema-versioning.md +140 -0
  14. package/specs/05-content-addressed-assets.md +288 -0
  15. package/specs/README.md +80 -0
  16. package/build/cjs/behaviour/Alpha.js +0 -189
  17. package/build/cjs/behaviour/Attraction.js +0 -189
  18. package/build/cjs/behaviour/Behaviour.js +0 -253
  19. package/build/cjs/behaviour/Collision.js +0 -146
  20. package/build/cjs/behaviour/Color.js +0 -148
  21. package/build/cjs/behaviour/CrossZone.js +0 -141
  22. package/build/cjs/behaviour/Force.js +0 -126
  23. package/build/cjs/behaviour/Gravity.js +0 -78
  24. package/build/cjs/behaviour/RandomDrift.js +0 -153
  25. package/build/cjs/behaviour/Repulsion.js +0 -123
  26. package/build/cjs/behaviour/Rotate.js +0 -265
  27. package/build/cjs/behaviour/Scale.js +0 -177
  28. package/build/cjs/behaviour/Spring.js +0 -133
  29. package/build/cjs/behaviour/constants.js +0 -28
  30. package/build/cjs/behaviour/index.js +0 -112
  31. package/build/cjs/behaviour/types.js +0 -33
  32. package/build/cjs/constants/index.js +0 -61
  33. package/build/cjs/core/Particle.js +0 -390
  34. package/build/cjs/core/Pool.js +0 -203
  35. package/build/cjs/core/System.js +0 -366
  36. package/build/cjs/core/constants.js +0 -163
  37. package/build/cjs/core/fromJSON.js +0 -128
  38. package/build/cjs/core/fromJSONAsync.js +0 -239
  39. package/build/cjs/core/index.js +0 -32
  40. package/build/cjs/core/three/Euler.js +0 -233
  41. package/build/cjs/core/three/Math.js +0 -91
  42. package/build/cjs/core/three/Matrix4.js +0 -745
  43. package/build/cjs/core/three/Quaternion.js +0 -451
  44. package/build/cjs/core/three/Vector3.js +0 -464
  45. package/build/cjs/core/three/constants.js +0 -298
  46. package/build/cjs/core/three/index.js +0 -48
  47. package/build/cjs/core/types.js +0 -13
  48. package/build/cjs/debug/Debug.js +0 -209
  49. package/build/cjs/debug/constants.js +0 -19
  50. package/build/cjs/debug/index.js +0 -24
  51. package/build/cjs/debug/log.js +0 -38
  52. package/build/cjs/ease/index.js +0 -149
  53. package/build/cjs/emitter/Emitter.js +0 -791
  54. package/build/cjs/emitter/FollowEmitter.js +0 -146
  55. package/build/cjs/emitter/constants.js +0 -20
  56. package/build/cjs/emitter/index.js +0 -24
  57. package/build/cjs/emitter/types.js +0 -11
  58. package/build/cjs/events/EventDispatcher.js +0 -105
  59. package/build/cjs/events/constants.js +0 -23
  60. package/build/cjs/events/index.js +0 -27
  61. package/build/cjs/index.js +0 -151
  62. package/build/cjs/initializer/Body.js +0 -122
  63. package/build/cjs/initializer/BodySprite.js +0 -146
  64. package/build/cjs/initializer/Initializer.js +0 -109
  65. package/build/cjs/initializer/InitializerUtil.js +0 -54
  66. package/build/cjs/initializer/Life.js +0 -106
  67. package/build/cjs/initializer/Mass.js +0 -101
  68. package/build/cjs/initializer/Position.js +0 -152
  69. package/build/cjs/initializer/Radius.js +0 -118
  70. package/build/cjs/initializer/Rate.js +0 -150
  71. package/build/cjs/initializer/Texture.js +0 -139
  72. package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
  73. package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
  74. package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
  75. package/build/cjs/initializer/Velocity/Velocity.js +0 -94
  76. package/build/cjs/initializer/Velocity/index.js +0 -32
  77. package/build/cjs/initializer/constants.js +0 -43
  78. package/build/cjs/initializer/index.js +0 -100
  79. package/build/cjs/initializer/types.js +0 -35
  80. package/build/cjs/math/ArraySpan.js +0 -103
  81. package/build/cjs/math/Box.js +0 -46
  82. package/build/cjs/math/ColorSpan.js +0 -113
  83. package/build/cjs/math/MathUtils.js +0 -57
  84. package/build/cjs/math/Polar3D.js +0 -115
  85. package/build/cjs/math/Span.js +0 -88
  86. package/build/cjs/math/Vector3D.js +0 -76
  87. package/build/cjs/math/constants.js +0 -35
  88. package/build/cjs/math/index.js +0 -122
  89. package/build/cjs/math/integration.js +0 -59
  90. package/build/cjs/math/types.js +0 -19
  91. package/build/cjs/renderer/BaseRenderer.js +0 -108
  92. package/build/cjs/renderer/CustomRenderer.js +0 -65
  93. package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -350
  94. package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
  95. package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
  96. package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
  97. package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -364
  98. package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
  99. package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
  100. package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
  101. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -53
  102. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
  103. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
  104. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
  105. package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
  106. package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
  107. package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
  108. package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -43
  109. package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
  110. package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
  111. package/build/cjs/renderer/GPURenderer/index.js +0 -97
  112. package/build/cjs/renderer/MeshRenderer.js +0 -136
  113. package/build/cjs/renderer/SpriteRenderer.js +0 -63
  114. package/build/cjs/renderer/index.js +0 -40
  115. package/build/cjs/renderer/types.js +0 -21
  116. package/build/cjs/utils/ColorUtil.js +0 -39
  117. package/build/cjs/utils/PUID.js +0 -26
  118. package/build/cjs/utils/THREEUtil.js +0 -40
  119. package/build/cjs/utils/Util.js +0 -69
  120. package/build/cjs/utils/index.js +0 -61
  121. package/build/cjs/utils/uid.js +0 -14
  122. package/build/cjs/zone/BoxZone.js +0 -178
  123. package/build/cjs/zone/LineZone.js +0 -101
  124. package/build/cjs/zone/MeshZone.js +0 -101
  125. package/build/cjs/zone/PointZone.js +0 -99
  126. package/build/cjs/zone/ScreenZone.js +0 -164
  127. package/build/cjs/zone/SphereZone.js +0 -155
  128. package/build/cjs/zone/Zone.js +0 -172
  129. package/build/cjs/zone/index.js +0 -56
  130. package/build/cjs/zone/types.js +0 -21
  131. package/build/esm/behaviour/Alpha.js +0 -134
  132. package/build/esm/behaviour/Attraction.js +0 -135
  133. package/build/esm/behaviour/Behaviour.js +0 -215
  134. package/build/esm/behaviour/Collision.js +0 -100
  135. package/build/esm/behaviour/Color.js +0 -101
  136. package/build/esm/behaviour/CrossZone.js +0 -82
  137. package/build/esm/behaviour/Force.js +0 -83
  138. package/build/esm/behaviour/Gravity.js +0 -40
  139. package/build/esm/behaviour/RandomDrift.js +0 -97
  140. package/build/esm/behaviour/Repulsion.js +0 -81
  141. package/build/esm/behaviour/Rotate.js +0 -214
  142. package/build/esm/behaviour/Scale.js +0 -131
  143. package/build/esm/behaviour/Spring.js +0 -90
  144. package/build/esm/behaviour/constants.js +0 -11
  145. package/build/esm/behaviour/index.js +0 -14
  146. package/build/esm/behaviour/types.js +0 -14
  147. package/build/esm/constants/index.js +0 -42
  148. package/build/esm/core/Particle.js +0 -357
  149. package/build/esm/core/Pool.js +0 -161
  150. package/build/esm/core/System.js +0 -320
  151. package/build/esm/core/constants.js +0 -127
  152. package/build/esm/core/fromJSON.js +0 -107
  153. package/build/esm/core/fromJSONAsync.js +0 -210
  154. package/build/esm/core/index.js +0 -4
  155. package/build/esm/core/three/Euler.js +0 -224
  156. package/build/esm/core/three/Math.js +0 -84
  157. package/build/esm/core/three/Matrix4.js +0 -739
  158. package/build/esm/core/three/Quaternion.js +0 -445
  159. package/build/esm/core/three/Vector3.js +0 -457
  160. package/build/esm/core/three/constants.js +0 -148
  161. package/build/esm/core/three/index.js +0 -5
  162. package/build/esm/core/types.js +0 -4
  163. package/build/esm/debug/Debug.js +0 -195
  164. package/build/esm/debug/constants.js +0 -7
  165. package/build/esm/debug/index.js +0 -3
  166. package/build/esm/debug/log.js +0 -31
  167. package/build/esm/ease/index.js +0 -113
  168. package/build/esm/emitter/Emitter.js +0 -701
  169. package/build/esm/emitter/FollowEmitter.js +0 -97
  170. package/build/esm/emitter/constants.js +0 -7
  171. package/build/esm/emitter/index.js +0 -3
  172. package/build/esm/emitter/types.js +0 -3
  173. package/build/esm/events/EventDispatcher.js +0 -82
  174. package/build/esm/events/constants.js +0 -9
  175. package/build/esm/events/index.js +0 -4
  176. package/build/esm/index.js +0 -13
  177. package/build/esm/initializer/Body.js +0 -83
  178. package/build/esm/initializer/BodySprite.js +0 -108
  179. package/build/esm/initializer/Initializer.js +0 -84
  180. package/build/esm/initializer/InitializerUtil.js +0 -48
  181. package/build/esm/initializer/Life.js +0 -66
  182. package/build/esm/initializer/Mass.js +0 -60
  183. package/build/esm/initializer/Position.js +0 -98
  184. package/build/esm/initializer/Radius.js +0 -75
  185. package/build/esm/initializer/Rate.js +0 -107
  186. package/build/esm/initializer/Texture.js +0 -101
  187. package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
  188. package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
  189. package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
  190. package/build/esm/initializer/Velocity/Velocity.js +0 -52
  191. package/build/esm/initializer/Velocity/index.js +0 -4
  192. package/build/esm/initializer/constants.js +0 -26
  193. package/build/esm/initializer/index.js +0 -11
  194. package/build/esm/initializer/types.js +0 -15
  195. package/build/esm/math/ArraySpan.js +0 -62
  196. package/build/esm/math/Box.js +0 -25
  197. package/build/esm/math/ColorSpan.js +0 -71
  198. package/build/esm/math/MathUtils.js +0 -48
  199. package/build/esm/math/Polar3D.js +0 -81
  200. package/build/esm/math/Span.js +0 -63
  201. package/build/esm/math/Vector3D.js +0 -34
  202. package/build/esm/math/constants.js +0 -24
  203. package/build/esm/math/index.js +0 -10
  204. package/build/esm/math/integration.js +0 -47
  205. package/build/esm/math/types.js +0 -7
  206. package/build/esm/renderer/BaseRenderer.js +0 -78
  207. package/build/esm/renderer/CustomRenderer.js +0 -23
  208. package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -331
  209. package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -23
  210. package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
  211. package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -33
  212. package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -349
  213. package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -20
  214. package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
  215. package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -30
  216. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -27
  217. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
  218. package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
  219. package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
  220. package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
  221. package/build/esm/renderer/GPURenderer/common/index.js +0 -4
  222. package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
  223. package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -24
  224. package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
  225. package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
  226. package/build/esm/renderer/GPURenderer/index.js +0 -57
  227. package/build/esm/renderer/MeshRenderer.js +0 -94
  228. package/build/esm/renderer/SpriteRenderer.js +0 -26
  229. package/build/esm/renderer/index.js +0 -5
  230. package/build/esm/renderer/types.js +0 -8
  231. package/build/esm/utils/ColorUtil.js +0 -32
  232. package/build/esm/utils/PUID.js +0 -19
  233. package/build/esm/utils/THREEUtil.js +0 -31
  234. package/build/esm/utils/Util.js +0 -60
  235. package/build/esm/utils/index.js +0 -13
  236. package/build/esm/utils/uid.js +0 -3
  237. package/build/esm/zone/BoxZone.js +0 -133
  238. package/build/esm/zone/LineZone.js +0 -61
  239. package/build/esm/zone/MeshZone.js +0 -60
  240. package/build/esm/zone/PointZone.js +0 -59
  241. package/build/esm/zone/ScreenZone.js +0 -116
  242. package/build/esm/zone/SphereZone.js +0 -113
  243. package/build/esm/zone/Zone.js +0 -141
  244. package/build/esm/zone/index.js +0 -7
  245. package/build/esm/zone/types.js +0 -8
  246. package/build/three-nebula.js +0 -2
  247. package/build/three-nebula.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ Never add AI attribution to git commits or PR descriptions. This includes:
2
+ - "Co-Authored-By" lines
3
+ - "Generated with Claude Code" or similar attribution lines
4
+ - Any other AI/assistant attribution or branding
package/CHANGELOG.md CHANGED
@@ -5,6 +5,39 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## `v11.1.0` - 2026-07-17
9
+
10
+ ### Changed
11
+
12
+ - Migrated the build from Babel/webpack to Vite, and the tests from Mocha to Vitest
13
+
14
+ ### Fixed
15
+
16
+ - `fromJSON` / `fromJSONAsync` now read the emitter `damping` property, which was previously ignored and silently reverted to the default on load
17
+
18
+ ## `v11.0.0` - 2026-07-14
19
+
20
+ ### Changed
21
+
22
+ - Upgraded supported `three` from r127 to r185. Rendered output differs on modern three (sRGB output, physically-correct lighting) — validate your scenes
23
+ - Upgraded `uuid` from v3 to v11
24
+ - CI now runs on Node 20 / 22 (dropped 12 / 14) and no longer depends on the unmaintained `bundlesize`
25
+
26
+ ### Added
27
+
28
+ - Deterministic visual-regression harness (`vr/`) that diffs the example renders against a committed golden master
29
+
30
+ ### Fixed
31
+
32
+ - Ported the Snow example off three's removed `Geometry.vertices` API
33
+
34
+ ## `v10.0.3` - 2021-11-05
35
+
36
+ ### Changed
37
+
38
+ - All current security vulnerabilities in dependencies have been resolved
39
+ - Node v10 support dropped in dev due to webpack / babel upgrades, this version has been removed from CI
40
+
8
41
  ## `v10.0.2` - 2021-08-02
9
42
 
10
43
  ### Fixed
@@ -0,0 +1,109 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),u=`Behaviour`,d=`Alpha`,f=`Attraction`,p=`Collision`,m=`Color`,h=`CrossZone`,g=`Force`,_=`Gravity`,v=`RandomDrift`,y=`Repulsion`,b=`Rotate`,x=`Scale`,S=`Spring`,C=`Initializer`,w=`Body`,T=`BodySprite`,E=`Texture`,D=`Life`,O=`Mass`,k=`Position`,A=`Rotation`,j=`Radius`,M=`VectorVelocity`,N=`PolarVelocity`,P=`RadialVelocity`,ee=`Rate`,F=[T,E],te=`Zone`,ne=`BoxZone`,re=`LineZone`,ie=`MeshZone`,ae=`PointZone`,oe=`ScreenZone`,se=`SphereZone`,ce=`BaseRenderer`,le=`CustomRenderer`,ue=`SpriteRenderer`,de=`MeshRenderer`,fe=`GPURenderer`,pe=`MobileGPURenderer`,me=`DesktopGPURenderer`,I=3.142,L=I/180,he=`euler`,ge=()=>!(!process||!process.env||!process.env.NODE_ENV||process.env.NODE_ENV!==`development`),R={easeLinear:function(e){return e},easeInQuad:function(e){return e**2},easeOutQuad:function(e){return-((e-1)**2-1)},easeInOutQuad:function(e){return(e/=.5)<1?.5*e**2:-.5*((e-=2)*e-2)},easeInCubic:function(e){return e**3},easeOutCubic:function(e){return(e-1)**3+1},easeInOutCubic:function(e){return(e/=.5)<1?.5*e**3:.5*((e-2)**3+2)},easeInQuart:function(e){return e**4},easeOutQuart:function(e){return-((e-1)**4-1)},easeInOutQuart:function(e){return(e/=.5)<1?.5*e**4:-.5*((e-=2)*e**3-2)},easeInSine:function(e){return-Math.cos(I/2*e)+1},easeOutSine:function(e){return Math.sin(I/2*e)},easeInOutSine:function(e){return-.5*(Math.cos(I*e)-1)},easeInExpo:function(e){return e===0?0:2**(10*(e-1))},easeOutExpo:function(e){return e===1?1:-(2**(-10*e))+1},easeInOutExpo:function(e){return e===0?0:e===1?1:(e/=.5)<1?.5*2**(10*(e-1)):.5*(-(2**(-10*--e))+2)},easeInCirc:function(e){return-(Math.sqrt(1-e*e)-1)},easeOutCirc:function(e){return Math.sqrt(1-(e-1)**2)},easeInOutCirc:function(e){return(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},easeInBack:function(e){var t=1.70158;return e*e*((t+1)*e-t)},easeOutBack:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},easeInOutBack:function(e){var t=1.70158;return(e/=.5)<1?.5*(e*e*(((t*=1.525)+1)*e-t)):.5*((e-=2)*e*(((t*=1.525)+1)*e+t)+2)}},{easeLinear:_e,easeInQuad:ve,easeOutQuad:ye,easeInOutQuad:be,easeInCubic:xe,easeOutCubic:Se,easeInOutCubic:Ce,easeInQuart:we,easeOutQuart:Te,easeInOutQuart:Ee,easeInSine:De,easeOutSine:Oe,easeInOutSine:ke,easeInExpo:Ae,easeOutExpo:je,easeInOutExpo:Me,easeInCirc:Ne,easeOutCirc:Pe,easeInOutCirc:Fe,easeInBack:Ie,easeOutBack:Le,easeInOutBack:Re}=R,ze=e=>R[e]?R[e]:R.easeLinear,z=e=>R[e]?R[e]:R.easeLinear,Be=1/0,Ve=_e,He=.0167,Ue=[k,A,D,j,O,w,T,E,N,P,M],We=[d,f,m,h,g,_,v,y,b,x,S],Ge=[ne,re,ie,ae,se],Ke={getRGB:function(e){var t={};if(typeof e==`number`)r=Math.floor(e),t.r=(e>>16&255)/255,t.g=(e>>8&255)/255,t.b=(e&255)/255;else if(typeof e==`string`){var n;if(n=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(e))t.r=Math.min(255,parseInt(n[1],10))/255,t.g=Math.min(255,parseInt(n[2],10))/255,t.b=Math.min(255,parseInt(n[3],10))/255;else if(n=/^\#([A-Fa-f0-9]+)$/.exec(e)){var r=n[1];t.r=parseInt(r.charAt(0)+r.charAt(1),16)/255,t.g=parseInt(r.charAt(2)+r.charAt(3),16)/255,t.b=parseInt(r.charAt(4)+r.charAt(5),16)/255}}else t.r=e.r,t.g=e.g,t.b=e.b;return t}},qe={_id:0,_uids:new Map,getNewId:function(){return`PUID_${++this._id}`},id:function(e){if(this._uids.has(e))return this._uids.get(e);let t=this.getNewId();return this._uids.set(e,t),t}},Je={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:(function(){for(var e=[],t=0;t<256;t++)e[t]=(t<16?`0`:``)+t.toString(16);return function(){var t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(e[t&255]+e[t>>8&255]+e[t>>16&255]+e[t>>24&255]+`-`+e[n&255]+e[n>>8&255]+`-`+e[n>>16&15|64]+e[n>>24&255]+`-`+e[r&63|128]+e[r>>8&255]+`-`+e[r>>16&255]+e[r>>24&255]+e[i&255]+e[i>>8&255]+e[i>>16&255]+e[i>>24&255]).toUpperCase()}})(),clamp:function(e,t,n){return Math.max(t,Math.min(n,e))},euclideanModulo:function(e,t){return(e%t+t)%t},mapLinear:function(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)},lerp:function(e,t,n){return(1-n)*e+n*t},smoothstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))},smootherstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},degToRad:function(e){return e*Je.DEG2RAD},radToDeg:function(e){return e*Je.RAD2DEG},isPowerOfTwo:function(e){return(e&e-1)==0&&e!==0},ceilPowerOfTwo:function(e){return 2**Math.ceil(Math.log(e)/Math.LN2)},floorPowerOfTwo:function(e){return 2**Math.floor(Math.log(e)/Math.LN2)}};function Ye(e,t,n,r){this._x=e||0,this._y=t||0,this._z=n||0,this._w=r===void 0?1:r}Object.assign(Ye,{slerp:function(e,t,n,r){return n.copy(e).slerp(t,r)},slerpFlat:function(e,t,n,r,i,a,o){var s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){var h=1-o,g=s*d+c*f+l*p+u*m,_=g>=0?1:-1,v=1-g*g;if(v>2**-52){var y=Math.sqrt(v),b=Math.atan2(y,g*_);h=Math.sin(h*b)/y,o=Math.sin(o*b)/y}var x=o*_;if(s=s*h+d*x,c=c*h+f*x,l=l*h+p*x,u=u*h+m*x,h===1-o){var S=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=S,c*=S,l*=S,u*=S}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}}),Object.defineProperties(Ye.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e,this._onChangeCallback()}},w:{get:function(){return this._w},set:function(e){this._w=e,this._onChangeCallback()}}}),Object.assign(Ye.prototype,{isQuaternion:!0,set:function(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this},setFromEuler:function(e,t){if(!(e&&e.isEuler))throw Error(`THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.`);var n=e._x,r=e._y,i=e._z,a=e.order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);return a===`XYZ`?(this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p):a===`YXZ`?(this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p):a===`ZXY`?(this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p):a===`ZYX`?(this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p):a===`YZX`?(this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p):a===`XZY`&&(this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p),t!==!1&&this._onChangeCallback(),this},setFromAxisAngle:function(e,t){var n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this},setFromRotationMatrix:function(e){var t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u,f;return d>0?(f=.5/Math.sqrt(d+1),this._w=.25/f,this._x=(l-s)*f,this._y=(i-c)*f,this._z=(a-r)*f):n>o&&n>u?(f=2*Math.sqrt(1+n-o-u),this._w=(l-s)/f,this._x=.25*f,this._y=(r+a)/f,this._z=(i+c)/f):o>u?(f=2*Math.sqrt(1+o-n-u),this._w=(i-c)/f,this._x=(r+a)/f,this._y=.25*f,this._z=(s+l)/f):(f=2*Math.sqrt(1+u-n-o),this._w=(a-r)/f,this._x=(i+c)/f,this._y=(s+l)/f,this._z=.25*f),this._onChangeCallback(),this},setFromUnitVectors:function(e,t){var n=1e-6,r=e.dot(t)+1;return r<n?(r=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=r):(this._x=0,this._y=-e.z,this._z=e.y,this._w=r)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=r),this.normalize()},angleTo:function(e){return 2*Math.acos(Math.abs(Je.clamp(this.dot(e),-1,1)))},rotateTowards:function(e,t){var n=this.angleTo(e);if(n===0)return this;var r=Math.min(1,t/n);return this.slerp(e,r),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this},dot:function(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this},multiply:function(e,t){return t===void 0?this.multiplyQuaternions(this,e):(console.warn(`THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.`),this.multiplyQuaternions(e,t))},premultiply:function(e){return this.multiplyQuaternions(e,this)},multiplyQuaternions:function(e,t){var n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this},slerp:function(e,t){if(t===0)return this;if(t===1)return this.copy(e);var n=this._x,r=this._y,i=this._z,a=this._w,o=a*e._w+n*e._x+r*e._y+i*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;var s=1-o*o;if(s<=2**-52){var c=1-t;return this._w=c*a+t*this._w,this._x=c*n+t*this._x,this._y=c*r+t*this._y,this._z=c*i+t*this._z,this.normalize(),this._onChangeCallback(),this}var l=Math.sqrt(s),u=Math.atan2(l,o),d=Math.sin((1-t)*u)/l,f=Math.sin(t*u)/l;return this._w=a*d+this._w*f,this._x=n*d+this._x*f,this._y=r*d+this._y*f,this._z=i*d+this._z*f,this._onChangeCallback(),this},equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w},fromArray:function(e,t){return t===void 0&&(t=0),this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this},toArray:function(e,t){return e===void 0&&(e=[]),t===void 0&&(t=0),e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e},_onChange:function(e){return this._onChangeCallback=e,this},_onChangeCallback:function(){}});function B(e,t,n){this.x=e||0,this.y=t||0,this.z=n||0}Object.assign(B.prototype,{isVector3:!0,set:function(e,t,n){return this.x=e,this.y=t,this.z=n,this},setScalar:function(e){return this.x=e,this.y=e,this.z=e,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setZ:function(e){return this.z=e,this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this},add:function(e,t){return t===void 0?(this.x+=e.x,this.y+=e.y,this.z+=e.z,this):(console.warn(`THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.`),this.addVectors(e,t))},addScalar:function(e){return this.x+=e,this.y+=e,this.z+=e,this},addVectors:function(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this},addScaledVector:function(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this},sub:function(e,t){return t===void 0?(this.x-=e.x,this.y-=e.y,this.z-=e.z,this):(console.warn(`THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.`),this.subVectors(e,t))},subScalar:function(e){return this.x-=e,this.y-=e,this.z-=e,this},subVectors:function(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this},multiply:function(e,t){return t===void 0?(this.x*=e.x,this.y*=e.y,this.z*=e.z,this):(console.warn(`THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.`),this.multiplyVectors(e,t))},multiplyScalar:function(e){return this.x*=e,this.y*=e,this.z*=e,this},multiplyVectors:function(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this},applyEuler:function(){var e=new Ye;return function(t){return t&&t.isEuler||console.error(`THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.`),this.applyQuaternion(e.setFromEuler(t))}}(),applyAxisAngle:function(){var e=new Ye;return function(t,n){return this.applyQuaternion(e.setFromAxisAngle(t,n))}}(),applyMatrix3:function(e){var t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this},applyMatrix4:function(e){var t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this},applyQuaternion:function(e){var t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=s*t+a*r-o*n,l=s*n+o*t-i*r,u=s*r+i*n-a*t,d=-i*t-a*n-o*r;return this.x=c*s+d*-i+l*-o-u*-a,this.y=l*s+d*-a+u*-i-c*-o,this.z=u*s+d*-o+c*-a-l*-i,this},project:function(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)},unproject:function(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)},transformDirection:function(e){var t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()},divide:function(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this},divideScalar:function(e){return this.multiplyScalar(1/e)},min:function(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this},max:function(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this},clamp:function(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this},clampScalar:function(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this},clampLength:function(e,t){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(e){return this.x*e.x+this.y*e.y+this.z*e.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this},lerpVectors:function(e,t,n){return this.subVectors(t,e).multiplyScalar(n).add(e)},cross:function(e,t){return t===void 0?this.crossVectors(this,e):(console.warn(`THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.`),this.crossVectors(e,t))},crossVectors:function(e,t){var n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this},projectOnVector:function(e){var t=e.dot(this)/e.lengthSq();return this.copy(e).multiplyScalar(t)},projectOnPlane:function(){var e=new B;return function(t){return e.copy(this).projectOnVector(t),this.sub(e)}}(),reflect:function(){var e=new B;return function(t){return this.sub(e.copy(t).multiplyScalar(2*this.dot(t)))}}(),angleTo:function(e){var t=this.dot(e)/Math.sqrt(this.lengthSq()*e.lengthSq());return Math.acos(Je.clamp(t,-1,1))},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)},setFromSpherical:function(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)},setFromSphericalCoords:function(e,t,n){var r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this},setFromCylindrical:function(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)},setFromCylindricalCoords:function(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this},setFromMatrixPosition:function(e){var t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this},setFromMatrixScale:function(e){var t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this},setFromMatrixColumn:function(e,t){return this.fromArray(e.elements,t*4)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z},fromArray:function(e,t){return t===void 0&&(t=0),this.x=e[t],this.y=e[t+1],this.z=e[t+2],this},toArray:function(e,t){return e===void 0&&(e=[]),t===void 0&&(t=0),e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e},fromBufferAttribute:function(e,t,n){return n!==void 0&&console.warn(`THREE.Vector3: offset has been removed from .fromBufferAttribute().`),this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}});function Xe(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error(`THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.`)}Object.assign(Xe.prototype,{isMatrix4:!0,set:function(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){var g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return new Xe().fromArray(this.elements)},copy:function(e){var t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this},copyPosition:function(e){var t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this},extractBasis:function(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this},extractRotation:function(){var e=new B;return function(t){var n=this.elements,r=t.elements,i=1/e.setFromMatrixColumn(t,0).length(),a=1/e.setFromMatrixColumn(t,1).length(),o=1/e.setFromMatrixColumn(t,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[3]=0,n[4]=r[4]*a,n[5]=r[5]*a,n[6]=r[6]*a,n[7]=0,n[8]=r[8]*o,n[9]=r[9]*o,n[10]=r[10]*o,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}}(),makeRotationFromEuler:function(e){e&&e.isEuler||console.error(`THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.`);var t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){var d=a*l,f=a*u,p=o*l,m=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=f+p*c,t[5]=d-m*c,t[9]=-o*s,t[2]=m-d*c,t[6]=p+f*c,t[10]=a*s}else if(e.order===`YXZ`){var h=s*l,g=s*u,_=c*l,v=c*u;t[0]=h+v*o,t[4]=_*o-g,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=g*o-_,t[6]=v+h*o,t[10]=a*s}else if(e.order===`ZXY`){var h=s*l,g=s*u,_=c*l,v=c*u;t[0]=h-v*o,t[4]=-a*u,t[8]=_+g*o,t[1]=g+_*o,t[5]=a*l,t[9]=v-h*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){var d=a*l,f=a*u,p=o*l,m=o*u;t[0]=s*l,t[4]=p*c-f,t[8]=d*c+m,t[1]=s*u,t[5]=m*c+d,t[9]=f*c-p,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){var y=a*s,b=a*c,x=o*s,S=o*c;t[0]=s*l,t[4]=S-y*u,t[8]=x*u+b,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=b*u+x,t[10]=y-S*u}else if(e.order===`XZY`){var y=a*s,b=a*c,x=o*s,S=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=y*u+S,t[5]=a*l,t[9]=b*u-x,t[2]=x*u-b,t[6]=o*l,t[10]=S*u+y}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this},makeRotationFromQuaternion:function(){var e=new B(0,0,0),t=new B(1,1,1);return function(n){return this.compose(e,n,t)}}(),lookAt:function(){var e=new B,t=new B,n=new B;return function(r,i,a){var o=this.elements;return n.subVectors(r,i),n.lengthSq()===0&&(n.z=1),n.normalize(),e.crossVectors(a,n),e.lengthSq()===0&&(Math.abs(a.z)===1?n.x+=1e-4:n.z+=1e-4,n.normalize(),e.crossVectors(a,n)),e.normalize(),t.crossVectors(n,e),o[0]=e.x,o[4]=t.x,o[8]=n.x,o[1]=e.y,o[5]=t.y,o[9]=n.y,o[2]=e.z,o[6]=t.z,o[10]=n.z,this}}(),multiply:function(e,t){return t===void 0?this.multiplyMatrices(this,e):(console.warn(`THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.`),this.multiplyMatrices(e,t))},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],j=r[10],M=r[14],N=r[3],P=r[7],ee=r[11],F=r[15];return i[0]=a*x+o*T+s*k+c*N,i[4]=a*S+o*E+s*A+c*P,i[8]=a*C+o*D+s*j+c*ee,i[12]=a*w+o*O+s*M+c*F,i[1]=l*x+u*T+d*k+f*N,i[5]=l*S+u*E+d*A+f*P,i[9]=l*C+u*D+d*j+f*ee,i[13]=l*w+u*O+d*M+f*F,i[2]=p*x+m*T+h*k+g*N,i[6]=p*S+m*E+h*A+g*P,i[10]=p*C+m*D+h*j+g*ee,i[14]=p*w+m*O+h*M+g*F,i[3]=_*x+v*T+y*k+b*N,i[7]=_*S+v*E+y*A+b*P,i[11]=_*C+v*D+y*j+b*ee,i[15]=_*w+v*O+y*M+b*F,this},multiplyScalar:function(e){var t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this},applyToBufferAttribute:function(){var e=new B;return function(t){for(var n=0,r=t.count;n<r;n++)e.x=t.getX(n),e.y=t.getY(n),e.z=t.getZ(n),e.applyMatrix4(this),t.setXYZ(n,e.x,e.y,e.z);return t}}(),determinant:function(){var e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15];return p*(+i*s*u-r*c*u-i*o*d+n*c*d+r*o*f-n*s*f)+m*(+t*s*f-t*c*d+i*a*d-r*a*f+r*c*l-i*s*l)+h*(+t*c*u-t*o*f-i*a*u+n*a*f+i*o*l-n*c*l)+g*(-r*o*l-t*s*u+t*o*d+r*a*u-n*a*d+n*s*l)},transpose:function(){var e=this.elements,t=e[1];return e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this},setPosition:function(e,t,n){var r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this},getInverse:function(e,t){var n=this.elements,r=e.elements,i=r[0],a=r[1],o=r[2],s=r[3],c=r[4],l=r[5],u=r[6],d=r[7],f=r[8],p=r[9],m=r[10],h=r[11],g=r[12],_=r[13],v=r[14],y=r[15],b=p*v*d-_*m*d+_*u*h-l*v*h-p*u*y+l*m*y,x=g*m*d-f*v*d-g*u*h+c*v*h+f*u*y-c*m*y,S=f*_*d-g*p*d+g*l*h-c*_*h-f*l*y+c*p*y,C=g*p*u-f*_*u-g*l*m+c*_*m+f*l*v-c*p*v,w=i*b+a*x+o*S+s*C;if(w===0){var T=`THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0`;if(t===!0)throw Error(T);return console.warn(T),this.identity()}var E=1/w;return n[0]=b*E,n[1]=(_*m*s-p*v*s-_*o*h+a*v*h+p*o*y-a*m*y)*E,n[2]=(l*v*s-_*u*s+_*o*d-a*v*d-l*o*y+a*u*y)*E,n[3]=(p*u*s-l*m*s-p*o*d+a*m*d+l*o*h-a*u*h)*E,n[4]=x*E,n[5]=(f*v*s-g*m*s+g*o*h-i*v*h-f*o*y+i*m*y)*E,n[6]=(g*u*s-c*v*s-g*o*d+i*v*d+c*o*y-i*u*y)*E,n[7]=(c*m*s-f*u*s+f*o*d-i*m*d-c*o*h+i*u*h)*E,n[8]=S*E,n[9]=(g*p*s-f*_*s-g*a*h+i*_*h+f*a*y-i*p*y)*E,n[10]=(c*_*s-g*l*s+g*a*d-i*_*d-c*a*y+i*l*y)*E,n[11]=(f*l*s-c*p*s-f*a*d+i*p*d+c*a*h-i*l*h)*E,n[12]=C*E,n[13]=(f*_*o-g*p*o+g*a*m-i*_*m-f*a*v+i*p*v)*E,n[14]=(g*l*o-c*_*o-g*a*u+i*_*u+c*a*v-i*l*v)*E,n[15]=(c*p*o-f*l*o+f*a*u-i*p*u-c*a*m+i*l*m)*E,this},scale:function(e){var t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this},getMaxScaleOnAxis:function(){var e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))},makeTranslation:function(e,t,n){return this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this},makeRotationX:function(e){var t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this},makeRotationY:function(e){var t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this},makeRotationZ:function(e){var t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(e,t){var n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this},makeScale:function(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this},makeShear:function(e,t,n){return this.set(1,t,n,0,e,1,n,0,e,t,1,0,0,0,0,1),this},compose:function(e,t,n){var r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this},decompose:function(){var e=new B,t=new Xe;return function(n,r,i){var a=this.elements,o=e.set(a[0],a[1],a[2]).length(),s=e.set(a[4],a[5],a[6]).length(),c=e.set(a[8],a[9],a[10]).length();this.determinant()<0&&(o=-o),n.x=a[12],n.y=a[13],n.z=a[14],t.copy(this);var l=1/o,u=1/s,d=1/c;return t.elements[0]*=l,t.elements[1]*=l,t.elements[2]*=l,t.elements[4]*=u,t.elements[5]*=u,t.elements[6]*=u,t.elements[8]*=d,t.elements[9]*=d,t.elements[10]*=d,r.setFromRotationMatrix(t),i.x=o,i.y=s,i.z=c,this}}(),makePerspective:function(e,t,n,r,i,a){a===void 0&&console.warn(`THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.`);var o=this.elements,s=2*i/(t-e),c=2*i/(n-r),l=(t+e)/(t-e),u=(n+r)/(n-r),d=-(a+i)/(a-i),f=-2*a*i/(a-i);return o[0]=s,o[4]=0,o[8]=l,o[12]=0,o[1]=0,o[5]=c,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=d,o[14]=f,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this},makeOrthographic:function(e,t,n,r,i,a){var o=this.elements,s=1/(t-e),c=1/(n-r),l=1/(a-i),u=(t+e)*s,d=(n+r)*c,f=(a+i)*l;return o[0]=2*s,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*c,o[9]=0,o[13]=-d,o[2]=0,o[6]=0,o[10]=-2*l,o[14]=-f,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this},equals:function(e){for(var t=this.elements,n=e.elements,r=0;r<16;r++)if(t[r]!==n[r])return!1;return!0},fromArray:function(e,t){t===void 0&&(t=0);for(var n=0;n<16;n++)this.elements[n]=e[n+t];return this},toArray:function(e,t){e===void 0&&(e=[]),t===void 0&&(t=0);var n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}});function V(e,t,n,r){this._x=e||0,this._y=t||0,this._z=n||0,this._order=r||V.DefaultOrder}V.RotationOrders=[`XYZ`,`YZX`,`ZXY`,`XZY`,`YXZ`,`ZYX`],V.DefaultOrder=`XYZ`,Object.defineProperties(V.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e,this._onChangeCallback()}},order:{get:function(){return this._order},set:function(e){this._order=e,this._onChangeCallback()}}}),Object.assign(V.prototype,{isEuler:!0,set:function(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._order=r||this._order,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this},setFromRotationMatrix:function(e,t,n){var r=Je.clamp,i=e.elements,a=i[0],o=i[4],s=i[8],c=i[1],l=i[5],u=i[9],d=i[2],f=i[6],p=i[10];return t=t||this._order,t===`XYZ`?(this._y=Math.asin(r(s,-1,1)),Math.abs(s)<.99999?(this._x=Math.atan2(-u,p),this._z=Math.atan2(-o,a)):(this._x=Math.atan2(f,l),this._z=0)):t===`YXZ`?(this._x=Math.asin(-r(u,-1,1)),Math.abs(u)<.99999?(this._y=Math.atan2(s,p),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-d,a),this._z=0)):t===`ZXY`?(this._x=Math.asin(r(f,-1,1)),Math.abs(f)<.99999?(this._y=Math.atan2(-d,p),this._z=Math.atan2(-o,l)):(this._y=0,this._z=Math.atan2(c,a))):t===`ZYX`?(this._y=Math.asin(-r(d,-1,1)),Math.abs(d)<.99999?(this._x=Math.atan2(f,p),this._z=Math.atan2(c,a)):(this._x=0,this._z=Math.atan2(-o,l))):t===`YZX`?(this._z=Math.asin(r(c,-1,1)),Math.abs(c)<.99999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-d,a)):(this._x=0,this._y=Math.atan2(s,p))):t===`XZY`?(this._z=Math.asin(-r(o,-1,1)),Math.abs(o)<.99999?(this._x=Math.atan2(f,l),this._y=Math.atan2(s,a)):(this._x=Math.atan2(-u,p),this._y=0)):console.warn(`THREE.Euler: .setFromRotationMatrix() given unsupported order: `+t),this._order=t,n!==!1&&this._onChangeCallback(),this},setFromQuaternion:function(){var e=new Xe;return function(t,n,r){return e.makeRotationFromQuaternion(t),this.setFromRotationMatrix(e,n,r)}}(),setFromVector3:function(e,t){return this.set(e.x,e.y,e.z,t||this._order)},reorder:function(){var e=new Ye;return function(t){return e.setFromEuler(this),this.setFromQuaternion(e,t)}}(),equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order},fromArray:function(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this},toArray:function(e,t){return e===void 0&&(e=[]),t===void 0&&(t=0),e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e},toVector3:function(e){return e?e.set(this._x,this._y,this._z):new B(this._x,this._y,this._z)},_onChange:function(e){return this._onChangeCallback=e,this},_onChangeCallback:function(){}});var H={toScreenPos:(function(){var e=new B;return function(t,n,r){return e.copy(t),e.project(n),e.x=Math.round((e.x+1)*r.width/2),e.y=Math.round((-e.y+1)*r.height/2),e.z=0,e}})(),toSpacePos:(function(){var e=new B,t=new B,n;return function(r,i,a){return e.set(r.x/a.width*2-1,-(r.y/a.height)*2+1,.5),e.unproject(i),t.copy(e.sub(i.position).normalize()),n=-i.position.z/t.z,e.copy(i.position),e.add(t.multiplyScalar(n)),e}})()},U={initValue:function(e,t){return e!=null&&e!=null?e:t},isArray:function(e){return Object.prototype.toString.call(e)===`[object Array]`},destroyArray:function(e){e.length=0},destroyObject:function(e){for(var t in e)delete e[t]},isUndefined:function(){for(var e in arguments)if(arguments[e]!==void 0)return!1;return!0},setVectorByObj:function(e,t){t.x!==void 0&&(e.position.x=t.x),t.y!==void 0&&(e.position.y=t.y),t.z!==void 0&&(e.position.z=t.z),t.vx!==void 0&&(e.velocity.x=t.vx),t.vy!==void 0&&(e.velocity.y=t.vy),t.vz!==void 0&&(e.velocity.z=t.vz),t.ax!==void 0&&(e.acceleration.x=t.ax),t.ay!==void 0&&(e.acceleration.y=t.ay),t.az!==void 0&&(e.acceleration.z=t.az),t.p!==void 0&&e.position.copy(t.p),t.v!==void 0&&e.velocity.copy(t.v),t.a!==void 0&&e.acceleration.copy(t.a),t.position!==void 0&&e.position.copy(t.position),t.velocity!==void 0&&e.velocity.copy(t.velocity),t.accelerate!==void 0&&e.acceleration.copy(t.accelerate)},setPrototypeByObj:function(e,t,n){for(var r in t)e.hasOwnProperty(r)&&(n?n.indexOf(r)<0&&(e[r]=this._getValue(t[r])):e[r]=this._getValue(t[r]));return e},_getValue:function(e){return e.constructor.type===`Span`?e.getValue():e}},W=[];for(let e=0;e<256;++e)W.push((e+256).toString(16).slice(1));function Ze(e,t=0){return(W[e[t+0]]+W[e[t+1]]+W[e[t+2]]+W[e[t+3]]+`-`+W[e[t+4]]+W[e[t+5]]+`-`+W[e[t+6]]+W[e[t+7]]+`-`+W[e[t+8]]+W[e[t+9]]+`-`+W[e[t+10]]+W[e[t+11]]+W[e[t+12]]+W[e[t+13]]+W[e[t+14]]+W[e[t+15]]).toLowerCase()}var Qe,$e=new Uint8Array(16);function et(){if(!Qe){if(typeof crypto>`u`||!crypto.getRandomValues)throw Error(`crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported`);Qe=crypto.getRandomValues.bind(crypto)}return Qe($e)}var tt={};function nt(e,t,n){let r,i=e?._v6??!1;if(e){let t=Object.keys(e);t.length===1&&t[0]===`_v6`&&(e=void 0)}if(e)r=it(e.random??e.rng?.()??et(),e.msecs,e.nsecs,e.clockseq,e.node,t,n);else{let e=Date.now(),a=et();rt(tt,e,a),r=it(a,tt.msecs,tt.nsecs,i?void 0:tt.clockseq,i?void 0:tt.node,t,n)}return t??Ze(r)}function rt(e,t,n){return e.msecs??(e.msecs=-1/0),e.nsecs??(e.nsecs=0),t===e.msecs?(e.nsecs++,e.nsecs>=1e4&&(e.node=void 0,e.nsecs=0)):t>e.msecs?e.nsecs=0:t<e.msecs&&(e.node=void 0),e.node||(e.node=n.slice(10,16),e.node[0]|=1,e.clockseq=(n[8]<<8|n[9])&16383),e.msecs=t,e}function it(e,t,n,r,i,a,o=0){if(e.length<16)throw Error(`Random bytes length must be >= 16`);if(!a)a=new Uint8Array(16),o=0;else if(o<0||o+16>a.length)throw RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`);t??(t=Date.now()),n??(n=0),r??(r=(e[8]<<8|e[9])&16383),i??(i=e.slice(10,16)),t+=0xb1d069b5400;let s=((t&268435455)*1e4+n)%4294967296;a[o++]=s>>>24&255,a[o++]=s>>>16&255,a[o++]=s>>>8&255,a[o++]=s&255;let c=t/4294967296*1e4&268435455;a[o++]=c>>>8&255,a[o++]=c&255,a[o++]=c>>>24&15|16,a[o++]=c>>>16&255,a[o++]=r>>>8|128,a[o++]=r&255;for(let e=0;e<6;++e)a[o++]=i[e];return a}var at=nt,ot=(e,t)=>({...e,...t}),G={randomAToB:function(e,t,n){return n?(Math.random()*(t-e)>>0)+e:e+Math.random()*(t-e)},randomFloating:function(e,t,n){return this.randomAToB(e-t,e+t,n)},randomZone:function(e){},degreeTransform:function(e){return e*I/180},toColor16:function(e){return`#`+e.toString(16)},randomColor:function(){return`#`+(`00000`+(Math.random()*16777216<<0).toString(16)).slice(-6)},lerp:function(e,t,n){return t+(e-t)*n},getNormal:function(e,t){return e.x==0&&e.y==0?e.z==0?t.set(1,0,1):t.set(1,1,-e.y/e.z):e.x==0?t.set(1,0,1):t.set(-e.y/e.x,1,1),t.normalize()},axisRotate:function(e,t,n,r){var i=Math.cos(r),a=Math.sin(r),o=n.dot(t)*(1-i);e.copy(n),e.cross(t).scalar(a),e.addValue(t.x*i,t.y*i,t.z*i),e.addValue(n.x*o,n.y*o,n.z*o)}},st=`ArraySpan`,ct=`ColorSpan`,lt=`Polar3D`,ut=`Span`,K=class{constructor(e,t,n){this._isArray=!1,this.type=ut,U.isArray(e)?(this._isArray=!0,this.a=e):(this.a=U.initValue(e,1),this.b=U.initValue(t,this.a),this._center=U.initValue(n,!1))}getValue(e){return this._isArray?this.a[this.a.length*Math.random()>>0]:this._center?G.randomFloating(this.a,this.b,e):G.randomAToB(this.a,this.b,e)}},q=(e,t,n)=>e instanceof K?e:t===void 0?new K(e):n===void 0?new K(e,t):new K(e,t,n),dt=o(((e,t)=>{var n=Math.floor,r=Math.random;function i(e,t){return e+n(r()*(t-e+1))}t.exports=i})),ft=o(((e,t)=>{var n=dt();function r(e){var t=e.length;return t?e[n(0,t-1)]:void 0}t.exports=r})),pt=o(((e,t)=>{function n(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}t.exports=n})),mt=o(((e,t)=>{var n=pt();function r(e,t){return n(t,function(t){return e[t]})}t.exports=r})),ht=o(((e,t)=>{function n(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}t.exports=n})),gt=o(((e,t)=>{t.exports=typeof global==`object`&&global&&global.Object===Object&&global})),_t=o(((e,t)=>{var n=gt(),r=typeof self==`object`&&self&&self.Object===Object&&self;t.exports=n||r||Function(`return this`)()})),vt=o(((e,t)=>{t.exports=_t().Symbol})),yt=o(((e,t)=>{var n=vt(),r=Object.prototype,i=r.hasOwnProperty,a=r.toString,o=n?n.toStringTag:void 0;function s(e){var t=i.call(e,o),n=e[o];try{e[o]=void 0;var r=!0}catch{}var s=a.call(e);return r&&(t?e[o]=n:delete e[o]),s}t.exports=s})),bt=o(((e,t)=>{var n=Object.prototype.toString;function r(e){return n.call(e)}t.exports=r})),xt=o(((e,t)=>{var n=vt(),r=yt(),i=bt(),a=`[object Null]`,o=`[object Undefined]`,s=n?n.toStringTag:void 0;function c(e){return e==null?e===void 0?o:a:s&&s in Object(e)?r(e):i(e)}t.exports=c})),St=o(((e,t)=>{function n(e){return typeof e==`object`&&!!e}t.exports=n})),Ct=o(((e,t)=>{var n=xt(),r=St(),i=`[object Arguments]`;function a(e){return r(e)&&n(e)==i}t.exports=a})),wt=o(((e,t)=>{var n=Ct(),r=St(),i=Object.prototype,a=i.hasOwnProperty,o=i.propertyIsEnumerable;t.exports=n(function(){return arguments}())?n:function(e){return r(e)&&a.call(e,`callee`)&&!o.call(e,`callee`)}})),Tt=o(((e,t)=>{t.exports=Array.isArray})),Et=o(((e,t)=>{function n(){return!1}t.exports=n})),Dt=o(((e,t)=>{var n=_t(),r=Et(),i=typeof e==`object`&&e&&!e.nodeType&&e,a=i&&typeof t==`object`&&t&&!t.nodeType&&t,o=a&&a.exports===i?n.Buffer:void 0;t.exports=(o?o.isBuffer:void 0)||r})),Ot=o(((e,t)=>{var n=/^(?:0|[1-9]\d*)$/;function r(e,t){var r=typeof e;return t=t??9007199254740991,!!t&&(r==`number`||r!=`symbol`&&n.test(e))&&e>-1&&e%1==0&&e<t}t.exports=r})),kt=o(((e,t)=>{function n(e){return typeof e==`number`&&e>-1&&e%1==0&&e<=9007199254740991}t.exports=n})),At=o(((e,t)=>{var n=xt(),r=kt(),i=St(),a=`[object Arguments]`,o=`[object Array]`,s=`[object Boolean]`,c=`[object Date]`,l=`[object Error]`,u=`[object Function]`,d=`[object Map]`,f=`[object Number]`,p=`[object Object]`,m=`[object RegExp]`,h=`[object Set]`,g=`[object String]`,_=`[object WeakMap]`,v=`[object ArrayBuffer]`,y=`[object DataView]`,b=`[object Float32Array]`,x=`[object Float64Array]`,S=`[object Int8Array]`,C=`[object Int16Array]`,w=`[object Int32Array]`,T=`[object Uint8Array]`,E=`[object Uint8ClampedArray]`,D=`[object Uint16Array]`,O=`[object Uint32Array]`,k={};k[b]=k[x]=k[S]=k[C]=k[w]=k[T]=k[E]=k[D]=k[O]=!0,k[a]=k[o]=k[v]=k[s]=k[y]=k[c]=k[l]=k[u]=k[d]=k[f]=k[p]=k[m]=k[h]=k[g]=k[_]=!1;function A(e){return i(e)&&r(e.length)&&!!k[n(e)]}t.exports=A})),jt=o(((e,t)=>{function n(e){return function(t){return e(t)}}t.exports=n})),Mt=o(((e,t)=>{var n=gt(),r=typeof e==`object`&&e&&!e.nodeType&&e,i=r&&typeof t==`object`&&t&&!t.nodeType&&t,a=i&&i.exports===r&&n.process;t.exports=function(){try{return i&&i.require&&i.require(`util`).types||a&&a.binding&&a.binding(`util`)}catch{}}()})),Nt=o(((e,t)=>{var n=At(),r=jt(),i=Mt(),a=i&&i.isTypedArray;t.exports=a?r(a):n})),Pt=o(((e,t)=>{var n=ht(),r=wt(),i=Tt(),a=Dt(),o=Ot(),s=Nt(),c=Object.prototype.hasOwnProperty;function l(e,t){var l=i(e),u=!l&&r(e),d=!l&&!u&&a(e),f=!l&&!u&&!d&&s(e),p=l||u||d||f,m=p?n(e.length,String):[],h=m.length;for(var g in e)(t||c.call(e,g))&&!(p&&(g==`length`||d&&(g==`offset`||g==`parent`)||f&&(g==`buffer`||g==`byteLength`||g==`byteOffset`)||o(g,h)))&&m.push(g);return m}t.exports=l})),Ft=o(((e,t)=>{var n=Object.prototype;function r(e){var t=e&&e.constructor;return e===(typeof t==`function`&&t.prototype||n)}t.exports=r})),It=o(((e,t)=>{function n(e,t){return function(n){return e(t(n))}}t.exports=n})),Lt=o(((e,t)=>{t.exports=It()(Object.keys,Object)})),Rt=o(((e,t)=>{var n=Ft(),r=Lt(),i=Object.prototype.hasOwnProperty;function a(e){if(!n(e))return r(e);var t=[];for(var a in Object(e))i.call(e,a)&&a!=`constructor`&&t.push(a);return t}t.exports=a})),zt=o(((e,t)=>{function n(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}t.exports=n})),Bt=o(((e,t)=>{var n=xt(),r=zt(),i=`[object AsyncFunction]`,a=`[object Function]`,o=`[object GeneratorFunction]`,s=`[object Proxy]`;function c(e){if(!r(e))return!1;var t=n(e);return t==a||t==o||t==i||t==s}t.exports=c})),Vt=o(((e,t)=>{var n=Bt(),r=kt();function i(e){return e!=null&&r(e.length)&&!n(e)}t.exports=i})),Ht=o(((e,t)=>{var n=Pt(),r=Rt(),i=Vt();function a(e){return i(e)?n(e):r(e)}t.exports=a})),Ut=o(((e,t)=>{var n=mt(),r=Ht();function i(e){return e==null?[]:n(e,r(e))}t.exports=i})),Wt=o(((e,t)=>{var n=ft(),r=Ut();function i(e){return n(r(e))}t.exports=i})),Gt=l(o(((e,t)=>{var n=ft(),r=Wt(),i=Tt();function a(e){return(i(e)?n:r)(e)}t.exports=a}))()),Kt=class extends K{constructor(e){super(),this.type=st,this.items=Array.isArray(e)?e:[e]}getValue(){return(0,Gt.default)(this.items)}},qt=e=>e?e instanceof Kt?e:new Kt(e):null,Jt=class extends K{constructor(e){super(),this.type=ct,this.shouldRandomize=e===`random`,this.colors=Array.isArray(e)?e:[e]}getValue(){return this.shouldRandomize?G.randomColor():(0,Gt.default)(this.colors)}},Yt=e=>(e||(console.warn(`Invalid colors argument ${e} passed to createColorSpan. Defaulting to 'random'.`),e=`random`),e instanceof Jt?e:new Jt(e)),Xt=class{constructor(e,t,n,r,i,a){this.type=`Box`,this.x=e,this.y=t,this.z=n,this.width=r,this.height=i,this.depth=a,this.bottom=this.y+this.height,this.right=this.x+this.width,this.right=this.x+this.width}contains(e,t,n){return e<=this.right&&e>=this.x&&t<=this.bottom&&t>=this.y&&n<=this.depth&&n>=this.z}},Zt=`EULER`,Qt=`RUNGE_KUTTA_2`,$t=`RUNGE_KUTTA_4`,en=`VERLET`,tn=(e,t,n)=>{e.sleep||(e.old.position.copy(e.position),e.old.velocity.copy(e.velocity),e.acceleration.scalar(1/e.mass),e.velocity.add(e.acceleration.scalar(t)),e.position.add(e.old.velocity.scalar(t)),n&&e.velocity.scalar(n**(t/.0167)),e.acceleration.clear())},nn=(e,t,n,r=Zt)=>{switch(r){case Zt:tn(e,t,n);break;default:tn(e,t,n)}},J=class extends B{clear(){return this.x=0,this.y=0,this.z=0,this}scalar(e){return this.x*=e,this.y*=e,this.z*=e,this}addValue(e,t,n){return this.x+=e,this.y+=t,this.z+=n,this}toString(){return`x:`+this.x+`y:`+this.y+`z:`+this.z}eulerFromDir(e){return new V().setFromVector3(e)}},rn=class e{constructor(e,t,n){this.type=lt,this.radius=e||1,this.phi=n||0,this.theta=t||0}set(e,t,n){return this.radius=e||1,this.phi=n||0,this.theta=t||0,this}setRadius(e){return this.radius=e,this}setPhi(e){return this.phi=e,this}setTheta(e){return this.theta=e,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}toVector3D(){return new J(this.getX(),this.getY(),this.getZ())}getX(){return this.radius*Math.sin(this.theta)*Math.cos(this.phi)}getY(){return-this.radius*Math.sin(this.theta)*Math.sin(this.phi)}getZ(){return this.radius*Math.cos(this.theta)}normalize(){return this.radius=1,this}equals(e){return e.radius===this.radius&&e.phi===this.phi&&e.theta===this.theta}clear(){return this.radius=0,this.phi=0,this.theta=0,this}clone(){return new e(this.radius,this.phi,this.theta)}},an=`Particle`,on=`Pool`,sn=`System`,cn=class{constructor(e){this.id=`particle-${at()}`,this.type=an,this.life=Be,this.age=0,this.energy=1,this.dead=!1,this.sleep=!1,this.body=null,this.parent=null,this.mass=1,this.radius=10,this.alpha=1,this.scale=1,this.useColor=!1,this.useAlpha=!1,this.easing=Ve,this.position=new J,this.velocity=new J,this.acceleration=new J,this.old={},this.old.position=this.position.clone(),this.old.velocity=this.velocity.clone(),this.old.acceleration=this.acceleration.clone(),this.behaviours=[],this.transform={},this.color={r:0,g:0,b:0},this.rotation=new J,this.distanceToCamera=0,U.setPrototypeByObj(this,e)}getDirection(){return Math.atan2(this.velocity.x,-this.velocity.y)*(180/I)}reset(){return this.life=Be,this.age=0,this.energy=1,this.dead=!1,this.sleep=!1,this.body=null,this.parent=null,this.mass=1,this.radius=10,this.alpha=1,this.scale=1,this.useColor=!1,this.useAlpha=!1,this.easing=Ve,this.position.set(0,0,0),this.velocity.set(0,0,0),this.acceleration.set(0,0,0),this.old.position.set(0,0,0),this.old.velocity.set(0,0,0),this.old.acceleration.set(0,0,0),this.color.r=0,this.color.g=0,this.color.b=0,this.rotation.clear(),U.destroyObject(this.transform),this.removeAllBehaviours(),this}update(e,t){if(!this.sleep){this.age+=e;let n=this.behaviours.length;for(;n--;)this.behaviours[n].applyBehaviour(this,e,t)}if(this.age>=this.life)this.destroy();else{let e=this.easing(this.age/this.life);this.energy=Math.max(1-e,0)}}addBehaviour(e){this.behaviours.push(e),e.initialize(this)}addBehaviours(e){let t=e.length;for(;t--;)this.addBehaviour(e[t])}removeBehaviour(e){let t=this.behaviours.indexOf(e);t>-1&&this.behaviours.splice(t,1)}removeAllBehaviours(){U.destroyArray(this.behaviours)}destroy(){this.removeAllBehaviours(),this.energy=0,this.dead=!0,this.parent=null}},Y=class{constructor(){this.type=on,this.cID=0,this.list={}}create(e,...t){if(!this.canCreateNewObject(e))throw Error(`The pool is unable to create or clone the object supplied`);if(this.cID++,this.canInstantiateObject(e))return new e(...t);if(this.canCloneObject(e))return e.clone()}canInstantiateObject(e){return typeof e==`function`}canCloneObject(e){return e.clone&&typeof e.clone==`function`}canCreateNewObject(e){return!!(this.canInstantiateObject(e)||this.canCloneObject(e))}getCount(){var e=0;for(var t in this.list)e+=this.list[t].length;return e++}get(e,...t){var n,r=e.__puid||qe.id(e);return n=this.list[r]&&this.list[r].length>0?this.list[r].pop():this.create(e,...t),n.__puid=e.__puid||r,n}expire(e){return this._getList(e.__puid).push(e)}destroy(){for(var e in this.list)this.list[e].length=0,delete this.list[e]}_getList(e){return e=e||`default`,this.list[e]||(this.list[e]=[]),this.list[e]}},ln=class{constructor(){this.listeners=null}set listeners(e){this._listeners=e}get listeners(){return this._listeners}addEventListener(e,t){return this.listeners?this.removeEventListener(e,t):this.listeners={},this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t),t}removeEventListener(e,t){if(this.listeners&&this.listeners[e]){for(var n=this.listeners[e],r=0,i=n.length;r<i;r++)if(n[r]==t){i==1?delete this.listeners[e]:n.splice(r,1);break}}}removeAllEventListeners(e){e?this.listeners&&delete this.listeners[e]:this.listeners=null}dispatchEvent(e,t){var n=!1,r=this.listeners;if(e&&r){var i=r[e];if(!i)return n;i=i.slice();for(var a,o=i.length;o--;)a=i[o],n=n||a(t)}return!!n}hasEventListener(e){var t=this.listeners;return!!(t&&t[e])}},un=`SYSTEM_UPDATE`,dn=`PARTICLE_CREATED`,fn=`PARTICLE_UPDATE`,pn=`PARTICLE_DEAD`,mn=`EMITTER_ADDED`,hn=`EMITTER_REMOVED`,gn=`EMITTER_DEAD`,_n=`SYSTEM_UPDATE_AFTER`,vn=ln,X=class{constructor(e=C,t=!0){this.type=e,this.isEnabled=t}init(e,t){this.isEnabled&&(t?(this.initialize(t),t.hasBeenInitialized=!0):(this.initialize(e),e.hasBeenInitialized=!0))}reset(){}initialize(e){}static requiresWebGlApi(){return!1}static fromJSON(e){}},yn=class e extends X{constructor(e,t,n,r=!0){super(w,r),this.body=qt(e),this.w=t,this.h=n||t}initialize(e){var t=this.body.getValue();this.w?e.body={width:this.w,height:this.h,body:t}:e.body=t}static fromJSON(t){let{body:n,width:r,height:i,isEnabled:a=!0}=t;return new e(n,r,i,a)}},bn={AdditiveBlending:2,CustomBlending:5,MultiplyBlending:4,NoBlending:0,NormalBlending:1,SubtractiveBlending:3},xn={color:16711680,blending:2,fog:!0},Sn={...xn,blending:`AdditiveBlending`},Cn=class e extends X{constructor(e,t,n=xn,r=!0){super(T,r);let{Sprite:i,SpriteMaterial:a,TextureLoader:o}=e;this.materialProperties=ot(xn,n),new o().load(t,e=>{this.texture=e,this.material=new a({map:e,...this.materialProperties}),this.sprite=new i(this.material)},void 0,e=>{throw Error(e)})}initialize(e){e.body=this.sprite}static fromJSON(t,n){let{texture:r,materialProperties:i=Sn,isEnabled:a=!0}=t;return new e(n,r,ot(Sn,(e=>{let{blending:t}=e;return{...e,blending:t?bn[t]:bn[Sn.blending]}})(i)),a)}},wn=new V,Tn={particleEuler:null,initialize:function(e,t,n){let r=n.length;for(;r--;)n[r].init(e,t);e.bindEmitter&&this.bindEmitter(e,t)},bindEmitter:function(e,t){let{rotation:{x:n,y:r,z:i}}=e;t.position.add(e.position),t.velocity.add(e.velocity),t.acceleration.add(e.acceleration),t.velocity.applyEuler(wn.set(n,r,i))}},En=class e extends X{constructor(e,t,n,r=!0){super(D,r),this.lifePan=q(e,t,n)}initialize(e){this.lifePan.a==1/0||this.lifePan.a==`infi`?e.life=1/0:e.life=this.lifePan.getValue()}static fromJSON(t){let{min:n,max:r,center:i=!1,isEnabled:a=!0}=t;return new e(n,r,i,a)}},Dn=class e extends X{constructor(e,t,n=!1,r=!0){super(O,r),this.massPan=q(e,t,n)}initialize(e){e.mass=this.massPan.getValue()}static fromJSON(t){let{min:n,max:r,center:i=!1,isEnabled:a=!0}=t;return new e(n,r,i,a)}},On=class{constructor(e=te){this.type=e,this.vector=new J(0,0,0),this.random=0,this.crossType=`dead`,this.log=!0,this.supportsCrossing=!0}getPosition(){return null}crossing(e){if(!this.supportsCrossing)return console.warn(`${this.constructor.name} does not support the crossing method`);switch(this.crossType){case`bound`:this._bound(e);break;case`cross`:this._cross(e);break;case`dead`:this._dead(e);break}}isBoxZone(){return!1}isLineZone(){return!1}isMeshZone(){return!1}isPointZone(){return!1}isScreenZone(){return!1}isSphereZone(){return!1}_dead(e){}_bound(e){}_cross(e){}},kn=class extends On{constructor(e,t,n,r,i,a){super(ne);var o,s,c,l,u,r;U.isUndefined(t,n,r,i,a)?(o=s=c=0,l=u=r=e||100):U.isUndefined(r,i,a)?(o=s=c=0,l=e,u=t,r=n):(o=e,s=t,c=n,l=r,u=i,r=a),this.x=o,this.y=s,this.z=c,this.width=l,this.height=u,this.depth=r,this.friction=.85,this.max=6}isBoxZone(){return!0}getPosition(){return this.vector.x=this.x+G.randomAToB(-.5,.5)*this.width,this.vector.y=this.y+G.randomAToB(-.5,.5)*this.height,this.vector.z=this.z+G.randomAToB(-.5,.5)*this.depth,this.vector}_dead(e){(e.position.x+e.radius<this.x-this.width/2||e.position.x-e.radius>this.x+this.width/2)&&(e.dead=!0),(e.position.y+e.radius<this.y-this.height/2||e.position.y-e.radius>this.y+this.height/2)&&(e.dead=!0),(e.position.z+e.radius<this.z-this.depth/2||e.position.z-e.radius>this.z+this.depth/2)&&(e.dead=!0)}_bound(e){e.position.x-e.radius<this.x-this.width/2?(e.position.x=this.x-this.width/2+e.radius,e.velocity.x*=-this.friction,this._static(e,`x`)):e.position.x+e.radius>this.x+this.width/2&&(e.position.x=this.x+this.width/2-e.radius,e.velocity.x*=-this.friction,this._static(e,`x`)),e.position.y-e.radius<this.y-this.height/2?(e.position.y=this.y-this.height/2+e.radius,e.velocity.y*=-this.friction,this._static(e,`y`)):e.position.y+e.radius>this.y+this.height/2&&(e.position.y=this.y+this.height/2-e.radius,e.velocity.y*=-this.friction,this._static(e,`y`)),e.position.z-e.radius<this.z-this.depth/2?(e.position.z=this.z-this.depth/2+e.radius,e.velocity.z*=-this.friction,this._static(e,`z`)):e.position.z+e.radius>this.z+this.depth/2&&(e.position.z=this.z+this.depth/2-e.radius,e.velocity.z*=-this.friction,this._static(e,`z`))}_static(e,t){e.velocity[t]*e.acceleration[t]>0||Math.abs(e.velocity[t])<Math.abs(e.acceleration[t])*.0167*this.max&&(e.velocity[t]=0,e.acceleration[t]=0)}_cross(e){e.position.x+e.radius<this.x-this.width/2&&e.velocity.x<=0?e.position.x=this.x+this.width/2+e.radius:e.position.x-e.radius>this.x+this.width/2&&e.velocity.x>=0&&(e.position.x=this.x-this.width/2-e.radius),e.position.y+e.radius<this.y-this.height/2&&e.velocity.y<=0?e.position.y=this.y+this.height/2+e.radius:e.position.y-e.radius>this.y+this.height/2&&e.velocity.y>=0&&(e.position.y=this.y-this.height/2-e.radius),e.position.z+e.radius<this.z-this.depth/2&&e.velocity.z<=0?e.position.z=this.z+this.depth/2+e.radius:e.position.z-e.radius>this.z+this.depth/2&&e.velocity.z>=0&&(e.position.z=this.z-this.depth/2-e.radius)}},An=class extends On{constructor(e,t,n,r,i,a){super(re),e instanceof J?(this.x1=e.x,this.y1=e.y,this.z1=e.z,this.x2=r.x,this.y2=r.y,this.z2=r.z):(this.x1=e,this.y1=t,this.z1=n,this.x2=r,this.y2=i,this.z2=a),this.supportsCrossing=!1}isLineZone(){return!0}getPosition(){return this.random=Math.random(),this.vector.x=this.x1+this.random*(this.x2-this.x1),this.vector.y=this.y1+this.random*(this.y2-this.y1),this.vector.z=this.z1+this.random*(this.z2-this.z1),this.vector}},jn=class extends On{constructor(e,t=1,n){if(super(ie),this.geometry=null,this.scale=t,this.supportsCrossing=!1,e.type&&e.type===`Geometry`&&(this.geometry=e),e.geometry&&(this.geometry=e.geometry),!this.geometry)throw Error(`MeshZone unable to set geometry from the supplied bounds`);this.geometry.isBufferGeometry&&(this.geometry=new n().fromBufferGeometry(this.geometry))}isMeshZone(){return!0}getPosition(){let e=this.geometry.vertices,t=e[e.length*Math.random()>>0];return this.vector.x=t.x*this.scale,this.vector.y=t.y*this.scale,this.vector.z=t.z*this.scale,this.vector}},Mn=class extends On{constructor(e,t,n){super(ae);var r=U.isUndefined(e,t,n)?0:e;this.x=r,this.y=r,this.z=r,this.supportsCrossing=!1}isPointZone(){return!0}getPosition(){return this.vector.x=this.x,this.vector.y=this.y,this.vector.z=this.z,this.vector}},Nn=class extends On{constructor(e,t,n,r){super(oe),this.camera=e,this.renderer=t,this.dis=n||20,r=r||`1234`;for(var i=1;i<5;i++)this[`d`+i]=r.indexOf(i+``)>=0}isScreenZone(){return!0}_dead(e){var t=H.toScreenPos(e.position,this.camera,this.renderer.domElement),n=this.renderer.domElement;(t.y+e.radius<-this.dis&&this.d1||t.y-e.radius>n.height+this.dis&&this.d3)&&(e.dead=!0),(t.x+e.radius<-this.dis&&this.d4||t.x-e.radius>n.width+this.dis&&this.d2)&&(e.dead=!0)}_bound(e){var t=H.toScreenPos(e.position,this.camera,this.renderer.domElement),n=this.renderer.domElement;(t.y+e.radius<-this.dis||t.y-e.radius>n.height+this.dis)&&(e.velocity.y*=-1),(t.x+e.radius<-this.dis||t.x-e.radius>n.width+this.dis)&&(e.velocity.y*=-1)}};Nn.prototype.getPosition=(function(){var e=new J,t;return function(){return t=this.renderer.domElement,e.x=Math.random()*t.width,e.y=Math.random()*t.height,this.vector.copy(H.toSpacePos(e,this.camera,t)),this.vector}})(),Nn.prototype._cross=(function(){var e=new J;return function(t){var n=H.toScreenPos(t.position,this.camera,this.renderer.domElement),r=this.renderer.domElement;n.y+t.radius<-this.dis?(e.x=n.x,e.y=r.height+this.dis+t.radius,t.position.y=H.toSpacePos(e,this.camera,r).y):n.y-t.radius>r.height+this.dis&&(e.x=n.x,e.y=-this.dis-t.radius,t.position.y=H.toSpacePos(e,this.camera,r).y),n.x+t.radius<-this.dis?(e.y=n.y,e.x=r.width+this.dis+t.radius,t.position.x=H.toSpacePos(e,this.camera,r).x):n.x-t.radius>r.width+this.dis&&(e.y=n.y,e.x=-this.dis-t.radius,t.position.x=H.toSpacePos(e,this.camera,r).x)}})();var Pn=class extends On{constructor(e,t,n,r){super(se);let i,a;U.isUndefined(t,n,r)?(i=0,a=e||100):(i=e,a=r),this.x=i,this.y=i,this.z=i,this.radius=a,this.the=this.phi=0}isSphereZone(){return!0}_dead(e){e.position.distanceTo(this)-e.radius>this.radius&&(e.dead=!0)}_cross(){console.warn(`${this.constructor.name} does not support the _cross method`)}};Pn.prototype.getPosition=(function(){var e,t,n;return function(){return this.random=Math.random(),n=this.random*this.radius,e=I*Math.random(),t=I*2*Math.random(),this.vector.x=this.x+n*Math.sin(e)*Math.cos(t),this.vector.y=this.y+n*Math.sin(t)*Math.sin(e),this.vector.z=this.z+n*Math.cos(e),this.vector}})(),Pn.prototype._bound=(function(){var e=new J,t=new J,n;return function(r){r.position.distanceTo(this)+r.radius>=this.radius&&(e.copy(r.position).sub(this).normalize(),t.copy(r.velocity),n=2*t.dot(e),r.velocity.sub(e.scalar(n)))}})();var Fn=s({BoxZone:()=>kn,LineZone:()=>An,MeshZone:()=>jn,PointZone:()=>Mn,ScreenZone:()=>Nn,SphereZone:()=>Pn}),In=class e extends X{constructor(){super(k),this.reset.apply(this,arguments)}reset(){this.zones?this.zones.length=0:this.zones=[],this.zones=this.zones.concat(Array.prototype.slice.call(arguments))}addZone(){this.zones=this.zones.concat(Array.prototype.slice.call(arguments))}static fromJSON(t){let{zoneType:n,...r}=t;if(!Ge.includes(n))throw Error(`The zone type ${n} is invalid or not yet supported`);return new e(new Fn[n](...Object.values(r)))}};In.prototype.initialize=(function(){let e;return function(t){e=this.zones[Math.random()*this.zones.length>>0],e.getPosition(),t.position.x=e.vector.x,t.position.y=e.vector.y,t.position.z=e.vector.z}})();var Ln=class e extends X{constructor(e,t,n,r=!0,i=!0){super(A,i),this.rotation=new B(e,t,n),this.useEmitterRotation=r}initialize(e){this.useEmitterRotation?e.rotation.copy(e.parent.rotation).add(this.rotation):e.rotation.copy(this.rotation)}static fromJSON(t){let{x:n,y:r,z:i,useEmitterRotation:a=!0,isEnabled:o=!0}=t;return new e(n,r,i,a,o)}},Rn=class e extends X{constructor(e,t,n=!1,r=!0){super(j,r),this.radius=q(e,t,n)}reset(e,t,n=!1){this.radius=q(e,t,n)}initialize(e){e.radius=this.radius.getValue(),e.transform.oldRadius=e.radius}static fromJSON(t){let{width:n,height:r,center:i=!1,isEnabled:a=!0}=t;return new e(n,r,i,a)}},zn=class e extends X{constructor(e=1,t=1){super(ee),this.numPan=q(e),this.timePan=q(t),this.startTime=0,this.nextTime=0,this.init()}init(){this.startTime=0,this.nextTime=this.timePan.getValue()}getValue(e){return this.startTime+=e,this.startTime>=this.nextTime?(this.init(),this.numPan.b==1?+(this.numPan.getValue(`Float`)>.5):this.numPan.getValue(`Int`)):0}static fromJSON(t){let{particlesMin:n,particlesMax:r,perSecondMin:i,perSecondMax:a}=t;return new e(new K(n,r),new K(i,a))}},Bn=class e extends X{constructor(e,t,n=xn,r=!0){super(E,r);let{Sprite:i,SpriteMaterial:a}=e;this.materialProperties=ot(xn,n),this.texture=t,this.material=new a({map:t,...this.materialProperties}),this.sprite=new i(this.material)}initialize(e){e.body=this.sprite}static fromJSON(t,n){let{loadedTexture:r,materialProperties:i=Sn,isEnabled:a=!0}=t;return new e(n,r,ot(Sn,(e=>{let{blending:t}=e;return{...e,blending:t?bn[t]:bn[Sn.blending]}})(i)),a)}},Vn=class extends X{constructor(e,t=!0){super(e,t),this.dirVec=new J(0,0,0)}normalize(e){return e*100}};Vn.prototype.initialize=(function(){var e,t=new J(0,0,1),n=new J(0,0,0);return function(r){return e=this.tha*Math.random(),this._useV&&this.dirVec.copy(this.dir).scalar(this.radiusPan.getValue()),G.getNormal(this.dirVec,t),n.copy(this.dirVec).applyAxisAngle(t,e),n.applyAxisAngle(this.dirVec.normalize(),Math.random()*I*2),r.velocity.copy(n),this}})();var Hn=class e extends Vn{constructor(e,t,n=!0){super(N,n),this.tha=t*L,this.dirVec=e.toVector3D(),this._useV=!1}static fromJSON(t){let{polarRadius:n,polarTheta:r,polarPhi:i,velocityTheta:a,isEnabled:o=!0}=t;return new e(new rn(n,r,i),a,o)}},Un=class e extends Vn{constructor(e,t,n,r=!0){super(P,r),this.radiusPan=q(e),this.dir=t.clone().normalize(),this.tha=n*L,this._useV=!0}static fromJSON(t){let{radius:n,x:r,y:i,z:a,theta:o,isEnabled:s=!0}=t;return new e(n,new J(r,i,a),o,s)}},Wn=class e extends Vn{constructor(e,t,n=!0){super(M,n),this.radiusPan=q(1),this.dir=e.clone(),this.tha=t*L,this._useV=!0}static fromJSON(t){let{x:n,y:r,z:i,theta:a,isEnabled:o=!0}=t;return new e(new J(n,r,i),a,o)}},Gn=s({Body:()=>yn,BodySprite:()=>Cn,InitializerUtil:()=>Tn,Life:()=>En,Mass:()=>Dn,PolarVelocity:()=>Hn,Position:()=>In,RadialVelocity:()=>Un,Radius:()=>Rn,Rate:()=>zn,Rotation:()=>Ln,Texture:()=>Bn,VectorVelocity:()=>Wn}),Kn=.006,qn=new zn(1,.1),Jn=l(o(((e,t)=>{var n=xt(),r=St(),i=`[object Number]`;function a(e){return typeof e==`number`||r(e)&&n(e)==i}t.exports=a}))()),Yn=`Emitter`,Xn=`FollowEmitter`,Zn=class extends cn{constructor(e){super(e),this.type=Yn,this.particles=[],this.initializers=[],this.behaviours=[],this.emitterBehaviours=[],this.currentEmitTime=0,this.totalEmitTimes=-1,this.damping=Kn,this.bindEmitter=!0,this.bindEmitterEvent=!1,this.rate=qn,this.isEmitting=!1,this.id=`emitter-${at()}`,this.cID=0,this.name=`Emitter`,this.index=void 0,this.eventDispatcher=new vn}dispatch(e,t=this){this.eventDispatcher.dispatchEvent(e,t)}setRate(e){return this.rate=e,this}setPosition(e={}){let{position:t}=this,{x:n=t.x,y:r=t.y,z:i=t.z}=e;return this.position.set(n,r,i),this}setRotation(e={}){let{rotation:t}=this,{x:n=t.x,y:r=t.y,z:i=t.z}=e;return this.rotation.set(n,r,i),this}emit(e=1/0,t=1/0){return this.currentEmitTime=0,this.totalEmitTimes=(0,Jn.default)(e)?e:1/0,e===1?this.life=e:this.life=(0,Jn.default)(t)?t:1/0,this.rate.init(),this.isEmitting=!0,this}experimental_emit(){let{isEmitting:e,totalEmitTimes:t,life:n}=this;return e||(this.currentEmitTime=0,t||this.setTotalEmitTimes(1/0),n||this.setLife(1/0),this.rate.init(),this.isEmitting=!0),this}setTotalEmitTimes(e=1/0){return this.totalEmitTimes=(0,Jn.default)(e)?e:1/0,this}setLife(e=1/0){return this.totalEmitTimes===1?this.life=this.totalEmitTimes:this.life=(0,Jn.default)(e)?e:1/0,this}stopEmit(){this.totalEmitTimes=-1,this.currentEmitTime=0,this.isEmitting=!1}removeAllParticles(){let e=this.particles.length;for(;e--;)this.particles[e].dead=!0}addInitializer(e){return this.initializers.push(e),this}addInitializers(e){let t=e.length;for(;t--;)this.addInitializer(e[t]);return this}setInitializers(e){return this.initializers=e,this}removeInitializer(e){let t=this.initializers.indexOf(e);return t>-1&&this.initializers.splice(t,1),this}removeAllInitializers(){return U.destroyArray(this.initializers),this}addBehaviour(e){return this.behaviours.push(e),this}addBehaviours(e){let t=e.length;for(;t--;)this.addBehaviour(e[t]);return this}setBehaviours(e){return this.behaviours=e,this}removeBehaviour(e){let t=this.behaviours.indexOf(e);return t>-1&&this.behaviours.splice(t,1),this}removeAllBehaviours(){return U.destroyArray(this.behaviours),this}addEmitterBehaviour(e){return this.emitterBehaviours.push(e),e.initialize(this),this}addEmitterBehaviours(e){let t=e.length;for(;t--;)this.addEmitterBehaviour(e[t]);return this}setEmitterBehaviours(e){let t=e.length;this.emitterBehaviours=e;for(let e=0;e<t;e++)this.emitterBehaviours[e].initialize(this);return this}removeEmitterBehaviour(e){let t=this.emitterBehaviours.indexOf(e);return t>-1&&this.emitterBehaviours.splice(t,1),this}removeAllEmitterBehaviours(){return U.destroyArray(this.emitterBehaviours),this}addOnEmitterDeadEventListener(e){return this.eventDispatcher.addEventListener(`${this.id}_${gn}`,()=>e()),this}createParticle(){let e=this.parent.pool.get(cn),t=this.particles.length;return this.setupParticle(e,t),this.parent&&this.parent.dispatch(`PARTICLE_CREATED`,e),this.bindEmitterEvent&&this.dispatch(`PARTICLE_CREATED`,e),e}setupParticle(e,t){let{initializers:n,behaviours:r}=this;Tn.initialize(this,e,n),e.addBehaviours(r),e.parent=this,e.index=t,this.particles.push(e)}update(e){if(!this.isEmitting&&this.particles.length===0)return;this.age+=e,(this.dead||this.age>=this.life)&&this.destroy(),this.isEmitting&&this.generate(e),this.integrate(e);let t=this.particles.length;for(;t--;){let e=this.particles[t];e.dead&&(this.parent&&this.parent.dispatch(`PARTICLE_DEAD`,e),this.bindEmitterEvent&&this.dispatch(`PARTICLE_DEAD`,e),this.parent.pool.expire(e.reset()),this.particles.splice(t,1),this.particles.length===0&&this.parent&&this.parent.dispatch(`SYSTEM_UPDATE`))}this.updateEmitterBehaviours(e)}updateEmitterBehaviours(e){if(this.sleep)return;let t=this.emitterBehaviours.length;for(let n=0;n<t;n++)this.emitterBehaviours[n].applyBehaviour(this,e,n)}integrate(e){let t=this.parent?this.parent.integrationType:Zt,n=1-this.damping;nn(this,e,n,t);let r=this.particles.length;for(;r--;){let i=this.particles[r];i.update(e,r),nn(i,e,n,t),this.parent&&this.parent.dispatch(`PARTICLE_UPDATE`,i),this.bindEmitterEvent&&this.dispatch(`PARTICLE_UPDATE`,i)}}generate(e){if(this.totalEmitTimes===1){let e=this.rate.getValue(99999);for(e>0&&(this.cID=e);e--;)this.createParticle();this.totalEmitTimes=0;return}if(this.currentEmitTime+=e,this.currentEmitTime<this.totalEmitTimes){let t=this.rate.getValue(e);for(t>0&&(this.cID=t);t--;)this.createParticle()}}destroy(){this.dead=!0,this.energy=0,this.totalEmitTimes=-1,this.particles.length==0&&(this.isEmitting=!1,this.removeAllInitializers(),this.removeAllBehaviours(),this.dispatch(`${this.id}_${gn}`),this.parent&&this.parent.removeEmitter(this))}},Qn=1/0,$n=1e3,er=_e,tr=.03,nr=`dead`,Z=class{constructor(e=1/0,t=er,n=u,r=!0){this.type=n,this.isEnabled=r,this.id=`behaviour-${at()}`,this.life=e,this.easing=t,this.age=0,this.energy=1,this.dead=!1}reset(e=Qn,t=er){this.life=e,this.easing=t||er}set life(e){this._life=(0,Jn.default)(e)?e:Qn}get life(){return this._life}normalizeForce(e){return e.scalar(100)}normalizeValue(e){return e*100}initialize(e){}applyBehaviour(e,t,n){this.isEnabled&&this.mutate(e,t,n)}mutate(e,t,n){}energize(e,t){if(this.dead)return;if(this.age+=t,this.age>=this.life){this.energy=0,this.dead=!0;return}let n=this.easing(e.age/e.life);this.energy=Math.max(1-n,0)}destroy(){}fromJSON(e){}},rr=class e extends Z{constructor(e=1,t=null,n,r,i=!0){super(n,r,d,i),this.alphaA=e,this.alphaB=t,this.reset(e,t)}get same(){return this._same}set same(e){this._same=e}reset(e=1,t=null,n,r){this.same=t==null,this.alphaA=q(e),this.alphaB=q(t),n&&super.reset(n,r)}initialize(e){e.useAlpha=!0,e.transform.alphaA=this.alphaA.getValue(),e.transform.alphaB=this.same?e.transform.alphaA:this.alphaB.getValue()}mutate(e,t,n){this.energize(e,t,n),e.alpha=G.lerp(e.transform.alphaA,e.transform.alphaB,this.energy),e.alpha<.002&&(e.alpha=0)}static fromJSON(t){let{alphaA:n,alphaB:r,life:i,easing:a,isEnabled:o=!0}=t;return new e(n,r,i,z(a),o)}},ir=class e extends Z{constructor(e=new J,t=100,n=$n,r=Qn,i=er,a=!0){super(r,i,f,a),this.targetPosition=e,this.radius=n,this.force=this.normalizeValue(t),this.radiusSq=this.radius*this.radius,this.attractionForce=new J,this.lengthSq=0}reset(e=new J,t=100,n=$n,r,i){this.targetPosition=e,this.radius=n,this.force=this.normalizeValue(t),this.radiusSq=this.radius*this.radius,this.attractionForce=new J,this.lengthSq=0,r&&super.reset(r,i)}mutate(e,t,n){this.energize(e,t,n),this.attractionForce.copy(this.targetPosition),this.attractionForce.sub(e.position),this.lengthSq=this.attractionForce.lengthSq(),this.lengthSq>4e-6&&this.lengthSq<this.radiusSq&&(this.attractionForce.normalize(),this.attractionForce.scalar(1-this.lengthSq/this.radiusSq),this.attractionForce.scalar(this.force),e.acceleration.add(this.attractionForce))}static fromJSON(t){let{x:n,y:r,z:i,force:a,radius:o,life:s,easing:c,isEnabled:l=!0}=t;return new e(new J(n,r,i),a,o,s,z(c),l)}},ar=class extends Z{constructor(e,t,n,r,i,a=!0){super(r,i,p,a),this.reset(e,t,n)}reset(e,t,n,r,i){this.emitter=e,this.useMass=t,this.onCollide=n,this.particles=[],this.delta=new J,r&&super.reset(r,i)}mutate(e,t,n){let r=this.emitter?this.emitter.particles.slice(n):this.particles.slice(n),i,a,o,s,c,l,u=r.length;for(;u--;)i=r[u],i!=e&&(this.delta.copy(i.position).sub(e.position),a=this.delta.lengthSq(),s=e.radius+i.radius,a<=s*s&&(o=s-Math.sqrt(a),o+=.5,c=this._getAverageMass(e,i),l=this._getAverageMass(i,e),e.position.add(this.delta.clone().normalize().scalar(o*-c)),i.position.add(this.delta.normalize().scalar(o*l)),this.onCollide&&this.onCollide(e,i)))}_getAverageMass(e,t){return this.useMass?t.mass/(e.mass+t.mass):.5}fromJSON(e){}},or=class e extends Z{constructor(e,t,n,r,i=!0){super(n,r,m,i),this.reset(e,t)}get same(){return this._same}set same(e){this._same=e}reset(e,t,n,r){this.same=t==null,this.colorA=Yt(e),this.colorB=Yt(t),n&&super.reset(n,r)}initialize(e){e.transform.colorA=Ke.getRGB(this.colorA.getValue()),e.useColor=!0,e.transform.colorB=this.same?e.transform.colorA:Ke.getRGB(this.colorB.getValue())}mutate(e,t,n){this.energize(e,t,n),this._same?(e.color.r=e.transform.colorA.r,e.color.g=e.transform.colorA.g,e.color.b=e.transform.colorA.b):(e.color.r=G.lerp(e.transform.colorA.r,e.transform.colorB.r,this.energy),e.color.g=G.lerp(e.transform.colorA.g,e.transform.colorB.g,this.energy),e.color.b=G.lerp(e.transform.colorA.b,e.transform.colorB.b,this.energy))}static fromJSON(t){let{colorA:n,colorB:r,life:i,easing:a,isEnabled:o=!0}=t;return new e(n,r,i,z(a),o)}},sr=class e extends Z{constructor(e,t,n,r,i){super(n,r,h,i),this.reset(e,t)}reset(e,t=nr,n,r){this.zone=e,this.zone.crossType=t,n&&super.reset(n,r)}mutate(e,t,n){this.energize(e,t,n),this.zone.crossing.call(this.zone,e)}static fromJSON(t){let{zoneType:n,zoneParams:r,crossType:i,life:a,easing:o,isEnabled:s=!0}=t,c=new Fn[n](...Object.values(r));return new e(c,i,a,z(o),s)}},cr=class e extends Z{constructor(e,t,n,r,i,a=!0){super(r,i,g,a),this.reset(e,t,n)}reset(e,t,n){this.force=this.normalizeForce(new J(e,t,n)),this.force.id=Math.random()}mutate(e,t,n){this.energize(e,t,n),e.acceleration.add(this.force)}static fromJSON(t){let{fx:n,fy:r,fz:i,life:a,easing:o,isEnabled:s=!0}=t;return new e(n,r,i,a,z(o),s)}},lr=class e extends cr{constructor(e,t,n,r=!0){super(0,-e,0,t,n,r),this.type=_}static fromJSON(t){let{gravity:n,life:r,easing:i,isEnabled:a=!0}=t;return new e(n,r,z(i),a)}},ur=class e extends Z{constructor(e,t,n,r=tr,i,a,o=!0){super(i,a,v,o),this.reset(e,t,n,r),this.time=0}reset(e,t,n,r=tr,i,a){this.randomForce=this.normalizeForce(new J(e,t,n)),this.delayPan=q(r),this.time=0,i&&super.reset(i,a)}mutate(e,t,n){if(this.energize(e,t,n),this.time+=t,this.time>=this.delayPan.getValue()){let t=G.randomAToB(-this.randomForce.x,this.randomForce.x),n=G.randomAToB(-this.randomForce.y,this.randomForce.y),r=G.randomAToB(-this.randomForce.z,this.randomForce.z);e.acceleration.addValue(t,n,r),this.time=0}}static fromJSON(t){let{x:n,y:r,z:i,delay:a,life:o,easing:s,isEnabled:c=!0}=t;return new e(n,r,i,a,o,z(s),c)}},dr=class e extends ir{constructor(e,t,n,r,i,a=!0){super(e,t,n,r,i,a),this.force*=-1,this.type=y}reset(e,t,n,r,i){super.reset(e,t,n,r,i),this.force*=-1}static fromJSON(t){let{x:n,y:r,z:i,force:a,radius:o,life:s,easing:c,isEnabled:l=!0}=t;return new e(new J(n,r,i),a,o,s,z(c),l)}},fr=class e extends Z{constructor(e,t,n,r,i,a=!0){super(r,i,b,a),this.reset(e,t,n)}get rotationType(){return this._rotationType}set rotationType(e){this._rotationType=e}reset(e,t,n,r,i){this.x=e||0,this.y=t||0,this.z=n||0,e===void 0||e==`same`?this.rotationType=`same`:t==null?this.rotationType=`set`:n===void 0?this.rotationType=`to`:(this.rotationType=`add`,this.x=q(this.x*L),this.y=q(this.y*L),this.z=q(this.z*L)),r&&super.reset(r,i)}initialize(e){switch(this.rotationType){case`same`:break;case`set`:this._setRotation(e.rotation,this.x);break;case`to`:e.transform.fR=e.transform.fR||new J,e.transform.tR=e.transform.tR||new J,this._setRotation(e.transform.fR,this.x),this._setRotation(e.transform.tR,this.y);break;case`add`:e.transform.addR=new J(this.x.getValue(),this.y.getValue(),this.z.getValue());break}}_setRotation(e,t){if(e=e||new J,t==`random`){var n=G.randomAToB(-I,I),r=G.randomAToB(-I,I),i=G.randomAToB(-I,I);e.set(n,r,i)}else t instanceof J&&e.copy(t)}mutate(e,t,n){switch(this.energize(e,t,n),this.rotationType){case`same`:e.rotation||(e.rotation=new J),e.rotation.copy(e.velocity);break;case`set`:break;case`to`:e.rotation.x=G.lerp(e.transform.fR.x,e.transform.tR.x,this.energy),e.rotation.y=G.lerp(e.transform.fR.y,e.transform.tR.y,this.energy),e.rotation.z=G.lerp(e.transform.fR.z,e.transform.tR.z,this.energy);break;case`add`:e.rotation.add(e.transform.addR);break}}static fromJSON(t){let{x:n,y:r,z:i,life:a,easing:o,isEnabled:s=!0}=t;return new e(n,r,i,a,z(o),s)}},pr=class e extends Z{constructor(e,t,n,r,i=!0){super(n,r,x,i),this.reset(e,t)}get same(){return this._same}set same(e){this._same=e}reset(e,t,n,r){this.same=t==null,this.scaleA=q(e||1),this.scaleB=q(t),n&&super.reset(n,r)}initialize(e){e.transform.scaleA=this.scaleA.getValue(),e.transform.oldRadius=e.radius,e.transform.scaleB=this.same?e.transform.scaleA:this.scaleB.getValue()}mutate(e,t,n){this.energize(e,t,n),e.scale=G.lerp(e.transform.scaleA,e.transform.scaleB,this.energy),e.scale<5e-4&&(e.scale=0),e.radius=e.transform.oldRadius*e.scale}static fromJSON(t){let{scaleA:n,scaleB:r,life:i,easing:a,isEnabled:o=!0}=t;return new e(n,r,i,z(a),o)}},mr=class e extends Z{constructor(e,t,n,r,i,a,o,s=!0){super(a,o,S,s),this.reset(e,t,n,r,i)}reset(e,t,n,r,i){this.pos?this.pos.set(e,t,n):this.pos=new J(e,t,n),this.spring=r||.1,this.friction=i||.98}mutate(e,t,n){this.energize(e,t,n),e.velocity.x+=(this.pos.x-e.position.x)*this.spring,e.velocity.y+=(this.pos.y-e.position.y)*this.spring,e.velocity.z+=(this.pos.z-e.position.z)*this.spring}static fromJSON(t){let{x:n,y:r,z:i,spring:a,friction:o,life:s,easing:c,isEnabled:l=!0}=t;return new e(n,r,i,a,o,s,z(c),l)}},hr=s({Alpha:()=>rr,Attraction:()=>ir,Behaviour:()=>Z,Collision:()=>ar,Color:()=>or,CrossZone:()=>sr,Force:()=>cr,Gravity:()=>lr,RandomDrift:()=>ur,Repulsion:()=>dr,Rotate:()=>fr,Scale:()=>pr,Spring:()=>mr}),gr=e=>zn.fromJSON(e),_r=(e,t)=>{let n=[];return e.forEach(e=>{let{type:r,properties:i}=e;if(!Ue.includes(r))throw Error(`The initializer type ${r} is invalid or not yet supported`);F.includes(r)?n.push(Gn[r].fromJSON(i,t)):n.push(Gn[r].fromJSON(i))}),n},vr=e=>{let t=[];return e.forEach(e=>{let{type:n,properties:r}=e;if(!We.includes(n))throw Error(`The behaviour type ${n} is invalid or not yet supported`);t.push(hr[n].fromJSON(r))}),t},yr=(e,t,n,r)=>{let{preParticles:i=500,integrationType:a=he,emitters:o=[]}=e,s=new n(t,i,a);return o.forEach(e=>{let n=new r,{rate:i,rotation:a,initializers:o,behaviours:c,emitterBehaviours:l=[],position:u,totalEmitTimes:d=1/0,life:f=1/0,damping:p=Kn}=e;n.damping=p,n.setRate(gr(i)).setRotation(a).setInitializers(_r(o,t)).setBehaviours(vr(c)).setEmitterBehaviours(vr(l)).setPosition(u).emit(d,f),s.addEmitter(n)}),s},br={shouldAutoEmit:!0},xr=e=>zn.fromJSON(e),Sr=(e,t)=>new Promise((n,r)=>{if(!e.length)return n([]);let i=e.length,a=[],o=e.filter(({properties:e})=>!e.texture),s=e.filter(({properties:e})=>e.texture);o.forEach(e=>{let{type:o,properties:s}=e;if(!Ue.includes(o))return r(`The initializer type ${o} is invalid or not yet supported`);if(F.includes(o)?a.push(Gn[o].fromJSON(s,t)):a.push(Gn[o].fromJSON(s)),a.length===i)return n(a)}),s.forEach(e=>{let{type:o,properties:s,properties:{texture:c}}=e,l=new t.TextureLoader;if(!Ue.includes(o))return r(`The initializer type ${o} is invalid or not yet supported`);l.load(c,e=>{if(a.push(Bn.fromJSON({...s,loadedTexture:e},t)),a.length===i)return n(a)},void 0,r)})}),Cr=e=>new Promise((t,n)=>{if(!e.length)return t([]);let r=e.length,i=[];e.forEach(e=>{let{type:a,properties:o}=e;if(!We.includes(a))return n(`The behaviour type ${a} is invalid or not yet supported`);if(i.push(hr[a].fromJSON(o)),i.length===r)return t(i)})}),wr=(e,t,n,r)=>new Promise((i,a)=>{if(!e.length)return i([]);let o=[],s=e.length;if(!s)return i(o);e.forEach(e=>{let c=new t,{rate:l,rotation:u,initializers:d,behaviours:f,emitterBehaviours:p=[],position:m,totalEmitTimes:h=1/0,life:g=1/0,damping:_=Kn}=e;c.damping=_,c.setRate(xr(l)).setRotation(u).setPosition(m),Sr(d,n).then(e=>(c.setInitializers(e),Cr(f))).then(e=>(c.setBehaviours(e),Cr(p))).then(e=>(c.setEmitterBehaviours(e),Promise.resolve(c))).then(e=>{if(o.push(r?e.emit(h,g):e.setTotalEmitTimes(h).setLife(g)),o.length===s)return i(o)}).catch(a)})}),Tr=(e,t,n,r,i={})=>new Promise((a,o)=>{let{preParticles:s=500,integrationType:c=he,emitters:l=[]}=e,u=new n(s,c),{shouldAutoEmit:d}={...br,...i};wr(l,r,t,d).then(e=>{let t=e.length;if(!t)return a(u);e.forEach(e=>{u.addEmitter(e),u.emitters.length===t&&a(u)})}).catch(o)}),Er=class e{constructor(e=500,t=Zt){this.type=sn,this.canUpdate=!0,this.preParticles=e,this.integrationType=t,this.emitters=[],this.renderers=[],this.pool=new Y,this.eventDispatcher=new vn}static fromJSON(t,n){return yr(t,n,e,Zn)}static fromJSONAsync(t,n,r){return Tr(t,n,e,Zn,r)}dispatch(e,t=this){this.eventDispatcher.dispatchEvent(e,t)}addRenderer(e){return this.renderers.push(e),e.init(this),this}removeRenderer(e){return this.renderers.splice(this.renderers.indexOf(e),1),e.remove(this),this}addEmitter(e){let t=this.emitters.length;return e.parent=this,e.index=t,this.emitters.push(e),this.dispatch(mn,e),this}removeEmitter(e){return e.parent===this?(e.parent=null,e.index=void 0,this.emitters.splice(this.emitters.indexOf(e),1),this.dispatch(hn,e),this):this}emit({onStart:e,onUpdate:t,onEnd:n}){e&&e(),t&&this.eventDispatcher.addEventListener(un,t);let r=this.emitters.map(e=>{let{life:t}=e;return t===1/0?(n&&n(),e.experimental_emit(),Promise.resolve()):new Promise(t=>{e.addOnEmitterDeadEventListener(()=>{n&&n(),t()}),e.experimental_emit()})});try{return Promise.all(r)}catch(e){console.warn(e)}}update(e=He){let t=e||.0167;if(this.canUpdate){if(t>0){let e=this.emitters.length;for(;e--;){let n=this.emitters[e];n.update(t),n.particles.length&&this.dispatch(`SYSTEM_UPDATE`)}}this.dispatch(_n)}return Promise.resolve()}getCount(){let e=this.emitters.length,t=0,n;for(n=0;n<e;n++)t+=this.emitters[n].particles.length;return t}destroy(){let e=this.emitters.length;this.canUpdate=!1;for(let t=0;t<e;t++)this.emitters[t]&&this.emitters[t].destroy(),delete this.emitters[t];for(let t=0;t<e;t++)this.renderers[t]&&this.renderers[t].destroy&&(this.renderers[t].destroy(),delete this.renderers[t]);this.emitters.length=0,this.pool.destroy(),this.canUpdate=!0}},Dr={addEventListener:function(e,t){return e.eventDispatcher.addEventListener(`SYSTEM_UPDATE`,t),this},drawZone:function(e,t,n,r={}){let{width:i=15,height:a=15,depth:o=15,radius:s=15,x:c=0,y:l=0,z:u=0}=r,d;r.isPointZone()&&(d=new e.SphereGeometry(15)),r.isLineZone(),r.isBoxZone()&&(d=new e.BoxGeometry(i,a,o)),r.isSphereZone()&&(d=new e.SphereGeometry(s,15,15)),r.isMeshZone()&&(d=r.geometry.geometry?r.geometry.geometry.clone():r.geometry.clone()),d||(d=new e.BoxGeometry(i,a,o));let f=new e.MeshBasicMaterial({color:`#2194ce`,wireframe:!0}),p=new e.Mesh(d.clone(),f);n.add(p),this.addEventListener(t,function(){p.position.set(c,l,u)})},drawEmitter:function(e,t,n,r,i){let a=new e.OctahedronGeometry(15),o=new e.MeshBasicMaterial({color:i||`#aaa`,wireframe:!0}),s=new e.Mesh(a.clone(),o);n.add(s),this.addEventListener(t,function(){s.position.copy(r.position),s.rotation.set(r.rotation.x,r.rotation.y,r.rotation.z)})},renderInfo:(function(){function e(e,t){var n=e==`material`?`_materialPool`:`_targetPool`;return t.renderers[0][n].cID}function t(e){var t=e.emitters[0];return Math.round(t.p.x)+`,`+Math.round(t.p.y)+`,`+Math.round(t.p.z)}return function(n,r){this.addInfo(r);var i=``;switch(this._infoType){case 2:i+=`emitter:`+n.emitters.length+`<br>`,i+=`em speed:`+n.emitters[0].cID+`<br>`,i+=`pos:`+t(n);break;case 3:i+=n.renderers[0].name+`<br>`,i+=`target:`+e(`target`)+`<br>`,i+=`material:`+e(`material`);break;default:i+=`particles:`+n.getCount()+`<br>`,i+=`pool:`+n.pool.getCount()+`<br>`,i+=`total:`+(n.getCount()+n.pool.getCount())}this._infoCon.innerHTML=i}})(),addInfo:(function(){return function(e){var t=this;if(!this._infoCon){this._infoCon=document.createElement(`div`),this._infoCon.style.cssText=[`position:fixed;bottom:0px;left:0;cursor:pointer;`,`opacity:0.9;z-index:10000;padding:10px;font-size:12px;`,`width:120px;height:50px;background-color:#002;color:#0ff;`].join(``),this._infoType=1,this._infoCon.addEventListener(`click`,function(){t._infoType++,t._infoType>3&&(t._infoType=1)},!1);var n,r;switch(e){case 2:n=`#201`,r=`#f08`;break;case 3:n=`#020`,r=`#0f0`;break;default:n=`#002`,r=`#0ff`}this._infoCon.style[`background-color`]=n,this._infoCon.style.color=r}this._infoCon.parentNode||document.body.appendChild(this._infoCon)}})()};function Or(){let e=0;if(window.console&&window.console.trace){var t=Array.prototype.slice.call(arguments);if((arguments[0]+``).indexOf(`+`)==0){var n=parseInt(arguments[0]);e<n&&(t.shift(),console.trace.apply(console,t),e++)}else t.unshift(`+15`),this.apply(console,t)}}var kr=class extends Zn{constructor(e,t,n){super(n),this.type=Xn,this.mouseTarget=U.initValue(e,window),this.ease=U.initValue(t,.7),this._allowEmitting=!1,this.initEventHandler()}initEventHandler(){var e=this;this.mousemoveHandler=function(t){e.mousemove.call(e,t)},this.mousedownHandler=function(t){e.mousedown.call(e,t)},this.mouseupHandler=function(t){e.mouseup.call(e,t)},this.mouseTarget.addEventListener(`mousemove`,this.mousemoveHandler,!1)}emit(){this._allowEmitting=!0}stopEmit(){this._allowEmitting=!1}setCameraAndCanvas(e,t){this.camera=e,this.canvas=t}mousemove(e){e.layerX||e.layerX==0?(this.position.x+=(e.layerX-this.position.x)*this.ease,this.position.y+=(e.layerY-this.position.y)*this.ease):(e.offsetX||e.offsetX==0)&&(this.position.x+=(e.offsetX-this.position.x)*this.ease,this.position.y+=(e.offsetY-this.position.y)*this.ease),this.position.copy(H.toSpacePos(this.position,this.camera,this.canvas)),this._allowEmitting&&super.emit(`once`)}destroy(){super.destroy(),this.mouseTarget.removeEventListener(`mousemove`,this.mousemoveHandler,!1)}},Ar=class{constructor(e=ce){this.type=e}init(e){var t=this;this.system=e,this.system.eventDispatcher.addEventListener(un,function(e){t.onSystemUpdate.call(t,e)}),this.system.eventDispatcher.addEventListener(dn,function(e){t.onParticleCreated.call(t,e)}),this.system.eventDispatcher.addEventListener(fn,function(e){t.onParticleUpdate.call(t,e)}),this.system.eventDispatcher.addEventListener(pn,function(e){t.onParticleDead.call(t,e)}),this.logRendererType()}remove(){this.system=null}onParticleCreated(e){}onParticleUpdate(e){}onParticleDead(e){}onSystemUpdate(e){}logRendererType(){ge&&console.log(`${this.type}`)}},jr=class extends Ar{constructor(){super(le),this.targetPool=new Y,this.materialPool=new Y}onSystemUpdate(){}onParticleCreated(e){}onParticleUpdate(e){}onParticleDead(e){}},Mr=class extends Ar{constructor(e,t){super(de),this.container=e,this._targetPool=new Y,this._materialPool=new Y,this._body=new t.Mesh(new t.BoxGeometry(50,50,50),new t.MeshLambertMaterial({color:`#ff0000`}))}isThreeSprite(e){return e.target.isSprite}onSystemUpdate(){}onParticleCreated(e){e.target||(e.body||(e.body=this._body),e.target=this._targetPool.get(e.body),(e.useAlpha||e.useColor)&&(e.target.material.__puid=qe.id(e.body.material),e.target.material=this._materialPool.get(e.target.material))),e.target&&(e.target.position.copy(e.position),this.container.add(e.target))}onParticleUpdate(e){let{target:t,useAlpha:n,useColor:r}=e;t&&(t.position.copy(e.position),this.rotate(e),this.scale(e),n&&(t.material.opacity=e.alpha,t.material.transparent=!0),r&&t.material.color.copy(e.color))}rotate(e){e.target.rotation.set(e.rotation.x,e.rotation.y,e.rotation.z)}scale(e){e.target.scale.set(e.scale,e.scale,e.scale)}onParticleDead(e){e.target&&((e.useAlpha||e.useColor)&&this._materialPool.expire(e.target.material),this._targetPool.expire(e.target),this.container.remove(e.target),e.target=null)}},Nr=class extends Mr{constructor(e,t){super(e,t),this.type=ue,this._body=new t.Sprite(new t.SpriteMaterial({color:16777215}))}rotate(e){e.target.material.rotation=e.rotation.z}scale(e){e.target.scale.set(e.scale*e.radius,e.scale*e.radius,1)}},Pr=1e4,Fr=[12,4,4,16].reduce((e,t)=>e+t),Ir={position:3,rotation:1,size:1,color:4,alpha:1,texID:2};[3,1,1,4,1,2].reduce((e,t)=>e+t);var Lr={blending:`AdditiveBlending`,baseColor:16777215,depthTest:!0,depthWrite:!1,transparent:!0,maxParticles:Pr,shouldDebugTextureAtlas:!1,shouldForceDesktopRenderer:!1,shouldForceMobileRenderer:!1},Rr=class{constructor(e){this.position=new e.Vector3,this.rotation=new e.Vector3,this.size=0,this.color=new e.Color,this.alpha=0,this.texture=null,this.index=0}reset(){this.position.set(0,0,0),this.rotation.set(0,0,0),this.size=0,this.color.setRGB(0,0,0),this.alpha=0,this.texture=null}},zr=class{constructor(e=1/0){this.max=e,this.count=0,this._items={}}add(e){this._items[e]===void 0&&(this._items[e]=this.count++)}find(e){return this._items[e]}destroy(){this._items={},this.count=0}},Br,Vr=class{constructor(e=Pr,t){Br=t,this.maxParticles=e,this.createInterleavedBuffer().createBufferGeometry()}createInterleavedBuffer(){let e=new ArrayBuffer(this.maxParticles*Fr);return this.interleavedBuffer=new Br.InterleavedBuffer(new Float32Array(e),Fr),this}createBufferGeometry(){this.geometry=new Br.BufferGeometry;let{interleavedBuffer:e,geometry:t}=this;return Object.keys(Ir).reduce((n,r)=>{let i=Ir[r];return t.setAttribute(r,new Br.InterleavedBufferAttribute(e,i,n)),n+=i},0),this}get buffer(){return this.interleavedBuffer}get stride(){return Fr}};function Hr(e){let t=0,n=0;for(let r of e)t+=r.w*r.h,n=Math.max(n,r.w);e.sort((e,t)=>t.h-e.h);let r=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(t/.95)),n),h:1/0}],i=0,a=0;for(let t of e)for(let e=r.length-1;e>=0;e--){let n=r[e];if(!(t.w>n.w||t.h>n.h)){if(t.x=n.x,t.y=n.y,a=Math.max(a,t.y+t.h),i=Math.max(i,t.x+t.w),t.w===n.w&&t.h===n.h){let t=r.pop();e<r.length&&(r[e]=t)}else t.h===n.h?(n.x+=t.w,n.w-=t.w):t.w===n.w?(n.y+=t.h,n.h-=t.h):(r.push({x:n.x+t.w,y:n.y,w:n.w-t.w,h:t.h}),n.y+=t.h,n.h-=t.h);break}}return{w:i,h:a,fill:t/(i*a)||0}}var Ur=class{constructor(e,t){let{three:n,type:r}=e,i=new Float32Array(256*4),a=this.ctx=document.createElement(`canvas`).getContext(`2d`),{canvas:o}=a;this.shouldDebug=t,this.rendererType=r,this.indexData=i,this.canvas=o,this.entries=[],r===`DesktopGPURenderer`&&(this.atlasIndex=new n.DataTexture(i,256,1,n.RGBAFormat,n.FloatType)),o.width=o.height=256,t&&this.debug(o,a),this.atlasTexture=new n.CanvasTexture(o),this.atlasTexture.flipY=!1,e.material.uniforms.uTexture.value=this.atlasTexture,r===`DesktopGPURenderer`&&(e.material.uniforms.atlasIndex.value=this.atlasIndex),e.material.uniformsNeedUpdate=!0}log(...e){ge&&console.log(...e)}debug(){let{canvas:e,ctx:t}=this,n=e.width;t.fillStyle=`purple`,t.fillRect(0,0,n,n),t.fillStyle=`green`,t.fillRect(0,n,n,n),t.fillStyle=`blue`,t.fillRect(n,0,n,n),t.fillStyle=`orange`,t.fillRect(n,n,n,n),t.fillStyle=`yellow`,t.font=e.width+`px Verdana`,t.fillText(`top row`,100,500),t.fillStyle=`pink`,t.fillText(`bottom row`,100,1500),e.style.position=`absolute`,e.style.width=e.style.height=`300px`,e.style.left=e.style.top=`0px`,e.style.zIndex=100,document.body.appendChild(e)}addTexture(e){this.log(`Adding texture to atlas:`,e.uuid),e.textureIndex=this.entries.length,this.entries.push({texture:e}),this.needsUpdate=!0}update(){if(!this.needsUpdate)return;let{entries:e,canvas:t,indexData:n,ctx:r,atlasIndex:i,atlasTexture:a,rendererType:o}=this;for(let t=0;t<e.length;t++)if(!e[t].texture.image)return;this.needsUpdate=!1;for(let t=0;t<e.length;t++){let n=e[t],{texture:r}=n,{width:i,height:a}=r.image;n.w=i,n.h=a}let s=Hr(e);this.log(`Rebuilt atlas:`,s),(t.width!=s.w||t.height!=s.h)&&(t.width=s.w,t.height=s.h);for(let i=0;i<e.length;i++){let e=this.entries[i],a=e.texture.textureIndex*4;o===`DesktopGPURenderer`&&(n[a+0]=e.x/t.width,n[a+1]=e.y/t.height,n[a+2]=(e.x+e.w)/t.width,n[a+3]=(e.y+e.h)/t.height),o===`MobileGPURenderer`&&(n[a+0]=e.x/(t.width+1),n[a+1]=e.y/(t.height+1),n[a+2]=(e.x+e.w)/(t.width+1),n[a+3]=(e.y+e.h)/(t.height+1)),r.drawImage(e.texture.image,e.x,e.y,e.w,e.h)}o===`DesktopGPURenderer`&&(i.needsUpdate=!0),a.needsUpdate=!0}destroy(){let{atlasIndex:e,atlasTexture:t,canvas:n}=this;t.dispose(),e&&e.dispose(),this.shouldDebug&&n.remove(),this.entries=[]}},Wr=()=>`
2
+ uniform vec3 baseColor;
3
+ uniform sampler2D uTexture;
4
+ uniform sampler2D atlasIndex;
5
+
6
+ varying float vRotation;
7
+ varying vec3 targetColor;
8
+ varying float targetAlpha;
9
+ varying vec4 tileRect;
10
+ varying float tileID;
11
+
12
+ void main() {
13
+ gl_FragColor = vec4(baseColor * targetColor, targetAlpha);
14
+
15
+ vec2 uv = gl_PointCoord;
16
+ uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);
17
+
18
+ float mid = 0.5;
19
+ uv = vec2(
20
+ cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,
21
+ cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid
22
+ );
23
+
24
+ gl_FragColor = gl_FragColor * texture2D(uTexture, uv);
25
+
26
+ }
27
+ `,Gr=`600.0`,Kr=()=>`
28
+ uniform sampler2D uTexture;
29
+ //atlasIndex is a 256x1 float texture of tile rectangles as r=minx g=miny b=maxx a=maxy
30
+ uniform sampler2D atlasIndex;
31
+
32
+ attribute float size;
33
+ attribute vec3 color;
34
+ attribute float alpha;
35
+ attribute float texID;
36
+ attribute float rotation;
37
+
38
+ varying float vRotation;
39
+ varying vec3 targetColor;
40
+ varying float targetAlpha;
41
+ varying vec4 tileRect;
42
+ varying float tileID;
43
+
44
+ void main() {
45
+ vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
46
+ targetColor = color;
47
+ targetAlpha = alpha;
48
+ vRotation = rotation;
49
+
50
+ tileID = texID;
51
+ //get the tile rectangle from the atlasIndex texture..
52
+ tileRect = texture2D(atlasIndex, vec2((tileID + 0.5) / 256.0, 0.5));
53
+
54
+ gl_PointSize = ((size * ${Gr}) / -mvPosition.z);
55
+ gl_Position = projectionMatrix * mvPosition;
56
+ }
57
+ `,Q,qr=class extends Ar{constructor(e,t,n=Lr){super(me),Q=this.three=t;let{camera:r,maxParticles:i,baseColor:a,blending:o,depthTest:s,depthWrite:c,transparent:l,shouldDebugTextureAtlas:u}={...Lr,...n},d=new Vr(i,Q),f=new Q.ShaderMaterial({uniforms:{baseColor:{value:new Q.Color(a)},uTexture:{value:null},atlasIndex:{value:null}},vertexShader:Kr(),fragmentShader:Wr(),blending:Q[o],depthTest:s,depthWrite:c,transparent:l});this.container=e,this.camera=r,this.targetPool=new Y,this.uniqueList=new zr(i),this.particleBuffer=d,this.buffer=d.buffer,this.stride=d.stride,this.geometry=d.geometry,this.material=f,this.points=new Q.Points(this.geometry,this.material),this.points.frustumCulled=!1,this.shouldDebugTextureAtlas=u,this.container.add(this.points)}onSystemUpdate(e){super.onSystemUpdate(e),this.buffer.needsUpdate=!0,this.textureAtlas&&this.textureAtlas.update()}onParticleCreated(e){e.target||(e.target=this.targetPool.get(Rr,Q),this.uniqueList.add(e.id)),this.updateTarget(e).mapParticleTargetPropsToPoint(e)}onParticleUpdate(e){e.target&&this.updateTarget(e).mapParticleTargetPropsToPoint(e)}onParticleDead(e){e.target&&(e.target.reset(),this.mapParticleTargetPropsToPoint(e),e.target=null)}updateTarget(e){let{position:t,rotation:n,scale:r,radius:i,color:a,alpha:o,body:s,id:c}=e,{r:l,g:u,b:d}=a;if(e.target.position.copy(t),e.target.rotation.copy(n),e.target.size=r*i,e.target.color.setRGB(l,u,d),e.target.alpha=o,e.target.index=this.uniqueList.find(c),s&&s instanceof Q.Sprite){let{map:t}=s.material;e.target.texture=t,e.target.textureIndex=this.getTextureID(t,this.shouldDebugTextureAtlas)}return this}mapParticleTargetPropsToPoint(e){return this.updatePointPosition(e).updatePointSize(e).updatePointRotation(e).updatePointColor(e).updatePointAlpha(e).updatePointTextureIndex(e),this}updatePointPosition(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.position;return r.array[i.index*n+a+0]=i.position.x,r.array[i.index*n+a+1]=i.position.y,r.array[i.index*n+a+2]=i.position.z,this}updatePointSize(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.size;return r.array[i.index*n+a+0]=i.size,this}updatePointRotation(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.rotation;return r.array[i.index*n+a+0]=i.rotation.z,this}updatePointColor(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.color;return r.array[i.index*n+a+0]=i.color.r,r.array[i.index*n+a+1]=i.color.g,r.array[i.index*n+a+2]=i.color.b,this}updatePointAlpha(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.alpha;return r.array[i.index*n+a+0]=i.alpha,this}updatePointTextureIndex(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.texID;return r.array[i.index*n+a+0]=i.textureIndex,this}getTextureID(e,t){return e.textureIndex===void 0&&(this.textureAtlas||(this.textureAtlas=new Ur(this,t)),this.textureAtlas.addTexture(e)),e.textureIndex}destroy(){let{container:e,points:t,textureAtlas:n,uniqueList:r}=this;e.remove(t),r.destroy(),n&&n.destroy()}},Jr=()=>`
58
+ uniform vec3 baseColor;
59
+ uniform sampler2D uTexture;
60
+
61
+ varying float vRotation;
62
+ varying vec3 targetColor;
63
+ varying float targetAlpha;
64
+ varying vec4 tileRect;
65
+
66
+ void main() {
67
+ gl_FragColor = vec4(baseColor * targetColor, targetAlpha);
68
+
69
+ vec2 uv = gl_PointCoord;
70
+ uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);
71
+
72
+ float mid = 0.5;
73
+ uv = vec2(
74
+ cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,
75
+ cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid
76
+ );
77
+
78
+ gl_FragColor = gl_FragColor * texture2D(uTexture, uv);
79
+ }
80
+ `,Yr=()=>`
81
+ uniform sampler2D uTexture;
82
+ uniform vec2 atlasDim;
83
+
84
+ attribute float size;
85
+ attribute vec3 color;
86
+ attribute float alpha;
87
+ attribute vec2 texID;
88
+ attribute float rotation;
89
+
90
+ varying float vRotation;
91
+ varying vec3 targetColor;
92
+ varying float targetAlpha;
93
+ varying vec4 tileRect;
94
+
95
+ void main() {
96
+ vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
97
+ targetColor = color;
98
+ targetAlpha = alpha;
99
+ vRotation = rotation;
100
+
101
+ vec2 tmin = floor(texID) / atlasDim;
102
+ vec2 tmax = fract(texID);
103
+ tileRect = vec4(tmin,tmax);
104
+
105
+ gl_PointSize = ((size * ${Gr}) / -mvPosition.z);
106
+ gl_Position = projectionMatrix * mvPosition;
107
+ }
108
+ `,$,Xr=class extends Ar{constructor(e,t,n=Lr){super(pe),$=this.three=t;let{camera:r,maxParticles:i,baseColor:a,blending:o,depthTest:s,depthWrite:c,transparent:l,shouldDebugTextureAtlas:u}={...Lr,...n},d=new Vr(i,$),f=new $.ShaderMaterial({uniforms:{baseColor:{value:new $.Color(a)},uTexture:{value:null},FFatlasIndex:{value:null},atlasDim:{value:new $.Vector2}},vertexShader:Yr(),fragmentShader:Jr(),blending:$[o],depthTest:s,depthWrite:c,transparent:l});this.camera=r,this.targetPool=new Y,this.uniqueList=new zr(i),this.particleBuffer=d,this.buffer=d.buffer,this.stride=d.stride,this.geometry=d.geometry,this.material=f,this.points=new $.Points(this.geometry,this.material),this.points.frustumCulled=!1,this.shouldDebugTextureAtlas=u,e.add(this.points)}onSystemUpdate(e){super.onSystemUpdate(e),this.buffer.needsUpdate=!0;let{textureAtlas:t}=this;t&&(t.update(),this.material.uniforms.atlasDim.value.set(t.atlasTexture.image.width,t.atlasTexture.image.height))}onParticleCreated(e){e.target||(e.target=this.targetPool.get(Rr,$),this.uniqueList.add(e.id)),this.updateTarget(e).mapParticleTargetPropsToPoint(e)}onParticleUpdate(e){e.target&&this.updateTarget(e).mapParticleTargetPropsToPoint(e)}onParticleDead(e){e.target&&(e.target.reset(),this.mapParticleTargetPropsToPoint(e),e.target=null)}updateTarget(e){let{position:t,rotation:n,scale:r,radius:i,color:a,alpha:o,body:s,id:c}=e,{r:l,g:u,b:d}=a;if(e.target.position.copy(t),e.target.rotation.copy(n),e.target.size=r*i,e.target.color.setRGB(l,u,d),e.target.alpha=o,e.target.index=this.uniqueList.find(c),s&&s instanceof $.Sprite){let{map:t}=s.material;e.target.texture=t,e.target.textureIndex=this.getTextureID(t,this.shouldDebugTextureAtlas)}return this}mapParticleTargetPropsToPoint(e){return this.updatePointPosition(e).updatePointSize(e).updatePointRotation(e).updatePointColor(e).updatePointAlpha(e).updatePointTextureIndex(e),this}updatePointPosition(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.position;return r.array[i.index*n+a+0]=i.position.x,r.array[i.index*n+a+1]=i.position.y,r.array[i.index*n+a+2]=i.position.z,this}updatePointSize(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.size;return r.array[i.index*n+a+0]=i.size,this}updatePointRotation(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.rotation;return r.array[i.index*n+a+0]=i.rotation.z,this}updatePointColor(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.color;return r.array[i.index*n+a+0]=i.color.r,r.array[i.index*n+a+1]=i.color.g,r.array[i.index*n+a+2]=i.color.b,this}updatePointAlpha(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.alpha;return r.array[i.index*n+a+0]=i.alpha,this}updatePointTextureIndex(e){let{geometry:t,stride:n,buffer:r}=this,{target:i}=e,{offset:a}=t.attributes.texID,o=i.index*n+a+0;{let e=i.textureIndex*4,t=this.textureAtlas,n=t.indexData,a=n[e++],s=n[e++],c=n[e++],l=n[e++];r.array[o]=(a*t.atlasTexture.image.width|0)+c,r.array[o+1]=(s*t.atlasTexture.image.height|0)+l}return this}getTextureID(e,t){return e.textureIndex===void 0&&(this.textureAtlas||(this.textureAtlas=new Ur(this,t)),this.textureAtlas.addTexture(e)),e.textureIndex}destroy(){let{container:e,points:t,textureAtlas:n,uniqueList:r}=this;e.remove(t),r.destroy(),n&&n.destroy()}},Zr=class extends Ar{constructor(e,t,n=Lr){super(fe);let{shouldForceDesktopRenderer:r,shouldForceMobileRenderer:i}=n,a=[e,t,n];return r?new qr(...a):i||!this.isFloatingPointTextureSupported()?new Xr(...a):new qr(...a)}isFloatingPointTextureSupported(){let e=document.createElement(`canvas`);if(window.WebGL2RenderingContext&&e.getContext(`webgl2`))return!0;let t=!!e.getContext(`webgl`).getExtension(`OES_texture_float`);return e.remove(),t}},Qr=Er;exports.Alpha=rr,exports.ArraySpan=Kt,exports.Attraction=ir,exports.Behaviour=Z,exports.Body=yn,exports.BodySprite=Cn,exports.Box=Xt,exports.BoxZone=kn,exports.Collision=ar,exports.Color=or,exports.ColorSpan=Jt,exports.ColorUtil=Ke,exports.CrossZone=sr,exports.CustomRenderer=jr,exports.Debug=Dr,exports.Emitter=Zn,exports.FollowEmitter=kr,exports.Force=cr,exports.GPURenderer=Zr,exports.Gravity=lr,exports.INTEGRATION_TYPE_EULER=Zt,exports.INTEGRATION_TYPE_RK2=Qt,exports.INTEGRATION_TYPE_RK4=$t,exports.INTEGRATION_TYPE_VERLET=en,exports.InitializerUtil=Tn,exports.Life=En,exports.LineZone=An,exports.Mass=Dn,exports.MathUtils=G,exports.MeshRenderer=Mr,exports.MeshZone=jn,exports.PUID=qe,exports.Particle=cn,exports.PointZone=Mn,exports.Polar3D=rn,exports.PolarVelocity=Hn,exports.Pool=Y,exports.Position=In,exports.RadialVelocity=Un,exports.Radius=Rn,exports.RandomDrift=ur,exports.Rate=zn,exports.Repulsion=dr,exports.Rotate=fr,exports.Rotation=Ln,exports.Scale=pr,exports.ScreenZone=Nn,exports.Span=K,exports.SphereZone=Pn,exports.Spring=mr,exports.SpriteRenderer=Nr,exports.System=Er,exports.THREEUtil=H,exports.Texture=Bn,exports.Util=U,exports.Vector3D=J,exports.VectorVelocity=Wn,exports.createArraySpan=qt,exports.createColorSpan=Yt,exports.createSpan=q,exports.default=Qr,exports.ease=R,exports.easeInBack=Ie,exports.easeInCirc=Ne,exports.easeInCubic=xe,exports.easeInExpo=Ae,exports.easeInOutBack=Re,exports.easeInOutCirc=Fe,exports.easeInOutCubic=Ce,exports.easeInOutExpo=Me,exports.easeInOutQuad=be,exports.easeInOutQuart=Ee,exports.easeInOutSine=ke,exports.easeInQuad=ve,exports.easeInQuart=we,exports.easeInSine=De,exports.easeLinear=_e,exports.easeOutBack=Le,exports.easeOutCirc=Pe,exports.easeOutCubic=Se,exports.easeOutExpo=je,exports.easeOutQuad=ye,exports.easeOutQuart=Te,exports.easeOutSine=Oe,exports.getEasingByName=z,exports.integrate=nn,exports.log=Or,exports.setEasingByName=ze,exports.uid=at,exports.withDefaults=ot;
109
+ //# sourceMappingURL=three-nebula.cjs.map