@needle-tools/engine 5.1.0-canary.244f23e → 5.1.0-canary.3d7c58a

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.
@@ -148,7 +148,7 @@ void main(){
148
148
  clip: rect(0, 0, 0, 0);
149
149
  white-space: nowrap;
150
150
  border: 0;
151
- `,this.root.setAttribute("role","region"),this.root.setAttribute("aria-label","3D Needle Engine scene"),this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("role","status"),this.root.appendChild(this.liveRegion),this.enabled=!0}static _managers=new WeakMap;static get(e){return eg(e)?this._managers.get(e.context):this._managers.get(e)}_enabled;set enabled(e){e!==this._enabled&&(this._enabled=e,e?(Qd._managers.set(this.context,this),(this.context.domElement.shadowRoot||this.context.domElement).prepend(this.root)):this.root.remove())}clear(){this.root.childNodes.forEach(e=>e.remove()),this.root.appendChild(this.liveRegion)}dispose(){this.root.remove(),Qd._managers.delete(this.context)}root=document.createElement("div");liveRegion=document.createElement("div");treeElements=new WeakMap;updateElement(e,t){let i=this.treeElements.get(e);i||(i=document.createElement("div"),this.treeElements.set(e,i),this.root.appendChild(i),typeof t=="object"&&(t.role&&i.setAttribute("role",t.role),t.label&&i.setAttribute("aria-label",t.label),t.hidden!==void 0&&i.setAttribute("aria-hidden",String(t.hidden)),t.busy!==void 0&&i.setAttribute("aria-busy",String(t.busy))))}focus(e){const t=this.treeElements.get(e);t&&t.focus()}unfocus(e){const t=this.treeElements.get(e);t&&t.blur()}hover(e,t){const i=this.treeElements.get(e);this.liveRegion.textContent=t||i?.getAttribute("aria-label")||""}removeElement(e){this.treeElements.get(e)?.remove(),this.treeElements.delete(e)}set liveRegionMode(e){this.liveRegion.setAttribute("aria-live",e)}}let i0,w_=null;function fn(){return i0}function n0(s){if(s==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}w_!==s&&(w_=s,i0=new s)}const s0=x("debugdefines");yo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');yo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');yo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');yo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');yo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.0-alpha.2";');yo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');yo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Mon Apr 20 2026 17:49:16 GMT+0000 (Coordinated Universal Time)";');yo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const oi="5.1.0-alpha.2",Ra="undefined",xc="Mon Apr 20 2026 17:49:16 GMT+0000 (Coordinated Universal Time)";s0&&console.log(`Engine version: ${oi} (generator: ${Ra})
151
+ `,this.root.setAttribute("role","region"),this.root.setAttribute("aria-label","3D Needle Engine scene"),this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("role","status"),this.root.appendChild(this.liveRegion),this.enabled=!0}static _managers=new WeakMap;static get(e){return eg(e)?this._managers.get(e.context):this._managers.get(e)}_enabled;set enabled(e){e!==this._enabled&&(this._enabled=e,e?(Qd._managers.set(this.context,this),(this.context.domElement.shadowRoot||this.context.domElement).prepend(this.root)):this.root.remove())}clear(){this.root.childNodes.forEach(e=>e.remove()),this.root.appendChild(this.liveRegion)}dispose(){this.root.remove(),Qd._managers.delete(this.context)}root=document.createElement("div");liveRegion=document.createElement("div");treeElements=new WeakMap;updateElement(e,t){let i=this.treeElements.get(e);i||(i=document.createElement("div"),this.treeElements.set(e,i),this.root.appendChild(i),typeof t=="object"&&(t.role&&i.setAttribute("role",t.role),t.label&&i.setAttribute("aria-label",t.label),t.hidden!==void 0&&i.setAttribute("aria-hidden",String(t.hidden)),t.busy!==void 0&&i.setAttribute("aria-busy",String(t.busy))))}focus(e){const t=this.treeElements.get(e);t&&t.focus()}unfocus(e){const t=this.treeElements.get(e);t&&t.blur()}hover(e,t){const i=this.treeElements.get(e);this.liveRegion.textContent=t||i?.getAttribute("aria-label")||""}removeElement(e){this.treeElements.get(e)?.remove(),this.treeElements.delete(e)}set liveRegionMode(e){this.liveRegion.setAttribute("aria-live",e)}}let i0,w_=null;function fn(){return i0}function n0(s){if(s==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}w_!==s&&(w_=s,i0=new s)}const s0=x("debugdefines");yo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');yo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');yo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');yo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');yo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.0-alpha.2";');yo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');yo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Mon Apr 20 2026 16:47:29 GMT+0000 (Coordinated Universal Time)";');yo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const oi="5.1.0-alpha.2",Ra="undefined",xc="Mon Apr 20 2026 16:47:29 GMT+0000 (Coordinated Universal Time)";s0&&console.log(`Engine version: ${oi} (generator: ${Ra})
152
152
  Project built at ${xc}`);const no=NEEDLE_PUBLIC_KEY,Fn="needle_isActiveInHierarchy",qo="builtin_components",sc="needle_editor_guid";function yo(s){try{(0,eval)(s)}catch(e){s0&&console.error(e)}}globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0;globalThis.NEEDLE_USE_POSTPROCESSING=globalThis.NEEDLE_USE_POSTPROCESSING!==void 0?globalThis.NEEDLE_USE_POSTPROCESSING:!0;const tg={experimentalSmartHierarchyUpdate:!1};function oc(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const Hp=x("debugnewscripts"),KC=x("debughierarchy"),Ce=[];function ZC(){return Ce.length>0}function Yd(s){if(Hp&&console.log("Register new components",s.new_scripts.length,[...s.new_scripts],s.alias?"element: "+s.alias:s.hash,s),s.new_scripts_pre_setup_callbacks.length>0){for(const e of s.new_scripts_pre_setup_callbacks)e&&e();s.new_scripts_pre_setup_callbacks.length=0}if(!(s.new_scripts.length<=0)){Ce.length=0,s.new_scripts.length>0&&Ce.push(...s.new_scripts),s.new_scripts.length=0;for(let e=0;e<Ce.length;e++)try{const t=Ce[e];if(t.isComponent!==!0){(A()||Hp)&&console.error(`Registered script is not a Needle Engine component.
153
153
  The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
154
154
  `,t),Ce.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
@@ -887,8 +887,8 @@ Possible solutions:
887
887
  `,i),this._renderlooperrors>=3&&(console.warn("Stopping render loop due to error"),this.renderer.setAnimationLoop(null),Gt.sendError(U.Current,"renderloop",i instanceof Error?i:new Error(String(i)))),this.domElement.dispatchEvent(new CustomEvent("error",{detail:i}))}else this.internalStep(e,t)}updatePhysics(e){this.internalUpdatePhysics(e)}setCameraFocusRect(e,t){const i=this._focusRect;if(this._focusRect=e,t&&Object.assign(this.focusRectSettings,t),t?.damping===void 0&&i){let n=i;i instanceof HTMLElement&&(n=i.getBoundingClientRect()),n&&"top"in n&&n.bottom>=-100&&n.right>=-100&&n.top<=window.innerHeight+100&&n.left<=window.innerWidth+100&&(this.focusRectSettings.damping=.2)}}get focusRect(){return this._focusRect}get focusRectSize(){const e=this._focusRect;if(e&&(e instanceof DOMRect||"width"in e&&"height"in e&&"x"in e&&"y"in e))return{x:e.x,y:e.y,width:e.width,height:e.height};if(e instanceof HTMLElement){const t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}return null}focusRectSettings={damping:0,zoom:1,offsetX:0,offsetY:0};_focusRect=null;_lastTimestamp=0;_accumulatedTime=0;_dispatchReadyAfterFrame=!1;internalStep(e,t){this.internalOnBeforeRender(e,t)!==!1&&(this.internalOnRender(),this.internalOnAfterRender())}internalOnBeforeRender(e,t){this.renderer.info.autoReset=!!t,this.renderer.info.autoReset===!1&&this.renderer.info.reset(),this._needsVisibleUpdate=!0;const i=t!==null&&this._xrFrame===null;if(this._xrFrame=t,i&&this.domElement.dispatchEvent(new CustomEvent("xr-session-started",{detail:{context:this,session:this.xrSession,frame:t}})),this._currentFrameEvent=-1,this.isManagedExternally===!1&&this.isInXR===!1&&this.targetFrameRate!==void 0){this._lastTimestamp===0&&(this._lastTimestamp=e),this._accumulatedTime+=(e-this._lastTimestamp)/1e3,this._lastTimestamp=e;let n=this.targetFrameRate;if(typeof n=="object"&&(n=n.value),this._accumulatedTime<1/(n+1))return!1;this._accumulatedTime=0}if(this._stats?.begin(),U.Current=this,this.onHandlePaused())return!1;for(U.Current=this,this.time.update(),FP&&console.log("FPS",this.time.smoothedFps.toFixed(0)),Yd(this),Sd(this.scene),o0(this),Cn(this,-1);this._cameraStack.length>0&&(!this.mainCameraComponent||this.mainCameraComponent.destroyed);){this._cameraStack.splice(this._cameraStack.length-1,1);const n=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(n)}if(this.pre_update_oneshot_callbacks){for(const n in this.pre_update_oneshot_callbacks)this.pre_update_oneshot_callbacks[n]();this.pre_update_oneshot_callbacks.length=0}if(this.pre_update_callbacks)for(const n in this.pre_update_callbacks)this.pre_update_callbacks[n]();this._currentFrameEvent=0;for(let n=0;n<this.scripts_earlyUpdate.length;n++){const o=this.scripts_earlyUpdate[n];o.activeAndEnabled&&o.earlyUpdate!==void 0&&(U.Current=this,o.earlyUpdate())}this.executeCoroutines(0),Cn(this,0),this._currentFrameEvent=1;for(let n=0;n<this.scripts_update.length;n++){const o=this.scripts_update[n];o.activeAndEnabled&&o.update!==void 0&&(U.Current=this,o.update())}this.executeCoroutines(1),Cn(this,1),this._currentFrameEvent=2;for(let n=0;n<this.scripts_lateUpdate.length;n++){const o=this.scripts_lateUpdate[n];o.activeAndEnabled&&o.lateUpdate!==void 0&&(U.Current=this,o.lateUpdate())}if(this.executeCoroutines(2),Cn(this,2),this.physicsSteps===void 0&&(this.physicsSteps=1),this.physics.engine&&this.physicsSteps>0&&this.internalUpdatePhysics(this.physicsSteps),this.isVisibleToUser||this.runInBackground){this._currentFrameEvent=3;for(let n=0;n<this.scripts_onBeforeRender.length;n++){const o=this.scripts_onBeforeRender[n];o.activeAndEnabled&&o.onBeforeRender!==void 0&&(U.Current=this,o.onBeforeRender(t))}if(this.executeCoroutines(3),Cn(this,3),this._needsUpdateSize&&this.updateSize(),this.pre_render_callbacks)for(const n in this.pre_render_callbacks)this.pre_render_callbacks[n](t);if(this._focusRect&&this.mainCamera instanceof c.PerspectiveCamera){const n=this.focusRectSettings,o=n.damping>0?this.time.deltaTime/n.damping:1;JS(this._focusRect,this.focusRectSettings,o,this.mainCamera,this.renderer)}}return!0}internalUpdatePhysics(e){if(!this.physics.engine)return!1;const t=e,i=this.time.deltaTime/t;for(let n=0;n<t;n++)this._currentFrameEvent=9,this.executeCoroutines(9),this.physics.engine.step(i),this._currentFrameEvent=10,this.executeCoroutines(10);return this.physics.engine.postStep(),!0}internalOnRender(){this.isManagedExternally||(t1(this),this._currentFrameEvent=-1,X.nodeFrame.camera=this.mainCamera,X.nodeFrame.update(),this.renderNow(),this._currentFrameEvent=4)}internalOnAfterRender(){if(this.isVisibleToUser||this.runInBackground){for(let e=0;e<this.scripts_onAfterRender.length;e++){const t=this.scripts_onAfterRender[e];t.activeAndEnabled&&t.onAfterRender!==void 0&&(U.Current=this,t.onAfterRender())}if(this.executeCoroutines(4),Cn(this,4),this.post_render_callbacks)for(const e in this.post_render_callbacks)this.post_render_callbacks[e]()}if(this._currentFrameEvent=-1,this.connection.sendBufferedMessagesNow(),this._stats){this._stats.end();const e=this.time.fps<20?50:150;if(this.time.frameCount%e===0||this.time.frameCount===1){const t=window.performance&&window.performance.memory?`${(window.performance.memory.usedJSHeapSize/1024/1024).toFixed(2)} MB`:"n/a";console.log(this.renderer.info.render.calls+" DrawCalls",`
888
888
  Render:`,{shaders:this.renderer.info.programs?.length,...this.renderer.info.render},`
889
889
  Memory:`,{usedMemory:t,...this.renderer.info.memory},`
890
- Target Framerate: `+this.targetFrameRate)}}this._dispatchReadyAfterFrame&&(this._dispatchReadyAfterFrame=!1,this.domElement.dispatchEvent(new CustomEvent("ready")),ae.dispatchCallback(le.ContextFirstFrameRendered,this))}_tempClearColor=new c.Color;_tempClearColor2=new c.Color;renderNow(e){if(!e&&(e=this.mainCamera,!e))return!1;if(this.handleRendererContextLost(),this._isRendering=!0,this.renderRequiredTextures(),this.renderer.toneMapping!==c.NoToneMapping&&V0(),this.postprocessing.update(),this.composer&&!this.isInXR){e&&"setMainCamera"in this.composer&&this.composer.passes[0]?.mainCamera!=e&&this.composer.setMainCamera(e);const t=this.renderer.getClearColor(this._tempClearColor),i=this.renderer.getClearAlpha();this._tempClearColor2.copy(t),this.renderer.setClearColor(t.convertSRGBToLinear(),this.renderer.getClearAlpha()),this.composer.render(this.time.deltaTime),this.renderer.setClearColor(this._tempClearColor2,i)}else e&&(this.isInXR&&exports.DeviceUtilities.isMacOS()&&this.renderer.clearDepth(),this.renderer.render(this.scene,e));return this._isRendering=!1,!0}_contextRestoreTries=0;handleRendererContextLost(){this.time.frame%10&&this.renderer.getContext().isContextLost()&&this._contextRestoreTries++<100&&(console.warn("Attempting to recover WebGL context..."),this.renderer.forceContextRestore())}_wasPaused=!1;onHandlePaused(){const e=this.evaluatePaused();if(this._wasPaused!==e){BP&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){const i=this.scripts_pausedChanged[t];i.activeAndEnabled&&i.onPausedChanged!==void 0&&(U.Current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new c.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){const i=new c.DepthTexture(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new c.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=c.NearestFilter,this._renderTarget.texture.magFilter=c.NearestFilter,this._renderTarget.texture.format=c.RGBAFormat)}const e=this._renderTarget;e.texture&&(e.texture.colorSpace=this.renderer.outputColorSpace);const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){const i=this.coroutines[e];for(let n=0;n<i.length;n++)try{const o=i[n];if(!o.comp||o.comp.destroyed||!o.main||o.comp.enabled===!1){UP&&console.log("Removing coroutine",o.comp,o.comp.enabled),i.splice(n,1),--n;continue}const a=o.chained;if(a&&a.length>0){const u=a[a.length-1].next();if(u.done&&a.pop(),t(u)&&(o.chained||(o.chained=[]),o.chained.push(u.value)),!u.done)continue}const l=o.main.next();if(l.done===!0){i.splice(n,1),--n;continue}const h=l.value;if(t(h)){if(h.next().done)continue;o.chained||(o.chained=[]),o.chained.push(h)}else if(h instanceof Promise){const d=h;o.chained||(o.chained=[]);const u=v0(d);o.chained?.push(u);continue}}catch(o){console.error(o)}}function t(i){return!!(i&&i.next&&i.return)}}}const Zf=x("debugwebxr");class iw{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Zf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Zf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(Zf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new K("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}const Mt=new c.Vector3,J_=new c.Vector3,eb=new c.Quaternion,VP=x("debuggizmos"),sn=8947848,Jf=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[cm]!==void 0}static setVisible(e){for(const t of Di.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=sn);const l=H.active?.rigScale??1,h=Di.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),Mt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,an(r.material,i)}static DrawDirection(e,t,i=sn,n=0,o=!0,r=1){if(!B.enabled)return;const a=Di.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(Mt.set(0,0,-r),eb.set(t.x,t.y,t.z,t.w),Mt.applyQuaternion(eb)):(Mt.set(t.x,t.y,t.z),Mt.multiplyScalar(r)),l.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,an(a.material,i)}static DrawLine(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,an(r.material,i)}static DrawCircle(e,t,i,n=sn,o=0,r=!0){if(!B.enabled)return;const a=Di.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,Mt.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,an(a.material,n)}static DrawWireSphere(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getSphere(t,n,!0);ur(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,an(r.material,i)}static DrawSphere(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getSphere(t,n,!1);ur(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,an(r.material,i)}static DrawWireBox(e,t,i=sn,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Di.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,an(a.material,i)}static DrawWireBox3(e,t=sn,i=0,n=!0){if(!B.enabled)return;const o=Di.getBox(i);o.position.copy(e.getCenter(Mt)),o.scale.copy(e.getSize(Mt)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,an(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=sn,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Di.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),Mt.set(t.x,t.y,t.z).sub(J_.set(e.x,e.y,e.z)).normalize());const h=Mt.set(t.x,t.y,t.z).sub(J_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,an(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Di.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,an(t.material,e.color??sn)}}const $P=new c.BoxGeometry(1,1,1);function wg(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry($P);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function an(s,e){if(Array.isArray(s)){for(const i of s)an(i,e);return}const t=e instanceof te?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const cm=Symbol("GizmoCache");class Di{static familyName="needle-gizmos";static ensureFont(){let e=ne.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ne.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ne.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),VP&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new ne.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(U.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(U.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(Jf*3),3),t.geometry.setAttribute("position",i);const n=F(0,1,0),o=F(0,0,1),r=F(o);r.cross(n).normalize();const a=F(r),l=Math.PI*2/(Jf-1);for(let h=0;h<Jf+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(U.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(U.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(U.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[cm]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(U.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,ne.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ne.__webpack_exports__default.MeshUIBaseElement){if(fr(n))continue;const o=e.isInVR,r=!1,a=!o;Gc(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),fr(r)!=!0&&r[cm].push(r))}}}const Vt=x("debugphysics"),WP=x("debugworker"),tb=new c.Layers;class wo{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){tb.set(e),this.layerMask=tb}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class xg{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class ja{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new wo;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){Vt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return Vt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),Vt&&console.time("raycast"),o.length=0,ja._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),ja._raycasting--,Vt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&ib(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof X.GroundedSkybox&&(u=!1),d==="lod"){const f=re.getRaycastMesh(o);f&&(a.geometry=f)}if(!u&&HP(a,e,i)||(n.useAcceleratedRaycast!==!1?nu.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,Vt&&i.length!=h){const f=i[i.length-1];B.DrawWireSphere(f.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof X.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const f=l(e);if(f===!1)return;f==="continue in children"&&(h=!1)}if(u&&ib(u)||(h=!1),h){if(a){const f=this.sphere;f.center.copy(t),f.radius=i;const m=o.length;if(nu.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const f=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(f)){const g=Y(e),b=g.distanceTo(m.center),y=new xg(e,b,g);if(o.push(y),!r)return}}}if(e.children)for(const f of e.children){const m=o.length;if(this.intersectSphere(f,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function ib(s){return!(s.index&&s.index.array.length<3)}const Fo=new c.Sphere,Yh=new c.Plane,GP=new c.Matrix3;function HP(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof X.GroundedSkybox){Yh.setFromNormalAndCoplanarPoint(F(0,1,0),F(0,-l.position.y,0)),Yh.applyMatrix4(l.matrixWorld,GP);const u=o.ray.intersectPlane(Yh,F());if(u){Fo.copy(h),Fo.applyMatrix4(l.matrixWorld);const m=F(u).sub(o.ray.origin).length(),g=Fo.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:Yh.normal.clone()})}return}Fo.copy(h),Fo.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Fo,F());if(d){const u=F(d).sub(o.ray.origin),f=u.length();if(f>Fo.radius){const m=u.clone().normalize();r.push({distance:f,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var nu;(s=>{let e=0;function t(v,w,k,O,M){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const L=w,j=L.bvhNeedsUpdate;if(!L.staticGenerator)l(),r&&(L.staticGenerator=new r(w),L.staticGenerator.applyWorldTransforms=!1,L.staticGeometry=L.staticGenerator.generate(),D.boundsTree=a?.call(L.staticGeometry),L.staticGeometryLastUpdate=performance.now()+Math.random()*200,L.bvhNeedsUpdate=!0);else if(D.boundsTree&&(L.autoUpdateMeshBvhInterval!==void 0&&L.autoUpdateMeshBvhInterval>=0||j===!0)){const V=performance.now(),W=V-L.staticGeometryLastUpdate,E=L.autoUpdateMeshBvhInterval??100;(j||W>E)&&(Vt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),L.bvhNeedsUpdate=!1,L.staticGeometryLastUpdate=V,L.staticGenerator?.generate(L.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||_();let L=!0;if((O.xr||D[g]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(L=!1),L&&f){if(D[m]===void 0){let j=null;if(y.length>0){const V=y.shift();V&&!V.running&&(j=V)}if(!j&&b.length<3)try{WP&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-rcR8UYgV.umd.cjs",document.baseURI).href),j=new f,b.push(j)}catch(V){V instanceof DOMException&&V.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug(V),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(V)),e++}if(j!=null&&!j.running){const V=w.name;Vt&&console.log("<<<< worker start",V,j),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{j.generate(W).then(E=>{D[m]="done",D.boundsTree=E}).catch(E=>{D[m]="failed - "+E?.message,D[g]=!1,Vt&&console.error("Failed to generate mesh bvh on worker",E)}).finally(()=>{Vt&&console.log(">>>>> worker done",V,{hasBoundsTre:D.boundsTree!=null}),y.push(j),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(E){console.error("Failed to generate mesh bvh on worker",E)}}else Vt&&console.warn("No worker available")}}else(!u||!L)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(v instanceof c.Raycaster){const L=v,j=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),Vt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(Vt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return Vt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const V=L.firstHitOnly;return L.firstHitOnly=!1,L.intersectObject(w,!1,k),L.firstHitOnly=V,w.raycast=j,!0}else if(v instanceof c.Sphere){const L=D.boundsTree;if(L){const j=v;if(h.copy(w.matrixWorld).invert(),j.applyMatrix4(h),L.intersectsSphere(j)){const W=Y(w),E=W.distanceTo(j.center),N=new xg(w,E,W);k.push(N)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-DkMW3WY4.umd.cjs")).then(v=>v.index$1).then(v=>{n=v.acceleratedRaycast,o=v.MeshBVH,r=v.StaticGeometryGenerator,a=v.computeBoundsTree}).catch(v=>{(Vt||A())&&console.error("Failed to load BVH library...",v.message)}))}const h=new c.Matrix4;let d=!1,u=!1,f=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),b=[],y=[];function _(){d=!0,u=!0,Promise.resolve().then(()=>aD).then(v=>{f=v.GenerateMeshBVHWorker}).catch(v=>{Vt||A()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",v)}).finally(()=>{u=!1})}})(nu||(nu={}));const nb=Symbol("gltf-loader-internal-usage-tracker"),qP=x("debugusers");class Sa{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return Sa._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){Sa._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[nb]=e._loadingId),r)),o},null}afterRoot(e){Sa._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[nb],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{qP&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class nw{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
891
- `+i.src),e.preventDefault())}})}}const Du=x("trackresources");function sw(){return Du==="dispose"}let vr=!0;Du===0&&(vr=!1);function XP(s){vr=s}function ow(){return vr}const rw=Symbol("disposable");function aw(s,e){s&&(s[rw]=e,rr&&console.warn("Set disposable",e,s))}const lw=Symbol("disposed");function QP(s){return s[lw]===!0}function we(s){if(s){if(s[rw]===!1){rr&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[lw]=!0),s instanceof c.Scene)we(s.environment),we(s.background),we(s.customDepthMaterial),we(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)we(s.geometry),we(s.material),we(s.skeleton),we(s.bindMatrix),we(s.bindMatrixInverse),we(s.customDepthMaterial),we(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)we(s.geometry),we(s.material),we(s.customDepthMaterial),we(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){Hr(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];we(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)rr&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&we(e);else if(s instanceof c.Material){Hr(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&we(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?we(i):i instanceof c.Uniform$1&&we(i.value)}}else s instanceof c.Texture?(Hr(s),Hr(s.source),s.source?.data instanceof ImageBitmap&&Hr(s.source.data)):s instanceof c.Skeleton?(Hr(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&rr&&console.warn("Unknown object type",s)}}function Hr(s){s&&((rr||sw()||Du)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function YP(s){}const KP=new Set;function Sg(s,e,t=null,i){if(i||(i=KP,i.clear()),!s)return i;const n=s[kc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&Sg(o,!0,t,i));return i}function ZP(s){return s[Gl]}const rr=x("debugresourceusers")||x("debugmemory"),kc=Symbol("needle-resource-users"),Gl=Symbol("needle-resource-users-count");function Ft(s,e){wu(s,e,function(t,i){vr&&!ja.raycasting&&(su(kc,this,t,!1),su(kc,this,i,!0))})}vr&&(Ft(c.Mesh.prototype,"material"),Ft(c.Mesh.prototype,"geometry"),Ft(c.Material.prototype,"map"),Ft(c.Material.prototype,"bumpMap"),Ft(c.Material.prototype,"alphaMap"),Ft(c.Material.prototype,"normalMap"),Ft(c.Material.prototype,"displacementMap"),Ft(c.Material.prototype,"roughnessMap"),Ft(c.Material.prototype,"metalnessMap"),Ft(c.Material.prototype,"emissiveMap"),Ft(c.Material.prototype,"specularMap"),Ft(c.Material.prototype,"envMap"),Ft(c.Material.prototype,"lightMap"),Ft(c.Material.prototype,"aoMap"),Ft(c.Material.prototype,"gradientMap"));function JP(s){if(vr===!1)return;const e=s[kc];if(e)for(const t of e)su(kc,t,s,!1)}vr&&wu(c.Material.prototype,"dispose",function(){JP(this)});let hm=0;function su(s,e,t,i){if(hm>0)return;if(Array.isArray(t)){for(const o of t)su(s,e,o,i);return}if(!t)return;let n=t[s];if(n||(n=new Set),i){if(e&&!n.has(e)){n.add(e);let o=t[Gl]||0;o+=1,t[Gl]=o,rr&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[Gl]||0;o>0&&(o-=1,t[Gl]=o),rr&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(Sa.isLoading(t)||(Du&&console.warn(`🔴 Removed all user of "${t.type}"`,t),sw()&&we(t)))}t[s]=n}try{wu(c.WebGLRenderer.prototype,"render",function(){hm++},function(){hm--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const Ec=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),cw=Symbol("isUsingInstancing"),hw=Symbol("instancingRenderer"),Hl=Symbol("instancingAutoUpdateBounds");class $i{static isUsingInstancing(e){return e[cw]===!0}static getRenderer(e){return e[hw]||null}setAutoUpdateBounds(e,t){const i=$i.getRenderer(e);i&&(i[Hl]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[Ec]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)$i.markDirty(i,!0)}}const Md=x("debuggetcomponent"),ar=x("debuginstantiate");class yn{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context;components;clone(){const e=new yn;return e.idProvider=this.idProvider,e.parent=this.parent,e.keepWorldPosition=this.keepWorldPosition,e.position=Array.isArray(this.position)?[...this.position]:this.position?.clone(),e.rotation=Array.isArray(this.rotation)?[...this.rotation]:this.rotation?.clone(),e.scale=Array.isArray(this.scale)?[...this.scale]:this.scale?.clone(),e.visible=this.visible,e.context=this.context,e.components=this.components,e}cloneAssign(e){this.idProvider=e.idProvider,this.parent=e.parent,this.keepWorldPosition=e.keepWorldPosition,this.position=Array.isArray(e.position)?[...e.position]:e.position?.clone(),this.rotation=Array.isArray(e.rotation)?[...e.rotation]:e.rotation?.clone(),this.scale=Array.isArray(e.scale)?[...e.scale]:e.scale?.clone(),this.visible=e.visible,this.context=e.context,this.components=e.components}}function Xa(s){return s.visible}function hc(s,e){return typeof e=="number"&&(e=e>.5),s.visible=e,s.visible}function dw(s){return s[Fn]||Lu(s)}function uw(s,e){s[cw]=e}function Lu(s){return $i.isUsingInstancing(s)}function Cg(s,e){return ka(s,e,!0,!0)}const fw=Symbol("isDestroyed");function fr(s){return s[fw]}function pw(s,e){s[fw]=e}const dm=Symbol("isDontDestroy");function ia(s,e=!0){s[dm]=e}const kd=[],Ed=[];function xi(s,e=!0,t=!1){kd.length=0,Ed.length=0,um(s,e,!0);for(const i of kd)i.gameObject=null,i.context=null;for(const i of Ed)pw(i,!0),t&&we(i);Ed.length=0,kd.length=0}function um(s,e=!0,t=!0){if(s==null)return;const i=s;if(i.isComponent){if(i[dm])return;kd.push(i);const r=i.gameObject;i.__internalDisable?.(),i.__internalDestroy?.(),i.gameObject=r;return}if(s[dm])return;const n=s;Md&&console.log(n),Ed.push(n);const o=n.userData?.components;if(o!=null&&Array.isArray(o)){let r=o.length;for(let a=0;a<o.length;a++){const l=o[a];um(l,e,!1),o.length<r&&(r=o.length,a--)}}if(e&&n.children)for(const r of n.children)um(r,e,!1);t&&n.removeFromParent()}function pr(s,e,t=!0){return mw(s,e,t)}function*Pg(s,e,t=!1,i=999,n=0){if(s?.userData.components&&!(n>i)){for(const o of s.userData.components)e&&o?.isComponent===!0&&o instanceof e?yield o:yield o;if(t===!0)for(const o of s.children)yield*Pg(o,e,!0,i,n+1)}}function mw(s,e,t,i=0){if(s){if(s.isObject3D,i>1e3){console.warn("Failed to iterate components: too many levels");return}if(s.userData?.components)for(let n=0;n<s.userData.components.length;n++){const o=s.userData.components[n];if(o?.isComponent===!0){const r=e(o);if(r!==void 0)return r}}if(t&&s.children){const n=i+1;for(let o=0;o<s.children.length;o++){const r=s.children[o];if(!r)continue;const a=mw(r,e,t,n);if(a!==void 0)return a}}}}function uo(s,e){if("isAssetReference"in s)return s.instantiate(e??void 0);let t=null;e!=null&&(e.x!==void 0?(t=new yn,t.position=e):t=e);let i=U.Current;t?.context&&(i=t.context),Md&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new ct(Date.now()));const n=[],o={},r={},a=gw(i,s,t,n,o,r);a&&(iO(a,o),tO(r,o)),Md&&(qd(s,!0),qd(a,!0));const l={};if(t?.components!==!1){for(const h in n){const d=n[h],u=d.guid;t&&t.idProvider&&(d.guid=t.idProvider.generateUUID(),l[u]=d.guid,Md&&console.log(d.name,d.guid)),Au(d,i),d.__internalNewInstanceCreated&&d.__internalNewInstanceCreated()}for(const h in n){const d=n[h];d.resolveGuids&&d.resolveGuids(l),d.enabled!==!1&&(d.enabled=!0)}Yd(i)}return a}function gw(s,e,t,i,n,o){if(!e||e[gi])return null;const r=e.userData;e.userData={};const a=e.children;e.children=[];const l=e.clone(!1);if(ku(l),e.userData=r,e.children=a,n[e.uuid]={original:e,clone:l},ar&&console.log("ADD",e,l),e.type==="SkinnedMesh"&&(o[e.uuid]={original:e,clone:l}),t?.visible!==void 0&&(l.visible=t.visible),t?.idProvider){l.uuid=t.idProvider.generateUUID();const d=l;d&&(d.guid=l.uuid)}e.animations&&e.animations.length>0&&(l.animations=[...e.animations]);const h=e.parent;if(h&&h.add(l),t?.position)if(Array.isArray(t.position)){const d=new c.Vector3;d.fromArray(t.position),l.worldPosition=d}else l.worldPosition=t.position;else l.position.copy(e.position);if(t?.rotation){if(t.rotation instanceof c.Quaternion)l.worldQuaternion=t.rotation;else if(t.rotation instanceof c.Euler)l.worldQuaternion=ti().setFromEuler(t.rotation);else if(Array.isArray(t.rotation)){const d=new c.Euler;d.fromArray(t.rotation),l.worldQuaternion=ti().setFromEuler(d)}}else l.quaternion.copy(e.quaternion);if(t?.scale)if(Array.isArray(t.scale)){const d=new c.Vector3;d.fromArray(t.scale),t.scale=d}else l.scale.copy(t.scale);else l.scale.copy(e.scale);if(t?.parent&&t.parent!=="scene"){let d=null;if(typeof t.parent=="string"?d=ka(t.parent,s.scene,!0):d=t.parent,d){const u=t.keepWorldPosition===!0?d.attach:d.add;u?u.call(d,l):console.error("Invalid parent object",d,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(const[d,u]of Object.entries(e.userData))d!=="components"&&(l.userData[d]=u);if(e.userData?.components){const d=e.userData.components,u=[];l.userData.components=u;for(let f=0;f<d.length;f++){const m=d[f],g=new m.constructor;eO(m,g),m[sc]!==void 0&&(g[sc]=m[sc]),u.push(g),g.gameObject=l,i.push(g),n[m.guid]={original:m,clone:g},Mu.dispatchComponentLifecycleEvent("component-added",g)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0,t.visible=void 0);for(const d in e.children){const u=e.children[d],f=gw(s,u,t,i,n,o);f&&(n[f.uuid]={original:u,clone:f},l.add(f))}return l}function eO(s,e,t){Ta(e,s,void 0,{})}function tO(s,e){for(const t in s){const i=s[t],n=i.original,o=n.skeleton,r=i.clone;if(!o){console.warn("Skinned mesh has no skeleton?",i);continue}const a=o.bones,l=r.skeleton.clone();r.skeleton=l,r.bindMatrix.clone().copy(n.bindMatrix),r.bindMatrixInverse.copy(n.bindMatrixInverse);const h=[];l.bones=h;for(let d=0;d<a.length;d++){const u=a[d],m=e[u.uuid].clone;h.push(m)}}for(const t in s){const i=s[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function iO(s,e){for(const t in e){const n=e[t].clone;if(n?.isObject3D&&n?.userData?.components)for(let o=0;o<n.userData.components.length;o++){const r=n.userData.components[o],a=Object.entries(r);for(const[l,h]of a)if(Array.isArray(h)){const d=[];r[l]=d;for(let u=0;u<h.length;u++){const f=h[u];if(typeof f!="object"){d.push(f);continue}const m=sb(r,l,f,e);m!==void 0?(ar&&console.log("Found new instance for",l,f,"->",m),d.push(m)):(ar&&console.warn("Could not find new instance for",l,f),d.push(f))}}else if(typeof h=="object"){const d=sb(r,l,h,e);d!==void 0?r[l]=d:ar&&console.warn("Could not find new instance for",l,h)}}}}function sb(s,e,t,i){if(t!=null)if(t.isComponent===!0){const n=t.gameObject;if(n){const o=n.uuid,r=i[o]?.clone;if(!r){ar&&console.log("reference did not change",e,s,t);return}const a=n.userData.components.indexOf(t);if(a>=0&&r.isObject3D)return ar&&console.log(e,o),r.userData.components[a];console.warn("could not find component",e,t)}}else if(t.isObject3D===!0){if(e==="gameObject")return;const n=t;if(n){const o=n.uuid,r=i[o]?.clone;if(r)return ar&&console.log(e,"old",t,"new",r),r}}else{if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone();if(t.isColor===!0)return t.clone();if(t.isEventList===!0)return t.__internalOnInstantiate(i)}}const Ml={},Ba={register(s,e){Ml[s]=e},unregister(s){delete Ml[s]},list(){return Object.keys(Ml)},has(s){return s in Ml},async resolve(s){const e=Ml[s];return e?e(s):null}};ae.registerCallback(le.ContextCreated,s=>{const e=s.context;xw(e),_w(e)});const ou=x("debugcomponents"),ob="eff8ba80-635d-11ec-90d6-0242ac120003";class ct{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(e){typeof e=="string"&&(e=ct.hash(e)),this._originalSeed=e,this._seed=e}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e=="string")return de.v5(e,ob);const t=this._seed;return this._seed-=1,de.v5(t.toString(),ob)}initialize(e){typeof e=="string"?this._seed=ct.hash(e):this._seed=e}static createFromString(e){return new ct(this.hash(e))}static hash(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}}var yw=(s=>(s.NewInstanceCreated="new-instance-created",s.InstanceDestroyed="instance-destroyed",s))(yw||{});class nO{guid;dontSave;constructor(e){this.guid=e}}function Jc(s,e,t=!0,i){if(!s)return;const n=s;if(xi(s,t),!e){console.warn("Can not send destroy: No networking connection provided",s.guid);return}if(!e.isConnected){A()&&console.debug("Can not send destroy: not connected",s.guid);return}let o=s.guid;if(!o&&n.uuid&&(o=n.uuid),!o){console.warn("Can not send destroy: failed to find guid",s);return}Og(o,e,i)}function Og(s,e,t){const i=new nO(s);t?.saveInRoom===!1&&(i.dontSave=!0),e.send("instance-destroyed",i,cn.Queued)}const Rd=[];function sO(s){return Rd.push(s),()=>{const e=Rd.indexOf(s);e>=0&&Rd.splice(e,1)}}function _w(s){s.connection.beginListen("instance-destroyed",e=>{ou&&console.log("[Remote] Destroyed",s.scene,e);const t=Cg(e.guid,s.scene);if(t){for(const i of Rd)try{i(e.guid,t)}catch(n){console.error("Error in onSyncDestroy callback",n)}xi(t)}})}class oO{filename;hash;size;constructor(e,t,i){this.filename=e,this.hash=t,this.size=i}}class bw{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;preventCreation=void 0;deleteStateOnDisconnect;constructor(e,t){this.originalGuid=e,this.guid=t}}const Td=[];function vw(s){return Td.push(s),()=>{const e=Td.indexOf(s);e>=0&&Td.splice(e,1)}}function Mg(s,e,t,i){const n=s;if(!n.guid)if(n.name)n.guid=n.name;else return console.error("[syncInstantiate] Can not instantiate: a 'guid' is required. For runtime-created objects, either set a name (`obj.name = 'my-prefab'`) or a guid (`obj.guid = 'my-prefab-id'`). The identifier must be the same on all clients.",n),null;if(Ba.has(n.guid)||Ba.register(n.guid,async()=>n),e.context||(e.context=U.Current),!e.context)return console.error("[syncInstantiate] Missing network instantiate options / reference to network connection in sync instantiate. Please pass in the Needle Engine context."),null;const o=e?{...e}:null,{instance:r,seed:a}=rO(n,e);if(r){const l=r;if(l.guid){ou&&console.log("[Local] new instance","gameobject:",r?.guid);const h=new bw(n.guid,l.guid);h.seed=a,e.deleteOnDisconnect===!0&&(h.deleteStateOnDisconnect=!0),o&&(o.position&&(Array.isArray(o.position)?h.position={x:o.position[0],y:o.position[1],z:o.position[2]}:h.position={x:o.position.x,y:o.position.y,z:o.position.z}),o.rotation&&(o.rotation instanceof c.Euler?o.rotation=new c.Quaternion().setFromEuler(o.rotation):o.rotation instanceof Array&&(o.rotation=new c.Quaternion().fromArray(o.rotation)),h.rotation={x:o.rotation.x,y:o.rotation.y,z:o.rotation.z,w:o.rotation.w}),o.scale&&(Array.isArray(o.scale)?h.scale={x:o.scale[0],y:o.scale[1],z:o.scale[2]}:h.scale={x:o.scale.x,y:o.scale.y,z:o.scale.z})),h.position||(h.position={x:l.position.x,y:l.position.y,z:l.position.z}),h.rotation||(h.rotation={x:l.quaternion.x,y:l.quaternion.y,z:l.quaternion.z,w:l.quaternion.w}),h.scale||(h.scale={x:l.scale.x,y:l.scale.y,z:l.scale.z}),h.visible=n.visible,o?.parent&&(typeof o.parent=="string"?h.parent=o.parent:o.parent?.guid?h.parent=o.parent.guid:o.parent instanceof c.Scene?h.parent="scene":console.warn("Unsupported parent type in sync instantiate options: "+o.parent?.name)),h.hostData=t,i===!1&&(h.dontSave=!0),!e?.context?.connection&&A()&&console.debug("Object will be instantiated but it will not be synced: not connected",n.guid),e.context.connection.isInRoom&&na.push(new WeakRef(l)),e?.context?.connection.send("new-instance-created",h)}else console.warn("Missing guid, can not send new instance event",l)}return r}function ww(){return Math.random()*9999999}const na=new Array;function xw(s){const e=s.connection.beginListen("new-instance-created",async i=>{const n=await lO(i.originalGuid,s.scene);if(i.preventCreation===!0)return;if(!n){console.warn("could not find object that was instantiated: "+i.guid);return}const o=new yn;i.position&&(o.position=new c.Vector3(i.position.x,i.position.y,i.position.z)),i.rotation&&(o.rotation=new c.Quaternion(i.rotation.x,i.rotation.y,i.rotation.z,i.rotation.w)),i.scale&&(o.scale=new c.Vector3(i.scale.x,i.scale.y,i.scale.z)),o.parent=i.parent,i.seed&&(o.idProvider=new ct(i.seed)),o.visible=i.visible,o.context=s,ou&&s.alias&&console.log("[Remote] instantiate in: "+s.alias);const r=uo(n,o);if(na.push(new WeakRef(r)),r){i.parent==="scene"&&s.scene.add(r),ou&&console.log("[Remote] new instance","gameobject:",r?.guid,n);for(const a of Td)try{a(r,i,s)}catch(l){console.error("Error in onSyncInstantiate callback",l)}}}),t=s.connection.beginListen("left-room",()=>{na.length>0&&console.debug(`Left networking room, cleaning up ${na.length} instantiated objects`);for(const i of na){const n=i.deref();n&&n.destroy()}na.length=0});return()=>{s.connection.stopListen("new-instance-created",e),s.connection.stopListen("left-room",t)}}function rO(s,e){const t=ww(),i=e??new yn;i.idProvider=new ct(t);const n=uo(s,i);return{seed:t,instance:n}}function Sw(s,e){Ba.register(s,e)}function aO(s){Ba.unregister(s)}async function lO(s,e){const t=await Ba.resolve(s);return t||Cw(s,e)}function Cw(s,e){if(e===null||!s)return null;if(e.guid===s)return e;if(e.children)for(const t of e.children){const i=Cw(s,t);if(i)return i}return null}class cO{_context;get context(){return this._context??U.Current}get isStateMachineBehaviour(){return!0}}class ql{name;nameHash;normalizedTime;length;speed;action;hasTransitions;constructor(e,t,i,n){this.name=e.name,this.nameHash=e.hash,this.normalizedTime=t,this.length=i,this.speed=n,this.action=e.motion.action||null,this.hasTransitions=e.transitions?.length>0||!1}}function Pw(s,e){return{name:"Empty",isLooping:!1,guid:e?.generateUUID()??c.MathUtils.generateUUID(),index:-1,clip:new c.AnimationClip(s,0,[])}}var ni=(s=>(s[s.If=1]="If",s[s.IfNot=2]="IfNot",s[s.Greater=3]="Greater",s[s.Less=4]="Less",s[s.Equals=6]="Equals",s[s.NotEqual=7]="NotEqual",s))(ni||{}),Zo=(s=>(s[s.Float=1]="Float",s[s.Int=3]="Int",s[s.Bool=4]="Bool",s[s.Trigger=9]="Trigger",s))(Zo||{});const Ze=x("debuganimatorcontroller"),Kh=x("debugrootmotion");function hO(s){switch(s){case"if":return ni.If;case"ifNot":return ni.IfNot;case"greater":return ni.Greater;case"less":return ni.Less;case"equals":return ni.Equals;case"notEqual":return ni.NotEqual}}class kg{_name;_parameters=[];_states=[];_anyStateTransitions=[];_defaultStateName=null;_lastTransition=null;constructor(e){this._name=e??"AnimatorController"}floatParameter(e,t=0){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Float,value:t}),this}intParameter(e,t=0){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Int,value:t}),this}boolParameter(e,t=!1){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Bool,value:t}),this}triggerParameter(e){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Trigger,value:!1}),this}state(e,t){return this._states.push({name:e,options:t,transitions:[]}),this}transition(e,t,i){const n={to:t,options:i??{},conditions:[]};if(e==="*")this._anyStateTransitions.push(n);else{const o=this._states.find(r=>r.name===e);if(!o)throw new Error(`AnimatorControllerBuilder: source state "${e}" not found. Add it with .state() first.`);o.transitions.push(n)}return this._lastTransition=n,this}condition(e,t,i=0){if(!this._lastTransition)throw new Error("AnimatorControllerBuilder: .condition() must be called after .transition()");return this._lastTransition.conditions.push({parameter:e,mode:t,threshold:i}),this}defaultState(e){return this._defaultStateName=e,this}build(){const e=new Map;this._states.forEach((r,a)=>e.set(r.name,a));let t=0;if(this._defaultStateName!==null){const r=e.get(this._defaultStateName);if(r===void 0)throw new Error(`AnimatorControllerBuilder: default state "${this._defaultStateName}" not found`);t=r}const i=r=>{const a=e.get(r.to);if(a===void 0)throw new Error(`AnimatorControllerBuilder: transition target "${r.to}" not found`);return{exitTime:r.options.exitTime??1,hasExitTime:r.options.hasExitTime??!1,duration:r.options.duration??0,offset:r.options.offset??0,hasFixedDuration:r.options.hasFixedDuration??!1,destinationState:a,conditions:r.conditions.map(l=>({parameter:l.parameter,mode:hO(l.mode),threshold:l.threshold}))}},n=this._states.map((r,a)=>{const l=r.transitions.map(i);for(const h of this._anyStateTransitions)e.get(h.to)!==a&&l.push(i(h));return{name:r.name,hash:a,motion:{name:r.options.clip.name,clip:r.options.clip,isLooping:r.options.loop??!1},transitions:l,behaviours:[],speed:r.options.speed,speedParameter:r.options.speedParameter,cycleOffset:r.options.cycleOffset,cycleOffsetParameter:r.options.cycleOffsetParameter}}),o={name:this._name,guid:new ct(Date.now()).generateUUID(),parameters:this._parameters,layers:[{name:"Base Layer",stateMachine:{defaultState:t,states:n}}]};return new bi(o)}}class bi{static createFromClips(e,t={looping:!1,autoTransition:!0,transitionDuration:0}){const i=[];for(let r=0;r<e.length;r++){const a=e[r],l=[];if(t.autoTransition!==!1){const d=t.transitionDuration??0,u=d/a.duration;let f=r;(t.autoTransition===void 0||t.autoTransition===!0)&&(f=(r+1)%e.length),l.push({exitTime:1-u,offset:0,duration:d,hasExitTime:!0,destinationState:f,conditions:[]})}const h={name:a.name,hash:r,motion:{name:a.name,clip:a,isLooping:t?.looping??!1},transitions:l,behaviours:[]};i.push(h)}const n={name:"AnimatorController",guid:new ct(Date.now()).generateUUID(),parameters:[],layers:[{name:"Base Layer",stateMachine:{defaultState:0,states:i}}]};return new bi(n)}static build(e){return new kg(e)}play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){if(t<0)t=0;else if(t>=this.model.layers.length){console.warn("invalid layer");return}const r=this.model.layers[t].stateMachine;for(const a of r.states)if(a.name===e||a.hash===e){Ze&&console.log("transition to ",a),this.transitionTo(a,n,i);return}console.warn("Could not find "+e+" to play")}reset(){this.setStartTransition()}setBool(e,t){const i=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(n=>n[i]===e).forEach(n=>n.value=t)}getBool(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??!1}setFloat(e,t){const i=typeof e=="string"?"name":"hash",n=this.model?.parameters?.filter(o=>o[i]===e);return n.forEach(o=>o.value=t),n?.length>0}getFloat(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??0}setInteger(e,t){const i=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(n=>n[i]===e).forEach(n=>n.value=t)}getInteger(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??0}setTrigger(e){Ze&&console.log("SET TRIGGER",e);const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(i=>i[t]===e).forEach(i=>i.value=!0)}resetTrigger(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(i=>i[t]===e).forEach(i=>i.value=!1)}getTrigger(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??!1}isInTransition(){return this._activeStates.length>1}setSpeed(e){this._speed=e}_speed=1;FindState(e){return this.findState(e)}findState(e){if(!e)return null;if(Array.isArray(this.model.layers)){for(const t of this.model.layers)for(const i of t.stateMachine.states)if(i.name===e||i.hash==e)return i}return null}getCurrentStateInfo(){if(!this._activeState)return null;const e=this._activeState.motion.action;if(!e)return null;const t=this._activeState.motion.clip.duration,i=t<=0?0:Math.abs(e.time/t);return new ql(this._activeState,i,t,this._speed)}get currentAction(){if(!this._activeState)return null;const e=this._activeState.motion.action;return e||null}normalizedStartOffset=0;animator;model;get context(){return this.animator?.context}get mixer(){return this._mixer}dispose(){if(this._mixer.stopAllAction(),this.animator){this._mixer.uncacheRoot(this.animator.gameObject);for(const e of this._activeStates)e.motion.clip&&this.mixer.uncacheAction(e.motion.clip,this.animator.gameObject)}this.context?.animations.unregisterAnimationMixer(this._mixer)}bind(e){e?this.animator!==e&&(this._mixer&&(this._mixer.stopAllAction(),this.context?.animations.unregisterAnimationMixer(this._mixer)),this.animator=e,this._mixer=new c.AnimationMixer(this.animator.gameObject),this.context?.animations.registerAnimationMixer(this._mixer),this.createActions(this.animator)):console.error("AnimatorController.bind: animator is null")}clone(){if(typeof this.model=="string")return console.warn("AnimatorController has not been resolved, can not create model from string",this.model),null;Ze&&console.warn("AnimatorController clone()",this.model);const e=$c(this.model,(i,n,o)=>o==null?!0:!(o.type==="Object3D"||o.isObject3D===!0||Uv(o)||o.tracks!==void 0||o instanceof bi));return console.assert(e!==this.model),new bi(e)}update(e){if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates(e);const t=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&this.rootMotionHandler?.onBeforeUpdate(e),this._mixer.update(t),this.animator.applyRootMotion&&this.rootMotionHandler?.onAfterUpdate(e)}_mixer;_activeState;get activeState(){return this._activeState}constructor(e){this.model=e,Ze&&console.log(this)}_activeStates=[];updateActiveStates(e){for(let t=0;t<this._activeStates.length;t++){const i=this._activeStates[t],n=i.motion;if(!n.action)this._activeStates.splice(t,1),t--;else{const o=n.action;o.weight=e,o.getEffectiveWeight()<=0&&!o.isRunning()&&(Ze&&console.debug("REMOVE",i.name,o.getEffectiveWeight(),o.isRunning(),o.isScheduled()),this._activeStates.splice(t,1),t--)}}}setStartTransition(){this.model.layers.length>1&&(Ze||A())&&console.warn("Multiple layers are not supported yet "+this.animator?.name);for(const e of this.model.layers){const t=e.stateMachine;t.defaultState===void 0&&(Ze&&console.warn("AnimatorController default state is undefined, will assign state 0 as default",e),t.defaultState=0);const i=t.states[t.defaultState];this.transitionTo(i,0,this.normalizedStartOffset);break}}evaluateTransitions(){let e=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;e=!0}const t=this._activeState,i=t.motion.action;for(const o of t.transitions){if(!o.hasExitTime&&o.conditions.length<=0)continue;let r=!0;for(const a of o.conditions)if(!this.evaluateCondition(a)){r=!1;break}if(r)if(i){const a=t.motion.clip.duration,l=a<=0?1:Math.abs(i.time/a);let h=o.exitTime;i.timeScale<0&&(h=1-h);let d=!1;if(o.hasExitTime?i.timeScale>0?d=l>=o.exitTime:i.timeScale<0&&(d=1-l>=o.exitTime):d=!0,d){for(const u of o.conditions){const f=this.model.parameters.find(m=>m.name===u.parameter);f?.type===Zo.Trigger&&f.value&&(f.value=!1)}if(i.clampWhenFinished=!0,Ze){const u=this.getState(o.destinationState,0);console.log(`Transition to ${o.destinationState} / ${u?.name}`,o,`
890
+ Target Framerate: `+this.targetFrameRate)}}this._dispatchReadyAfterFrame&&(this._dispatchReadyAfterFrame=!1,this.domElement.dispatchEvent(new CustomEvent("ready")),ae.dispatchCallback(le.ContextFirstFrameRendered,this))}_tempClearColor=new c.Color;_tempClearColor2=new c.Color;renderNow(e){if(!e&&(e=this.mainCamera,!e))return!1;if(this.handleRendererContextLost(),this._isRendering=!0,this.renderRequiredTextures(),this.renderer.toneMapping!==c.NoToneMapping&&V0(),this.postprocessing.update(),this.composer&&!this.isInXR){e&&"setMainCamera"in this.composer&&this.composer.passes[0]?.mainCamera!=e&&this.composer.setMainCamera(e);const t=this.renderer.getClearColor(this._tempClearColor),i=this.renderer.getClearAlpha();this._tempClearColor2.copy(t),this.renderer.setClearColor(t.convertSRGBToLinear(),this.renderer.getClearAlpha()),this.composer.render(this.time.deltaTime),this.renderer.setClearColor(this._tempClearColor2,i)}else e&&(this.isInXR&&exports.DeviceUtilities.isMacOS()&&this.renderer.clearDepth(),this.renderer.render(this.scene,e));return this._isRendering=!1,!0}_contextRestoreTries=0;handleRendererContextLost(){this.time.frame%10&&this.renderer.getContext().isContextLost()&&this._contextRestoreTries++<100&&(console.warn("Attempting to recover WebGL context..."),this.renderer.forceContextRestore())}_wasPaused=!1;onHandlePaused(){const e=this.evaluatePaused();if(this._wasPaused!==e){BP&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){const i=this.scripts_pausedChanged[t];i.activeAndEnabled&&i.onPausedChanged!==void 0&&(U.Current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new c.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){const i=new c.DepthTexture(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new c.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=c.NearestFilter,this._renderTarget.texture.magFilter=c.NearestFilter,this._renderTarget.texture.format=c.RGBAFormat)}const e=this._renderTarget;e.texture&&(e.texture.colorSpace=this.renderer.outputColorSpace);const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){const i=this.coroutines[e];for(let n=0;n<i.length;n++)try{const o=i[n];if(!o.comp||o.comp.destroyed||!o.main||o.comp.enabled===!1){UP&&console.log("Removing coroutine",o.comp,o.comp.enabled),i.splice(n,1),--n;continue}const a=o.chained;if(a&&a.length>0){const u=a[a.length-1].next();if(u.done&&a.pop(),t(u)&&(o.chained||(o.chained=[]),o.chained.push(u.value)),!u.done)continue}const l=o.main.next();if(l.done===!0){i.splice(n,1),--n;continue}const h=l.value;if(t(h)){if(h.next().done)continue;o.chained||(o.chained=[]),o.chained.push(h)}else if(h instanceof Promise){const d=h;o.chained||(o.chained=[]);const u=v0(d);o.chained?.push(u);continue}}catch(o){console.error(o)}}function t(i){return!!(i&&i.next&&i.return)}}}const Zf=x("debugwebxr");class iw{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Zf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Zf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(Zf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new K("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}const Mt=new c.Vector3,J_=new c.Vector3,eb=new c.Quaternion,VP=x("debuggizmos"),sn=8947848,Jf=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[cm]!==void 0}static setVisible(e){for(const t of Di.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=sn);const l=H.active?.rigScale??1,h=Di.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),Mt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,an(r.material,i)}static DrawDirection(e,t,i=sn,n=0,o=!0,r=1){if(!B.enabled)return;const a=Di.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(Mt.set(0,0,-r),eb.set(t.x,t.y,t.z,t.w),Mt.applyQuaternion(eb)):(Mt.set(t.x,t.y,t.z),Mt.multiplyScalar(r)),l.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,an(a.material,i)}static DrawLine(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,an(r.material,i)}static DrawCircle(e,t,i,n=sn,o=0,r=!0){if(!B.enabled)return;const a=Di.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,Mt.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,an(a.material,n)}static DrawWireSphere(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getSphere(t,n,!0);ur(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,an(r.material,i)}static DrawSphere(e,t,i=sn,n=0,o=!0){if(!B.enabled)return;const r=Di.getSphere(t,n,!1);ur(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,an(r.material,i)}static DrawWireBox(e,t,i=sn,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Di.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,an(a.material,i)}static DrawWireBox3(e,t=sn,i=0,n=!0){if(!B.enabled)return;const o=Di.getBox(i);o.position.copy(e.getCenter(Mt)),o.scale.copy(e.getSize(Mt)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,an(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=sn,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Di.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),Mt.set(t.x,t.y,t.z).sub(J_.set(e.x,e.y,e.z)).normalize());const h=Mt.set(t.x,t.y,t.z).sub(J_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,an(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Di.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,an(t.material,e.color??sn)}}const $P=new c.BoxGeometry(1,1,1);function wg(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry($P);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function an(s,e){if(Array.isArray(s)){for(const i of s)an(i,e);return}const t=e instanceof te?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const cm=Symbol("GizmoCache");class Di{static familyName="needle-gizmos";static ensureFont(){let e=ne.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ne.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ne.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),VP&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new ne.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(U.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(U.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(Jf*3),3),t.geometry.setAttribute("position",i);const n=F(0,1,0),o=F(0,0,1),r=F(o);r.cross(n).normalize();const a=F(r),l=Math.PI*2/(Jf-1);for(let h=0;h<Jf+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(U.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(U.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(U.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[cm]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(U.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,ne.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ne.__webpack_exports__default.MeshUIBaseElement){if(fr(n))continue;const o=e.isInVR,r=!1,a=!o;Gc(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),fr(r)!=!0&&r[cm].push(r))}}}const Vt=x("debugphysics"),WP=x("debugworker"),tb=new c.Layers;class wo{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){tb.set(e),this.layerMask=tb}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class xg{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class ja{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new wo;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){Vt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return Vt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),Vt&&console.time("raycast"),o.length=0,ja._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),ja._raycasting--,Vt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&ib(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof X.GroundedSkybox&&(u=!1),d==="lod"){const f=re.getRaycastMesh(o);f&&(a.geometry=f)}if(!u&&HP(a,e,i)||(n.useAcceleratedRaycast!==!1?nu.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,Vt&&i.length!=h){const f=i[i.length-1];B.DrawWireSphere(f.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof X.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const f=l(e);if(f===!1)return;f==="continue in children"&&(h=!1)}if(u&&ib(u)||(h=!1),h){if(a){const f=this.sphere;f.center.copy(t),f.radius=i;const m=o.length;if(nu.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const f=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(f)){const g=Y(e),b=g.distanceTo(m.center),y=new xg(e,b,g);if(o.push(y),!r)return}}}if(e.children)for(const f of e.children){const m=o.length;if(this.intersectSphere(f,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function ib(s){return!(s.index&&s.index.array.length<3)}const Fo=new c.Sphere,Yh=new c.Plane,GP=new c.Matrix3;function HP(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof X.GroundedSkybox){Yh.setFromNormalAndCoplanarPoint(F(0,1,0),F(0,-l.position.y,0)),Yh.applyMatrix4(l.matrixWorld,GP);const u=o.ray.intersectPlane(Yh,F());if(u){Fo.copy(h),Fo.applyMatrix4(l.matrixWorld);const m=F(u).sub(o.ray.origin).length(),g=Fo.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:Yh.normal.clone()})}return}Fo.copy(h),Fo.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Fo,F());if(d){const u=F(d).sub(o.ray.origin),f=u.length();if(f>Fo.radius){const m=u.clone().normalize();r.push({distance:f,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var nu;(s=>{let e=0;function t(v,w,k,O,M){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const L=w,j=L.bvhNeedsUpdate;if(!L.staticGenerator)l(),r&&(L.staticGenerator=new r(w),L.staticGenerator.applyWorldTransforms=!1,L.staticGeometry=L.staticGenerator.generate(),D.boundsTree=a?.call(L.staticGeometry),L.staticGeometryLastUpdate=performance.now()+Math.random()*200,L.bvhNeedsUpdate=!0);else if(D.boundsTree&&(L.autoUpdateMeshBvhInterval!==void 0&&L.autoUpdateMeshBvhInterval>=0||j===!0)){const V=performance.now(),W=V-L.staticGeometryLastUpdate,E=L.autoUpdateMeshBvhInterval??100;(j||W>E)&&(Vt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),L.bvhNeedsUpdate=!1,L.staticGeometryLastUpdate=V,L.staticGenerator?.generate(L.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||_();let L=!0;if((O.xr||D[g]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(L=!1),L&&f){if(D[m]===void 0){let j=null;if(y.length>0){const V=y.shift();V&&!V.running&&(j=V)}if(!j&&b.length<3)try{WP&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-Cb806egV.umd.cjs",document.baseURI).href),j=new f,b.push(j)}catch(V){V instanceof DOMException&&V.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug(V),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(V)),e++}if(j!=null&&!j.running){const V=w.name;Vt&&console.log("<<<< worker start",V,j),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{j.generate(W).then(E=>{D[m]="done",D.boundsTree=E}).catch(E=>{D[m]="failed - "+E?.message,D[g]=!1,Vt&&console.error("Failed to generate mesh bvh on worker",E)}).finally(()=>{Vt&&console.log(">>>>> worker done",V,{hasBoundsTre:D.boundsTree!=null}),y.push(j),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(E){console.error("Failed to generate mesh bvh on worker",E)}}else Vt&&console.warn("No worker available")}}else(!u||!L)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(v instanceof c.Raycaster){const L=v,j=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),Vt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(Vt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return Vt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const V=L.firstHitOnly;return L.firstHitOnly=!1,L.intersectObject(w,!1,k),L.firstHitOnly=V,w.raycast=j,!0}else if(v instanceof c.Sphere){const L=D.boundsTree;if(L){const j=v;if(h.copy(w.matrixWorld).invert(),j.applyMatrix4(h),L.intersectsSphere(j)){const W=Y(w),E=W.distanceTo(j.center),N=new xg(w,E,W);k.push(N)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-DkMW3WY4.umd.cjs")).then(v=>v.index$1).then(v=>{n=v.acceleratedRaycast,o=v.MeshBVH,r=v.StaticGeometryGenerator,a=v.computeBoundsTree}).catch(v=>{(Vt||A())&&console.error("Failed to load BVH library...",v.message)}))}const h=new c.Matrix4;let d=!1,u=!1,f=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),b=[],y=[];function _(){d=!0,u=!0,Promise.resolve().then(()=>aD).then(v=>{f=v.GenerateMeshBVHWorker}).catch(v=>{Vt||A()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",v)}).finally(()=>{u=!1})}})(nu||(nu={}));const nb=Symbol("gltf-loader-internal-usage-tracker"),qP=x("debugusers");class Sa{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return Sa._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){Sa._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[nb]=e._loadingId),r)),o},null}afterRoot(e){Sa._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[nb],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{qP&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class nw{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
891
+ `+i.src),e.preventDefault())}})}}const Du=x("trackresources");function sw(){return Du==="dispose"}let vr=!0;Du===0&&(vr=!1);function XP(s){vr=s}function ow(){return vr}const rw=Symbol("disposable");function aw(s,e){s&&(s[rw]=e,rr&&console.warn("Set disposable",e,s))}const lw=Symbol("disposed");function QP(s){return s[lw]===!0}function we(s){if(s){if(s[rw]===!1){rr&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[lw]=!0),s instanceof c.Scene)we(s.environment),we(s.background),we(s.customDepthMaterial),we(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)we(s.geometry),we(s.material),we(s.skeleton),we(s.bindMatrix),we(s.bindMatrixInverse),we(s.customDepthMaterial),we(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)we(s.geometry),we(s.material),we(s.customDepthMaterial),we(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){Hr(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];we(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)rr&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&we(e);else if(s instanceof c.Material){Hr(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&we(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?we(i):i instanceof c.Uniform$1&&we(i.value)}}else s instanceof c.Texture?(Hr(s),Hr(s.source),s.source?.data instanceof ImageBitmap&&Hr(s.source.data)):s instanceof c.Skeleton?(Hr(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&rr&&console.warn("Unknown object type",s)}}function Hr(s){s&&((rr||sw()||Du)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function YP(s){}const KP=new Set;function Sg(s,e,t=null,i){if(i||(i=KP,i.clear()),!s)return i;const n=s[kc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&Sg(o,!0,t,i));return i}function ZP(s){return s[Gl]}const rr=x("debugresourceusers")||x("debugmemory"),kc=Symbol("needle-resource-users"),Gl=Symbol("needle-resource-users-count");function Ft(s,e){wu(s,e,function(t,i){vr&&!ja.raycasting&&(su(kc,this,t,!1),su(kc,this,i,!0))})}vr&&(Ft(c.Mesh.prototype,"material"),Ft(c.Mesh.prototype,"geometry"),Ft(c.Material.prototype,"map"),Ft(c.Material.prototype,"bumpMap"),Ft(c.Material.prototype,"alphaMap"),Ft(c.Material.prototype,"normalMap"),Ft(c.Material.prototype,"displacementMap"),Ft(c.Material.prototype,"roughnessMap"),Ft(c.Material.prototype,"metalnessMap"),Ft(c.Material.prototype,"emissiveMap"),Ft(c.Material.prototype,"specularMap"),Ft(c.Material.prototype,"envMap"),Ft(c.Material.prototype,"lightMap"),Ft(c.Material.prototype,"aoMap"),Ft(c.Material.prototype,"gradientMap"));function JP(s){if(vr===!1)return;const e=s[kc];if(e)for(const t of e)su(kc,t,s,!1)}vr&&wu(c.Material.prototype,"dispose",function(){JP(this)});let hm=0;function su(s,e,t,i){if(hm>0)return;if(Array.isArray(t)){for(const o of t)su(s,e,o,i);return}if(!t)return;let n=t[s];if(n||(n=new Set),i){if(e&&!n.has(e)){n.add(e);let o=t[Gl]||0;o+=1,t[Gl]=o,rr&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[Gl]||0;o>0&&(o-=1,t[Gl]=o),rr&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(Sa.isLoading(t)||(Du&&console.warn(`🔴 Removed all user of "${t.type}"`,t),sw()&&we(t)))}t[s]=n}try{wu(c.WebGLRenderer.prototype,"render",function(){hm++},function(){hm--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const Ec=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),cw=Symbol("isUsingInstancing"),hw=Symbol("instancingRenderer"),Hl=Symbol("instancingAutoUpdateBounds");class $i{static isUsingInstancing(e){return e[cw]===!0}static getRenderer(e){return e[hw]||null}setAutoUpdateBounds(e,t){const i=$i.getRenderer(e);i&&(i[Hl]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[Ec]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)$i.markDirty(i,!0)}}const Md=x("debuggetcomponent"),ar=x("debuginstantiate");class yn{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context;components;clone(){const e=new yn;return e.idProvider=this.idProvider,e.parent=this.parent,e.keepWorldPosition=this.keepWorldPosition,e.position=Array.isArray(this.position)?[...this.position]:this.position?.clone(),e.rotation=Array.isArray(this.rotation)?[...this.rotation]:this.rotation?.clone(),e.scale=Array.isArray(this.scale)?[...this.scale]:this.scale?.clone(),e.visible=this.visible,e.context=this.context,e.components=this.components,e}cloneAssign(e){this.idProvider=e.idProvider,this.parent=e.parent,this.keepWorldPosition=e.keepWorldPosition,this.position=Array.isArray(e.position)?[...e.position]:e.position?.clone(),this.rotation=Array.isArray(e.rotation)?[...e.rotation]:e.rotation?.clone(),this.scale=Array.isArray(e.scale)?[...e.scale]:e.scale?.clone(),this.visible=e.visible,this.context=e.context,this.components=e.components}}function Xa(s){return s.visible}function hc(s,e){return typeof e=="number"&&(e=e>.5),s.visible=e,s.visible}function dw(s){return s[Fn]||Lu(s)}function uw(s,e){s[cw]=e}function Lu(s){return $i.isUsingInstancing(s)}function Cg(s,e){return ka(s,e,!0,!0)}const fw=Symbol("isDestroyed");function fr(s){return s[fw]}function pw(s,e){s[fw]=e}const dm=Symbol("isDontDestroy");function ia(s,e=!0){s[dm]=e}const kd=[],Ed=[];function xi(s,e=!0,t=!1){kd.length=0,Ed.length=0,um(s,e,!0);for(const i of kd)i.gameObject=null,i.context=null;for(const i of Ed)pw(i,!0),t&&we(i);Ed.length=0,kd.length=0}function um(s,e=!0,t=!0){if(s==null)return;const i=s;if(i.isComponent){if(i[dm])return;kd.push(i);const r=i.gameObject;i.__internalDisable(),i.__internalDestroy(),i.gameObject=r;return}if(s[dm])return;const n=s;Md&&console.log(n),Ed.push(n);const o=n.userData?.components;if(o!=null&&Array.isArray(o)){let r=o.length;for(let a=0;a<o.length;a++){const l=o[a];um(l,e,!1),o.length<r&&(r=o.length,a--)}}if(e&&n.children)for(const r of n.children)um(r,e,!1);t&&n.removeFromParent()}function pr(s,e,t=!0){return mw(s,e,t)}function*Pg(s,e,t=!1,i=999,n=0){if(s?.userData.components&&!(n>i)){for(const o of s.userData.components)e&&o?.isComponent===!0&&o instanceof e?yield o:yield o;if(t===!0)for(const o of s.children)yield*Pg(o,e,!0,i,n+1)}}function mw(s,e,t,i=0){if(s){if(s.isObject3D,i>1e3){console.warn("Failed to iterate components: too many levels");return}if(s.userData?.components)for(let n=0;n<s.userData.components.length;n++){const o=s.userData.components[n];if(o?.isComponent===!0){const r=e(o);if(r!==void 0)return r}}if(t&&s.children){const n=i+1;for(let o=0;o<s.children.length;o++){const r=s.children[o];if(!r)continue;const a=mw(r,e,t,n);if(a!==void 0)return a}}}}function uo(s,e){if("isAssetReference"in s)return s.instantiate(e??void 0);let t=null;e!=null&&(e.x!==void 0?(t=new yn,t.position=e):t=e);let i=U.Current;t?.context&&(i=t.context),Md&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new ct(Date.now()));const n=[],o={},r={},a=gw(i,s,t,n,o,r);a&&(iO(a,o),tO(r,o)),Md&&(qd(s,!0),qd(a,!0));const l={};if(t?.components!==!1){for(const h in n){const d=n[h],u=d.guid;t&&t.idProvider&&(d.guid=t.idProvider.generateUUID(),l[u]=d.guid,Md&&console.log(d.name,d.guid)),Au(d,i),d.__internalNewInstanceCreated&&d.__internalNewInstanceCreated()}for(const h in n){const d=n[h];d.resolveGuids&&d.resolveGuids(l),d.enabled!==!1&&(d.enabled=!0)}Yd(i)}return a}function gw(s,e,t,i,n,o){if(!e||e[gi])return null;const r=e.userData;e.userData={};const a=e.children;e.children=[];const l=e.clone(!1);if(ku(l),e.userData=r,e.children=a,n[e.uuid]={original:e,clone:l},ar&&console.log("ADD",e,l),e.type==="SkinnedMesh"&&(o[e.uuid]={original:e,clone:l}),t?.visible!==void 0&&(l.visible=t.visible),t?.idProvider){l.uuid=t.idProvider.generateUUID();const d=l;d&&(d.guid=l.uuid)}e.animations&&e.animations.length>0&&(l.animations=[...e.animations]);const h=e.parent;if(h&&h.add(l),t?.position)if(Array.isArray(t.position)){const d=new c.Vector3;d.fromArray(t.position),l.worldPosition=d}else l.worldPosition=t.position;else l.position.copy(e.position);if(t?.rotation){if(t.rotation instanceof c.Quaternion)l.worldQuaternion=t.rotation;else if(t.rotation instanceof c.Euler)l.worldQuaternion=ti().setFromEuler(t.rotation);else if(Array.isArray(t.rotation)){const d=new c.Euler;d.fromArray(t.rotation),l.worldQuaternion=ti().setFromEuler(d)}}else l.quaternion.copy(e.quaternion);if(t?.scale)if(Array.isArray(t.scale)){const d=new c.Vector3;d.fromArray(t.scale),t.scale=d}else l.scale.copy(t.scale);else l.scale.copy(e.scale);if(t?.parent&&t.parent!=="scene"){let d=null;if(typeof t.parent=="string"?d=ka(t.parent,s.scene,!0):d=t.parent,d){const u=t.keepWorldPosition===!0?d.attach:d.add;u?u.call(d,l):console.error("Invalid parent object",d,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(const[d,u]of Object.entries(e.userData))d!=="components"&&(l.userData[d]=u);if(e.userData?.components){const d=e.userData.components,u=[];l.userData.components=u;for(let f=0;f<d.length;f++){const m=d[f],g=new m.constructor;eO(m,g),m[sc]!==void 0&&(g[sc]=m[sc]),u.push(g),g.gameObject=l,i.push(g),n[m.guid]={original:m,clone:g},Mu.dispatchComponentLifecycleEvent("component-added",g)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0,t.visible=void 0);for(const d in e.children){const u=e.children[d],f=gw(s,u,t,i,n,o);f&&(n[f.uuid]={original:u,clone:f},l.add(f))}return l}function eO(s,e,t){Ta(e,s,void 0,{})}function tO(s,e){for(const t in s){const i=s[t],n=i.original,o=n.skeleton,r=i.clone;if(!o){console.warn("Skinned mesh has no skeleton?",i);continue}const a=o.bones,l=r.skeleton.clone();r.skeleton=l,r.bindMatrix.clone().copy(n.bindMatrix),r.bindMatrixInverse.copy(n.bindMatrixInverse);const h=[];l.bones=h;for(let d=0;d<a.length;d++){const u=a[d],m=e[u.uuid].clone;h.push(m)}}for(const t in s){const i=s[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function iO(s,e){for(const t in e){const n=e[t].clone;if(n?.isObject3D&&n?.userData?.components)for(let o=0;o<n.userData.components.length;o++){const r=n.userData.components[o],a=Object.entries(r);for(const[l,h]of a)if(Array.isArray(h)){const d=[];r[l]=d;for(let u=0;u<h.length;u++){const f=h[u];if(typeof f!="object"){d.push(f);continue}const m=sb(r,l,f,e);m!==void 0?(ar&&console.log("Found new instance for",l,f,"->",m),d.push(m)):(ar&&console.warn("Could not find new instance for",l,f),d.push(f))}}else if(typeof h=="object"){const d=sb(r,l,h,e);d!==void 0?r[l]=d:ar&&console.warn("Could not find new instance for",l,h)}}}}function sb(s,e,t,i){if(t!=null)if(t.isComponent===!0){const n=t.gameObject;if(n){const o=n.uuid,r=i[o]?.clone;if(!r){ar&&console.log("reference did not change",e,s,t);return}const a=n.userData.components.indexOf(t);if(a>=0&&r.isObject3D)return ar&&console.log(e,o),r.userData.components[a];console.warn("could not find component",e,t)}}else if(t.isObject3D===!0){if(e==="gameObject")return;const n=t;if(n){const o=n.uuid,r=i[o]?.clone;if(r)return ar&&console.log(e,"old",t,"new",r),r}}else{if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone();if(t.isColor===!0)return t.clone();if(t.isEventList===!0)return t.__internalOnInstantiate(i)}}const Ml={},Ba={register(s,e){Ml[s]=e},unregister(s){delete Ml[s]},list(){return Object.keys(Ml)},has(s){return s in Ml},async resolve(s){const e=Ml[s];return e?e(s):null}};ae.registerCallback(le.ContextCreated,s=>{const e=s.context;xw(e),_w(e)});const ou=x("debugcomponents"),ob="eff8ba80-635d-11ec-90d6-0242ac120003";class ct{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(e){typeof e=="string"&&(e=ct.hash(e)),this._originalSeed=e,this._seed=e}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e=="string")return de.v5(e,ob);const t=this._seed;return this._seed-=1,de.v5(t.toString(),ob)}initialize(e){typeof e=="string"?this._seed=ct.hash(e):this._seed=e}static createFromString(e){return new ct(this.hash(e))}static hash(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}}var yw=(s=>(s.NewInstanceCreated="new-instance-created",s.InstanceDestroyed="instance-destroyed",s))(yw||{});class nO{guid;dontSave;constructor(e){this.guid=e}}function Jc(s,e,t=!0,i){if(!s)return;const n=s;if(xi(s,t),!e){console.warn("Can not send destroy: No networking connection provided",s.guid);return}if(!e.isConnected){A()&&console.debug("Can not send destroy: not connected",s.guid);return}let o=s.guid;if(!o&&n.uuid&&(o=n.uuid),!o){console.warn("Can not send destroy: failed to find guid",s);return}Og(o,e,i)}function Og(s,e,t){const i=new nO(s);t?.saveInRoom===!1&&(i.dontSave=!0),e.send("instance-destroyed",i,cn.Queued)}const Rd=[];function sO(s){return Rd.push(s),()=>{const e=Rd.indexOf(s);e>=0&&Rd.splice(e,1)}}function _w(s){s.connection.beginListen("instance-destroyed",e=>{ou&&console.log("[Remote] Destroyed",s.scene,e);const t=Cg(e.guid,s.scene);if(t){for(const i of Rd)try{i(e.guid,t)}catch(n){console.error("Error in onSyncDestroy callback",n)}xi(t)}})}class oO{filename;hash;size;constructor(e,t,i){this.filename=e,this.hash=t,this.size=i}}class bw{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;preventCreation=void 0;deleteStateOnDisconnect;constructor(e,t){this.originalGuid=e,this.guid=t}}const Td=[];function vw(s){return Td.push(s),()=>{const e=Td.indexOf(s);e>=0&&Td.splice(e,1)}}function Mg(s,e,t,i){const n=s;if(!n.guid)if(n.name)n.guid=n.name;else return console.error("[syncInstantiate] Can not instantiate: a 'guid' is required. For runtime-created objects, either set a name (`obj.name = 'my-prefab'`) or a guid (`obj.guid = 'my-prefab-id'`). The identifier must be the same on all clients.",n),null;if(Ba.has(n.guid)||Ba.register(n.guid,async()=>n),e.context||(e.context=U.Current),!e.context)return console.error("[syncInstantiate] Missing network instantiate options / reference to network connection in sync instantiate. Please pass in the Needle Engine context."),null;const o=e?{...e}:null,{instance:r,seed:a}=rO(n,e);if(r){const l=r;if(l.guid){ou&&console.log("[Local] new instance","gameobject:",r?.guid);const h=new bw(n.guid,l.guid);h.seed=a,e.deleteOnDisconnect===!0&&(h.deleteStateOnDisconnect=!0),o&&(o.position&&(Array.isArray(o.position)?h.position={x:o.position[0],y:o.position[1],z:o.position[2]}:h.position={x:o.position.x,y:o.position.y,z:o.position.z}),o.rotation&&(o.rotation instanceof c.Euler?o.rotation=new c.Quaternion().setFromEuler(o.rotation):o.rotation instanceof Array&&(o.rotation=new c.Quaternion().fromArray(o.rotation)),h.rotation={x:o.rotation.x,y:o.rotation.y,z:o.rotation.z,w:o.rotation.w}),o.scale&&(Array.isArray(o.scale)?h.scale={x:o.scale[0],y:o.scale[1],z:o.scale[2]}:h.scale={x:o.scale.x,y:o.scale.y,z:o.scale.z})),h.position||(h.position={x:l.position.x,y:l.position.y,z:l.position.z}),h.rotation||(h.rotation={x:l.quaternion.x,y:l.quaternion.y,z:l.quaternion.z,w:l.quaternion.w}),h.scale||(h.scale={x:l.scale.x,y:l.scale.y,z:l.scale.z}),h.visible=n.visible,o?.parent&&(typeof o.parent=="string"?h.parent=o.parent:o.parent?.guid?h.parent=o.parent.guid:o.parent instanceof c.Scene?h.parent="scene":console.warn("Unsupported parent type in sync instantiate options: "+o.parent?.name)),h.hostData=t,i===!1&&(h.dontSave=!0),!e?.context?.connection&&A()&&console.debug("Object will be instantiated but it will not be synced: not connected",n.guid),e.context.connection.isInRoom&&na.push(new WeakRef(l)),e?.context?.connection.send("new-instance-created",h)}else console.warn("Missing guid, can not send new instance event",l)}return r}function ww(){return Math.random()*9999999}const na=new Array;function xw(s){const e=s.connection.beginListen("new-instance-created",async i=>{const n=await lO(i.originalGuid,s.scene);if(i.preventCreation===!0)return;if(!n){console.warn("could not find object that was instantiated: "+i.guid);return}const o=new yn;i.position&&(o.position=new c.Vector3(i.position.x,i.position.y,i.position.z)),i.rotation&&(o.rotation=new c.Quaternion(i.rotation.x,i.rotation.y,i.rotation.z,i.rotation.w)),i.scale&&(o.scale=new c.Vector3(i.scale.x,i.scale.y,i.scale.z)),o.parent=i.parent,i.seed&&(o.idProvider=new ct(i.seed)),o.visible=i.visible,o.context=s,ou&&s.alias&&console.log("[Remote] instantiate in: "+s.alias);const r=uo(n,o);if(na.push(new WeakRef(r)),r){i.parent==="scene"&&s.scene.add(r),ou&&console.log("[Remote] new instance","gameobject:",r?.guid,n);for(const a of Td)try{a(r,i,s)}catch(l){console.error("Error in onSyncInstantiate callback",l)}}}),t=s.connection.beginListen("left-room",()=>{na.length>0&&console.debug(`Left networking room, cleaning up ${na.length} instantiated objects`);for(const i of na){const n=i.deref();n&&n.destroy()}na.length=0});return()=>{s.connection.stopListen("new-instance-created",e),s.connection.stopListen("left-room",t)}}function rO(s,e){const t=ww(),i=e??new yn;i.idProvider=new ct(t);const n=uo(s,i);return{seed:t,instance:n}}function Sw(s,e){Ba.register(s,e)}function aO(s){Ba.unregister(s)}async function lO(s,e){const t=await Ba.resolve(s);return t||Cw(s,e)}function Cw(s,e){if(e===null||!s)return null;if(e.guid===s)return e;if(e.children)for(const t of e.children){const i=Cw(s,t);if(i)return i}return null}class cO{_context;get context(){return this._context??U.Current}get isStateMachineBehaviour(){return!0}}class ql{name;nameHash;normalizedTime;length;speed;action;hasTransitions;constructor(e,t,i,n){this.name=e.name,this.nameHash=e.hash,this.normalizedTime=t,this.length=i,this.speed=n,this.action=e.motion.action||null,this.hasTransitions=e.transitions?.length>0||!1}}function Pw(s,e){return{name:"Empty",isLooping:!1,guid:e?.generateUUID()??c.MathUtils.generateUUID(),index:-1,clip:new c.AnimationClip(s,0,[])}}var ni=(s=>(s[s.If=1]="If",s[s.IfNot=2]="IfNot",s[s.Greater=3]="Greater",s[s.Less=4]="Less",s[s.Equals=6]="Equals",s[s.NotEqual=7]="NotEqual",s))(ni||{}),Zo=(s=>(s[s.Float=1]="Float",s[s.Int=3]="Int",s[s.Bool=4]="Bool",s[s.Trigger=9]="Trigger",s))(Zo||{});const Ze=x("debuganimatorcontroller"),Kh=x("debugrootmotion");function hO(s){switch(s){case"if":return ni.If;case"ifNot":return ni.IfNot;case"greater":return ni.Greater;case"less":return ni.Less;case"equals":return ni.Equals;case"notEqual":return ni.NotEqual}}class kg{_name;_parameters=[];_states=[];_anyStateTransitions=[];_defaultStateName=null;_lastTransition=null;constructor(e){this._name=e??"AnimatorController"}floatParameter(e,t=0){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Float,value:t}),this}intParameter(e,t=0){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Int,value:t}),this}boolParameter(e,t=!1){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Bool,value:t}),this}triggerParameter(e){return this._parameters.push({name:e,hash:this._parameters.length,type:Zo.Trigger,value:!1}),this}state(e,t){return this._states.push({name:e,options:t,transitions:[]}),this}transition(e,t,i){const n={to:t,options:i??{},conditions:[]};if(e==="*")this._anyStateTransitions.push(n);else{const o=this._states.find(r=>r.name===e);if(!o)throw new Error(`AnimatorControllerBuilder: source state "${e}" not found. Add it with .state() first.`);o.transitions.push(n)}return this._lastTransition=n,this}condition(e,t,i=0){if(!this._lastTransition)throw new Error("AnimatorControllerBuilder: .condition() must be called after .transition()");return this._lastTransition.conditions.push({parameter:e,mode:t,threshold:i}),this}defaultState(e){return this._defaultStateName=e,this}build(){const e=new Map;this._states.forEach((r,a)=>e.set(r.name,a));let t=0;if(this._defaultStateName!==null){const r=e.get(this._defaultStateName);if(r===void 0)throw new Error(`AnimatorControllerBuilder: default state "${this._defaultStateName}" not found`);t=r}const i=r=>{const a=e.get(r.to);if(a===void 0)throw new Error(`AnimatorControllerBuilder: transition target "${r.to}" not found`);return{exitTime:r.options.exitTime??1,hasExitTime:r.options.hasExitTime??!1,duration:r.options.duration??0,offset:r.options.offset??0,hasFixedDuration:r.options.hasFixedDuration??!1,destinationState:a,conditions:r.conditions.map(l=>({parameter:l.parameter,mode:hO(l.mode),threshold:l.threshold}))}},n=this._states.map((r,a)=>{const l=r.transitions.map(i);for(const h of this._anyStateTransitions)e.get(h.to)!==a&&l.push(i(h));return{name:r.name,hash:a,motion:{name:r.options.clip.name,clip:r.options.clip,isLooping:r.options.loop??!1},transitions:l,behaviours:[],speed:r.options.speed,speedParameter:r.options.speedParameter,cycleOffset:r.options.cycleOffset,cycleOffsetParameter:r.options.cycleOffsetParameter}}),o={name:this._name,guid:new ct(Date.now()).generateUUID(),parameters:this._parameters,layers:[{name:"Base Layer",stateMachine:{defaultState:t,states:n}}]};return new bi(o)}}class bi{static createFromClips(e,t={looping:!1,autoTransition:!0,transitionDuration:0}){const i=[];for(let r=0;r<e.length;r++){const a=e[r],l=[];if(t.autoTransition!==!1){const d=t.transitionDuration??0,u=d/a.duration;let f=r;(t.autoTransition===void 0||t.autoTransition===!0)&&(f=(r+1)%e.length),l.push({exitTime:1-u,offset:0,duration:d,hasExitTime:!0,destinationState:f,conditions:[]})}const h={name:a.name,hash:r,motion:{name:a.name,clip:a,isLooping:t?.looping??!1},transitions:l,behaviours:[]};i.push(h)}const n={name:"AnimatorController",guid:new ct(Date.now()).generateUUID(),parameters:[],layers:[{name:"Base Layer",stateMachine:{defaultState:0,states:i}}]};return new bi(n)}static build(e){return new kg(e)}play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){if(t<0)t=0;else if(t>=this.model.layers.length){console.warn("invalid layer");return}const r=this.model.layers[t].stateMachine;for(const a of r.states)if(a.name===e||a.hash===e){Ze&&console.log("transition to ",a),this.transitionTo(a,n,i);return}console.warn("Could not find "+e+" to play")}reset(){this.setStartTransition()}setBool(e,t){const i=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(n=>n[i]===e).forEach(n=>n.value=t)}getBool(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??!1}setFloat(e,t){const i=typeof e=="string"?"name":"hash",n=this.model?.parameters?.filter(o=>o[i]===e);return n.forEach(o=>o.value=t),n?.length>0}getFloat(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??0}setInteger(e,t){const i=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(n=>n[i]===e).forEach(n=>n.value=t)}getInteger(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??0}setTrigger(e){Ze&&console.log("SET TRIGGER",e);const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(i=>i[t]===e).forEach(i=>i.value=!0)}resetTrigger(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.filter(i=>i[t]===e).forEach(i=>i.value=!1)}getTrigger(e){const t=typeof e=="string"?"name":"hash";return this.model?.parameters?.find(i=>i[t]===e)?.value??!1}isInTransition(){return this._activeStates.length>1}setSpeed(e){this._speed=e}_speed=1;FindState(e){return this.findState(e)}findState(e){if(!e)return null;if(Array.isArray(this.model.layers)){for(const t of this.model.layers)for(const i of t.stateMachine.states)if(i.name===e||i.hash==e)return i}return null}getCurrentStateInfo(){if(!this._activeState)return null;const e=this._activeState.motion.action;if(!e)return null;const t=this._activeState.motion.clip.duration,i=t<=0?0:Math.abs(e.time/t);return new ql(this._activeState,i,t,this._speed)}get currentAction(){if(!this._activeState)return null;const e=this._activeState.motion.action;return e||null}normalizedStartOffset=0;animator;model;get context(){return this.animator?.context}get mixer(){return this._mixer}dispose(){if(this._mixer.stopAllAction(),this.animator){this._mixer.uncacheRoot(this.animator.gameObject);for(const e of this._activeStates)e.motion.clip&&this.mixer.uncacheAction(e.motion.clip,this.animator.gameObject)}this.context?.animations.unregisterAnimationMixer(this._mixer)}bind(e){e?this.animator!==e&&(this._mixer&&(this._mixer.stopAllAction(),this.context?.animations.unregisterAnimationMixer(this._mixer)),this.animator=e,this._mixer=new c.AnimationMixer(this.animator.gameObject),this.context?.animations.registerAnimationMixer(this._mixer),this.createActions(this.animator)):console.error("AnimatorController.bind: animator is null")}clone(){if(typeof this.model=="string")return console.warn("AnimatorController has not been resolved, can not create model from string",this.model),null;Ze&&console.warn("AnimatorController clone()",this.model);const e=$c(this.model,(i,n,o)=>o==null?!0:!(o.type==="Object3D"||o.isObject3D===!0||Uv(o)||o.tracks!==void 0||o instanceof bi));return console.assert(e!==this.model),new bi(e)}update(e){if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates(e);const t=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&this.rootMotionHandler?.onBeforeUpdate(e),this._mixer.update(t),this.animator.applyRootMotion&&this.rootMotionHandler?.onAfterUpdate(e)}_mixer;_activeState;get activeState(){return this._activeState}constructor(e){this.model=e,Ze&&console.log(this)}_activeStates=[];updateActiveStates(e){for(let t=0;t<this._activeStates.length;t++){const i=this._activeStates[t],n=i.motion;if(!n.action)this._activeStates.splice(t,1),t--;else{const o=n.action;o.weight=e,o.getEffectiveWeight()<=0&&!o.isRunning()&&(Ze&&console.debug("REMOVE",i.name,o.getEffectiveWeight(),o.isRunning(),o.isScheduled()),this._activeStates.splice(t,1),t--)}}}setStartTransition(){this.model.layers.length>1&&(Ze||A())&&console.warn("Multiple layers are not supported yet "+this.animator?.name);for(const e of this.model.layers){const t=e.stateMachine;t.defaultState===void 0&&(Ze&&console.warn("AnimatorController default state is undefined, will assign state 0 as default",e),t.defaultState=0);const i=t.states[t.defaultState];this.transitionTo(i,0,this.normalizedStartOffset);break}}evaluateTransitions(){let e=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;e=!0}const t=this._activeState,i=t.motion.action;for(const o of t.transitions){if(!o.hasExitTime&&o.conditions.length<=0)continue;let r=!0;for(const a of o.conditions)if(!this.evaluateCondition(a)){r=!1;break}if(r)if(i){const a=t.motion.clip.duration,l=a<=0?1:Math.abs(i.time/a);let h=o.exitTime;i.timeScale<0&&(h=1-h);let d=!1;if(o.hasExitTime?i.timeScale>0?d=l>=o.exitTime:i.timeScale<0&&(d=1-l>=o.exitTime):d=!0,d){for(const u of o.conditions){const f=this.model.parameters.find(m=>m.name===u.parameter);f?.type===Zo.Trigger&&f.value&&(f.value=!1)}if(i.clampWhenFinished=!0,Ze){const u=this.getState(o.destinationState,0);console.log(`Transition to ${o.destinationState} / ${u?.name}`,o,`
892
892
  Timescale: `+i.timeScale,`
893
893
  Normalized time: `+l.toFixed(3),`
894
894
  Exit Time: `+h,o.hasExitTime)}this.transitionTo(o.destinationState,o.duration,o.offset);return}}else{this.transitionTo(o.destinationState,o.duration,o.offset);return}}i&&this.setTimescale(i,t);let n=!1;if(t.motion.isLooping&&i&&(i.time>=i.getClip().duration?(n=!0,i.reset(),i.time=0,i.play()):i.time<=0&&i.timeScale<0&&(n=!0,i.reset(),i.time=i.getClip().duration,i.play())),!n&&t&&!e&&i&&this.animator&&t.behaviours){const o=i?.getClip().duration,r=i.time/o,a=new ql(this._activeState,r,o,this._speed);for(const l of t.behaviours)l.instance&&l.instance.onStateUpdate?.call(l.instance,this.animator,a,0)}}setTimescale(e,t){let i=t.speed??1;t.speedParameter&&(i*=this.getFloat(t.speedParameter)),i!==void 0&&(e.timeScale=i*this._speed)}getState(e,t){return typeof e=="number"&&(e==-1&&(e=this.model.layers[t].stateMachine.defaultState,e===void 0&&(Ze&&console.warn("AnimatorController default state is undefined: ",this.model,"Layer: "+t),e=0)),e=this.model.layers[t].stateMachine.states[e]),e}_heldActions=[];releaseHeldActions(e){for(const t of this._heldActions)t.fadeOut(e);this._heldActions.length=0}transitionTo(e,t,i){if(!this.animator)return;const n=0;if(e=this.getState(e,n),!e?.motion||!e.motion.clip||!(e.motion.clip instanceof c.AnimationClip))return;const o=this._activeState===e;if(o){const d=e.motion;if(!d.action_loopback&&d.clip){const u=this.rootMotionHandler?this.animator.gameObject.matrix.clone():null;this._mixer.uncacheAction(d.clip,this.animator.gameObject),u&&u.decompose(this.animator.gameObject.position,this.animator.gameObject.quaternion,this.animator.gameObject.scale),d.action_loopback=this.createAction(d.clip)}}if(this._activeState?.behaviours&&this._activeState.motion.action){const d=this._activeState?.motion.clip.duration,u=this._activeState.motion.action.time/d,f=new ql(this._activeState,u,d,this._speed);for(const m of this._activeState.behaviours)m.instance?.onStateExit?.call(m.instance,this.animator,f,n)}const r=this._activeState?.motion.action;o&&(e.motion.action=e.motion.action_loopback,e.motion.action_loopback=r);const a=this._activeState;this._activeState=e;const l=e.motion?.action,h=e.motion.clip;if(h?.duration<=0&&h.tracks.length<=0?r&&this._heldActions.push(r):r&&(r.fadeOut(t),this.releaseHeldActions(t)),l){if(i=Math.max(0,Math.min(1,i)),e.cycleOffsetParameter){let u=this.getFloat(e.cycleOffsetParameter);typeof u=="number"?(u<0&&(u+=1),i+=u,i%=1):Ze&&console.warn("AnimatorController cycle offset parameter is not a number",e.cycleOffsetParameter)}else typeof e.cycleOffset=="number"&&(i+=e.cycleOffset,i%=1);l.isRunning()&&l.stop(),l.reset(),l.enabled=!0,this.setTimescale(l,e);const d=e.motion.clip.duration;if(l.time=o?0:i*d,l.timeScale<0&&(l.time=d-l.time),l.clampWhenFinished=!0,l.setLoop(c.LoopOnce,0),t>0?l.fadeIn(t):l.weight=1,l.play(),window.requestAnimationFrame(()=>exports.AnimationUtils.testIfRootCanAnimate(l)),this.rootMotionHandler&&this.rootMotionHandler.onStart(l),this._activeStates.includes(e)||this._activeStates.push(e),this._activeState.behaviours){const u=new ql(e,i,d,this._speed);for(const f of this._activeState.behaviours)f.instance?.onStateEnter?.call(f.instance,this.animator,u,n)}}else Ze&&(e.__warned_no_motion||(e.__warned_no_motion=!0,console.warn("No action",e.motion,this)));Ze&&console.log("TRANSITION FROM "+a?.name+" TO "+e.name,t,r,l,l?.getEffectiveTimeScale(),l?.getEffectiveWeight(),l?.isRunning(),l?.isScheduled(),l?.paused)}createAction(e){if(this._mixer.existingAction(e)&&this._mixer.uncacheAction(e,this.animator?.gameObject),this.animator?.applyRootMotion){this.rootMotionHandler||(this.rootMotionHandler=new dO(this));const i=this.animator.gameObject;return this.rootMotionHandler.createClip(this._mixer,i,e)}else return this._mixer.clipAction(e)}evaluateCondition(e){const t=this.model.parameters.find(i=>i.name===e.parameter);if(!t)return!1;switch(e.mode){case ni.If:return t.value===!0;case ni.IfNot:return t.value===!1;case ni.Greater:return t.value>e.threshold;case ni.Less:return t.value<e.threshold;case ni.Equals:return t.value===e.threshold;case ni.NotEqual:return t.value!==e.threshold}return!1}createActions(e){Ze&&console.log("AnimatorController createActions",this.model);for(const t of this.model.layers){const i=t.stateMachine;for(let n=0;n<i.states.length;n++){const o=i.states[n];o.transitions||(o.transitions=[]);for(const r of o.transitions)r.conditions||(r.conditions=[]);if(o.motion||(Ze&&console.warn("No motion",o),o.motion=Pw(o.name)),this.animator&&o.motion.clips){const r=o.motion.clips?.find(a=>a.node.name===this.animator?.gameObject?.name);r?o.motion.clip=r.clip:(Ze||A())&&console.warn('Could not find clip for animator "'+this.animator?.gameObject?.name+'"',o.motion.clips.map(a=>a.node.name))}if(!o.motion.clip){Ze&&console.warn("No clip assigned to state",o);const r=new c.AnimationClip(void 0,void 0,[]);o.motion.clip=r}if(o.motion?.clip){const r=o.motion.clip;if(r instanceof c.AnimationClip){const a=this.createAction(r);o.motion.action=a}else(Ze||A())&&console.warn("No valid animationclip assigned",o)}if(o.behaviours&&Array.isArray(o.behaviours))for(const r of o.behaviours){if(!r?.typeName)continue;const a=P.get(r.typeName);if(a){const l=new a;l.isStateMachineBehaviour&&(l._context=this.context??void 0,Ta(l,r.properties),r.instance=l),Ze&&console.log("Created animator controller behaviour",o.name,r.typeName,r.properties,l)}else(Ze||A())&&console.warn("Could not find AnimatorBehaviour type: "+r.typeName)}}}}*enumerateActions(){if(this.model.layers)for(const e of this.model.layers){const t=e.stateMachine;for(let i=0;i<t.states.length;i++){const n=t.states[i];n?.motion&&(n.motion.action&&(yield n.motion.action),n.motion.action_loopback&&(yield n.motion.action_loopback))}}}rootMotionHandler}class rb{track;createdInterpolant;originalEvaluate;customEvaluate;constructor(e,t){this.track=e;const i=e,n=i.createInterpolant.bind(e);i.createInterpolant=()=>(i.createInterpolant=n,this.createdInterpolant=n(),this.originalEvaluate=this.createdInterpolant.evaluate.bind(this.createdInterpolant),this.customEvaluate=o=>{if(!this.originalEvaluate)return;const r=this.originalEvaluate(o);return t(o,r)},this.createdInterpolant.evaluate=this.customEvaluate,this.createdInterpolant)}dispose(){this.createdInterpolant&&this.originalEvaluate&&(this.createdInterpolant.evaluate=this.originalEvaluate),this.track=void 0,this.createdInterpolant=null,this.originalEvaluate=void 0,this.customEvaluate=void 0}}class Je{static lastObjPosition={};static lastObjRotation={};static firstKeyframeRotation={};static spaceRotation={};static effectiveSpaceRotation={};static clipOffsetRotation={};set action(e){this._action=e}get action(){return this._action}get cacheId(){return this.root.uuid}_action;root;clip;positionWrapper=null;rotationWrapper=null;context;positionChange=new c.Vector3;rotationChange=new c.Quaternion;constructor(e,t,i,n,o){if(this.context=e,this.root=t,this.clip=i,Je.firstKeyframeRotation[this.cacheId]||(Je.firstKeyframeRotation[this.cacheId]=new c.Quaternion),o){const r=o.values;Je.firstKeyframeRotation[this.cacheId].set(r[0],r[1],r[2],r[3])}Je.spaceRotation[this.cacheId]||(Je.spaceRotation[this.cacheId]=new c.Quaternion),Je.effectiveSpaceRotation[this.cacheId]||(Je.effectiveSpaceRotation[this.cacheId]=new c.Quaternion),Je.clipOffsetRotation[this.cacheId]=new c.Quaternion,o&&Je.clipOffsetRotation[this.cacheId].set(o.values[0],o.values[1],o.values[2],o.values[3]).invert(),this.handlePosition(i,n),this.handleRotation(i,o)}onStart(e){if(e.getClip()!==this.clip)return;Je.lastObjRotation[this.cacheId]||(Je.lastObjRotation[this.cacheId]=this.root.quaternion.clone());const t=Je.lastObjRotation[this.cacheId];if(Je.spaceRotation[this.cacheId].copy(t),Kh){const i=new c.Euler().setFromQuaternion(t);console.log("START",this.clip.name,I.toDegrees(i.y),this.root.position.z)}}getClipRotationOffset(){return Je.clipOffsetRotation[this.cacheId]}_prevTime=0;handlePosition(e,t){if(t){const i=this.root;Kh&&i.add(new c.AxesHelper),Je.lastObjPosition[this.cacheId]||(Je.lastObjPosition[this.cacheId]=this.root.position.clone());const n=new c.Vector3,o=new c.Vector3;this.positionWrapper=new rb(t,(r,a)=>{const l=this.action.getEffectiveWeight();return Kh&&i.position.length()>8&&i.position.set(0,i.position.y,0),r>this._prevTime&&(n.set(a[0],a[1],a[2]),n.sub(o),n.multiplyScalar(l),n.applyQuaternion(this.getClipRotationOffset()),n.applyQuaternion(i.quaternion),this.positionChange.copy(n)),o.fromArray(a),this._prevTime=r,a[0]=0,a[1]=0,a[2]=0,a})}}static identityQuaternion=new c.Quaternion;handleRotation(e,t){if(t){if(Kh){const r=t.values,a=new c.Euler().setFromQuaternion(new c.Quaternion(r[0],r[1],r[2],r[3]));console.log(e.name,t.name,"FIRST ROTATION IN TRACK",I.toDegrees(a.y));const l=t.values.length-4,h=new c.Quaternion().set(r[l],r[l+1],r[l+2],r[l+3]),d=new c.Euler().setFromQuaternion(h);console.log(e.name,t.name,"LAST ROTATION IN TRACK",I.toDegrees(d.y))}let i=0;const n=new c.Quaternion,o=new c.Quaternion;this.rotationWrapper=new rb(t,(r,a)=>(r>i&&(o.set(a[0],a[1],a[2],a[3]),n.invert(),o.multiply(n),this.rotationChange.copy(o)),n.fromArray(a),i=r,a[0]=0,a[1]=0,a[2]=0,a[3]=1,a))}}onBeforeUpdate(e){this.positionChange.set(0,0,0),this.rotationChange.set(0,0,0,1)}onAfterUpdate(e){return!this.action||(e*=this.action.getEffectiveWeight(),e<=0)?!1:(this.positionChange.multiplyScalar(e),this.rotationChange.slerp(Je.identityQuaternion,1-e),!0)}}class dO{controller;handler=[];root;basePosition=new c.Vector3;baseQuaternion=new c.Quaternion;baseRotation=new c.Euler;constructor(e){this.controller=e}createClip(e,t,i){this.root=t,t&&"name"in t&&t.name;const n=this.findRootTrack(i,".position"),o=this.findRootTrack(i,".quaternion"),r=new Je(this.controller.context,t,i,n,o);this.handler.push(r);const a=e.clipAction(i);return r.action=a,a}onStart(e){for(const t of this.handler)t.onStart(e)}onBeforeUpdate(e){this.basePosition.copy(this.root.position),this.baseQuaternion.copy(this.root.quaternion);for(const t of this.handler)t.onBeforeUpdate(e)}summedPosition=new c.Vector3;summedRotation=new c.Quaternion;onAfterUpdate(e){if(!(e<=0)){this.root.position.copy(this.basePosition),this.root.quaternion.copy(this.baseQuaternion),this.summedPosition.set(0,0,0),this.summedRotation.set(0,0,0,1);for(const t of this.handler)t.onAfterUpdate(e)&&(this.summedPosition.add(t.positionChange),this.summedRotation.multiply(t.rotationChange));this.root.position.add(this.summedPosition),this.root.quaternion.multiply(this.summedRotation)}}findRootTrack(e,t){const i=e.tracks;if(!i)return null;for(const n of i)if(n.name.endsWith(t))return n;return null}}class uO extends qi{onSerialize(e,t){}onDeserialize(e,t){if(t.type===bi&&e?.__type==="AnimatorController")return new bi(e)}}function fO(){new uO(bi)}const Be=function(s){return p(s)},p=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=ab(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=ab(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function ab(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const ro=x("debughotreload");let Rc=!1;const dc=new Map;function pO(){return Rc}function fm(){return globalThis.NEEDLE_HOT_RELOAD_ENABLED===!0}function Ow(s){if(Rc){ro&&console.warn("[Needle Engine] Hot reloading is in progress, not registering instance",s);return}ro&&console.log("[Needle Engine] Registering hot reload instance",s);const t=s.constructor.name;dc.has(t)?dc.get(t)?.push(s):dc.set(t,[s])}function Mw(s){if(Rc){ro&&console.warn("[Needle Engine] Hot reloading is in progress, not unregistering instance",s);return}ro&&console.log("[Needle Engine] Unregistering hot reload instance",s);const t=s.constructor.name,i=dc.get(t);if(!i)return;const n=i.indexOf(s);n!==-1&&i.splice(n,1)}let lb=!1;function mO(){if(ro||lb)return;lb=!0;const s=console.error;console.error=(...e)=>{if(e.length){const t=e[0];if(typeof t=="string"&&t.includes("[hmr] Failed to reload ")){console.log("[Needle Engine] Hot reloading failed"),window.location.reload();return}}s.apply(console,e)}}function gO(s){ro&&console.log("[HMR] Apply changes",s,Object.keys(s)),mO();for(const e of Object.keys(s))try{Rc=!0;const t=P.get(e);if(!t){ro&&console.log("[HMR] Type not found: "+e);continue}const i=s[e],n=dc.get(i.name);let o="[Needle Engine] Updating type: "+e;const r=n?.length??-1;r>0?o+=" x"+r:o+=" (No instances registered)",console.log(o);const a=Object.getOwnPropertyNames(t.prototype),l=Object.getOwnPropertyDescriptors(i.prototype);for(const h in l)l[h].writable&&(t.prototype[h]=s[e].prototype[h]);for(const h of a)l[h]||delete t.prototype[h];if(n){const h=new i,d=Object.getOwnPropertyDescriptors(h);for(const u of n){const f=u,m=f.isComponent===!0,g=m?f.activeAndEnabled:!0,b=m?f.context:void 0;try{if(m&&b&&ls(f,b),m&&g&&(f.enabled=!1),u.onBeforeHotReloadFields&&u.onBeforeHotReloadFields()===!1)continue;for(const y in d)if(d[y].writable){if(u[y]===void 0)u[y]=h[y];else if(typeof u[y]=="function"&&!u[y].prototype){const v=u[y],w=v.name,k="bound ";if(w===k)continue;const O=v.name.substring(k.length),M=i.prototype[O];M&&(u[y]=M.bind(u))}}u.onAfterHotReloadFields&&u.onAfterHotReloadFields()}finally{m&&b&&ig(f,b),m&&g&&(f.enabled=!0)}}}}catch(t){if(ro)console.error(t);else return!1}finally{Rc=!1,Yo(_i.Log,"Script changes applied (HMR)")}return!0}class S extends c.Object3D{guid;static isDestroyed(e){return fr(e)}static setActive(e,t,i=!0){e&&(hc(e,t),Sd(e),t&&i&&o0(U.Current,e))}static isActiveSelf(e){return Xa(e)}static isActiveInHierarchy(e){return dw(e)}static markAsInstancedRendered(e,t){uw(e,t)}static isUsingInstancing(e){return Lu(e)}static foreachComponent(e,t,i=!0){return pr(e,t,i)}static instantiateSynced(e,t){return e?Mg(e,t):null}static instantiate(e,t=null){return"isAssetReference"in e,uo(e,t)}static destroySynced(e,t,i=!0){if(!e)return;const n=e;t=t??U.Current,Jc(n,t.connection,i)}static destroy(e,t=!0){return xi(e,t)}static add(e,t,i){if(!(!e||!t)){if(e===t){console.warn("Can not add object to self",e);return}i||(i=U.Current),t.add(e),hc(e,!0),Sd(e),i?S.foreachComponent(e,n=>{ig(n,i),!n.__internalDidAwakeAndStart&&i.new_script_start.includes(n)===!1&&i.new_script_start.push(n)},!0):console.warn("Missing context")}}static remove(e){e&&(e.parent?.remove(e),hc(e,!1),Sd(e),S.foreachComponent(e,t=>{JC(t)},!0))}static invokeOnChildren(e,t,...i){this.invoke(e,t,!0,i)}static invoke(e,t,i=!1,...n){e&&this.foreachComponent(e,o=>{const r=o[t];r&&typeof r=="function"&&r?.call(o,...n)},i)}static addNewComponent(e,t,i,n=!0){return Gn(e,t,i,{callAwake:n})}static addComponent(e,t,i,n){return Gn(e,t,i,n)}static moveComponent(e,t){return Gn(e,t)}static removeComponent(e){return gg(e.gameObject,e),e}static getOrAddComponent(e,t){return Kc(e,t)}static getComponent(e,t){return e===null?null:vo(e,t)}static getComponents(e,t,i=null){return e===null?i??[]:Ga(e,t,i)}static findByGuid(e,t){return Cg(e,t)}static findObjectOfType(e,t,i=!0){return qa(e,t??U.Current,i)}static findObjectsOfType(e,t){const i=[];return F0(e,i,t),i}static getComponentInChildren(e,t,i=!1){return Zc(e,t,i)}static getComponentsInChildren(e,t,i=null){return Ha(e,t,i??void 0)}static getComponentInParent(e,t){return Cc(e,t)}static getComponentsInParent(e,t,i=null){return Eu(e,t,i)}static getAllComponents(e){const t=e.userData?.components;return t?[...t]:[]}static*iterateComponents(e){const t=e?.userData?.components;if(t&&Array.isArray(t))for(let i=0;i<t.length;i++)yield t[i]}}class R{get isComponent(){return!0}get[Jm](){return P.getKey(this.constructor)||void 0}__context;get context(){return this.__context??U.Current}set context(e){this.__context=e}get scene(){return this.context.scene}get layer(){return this.gameObject?.userData?.layer}get name(){return this.gameObject?.name?this.gameObject.name:this.gameObject?.userData.name}__name;set name(e){this.gameObject?(this.gameObject.userData||(this.gameObject.userData={}),this.gameObject.userData.name=e,this.__name=e):this.__name=e}get tag(){return this.gameObject?.userData.tag}set tag(e){this.gameObject&&(this.gameObject.userData||(this.gameObject.userData={}),this.gameObject.userData.tag=e)}get static(){return this.gameObject?.userData.static}set static(e){this.gameObject&&(this.gameObject.userData||(this.gameObject.userData={}),this.gameObject.userData.static=e)}get activeAndEnabled(){return!(this.destroyed||this.__isEnabled===!1||!this.__isActiveInHierarchy)}get __isActive(){return this.gameObject.visible}get __isActiveInHierarchy(){if(!this.gameObject)return!1;const e=this.gameObject[Fn];return e===void 0?!0:e}set __isActiveInHierarchy(e){this.gameObject&&(this.gameObject[Fn]=e)}gameObject;guid="invalid";sourceId;awake(){}onEnable(){}onDisable(){}onDestroy(){this.__destroyed=!0}startCoroutine(e,t=ge.Update){return this.context.registerCoroutineUpdate(this,e,t)}stopCoroutine(e,t=ge.Update){this.context.unregisterCoroutineUpdate(e,t)}get destroyed(){return this.__destroyed}destroy(){this.__destroyed||this.__internalDestroy()}__didAwake=!1;__didStart=!1;__didEnable=!1;__isEnabled=void 0;__destroyed=!1;get __internalDidAwakeAndStart(){return this.__didAwake&&this.__didStart}constructor(e){this.__didAwake=!1,this.__didStart=!1,this.__didEnable=!1,this.__isEnabled=void 0,this.__destroyed=!1,this._internalInit(e),fm()&&Ow(this)}__internalNewInstanceCreated(e){return this.__didAwake=!1,this.__didStart=!1,this.__didEnable=!1,this.__isEnabled=void 0,this.__destroyed=!1,this._internalInit(e),this}_internalInit(e){if(typeof e=="object")for(const t of Object.keys(e)){const i=e[t];typeof i!="function"&&(this[t]=i)}}__internalAwake(){this.__didAwake||(this.__didAwake=!0,this.awake())}__internalStart(){this.__didStart||(this.__didStart=!0,this.start&&this.start())}__internalEnable(e){return this.__destroyed?(A()&&console.warn("[Needle Engine Dev] Trying to enable destroyed component"),!1):this.__didAwake?this.__didEnable?(e!==!0&&(this.__isEnabled=!0),!1):(this.__didEnable=!0,this.__isEnabled=!0,this.onEnable(),!0):!1}__internalDisable(e){if(this.__didAwake){if(!this.__didEnable){e!==!0&&(this.__isEnabled=!1);return}this.__didEnable=!1,this.__isEnabled=!1,this.onDisable()}}__internalDestroy(){this.__destroyed||(this.__destroyed=!0,this.__didAwake&&(this.onDestroy?.call(this),this.dispatchEvent(new CustomEvent("destroyed",{detail:this}))),j0(this),fm()&&Mw(this))}get enabled(){return typeof this.__isEnabled=="boolean"?this.__isEnabled:!0}set enabled(e){if(this.__destroyed){A()&&console.warn(`[Needle Engine Dev] Trying to ${e?"enable":"disable"} destroyed component`);return}if(typeof e=="number"&&(e>=.5?e=!0:e=!1),!this.__didAwake){this.__isEnabled=e;return}e?this.__internalEnable():this.__internalDisable()}get worldPosition(){return Y(this.gameObject)}set worldPosition(e){lt(this.gameObject,e)}setWorldPosition(e,t,i){ur(this.gameObject,e,t,i)}get worldQuaternion(){return pe(this.gameObject)}set worldQuaternion(e){un(this.gameObject,e)}setWorldQuaternion(e,t,i,n){Gm(this.gameObject,e,t,i,n)}get worldEuler(){return Hm(this.gameObject)}set worldEuler(e){qm(this.gameObject,e)}get worldRotation(){return this.gameObject.worldRotation}set worldRotation(e){this.setWorldRotation(e.x,e.y,e.z,!0)}setWorldRotation(e,t,i,n=!0){Hc(this.gameObject,e,t,i,n)}static _forward=new c.Vector3;get forward(){return R._forward.set(0,0,-1).applyQuaternion(this.worldQuaternion)}static _right=new c.Vector3;get right(){return R._right.set(1,0,0).applyQuaternion(this.worldQuaternion)}static _up=new c.Vector3;get up(){return R._up.set(0,1,0).applyQuaternion(this.worldQuaternion)}_eventListeners=new Map;addEventListener(e,t){this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push(t)}removeEventListener(e,t){if(!this._eventListeners[e])return;const i=this._eventListeners[e].indexOf(t);i>=0&&this._eventListeners[e].splice(i,1)}dispatchEvent(e){if(!e||!this._eventListeners[e.type])return!1;const t=this._eventListeners[e.type];for(let i=0;i<t.length;i++)t[i](e);return!1}}const yO=Object.freeze(Object.defineProperty({__proto__:null,Behaviour:R,Component:R,GameObject:S},Symbol.toStringTag,{value:"Module"}));var _O=Object.defineProperty,bO=Object.getOwnPropertyDescriptor,wr=(s,e,t,i)=>{for(var n=i>1?void 0:i?bO(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=(i?r(e,t,n):r(n))||n);return i&&n&&_O(e,t,n),n};const zs=x("debuganimation");let kw=class{x;y};class At extends R{get isAnimationComponent(){return!0}addClip(e){this.animations||(this.animations=[]),this.animations.includes(e)||this.animations.push(e)}playAutomatically=!0;randomStartTime=!1;minMaxSpeed;minMaxOffsetNormalized;loop=!0;clampWhenFinished=!1;get time(){if(this.actions){for(const e of this.actions)if(e.isRunning())return e.time}return 0}set time(e){if(this.actions)for(const t of this.actions)t.time=e}get duration(){if(this.actions){for(const e of this.actions)if(e.isRunning())return e.getClip().duration}return 0}_tempAnimationClipBeforeGameObjectExisted=null;get clip(){return this.animations?.length?this.animations[0]:null}set clip(e){if(!this.__didAwake){zs&&console.warn("Assign clip during serialization",e),this._tempAnimationClipBeforeGameObjectExisted=e;return}e&&(this.gameObject.animations||(this.gameObject.animations=[]),!this.animations.includes(e)&&(this.animations.length>0?this.animations.splice(0,0,e):this.animations.push(e)))}set clips(e){this.animations=e}_tempAnimationsArray;set animations(e){e==null||!Array.isArray(e)||(this.gameObject?this.gameObject.animations=e:this._tempAnimationsArray=e)}get animations(){return this.gameObject?.animations||this._tempAnimationsArray||[]}mixer=void 0;get actions(){return this._actions}set actions(e){this._actions=e}_actions;_handles;awake(){this.mixer=void 0,zs&&console.log("Animation Awake",this.name,this),this._tempAnimationsArray&&(this.animations=this._tempAnimationsArray,this._tempAnimationsArray=void 0),this._tempAnimationClipBeforeGameObjectExisted&&(this.clip=this._tempAnimationClipBeforeGameObjectExisted,this._tempAnimationClipBeforeGameObjectExisted=null),this.actions=[],this._handles=[]}onEnable(){if(this.playAutomatically&&this.animations?.length>0){const e=Math.floor(Math.random()*this.animations.length),t=this.animations[e];this.play(e,{exclusive:!0,fadeDuration:0,startTime:this.randomStartTime?Math.random()*t.duration:0,loop:this.loop,clampWhenFinished:this.clampWhenFinished})}}update(){this.mixer&&(this.mixer.update(this.context.time.deltaTime),this._handles.forEach(e=>e.update()))}onDisable(){this.mixer&&this.mixer.stopAllAction()}onDestroy(){this.context.animations.unregisterAnimationMixer(this.mixer)}getAction(e){return this.actions?.find(t=>t.getClip().name===e)||null}get isPlaying(){if(this.actions){for(let e=0;e<this.actions.length;e++)if(this.actions[e].isRunning())return!0}return!1}stopAll(e){if(this.actions)for(const t of this.actions)e?.fadeDuration?t.fadeOut(e.fadeDuration):t.stop()}stop(e,t){if(e===void 0){this.stopAll();return}else if(typeof e=="number"){if(e>=this.animations.length){zs&&console.log("No animation at index",e);return}e=this.animations[e]}else typeof e=="string"&&(e=this.animations.find(n=>n.name===e));if(!e){console.error("Could not find clip",e);return}const i=this.actions.find(n=>n.getClip()===e);if(!i){console.error("Could not find action",e);return}t?.fadeDuration?i.fadeOut(t.fadeDuration):i.stop()}pause(e,t=!1){if(e===void 0){for(const n of this.actions)n.paused=!t;return}else if(typeof e=="number"){if(e>=this.animations.length){zs&&console.log("No animation at index",e);return}e=this.animations[e]}else typeof e=="string"&&(e=this.animations.find(n=>n.name===e));if(!e){console.error("Could not find clip",e);return}const i=this.actions.find(n=>n.getClip()===e);if(!i){console.error("Could not find action",e);return}i.paused=!t}resume(){for(const e of this.actions)e.paused=!1}play(e=0,t){if(zs&&console.log("PLAY",e),this.ensureMixer(),!this.mixer){zs&&console.warn("Missing mixer",this);return}e===void 0&&(e=0);let i=e;if(typeof e=="number"){if(e>=this.animations.length){zs&&console.log("No animation at index",e);return}i=this.animations[e]}else typeof e=="string"&&(i=this.animations.find(o=>o.name===e));if(!i){console.error("Could not find clip",e);return}t||(t={});for(const o of this.actions)if(o.getClip()===i)return this.internalOnPlay(o,t);if(!i.tracks){console.warn("Clip is no AnimationClip",i);return}const n=this.mixer.clipAction(i);return this.actions.push(n),this.internalOnPlay(n,t)}internalOnPlay(e,t){var i=this.actions.find(r=>r===e);if(i===e&&i.isRunning()&&i.time<i.getClip().duration){const r=this.tryFindHandle(e);if(i.paused&&(i.paused=!1),r)return r.waitForFinish()}if(t.loop===void 0&&(t.loop=this.loop),t.clampWhenFinished===void 0&&(t.clampWhenFinished=this.clampWhenFinished),t.minMaxOffsetNormalized===void 0&&this.randomStartTime&&(t.minMaxOffsetNormalized=this.minMaxOffsetNormalized),t.minMaxSpeed===void 0&&(t.minMaxSpeed=this.minMaxSpeed),t?.exclusive??!0)for(const r of this.actions)r!=i&&(t.fadeDuration?r.fadeOut(t.fadeDuration):r.stop());if(t?.fadeDuration&&e.fadeIn(t.fadeDuration),e.enabled=!0,t?.startTime!=null)e.time=t.startTime;else if(t?.minMaxOffsetNormalized&&t.minMaxOffsetNormalized.x!=0&&t.minMaxOffsetNormalized.y!=0){const r=e.getClip();e.time=I.lerp(t.minMaxOffsetNormalized.x,t.minMaxOffsetNormalized.y,Math.random())*r.duration}else e.time>=e.getClip().duration&&(e.time=0);t?.minMaxSpeed?e.timeScale=I.lerp(t.minMaxSpeed.x,t.minMaxSpeed.y,Math.random()):e.timeScale=t?.speed??1,t?.loop!=null?e.loop=t.loop?c.LoopRepeat:c.LoopOnce:e.loop=c.LoopOnce,t?.clampWhenFinished&&(e.clampWhenFinished=!0),e.paused=!1,e.play(),window.requestAnimationFrame(()=>exports.AnimationUtils.testIfRootCanAnimate(e)),zs&&console.log("PLAY",e.getClip().name,e);const o=new vO(e,this.mixer,t,r=>{this._handles.splice(this._handles.indexOf(o),1)});return this._handles.push(o),o.waitForFinish()}tryFindHandle(e){for(const t of this._handles)if(t.action===e)return t}ensureMixer(){if(!this.mixer){const e="animationMixer";this.gameObject[e]&&(this.mixer=this.gameObject[e]),(!this.mixer||!this.mixer.clipAction)&&(this.mixer=new c.AnimationMixer(this.gameObject),this.gameObject[e]=this.mixer)}this.context.animations.registerAnimationMixer(this.mixer)}}wr([p()],At.prototype,"playAutomatically",2);wr([p()],At.prototype,"randomStartTime",2);wr([p(kw)],At.prototype,"minMaxSpeed",2);wr([p(kw)],At.prototype,"minMaxOffsetNormalized",2);wr([p()],At.prototype,"loop",2);wr([p()],At.prototype,"clampWhenFinished",2);wr([p(c.AnimationClip)],At.prototype,"clips",1);class vO{mixer;action;promise=null;_options;_resolveCallback=null;_resolvedOrRejectedCallback;constructor(e,t,i,n){this.action=e,this.mixer=t,this._resolvedOrRejectedCallback=n,this._options=i}waitForFinish(){return this.promise?this.promise:(this.promise=new Promise(e=>{this._resolveCallback=e}),this.mixer.addEventListener("finished",this.onFinished),this.promise)}update(){this._options&&this._options.endTime!==void 0&&this.action.time>this._options.endTime&&(this._options.loop===!0?this.action.time=this._options.startTime??0:(this.action.time=this._options.endTime,this.action.timeScale=0,this.onResolve()))}onResolve(){this.dispose(),this._resolvedOrRejectedCallback?.call(this,this),this._resolveCallback?.call(this,this.action)}onFinished=e=>{e.action===this.action&&this.onResolve()};dispose(){this.mixer.removeEventListener("finished",this.onFinished)}}function cb(s,e,t){return exports.AnimationUtils.setObjectAnimated(s,e,t)}function wO(s){return exports.AnimationUtils.getObjectAnimated(s)||!1}var xO=Object.defineProperty,SO=Object.getOwnPropertyDescriptor,Iu=(s,e,t,i)=>{for(var n=i>1?void 0:i?SO(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=(i?r(e,t,n):r(n))||n);return i&&n&&xO(e,t,n),n};const Li=x("debuganimator");class ht extends R{get isAnimationComponent(){return!0}applyRootMotion=!1;hasRootMotion=!1;keepAnimatorControllerStateOnDisable=!1;set runtimeAnimatorController(e){this._animatorController&&this._animatorController.model===e||(e?e instanceof bi?(e.animator&&e.animator!==this&&(console.warn("AnimatorController can not be bound to multiple animators",e.model?.name),e.model||console.error("AnimatorController has no model"),e=new bi(e.model)),this._animatorController=e,this._animatorController.bind(this)):(Li&&console.log("Assign animator controller",e,this),this._animatorController=new bi(e),this.__didAwake&&this._animatorController.bind(this)):this._animatorController=null)}get runtimeAnimatorController(){return this._animatorController}getCurrentStateInfo(){return this.runtimeAnimatorController?.getCurrentStateInfo()}get currentAction(){return this.runtimeAnimatorController?.currentAction||null}get parametersAreDirty(){return this._parametersAreDirty}_parametersAreDirty=!1;get isDirty(){return this._isDirty}_isDirty=!1;Play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){this.play(e,t,i,n)}play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){this.runtimeAnimatorController?.play(e,t,i,n),this._isDirty=!0}Reset(){this.reset()}reset(){this._animatorController?.reset(),this._isDirty=!0}SetBool(e,t){this.setBool(e,t)}setBool(e,t){Li&&console.log("setBool",e,t),this.runtimeAnimatorController?.getBool(e)!==t&&(this._parametersAreDirty=!0),this.runtimeAnimatorController?.setBool(e,t)}GetBool(e){return this.getBool(e)}getBool(e){const t=this.runtimeAnimatorController?.getBool(e)??!1;return Li&&console.log("getBool",e,t),t}toggleBool(e){this.setBool(e,!this.getBool(e))}SetFloat(e,t){this.setFloat(e,t)}setFloat(e,t){this.runtimeAnimatorController?.getFloat(e)!==t&&(this._parametersAreDirty=!0),Li&&console.log("setFloat",e,t),this.runtimeAnimatorController?.setFloat(e,t)}GetFloat(e){return this.getFloat(e)}getFloat(e){const t=this.runtimeAnimatorController?.getFloat(e)??-1;return Li&&console.log("getFloat",e,t),t}SetInteger(e,t){this.setInteger(e,t)}setInteger(e,t){this.runtimeAnimatorController?.getInteger(e)!==t&&(this._parametersAreDirty=!0),Li&&console.log("setInteger",e,t),this.runtimeAnimatorController?.setInteger(e,t)}GetInteger(e){return this.getInteger(e)}getInteger(e){const t=this.runtimeAnimatorController?.getInteger(e)??-1;return Li&&console.log("getInteger",e,t),t}SetTrigger(e){this.setTrigger(e)}setTrigger(e){this._parametersAreDirty=!0,Li&&console.log("setTrigger",e),this.runtimeAnimatorController?.setTrigger(e)}ResetTrigger(e){this.resetTrigger(e)}resetTrigger(e){this._parametersAreDirty=!0,Li&&console.log("resetTrigger",e),this.runtimeAnimatorController?.resetTrigger(e)}GetTrigger(e){this.getTrigger(e)}getTrigger(e){const t=this.runtimeAnimatorController?.getTrigger(e);return Li&&console.log("getTrigger",e,t),t}IsInTransition(){return this.isInTransition()}isInTransition(){return this.runtimeAnimatorController?.isInTransition()??!1}SetSpeed(e){return this.setSpeed(e)}setSpeed(e){e!==this._speed&&(Li&&console.log("setSpeed",e),this._speed=e,this._animatorController?.animator==this&&this._animatorController.setSpeed(e))}set minMaxSpeed(e){this._speed=I.lerp(e.x,e.y,Math.random()),this._animatorController?.animator==this&&this._animatorController.setSpeed(this._speed)}set minMaxOffsetNormalized(e){this._normalizedStartOffset=I.lerp(e.x,e.y,Math.random()),this.runtimeAnimatorController?.animator==this&&(this.runtimeAnimatorController.normalizedStartOffset=this._normalizedStartOffset)}_speed=1;_normalizedStartOffset=0;_animatorController=null;awake(){Li&&console.log("ANIMATOR",this.name,this),this.gameObject&&this.initializeRuntimeAnimatorController()}_initializeWithRuntimeAnimatorController;initializeRuntimeAnimatorController(e=!1){const t=e||this.runtimeAnimatorController!==this._initializeWithRuntimeAnimatorController;if(this.runtimeAnimatorController&&t){const i=this.runtimeAnimatorController.clone();this._initializeWithRuntimeAnimatorController=i,i?(console.assert(this.runtimeAnimatorController!==i),this.runtimeAnimatorController=i,console.assert(this.runtimeAnimatorController===i),this.runtimeAnimatorController.bind(this),this.runtimeAnimatorController.setSpeed(this._speed),this.runtimeAnimatorController.normalizedStartOffset=this._normalizedStartOffset):console.warn("Could not clone animator controller",this.runtimeAnimatorController)}}onDisable(){this.keepAnimatorControllerStateOnDisable||this._animatorController?.reset()}onBeforeRender(){this._isDirty=!1,this._parametersAreDirty=!1,!wO(this.gameObject)&&this._animatorController&&this._animatorController.update(1)}}Iu([p()],ht.prototype,"applyRootMotion",2);Iu([p()],ht.prototype,"hasRootMotion",2);Iu([p()],ht.prototype,"keepAnimatorControllerStateOnDisable",2);Iu([p()],ht.prototype,"runtimeAnimatorController",1);const ts=new Array;class cs{enabled=!0;target;methodName;arguments;get canClone(){return this.target instanceof Object}constructor(e,t,i,n){this.target=e,this.methodName=t||null,this.arguments=i,n!=null&&(this.enabled=n)}invoke(...e){if(this.enabled!==!1){if(typeof this.target=="function")this.arguments?(ts.length=0,e!==void 0&&e.length>0&&ts.push(...e),ts.push(...this.arguments),this.target(...this.arguments),ts.length=0):this.target(...e);else if(this.methodName!=null){const t=this.target[this.methodName];typeof t=="function"?this.arguments?(ts.length=0,e!==void 0&&e.length>0&&ts.push(...e),ts.push(...this.arguments),t.call(this.target,...ts),ts.length=0):t.call(this.target,...e):this.arguments?e!==void 0&&e.length>0?this.target[this.methodName]=e[0]:this.target[this.methodName]=this.arguments[0]:this.target[this.methodName]=e[0]}}}}const CO=s=>/^[A-Z]*$/.test(s);class ju extends Event{args}class ie{isEventList=!0;__internalOnInstantiate(e){const t=new Array;for(let n=0;n<this.methods.length;n++){const o=this.methods[n];if(!(o.target instanceof Function)){const r=o.target;let a=r?.uuid;if(r&&(a=r.guid),a){const l=e[a];if(l){const h=o.arguments?.map(d=>d instanceof Object&&d.uuid?e[d.uuid].clone:d?.isComponent?e[d.guid].clone:d);t.push(new cs(l.clone,o.methodName,h,o.enabled))}else A()&&console.warn("Could not find target for event listener")}}}return new ie(t)}target;key;setEventTarget(e,t){if(this.key=e,this.target=t,this.key!==void 0){let i="",n=!1;for(const o of this.key)n&&CO(o)&&(i+="-"),n=!0,i+=o.toLowerCase();this.key=i}}get listenerCount(){return this.methods?.length??0}get isInvoking(){return this._isInvoking}_isInvoking=!1;methods=[];_methodsCopy=[];static from(...e){return new ie(e)}constructor(e){if(this.methods=[],Array.isArray(e))for(const t of e)t instanceof cs?this.methods.push(t):typeof t=="function"&&this.methods.push(new cs(t));else typeof e=="function"&&this.methods.push(new cs(e))}invoke(...e){if(this._isInvoking)return console.warn("Circular event invocation detected. Please check your event listeners for circular references.",this),!1;if(this.methods?.length<=0)return!1;this._isInvoking=!0;try{this._methodsCopy.length=0,this._methodsCopy.push(...this.methods);for(const t of this._methodsCopy)t.invoke(...e);if(typeof this.target=="object"&&typeof this.key=="string"){const t=this.target.dispatchEvent;if(typeof t=="function"){const i=new ju(this.key);i.args=e,t.call(this.target,i)}}}finally{this._isInvoking=!1,this._methodsCopy.length=0}return!0}addEventListener(e){return this.methods.push(new cs(e)),()=>this.removeEventListener(e)}removeEventListener(e){if(!e)return!1;let t=!1;for(let i=this.methods.length-1;i>=0;i--)this.methods[i].target===e&&(this.methods[i].enabled=!1,this.methods.splice(i,1),t=!0);return t}removeAllEventListeners(){this.methods.length=0}}const hb=Symbol("previous-visibility");class Un extends c.WebGLRenderTarget{render(e,t,i){if("addPass"in i)this._unsupported_effectcomposer_warning||(console.warn("RenderTexture.render() does not yet support EffectComposer"),this._unsupported_effectcomposer_warning=!0);else if(i instanceof c.WebGLRenderer){this.onBeforeRender();const o=i.getRenderTarget(),r=i.xr.enabled;i.xr.enabled=!1,i.setRenderTarget(this),i.clear(!0,!0,!0),i.render(e,t),i.setRenderTarget(o),i.xr.enabled=r,this.onAfterRender()}}static _userSet=new Set;onBeforeRender(){Un._userSet.clear();const e=Sg(this.texture,!0,null,Un._userSet);for(const t of e)t instanceof c.Mesh&&(t[hb]=t.visible,t.visible=!1)}onAfterRender(){for(const e of Un._userSet)e instanceof c.Mesh&&(e.visible=e[hb]);Un._userSet.clear()}}class PO extends qi{constructor(){super([c.Color,te],"ColorSerializer")}onDeserialize(e){if(e!=null)return e.a!==void 0?new te(e.r,e.g,e.b,e.a):e.alpha!==void 0?new te(e.r,e.g,e.b,e.alpha):new c.Color(e.r,e.g,e.b)}onSerialize(e){if(e!=null)return e.a!==void 0?{r:e.r,g:e.g,b:e.b,a:e.a}:{r:e.r,g:e.g,b:e.b}}}class OO extends qi{constructor(){super([c.Euler],"EulerSerializer")}onDeserialize(e,t){if(e!=null){if(e.order)return new c.Euler(e.x,e.y,e.z,e.order);if(e.x!=null)return new c.Euler(e.x,e.y,e.z)}}onSerialize(e,t){return{x:e.x,y:e.y,z:e.z,order:e.order}}}class MO extends qi{constructor(){super(c.Object3D,"ObjectSerializer")}onSerialize(e,t){if(t.objectToNode!==void 0&&e.uuid){const i=t.objectToNode[e.uuid];return rt&&console.log(i,e.name,e.uuid),{node:i}}}onDeserialize(e,t){if(typeof e=="string"){if(e.endsWith(".glb")||e.endsWith(".gltf")){if(t.serializable instanceof Array&&t.serializable.includes(K))return;A()&&fe("Detected wrong usage of @serializable with Object3D or GameObject. Instead you should use AssetReference here! Please see the console for details.");const i=t.target?.constructor?.name;console.warn(`Wrong usage of @serializable detected in your script "${i}"
@@ -1729,4 +1729,4 @@ Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[_t],i=e.membership;l
1729
1729
  ---------------------------------
1730
1730
  • `+r.passes.map(u=>u.name||u.constructor.name+"*").join(`
1731
1731
  • `)+`
1732
- `),Yt&&this._onCreateEffectsDebug(this._composer,o)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const o=new T.POSTPROCESSING.MODULE.EffectPass(i,...e);o.name=e.map(r=>r.name).join(", "),o.mainScene=n,o.enabled=!0,o.renderToScreen=!1,t.addPass(o),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(Yt==="passes"){const i=new T.POSTPROCESSING.MODULE.DepthEffect({blendFunction:T.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});i.name="Depth Effect";const n=new T.POSTPROCESSING.MODULE.EffectPass(t,i);if(n.name="Depth Effect Pass",n.enabled=!1,e.passes.push(n),this._passIndices!==null){const r=[e.passes[0]];this._passIndices.length>0&&r.push(...this._passIndices.filter(a=>a!==0).map(a=>e.passes[a]).filter(a=>a)),r.length>0&&console.log("[PostProcessing] Passes (selected) →",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const o=this.context.menu;if(o&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();const r=document.createElement("select");r.multiple=!0;const a=document.createElement("option");a.innerText="Final Output",a.value="-1",r.appendChild(a);for(const l of e.passes){const h=document.createElement("option");h.innerText=l.name,h.value=`${e.passes.indexOf(l)}`,h.title=l.name,r.appendChild(h)}o.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(h=>parseInt(h.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const sD=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:$a},Symbol.toStringTag,{value:"Module"}));class mS{}const oD=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ue,ActionCollection:Cx,ActionModel:ei,AlignmentConstraint:oh,Animation:At,AnimationCurve:vh,AnimationExtension:Ju,AnimationTrackHandler:Lc,Animator:ht,AnimatorController:bi,AnimatorControllerBuilder:kg,Antialiasing:xh,Attractor:dl,AudioExtension:Mr,AudioListener:us,AudioSource:Si,AudioTrackHandler:fs,Avatar:po,AvatarBlink_Simple:Sr,AvatarEyeLook_Rotation:zg,AvatarLoader:fS,AvatarMarker:Oe,AvatarModel:i_,Avatar_Brain_LookAt:jc,Avatar_MouthShapes:ah,Avatar_MustacheShake:Fg,Avatar_POI:hr,AxesHelper:Ka,BaseUIComponent:Gi,BasicIKConstraint:Vg,BehaviorExtension:yy,BehaviorModel:St,BloomEffect:mf,BoxCollider:qu,BoxGizmo:Tr,BoxHelperComponent:wt,Button:Ds,CallInfo:cs,Camera:ri,CameraTargetReachedEvent:Dc,Canvas:za,CanvasGroup:mo,CapsuleCollider:bs,ChangeMaterialOnClick:cy,ChangeTransformOnClick:kr,CharacterController:Cr,CharacterControllerInput:Cs,ChromaticAberration:Sh,ClickThrough:Of,ColorAdjustments:Eo,ColorBySpeedModule:hl,ColorOverLifetimeModule:uf,ContactShadows:lh,ControlTrackHandler:Vu,CursorFollow:Nr,CustomBranding:Rr,Deletable:Hg,DeleteBox:ao,DepthOfField:wn,DeviceFlag:Xu,DocumentExtension:pS,DragControls:Jo,DropListener:Os,Duplicatable:ey,EffectWrapper:zc,EmissionModule:Rs,EmphasizeOnClick:tl,EnvironmentScene:$u,EventList:ie,EventListEvent:ju,EventSystem:Ht,EventTrigger:Ku,FieldWithDefault:ox,FixedJoint:Ay,Fog:rl,GltfExport:oy,GltfExportBox:ny,Gradient:Dr,Graphic:yh,GraphicRaycaster:Fu,GridHelper:al,GridLayoutGroup:Cy,GroundProjectedEnv:Qn,GroupActionModel:er,HideOnStart:Fi,HingeJoint:bh,HorizontalLayoutGroup:Sy,get HoverAnimation(){return exports.HoverAnimation},Image:gl,InheritVelocityModule:By,InputField:Xy,InstanceHandle:dr,InstancingHandler:_r,Interactable:Gg,Keyframe:ai,LODGroup:cf,LODModel:ll,Light:Ot,LimitVelocityOverLifetimeModule:nt,LogStats:Wg,LookAt:Qy,LookAtConstraint:xr,MainModule:It,MarkerTrackHandler:Nu,MaskableGraphic:_h,MeshCollider:xo,MeshRenderer:dh,MinMaxCurve:q,MinMaxGradient:Lr,NeedleMenu:Kn,NestedGltf:cl,Networking:Iy,NoiseModule:me,ObjectRaycaster:Wi,OffsetConstraint:Ar,OpenURL:yl,OrbitControls:ce,Outline:ol,Padding:Er,ParticleBurst:gu,ParticleSubEmitter:Fy,ParticleSystem:Uc,ParticleSystemRenderer:Ki,PhysicsExtension:_y,PixelationEffect:Ch,PlayAnimationOnClick:Bc,PlayAudioOnClick:fo,PlayableDirector:Fa,PlayerColor:Na,PointerEventData:th,PostProcessingHandler:$a,PreliminaryAction:il,PreliminaryTrigger:fh,RawImage:Sf,Rect:Rx,RectTransform:gn,ReflectionProbe:rs,RegisteredAnimationInfo:oo,RemoteSkybox:Wu,Renderer:qt,RendererLightmap:Kg,Rigidbody:$e,RotationBySpeedModule:Yi,RotationOverLifetimeModule:vn,SceneSwitcher:We,ScreenCapture:Ro,ScreenSpaceAmbientOcclusion:Ts,ScreenSpaceAmbientOcclusionN8:xn,ScrollFollow:Ls,SeeThrough:As,SetActiveOnClick:hy,ShadowCatcher:kh,ShapeModule:jy,SharpeningEffect:Oh,SignalAsset:zu,SignalReceiver:nh,SignalReceiverEvent:ih,SignalTrackHandler:Ic,Size:Ex,SizeBySpeedModule:fi,SizeOverLifetimeModule:Ir,SkinnedMeshRenderer:Zg,SmoothFollow:_f,SpatialGrabRaycaster:mr,SpatialHtml:Ah,SpatialTrigger:bf,SpatialTriggerReceiver:qn,SpectatorCamera:vf,SphereCollider:Za,SplineContainer:Ur,SplineData:Xn,SplineWalker:Ji,Sprite:Ms,SpriteData:Oa,SpriteRenderer:di,SpriteSheet:Ua,SubEmitterSystem:yu,SyncedCamera:Wy,SyncedRoom:Sn,SyncedTransform:mn,TapGestureTrigger:uy,TeleportTarget:of,TestRunner:Gy,TestSimulateUserData:Hy,Text:Lt,TextBuilder:wy,TextExtension:af,TextureSheetAnimationModule:jt,TiltShiftEffect:Jn,ToneMappingEffect:go,TrailModule:Le,TransformData:Ae,TransformGizmo:zr,TriggerBuilder:Tt,TriggerModel:lo,UIRaycastUtils:Rg,UIRootComponent:mh,USDZExporter:Hn,USDZText:ma,USDZUIExtension:Oy,UsageMarker:ch,VariantAction:ly,VelocityOverLifetimeModule:Fe,VerticalLayoutGroup:xy,VideoPlayer:tt,get ViewBox(){return exports.ViewBox},Vignette:Fr,VisibilityAction:ph,Voip:bn,Volume:fl,VolumeParameter:z,VolumeProfile:ff,WebARCameraBackground:Lh,WebARSessionRoot:Vi,WebXR:rf,WebXRImageTracking:Ih,WebXRImageTrackingModel:js,WebXRPlaneTracking:Bs,WebXRTrackedImage:Va,XRControllerFollow:Is,XRControllerModel:vs,XRControllerMovement:Pi,XRFlag:Ui,XRRig:Ef,XRState:Wt,__Ignore:mS},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new Ur,r=1-I.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new Xn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class rD extends de.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-rcR8UYgV.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:f}=d,m=de.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=f,u.index)if(t.index)t.index.array=u.index;else{const b=new c.BufferAttribute(u.index,1,!1);t.setIndex(b)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const aD=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:rD},Symbol.toStringTag,{value:"Module"}));exports.$componentName=Jm;exports.$physicsKey=YC;exports.ActionBuilder=ue;exports.ActionCollection=Cx;exports.ActionModel=ei;exports.Addressables=g0;exports.AlignmentConstraint=oh;exports.AmbientMode=va;exports.Animation=At;exports.AnimationCurve=vh;exports.AnimationExtension=Ju;exports.AnimationTrackHandler=Lc;exports.Animator=ht;exports.AnimatorConditionMode=ni;exports.AnimatorController=bi;exports.AnimatorControllerBuilder=kg;exports.AnimatorControllerParameterType=Zo;exports.AnimatorStateInfo=ql;exports.Antialiasing=xh;exports.Application=pn;exports.AssetDatabase=nw;exports.AssetReference=K;exports.Attractor=dl;exports.AudioExtension=Mr;exports.AudioListener=us;exports.AudioSource=Si;exports.AudioTrackHandler=fs;exports.Avatar=po;exports.AvatarBlink_Simple=Sr;exports.AvatarEyeLook_Rotation=zg;exports.AvatarLoader=fS;exports.AvatarMarker=Oe;exports.AvatarModel=i_;exports.Avatar_Brain_LookAt=jc;exports.Avatar_MouthShapes=ah;exports.Avatar_MustacheShake=Fg;exports.Avatar_POI=hr;exports.Axes=fa;exports.AxesHelper=Ka;exports.BUILD_TIME=xc;exports.BaseUIComponent=Gi;exports.BasicIKConstraint=Vg;exports.BehaviorExtension=yy;exports.BehaviorModel=St;exports.BloomEffect=mf;exports.BoxCollider=qu;exports.BoxGizmo=Tr;exports.BoxHelperComponent=wt;exports.Button=Ds;exports.ButtonsFactory=Ni;exports.CallDirection=$w;exports.CallInfo=cs;exports.Camera=ri;exports.CameraTargetReachedEvent=Dc;exports.Canvas=za;exports.CanvasGroup=mo;exports.CapsuleCollider=bs;exports.ChangeMaterialOnClick=cy;exports.ChangeTransformOnClick=kr;exports.CharacterController=Cr;exports.CharacterControllerInput=Cs;exports.ChromaticAberration=Sh;exports.CircularBuffer=wi;exports.ClearFlags=cr;exports.ClickThrough=Of;exports.ClipExtrapolation=En;exports.Collider=Qi;exports.Collision=e0;exports.CollisionDetectionMode=Bu;exports.ColorAdjustments=Eo;exports.ColorBySpeedModule=hl;exports.ColorOverLifetimeModule=uf;exports.Component=yO;exports.Component$1=R;exports.ComponentLifecycleEvents=Mu;exports.Components=oD;exports.ConnectionEvents=O0;exports.ContactPoint=Jv;exports.ContactShadows=lh;exports.Context=U;exports.ContextArgs=NP;exports.ContextEvent=le;exports.ContextRegistry=ae;exports.ControlTrackHandler=Vu;exports.CursorFollow=Nr;exports.CustomBranding=Rr;exports.CustomShader=ve;exports.DefaultReflectionMode=tu;exports.Deletable=Hg;exports.DeleteBox=ao;exports.DepthOfField=wn;exports.DeviceFlag=Xu;exports.DocumentExtension=pS;exports.DragControls=Jo;exports.DragMode=qg;exports.DropListener=Os;exports.Duplicatable=ey;exports.EffectWrapper=zc;exports.EmissionModule=Rs;exports.EmphasizeOnClick=tl;exports.EngineLoadingView=Nc;exports.EnvironmentScene=$u;exports.EventList=ie;exports.EventListEvent=ju;exports.EventSystem=Ht;exports.EventTrigger=Ku;exports.FieldWithDefault=ox;exports.FileReference=sr;exports.FileReferenceSerializer=_0;exports.FileSpawnModel=sk;exports.File_Event=Kw;exports.FixedJoint=Ay;exports.Fog=rl;exports.FontStyle=vy;exports.FrameEvent=ge;exports.GENERATOR=Ra;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=oy;exports.GltfExportBox=ny;exports.Gradient=Dr;exports.Graphic=yh;exports.GraphicRaycaster=Fu;exports.Graphics=ho;exports.GridHelper=al;exports.GridLayoutGroup=Cy;exports.GroundProjectedEnv=Qn;exports.GroupActionModel=er;exports.HideFlags=xu;exports.HideOnStart=Fi;exports.HingeJoint=bh;exports.HorizontalLayoutGroup=Sy;exports.HorizontalWrapMode=Ix;exports.HostData=oO;exports.Image=gl;exports.ImageReference=nr;exports.ImageReferenceSerializer=y0;exports.InheritVelocityModule=By;exports.Input=w0;exports.InputEventQueue=ii;exports.InputEvents=Pe;exports.InputField=Xy;exports.InstanceHandle=dr;exports.InstancingHandler=_r;exports.InstancingUtil=$i;exports.InstantiateEvent=yw;exports.InstantiateIdProvider=ct;exports.InstantiateOptions=yn;exports.Interactable=Gg;exports.JoinedRoomResponse=G1;exports.KeyEventArgs=B1;exports.Keyframe=ai;exports.LODGroup=cf;exports.LODModel=ll;exports.LeftRoomResponse=H1;exports.Light=Ot;exports.LightData=A0;exports.LimitVelocityOverLifetimeModule=nt;exports.LoadingElementOptions=VA;exports.LogStats=Wg;exports.LogType=_i;exports.LookAt=Qy;exports.LookAtConstraint=xr;exports.MODULES=T;exports.MainModule=It;exports.MarkerTrackHandler=Nu;exports.MarkerType=Ag;exports.MaskableGraphic=_h;exports.MaterialPropertyBlock=ys;exports.Mathf=I;exports.MeshCollider=xo;exports.MeshRenderer=dh;exports.MinMaxCurve=q;exports.MinMaxGradient=Lr;exports.NEEDLE_ENGINE_FEATURE_FLAGS=tg;exports.NEKeyboardEvent=Wl;exports.NEPointerEvent=os;exports.NeedleButtonElement=lS;exports.NeedleEngineWebComponent=t_;exports.NeedleMenu=Kn;exports.NeedlePatchesKey=xd;exports.NeedleXRController=yg;exports.NeedleXRSession=H;exports.NeedleXRSync=G0;exports.NeedleXRUtils=iw;exports.NestedGltf=cl;exports.NetworkConnection=k0;exports.NetworkedStreamEvents=Nn;exports.NetworkedStreams=rh;exports.Networking=Iy;exports.NewInstanceModel=bw;exports.NoiseModule=me;exports.ObjectRaycaster=Wi;exports.ObjectUtils=bo;exports.OffsetConstraint=Ar;exports.OneEuroFilter=vd;exports.OneEuroFilterXYZ=$m;exports.OpenURL=yl;exports.OrbitControls=ce;exports.Outline=ol;exports.OwnershipEvent=M0;exports.OwnershipModel=fg;exports.PUBLIC_KEY=no;exports.Padding=Er;exports.ParticleBurst=gu;exports.ParticleSubEmitter=Fy;exports.ParticleSystem=Uc;exports.ParticleSystemBaseBehaviour=ko;exports.ParticleSystemRenderer=Ki;exports.ParticleSystemShapeType=mu;exports.PeerHandle=ps;exports.PeerNetworking=P0;exports.Physics=ja;exports.PhysicsExtension=_y;exports.PhysicsMaterialCombine=st;exports.PixelationEffect=Ch;exports.PlayAnimationOnClick=Bc;exports.PlayAudioOnClick=fo;exports.PlayableDirector=Fa;exports.PlayerColor=Na;exports.PlayerState=si;exports.PlayerStateEvent=Mx;exports.PlayerSync=py;exports.PlayerView=E0;exports.PlayerViewManager=R0;exports.PointerEventData=th;exports.PointerType=Pu;exports.PostProcessing=W0;exports.PostProcessingEffect=Qe;exports.PostProcessingEffectOrder=et;exports.PostProcessingHandler=$a;exports.Prefabs=Ba;exports.PreliminaryAction=il;exports.PreliminaryTrigger=fh;exports.PrimitiveType=Wa;exports.Progress=oe;exports.PromiseAllWithErrors=Nm;exports.PromiseErrorResult=Up;exports.RGBAColor=te;exports.RapierPhysics=Ma;exports.RawImage=Sf;exports.RaycastOptions=wo;exports.Rect=Rx;exports.RectTransform=gn;exports.ReflectionProbe=rs;exports.RegisteredAnimationInfo=oo;exports.RemoteSkybox=Wu;exports.RenderTexture=Un;exports.RenderTextureSerializer=Ew;exports.Renderer=qt;exports.RendererData=T0;exports.RendererLightmap=Kg;exports.Rigidbody=$e;exports.RigidbodyConstraints=Ve;exports.RoomEvents=Z;exports.RotationBySpeedModule=Yi;exports.RotationOverLifetimeModule=vn;exports.SceneLightSettings=hu;exports.SceneSwitcher=We;exports.ScreenCapture=Ro;exports.ScreenSpaceAmbientOcclusion=Ts;exports.ScreenSpaceAmbientOcclusionN8=xn;exports.ScrollFollow=Ls;exports.SeeThrough=As;exports.SendQueue=cn;exports.SerializationContext=lg;exports.SetActiveOnClick=hy;exports.ShadowCatcher=kh;exports.ShapeModule=jy;exports.ShapeOverlapResult=t0;exports.SharpeningEffect=Oh;exports.SignalAsset=zu;exports.SignalReceiver=nh;exports.SignalReceiverEvent=ih;exports.SignalTrackHandler=Ic;exports.Size=Ex;exports.SizeBySpeedModule=fi;exports.SizeOverLifetimeModule=Ir;exports.SkinnedMeshRenderer=Zg;exports.SmoothFollow=_f;exports.SpatialGrabRaycaster=mr;exports.SpatialHtml=Ah;exports.SpatialTrigger=bf;exports.SpatialTriggerReceiver=qn;exports.SpectatorCamera=vf;exports.SphereCollider=Za;exports.SphereIntersection=xg;exports.SplineContainer=Ur;exports.SplineData=Xn;exports.SplineWalker=Ji;exports.Sprite=Ms;exports.SpriteData=Oa;exports.SpriteRenderer=di;exports.SpriteSheet=Ua;exports.StateMachineBehaviour=cO;exports.StreamEndedEvent=Bg;exports.StreamReceivedEvent=Vw;exports.SubEmitterSystem=yu;exports.SyncedCamera=Wy;exports.SyncedRoom=Sn;exports.SyncedTransform=mn;exports.TapGestureTrigger=uy;exports.TeleportTarget=of;exports.TestRunner=Gy;exports.TestSimulateUserData=Hy;exports.Text=Lt;exports.TextAnchor=qe;exports.TextBuilder=wy;exports.TextExtension=af;exports.TextureSheetAnimationModule=jt;exports.TiltShiftEffect=Jn;exports.Time=N0;exports.ToneMappingEffect=go;exports.TrackHandler=Qa;exports.TrackType=mi;exports.TrailModule=Le;exports.TransformData=Ae;exports.TransformGizmo=zr;exports.TriggerBuilder=Tt;exports.TriggerModel=lo;exports.TypeStore=P;exports.UIRaycastUtils=Rg;exports.UIRootComponent=mh;exports.USDDocument=ry;exports.USDObject=Xe;exports.USDWriter=mx;exports.USDZExporter=gx;exports.USDZExporter$1=Hn;exports.USDZText=ma;exports.USDZUIExtension=Oy;exports.UriSerializer=Rw;exports.UsageMarker=ch;exports.UserJoinedOrLeftRoomModel=q1;exports.VERSION=oi;exports.VariantAction=ly;exports.VelocityOverLifetimeModule=Fe;exports.VerticalLayoutGroup=xy;exports.VerticalWrapMode=Lx;exports.VideoPlayer=tt;exports.ViewDevice=gs;exports.Vignette=Fr;exports.VisibilityAction=ph;exports.Voip=bn;exports.Volume=fl;exports.VolumeParameter=z;exports.VolumeProfile=ff;exports.WaitForFrames=D1;exports.WaitForPromise=v0;exports.WaitForSeconds=cg;exports.Watch=ms;exports.WebARCameraBackground=Lh;exports.WebARSessionRoot=Vi;exports.WebXR=rf;exports.WebXRButtonFactory=co;exports.WebXRImageTracking=Ih;exports.WebXRImageTrackingModel=js;exports.WebXRPlaneTracking=Bs;exports.WebXRTrackedImage=Va;exports.XRControllerFollow=Is;exports.XRControllerModel=vs;exports.XRControllerMovement=Pi;exports.XRFlag=Ui;exports.XRRig=Ef;exports.XRState=Wt;exports.XRStateFlag=jn;exports.__Ignore=mS;exports.__internalNotifyObjectDestroyed=YP;exports.activeInHierarchyFieldName=Fn;exports.addAttributeChangeCallback=Um;exports.addComponent=Gn;exports.addCustomExtensionPlugin=kk;exports.addNewComponent=or;exports.addPatch=wu;exports.apply=ku;exports.applyHMRChanges=gO;exports.applyPrototypeExtensions=L0;exports.beginListenDestroy=_w;exports.beginListenInstantiate=xw;exports.binaryIdentifierCasts=hg;exports.build_scene_functions=zP;exports.builtinComponentKeyName=qo;exports.calculateProgress01=e_;exports.clearMessages=$S;exports.compareAssociation=u0;exports.copyTexture=zv;exports.createMotion=Pw;exports.debugNet=Kt;exports.debugOwner=ta;exports.decompressGpuTexture=vx;exports.deepClone=$c;exports.delay=_s;exports.delayForFrames=Wc;exports.deserializeObject=Jd;exports.destroy=xi;exports.destroyComponentInstance=j0;exports.determineMimeTypeFromExtension=Zw;exports.disposeObjectResources=we;exports.disposeStream=hn;exports.editorGuidKeyName=sc;exports.enableSpatialConsole=_a;exports.exportAsGLTF=tD;exports.findByGuid=Cg;exports.findObjectOfType=qa;exports.findObjectsOfType=F0;exports.findResourceUsers=Sg;exports.fitCamera=Lw;exports.fitObjectIntoVolume=Vv;exports.foreachComponent=pr;exports.foreachComponentEnumerator=Pg;exports.forward=lC;exports.generateQRCode=Z0;exports.generateSeed=ww;exports.getBoundingBox=li;exports.getCameraController=Av;exports.getComponent=vo;exports.getComponentInChildren=Zc;exports.getComponentInParent=Cc;exports.getComponents=Ga;exports.getComponentsInChildren=Ha;exports.getComponentsInParent=Eu;exports.getFormattedDate=dx;exports.getIconElement=at;exports.getIconTexture=am;exports.getLoader=fn;exports.getOrAddComponent=Kc;exports.getParam=x;exports.getParentHierarchyPath=dC;exports.getPath=wS;exports.getPeerOptions=N1;exports.getPeerjsInstance=C0;exports.getResourceUserCount=ZP;exports.getSceneData=z0;exports.getTempColor=jv;exports.getTempQuaternion=ti;exports.getTempVector=F;exports.getUrlParams=Vc;exports.getVisibleInCustomShadowRendering=Nv;exports.getWorldDirection=Bv;exports.getWorldEuler=Hm;exports.getWorldPosition=Y;exports.getWorldQuaternion=pe;exports.getWorldRotation=vu;exports.getWorldScale=je;exports.hasCommercialLicense=Wn;exports.hasIndieLicense=Xc;exports.hasPointerEventComponent=au;exports.hasProLicense=$n;exports.hideDebugConsole=Hv;exports.imageToCanvas=wx;exports.initAddressableSerializers=b0;exports.initBuiltinSerializers=Tw;exports.initEngine=ZA;exports.initPhysics=uS;exports.initVolumeParameterSerializer=zw;exports.instantiate=uo;exports.invokeLoadedImportPluginHooks=sx;exports.invokeXRSessionEnd=K0;exports.invokeXRSessionStart=Y0;exports.isActiveInHierarchy=dw;exports.isActiveSelf=Xa;exports.isAndroidDevice=MS;exports.isAnimationAction=Uv;exports.isComponent=eg;exports.isDebugMode=yS;exports.isDesktop=SS;exports.isDestroyed=fr;exports.isDevEnvironment=A;exports.isDisposed=QP;exports.isExporting=JA;exports.isGLTFModel=Zv;exports.isHostedOnGlitch=vv;exports.isHotReloadEnabled=fm;exports.isHotReloading=pO;exports.isIPad=PS;exports.isIconElement=J0;exports.isLocalNetwork=vi;exports.isMacOS=ES;exports.isMobileDevice=CS;exports.isMozillaXR=kS;exports.isQuest=AS;exports.isResourceTrackingEnabled=ow;exports.isSafari=TS;exports.isUsingInstancing=Lu;exports.isiOS=RS;exports.isiPad=OS;exports.loadAsset=LA;exports.loadPMREM=jg;exports.loadSync=Jy;exports.logHierarchy=qd;exports.lookAtInverse=eC;exports.lookAtObject=Gc;exports.lookAtScreenPoint=tC;exports.makeId=bS;exports.makeIdFromRandomWords=Sv;exports.makeNameSafe=Ci;exports.markAsInstancedRendered=uw;exports.microphonePermissionsGranted=DS;exports.nameof=gS;exports.nameofFactory=wv;exports.needle=cP;exports.offBeforeXRSession=Q0;exports.offXRSessionEnd=X0;exports.offXRSessionStart=q0;exports.onAfterRender=a1;exports.onBeforeRender=r1;exports.onBeforeXRSession=TP;exports.onClear=s1;exports.onDestroy=o1;exports.onInitialized=sg;exports.onStart=Cu;exports.onSyncDestroy=sO;exports.onSyncInstantiate=vw;exports.onUpdate=l0;exports.onXRSessionEnd=bg;exports.onXRSessionStart=Ru;exports.parseSync=rS;exports.placeOnSurface=$v;exports.postprocessFBXMaterials=Qm;exports.prefix=zO;exports.pushState=xv;exports.randomNumber=vS;exports.registerBinaryType=dg;exports.registerComponent=Au;exports.registerComponentExtension=Qg;exports.registerCustomEffectType=Zi;exports.registerExportExtensions=Yg;exports.registerExtensions=uu;exports.registerHotReloadType=Ow;exports.registerLoader=n0;exports.registerPrefabProvider=Sw;exports.registerPrototypeExtensions=mg;exports.registerType=Km;exports.relativePathPrefix=Pv;exports.removeAttributeChangeCallback=zm;exports.removeComponent=gg;exports.removeCustomImportExtensionType=Ek;exports.removePatch=qC;exports.resolveUrl=ws;exports.sanitizeString=Cv;exports.saveImage=nS;exports.screenshot=fA;exports.screenshot2=Zy;exports.sendDestroyed=Og;exports.serializable=p;exports.serializeObject=p0;exports.serializeable=Be;exports.setActive=hc;exports.setAllowBalloonMessages=Ev;exports.setAllowOverlayMessages=US;exports.setAutoFitEnabled=Gd;exports.setCameraController=Vp;exports.setDestroyed=pw;exports.setDevEnvironment=XS;exports.setDisposable=aw;exports.setDontDestroy=ia;exports.setOrAddParamsToUrl=Fp;exports.setParam=_S;exports.setParamWithoutReload=wc;exports.setPeerOptions=V1;exports.setResourceTrackingEnabled=XP;exports.setState=Bm;exports.setVisibleInCustomShadowRendering=Xm;exports.setWorldEuler=qm;exports.setWorldPosition=lt;exports.setWorldPositionXYZ=ur;exports.setWorldQuaternion=un;exports.setWorldQuaternionXYZW=Gm;exports.setWorldRotation=Fv;exports.setWorldRotationXYZ=Hc;exports.setWorldScale=Ea;exports.showBalloonError=qc;exports.showBalloonMessage=Se;exports.showBalloonWarning=fe;exports.showDebugConsole=Ym;exports.slerp=Lv;exports.syncDestroy=Jc;exports.syncField=Ig;exports.syncInstantiate=Mg;exports.textureToCanvas=uC;exports.toSourceId=Ov;exports.tryCastBinary=x0;exports.tryDetermineMimetypeFromBinary=ex;exports.tryDetermineMimetypeFromURL=Jw;exports.tryFindObject=ka;exports.tryGetGuid=S0;exports.unregisterHotReloadType=Mw;exports.unregisterPrefabProvider=aO;exports.unwatchWrite=Fm;exports.useForAutoFit=Dv;exports.validate=Ct;exports.watchWrite=bu;
1732
+ `),Yt&&this._onCreateEffectsDebug(this._composer,o)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const o=new T.POSTPROCESSING.MODULE.EffectPass(i,...e);o.name=e.map(r=>r.name).join(", "),o.mainScene=n,o.enabled=!0,o.renderToScreen=!1,t.addPass(o),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(Yt==="passes"){const i=new T.POSTPROCESSING.MODULE.DepthEffect({blendFunction:T.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});i.name="Depth Effect";const n=new T.POSTPROCESSING.MODULE.EffectPass(t,i);if(n.name="Depth Effect Pass",n.enabled=!1,e.passes.push(n),this._passIndices!==null){const r=[e.passes[0]];this._passIndices.length>0&&r.push(...this._passIndices.filter(a=>a!==0).map(a=>e.passes[a]).filter(a=>a)),r.length>0&&console.log("[PostProcessing] Passes (selected) →",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const o=this.context.menu;if(o&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();const r=document.createElement("select");r.multiple=!0;const a=document.createElement("option");a.innerText="Final Output",a.value="-1",r.appendChild(a);for(const l of e.passes){const h=document.createElement("option");h.innerText=l.name,h.value=`${e.passes.indexOf(l)}`,h.title=l.name,r.appendChild(h)}o.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(h=>parseInt(h.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const sD=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:$a},Symbol.toStringTag,{value:"Module"}));class mS{}const oD=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ue,ActionCollection:Cx,ActionModel:ei,AlignmentConstraint:oh,Animation:At,AnimationCurve:vh,AnimationExtension:Ju,AnimationTrackHandler:Lc,Animator:ht,AnimatorController:bi,AnimatorControllerBuilder:kg,Antialiasing:xh,Attractor:dl,AudioExtension:Mr,AudioListener:us,AudioSource:Si,AudioTrackHandler:fs,Avatar:po,AvatarBlink_Simple:Sr,AvatarEyeLook_Rotation:zg,AvatarLoader:fS,AvatarMarker:Oe,AvatarModel:i_,Avatar_Brain_LookAt:jc,Avatar_MouthShapes:ah,Avatar_MustacheShake:Fg,Avatar_POI:hr,AxesHelper:Ka,BaseUIComponent:Gi,BasicIKConstraint:Vg,BehaviorExtension:yy,BehaviorModel:St,BloomEffect:mf,BoxCollider:qu,BoxGizmo:Tr,BoxHelperComponent:wt,Button:Ds,CallInfo:cs,Camera:ri,CameraTargetReachedEvent:Dc,Canvas:za,CanvasGroup:mo,CapsuleCollider:bs,ChangeMaterialOnClick:cy,ChangeTransformOnClick:kr,CharacterController:Cr,CharacterControllerInput:Cs,ChromaticAberration:Sh,ClickThrough:Of,ColorAdjustments:Eo,ColorBySpeedModule:hl,ColorOverLifetimeModule:uf,ContactShadows:lh,ControlTrackHandler:Vu,CursorFollow:Nr,CustomBranding:Rr,Deletable:Hg,DeleteBox:ao,DepthOfField:wn,DeviceFlag:Xu,DocumentExtension:pS,DragControls:Jo,DropListener:Os,Duplicatable:ey,EffectWrapper:zc,EmissionModule:Rs,EmphasizeOnClick:tl,EnvironmentScene:$u,EventList:ie,EventListEvent:ju,EventSystem:Ht,EventTrigger:Ku,FieldWithDefault:ox,FixedJoint:Ay,Fog:rl,GltfExport:oy,GltfExportBox:ny,Gradient:Dr,Graphic:yh,GraphicRaycaster:Fu,GridHelper:al,GridLayoutGroup:Cy,GroundProjectedEnv:Qn,GroupActionModel:er,HideOnStart:Fi,HingeJoint:bh,HorizontalLayoutGroup:Sy,get HoverAnimation(){return exports.HoverAnimation},Image:gl,InheritVelocityModule:By,InputField:Xy,InstanceHandle:dr,InstancingHandler:_r,Interactable:Gg,Keyframe:ai,LODGroup:cf,LODModel:ll,Light:Ot,LimitVelocityOverLifetimeModule:nt,LogStats:Wg,LookAt:Qy,LookAtConstraint:xr,MainModule:It,MarkerTrackHandler:Nu,MaskableGraphic:_h,MeshCollider:xo,MeshRenderer:dh,MinMaxCurve:q,MinMaxGradient:Lr,NeedleMenu:Kn,NestedGltf:cl,Networking:Iy,NoiseModule:me,ObjectRaycaster:Wi,OffsetConstraint:Ar,OpenURL:yl,OrbitControls:ce,Outline:ol,Padding:Er,ParticleBurst:gu,ParticleSubEmitter:Fy,ParticleSystem:Uc,ParticleSystemRenderer:Ki,PhysicsExtension:_y,PixelationEffect:Ch,PlayAnimationOnClick:Bc,PlayAudioOnClick:fo,PlayableDirector:Fa,PlayerColor:Na,PointerEventData:th,PostProcessingHandler:$a,PreliminaryAction:il,PreliminaryTrigger:fh,RawImage:Sf,Rect:Rx,RectTransform:gn,ReflectionProbe:rs,RegisteredAnimationInfo:oo,RemoteSkybox:Wu,Renderer:qt,RendererLightmap:Kg,Rigidbody:$e,RotationBySpeedModule:Yi,RotationOverLifetimeModule:vn,SceneSwitcher:We,ScreenCapture:Ro,ScreenSpaceAmbientOcclusion:Ts,ScreenSpaceAmbientOcclusionN8:xn,ScrollFollow:Ls,SeeThrough:As,SetActiveOnClick:hy,ShadowCatcher:kh,ShapeModule:jy,SharpeningEffect:Oh,SignalAsset:zu,SignalReceiver:nh,SignalReceiverEvent:ih,SignalTrackHandler:Ic,Size:Ex,SizeBySpeedModule:fi,SizeOverLifetimeModule:Ir,SkinnedMeshRenderer:Zg,SmoothFollow:_f,SpatialGrabRaycaster:mr,SpatialHtml:Ah,SpatialTrigger:bf,SpatialTriggerReceiver:qn,SpectatorCamera:vf,SphereCollider:Za,SplineContainer:Ur,SplineData:Xn,SplineWalker:Ji,Sprite:Ms,SpriteData:Oa,SpriteRenderer:di,SpriteSheet:Ua,SubEmitterSystem:yu,SyncedCamera:Wy,SyncedRoom:Sn,SyncedTransform:mn,TapGestureTrigger:uy,TeleportTarget:of,TestRunner:Gy,TestSimulateUserData:Hy,Text:Lt,TextBuilder:wy,TextExtension:af,TextureSheetAnimationModule:jt,TiltShiftEffect:Jn,ToneMappingEffect:go,TrailModule:Le,TransformData:Ae,TransformGizmo:zr,TriggerBuilder:Tt,TriggerModel:lo,UIRaycastUtils:Rg,UIRootComponent:mh,USDZExporter:Hn,USDZText:ma,USDZUIExtension:Oy,UsageMarker:ch,VariantAction:ly,VelocityOverLifetimeModule:Fe,VerticalLayoutGroup:xy,VideoPlayer:tt,get ViewBox(){return exports.ViewBox},Vignette:Fr,VisibilityAction:ph,Voip:bn,Volume:fl,VolumeParameter:z,VolumeProfile:ff,WebARCameraBackground:Lh,WebARSessionRoot:Vi,WebXR:rf,WebXRImageTracking:Ih,WebXRImageTrackingModel:js,WebXRPlaneTracking:Bs,WebXRTrackedImage:Va,XRControllerFollow:Is,XRControllerModel:vs,XRControllerMovement:Pi,XRFlag:Ui,XRRig:Ef,XRState:Wt,__Ignore:mS},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new Ur,r=1-I.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new Xn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class rD extends de.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-Cb806egV.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,o)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=h=>{o(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:f}=d,m=de.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=f,u.index)if(t.index)t.index.array=u.index;else{const b=new c.BufferAttribute(u.index,1,!1);t.setIndex(b)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const aD=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:rD},Symbol.toStringTag,{value:"Module"}));exports.$componentName=Jm;exports.$physicsKey=YC;exports.ActionBuilder=ue;exports.ActionCollection=Cx;exports.ActionModel=ei;exports.Addressables=g0;exports.AlignmentConstraint=oh;exports.AmbientMode=va;exports.Animation=At;exports.AnimationCurve=vh;exports.AnimationExtension=Ju;exports.AnimationTrackHandler=Lc;exports.Animator=ht;exports.AnimatorConditionMode=ni;exports.AnimatorController=bi;exports.AnimatorControllerBuilder=kg;exports.AnimatorControllerParameterType=Zo;exports.AnimatorStateInfo=ql;exports.Antialiasing=xh;exports.Application=pn;exports.AssetDatabase=nw;exports.AssetReference=K;exports.Attractor=dl;exports.AudioExtension=Mr;exports.AudioListener=us;exports.AudioSource=Si;exports.AudioTrackHandler=fs;exports.Avatar=po;exports.AvatarBlink_Simple=Sr;exports.AvatarEyeLook_Rotation=zg;exports.AvatarLoader=fS;exports.AvatarMarker=Oe;exports.AvatarModel=i_;exports.Avatar_Brain_LookAt=jc;exports.Avatar_MouthShapes=ah;exports.Avatar_MustacheShake=Fg;exports.Avatar_POI=hr;exports.Axes=fa;exports.AxesHelper=Ka;exports.BUILD_TIME=xc;exports.BaseUIComponent=Gi;exports.BasicIKConstraint=Vg;exports.BehaviorExtension=yy;exports.BehaviorModel=St;exports.BloomEffect=mf;exports.BoxCollider=qu;exports.BoxGizmo=Tr;exports.BoxHelperComponent=wt;exports.Button=Ds;exports.ButtonsFactory=Ni;exports.CallDirection=$w;exports.CallInfo=cs;exports.Camera=ri;exports.CameraTargetReachedEvent=Dc;exports.Canvas=za;exports.CanvasGroup=mo;exports.CapsuleCollider=bs;exports.ChangeMaterialOnClick=cy;exports.ChangeTransformOnClick=kr;exports.CharacterController=Cr;exports.CharacterControllerInput=Cs;exports.ChromaticAberration=Sh;exports.CircularBuffer=wi;exports.ClearFlags=cr;exports.ClickThrough=Of;exports.ClipExtrapolation=En;exports.Collider=Qi;exports.Collision=e0;exports.CollisionDetectionMode=Bu;exports.ColorAdjustments=Eo;exports.ColorBySpeedModule=hl;exports.ColorOverLifetimeModule=uf;exports.Component=yO;exports.Component$1=R;exports.ComponentLifecycleEvents=Mu;exports.Components=oD;exports.ConnectionEvents=O0;exports.ContactPoint=Jv;exports.ContactShadows=lh;exports.Context=U;exports.ContextArgs=NP;exports.ContextEvent=le;exports.ContextRegistry=ae;exports.ControlTrackHandler=Vu;exports.CursorFollow=Nr;exports.CustomBranding=Rr;exports.CustomShader=ve;exports.DefaultReflectionMode=tu;exports.Deletable=Hg;exports.DeleteBox=ao;exports.DepthOfField=wn;exports.DeviceFlag=Xu;exports.DocumentExtension=pS;exports.DragControls=Jo;exports.DragMode=qg;exports.DropListener=Os;exports.Duplicatable=ey;exports.EffectWrapper=zc;exports.EmissionModule=Rs;exports.EmphasizeOnClick=tl;exports.EngineLoadingView=Nc;exports.EnvironmentScene=$u;exports.EventList=ie;exports.EventListEvent=ju;exports.EventSystem=Ht;exports.EventTrigger=Ku;exports.FieldWithDefault=ox;exports.FileReference=sr;exports.FileReferenceSerializer=_0;exports.FileSpawnModel=sk;exports.File_Event=Kw;exports.FixedJoint=Ay;exports.Fog=rl;exports.FontStyle=vy;exports.FrameEvent=ge;exports.GENERATOR=Ra;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=oy;exports.GltfExportBox=ny;exports.Gradient=Dr;exports.Graphic=yh;exports.GraphicRaycaster=Fu;exports.Graphics=ho;exports.GridHelper=al;exports.GridLayoutGroup=Cy;exports.GroundProjectedEnv=Qn;exports.GroupActionModel=er;exports.HideFlags=xu;exports.HideOnStart=Fi;exports.HingeJoint=bh;exports.HorizontalLayoutGroup=Sy;exports.HorizontalWrapMode=Ix;exports.HostData=oO;exports.Image=gl;exports.ImageReference=nr;exports.ImageReferenceSerializer=y0;exports.InheritVelocityModule=By;exports.Input=w0;exports.InputEventQueue=ii;exports.InputEvents=Pe;exports.InputField=Xy;exports.InstanceHandle=dr;exports.InstancingHandler=_r;exports.InstancingUtil=$i;exports.InstantiateEvent=yw;exports.InstantiateIdProvider=ct;exports.InstantiateOptions=yn;exports.Interactable=Gg;exports.JoinedRoomResponse=G1;exports.KeyEventArgs=B1;exports.Keyframe=ai;exports.LODGroup=cf;exports.LODModel=ll;exports.LeftRoomResponse=H1;exports.Light=Ot;exports.LightData=A0;exports.LimitVelocityOverLifetimeModule=nt;exports.LoadingElementOptions=VA;exports.LogStats=Wg;exports.LogType=_i;exports.LookAt=Qy;exports.LookAtConstraint=xr;exports.MODULES=T;exports.MainModule=It;exports.MarkerTrackHandler=Nu;exports.MarkerType=Ag;exports.MaskableGraphic=_h;exports.MaterialPropertyBlock=ys;exports.Mathf=I;exports.MeshCollider=xo;exports.MeshRenderer=dh;exports.MinMaxCurve=q;exports.MinMaxGradient=Lr;exports.NEEDLE_ENGINE_FEATURE_FLAGS=tg;exports.NEKeyboardEvent=Wl;exports.NEPointerEvent=os;exports.NeedleButtonElement=lS;exports.NeedleEngineWebComponent=t_;exports.NeedleMenu=Kn;exports.NeedlePatchesKey=xd;exports.NeedleXRController=yg;exports.NeedleXRSession=H;exports.NeedleXRSync=G0;exports.NeedleXRUtils=iw;exports.NestedGltf=cl;exports.NetworkConnection=k0;exports.NetworkedStreamEvents=Nn;exports.NetworkedStreams=rh;exports.Networking=Iy;exports.NewInstanceModel=bw;exports.NoiseModule=me;exports.ObjectRaycaster=Wi;exports.ObjectUtils=bo;exports.OffsetConstraint=Ar;exports.OneEuroFilter=vd;exports.OneEuroFilterXYZ=$m;exports.OpenURL=yl;exports.OrbitControls=ce;exports.Outline=ol;exports.OwnershipEvent=M0;exports.OwnershipModel=fg;exports.PUBLIC_KEY=no;exports.Padding=Er;exports.ParticleBurst=gu;exports.ParticleSubEmitter=Fy;exports.ParticleSystem=Uc;exports.ParticleSystemBaseBehaviour=ko;exports.ParticleSystemRenderer=Ki;exports.ParticleSystemShapeType=mu;exports.PeerHandle=ps;exports.PeerNetworking=P0;exports.Physics=ja;exports.PhysicsExtension=_y;exports.PhysicsMaterialCombine=st;exports.PixelationEffect=Ch;exports.PlayAnimationOnClick=Bc;exports.PlayAudioOnClick=fo;exports.PlayableDirector=Fa;exports.PlayerColor=Na;exports.PlayerState=si;exports.PlayerStateEvent=Mx;exports.PlayerSync=py;exports.PlayerView=E0;exports.PlayerViewManager=R0;exports.PointerEventData=th;exports.PointerType=Pu;exports.PostProcessing=W0;exports.PostProcessingEffect=Qe;exports.PostProcessingEffectOrder=et;exports.PostProcessingHandler=$a;exports.Prefabs=Ba;exports.PreliminaryAction=il;exports.PreliminaryTrigger=fh;exports.PrimitiveType=Wa;exports.Progress=oe;exports.PromiseAllWithErrors=Nm;exports.PromiseErrorResult=Up;exports.RGBAColor=te;exports.RapierPhysics=Ma;exports.RawImage=Sf;exports.RaycastOptions=wo;exports.Rect=Rx;exports.RectTransform=gn;exports.ReflectionProbe=rs;exports.RegisteredAnimationInfo=oo;exports.RemoteSkybox=Wu;exports.RenderTexture=Un;exports.RenderTextureSerializer=Ew;exports.Renderer=qt;exports.RendererData=T0;exports.RendererLightmap=Kg;exports.Rigidbody=$e;exports.RigidbodyConstraints=Ve;exports.RoomEvents=Z;exports.RotationBySpeedModule=Yi;exports.RotationOverLifetimeModule=vn;exports.SceneLightSettings=hu;exports.SceneSwitcher=We;exports.ScreenCapture=Ro;exports.ScreenSpaceAmbientOcclusion=Ts;exports.ScreenSpaceAmbientOcclusionN8=xn;exports.ScrollFollow=Ls;exports.SeeThrough=As;exports.SendQueue=cn;exports.SerializationContext=lg;exports.SetActiveOnClick=hy;exports.ShadowCatcher=kh;exports.ShapeModule=jy;exports.ShapeOverlapResult=t0;exports.SharpeningEffect=Oh;exports.SignalAsset=zu;exports.SignalReceiver=nh;exports.SignalReceiverEvent=ih;exports.SignalTrackHandler=Ic;exports.Size=Ex;exports.SizeBySpeedModule=fi;exports.SizeOverLifetimeModule=Ir;exports.SkinnedMeshRenderer=Zg;exports.SmoothFollow=_f;exports.SpatialGrabRaycaster=mr;exports.SpatialHtml=Ah;exports.SpatialTrigger=bf;exports.SpatialTriggerReceiver=qn;exports.SpectatorCamera=vf;exports.SphereCollider=Za;exports.SphereIntersection=xg;exports.SplineContainer=Ur;exports.SplineData=Xn;exports.SplineWalker=Ji;exports.Sprite=Ms;exports.SpriteData=Oa;exports.SpriteRenderer=di;exports.SpriteSheet=Ua;exports.StateMachineBehaviour=cO;exports.StreamEndedEvent=Bg;exports.StreamReceivedEvent=Vw;exports.SubEmitterSystem=yu;exports.SyncedCamera=Wy;exports.SyncedRoom=Sn;exports.SyncedTransform=mn;exports.TapGestureTrigger=uy;exports.TeleportTarget=of;exports.TestRunner=Gy;exports.TestSimulateUserData=Hy;exports.Text=Lt;exports.TextAnchor=qe;exports.TextBuilder=wy;exports.TextExtension=af;exports.TextureSheetAnimationModule=jt;exports.TiltShiftEffect=Jn;exports.Time=N0;exports.ToneMappingEffect=go;exports.TrackHandler=Qa;exports.TrackType=mi;exports.TrailModule=Le;exports.TransformData=Ae;exports.TransformGizmo=zr;exports.TriggerBuilder=Tt;exports.TriggerModel=lo;exports.TypeStore=P;exports.UIRaycastUtils=Rg;exports.UIRootComponent=mh;exports.USDDocument=ry;exports.USDObject=Xe;exports.USDWriter=mx;exports.USDZExporter=gx;exports.USDZExporter$1=Hn;exports.USDZText=ma;exports.USDZUIExtension=Oy;exports.UriSerializer=Rw;exports.UsageMarker=ch;exports.UserJoinedOrLeftRoomModel=q1;exports.VERSION=oi;exports.VariantAction=ly;exports.VelocityOverLifetimeModule=Fe;exports.VerticalLayoutGroup=xy;exports.VerticalWrapMode=Lx;exports.VideoPlayer=tt;exports.ViewDevice=gs;exports.Vignette=Fr;exports.VisibilityAction=ph;exports.Voip=bn;exports.Volume=fl;exports.VolumeParameter=z;exports.VolumeProfile=ff;exports.WaitForFrames=D1;exports.WaitForPromise=v0;exports.WaitForSeconds=cg;exports.Watch=ms;exports.WebARCameraBackground=Lh;exports.WebARSessionRoot=Vi;exports.WebXR=rf;exports.WebXRButtonFactory=co;exports.WebXRImageTracking=Ih;exports.WebXRImageTrackingModel=js;exports.WebXRPlaneTracking=Bs;exports.WebXRTrackedImage=Va;exports.XRControllerFollow=Is;exports.XRControllerModel=vs;exports.XRControllerMovement=Pi;exports.XRFlag=Ui;exports.XRRig=Ef;exports.XRState=Wt;exports.XRStateFlag=jn;exports.__Ignore=mS;exports.__internalNotifyObjectDestroyed=YP;exports.activeInHierarchyFieldName=Fn;exports.addAttributeChangeCallback=Um;exports.addComponent=Gn;exports.addCustomExtensionPlugin=kk;exports.addNewComponent=or;exports.addPatch=wu;exports.apply=ku;exports.applyHMRChanges=gO;exports.applyPrototypeExtensions=L0;exports.beginListenDestroy=_w;exports.beginListenInstantiate=xw;exports.binaryIdentifierCasts=hg;exports.build_scene_functions=zP;exports.builtinComponentKeyName=qo;exports.calculateProgress01=e_;exports.clearMessages=$S;exports.compareAssociation=u0;exports.copyTexture=zv;exports.createMotion=Pw;exports.debugNet=Kt;exports.debugOwner=ta;exports.decompressGpuTexture=vx;exports.deepClone=$c;exports.delay=_s;exports.delayForFrames=Wc;exports.deserializeObject=Jd;exports.destroy=xi;exports.destroyComponentInstance=j0;exports.determineMimeTypeFromExtension=Zw;exports.disposeObjectResources=we;exports.disposeStream=hn;exports.editorGuidKeyName=sc;exports.enableSpatialConsole=_a;exports.exportAsGLTF=tD;exports.findByGuid=Cg;exports.findObjectOfType=qa;exports.findObjectsOfType=F0;exports.findResourceUsers=Sg;exports.fitCamera=Lw;exports.fitObjectIntoVolume=Vv;exports.foreachComponent=pr;exports.foreachComponentEnumerator=Pg;exports.forward=lC;exports.generateQRCode=Z0;exports.generateSeed=ww;exports.getBoundingBox=li;exports.getCameraController=Av;exports.getComponent=vo;exports.getComponentInChildren=Zc;exports.getComponentInParent=Cc;exports.getComponents=Ga;exports.getComponentsInChildren=Ha;exports.getComponentsInParent=Eu;exports.getFormattedDate=dx;exports.getIconElement=at;exports.getIconTexture=am;exports.getLoader=fn;exports.getOrAddComponent=Kc;exports.getParam=x;exports.getParentHierarchyPath=dC;exports.getPath=wS;exports.getPeerOptions=N1;exports.getPeerjsInstance=C0;exports.getResourceUserCount=ZP;exports.getSceneData=z0;exports.getTempColor=jv;exports.getTempQuaternion=ti;exports.getTempVector=F;exports.getUrlParams=Vc;exports.getVisibleInCustomShadowRendering=Nv;exports.getWorldDirection=Bv;exports.getWorldEuler=Hm;exports.getWorldPosition=Y;exports.getWorldQuaternion=pe;exports.getWorldRotation=vu;exports.getWorldScale=je;exports.hasCommercialLicense=Wn;exports.hasIndieLicense=Xc;exports.hasPointerEventComponent=au;exports.hasProLicense=$n;exports.hideDebugConsole=Hv;exports.imageToCanvas=wx;exports.initAddressableSerializers=b0;exports.initBuiltinSerializers=Tw;exports.initEngine=ZA;exports.initPhysics=uS;exports.initVolumeParameterSerializer=zw;exports.instantiate=uo;exports.invokeLoadedImportPluginHooks=sx;exports.invokeXRSessionEnd=K0;exports.invokeXRSessionStart=Y0;exports.isActiveInHierarchy=dw;exports.isActiveSelf=Xa;exports.isAndroidDevice=MS;exports.isAnimationAction=Uv;exports.isComponent=eg;exports.isDebugMode=yS;exports.isDesktop=SS;exports.isDestroyed=fr;exports.isDevEnvironment=A;exports.isDisposed=QP;exports.isExporting=JA;exports.isGLTFModel=Zv;exports.isHostedOnGlitch=vv;exports.isHotReloadEnabled=fm;exports.isHotReloading=pO;exports.isIPad=PS;exports.isIconElement=J0;exports.isLocalNetwork=vi;exports.isMacOS=ES;exports.isMobileDevice=CS;exports.isMozillaXR=kS;exports.isQuest=AS;exports.isResourceTrackingEnabled=ow;exports.isSafari=TS;exports.isUsingInstancing=Lu;exports.isiOS=RS;exports.isiPad=OS;exports.loadAsset=LA;exports.loadPMREM=jg;exports.loadSync=Jy;exports.logHierarchy=qd;exports.lookAtInverse=eC;exports.lookAtObject=Gc;exports.lookAtScreenPoint=tC;exports.makeId=bS;exports.makeIdFromRandomWords=Sv;exports.makeNameSafe=Ci;exports.markAsInstancedRendered=uw;exports.microphonePermissionsGranted=DS;exports.nameof=gS;exports.nameofFactory=wv;exports.needle=cP;exports.offBeforeXRSession=Q0;exports.offXRSessionEnd=X0;exports.offXRSessionStart=q0;exports.onAfterRender=a1;exports.onBeforeRender=r1;exports.onBeforeXRSession=TP;exports.onClear=s1;exports.onDestroy=o1;exports.onInitialized=sg;exports.onStart=Cu;exports.onSyncDestroy=sO;exports.onSyncInstantiate=vw;exports.onUpdate=l0;exports.onXRSessionEnd=bg;exports.onXRSessionStart=Ru;exports.parseSync=rS;exports.placeOnSurface=$v;exports.postprocessFBXMaterials=Qm;exports.prefix=zO;exports.pushState=xv;exports.randomNumber=vS;exports.registerBinaryType=dg;exports.registerComponent=Au;exports.registerComponentExtension=Qg;exports.registerCustomEffectType=Zi;exports.registerExportExtensions=Yg;exports.registerExtensions=uu;exports.registerHotReloadType=Ow;exports.registerLoader=n0;exports.registerPrefabProvider=Sw;exports.registerPrototypeExtensions=mg;exports.registerType=Km;exports.relativePathPrefix=Pv;exports.removeAttributeChangeCallback=zm;exports.removeComponent=gg;exports.removeCustomImportExtensionType=Ek;exports.removePatch=qC;exports.resolveUrl=ws;exports.sanitizeString=Cv;exports.saveImage=nS;exports.screenshot=fA;exports.screenshot2=Zy;exports.sendDestroyed=Og;exports.serializable=p;exports.serializeObject=p0;exports.serializeable=Be;exports.setActive=hc;exports.setAllowBalloonMessages=Ev;exports.setAllowOverlayMessages=US;exports.setAutoFitEnabled=Gd;exports.setCameraController=Vp;exports.setDestroyed=pw;exports.setDevEnvironment=XS;exports.setDisposable=aw;exports.setDontDestroy=ia;exports.setOrAddParamsToUrl=Fp;exports.setParam=_S;exports.setParamWithoutReload=wc;exports.setPeerOptions=V1;exports.setResourceTrackingEnabled=XP;exports.setState=Bm;exports.setVisibleInCustomShadowRendering=Xm;exports.setWorldEuler=qm;exports.setWorldPosition=lt;exports.setWorldPositionXYZ=ur;exports.setWorldQuaternion=un;exports.setWorldQuaternionXYZW=Gm;exports.setWorldRotation=Fv;exports.setWorldRotationXYZ=Hc;exports.setWorldScale=Ea;exports.showBalloonError=qc;exports.showBalloonMessage=Se;exports.showBalloonWarning=fe;exports.showDebugConsole=Ym;exports.slerp=Lv;exports.syncDestroy=Jc;exports.syncField=Ig;exports.syncInstantiate=Mg;exports.textureToCanvas=uC;exports.toSourceId=Ov;exports.tryCastBinary=x0;exports.tryDetermineMimetypeFromBinary=ex;exports.tryDetermineMimetypeFromURL=Jw;exports.tryFindObject=ka;exports.tryGetGuid=S0;exports.unregisterHotReloadType=Mw;exports.unregisterPrefabProvider=aO;exports.unwatchWrite=Fm;exports.useForAutoFit=Dv;exports.validate=Ct;exports.watchWrite=bu;
@@ -2464,9 +2464,9 @@ Lo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUIL
2464
2464
  Lo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
2465
2465
  Lo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.0-alpha.2";');
2466
2466
  Lo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
2467
- Lo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Mon Apr 20 2026 17:49:16 GMT+0000 (Coordinated Universal Time)";');
2467
+ Lo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Mon Apr 20 2026 16:47:29 GMT+0000 (Coordinated Universal Time)";');
2468
2468
  Lo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
2469
- const Oi = "5.1.0-alpha.2", Bc = "undefined", nu = "Mon Apr 20 2026 17:49:16 GMT+0000 (Coordinated Universal Time)";
2469
+ const Oi = "5.1.0-alpha.2", Bc = "undefined", nu = "Mon Apr 20 2026 16:47:29 GMT+0000 (Coordinated Universal Time)";
2470
2470
  M0 && console.log(`Engine version: ${Oi} (generator: ${Bc})
2471
2471
  Project built at ${nu}`);
2472
2472
  const br = NEEDLE_PUBLIC_KEY, Ps = "needle_isActiveInHierarchy", pa = "builtin_components", Sd = "needle_editor_guid";
@@ -12865,7 +12865,7 @@ function Bm(s, e = !0, t = !0) {
12865
12865
  if (i[jm]) return;
12866
12866
  Rd.push(i);
12867
12867
  const r = i.gameObject;
12868
- i.__internalDisable?.(), i.__internalDestroy?.(), i.gameObject = r;
12868
+ i.__internalDisable(), i.__internalDestroy(), i.gameObject = r;
12869
12869
  return;
12870
12870
  }
12871
12871
  if (s[jm]) return;