@cyberluke/three-particles 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ import*as e from"three";import{StorageBufferAttribute as t}from"three/webgpu";var r,i,n=Object.create,o=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,l=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,u=(r={"../../node_modules/easing-functions/index.js"(e,t){var r=e=>e,i={In:e=>e*e,Out:e=>e*(2-e),InOut(e){let t=2*e;return t<1?.5*t*t:(t-=1,-.5*(t*(t-2)-1))}},n={In:e=>e*e*e,Out:e=>--e*e*e+1,InOut(e){let t=2*e;return t<1?.5*t*t*t:(t-=2,.5*(t*t*t+2))}},o={In:e=>e*e*e*e,Out:e=>1- --e*e*e*e,InOut(e){let t=2*e;return t<1?.5*t*t*t*t:(t-=2,-.5*(t*t*t*t-2))}},a={In:e=>e*e*e*e*e,Out:e=>--e*e*e*e*e+1,InOut(e){let t=2*e;return t<1?.5*t*t*t*t*t:(t-=2,.5*(t*t*t*t*t+2))}},s={In:e=>1-Math.cos(e*Math.PI/2),Out:e=>Math.sin(e*Math.PI/2),InOut:e=>.5*(1-Math.cos(Math.PI*e))},l={In:e=>0===e?0:1024**(e-1),Out:e=>1===e?1:1-2**(-10*e),InOut(e){if(0===e)return 0;if(1===e)return 1;const t=2*e;return t<1?.5*1024**(t-1):.5*(2-2**(-10*(t-1)))}},c={In:e=>1-Math.sqrt(1-e*e),Out:e=>Math.sqrt(1- --e*e),InOut(e){let t=2*e;return t<1?-.5*(Math.sqrt(1-t*t)-1):(t-=2,.5*(Math.sqrt(1-t*t)+1))}},u={In(e){let t,r=.1;return 0===e?0:1===e?1:(r<1?(r=1,t=.1):t=.4*Math.asin(1/r)/(2*Math.PI),-r*2**(10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/.4))},Out(e){let t,r=.1;return 0===e?0:1===e?1:(r<1?(r=1,t=.1):t=.4*Math.asin(1/r)/(2*Math.PI),r*2**(-10*e)*Math.sin((e-t)*(2*Math.PI)/.4)+1)},InOut(e){let t=.1;const r=.4;let i;if(0===e)return 0;if(1===e)return 1;t<1?(t=1,i=.1):i=r*Math.asin(1/t)/(2*Math.PI);const n=2*e;if(n<1){const e=n-1;return t*2**(10*e)*Math.sin((e-i)*(2*Math.PI)/r)*-.5}const o=n-1;return t*2**(-10*o)*Math.sin((o-i)*(2*Math.PI)/r)*.5+1}},d={In(e){const t=1.70158;return e*e*((t+1)*e-t)},Out(e){const t=1.70158;return--e*e*((t+1)*e+t)+1},InOut(e){const t=2.5949095;let r=2*e;return r<1?r*r*((t+1)*r-t)*.5:(r-=2,.5*(r*r*((t+1)*r+t)+2))}},f={In:e=>1-f.Out(1-e),Out(e){if(e<1/2.75)return 7.5625*e*e;if(e<2/2.75){const t=e-1.5/2.75;return 7.5625*t*t+.75}if(e<2.5/2.75){const t=e-2.25/2.75;return 7.5625*t*t+.9375}const t=e-2.625/2.75;return 7.5625*t*t+.984375},InOut:e=>e<.5?.5*f.In(2*e):.5*f.Out(2*e-1)+.5},p={Quadratic:i,Cubic:n,Quartic:o,Quintic:a,Sinusoidal:s,Exponential:l,Circular:c,Elastic:u,Back:d,Bounce:f},m=(e,t,r)=>Object.defineProperty(e,t,{value:r});for(const e of Object.keys(p)){const t=p[e],r=e.toLowerCase();m(p,r,t);for(const i of Object.keys(t)){const n=t[i],o=i.toLowerCase();m(p,`${e}.${i}`,n),m(p,`${r}.${o}`,n),m(t,o,n)}}p.Linear=r,m(p,"linear",r),t.exports=p,"undefined"!=typeof window&&(window.Easing=p)}},function(){return i||(0,r[s(r)[0]])((i={exports:{}}).exports,i),i.exports}),d="4.0.1";if("undefined"!=typeof globalThis){const e=globalThis;e.__THREE_PARTICLES__&&e.__THREE_PARTICLES__!==d||(e.__THREE_PARTICLES__=d)}var f=e=>e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4),p=e=>e<.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,m=e=>({r:f(e.r??0),g:f(e.g??0),b:f(e.b??0)}),y=[],h=(e,t)=>{let r=1;for(let i=1;i<=t;i++)r*=(e+1-i)/i;return r},b=(e,t)=>{const r=y.find(e=>e.bezierPoints===t);if(r)return r.referencedBy.includes(e)||r.referencedBy.push(e),r.curveFunction;const i={referencedBy:[e],bezierPoints:t,curveFunction:e=>{if(e<0)return t[0].y;if(e>1)return t[t.length-1].y;let r=0,i=t.length-1;for(let n=0;n<t.length;n++){const o=t[n];if(e<(o.percentage??0)){i=n;break}void 0!==o.percentage&&(r=n)}const n=i-r,o=(e-(t[r].percentage??0))/((t[i].percentage??1)-(t[r].percentage??0));let a=0;for(let e=0;e<=n;e++){const i=t[r+e];a+=h(n,e)*Math.pow(1-o,n-e)*Math.pow(o,e)*i.y}return a}};return y.push(i),i.curveFunction},v=e=>{for(;;){const t=y.findIndex(t=>t.referencedBy.includes(e));if(-1===t)break;const r=y[t];r.referencedBy=r.referencedBy.filter(t=>t!==e),0===r.referencedBy.length&&y.splice(t,1)}},I=()=>y.length,A=((e,t,r)=>(r=null!=e?n(l(e)):{},((e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of s(t))c.call(e,n)||n===r||o(e,n,{get:()=>t[n],enumerable:!(i=a(t,n))||i.enumerable});return e})(o(r,"default",{value:e,enumerable:!0}),e)))(u()),g=(e=>(e.BEZIER="BEZIER",e.LINEAR="LINEAR",e.QUADRATIC_IN="QUADRATIC_IN",e.QUADRATIC_OUT="QUADRATIC_OUT",e.QUADRATIC_IN_OUT="QUADRATIC_IN_OUT",e.CUBIC_IN="CUBIC_IN",e.CUBIC_OUT="CUBIC_OUT",e.CUBIC_IN_OUT="CUBIC_IN_OUT",e.QUARTIC_IN="QUARTIC_IN",e.QUARTIC_OUT="QUARTIC_OUT",e.QUARTIC_IN_OUT="QUARTIC_IN_OUT",e.QUINTIC_IN="QUINTIC_IN",e.QUINTIC_OUT="QUINTIC_OUT",e.QUINTIC_IN_OUT="QUINTIC_IN_OUT",e.SINUSOIDAL_IN="SINUSOIDAL_IN",e.SINUSOIDAL_OUT="SINUSOIDAL_OUT",e.SINUSOIDAL_IN_OUT="SINUSOIDAL_IN_OUT",e.EXPONENTIAL_IN="EXPONENTIAL_IN",e.EXPONENTIAL_OUT="EXPONENTIAL_OUT",e.EXPONENTIAL_IN_OUT="EXPONENTIAL_IN_OUT",e.CIRCULAR_IN="CIRCULAR_IN",e.CIRCULAR_OUT="CIRCULAR_OUT",e.CIRCULAR_IN_OUT="CIRCULAR_IN_OUT",e.ELASTIC_IN="ELASTIC_IN",e.ELASTIC_OUT="ELASTIC_OUT",e.ELASTIC_IN_OUT="ELASTIC_IN_OUT",e.BACK_IN="BACK_IN",e.BACK_OUT="BACK_OUT",e.BACK_IN_OUT="BACK_IN_OUT",e.BOUNCE_IN="BOUNCE_IN",e.BOUNCE_OUT="BOUNCE_OUT",e.BOUNCE_IN_OUT="BOUNCE_IN_OUT",e))(g||{}),T={LINEAR:A.default.Linear.None,QUADRATIC_IN:A.default.Quadratic.In,QUADRATIC_OUT:A.default.Quadratic.Out,QUADRATIC_IN_OUT:A.default.Quadratic.InOut,CUBIC_IN:A.default.Cubic.In,CUBIC_OUT:A.default.Cubic.Out,CUBIC_IN_OUT:A.default.Cubic.InOut,QUARTIC_IN:A.default.Quartic.In,QUARTIC_OUT:A.default.Quartic.Out,QUARTIC_IN_OUT:A.default.Quartic.InOut,QUINTIC_IN:A.default.Quintic.In,QUINTIC_OUT:A.default.Quintic.Out,QUINTIC_IN_OUT:A.default.Quintic.InOut,SINUSOIDAL_IN:A.default.Sinusoidal.In,SINUSOIDAL_OUT:A.default.Sinusoidal.Out,SINUSOIDAL_IN_OUT:A.default.Sinusoidal.InOut,EXPONENTIAL_IN:A.default.Exponential.In,EXPONENTIAL_OUT:A.default.Exponential.Out,EXPONENTIAL_IN_OUT:A.default.Exponential.InOut,CIRCULAR_IN:A.default.Circular.In,CIRCULAR_OUT:A.default.Circular.Out,CIRCULAR_IN_OUT:A.default.Circular.InOut,ELASTIC_IN:A.default.Elastic.In,ELASTIC_OUT:A.default.Elastic.Out,ELASTIC_IN_OUT:A.default.Elastic.InOut,BACK_IN:A.default.Back.In,BACK_OUT:A.default.Back.Out,BACK_IN_OUT:A.default.Back.InOut,BOUNCE_IN:A.default.Bounce.In,BOUNCE_OUT:A.default.Bounce.Out,BOUNCE_IN_OUT:A.default.Bounce.InOut},O=e=>"function"==typeof e?e:T[e],C=(e=>(e.LOCAL="LOCAL",e.WORLD="WORLD",e))(C||{}),E=(e=>(e.SPHERE="SPHERE",e.CONE="CONE",e.BOX="BOX",e.CIRCLE="CIRCLE",e.RECTANGLE="RECTANGLE",e))(E||{}),w=(e=>(e.VOLUME="VOLUME",e.SHELL="SHELL",e.EDGE="EDGE",e))(w||{}),N=(e=>(e.LIFETIME="LIFETIME",e.FPS="FPS",e))(N||{}),U=(e=>(e.BEZIER="BEZIER",e.EASING="EASING",e))(U||{}),x=(e=>(e.BIRTH="BIRTH",e.DEATH="DEATH",e))(x||{}),M=(e=>(e.POINT="POINT",e.DIRECTIONAL="DIRECTIONAL",e))(M||{}),P=(e=>(e.POINTS="POINTS",e.INSTANCED="INSTANCED",e.TRAIL="TRAIL",e.MESH="MESH",e))(P||{}),S=(e=>(e.NONE="NONE",e.LINEAR="LINEAR",e.QUADRATIC="QUADRATIC",e))(S||{}),L=(e=>(e.KILL="KILL",e.CLAMP="CLAMP",e.BOUNCE="BOUNCE",e))(L||{}),R=(e=>(e.AUTO="AUTO",e.CPU="CPU",e.GPU="GPU",e))(R||{}),_=10,B=0,F=1,z=2,D=3,V=4,k=5,Q=6,j=7,W=8,q=9,G=(e,t,r,i,{radius:n,radiusThickness:o,arc:a})=>{const s=Math.random()*(a/360),l=Math.random(),c=Math.random(),u=2*Math.PI*s,d=Math.acos(2*l-1),f=Math.sin(d),p=f*Math.cos(u),m=f*Math.sin(u),y=Math.cos(d),h=1-o;e.x=n*h*p+n*o*c*p,e.y=n*h*m+n*o*c*m,e.z=n*h*y+n*o*c*y,e.applyQuaternion(t);const b=1/e.length();r.set(e.x*b*i,e.y*b*i,e.z*b*i),r.applyQuaternion(t)},H=(t,r,i,n,{radius:o,radiusThickness:a,arc:s,angle:l=90})=>{const c=2*Math.PI*Math.random()*(s/360),u=Math.random(),d=Math.cos(c),f=Math.sin(c),p=1-a;t.x=o*p*d+o*a*u*d,t.y=o*p*f+o*a*u*f,t.z=0,t.applyQuaternion(r);const m=t.length(),y=Math.abs(m/o*e.MathUtils.degToRad(l)),h=Math.sin(y),b=1/m;i.set(t.x*h*b*n,t.y*h*b*n,Math.cos(y)*n),i.applyQuaternion(r)},$=(e,t,r,i,{scale:n,emitFrom:o})=>{const a=n;switch(o){case"VOLUME":e.x=Math.random()*a.x-a.x/2,e.y=Math.random()*a.y-a.y/2,e.z=Math.random()*a.z-a.z/2;break;case"SHELL":const t=Math.floor(6*Math.random()),r=t%3,i=[];i[r]=t>2?1:0,i[(r+1)%3]=Math.random(),i[(r+2)%3]=Math.random(),e.x=i[0]*a.x-a.x/2,e.y=i[1]*a.y-a.y/2,e.z=i[2]*a.z-a.z/2;break;case"EDGE":const n=Math.floor(6*Math.random()),o=n%3,s=Math.floor(4*Math.random()),l=[];l[o]=n>2?1:0,l[(o+1)%3]=s<2?Math.random():s-2,l[(o+2)%3]=s<2?s:Math.random(),e.x=l[0]*a.x-a.x/2,e.y=l[1]*a.y-a.y/2,e.z=l[2]*a.z-a.z/2}e.applyQuaternion(t),r.set(0,0,i),r.applyQuaternion(t)},K=(e,t,r,i,{radius:n,radiusThickness:o,arc:a})=>{const s=2*Math.PI*Math.random()*(a/360),l=Math.random(),c=Math.cos(s),u=Math.sin(s),d=1-o;e.x=n*d*c+n*o*l*c,e.y=n*d*u+n*o*l*u,e.z=0,e.applyQuaternion(t);const f=1/e.length();r.set(e.x*f*i,e.y*f*i,0),r.applyQuaternion(t)},X=(t,r,i,n,{rotation:o,scale:a})=>{const s=a,l=o,c=Math.random()*s.x-s.x/2,u=Math.random()*s.y-s.y/2,d=e.MathUtils.degToRad(l.x),f=e.MathUtils.degToRad(l.y);t.x=c*Math.cos(f),t.y=u*Math.cos(d),t.z=c*Math.sin(f)-u*Math.sin(d),t.applyQuaternion(r),i.set(0,0,n),i.applyQuaternion(r)},Z=()=>{try{const t=document.createElement("canvas");t.width=1,t.height=1;const r=t.getContext("2d");if(r){r.fillStyle="white",r.fillRect(0,0,1,1);const i=new e.CanvasTexture(t);return i.needsUpdate=!0,i}return null}catch{return null}},J=()=>{try{const t=document.createElement("canvas"),r=64;t.width=r,t.height=r;const i=t.getContext("2d");if(i){const n=r/2,o=r/2,a=r/2-2;i.beginPath(),i.arc(n,o,a,0,2*Math.PI,!1),i.fillStyle="white",i.fill();const s=new e.CanvasTexture(t);return s.needsUpdate=!0,s}return null}catch(e){return null}},Y=e=>"number"!=typeof e&&"type"in e,ee=(e,t)=>{if("BEZIER"===t.type)return b(e,t.bezierPoints);if("EASING"===t.type)return t.curveFunction;const r=t;if(Array.isArray(r.bezierPoints))return b(e,r.bezierPoints);if("function"==typeof r.curveFunction)return r.curveFunction;throw new Error(`Unsupported value type: ${t}`)},te=(t,r,i=0)=>{if("number"==typeof r)return r;if("min"in r&&"max"in r)return r.min===r.max?r.min??0:e.MathUtils.randFloat(r.min??0,r.max??1);const n=r;return ee(t,n)(i)*(n.scale??1)},re=new e.Vector3(0,0,0),ie=new e.Euler,ne=({delta:e,generalData:t,normalizedConfig:r,attributes:i,scalarArray:n,particleLifetimePercentage:o,particleIndex:a,updateFlags:s})=>{const{particleSystemId:l,startValues:c,lifetimeValues:u,linearVelocityData:d,orbitalVelocityData:f,noise:p,modifierCurves:m}=t,y=3*a,h=i.position.array,b=a*_;if(d){const{speed:t,valueModifiers:r}=d[a],n=r.x?r.x(o):t.x,l=r.y?r.y(o):t.y,c=r.z?r.z(o):t.z;h[y]+=n*e,h[y+1]+=l*e,h[y+2]+=c*e,s?s.position=!0:i.position.needsUpdate=!0}if(f){const{speed:t,positionOffset:r,valueModifiers:n}=f[a];h[y]-=r.x,h[y+1]-=r.y,h[y+2]-=r.z;const l=n.x?n.x(o):t.x,c=n.y?n.y(o):t.y,u=n.z?n.z(o):t.z;ie.set(l*e,u*e,c*e),r.applyEuler(ie),h[y]+=r.x,h[y+1]+=r.y,h[y+2]+=r.z,s?s.position=!0:i.position.needsUpdate=!0}if(r.sizeOverLifetime.isActive){const e=m?.size?m.size(o):te(l,r.sizeOverLifetime.lifetimeCurve,o);n[b+4]=c.startSize[a]*e}if(r.opacityOverLifetime.isActive){const e=m?.opacity?m.opacity(o):te(l,r.opacityOverLifetime.lifetimeCurve,o);n[b+9]=c.startOpacity[a]*e}if(r.colorOverLifetime.isActive){const e=m?.colorR?m.colorR(o):te(l,r.colorOverLifetime.r,o),t=m?.colorG?m.colorG(o):te(l,r.colorOverLifetime.g,o),i=m?.colorB?m.colorB(o):te(l,r.colorOverLifetime.b,o);n[b+6]=c.startColorR[a]*e,n[b+7]=c.startColorG[a]*t,n[b+8]=c.startColorB[a]*i}if(u.rotationOverLifetime&&(n[b+5]+=u.rotationOverLifetime[a]*e*.02),p.isActive){const{sampler:e,strength:t,noisePower:r,offsets:l,positionAmount:c,rotationAmount:u,sizeAmount:d}=p;let f;const m=10*(o+(l?l[a]:0))*t;re.set(m,0,0),f=e.get3(re),h[y]+=f*r*c,0!==u&&(n[b+5]+=f*r*u),0!==d&&(n[b+4]+=f*r*d),re.set(m,m,0),f=e.get3(re),h[y+1]+=f*r*c,re.set(m,m,m),f=e.get3(re),h[y+2]+=f*r*c,s?s.position=!0:i.position.needsUpdate=!0}if(i.quat){const e=.5*n[b+5],t=4*a;i.quat.array[t]=0,i.quat.array[t+1]=0,i.quat.array[t+2]=Math.sin(e),i.quat.array[t+3]=Math.cos(e),s?s.quat=!0:i.quat.needsUpdate=!0}};function oe(e){return null!=e&&"object"==typeof e&&"compute"in e&&"function"==typeof e.compute&&"hasFeature"in e&&"function"==typeof e.hasFeature}function ae(e,t="AUTO"){const r=oe(e);return"CPU"===t?"CPU":r?"GPU":"CPU"}var se={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(se,{deepMerge:()=>ce,getObjectDiff:()=>ue,patchObject:()=>le});var le=(e,t,r={skippedProperties:[],applyToFirstObject:!1})=>{const i={};return Object.keys(e).forEach(n=>{r.skippedProperties&&r.skippedProperties.includes(n)||("object"==typeof e[n]&&e[n]&&t[n]&&!Array.isArray(e[n])?i[n]=le(e[n],t[n],r):(i[n]=0===t[n]?0:!1!==t[n]&&(t[n]||e[n]),r.applyToFirstObject&&(e[n]=i[n])))}),i},ce=(e,t,r={skippedProperties:[],applyToFirstObject:!1})=>{const i={};return Array.from(new Set([...Object.keys(e||{}),...Object.keys(t||{})])).forEach(n=>{r.skippedProperties&&r.skippedProperties.includes(n)||("object"==typeof e?.[n]&&e?.[n]&&t?.[n]&&!Array.isArray(e[n])?i[n]=ce(e[n],t[n],r):(i[n]=0===t?.[n]?0:!1!==t?.[n]&&(t?.[n]||e?.[n]),r.applyToFirstObject&&(e[n]=i[n])))}),i},ue=(e,t,r={skippedProperties:[]})=>{const i={};return Object.keys(e).forEach(n=>{if(!r.skippedProperties||!r.skippedProperties.includes(n))if("object"==typeof e[n]&&e[n]&&t[n]&&!Array.isArray(e[n])){const o=ue(e[n],t[n],r);Object.keys(o).length>0&&(i[n]=o)}else{const r=0===t[n]?0:t[n]||e[n];r!==e[n]&&(i[n]=r)}}),i},de=function(){};de.prototype.load=de,de.prototype.parse=de;var fe=de;function pe(e){switch(e){case"INSTANCED":return"INSTANCED";case"TRAIL":return"TRAIL";case"MESH":return"MESH";default:return"POINTS"}}Array.from({length:3},()=>({loader:new fe,isUsed:!1})),Array.from({length:3},()=>({loader:new e.TextureLoader,isUsed:!1})),Array.from({length:3},()=>({loader:new e.AudioLoader,isUsed:!1}));var me=0,ye=[],he=null,be=!0,ve=!1,Ie=(e,t)=>!(t&&"renderer"in t&&!oe(t.renderer))&&(he=e,be=!t||!("renderer"in t)||!!t.renderer?.backend?.isWebGPUBackend,!0);new e.Vector3,new e.Vector3,new e.Euler(0,0,0,"XYZ");var Ae=new e.Vector3;new e.Vector3,new e.Vector3,new e.Quaternion;var ge=(e,t)=>{if(!e)throw new Error(`three-particles: ${t}`)},Te=(t,r,i)=>{if(null==t)return new e.Vector2(r[0],r[1]);if(t instanceof e.Vector2)return t;let n,o;if(Array.isArray(t))n=Number(t[0]),o=Number(t[1]);else if("object"==typeof t){const e=t;n=void 0!==e.x?Number(e.x):void 0!==e.u?Number(e.u):void 0,o=void 0!==e.y?Number(e.y):void 0!==e.v?Number(e.v):void 0}return ge(void 0!==n&&void 0!==o&&Number.isFinite(n)&&Number.isFinite(o),`${i} must be one of: Vector2, [x,y], [u,v], {x,y} or {u,v}`),new e.Vector2(n,o)},Oe=(e,t)=>null==e?null:(ge("object"==typeof e&&"image"in e,`${t} must be null or a texture object with .image (got ${String(e)})`),e),Ce=(e,t)=>null==e?null:(ge("object"==typeof e&&"image"in e,`${t} must be a texture object with .image when set (got ${String(e)})`),e),Ee=(t,r)=>{if(null==t)return new e.Vector3(1,1,1);if("number"==typeof t){const r=new e.Color(t);return new e.Vector3(r.r,r.g,r.b)}if("string"==typeof t){const i=t.trim(),n=new e.Color(i.startsWith("#")?i:`#${i}`);return ge(Number.isFinite(n.r)&&Number.isFinite(n.g)&&Number.isFinite(n.b),`${r} is not a valid hex color string`),new e.Vector3(n.r,n.g,n.b)}if(Array.isArray(t)){const[i,n,o]=t;return ge(Number.isFinite(i)&&Number.isFinite(n)&&Number.isFinite(o),`${r} array must contain three finite numbers`),new e.Vector3(i,n,o)}const i=t;return ge(Number.isFinite(Number(i.r))&&Number.isFinite(Number(i.g))&&Number.isFinite(Number(i.b)),`${r} object must provide finite r/g/b`),new e.Vector3(Number(i.r),Number(i.g),Number(i.b))};new e.Vector3,new e.Vector3,new e.Vector3,new e.Vector3,new e.Vector3,new e.Vector2;var we=(t,r)=>t?new e.Vector3(t.x??0,t.y??0,t.z??0):r.clone(),Ne={"THREE.NoBlending":e.NoBlending,"THREE.NormalBlending":e.NormalBlending,"THREE.AdditiveBlending":e.AdditiveBlending,"THREE.SubtractiveBlending":e.SubtractiveBlending,"THREE.MultiplyBlending":e.MultiplyBlending},Ue=t=>{if("number"==typeof t)return t;if("string"==typeof t){const e=t.startsWith("THREE.")?t:`THREE.${t}`,r=Ne[e];if(void 0!==r)return r}return e.NormalBlending},xe=()=>JSON.parse(JSON.stringify(Me)),Me={transform:{position:new e.Vector3,rotation:new e.Vector3,scale:new e.Vector3(1,1,1)},duration:5,looping:!0,startDelay:0,startLifetime:5,startSpeed:1,startSize:1,startOpacity:1,startRotation:0,startColor:{min:{r:1,g:1,b:1},max:{r:1,g:1,b:1}},gravity:0,simulationSpace:"LOCAL",simulationBackend:"AUTO",maxParticles:100,emission:{rateOverTime:10,rateOverDistance:0,bursts:[]},shape:{shape:"SPHERE",sphere:{radius:1,radiusThickness:1,arc:360},cone:{angle:25,radius:1,radiusThickness:1,arc:360},circle:{radius:1,radiusThickness:1,arc:360},rectangle:{rotation:{x:0,y:0,z:0},scale:{x:1,y:1}},box:{scale:{x:1,y:1,z:1},emitFrom:"VOLUME"}},map:void 0,renderer:{blending:e.NormalBlending,discardBackgroundColor:!1,backgroundColorTolerance:1,backgroundColor:{r:1,g:1,b:1},transparent:!0,depthTest:!0,depthWrite:!1,softParticles:{enabled:!1,intensity:1}},velocityOverLifetime:{isActive:!1,linear:{x:0,y:0,z:0},orbital:{x:0,y:0,z:0}},sizeOverLifetime:{isActive:!1,lifetimeCurve:{type:"BEZIER",scale:1,bezierPoints:[{x:0,y:0,percentage:0},{x:1,y:1,percentage:1}]}},colorOverLifetime:{isActive:!1,r:{type:"BEZIER",scale:1,bezierPoints:[{x:0,y:1,percentage:0},{x:1,y:1,percentage:1}]},g:{type:"BEZIER",scale:1,bezierPoints:[{x:0,y:1,percentage:0},{x:1,y:1,percentage:1}]},b:{type:"BEZIER",scale:1,bezierPoints:[{x:0,y:1,percentage:0},{x:1,y:1,percentage:1}]}},opacityOverLifetime:{isActive:!1,lifetimeCurve:{type:"BEZIER",scale:1,bezierPoints:[{x:0,y:0,percentage:0},{x:1,y:1,percentage:1}]}},rotationOverLifetime:{isActive:!1,min:0,max:0},noise:{isActive:!1,useRandomOffset:!1,strength:1,frequency:.5,octaves:1,positionAmount:1,rotationAmount:0,sizeAmount:0},textureSheetAnimation:{tiles:new e.Vector2(1,1),timeMode:"LIFETIME",fps:30,startFrame:0},forceFields:[],collisionPlanes:[]},Pe=null,Se=()=>{if(Pe)return Pe;if("undefined"==typeof document)return null;const t=document.createElement("canvas");t.width=1,t.height=1;const r=t.getContext("2d");return r&&(r.fillStyle="#ffffff",r.fillRect(0,0,1,1)),(Pe=new e.Texture(t)).needsUpdate=!0,Pe},Le=(r=Me,i)=>{const n=i||Date.now();if(!(null!==he))throw new Error("three-particles: WebGPU TSL material factory not registered. Call enableWebGPU(renderer) immediately after creating a WebGPURenderer. @cyberluke/three-particles 4.0.0 is GPU-only - no CPU fallback path exists.");if(!be)throw new Error("three-particles: renderer is not a native WebGPU backend. This build has no WebGL2 fallback. Use a new THREE.WebGPURenderer().");const o=he;if(!o.createComputePipeline)throw new Error("three-particles: active WebGPU renderer does not provide a complete TSL compute pipeline (createComputePipeline missing). No CPU fallback exists; install a WebGPU-capable backend.");const a=r.maxParticles||Me.maxParticles,s=se.deepMerge(Me,r,{applyToFirstObject:!1,skippedProperties:[]});"CPU"===s.simulationBackend&&(ve||(ve=!0),s.simulationBackend="GPU");const l=s.renderer.rendererType||"POINTS",c=pe(l),u=c,d="INSTANCED"===c||"MESH"===c,f=s.renderer.trail,p=Math.max(2,Math.round(f?.length??20)),m="TRAIL"===u?new t(new Float32Array(a*(p+1)*4),4):null,y=m?{attribute:m,meta:null,length:p,minVertexDistance:f?.minVertexDistance??0,maxTime:1e3*(f?.maxTime??0)}:null,h=s.subEmitters??[],b=h.map(e=>{const t=Math.max(1,Math.round(e.maxInstances??32)),r=o.createSubEmitterFifoAttribute(t);return r.trigger="BIRTH"===e.trigger?0:1,r}),I=b.reduce((e,t)=>Math.max(e,t.windowSize),0),A=(s.forceFields??[]).map(t=>({isActive:t.isActive??!0,type:t.type??"POINT",position:we(t.position,new e.Vector3(0,0,0)),direction:we(t.direction,new e.Vector3(0,1,0)).normalize(),strength:t.strength??1,range:Math.max(0,t.range??1/0),falloff:t.falloff??"LINEAR"}));const g=(s.collisionPlanes??[]).map(t=>({isActive:t.isActive??!0,position:we(t.position,new e.Vector3(0,0,0)),normal:we(t.normal,new e.Vector3(0,1,0)).normalize(),mode:t.mode??"KILL",dampen:Math.max(0,Math.min(1,t.dampen??.5)),lifetimeLoss:Math.max(0,Math.min(1,t.lifetimeLoss??0))}));const T=o.createComputePipeline(a,d,s,me,A.length,g.length,b,y??void 0),O=y?o.createTrailRibbonUpdate({position:new t(new Float32Array(a*p*2*4),4),next:new t(new Float32Array(a*p*2*4),4),uvColorA:new t(new Float32Array(a*p*2*4),4),colorB:new t(new Float32Array(a*p*2*4),4),history:y.attribute,meta:y.meta,particleColor:T.buffers.color,curveFns:{width:f?.widthOverTrail?ee(me,f.widthOverTrail):void 0,opacity:f?.opacityOverTrail?ee(me,f.opacityOverTrail):void 0,colorR:f?.colorOverTrail?.isActive?ee(me,f.colorOverTrail.r):void 0,colorG:f?.colorOverTrail?.isActive?ee(me,f.colorOverTrail.g):void 0,colorB:f?.colorOverTrail?.isActive?ee(me,f.colorOverTrail.b):void 0},width:f?.width??1,length:p,maxTime:y.maxTime,maxParticles:a}):null,C=[];for(let e=0;e<h.length;e++){const t=h[e],r=b[e],i=se.deepMerge(xe(),t.config??{},{applyToFirstObject:!1,skippedProperties:[]}),n=i.emission?.bursts?.[0],s=n?Math.max(1,Math.ceil(te(me+1+e,n.count,0)*(n.cycles??1))):1,l=Math.min(s,r.capacity),c=Math.max(2,Math.min(l*r.capacity,65536)),u=i.renderer?.rendererType,d=pe(u),f="INSTANCED"===d||"MESH"===d,p=o.createComputePipeline(c,f,i,me+1+e,0,0,[],void 0),m=o.encodeShapeEmitParams(i,me+1+e),y=i.velocityOverLifetime,v=o.createSubEmitterInitUpdate(p.buffers,c,m,T.buffers,a,r,t.inheritVelocity??0,l,{linear:[y?.linear?.x,y?.linear?.y,y?.linear?.z],orbital:[y?.orbital?.x,y?.orbital?.y,y?.orbital?.z]});C.push({fifo:r,pipeline:p,init:v,instanced:f,requestedRendererType:u,effectiveRendererType:d,cfg:i,object:null,perEvent:l,gravity:i.gravity,noise:i.noise?.isActive?{isActive:!0,strength:i.noise.strength,noisePower:.15*i.noise.strength,frequency:i.noise.frequency,positionAmount:i.noise.positionAmount,rotationAmount:i.noise.rotationAmount,sizeAmount:i.noise.sizeAmount,fbmMax:2-Math.pow(2,-i.noise.octaves)}:null,rate:i.emission?.rateOverTime?te(me+1+e,i.emission.rateOverTime,0):0,acc:0,lastEmit:0,poseFrom:"self",selfPose:{x:0,y:0,z:0,qx:0,qy:0,qz:0,qw:1,sx:1,sy:1,sz:1,isWorld:"WORLD"===i.simulationSpace?1:0}})}const E=s.renderer.cameraNearFar,w=s.textureSheetAnimation?.tiles,N={value:0},U={elapsed:N,viewportHeight:{value:720},cameraNearFar:{value:Te(E,[.1,1e3],"renderer.cameraNearFar")},useInstancing:{value:d},softParticlesEnabled:{value:!!s.renderer.softParticles?.enabled},softParticlesIntensity:{value:Math.max(s.renderer.softParticles?.intensity??1,.001)},sceneDepthTexture:{value:Ce(s.renderer.softParticles?.depthTexture,"renderer.softParticles.depthTexture")},discardBackgroundColor:{value:!!s.renderer.discardBackgroundColor},backgroundColor:{value:new e.Color(16777215)},backgroundColorTolerance:{value:s.renderer.backgroundColorTolerance??0},map:{value:Oe(s.map??Se(),"map")},startLifetime:{value:0},startSize:{value:1},startRotation:{value:0},startOpacity:{value:1},startColor:{value:new e.Color(1,1,1)},lifetime:{value:0},color:{value:new e.Color(1,1,1)},fps:{value:s.textureSheetAnimation?.fps||30},useFPSForFrameIndex:{value:"FPS"===s.textureSheetAnimation?.timeMode},tiles:{value:Te(w,[1,1],"textureSheetAnimation.tiles")}},x=Ee(s.renderer.backgroundColor,"renderer.backgroundColor");U.backgroundColor.value.setRGB(x.x,x.y,x.z);const M={transparent:!!s.renderer.transparent,blending:Ue(s.renderer.blending),depthTest:!1!==s.renderer.depthTest,depthWrite:!1!==s.renderer.depthWrite},P=o.createTSLParticleMaterial(u,U,M,!0),S=T.buffers;let L;if(d){const t=new e.InstancedBufferGeometry,r=s.renderer.mesh?.geometry,i="MESH"===u&&r?r:new e.BufferGeometry;if("MESH"!==u||!r){const t=new Float32Array([-.5,-.5,0,.5,-.5,0,.5,.5,0,-.5,.5,0]),r=new Float32Array([0,0,1,0,1,1,0,1]),n=new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]),o=new Uint16Array([0,1,2,0,2,3]);i.setAttribute("position",new e.BufferAttribute(t,3)),i.setAttribute("uv",new e.BufferAttribute(r,2)),i.setAttribute("normal",new e.BufferAttribute(n,3)),i.setIndex(new e.BufferAttribute(o,1))}t.setAttribute("position",i.getAttribute("position")),null!==i.index&&t.setIndex(i.index),t.instanceCount=a,t.setAttribute("instanceOffset",S.position),t.setAttribute("instanceColor",S.color),t.setAttribute("instanceParticleState",S.particleState),t.setAttribute("instanceStartValues",S.startValues),L=t}else{const t=new e.BufferGeometry;t.setAttribute("position",S.position),t.setAttribute("color",S.color),t.setAttribute("particleState",S.particleState),t.setAttribute("startValues",S.startValues),t.setDrawRange(0,a),L=t,t.instanceCount=a}let R=null;if(O&&y){const t=O.buffers,r=new e.BufferGeometry;r.setAttribute("position",t.position),r.setAttribute("trailNext",t.next),r.setAttribute("trailUVColor",t.uvColorA),r.setAttribute("trailColorBA",t.colorB);const i=new Uint32Array(a*(p-1)*6);let n=0;for(let e=0;e<a;e++)for(let t=0;t<p-1;t++){const r=e*p*2+2*t;i[n++]=r,i[n++]=r+1,i[n++]=r+2,i[n++]=r+1,i[n++]=r+3,i[n++]=r+2}r.setIndex(new e.BufferAttribute(i,1)),r.setDrawRange(0,a*p*2),R=r}const B=R?o.createTSLTrailMaterial({map:{value:s.map??Se()},useMap:{value:!!s.map},discardBackgroundColor:{value:!!s.renderer.discardBackgroundColor},backgroundColor:{value:s.renderer.backgroundColor??{r:1,g:1,b:1}},backgroundColorTolerance:{value:s.renderer.backgroundColorTolerance??0},softParticlesEnabled:{value:!!s.renderer.softParticles?.enabled},softParticlesIntensity:{value:Math.max(s.renderer.softParticles?.intensity??1,.001)},sceneDepthTexture:{value:s.renderer.softParticles?.depthTexture??null},cameraNearFar:{value:new e.Vector2(.1,1e3)}},{transparent:!!s.renderer.transparent,blending:Ue(s.renderer.blending),depthTest:!1!==s.renderer.depthTest,depthWrite:!1!==s.renderer.depthWrite}):null,F=R?new e.Mesh(R,B):d?new e.Mesh(L,P):new e.Points(L,P);F.frustumCulled=!1;for(const t of C){const r=t.pipeline.buffers,i=t.pipeline.allocatorCount-1,n=t.instanced?(()=>{const t=new e.InstancedBufferGeometry,n=new Float32Array([-.5,-.5,0,.5,-.5,0,.5,.5,0,-.5,.5,0]),o=new Uint16Array([0,1,2,0,2,3]);return t.setAttribute("position",new e.BufferAttribute(n,3)),t.setIndex(new e.BufferAttribute(o,1)),t.instanceCount=i,t.setAttribute("instanceOffset",r.position),t.setAttribute("instanceColor",r.color),t.setAttribute("instanceParticleState",r.particleState),t.setAttribute("instanceStartValues",r.startValues),t})():(()=>{const t=new e.BufferGeometry;return t.setAttribute("position",r.position),t.setAttribute("color",r.color),t.setAttribute("particleState",r.particleState),t.setAttribute("startValues",r.startValues),t.setDrawRange(0,i),t})(),a={...U,useInstancing:{value:t.instanced}},s=o.createTSLParticleMaterial(t.effectiveRendererType,a,M,!0),l=t.instanced?new e.Mesh(n,s):new e.Points(n,s);l.frustumCulled=!1,F.add(l),t.object=l}if(!1!==import.meta.env?.DEV){const e=d?["position","instanceOffset","instanceColor","instanceParticleState","instanceStartValues"]:["position","color","particleState","startValues"];for(const t of e)if(!L.getAttribute(t))throw new Error("three-particles: "+(d?"instanced":"POINTS")+" geometry "+t+" is missing its required contract attribute.");const t=d?[["instanceOffset",S.position],["instanceColor",S.color],["instanceParticleState",S.particleState],["instanceStartValues",S.startValues]]:[["position",S.position],["color",S.color],["particleState",S.particleState],["startValues",S.startValues]];for(const[e,r]of t)if(L.getAttribute(e)!==r)throw new Error(`three-particles: attribute "${e}" is not the compute-owned storage buffer.`);const r=T.shapeUniforms.shapeKind.value;if(!(r>=0&&r<=4))throw new Error(`three-particles: gpuShapeKind ${r} outside 0..4 (SPHERE..BOX).`);if(!(a>0))throw new Error("three-particles: maxParticles must be > 0.");if(T.allocatorCount!==a+1)throw new Error("three-particles: allocator capacity must equal maxParticles + 1.");const i=[...T.passLayouts??[],...O?.passLayouts??[],...C.flatMap(e=>[...e.init.passLayouts??[],...(e.pipeline.passLayouts??[]).map(e=>({...e,name:`child:${e.name}`}))])];for(const e of i)if(e.storageBindings>8)throw new Error(`${e.name}: ${e.storageBindings} storage buffers > guaranteed limit 8`);if(y&&y.meta!==T.trailMeta)throw new Error("three-particles: trail ring meta buffer mismatch.");for(const e of b){if(2!==e.counter.array.length)throw new Error("three-particles: sub-emitter FIFO must expose exactly 2 ping-pong counter slots.");if(e.payload.array.length!==12*e.capacity)throw new Error("three-particles: sub-emitter FIFO payload length must be 2 * 6 * capacity.")}}const z=(e,t)=>"number"==typeof e&&Number.isFinite(e)?e:t,D=s.transform;D?.position&&F.position.set(z(D.position.x,0),z(D.position.y,0),z(D.position.z,0)),D?.rotation&&F.rotation.set(e.MathUtils.degToRad(z(D.rotation.x,0)),e.MathUtils.degToRad(z(D.rotation.y,0)),e.MathUtils.degToRad(z(D.rotation.z,0))),D?.scale&&F.scale.set(z(D.scale.x,1),z(D.scale.y,1),z(D.scale.z,1)),F.updateMatrix(),F.updateMatrixWorld(!0),"WORLD"===s.simulationSpace&&(F.matrixWorldAutoUpdate=!1,F.matrixWorld.identity());const V={particleSystemId:me++,normalizedLifetimePercentage:0,distanceFromLastEmitByDistance:0,lastWorldPosition:new e.Vector3(-99999),currentWorldPosition:new e.Vector3(-99999),worldPositionChange:new e.Vector3,sourceWorldMatrix:new e.Matrix4,worldQuaternion:new e.Quaternion,wrapperQuaternion:new e.Quaternion,worldScale:new e.Vector3(1,1,1),worldEuler:new e.Euler,gravityVelocity:new e.Vector3(0,0,0),startValues:{},linearVelocityData:void 0,orbitalVelocityData:void 0,lifetimeValues:{},creationTimes:new Float32Array(0),cpuDirtyParticleWatermark:-1,highWaterIndex:0,noise:{isActive:s.noise.isActive,strength:s.noise.strength,noisePower:.15*s.noise.strength,frequency:s.noise.frequency,positionAmount:s.noise.positionAmount,rotationAmount:s.noise.rotationAmount,sizeAmount:s.noise.sizeAmount,fbmMax:2-Math.pow(2,-s.noise.octaves)},isEnabled:!0,burstStates:s.emission.bursts?.length?s.emission.bursts.map(()=>({cyclesExecuted:0,lastCycleTime:0,probabilityPassed:!1})):void 0},k={particleSystem:F,mappedAttributes:{position:S.position,isActive:S.orbitalIsActive,lifetime:S.particleState,startLifetime:S.startValues,startFrame:S.particleState,size:S.particleState,rotation:S.particleState,color:S.color},scalarArray:new Float32Array(0),scalarInterleavedBuffer:new e.InterleavedBuffer(new Float32Array(0),_),elapsedUniform:N,generalData:V,onUpdate:()=>{},onComplete:()=>{},creationTime:n+(s.startDelay||0),lastEmissionTime:n,emissionAccumulator:0,duration:s.duration,looping:s.looping,simulationSpace:s.simulationSpace,gravity:s.gravity,normalizedForceFields:A,normalizedCollisionPlanes:g,emission:s.emission,normalizedConfig:s,iterationCount:0,velocities:[],freeList:[],deactivateParticle:()=>{},killParticle:()=>{},activateParticle:()=>{},computePipeline:T,useGPUCompute:!0,computeDispatchReady:!1,maxParticles:a,material:P,geometry:L,rrType:u,requestedRendererType:l,effectiveRendererType:u,sharedUniforms:U,allComputeNodes:[...T.computeNodes??[],...O?[O.ribbonNode]:[],...C.flatMap(e=>[e.init.commandBuildNode,e.init.childInitNode,...null!=e.init.counterClearNode?[e.init.counterClearNode]:[],...e.pipeline.computeNodes??[]])],passNames:[...T.passNames??["emit","simulate"],...O?["trail-ribbon"]:[],...C.flatMap((e,t)=>[`sub${t}:command-build`,`sub${t}:child-init`,`sub${t}:counter-clear`,`sub${t}:child-emit`,`sub${t}:child-sim`])],fifoBaseStride:I,ribbonUniforms:O?O.uniforms:void 0,ribbonBuffers:O?O.buffers:void 0,frameParity:0,subEntries:C.map(e=>({fifo:{capacity:e.fifo.capacity,windowSize:e.fifo.windowSize},requestedRendererType:e.requestedRendererType,effectiveRendererType:e.effectiveRendererType,pipeline:e.pipeline,init:e.init,gravity:e.gravity,noise:e.noise,rate:e.rate,acc:0,isWorld:e.selfPose.isWorld,quat:[e.selfPose.qx,e.selfPose.qy,e.selfPose.qz,e.selfPose.qw],scale:[e.selfPose.sx,e.selfPose.sy,e.selfPose.sz],position:[z(e.cfg.transform?.position?.x,0),z(e.cfg.transform?.position?.y,0),z(e.cfg.transform?.position?.z,0)]}))};for(const t of C){if(!t.object)continue;const r=t.cfg.transform;r?.position&&t.object.position.set(z(r.position.x,0),z(r.position.y,0),z(r.position.z,0)),r?.rotation&&t.object.rotation.set(e.MathUtils.degToRad(z(r.rotation.x,0)),e.MathUtils.degToRad(z(r.rotation.y,0)),e.MathUtils.degToRad(z(r.rotation.z,0))),r?.scale&&t.object.scale.set(z(r.scale.x,1),z(r.scale.y,1),z(r.scale.z,1)),t.object.updateMatrix();const i=(new e.Quaternion).setFromEuler(new e.Euler(e.MathUtils.degToRad(z(r?.rotation?.x,0)),e.MathUtils.degToRad(z(r?.rotation?.y,0)),e.MathUtils.degToRad(z(r?.rotation?.z,0)),"XYZ")),n=k.subEntries?.[C.indexOf(t)];n&&(n.quat=[i.x,i.y,i.z,i.w],n.scale=[z(r?.scale?.x,1),z(r?.scale?.y,1),z(r?.scale?.z,1)])}ye.push(k);const Q=[...(T.passLayouts??[]).map(e=>[e.name,e.storageBindings]),...(O?.passLayouts??[]).map(e=>[e.name,e.storageBindings]),...C.flatMap((e,t)=>[...(e.init.passLayouts??[]).map(e=>[`sub${t}:${e.name}`,e.storageBindings]),...(e.pipeline.passLayouts??[]).map(e=>[`sub${t}:${e.name}`,e.storageBindings])])],j=Q.reduce((e,t)=>Math.max(e,t[1]),0);if("undefined"!=typeof console&&console.log){const e=s;T.shapeUniforms,e.startValues,T.uniforms}return{instance:F,resumeEmitter:()=>{V.isEnabled=!0},pauseEmitter:()=>{V.isEnabled=!1},dispose:()=>{(e=>{ye=ye.filter(({particleSystem:t,trailMesh:r,generalData:{particleSystemId:i}})=>t!==e||(v(i),r&&(r.geometry.dispose(),Array.isArray(r.material)?r.material.forEach(e=>e.dispose()):r.material.dispose(),r.parent&&r.parent.remove(r)),t.geometry.dispose(),Array.isArray(t.material)?t.material.forEach(e=>e.dispose()):t.material.dispose(),t.parent&&t.parent.remove(t),!1))})(F)},update:e=>{Be(k,e)},updateConfig:e=>{se.deepMerge(s,e,{applyToFirstObject:!0,skippedProperties:[]})},getActiveParticleCount:()=>-1,computeNode:k.allComputeNodes&&k.allComputeNodes.length>0?k.allComputeNodes:T.computeNodes??T.computeNode,gpuDebug:{maxParticles:a,allocatorCount:T.allocatorCount,requestedRendererType:l,effectiveRendererType:u,systemSeed:T.uniforms.seed.value,buffers:T.buffers,emitNode:T.emitNode,simNode:T.simNode,passNames:T.passNames??["emit","simulate"],allPassNames:k.passNames??[],storageBindingCount:j,passBindingCounts:Q,lastEmitCount:()=>T.uniforms.emitCount.value,subEmitters:(C??[]).map(e=>({requestedRendererType:e.requestedRendererType??null,effectiveRendererType:e.effectiveRendererType,perEvent:e.perEvent})),snapshot:()=>{const e=s.shape,t="CONE"===e.shape?e.cone:"CIRCLE"===e.shape?e.circle:e.sphere,i=s.map;return{systemId:V.particleSystemId,effectiveRendererType:u,requestedRendererType:l,rendererType:u,simulationSpace:s.simulationSpace,maxParticles:a,shape:{publicShape:e.shape,gpuShapeKind:T.shapeUniforms?.shapeKind?.value??0,radius:t?.radius??null,radiusThickness:t?.radiusThickness??null,arcDeg:t?.arc??null,coneAngleDeg:"CONE"===e.shape?e.cone?.angle??null:null,rectScale:e.rectangle?.scale??null,rectRotation:e.rectangle?.rotation??null,boxScale:e.box?.scale??null,boxEmitFrom:e.box?.emitFrom??null},textureId:r.textureId??r._editorData?.textureId??null,textureResolved:!!s.map,textureDimensions:i?.image?[i.image.width??0,i.image.height??0]:null,forceFieldCount:(s.forceFields??[]).length,collisionPlaneCount:(s.collisionPlanes??[]).length,subEmitterCount:(s.subEmitters??[]).length,trailEnabled:!!s.renderer.trail}}}}},Re=new WeakMap,_e=new WeakSet,Be=(e,{now:t,delta:r,elapsed:i})=>{const{generalData:n,normalizedConfig:o,particleSystem:a,elapsedUniform:s,creationTime:l,normalizedForceFields:c,normalizedCollisionPlanes:u,emission:d,computePipeline:f,maxParticles:p=0,allComputeNodes:m,subEntries:y,fifoBaseStride:h=0,ribbonUniforms:b}=e;if(!f)return;const v=f.uniforms,I=o.duration,A=t-l,g=o.looping,T=g?A%(1e3*I):A;n.normalizedLifetimePercentage=Math.max(Math.min(T/1e3/I,1),0),s.value=i;const O=n.gravityVelocity;O.set(0,o.gravity,0),"WORLD"===o.simulationSpace?(a.updateMatrix(),Ve.copy(a.matrix),a.parent&&(a.parent.updateMatrixWorld(),Ve.premultiply(a.parent.matrixWorld)),Ve.decompose(n.currentWorldPosition,n.worldQuaternion,n.worldScale)):(a.updateMatrixWorld(),a.getWorldPosition(n.currentWorldPosition),a.getWorldQuaternion(n.worldQuaternion),a.getWorldScale(n.worldScale),Fe.copy(n.worldQuaternion).invert(),O.applyQuaternion(Fe),O.x/=n.worldScale.x||1,O.y/=n.worldScale.y||1,O.z/=n.worldScale.z||1),-99999!==n.lastWorldPosition.x&&(Ae.copy(n.lastWorldPosition),n.distanceFromLastEmitByDistance+=Ae.distanceTo(n.currentWorldPosition)),n.lastWorldPosition.copy(n.currentWorldPosition);let C=0;if(n.isEnabled&&(g||T<1e3*I)){const r=t-e.lastEmissionTime;if(r>0&&(e.lastEmissionTime=t,d.rateOverTime&&(e.emissionAccumulator+=te(n.particleSystemId,d.rateOverTime,n.normalizedLifetimePercentage)*(r/1e3))),C+=Math.floor(e.emissionAccumulator),C>0&&(e.emissionAccumulator-=C),d.rateOverDistance&&n.distanceFromLastEmitByDistance>0){const e=te(n.particleSystemId,d.rateOverDistance,n.normalizedLifetimePercentage);if(e>0){const t=Math.floor(n.distanceFromLastEmitByDistance*e);C+=t,n.distanceFromLastEmitByDistance=Math.max(n.distanceFromLastEmitByDistance-t/e,0)}}if(d.bursts&&n.burstStates){const e=d.bursts,t=n.burstStates,r=T/1e3;for(let i=0;i<e.length;i++){const o=e[i],a=t[i],s=o.cycles??1,l=o.interval??0,c=o.probability??1;if(g&&r<(o.time??0)&&a.cyclesExecuted>0&&(a.cyclesExecuted=0,a.lastCycleTime=0,a.probabilityPassed=!1),a.cyclesExecuted>=s)continue;r>=(o.time??0)+a.cyclesExecuted*l&&(0===a.cyclesExecuted&&(a.probabilityPassed=Math.random()<c),a.probabilityPassed&&(C+=Math.floor(te(n.particleSystemId,o.count,n.normalizedLifetimePercentage))),a.cyclesExecuted++,a.lastCycleTime=r)}}C>p&&(C=p)}v.delta.value=r,v.deltaMs.value=1e3*r,v.gravityVelocity.value.copy(O),v.emitCount.value=C,f.emitNode.count=Math.max(1,C),f.subBirthEventsNode&&(f.subBirthEventsNode.count=Math.max(1,C));const E=n.noise;v.noiseStrength&&(v.noiseStrength.value=E.strength),v.noisePower&&(v.noisePower.value=E.noisePower),v.noiseFrequency&&(v.noiseFrequency.value=E.frequency),v.noisePositionAmount&&(v.noisePositionAmount.value=E.positionAmount),v.noiseRotationAmount&&(v.noiseRotationAmount.value=E.rotationAmount),v.noiseSizeAmount&&(v.noiseSizeAmount.value=E.sizeAmount);const w=f.emitterPose;w&&("WORLD"===o.simulationSpace?(a.updateMatrix(),Ve.copy(a.matrix),a.parent&&(a.parent.updateMatrixWorld(),Ve.premultiply(a.parent.matrixWorld)),Ve.decompose(ze,Fe,De),w.positionW.value.set(ze.x,ze.y,ze.z,1),w.wrapperQuat.value.set(Fe.x,Fe.y,Fe.z,Fe.w),w.worldScale.value.set(De.x||1,De.y||1,De.z||1)):(w.positionW.value.set(0,0,0,0),w.wrapperQuat.value.set(0,0,0,1),w.worldScale.value.set(1,1,1)));const N=(e.frameParity??0)%2;v.fifoBase&&(v.fifoBase.value=N),v.nowMs&&(v.nowMs.value=t),b?.nowMs&&(b.nowMs.value=t);for(const e of y??[]){const i=e.pipeline;if(!i)continue;const n=i.uniforms;n.delta&&(n.delta.value=r),n.deltaMs&&(n.deltaMs.value=1e3*r),n.nowMs&&(n.nowMs.value=t),n.gravityVelocity&&n.gravityVelocity.value.set(0,e.gravity,0),e.noise&&(n.noiseStrength&&(n.noiseStrength.value=e.noise.strength),n.noisePower&&(n.noisePower.value=e.noise.noisePower),n.noiseFrequency&&(n.noiseFrequency.value=e.noise.frequency),n.noisePositionAmount&&(n.noisePositionAmount.value=e.noise.positionAmount),n.noiseRotationAmount&&(n.noiseRotationAmount.value=e.noise.rotationAmount),n.noiseSizeAmount&&(n.noiseSizeAmount.value=e.noise.sizeAmount)),n.fifoBase&&(n.fifoBase.value=N),e.init.uniforms.fifoBase&&(e.init.uniforms.fifoBase.value=N);let o=0;e.rate>0&&(e.acc+=e.rate*r/1,o=Math.floor(e.acc),o>0&&(e.acc-=o));const a=Math.max(2,(i.allocatorCount??2)-1);o>a&&(o=a),i.emitNode&&(i.emitNode.count=Math.max(1,o)),n.emitCount&&(n.emitCount.value=o);const s=i.emitterPose;s&&(1===e.isWorld?(s.positionW.value.set(e.position[0],e.position[1],e.position[2],1),s.wrapperQuat.value.set(e.quat[0],e.quat[1],e.quat[2],e.quat[3]),s.worldScale.value.set(e.scale[0],e.scale[1],e.scale[2])):(s.positionW.value.set(0,0,0,0),s.wrapperQuat.value.set(0,0,0,1),s.worldScale.value.set(1,1,1)));const l=e.init.uniforms;l.positionW&&l.wrapperQuat&&(1===e.isWorld?(l.positionW.value.set(e.position[0],e.position[1],e.position[2],1),l.wrapperQuat.value.set(e.quat[0],e.quat[1],e.quat[2],e.quat[3])):(l.positionW.value.set(0,0,0,0),l.wrapperQuat.value.set(0,0,0,1)))}const U=f.forceFieldInfo,x=f.collisionPlaneInfo??null;if((U||x)&&he){const e=f.buffers.packedData,t=f.packedDataNode;if(U&&c.length>0){const r=he.encodeForceFieldsForGPU(c,n.particleSystemId,n.normalizedLifetimePercentage);let i=!1;for(let t=0;t<r.length;t++)if(e[U.offset+t]!==r[t]){i=!0;break}i&&(e.set(r,U.offset),t.addUpdateRange(U.offset,r.length),t.needsUpdate=!0),U.countUniform.value=c.length}if(x&&u.length>0){const r=he.encodeCollisionPlanesForGPU(u);let i=!1;for(let t=0;t<r.length;t++)if(e[x.offset+t]!==r[t]){i=!0;break}i&&(e.set(r,x.offset),t.addUpdateRange(x.offset,r.length),t.needsUpdate=!0),x.countUniform.value=u.length}}const M=f.buffers;let P=Re.get(M);if(void 0===P||0===P){for(const e of Object.keys(M)){const t=M[e];t&&"needsUpdate"in t&&(t.needsUpdate=!0)}Re.set(M,1)}else Re.set(M,P+1);for(const e of y??[]){const t=e.pipeline?.buffers;if(t&&!Re.has(t)){for(const e of Object.keys(t)){const r=t[e];r&&"needsUpdate"in r&&(r.needsUpdate=!0)}Re.set(t,1)}const r=e.init.commandBuffer;r&&"needsUpdate"in r&&!_e.has(r)&&(r.needsUpdate=!0,_e.add(r))}const S=e.ribbonBuffers;if(S&&!Re.has(S)){for(const e of Object.keys(S)){const t=S[e];t&&"needsUpdate"in t&&(t.needsUpdate=!0)}Re.set(S,1)}e.computeDispatchReady=!0,e.iterationCount++,e.frameParity=1^(e.frameParity??0),e.trailMesh&&Ze(e,t)},Fe=new e.Quaternion,ze=new e.Vector3,De=new e.Vector3,Ve=new e.Matrix4,ke=(e,t,r,i,n,o,a,s,l,c,u,d,f,p,m)=>{const y=m*m,h=y*m;e[t]=.5*(2*o+(-r+l)*m+(2*r-5*o+4*l-d)*y+(3*o-r-3*l+d)*h),e[t+1]=.5*(2*a+(-i+c)*m+(2*i-5*a+4*c-f)*y+(3*a-i-3*c+f)*h),e[t+2]=.5*(2*s+(-n+u)*m+(2*n-5*s+4*u-p)*y+(3*s-n-3*u+p)*h)},Qe=(e,t,r,i,n,o,a,s,l,c,u,d,f)=>{n[e]=u,n[e+1]=d,n[e+2]=f,n[e+3]=u,n[e+4]=d,n[e+5]=f,o[e]=u,o[e+1]=d,o[e+2]=f,o[e+3]=u,o[e+4]=d,o[e+5]=f,a[r]=0,a[r+1]=0,s[i]=0,s[i+1]=0,s[i+2]=0,s[i+3]=0,l[r]=0,l[r+1]=0,c[t]=0,c[t+1]=0,c[t+2]=0,c[t+3]=0,c[t+4]=0,c[t+5]=0,c[t+6]=0,c[t+7]=0},je=(e,t,r,i,n,o,a,s,l,c,u,d,f,p,m,y,h,b,v,I,A,g,T)=>{b[e]=n,b[e+1]=o,b[e+2]=a,b[e+3]=n,b[e+4]=o,b[e+5]=a,v[e]=s,v[e+1]=l,v[e+2]=c,v[e+3]=s,v[e+4]=l,v[e+5]=c,I[r]=u,I[r+1]=u,A[i]=0,A[i+1]=d,A[i+2]=1,A[i+3]=d,g[r]=f,g[r+1]=f,T[t]=p,T[t+1]=m,T[t+2]=y,T[t+3]=h,T[t+4]=p,T[t+5]=m,T[t+6]=y,T[t+7]=h},We=null,qe=0,Ge=null,He=0,$e=null,Ke=0,Xe=0,Ze=(e,t)=>{const{generalData:r,trailPositionAttr:i,trailAlphaAttr:n,trailColorAttr:o,trailNextAttr:a,trailHalfWidthAttr:s,trailUVAttr:l,trailWidthCurveFn:c,trailOpacityCurveFn:u,trailColorOverTrailFns:d,trailConfig:f,mappedAttributes:p}=e;if(!(i&&n&&o&&a&&s&&l&&c&&u&&f&&r.positionHistory&&r.positionHistoryIndex&&r.positionHistoryCount))return;const m=f.length,y=r.positionHistory,h=r.positionHistoryIndex,b=r.positionHistoryCount,v=r.trailSampleTimes,I=r.trailLastSampledPosition,A=r.trailPrevNormal,g=f.minVertexDistance,T=g*g,O=f.maxTime,C=1e3*O,E=f.smoothing,w=f.smoothingSubdivisions,N=f.twistPrevention,U=f.ribbonId,x=e.scalarArray,M=p.position.array,P=r.trailPrevFilledCount,S=i.array,L=n.array,R=o.array,B=a.array,F=l.array,z=s.array,D=2*m,V=r.highWaterIndex,k=V>0?V:r.creationTimes.length;let Q=!1;const j=void 0!==U;let W=-1;if(j){(!$e||Ke<k)&&($e=new Uint32Array(k),Ke=k),Xe=0;for(let e=0;e<k;e++)x[e*_+0]&&($e[Xe++]=e);for(let e=1;e<Xe;e++){const t=$e[e],i=r.creationTimes[t];let n=e-1;for(;n>=0&&r.creationTimes[$e[n]]>i;)$e[n+1]=$e[n],n--;$e[n+1]=t}Xe>0&&(W=$e[0])}for(let e=0;e<k;e++){const r=e*D;if(x[e*_+0]){if(j&&Xe>=2&&e!==W){const r=3*e,i=M[r],n=M[r+1],o=M[r+2],a=3*(e*m+h[e]);y[a]=i,y[a+1]=n,y[a+2]=o,v&&(v[e*m+h[e]]=t),h[e]=(h[e]+1)%m,b[e]<m&&b[e]++;continue}Q=!0;const i=3*e,n=M[i],o=M[i+1],a=M[i+2];let s=!0;if(g>0&&I&&b[e]>0){const t=3*e,r=n-I[t],i=o-I[t+1],l=a-I[t+2];r*r+i*i+l*l<T&&(s=!1)}if(s){const r=3*(e*m+h[e]);if(y[r]=n,y[r+1]=o,y[r+2]=a,v&&(v[e*m+h[e]]=t),h[e]=(h[e]+1)%m,b[e]<m&&b[e]++,I){const t=3*e;I[t]=n,I[t+1]=o,I[t+2]=a}}let l=b[e],p=l;if(O>0&&v&&l>0){const r=e*m;p=0;for(let i=0;i<l;i++){if(!(t-v[r+(h[e]-1-i+2*m)%m]<=C))break;p++}}const U=p,D=f.width,V=e*_,k=x[V+6],q=x[V+7],G=x[V+8],H=x[V+9],$=e*m*3,K=3*U;(!We||qe<K)&&(We=new Float32Array(K),qe=K);const X=We;for(let t=0;t<U;t++){const r=(h[e]-1-t+2*m)%m*3+$;X[3*t]=y[r],X[3*t+1]=y[r+1],X[3*t+2]=y[r+2]}let Z,J;if(E&&U>=3){const e=U-1;J=e*w+1;const t=3*J;(!Ge||He<t)&&(Ge=new Float32Array(t),He=t),Z=Ge;for(let t=0;t<e;t++){const e=Math.max(0,t-1),r=t,i=Math.min(U-1,t+1),n=Math.min(U-1,t+2),o=X[3*e],a=X[3*e+1],s=X[3*e+2],l=X[3*r],c=X[3*r+1],u=X[3*r+2],d=X[3*i],f=X[3*i+1],p=X[3*i+2],m=X[3*n],y=X[3*n+1],h=X[3*n+2];for(let e=0;e<w;e++){ke(Z,3*(t*w+e),o,a,s,l,c,u,d,f,p,m,y,h,e/w)}}const r=3*(J-1);Z[r]=X[3*(U-1)],Z[r+1]=X[3*(U-1)+1],Z[r+2]=X[3*(U-1)+2]}else Z=X,J=U;if(J>m&&(J=m),E&&J>=2){const e=1e-8;for(let t=1;t<J;t++){const r=3*(t-1),i=3*t,n=Z[i]-Z[r],o=Z[i+1]-Z[r+1],a=Z[i+2]-Z[r+2];n*n+o*o+a*a<e&&(Z[i]=Z[r],Z[i+1]=Z[r+1],Z[i+2]=Z[r+2])}}const Y=P?P[e]:m;P&&(P[e]=J);for(let i=0;i<m;i++){const s=3*(r+2*i),f=4*(r+2*i),y=r+2*i,b=2*(r+2*i);if(i>=J){if(i>=Y)break;Qe(s,f,y,b,S,B,z,F,L,R,n,o,a);continue}const I=Z[3*i],A=Z[3*i+1],g=Z[3*i+2];let T,w,N;if(i>0&&i<J-1){const e=Z[3*(i-1)],t=Z[3*(i-1)+1],r=Z[3*(i-1)+2],n=Z[3*(i+1)]-e,o=Z[3*(i+1)+1]-t,a=Z[3*(i+1)+2]-r,s=Math.sqrt(n*n+o*o+a*a);s>1e-4?(T=I+n/s,w=A+o/s,N=g+a/s):(T=Z[3*(i+1)],w=Z[3*(i+1)+1],N=Z[3*(i+1)+2])}else if(i<J-1)T=Z[3*(i+1)],w=Z[3*(i+1)+1],N=Z[3*(i+1)+2];else if(J>=2){T=I+(I-Z[3*(i-1)]),w=A+(A-Z[3*(i-1)+1]),N=g+(g-Z[3*(i-1)+2])}else T=I,w=A+.001,N=g;const U=J>1?i/(J-1):0;let x=1;if(O>0&&v&&p>0){const r=e*m;if(E&&l>=2){const n=i/Math.max(J-1,1)*(l-1),o=Math.min(Math.floor(n),l-1),a=Math.min(o+1,l-1),s=n-o,c=(h[e]-1-o+2*m)%m,u=(h[e]-1-a+2*m)%m,d=t-v[r+c],f=d+(t-v[r+u]-d)*s;x=1-Math.min(f/C,1)}else{const n=Math.min(i,l-1),o=t-v[r+(h[e]-1-n+2*m)%m];x=1-Math.min(o/C,1)}}const M=D*c(U)*.5,P=H*u(U)*x,_=d?k*d.r(U):k,V=d?q*d.g(U):q,Q=d?G*d.b(U):G;je(s,f,y,b,I,A,g,T,w,N,M,U,P,_,V,Q,H,S,B,z,F,L,R)}if(N&&A&&J>=2){const t=3*e,i=Z[3]-Z[0],n=Z[4]-Z[1],o=Z[5]-Z[2],a=Math.sqrt(i*i+n*n+o*o);if(a>1e-4){const e=i/a,s=n/a,l=o/a;let c=0,u=1,d=0;const f=e*c+s*u+l*d;Math.abs(f)>.999&&(c=1,u=0,d=0);let p=s*d-l*u,y=l*c-e*d,h=e*u-s*c;const b=Math.sqrt(p*p+y*y+h*h);b>1e-4&&(p/=b,y/=b,h/=b);const v=A[t],I=A[t+1],g=A[t+2];if(0!==v||0!==I||0!==g){if(p*v+y*I+h*g<0){for(let e=0;e<Math.min(J,m);e++){const t=r+2*e,i=z[t];z[t]=-i,z[t+1]=-i}p=-p,y=-y,h=-h}}A[t]=p,A[t+1]=y,A[t+2]=h}}}else if(b[e]>0||P&&P[e]>0){Q=!0,b[e]=0,h[e]=0;const t=P?P[e]:m;P&&(P[e]=0);for(let e=0;e<t;e++){Qe(3*(r+2*e),4*(r+2*e),r+2*e,2*(r+2*e),S,B,z,F,L,R,0,0,0)}}}if(j&&Xe>=2&&$e){Q=!0;const e=$e[0],i=e*D,n=Xe,o=Math.min(m,Math.max(4*n,n)),a=3*o;if((!We||qe<a)&&(We=new Float32Array(a),qe=a),2===n){const e=3*$e[0],t=3*$e[1];for(let r=0;r<o;r++){const i=r/(o-1);We[3*r]=M[e]+i*(M[t]-M[e]),We[3*r+1]=M[e+1]+i*(M[t+1]-M[e+1]),We[3*r+2]=M[e+2]+i*(M[t+2]-M[e+2])}}else{const e=n-1,t=Math.max(1,Math.floor((o-1)/e));let r=0;for(let i=0;i<e&&r<o;i++){const a=Math.max(0,i-1),s=i,l=Math.min(n-1,i+1),c=Math.min(n-1,i+2),u=3*$e[a],d=3*$e[s],f=3*$e[l],p=3*$e[c],m=i===e-1?o-r:t;for(let e=0;e<m&&r<o;e++){const t=e/m;ke(We,3*r,M[u],M[u+1],M[u+2],M[d],M[d+1],M[d+2],M[f],M[f+1],M[f+2],M[p],M[p+1],M[p+2],t),r++}}if(r>0){const e=3*$e[n-1];We[3*(r-1)]=M[e],We[3*(r-1)+1]=M[e+1],We[3*(r-1)+2]=M[e+2]}}const s=e*_,l=x[s+6],p=x[s+7],y=x[s+8],h=x[s+9],b=P?P[e]:m;P&&(P[e]=o);for(let e=0;e<m;e++){const a=3*(i+2*e),s=4*(i+2*e),m=i+2*e,v=2*(i+2*e);if(e>=o){if(e>=b)break;Qe(a,s,m,v,S,B,z,F,L,R,0,0,0);continue}const I=3*e,A=We[I],g=We[I+1],T=We[I+2];let E,w,N;if(e>0&&e<o-1){const t=We[3*(e-1)],r=We[3*(e-1)+1],i=We[3*(e-1)+2],n=We[3*(e+1)]-t,o=We[3*(e+1)+1]-r,a=We[3*(e+1)+2]-i,s=Math.sqrt(n*n+o*o+a*a);s>1e-4?(E=A+n/s,w=g+o/s,N=T+a/s):(E=We[3*(e+1)],w=We[3*(e+1)+1],N=We[3*(e+1)+2])}else if(e<o-1)E=We[3*(e+1)],w=We[3*(e+1)+1],N=We[3*(e+1)+2];else if(o>=2){E=A+(A-We[3*(e-1)]),w=g+(g-We[3*(e-1)+1]),N=T+(T-We[3*(e-1)+2])}else E=A,w=g+.001,N=T;const U=o>1?e/(o-1):0;let x=1;if(O>0&&n>=2){const e=U*(n-1),i=Math.min(Math.floor(e),n-1),o=Math.min(i+1,n-1),a=e-i,s=t-r.creationTimes[$e[i]],l=s+(t-r.creationTimes[$e[o]]-s)*a;x=1-Math.min(l/C,1)}const M=c(U),P=u(U),_=f.width*M*.5,D=h*P*x,V=d?l*d.r(U):l,k=d?p*d.g(U):p,Q=d?y*d.b(U):y;je(a,s,m,v,A,g,T,E,w,N,_,U,D,V,k,Q,h,S,B,z,F,L,R)}if(N&&A&&o>=2){const t=3*e,r=We[3]-We[0],n=We[4]-We[1],a=We[5]-We[2],s=Math.sqrt(r*r+n*n+a*a);if(s>1e-4){const e=r/s,l=n/s,c=a/s;let u=0,d=1,f=0;const p=e*u+l*d+c*f;Math.abs(p)>.999&&(u=1,d=0,f=0);let y=l*f-c*d,h=c*u-e*f,b=e*d-l*u;const v=Math.sqrt(y*y+h*h+b*b);v>1e-4&&(y/=v,h/=v,b/=v);const I=A[t],g=A[t+1],T=A[t+2];if(0!==I||0!==g||0!==T){if(y*I+h*g+b*T<0){for(let e=0;e<Math.min(o,m);e++){const t=i+2*e,r=z[t];z[t]=-r,z[t+1]=-r}y=-y,h=-h,b=-b}}A[t]=y,A[t+1]=h,A[t+2]=b}}for(let e=1;e<Xe;e++){const t=$e[e],r=t*D,i=P?P[t]:m;P&&(P[t]=0);for(let e=0;e<i;e++){Qe(3*(r+2*e),4*(r+2*e),r+2*e,2*(r+2*e),S,B,z,F,L,R,0,0,0)}}}Q&&(i.needsUpdate=!0,n.needsUpdate=!0,o.needsUpdate=!0,a.needsUpdate=!0,s.needsUpdate=!0,l.needsUpdate=!0)},Je=e=>{ye.forEach(t=>Be(t,e))},Ye=new Map(Object.entries(Ne).map(([e,t])=>[t,e])),et=new Map;for(const[e,t]of Object.entries(T))t&&et.set(t,e);function tt(t,r){if(null==t)return t;if(t instanceof e.Vector3)return{x:t.x,y:t.y,z:t.z};if(t instanceof e.Vector2)return{x:t.x,y:t.y};if(!(t instanceof e.Texture)&&"function"!=typeof t){if(Array.isArray(t))return t.map(e=>tt(e));if("object"==typeof t){const e=t;if("EASING"===e.type&&"function"==typeof e.curveFunction){const t=et.get(e.curveFunction);if(!t)throw new Error("Cannot serialize a custom curveFunction. Use a predefined CurveFunctionId instead.");return{type:"EASING",curveFunctionId:t,...void 0!==e.scale?{scale:e.scale}:{}}}const r={};for(const[t,i]of Object.entries(e)){if("onUpdate"===t||"onComplete"===t)continue;if("blending"===t&&"number"==typeof i){r[t]=Ye.get(i)??i;continue}const e=tt(i);void 0!==e&&(r[t]=e)}return r}return t}}function rt(e){const t=tt(e);return JSON.stringify({_version:1,...t})}function it(e){const t=e;if(Array.isArray(t.bezierPoints)&&!t.type)return{type:"BEZIER",...t};if("EASING"===t.type){const e=t.curveFunctionId,r=O(e);if(!r)throw new Error(`Unknown curveFunctionId: "${e}". Use a value from CurveFunctionId.`);const i={type:"EASING",curveFunction:r};return void 0!==t.scale&&(i.scale=t.scale),i}return t}function nt(e){if("number"==typeof e)return e;if(!e||"object"!=typeof e)return e;const t=e;return Array.isArray(t.bezierPoints)||"BEZIER"===t.type||"EASING"===t.type||"string"==typeof t.curveFunctionId?it(t):t}function ot(t){if(!t||"object"!=typeof t)return;const{x:r=0,y:i=0,z:n=0}=t;return new e.Vector3(r,i,n)}function at(t){if(!t||"object"!=typeof t)return;const{x:r=1,y:i=1}=t;return new e.Vector2(r,i)}function st(t){const r={};if(t.transform&&"object"==typeof t.transform){const e=t.transform;r.transform={position:ot(e.position),rotation:ot(e.rotation),scale:ot(e.scale)}}for(const e of["duration","looping","gravity","simulationSpace","simulationBackend","maxParticles"])e in t&&(r[e]=t[e]);for(const e of["startDelay","startLifetime","startSpeed","startSize","startOpacity","startRotation"])e in t&&(r[e]=nt(t[e]));if("startColor"in t&&(r.startColor=t.startColor),t.emission&&"object"==typeof t.emission){const e=t.emission;r.emission={rateOverTime:nt(e.rateOverTime),rateOverDistance:nt(e.rateOverDistance),bursts:Array.isArray(e.bursts)?e.bursts:[]}}if("shape"in t&&(r.shape=t.shape),t.renderer&&"object"==typeof t.renderer){const i=t.renderer,n="string"==typeof i.blending?Ne[i.blending]??e.NormalBlending:i.blending??e.NormalBlending;r.renderer={...i,blending:n}}if(t.velocityOverLifetime&&"object"==typeof t.velocityOverLifetime){const e=t.velocityOverLifetime,i=e=>{if(!e||"object"!=typeof e)return{};const t=e;return{...void 0!==t.x?{x:nt(t.x)}:{},...void 0!==t.y?{y:nt(t.y)}:{},...void 0!==t.z?{z:nt(t.z)}:{}}};r.velocityOverLifetime={isActive:e.isActive??!1,linear:i(e.linear),orbital:i(e.orbital)}}for(const e of["sizeOverLifetime","opacityOverLifetime"])if(t[e]&&"object"==typeof t[e]){const i=t[e];r[e]={isActive:i.isActive??!1,lifetimeCurve:it(i.lifetimeCurve)}}if(t.colorOverLifetime&&"object"==typeof t.colorOverLifetime){const e=t.colorOverLifetime;r.colorOverLifetime={isActive:e.isActive??!0,r:it(e.r),g:it(e.g),b:it(e.b)}}if(t.rotationOverLifetime&&"object"==typeof t.rotationOverLifetime&&(r.rotationOverLifetime=t.rotationOverLifetime),t.noise&&"object"==typeof t.noise&&(r.noise=t.noise),t.textureSheetAnimation&&"object"==typeof t.textureSheetAnimation){const e=t.textureSheetAnimation;r.textureSheetAnimation={...e,tiles:at(e.tiles),startFrame:nt(e.startFrame)}}Array.isArray(t.subEmitters)&&(r.subEmitters=t.subEmitters.map(e=>({...e,config:st(e.config)}))),Array.isArray(t.forceFields)&&(r.forceFields=t.forceFields.map(e=>{const t={};return"isActive"in e&&(t.isActive=e.isActive),"type"in e&&(t.type=e.type),e.position&&(t.position=ot(e.position)),e.direction&&(t.direction=ot(e.direction)),"strength"in e&&(t.strength=nt(e.strength)),"range"in e&&(t.range=null===e.range?1/0:e.range),"falloff"in e&&(t.falloff=e.falloff),t})),Array.isArray(t.collisionPlanes)&&(r.collisionPlanes=t.collisionPlanes.map(e=>{const t={};return"isActive"in e&&(t.isActive=e.isActive),"mode"in e&&(t.mode=e.mode),e.position&&(t.position=ot(e.position)),e.normal&&(t.normal=ot(e.normal)),"dampen"in e&&(t.dampen=e.dampen),"lifetimeLoss"in e&&(t.lifetimeLoss=e.lifetimeLoss),t}));for(const e of Object.keys(t))e in r||"_version"===e||null===t[e]||(r[e]=t[e]);return r}function lt(e){const t=JSON.parse(e),{_version:r,...i}=t;return st(i)}export{L as CollisionPlaneMode,g as CurveFunctionId,w as EmitFrom,S as ForceFieldFalloff,M as ForceFieldType,U as LifeTimeCurve,d as REVISION,P as RendererType,_ as SCALAR_STRIDE,q as S_COLOR_A,W as S_COLOR_B,j as S_COLOR_G,Q as S_COLOR_R,B as S_IS_ACTIVE,F as S_LIFETIME,k as S_ROTATION,V as S_SIZE,D as S_START_FRAME,z as S_START_LIFETIME,E as Shape,R as SimulationBackend,C as SimulationSpace,x as SubEmitterTrigger,N as TimeMode,ne as applyModifiers,ge as assertNamed,Ne as blendingMap,$ as calculateRandomPositionAndVelocityOnBox,K as calculateRandomPositionAndVelocityOnCircle,H as calculateRandomPositionAndVelocityOnCone,X as calculateRandomPositionAndVelocityOnRectangle,G as calculateRandomPositionAndVelocityOnSphere,te as calculateValue,b as createBezierCurveFunction,Z as createDefaultMeshTexture,J as createDefaultParticleTexture,Le as createParticleSystem,T as curveFunctionIdMap,lt as deserializeParticleSystem,I as getBezierCacheSize,O as getCurveFunction,ee as getCurveFunctionFromConfig,xe as getDefaultParticleSystemConfig,oe as isComputeCapableRenderer,Y as isLifeTimeCurve,p as linearToSRGB,Ee as normalizeBackgroundToVector3,Ce as normalizeDepthTextureValue,Oe as normalizeTextureValue,Te as normalizeVector2Value,Ie as registerTSLMaterialFactory,v as removeBezierCurveFunction,ae as resolveSimulationBackend,pe as resolveWebGPUEffectiveRendererType,m as rgbSRGBToLinear,f as sRGBToLinear,rt as serializeParticleSystem,Je as updateParticleSystems};//# sourceMappingURL=three-particles.min.js.map