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.
- package/.claude/rules/no-coauthor.md +4 -0
- package/CHANGELOG.md +33 -0
- package/dist/three-nebula.cjs +109 -0
- package/dist/three-nebula.cjs.map +1 -0
- package/dist/three-nebula.mjs +2968 -0
- package/dist/three-nebula.mjs.map +1 -0
- package/dist/three-nebula.umd.js +109 -0
- package/dist/three-nebula.umd.js.map +1 -0
- package/package.json +32 -56
- package/specs/01-emitter-hierarchy.md +200 -0
- package/specs/02-determinism-scrubbing.md +188 -0
- package/specs/03-sound-renderer.md +183 -0
- package/specs/04-schema-versioning.md +140 -0
- package/specs/05-content-addressed-assets.md +288 -0
- package/specs/README.md +80 -0
- package/build/cjs/behaviour/Alpha.js +0 -189
- package/build/cjs/behaviour/Attraction.js +0 -189
- package/build/cjs/behaviour/Behaviour.js +0 -253
- package/build/cjs/behaviour/Collision.js +0 -146
- package/build/cjs/behaviour/Color.js +0 -148
- package/build/cjs/behaviour/CrossZone.js +0 -141
- package/build/cjs/behaviour/Force.js +0 -126
- package/build/cjs/behaviour/Gravity.js +0 -78
- package/build/cjs/behaviour/RandomDrift.js +0 -153
- package/build/cjs/behaviour/Repulsion.js +0 -123
- package/build/cjs/behaviour/Rotate.js +0 -265
- package/build/cjs/behaviour/Scale.js +0 -177
- package/build/cjs/behaviour/Spring.js +0 -133
- package/build/cjs/behaviour/constants.js +0 -28
- package/build/cjs/behaviour/index.js +0 -112
- package/build/cjs/behaviour/types.js +0 -33
- package/build/cjs/constants/index.js +0 -61
- package/build/cjs/core/Particle.js +0 -390
- package/build/cjs/core/Pool.js +0 -203
- package/build/cjs/core/System.js +0 -366
- package/build/cjs/core/constants.js +0 -163
- package/build/cjs/core/fromJSON.js +0 -128
- package/build/cjs/core/fromJSONAsync.js +0 -239
- package/build/cjs/core/index.js +0 -32
- package/build/cjs/core/three/Euler.js +0 -233
- package/build/cjs/core/three/Math.js +0 -91
- package/build/cjs/core/three/Matrix4.js +0 -745
- package/build/cjs/core/three/Quaternion.js +0 -451
- package/build/cjs/core/three/Vector3.js +0 -464
- package/build/cjs/core/three/constants.js +0 -298
- package/build/cjs/core/three/index.js +0 -48
- package/build/cjs/core/types.js +0 -13
- package/build/cjs/debug/Debug.js +0 -209
- package/build/cjs/debug/constants.js +0 -19
- package/build/cjs/debug/index.js +0 -24
- package/build/cjs/debug/log.js +0 -38
- package/build/cjs/ease/index.js +0 -149
- package/build/cjs/emitter/Emitter.js +0 -791
- package/build/cjs/emitter/FollowEmitter.js +0 -146
- package/build/cjs/emitter/constants.js +0 -20
- package/build/cjs/emitter/index.js +0 -24
- package/build/cjs/emitter/types.js +0 -11
- package/build/cjs/events/EventDispatcher.js +0 -105
- package/build/cjs/events/constants.js +0 -23
- package/build/cjs/events/index.js +0 -27
- package/build/cjs/index.js +0 -151
- package/build/cjs/initializer/Body.js +0 -122
- package/build/cjs/initializer/BodySprite.js +0 -146
- package/build/cjs/initializer/Initializer.js +0 -109
- package/build/cjs/initializer/InitializerUtil.js +0 -54
- package/build/cjs/initializer/Life.js +0 -106
- package/build/cjs/initializer/Mass.js +0 -101
- package/build/cjs/initializer/Position.js +0 -152
- package/build/cjs/initializer/Radius.js +0 -118
- package/build/cjs/initializer/Rate.js +0 -150
- package/build/cjs/initializer/Texture.js +0 -139
- package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
- package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
- package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
- package/build/cjs/initializer/Velocity/Velocity.js +0 -94
- package/build/cjs/initializer/Velocity/index.js +0 -32
- package/build/cjs/initializer/constants.js +0 -43
- package/build/cjs/initializer/index.js +0 -100
- package/build/cjs/initializer/types.js +0 -35
- package/build/cjs/math/ArraySpan.js +0 -103
- package/build/cjs/math/Box.js +0 -46
- package/build/cjs/math/ColorSpan.js +0 -113
- package/build/cjs/math/MathUtils.js +0 -57
- package/build/cjs/math/Polar3D.js +0 -115
- package/build/cjs/math/Span.js +0 -88
- package/build/cjs/math/Vector3D.js +0 -76
- package/build/cjs/math/constants.js +0 -35
- package/build/cjs/math/index.js +0 -122
- package/build/cjs/math/integration.js +0 -59
- package/build/cjs/math/types.js +0 -19
- package/build/cjs/renderer/BaseRenderer.js +0 -108
- package/build/cjs/renderer/CustomRenderer.js +0 -65
- package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -350
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
- package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -364
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -53
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
- package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
- package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
- package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -43
- package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
- package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/index.js +0 -97
- package/build/cjs/renderer/MeshRenderer.js +0 -136
- package/build/cjs/renderer/SpriteRenderer.js +0 -63
- package/build/cjs/renderer/index.js +0 -40
- package/build/cjs/renderer/types.js +0 -21
- package/build/cjs/utils/ColorUtil.js +0 -39
- package/build/cjs/utils/PUID.js +0 -26
- package/build/cjs/utils/THREEUtil.js +0 -40
- package/build/cjs/utils/Util.js +0 -69
- package/build/cjs/utils/index.js +0 -61
- package/build/cjs/utils/uid.js +0 -14
- package/build/cjs/zone/BoxZone.js +0 -178
- package/build/cjs/zone/LineZone.js +0 -101
- package/build/cjs/zone/MeshZone.js +0 -101
- package/build/cjs/zone/PointZone.js +0 -99
- package/build/cjs/zone/ScreenZone.js +0 -164
- package/build/cjs/zone/SphereZone.js +0 -155
- package/build/cjs/zone/Zone.js +0 -172
- package/build/cjs/zone/index.js +0 -56
- package/build/cjs/zone/types.js +0 -21
- package/build/esm/behaviour/Alpha.js +0 -134
- package/build/esm/behaviour/Attraction.js +0 -135
- package/build/esm/behaviour/Behaviour.js +0 -215
- package/build/esm/behaviour/Collision.js +0 -100
- package/build/esm/behaviour/Color.js +0 -101
- package/build/esm/behaviour/CrossZone.js +0 -82
- package/build/esm/behaviour/Force.js +0 -83
- package/build/esm/behaviour/Gravity.js +0 -40
- package/build/esm/behaviour/RandomDrift.js +0 -97
- package/build/esm/behaviour/Repulsion.js +0 -81
- package/build/esm/behaviour/Rotate.js +0 -214
- package/build/esm/behaviour/Scale.js +0 -131
- package/build/esm/behaviour/Spring.js +0 -90
- package/build/esm/behaviour/constants.js +0 -11
- package/build/esm/behaviour/index.js +0 -14
- package/build/esm/behaviour/types.js +0 -14
- package/build/esm/constants/index.js +0 -42
- package/build/esm/core/Particle.js +0 -357
- package/build/esm/core/Pool.js +0 -161
- package/build/esm/core/System.js +0 -320
- package/build/esm/core/constants.js +0 -127
- package/build/esm/core/fromJSON.js +0 -107
- package/build/esm/core/fromJSONAsync.js +0 -210
- package/build/esm/core/index.js +0 -4
- package/build/esm/core/three/Euler.js +0 -224
- package/build/esm/core/three/Math.js +0 -84
- package/build/esm/core/three/Matrix4.js +0 -739
- package/build/esm/core/three/Quaternion.js +0 -445
- package/build/esm/core/three/Vector3.js +0 -457
- package/build/esm/core/three/constants.js +0 -148
- package/build/esm/core/three/index.js +0 -5
- package/build/esm/core/types.js +0 -4
- package/build/esm/debug/Debug.js +0 -195
- package/build/esm/debug/constants.js +0 -7
- package/build/esm/debug/index.js +0 -3
- package/build/esm/debug/log.js +0 -31
- package/build/esm/ease/index.js +0 -113
- package/build/esm/emitter/Emitter.js +0 -701
- package/build/esm/emitter/FollowEmitter.js +0 -97
- package/build/esm/emitter/constants.js +0 -7
- package/build/esm/emitter/index.js +0 -3
- package/build/esm/emitter/types.js +0 -3
- package/build/esm/events/EventDispatcher.js +0 -82
- package/build/esm/events/constants.js +0 -9
- package/build/esm/events/index.js +0 -4
- package/build/esm/index.js +0 -13
- package/build/esm/initializer/Body.js +0 -83
- package/build/esm/initializer/BodySprite.js +0 -108
- package/build/esm/initializer/Initializer.js +0 -84
- package/build/esm/initializer/InitializerUtil.js +0 -48
- package/build/esm/initializer/Life.js +0 -66
- package/build/esm/initializer/Mass.js +0 -60
- package/build/esm/initializer/Position.js +0 -98
- package/build/esm/initializer/Radius.js +0 -75
- package/build/esm/initializer/Rate.js +0 -107
- package/build/esm/initializer/Texture.js +0 -101
- package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
- package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
- package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
- package/build/esm/initializer/Velocity/Velocity.js +0 -52
- package/build/esm/initializer/Velocity/index.js +0 -4
- package/build/esm/initializer/constants.js +0 -26
- package/build/esm/initializer/index.js +0 -11
- package/build/esm/initializer/types.js +0 -15
- package/build/esm/math/ArraySpan.js +0 -62
- package/build/esm/math/Box.js +0 -25
- package/build/esm/math/ColorSpan.js +0 -71
- package/build/esm/math/MathUtils.js +0 -48
- package/build/esm/math/Polar3D.js +0 -81
- package/build/esm/math/Span.js +0 -63
- package/build/esm/math/Vector3D.js +0 -34
- package/build/esm/math/constants.js +0 -24
- package/build/esm/math/index.js +0 -10
- package/build/esm/math/integration.js +0 -47
- package/build/esm/math/types.js +0 -7
- package/build/esm/renderer/BaseRenderer.js +0 -78
- package/build/esm/renderer/CustomRenderer.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -331
- package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -33
- package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -349
- package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -20
- package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -30
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -27
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
- package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
- package/build/esm/renderer/GPURenderer/common/index.js +0 -4
- package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -24
- package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
- package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
- package/build/esm/renderer/GPURenderer/index.js +0 -57
- package/build/esm/renderer/MeshRenderer.js +0 -94
- package/build/esm/renderer/SpriteRenderer.js +0 -26
- package/build/esm/renderer/index.js +0 -5
- package/build/esm/renderer/types.js +0 -8
- package/build/esm/utils/ColorUtil.js +0 -32
- package/build/esm/utils/PUID.js +0 -19
- package/build/esm/utils/THREEUtil.js +0 -31
- package/build/esm/utils/Util.js +0 -60
- package/build/esm/utils/index.js +0 -13
- package/build/esm/utils/uid.js +0 -3
- package/build/esm/zone/BoxZone.js +0 -133
- package/build/esm/zone/LineZone.js +0 -61
- package/build/esm/zone/MeshZone.js +0 -60
- package/build/esm/zone/PointZone.js +0 -59
- package/build/esm/zone/ScreenZone.js +0 -116
- package/build/esm/zone/SphereZone.js +0 -113
- package/build/esm/zone/Zone.js +0 -141
- package/build/esm/zone/index.js +0 -7
- package/build/esm/zone/types.js +0 -8
- package/build/three-nebula.js +0 -2
- package/build/three-nebula.js.map +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.Nebula={}))})(this,function(e){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;l<u;l++)d=c[l],!o.call(e,d)&&d!==a&&n(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},u=(e,r,i)=>(i=e==null?{}:t(a(e)),l(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),d=`Behaviour`,f=`Alpha`,p=`Attraction`,m=`Collision`,h=`Color`,g=`CrossZone`,_=`Force`,v=`Gravity`,y=`RandomDrift`,b=`Repulsion`,x=`Rotate`,S=`Scale`,C=`Spring`,w=`Initializer`,T=`Body`,E=`BodySprite`,D=`Texture`,O=`Life`,k=`Mass`,A=`Position`,j=`Rotation`,M=`Radius`,N=`VectorVelocity`,P=`PolarVelocity`,F=`RadialVelocity`,ee=`Rate`,te=[E,D],ne=`Zone`,re=`BoxZone`,ie=`LineZone`,ae=`MeshZone`,oe=`PointZone`,se=`ScreenZone`,ce=`SphereZone`,le=`BaseRenderer`,ue=`CustomRenderer`,de=`SpriteRenderer`,fe=`MeshRenderer`,pe=`GPURenderer`,me=`MobileGPURenderer`,he=`DesktopGPURenderer`,I=3.142,L=I/180,ge=`euler`,_e=()=>!(!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:ve,easeInQuad:ye,easeOutQuad:be,easeInOutQuad:xe,easeInCubic:Se,easeOutCubic:Ce,easeInOutCubic:we,easeInQuart:Te,easeOutQuart:Ee,easeInOutQuart:De,easeInSine:Oe,easeOutSine:ke,easeInOutSine:Ae,easeInExpo:je,easeOutExpo:Me,easeInOutExpo:Ne,easeInCirc:Pe,easeOutCirc:Fe,easeInOutCirc:Ie,easeInBack:Le,easeOutBack:Re,easeInOutBack:ze}=R,Be=e=>R[e]?R[e]:R.easeLinear,z=e=>R[e]?R[e]:R.easeLinear,Ve=1/0,He=ve,Ue=.0167,We=[A,j,O,M,k,T,E,D,P,F,N],Ge=[f,p,h,g,_,v,y,b,x,S,C],Ke=[re,ie,ae,oe,ce],qe={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}},Je={_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}},Ye={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*Ye.DEG2RAD},radToDeg:function(e){return e*Ye.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 Xe(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(Xe,{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(Xe.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(Xe.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(Ye.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 Xe;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 Xe;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(Ye.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 Ze(){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(Ze.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 Ze().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],F=r[11],ee=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*F,i[12]=a*w+o*O+s*M+c*ee,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*F,i[13]=l*w+u*O+d*M+f*ee,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*F,i[14]=p*w+m*O+h*M+g*ee,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*F,i[15]=_*w+v*O+y*M+b*ee,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 Ze;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=Ye.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 Ze;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 Xe;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 Qe(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 $e,et=new Uint8Array(16);function tt(){if(!$e){if(typeof crypto>`u`||!crypto.getRandomValues)throw Error(`crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported`);$e=crypto.getRandomValues.bind(crypto)}return $e(et)}var nt={};function rt(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=at(e.random??e.rng?.()??tt(),e.msecs,e.nsecs,e.clockseq,e.node,t,n);else{let e=Date.now(),a=tt();it(nt,e,a),r=at(a,nt.msecs,nt.nsecs,i?void 0:nt.clockseq,i?void 0:nt.node,t,n)}return t??Qe(r)}function it(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 at(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 ot=rt,st=(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)}},ct=`ArraySpan`,lt=`ColorSpan`,ut=`Polar3D`,dt=`Span`,K=class{constructor(e,t,n){this._isArray=!1,this.type=dt,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),ft=s(((e,t)=>{var n=Math.floor,r=Math.random;function i(e,t){return e+n(r()*(t-e+1))}t.exports=i})),pt=s(((e,t)=>{var n=ft();function r(e){var t=e.length;return t?e[n(0,t-1)]:void 0}t.exports=r})),mt=s(((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})),ht=s(((e,t)=>{var n=mt();function r(e,t){return n(t,function(t){return e[t]})}t.exports=r})),gt=s(((e,t)=>{function n(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}t.exports=n})),_t=s(((e,t)=>{t.exports=typeof global==`object`&&global&&global.Object===Object&&global})),vt=s(((e,t)=>{var n=_t(),r=typeof self==`object`&&self&&self.Object===Object&&self;t.exports=n||r||Function(`return this`)()})),yt=s(((e,t)=>{t.exports=vt().Symbol})),bt=s(((e,t)=>{var n=yt(),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})),xt=s(((e,t)=>{var n=Object.prototype.toString;function r(e){return n.call(e)}t.exports=r})),St=s(((e,t)=>{var n=yt(),r=bt(),i=xt(),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})),Ct=s(((e,t)=>{function n(e){return typeof e==`object`&&!!e}t.exports=n})),wt=s(((e,t)=>{var n=St(),r=Ct(),i=`[object Arguments]`;function a(e){return r(e)&&n(e)==i}t.exports=a})),Tt=s(((e,t)=>{var n=wt(),r=Ct(),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`)}})),Et=s(((e,t)=>{t.exports=Array.isArray})),Dt=s(((e,t)=>{function n(){return!1}t.exports=n})),Ot=s(((e,t)=>{var n=vt(),r=Dt(),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})),kt=s(((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})),At=s(((e,t)=>{function n(e){return typeof e==`number`&&e>-1&&e%1==0&&e<=9007199254740991}t.exports=n})),jt=s(((e,t)=>{var n=St(),r=At(),i=Ct(),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})),Mt=s(((e,t)=>{function n(e){return function(t){return e(t)}}t.exports=n})),Nt=s(((e,t)=>{var n=_t(),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{}}()})),Pt=s(((e,t)=>{var n=jt(),r=Mt(),i=Nt(),a=i&&i.isTypedArray;t.exports=a?r(a):n})),Ft=s(((e,t)=>{var n=gt(),r=Tt(),i=Et(),a=Ot(),o=kt(),s=Pt(),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})),It=s(((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})),Lt=s(((e,t)=>{function n(e,t){return function(n){return e(t(n))}}t.exports=n})),Rt=s(((e,t)=>{t.exports=Lt()(Object.keys,Object)})),zt=s(((e,t)=>{var n=It(),r=Rt(),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})),Bt=s(((e,t)=>{function n(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}t.exports=n})),Vt=s(((e,t)=>{var n=St(),r=Bt(),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})),Ht=s(((e,t)=>{var n=Vt(),r=At();function i(e){return e!=null&&r(e.length)&&!n(e)}t.exports=i})),Ut=s(((e,t)=>{var n=Ft(),r=zt(),i=Ht();function a(e){return i(e)?n(e):r(e)}t.exports=a})),Wt=s(((e,t)=>{var n=ht(),r=Ut();function i(e){return e==null?[]:n(e,r(e))}t.exports=i})),Gt=s(((e,t)=>{var n=pt(),r=Wt();function i(e){return n(r(e))}t.exports=i})),Kt=u(s(((e,t)=>{var n=pt(),r=Gt(),i=Et();function a(e){return(i(e)?n:r)(e)}t.exports=a}))()),qt=class extends K{constructor(e){super(),this.type=ct,this.items=Array.isArray(e)?e:[e]}getValue(){return(0,Kt.default)(this.items)}},Jt=e=>e?e instanceof qt?e:new qt(e):null,Yt=class extends K{constructor(e){super(),this.type=lt,this.shouldRandomize=e===`random`,this.colors=Array.isArray(e)?e:[e]}getValue(){return this.shouldRandomize?G.randomColor():(0,Kt.default)(this.colors)}},Xt=e=>(e||(console.warn(`Invalid colors argument ${e} passed to createColorSpan. Defaulting to 'random'.`),e=`random`),e instanceof Yt?e:new Yt(e)),Zt=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}},Qt=`EULER`,$t=`RUNGE_KUTTA_2`,en=`RUNGE_KUTTA_4`,tn=`VERLET`,nn=(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())},rn=(e,t,n,r=Qt)=>{switch(r){case Qt:nn(e,t,n);break;default:nn(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)}},an=class e{constructor(e,t,n){this.type=ut,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)}},on=`Particle`,sn=`Pool`,cn=`System`,ln=class{constructor(e){this.id=`particle-${ot()}`,this.type=on,this.life=Ve,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=He,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=Ve,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=He,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=sn,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||Je.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]}},un=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])}},dn=`SYSTEM_UPDATE`,fn=`PARTICLE_CREATED`,pn=`PARTICLE_UPDATE`,mn=`PARTICLE_DEAD`,hn=`EMITTER_ADDED`,gn=`EMITTER_REMOVED`,_n=`EMITTER_DEAD`,vn=`SYSTEM_UPDATE_AFTER`,yn=un,X=class{constructor(e=w,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){}},bn=class e extends X{constructor(e,t,n,r=!0){super(T,r),this.body=Jt(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)}},xn={AdditiveBlending:2,CustomBlending:5,MultiplyBlending:4,NoBlending:0,NormalBlending:1,SubtractiveBlending:3},Sn={color:16711680,blending:2,fog:!0},Cn={...Sn,blending:`AdditiveBlending`},wn=class e extends X{constructor(e,t,n=Sn,r=!0){super(E,r);let{Sprite:i,SpriteMaterial:a,TextureLoader:o}=e;this.materialProperties=st(Sn,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=Cn,isEnabled:a=!0}=t;return new e(n,r,st(Cn,(e=>{let{blending:t}=e;return{...e,blending:t?xn[t]:xn[Cn.blending]}})(i)),a)}},Tn=new V,En={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(Tn.set(n,r,i))}},Dn=class e extends X{constructor(e,t,n,r=!0){super(O,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)}},On=class e extends X{constructor(e,t,n=!1,r=!0){super(k,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)}},kn=class{constructor(e=ne){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){}},An=class extends kn{constructor(e,t,n,r,i,a){super(re);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)}},jn=class extends kn{constructor(e,t,n,r,i,a){super(ie),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}},Mn=class extends kn{constructor(e,t=1,n){if(super(ae),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}},Nn=class extends kn{constructor(e,t,n){super(oe);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}},Pn=class extends kn{constructor(e,t,n,r){super(se),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)}};Pn.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}})(),Pn.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 Fn=class extends kn{constructor(e,t,n,r){super(ce);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`)}};Fn.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}})(),Fn.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 In=c({BoxZone:()=>An,LineZone:()=>jn,MeshZone:()=>Mn,PointZone:()=>Nn,ScreenZone:()=>Pn,SphereZone:()=>Fn}),Ln=class e extends X{constructor(){super(A),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(!Ke.includes(n))throw Error(`The zone type ${n} is invalid or not yet supported`);return new e(new In[n](...Object.values(r)))}};Ln.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 Rn=class e extends X{constructor(e,t,n,r=!0,i=!0){super(j,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)}},zn=class e extends X{constructor(e,t,n=!1,r=!0){super(M,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)}},Bn=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))}},Vn=class e extends X{constructor(e,t,n=Sn,r=!0){super(D,r);let{Sprite:i,SpriteMaterial:a}=e;this.materialProperties=st(Sn,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=Cn,isEnabled:a=!0}=t;return new e(n,r,st(Cn,(e=>{let{blending:t}=e;return{...e,blending:t?xn[t]:xn[Cn.blending]}})(i)),a)}},Hn=class extends X{constructor(e,t=!0){super(e,t),this.dirVec=new J(0,0,0)}normalize(e){return e*100}};Hn.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 Un=class e extends Hn{constructor(e,t,n=!0){super(P,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 an(n,r,i),a,o)}},Wn=class e extends Hn{constructor(e,t,n,r=!0){super(F,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)}},Gn=class e extends Hn{constructor(e,t,n=!0){super(N,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)}},Kn=c({Body:()=>bn,BodySprite:()=>wn,InitializerUtil:()=>En,Life:()=>Dn,Mass:()=>On,PolarVelocity:()=>Un,Position:()=>Ln,RadialVelocity:()=>Wn,Radius:()=>zn,Rate:()=>Bn,Rotation:()=>Rn,Texture:()=>Vn,VectorVelocity:()=>Gn}),qn=.006,Jn=new Bn(1,.1),Yn=u(s(((e,t)=>{var n=St(),r=Ct(),i=`[object Number]`;function a(e){return typeof e==`number`||r(e)&&n(e)==i}t.exports=a}))()),Xn=`Emitter`,Zn=`FollowEmitter`,Qn=class extends ln{constructor(e){super(e),this.type=Xn,this.particles=[],this.initializers=[],this.behaviours=[],this.emitterBehaviours=[],this.currentEmitTime=0,this.totalEmitTimes=-1,this.damping=qn,this.bindEmitter=!0,this.bindEmitterEvent=!1,this.rate=Jn,this.isEmitting=!1,this.id=`emitter-${ot()}`,this.cID=0,this.name=`Emitter`,this.index=void 0,this.eventDispatcher=new yn}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,Yn.default)(e)?e:1/0,e===1?this.life=e:this.life=(0,Yn.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,Yn.default)(e)?e:1/0,this}setLife(e=1/0){return this.totalEmitTimes===1?this.life=this.totalEmitTimes:this.life=(0,Yn.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}_${_n}`,()=>e()),this}createParticle(){let e=this.parent.pool.get(ln),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;En.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:Qt,n=1-this.damping;rn(this,e,n,t);let r=this.particles.length;for(;r--;){let i=this.particles[r];i.update(e,r),rn(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}_${_n}`),this.parent&&this.parent.removeEmitter(this))}},$n=1/0,er=1e3,tr=ve,nr=.03,rr=`dead`,Z=class{constructor(e=1/0,t=tr,n=d,r=!0){this.type=n,this.isEnabled=r,this.id=`behaviour-${ot()}`,this.life=e,this.easing=t,this.age=0,this.energy=1,this.dead=!1}reset(e=$n,t=tr){this.life=e,this.easing=t||tr}set life(e){this._life=(0,Yn.default)(e)?e:$n}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){}},ir=class e extends Z{constructor(e=1,t=null,n,r,i=!0){super(n,r,f,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)}},ar=class e extends Z{constructor(e=new J,t=100,n=er,r=$n,i=tr,a=!0){super(r,i,p,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=er,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)}},or=class extends Z{constructor(e,t,n,r,i,a=!0){super(r,i,m,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){}},sr=class e extends Z{constructor(e,t,n,r,i=!0){super(n,r,h,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=Xt(e),this.colorB=Xt(t),n&&super.reset(n,r)}initialize(e){e.transform.colorA=qe.getRGB(this.colorA.getValue()),e.useColor=!0,e.transform.colorB=this.same?e.transform.colorA:qe.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)}},cr=class e extends Z{constructor(e,t,n,r,i){super(n,r,g,i),this.reset(e,t)}reset(e,t=rr,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 In[n](...Object.values(r));return new e(c,i,a,z(o),s)}},lr=class e extends Z{constructor(e,t,n,r,i,a=!0){super(r,i,_,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)}},ur=class e extends lr{constructor(e,t,n,r=!0){super(0,-e,0,t,n,r),this.type=v}static fromJSON(t){let{gravity:n,life:r,easing:i,isEnabled:a=!0}=t;return new e(n,r,z(i),a)}},dr=class e extends Z{constructor(e,t,n,r=nr,i,a,o=!0){super(i,a,y,o),this.reset(e,t,n,r),this.time=0}reset(e,t,n,r=nr,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)}},fr=class e extends ar{constructor(e,t,n,r,i,a=!0){super(e,t,n,r,i,a),this.force*=-1,this.type=b}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)}},pr=class e extends Z{constructor(e,t,n,r,i,a=!0){super(r,i,x,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)}},mr=class e extends Z{constructor(e,t,n,r,i=!0){super(n,r,S,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)}},hr=class e extends Z{constructor(e,t,n,r,i,a,o,s=!0){super(a,o,C,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)}},gr=c({Alpha:()=>ir,Attraction:()=>ar,Behaviour:()=>Z,Collision:()=>or,Color:()=>sr,CrossZone:()=>cr,Force:()=>lr,Gravity:()=>ur,RandomDrift:()=>dr,Repulsion:()=>fr,Rotate:()=>pr,Scale:()=>mr,Spring:()=>hr}),_r=e=>Bn.fromJSON(e),vr=(e,t)=>{let n=[];return e.forEach(e=>{let{type:r,properties:i}=e;if(!We.includes(r))throw Error(`The initializer type ${r} is invalid or not yet supported`);te.includes(r)?n.push(Kn[r].fromJSON(i,t)):n.push(Kn[r].fromJSON(i))}),n},yr=e=>{let t=[];return e.forEach(e=>{let{type:n,properties:r}=e;if(!Ge.includes(n))throw Error(`The behaviour type ${n} is invalid or not yet supported`);t.push(gr[n].fromJSON(r))}),t},br=(e,t,n,r)=>{let{preParticles:i=500,integrationType:a=ge,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=qn}=e;n.damping=p,n.setRate(_r(i)).setRotation(a).setInitializers(vr(o,t)).setBehaviours(yr(c)).setEmitterBehaviours(yr(l)).setPosition(u).emit(d,f),s.addEmitter(n)}),s},xr={shouldAutoEmit:!0},Sr=e=>Bn.fromJSON(e),Cr=(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(!We.includes(o))return r(`The initializer type ${o} is invalid or not yet supported`);if(te.includes(o)?a.push(Kn[o].fromJSON(s,t)):a.push(Kn[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(!We.includes(o))return r(`The initializer type ${o} is invalid or not yet supported`);l.load(c,e=>{if(a.push(Vn.fromJSON({...s,loadedTexture:e},t)),a.length===i)return n(a)},void 0,r)})}),wr=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(!Ge.includes(a))return n(`The behaviour type ${a} is invalid or not yet supported`);if(i.push(gr[a].fromJSON(o)),i.length===r)return t(i)})}),Tr=(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:_=qn}=e;c.damping=_,c.setRate(Sr(l)).setRotation(u).setPosition(m),Cr(d,n).then(e=>(c.setInitializers(e),wr(f))).then(e=>(c.setBehaviours(e),wr(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)})}),Er=(e,t,n,r,i={})=>new Promise((a,o)=>{let{preParticles:s=500,integrationType:c=ge,emitters:l=[]}=e,u=new n(s,c),{shouldAutoEmit:d}={...xr,...i};Tr(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)}),Dr=class e{constructor(e=500,t=Qt){this.type=cn,this.canUpdate=!0,this.preParticles=e,this.integrationType=t,this.emitters=[],this.renderers=[],this.pool=new Y,this.eventDispatcher=new yn}static fromJSON(t,n){return br(t,n,e,Qn)}static fromJSONAsync(t,n,r){return Er(t,n,e,Qn,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(hn,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(gn,e),this):this}emit({onStart:e,onUpdate:t,onEnd:n}){e&&e(),t&&this.eventDispatcher.addEventListener(dn,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=Ue){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(vn)}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}},Or={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 kr(){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 Ar=class extends Qn{constructor(e,t,n){super(n),this.type=Zn,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)}},jr=class{constructor(e=le){this.type=e}init(e){var t=this;this.system=e,this.system.eventDispatcher.addEventListener(dn,function(e){t.onSystemUpdate.call(t,e)}),this.system.eventDispatcher.addEventListener(fn,function(e){t.onParticleCreated.call(t,e)}),this.system.eventDispatcher.addEventListener(pn,function(e){t.onParticleUpdate.call(t,e)}),this.system.eventDispatcher.addEventListener(mn,function(e){t.onParticleDead.call(t,e)}),this.logRendererType()}remove(){this.system=null}onParticleCreated(e){}onParticleUpdate(e){}onParticleDead(e){}onSystemUpdate(e){}logRendererType(){_e&&console.log(`${this.type}`)}},Mr=class extends jr{constructor(){super(ue),this.targetPool=new Y,this.materialPool=new Y}onSystemUpdate(){}onParticleCreated(e){}onParticleUpdate(e){}onParticleDead(e){}},Nr=class extends jr{constructor(e,t){super(fe),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=Je.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)}},Pr=class extends Nr{constructor(e,t){super(e,t),this.type=de,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)}},Fr=1e4,Ir=[12,4,4,16].reduce((e,t)=>e+t),Lr={position:3,rotation:1,size:1,color:4,alpha:1,texID:2};[3,1,1,4,1,2].reduce((e,t)=>e+t);var Rr={blending:`AdditiveBlending`,baseColor:16777215,depthTest:!0,depthWrite:!1,transparent:!0,maxParticles:Fr,shouldDebugTextureAtlas:!1,shouldForceDesktopRenderer:!1,shouldForceMobileRenderer:!1},zr=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}},Br=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}},Vr,Hr=class{constructor(e=Fr,t){Vr=t,this.maxParticles=e,this.createInterleavedBuffer().createBufferGeometry()}createInterleavedBuffer(){let e=new ArrayBuffer(this.maxParticles*Ir);return this.interleavedBuffer=new Vr.InterleavedBuffer(new Float32Array(e),Ir),this}createBufferGeometry(){this.geometry=new Vr.BufferGeometry;let{interleavedBuffer:e,geometry:t}=this;return Object.keys(Lr).reduce((n,r)=>{let i=Lr[r];return t.setAttribute(r,new Vr.InterleavedBufferAttribute(e,i,n)),n+=i},0),this}get buffer(){return this.interleavedBuffer}get stride(){return Ir}};function Ur(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 Wr=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){_e&&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=Ur(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=[]}},Gr=()=>`
|
|
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
|
+
`,Kr=`600.0`,qr=()=>`
|
|
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 * ${Kr}) / -mvPosition.z);
|
|
55
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
56
|
+
}
|
|
57
|
+
`,Q,Jr=class extends jr{constructor(e,t,n=Rr){super(he),Q=this.three=t;let{camera:r,maxParticles:i,baseColor:a,blending:o,depthTest:s,depthWrite:c,transparent:l,shouldDebugTextureAtlas:u}={...Rr,...n},d=new Hr(i,Q),f=new Q.ShaderMaterial({uniforms:{baseColor:{value:new Q.Color(a)},uTexture:{value:null},atlasIndex:{value:null}},vertexShader:qr(),fragmentShader:Gr(),blending:Q[o],depthTest:s,depthWrite:c,transparent:l});this.container=e,this.camera=r,this.targetPool=new Y,this.uniqueList=new Br(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(zr,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 Wr(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()}},Yr=()=>`
|
|
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
|
+
`,Xr=()=>`
|
|
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 * ${Kr}) / -mvPosition.z);
|
|
106
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
107
|
+
}
|
|
108
|
+
`,$,Zr=class extends jr{constructor(e,t,n=Rr){super(me),$=this.three=t;let{camera:r,maxParticles:i,baseColor:a,blending:o,depthTest:s,depthWrite:c,transparent:l,shouldDebugTextureAtlas:u}={...Rr,...n},d=new Hr(i,$),f=new $.ShaderMaterial({uniforms:{baseColor:{value:new $.Color(a)},uTexture:{value:null},FFatlasIndex:{value:null},atlasDim:{value:new $.Vector2}},vertexShader:Xr(),fragmentShader:Yr(),blending:$[o],depthTest:s,depthWrite:c,transparent:l});this.camera=r,this.targetPool=new Y,this.uniqueList=new Br(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(zr,$),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 Wr(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()}},Qr=class extends jr{constructor(e,t,n=Rr){super(pe);let{shouldForceDesktopRenderer:r,shouldForceMobileRenderer:i}=n,a=[e,t,n];return r?new Jr(...a):i||!this.isFloatingPointTextureSupported()?new Zr(...a):new Jr(...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}},$r=Dr;e.Alpha=ir,e.ArraySpan=qt,e.Attraction=ar,e.Behaviour=Z,e.Body=bn,e.BodySprite=wn,e.Box=Zt,e.BoxZone=An,e.Collision=or,e.Color=sr,e.ColorSpan=Yt,e.ColorUtil=qe,e.CrossZone=cr,e.CustomRenderer=Mr,e.Debug=Or,e.Emitter=Qn,e.FollowEmitter=Ar,e.Force=lr,e.GPURenderer=Qr,e.Gravity=ur,e.INTEGRATION_TYPE_EULER=Qt,e.INTEGRATION_TYPE_RK2=$t,e.INTEGRATION_TYPE_RK4=en,e.INTEGRATION_TYPE_VERLET=tn,e.InitializerUtil=En,e.Life=Dn,e.LineZone=jn,e.Mass=On,e.MathUtils=G,e.MeshRenderer=Nr,e.MeshZone=Mn,e.PUID=Je,e.Particle=ln,e.PointZone=Nn,e.Polar3D=an,e.PolarVelocity=Un,e.Pool=Y,e.Position=Ln,e.RadialVelocity=Wn,e.Radius=zn,e.RandomDrift=dr,e.Rate=Bn,e.Repulsion=fr,e.Rotate=pr,e.Rotation=Rn,e.Scale=mr,e.ScreenZone=Pn,e.Span=K,e.SphereZone=Fn,e.Spring=hr,e.SpriteRenderer=Pr,e.System=Dr,e.THREEUtil=H,e.Texture=Vn,e.Util=U,e.Vector3D=J,e.VectorVelocity=Gn,e.createArraySpan=Jt,e.createColorSpan=Xt,e.createSpan=q,e.default=$r,e.ease=R,e.easeInBack=Le,e.easeInCirc=Pe,e.easeInCubic=Se,e.easeInExpo=je,e.easeInOutBack=ze,e.easeInOutCirc=Ie,e.easeInOutCubic=we,e.easeInOutExpo=Ne,e.easeInOutQuad=xe,e.easeInOutQuart=De,e.easeInOutSine=Ae,e.easeInQuad=ye,e.easeInQuart=Te,e.easeInSine=Oe,e.easeLinear=ve,e.easeOutBack=Re,e.easeOutCirc=Fe,e.easeOutCubic=Ce,e.easeOutExpo=Me,e.easeOutQuad=be,e.easeOutQuart=Ee,e.easeOutSine=ke,e.getEasingByName=z,e.integrate=rn,e.log=kr,e.setEasingByName=Be,e.uid=ot,e.withDefaults=st});
|
|
109
|
+
//# sourceMappingURL=three-nebula.umd.js.map
|