@needle-tools/engine 4.8.8-next.e80f4d7 → 4.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +50 -49
- package/dist/{needle-engine.bundle-DfWoUjQM.js → needle-engine.bundle-BdgNRB4B.js} +4 -4
- package/dist/{needle-engine.bundle-DK1r3WiC.umd.cjs → needle-engine.bundle-DGca1cic.umd.cjs} +3 -3
- package/dist/{needle-engine.bundle-IGziSts0.min.js → needle-engine.bundle-TQyyn3pE.min.js} +2 -2
- package/dist/needle-engine.js +2 -2
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/lib/engine/js-extensions/index.d.ts +2 -1
- package/lib/engine/js-extensions/index.js +1 -1
- package/lib/engine/js-extensions/index.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +1 -1
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/OrbitControls.js +2 -2
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/api.d.ts +1 -1
- package/package.json +2 -2
- package/src/engine/js-extensions/index.ts +3 -2
- package/src/engine-components/Camera.ts +1 -1
- package/src/engine-components/OrbitControls.ts +2 -5
- package/src/engine-components/api.ts +1 -1
package/dist/{needle-engine.bundle-DK1r3WiC.umd.cjs → needle-engine.bundle-DGca1cic.umd.cjs}
RENAMED
|
@@ -141,7 +141,7 @@ void main(){
|
|
|
141
141
|
#__vconsole .vc-mask {
|
|
142
142
|
overflow: hidden;
|
|
143
143
|
}
|
|
144
|
-
`,po?.prepend(i),s===!0&&Z_()<=0&&gb(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Fa=!1,Mi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function Yw(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Mi?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}function Kw(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function Zw(){const s=document.querySelector("#__vconsole");return s||null}const yb=x("debugdefines");Ks('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ks('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ks('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ks('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ks('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.8.
|
|
144
|
+
`,po?.prepend(i),s===!0&&Z_()<=0&&gb(),console.log("🌵 Debug console has loaded")}},e.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Fa=!1,Mi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function Yw(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const o=n.indexOf("?");o>-1&&(n=n.substring(0,o));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(h)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Mi?.hide()}}),i.push({name:"Reload",onClick:function(n){const o=e();o&&(o.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const o=e();o.requestFullscreen?o.requestFullscreen():o.webkitRequestFullscreen instanceof Function&&o.webkitRequestFullscreen()}}),t(i)}),s}function Kw(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function Zw(){const s=document.querySelector("#__vconsole");return s||null}const yb=x("debugdefines");Ks('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ks('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ks('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ks('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ks('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.8.9";');Ks('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ks('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Sep 05 2025 14:43:18 GMT+0000 (Coordinated Universal Time)";');Ks('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ki="4.8.9",Ad="undefined",Xp="Fri Sep 05 2025 14:43:18 GMT+0000 (Coordinated Universal Time)";yb&&console.log(`Engine version: ${Ki} (generator: ${Ad})
|
|
145
145
|
Project built at ${Xp}`);const Fr=NEEDLE_PUBLIC_KEY,os="needle_isActiveInHierarchy",wo="builtin_components",wl="needle_editor_guid";function Ks(s){try{(0,eval)(s)}catch(e){yb&&console.error(e)}}let _b,ny=null;function Ji(){return _b}function Qp(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}ny!==s&&(ny=s,_b=new s)}const ii=Symbol("shadowDomOwner"),Jw=x("debugpatch");function Ld(s,e,t,i){const n=Jw===e;if(!t&&!i)return;const o=e+"___needle";tS(s,e,t,i);const r=Object.getOwnPropertyDescriptor(s,e),a=s[e];n&&console.log("Patch",s.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",s.constructor.name,e,r),typeof r.value=="function"&&(s[e]=oy(r.value,s,e))):(n&&console.log("Create patch with new property",s.constructor.name,e,r),Object.defineProperty(s,e,{set:function(l){if(typeof l=="function")this[o]=oy(l,s,e);else{const h=this[o];bb(s,e,this,h,l),this[o]=l,vb(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function eS(s,e,t){const i=Yp(s,e);if(i)for(let n=i.length-1;n>=0;n--){const o=i[n];o.prefix===t&&(o.prefix=null),o.postfix===t&&(o.postfix=null),!o.prefix&&!o.postfix&&i.splice(n,1)}}const sy=Symbol("Needle:Patches:WrappedFunction");function oy(s,e,t){if(s[sy])return s;const i=function(...n){bb(e,t,this,...n);const o=s.apply(this,n);return vb(e,t,this,o,...n),o};return i[sy]=!0,i}const Lh="Needle:Patches";function Xf(){return globalThis[Lh]||(globalThis[Lh]=new WeakMap),globalThis[Lh]}function Yp(s,e){const t=Xf().get(s);return t?t.get(e):null}function tS(s,e,t,i){let n=Xf().get(s);n||(n=new Map,Xf().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function bb(s,e,t,...i){if(!t)return;const n=Yp(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function vb(s,e,t,i,...n){if(!t)return;const o=Yp(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}const ta=[];function Dd(s){ta.indexOf(s)===-1&&ta.push(s)}function iS(s){const e=ta.indexOf(s);e!==-1&&ta.splice(e,1)}const ia=[];function Kp(s){ia.indexOf(s)===-1&&ia.push(s)}function nS(s){const e=ia.indexOf(s);e!==-1&&ia.splice(e,1)}function xb(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:s}));for(let e=0;e<ta.length;e++)ta[e](s)}function wb(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:s}));for(let e=0;e<ia.length;e++)ia[e](s)}const He=x("debuginput");var Id=(s=>(s.Mouse="mouse",s.Touch="touch",s.Controller="controller",s.Hand="hand",s))(Id||{}),xe=(s=>(s.PointerDown="pointerdown",s.PointerUp="pointerup",s.PointerMove="pointermove",s.KeyDown="keydown",s.KeyUp="keyup",s.KeyPressed="keypress",s))(xe||{});class Qn extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new c.Ray(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),He&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class nl extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class sS{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var Nt=(s=>(s[s.Early=-100]="Early",s[s.Default=0]="Default",s[s.Late=100]="Late",s))(Nt||{});class Sb{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const o=this._eventListeners[e],r=o.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(o.push({priority:n,listeners:[{callback:t,options:i}]}),o.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const o=n.find(a=>a.priority===i.queue);if(!o)return;const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}else for(const o of n){const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof nl){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}if(e instanceof Qn){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}if(e.immediatePropagationStopped){t=!0,He&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,He&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const o of e)if(i===o){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new c.Vector2];_pointerPositionsLastFrame=[new c.Vector2];_pointerPositionsDelta=[new c.Vector2];_pointerPositionsRC=[new c.Vector2];_pointerPositionDown=[new c.Vector3];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":He&&Se("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":He&&Se("Create Pointer move"),this.onMove(e);break;case"pointerup":He&&Se("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&exports.DeviceUtilities.isMozillaXR()?!0:(He&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)!==!1&&e instanceof PointerEvent&&e.pointerType};keysPressed={};onKeyDown=e=>{if(He&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new nl("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new nl("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new nl("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);He&&Se(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new Qn("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),o=new Qn("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(o)};onPointerCancel=e=>{this.context.isInAR||(He&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new Qn("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,He&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Qn("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Qn("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=new Qn("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(o),this._pointerIds[n]=-1}};tempNearPlaneVector=new c.Vector3;tempFarPlaneVector=new c.Vector3;tempLookMatrix=new c.Matrix4;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new c.Object3D,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const o=this.context.mainCamera;if(o){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(o),a.unproject(o);const l=o.worldUp||V(0,1,0).applyQuaternion(ue(o));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,o=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return He&&!o&&console.log("Not in rect",t,i,n),o}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${t}`,He?e:""),He&&console.log(e.pointerType,"DOWN",t),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new c.Vector3);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){He&&console.log(e.pointerType,"UP",t,"was not down");return}He&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let l=this._pointerEventsPressed.length-1;l>=0;l--)if(this._pointerEventsPressed[l].pointerId===t){this._pointerEventsPressed.splice(l,1);break}if(!this._pointerPositionDown[t]){He&&he("Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const n=this._pointerUpTime[t],o=this._pointerDownTime[t],r=this.context.time.realtimeSinceStartup,a=r-o;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=r,a<1){let l=e.clientX-this._pointerPositionDown[t].x,h=e.clientY-this._pointerPositionDown[t].y,d=0;if(e.isSpatial&&e.clientZ!=null&&(d=e.clientZ-this._pointerPositionDown[t].z,l*=200,h*=200,d*=200),Math.abs(l)<5&&Math.abs(h)<5&&Math.abs(d)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const u=r-n;He&&console.log("CLICK",t,l,h,d,u),u<this._doubleClickTimeThreshold&&u>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new c.Vector2);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new c.Vector2);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let o=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const d=e.source;o===0&&d.movementX!==0&&(o=d.movementX||0),r===0&&d.movementY!==0&&(r=d.movementY||0)}n.x+=o,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new c.Vector2);const h=this._pointerPositionsRC[t];h.set(a,l),this.convertScreenspaceToRaycastSpace(h)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(He&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=F.Current;try{F.Current=this.context,this.dispatchEvent(e)}finally{F.Current=t}}}const Gr=new c.Matrix4().makeRotationY(Math.PI),Pi=new c.Quaternion().setFromAxisAngle(new c.Vector3(0,1,0),Math.PI),oS=x("debugwebxr");class rS{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new c.Object3D,this.gameObject.name="Implicit XR Rig",oS){const e=sm(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const Un=x("debugwebxr"),eh=x("debugcustomgesture"),aS="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",lS="generic-trigger",cS=new c.Quaternion().setFromEuler(new c.Euler(c.MathUtils.degToRad(0),c.MathUtils.degToRad(-90),c.MathUtils.degToRad(-90))),hS=new c.Vector3(.04,-.04,0);class Zp{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new c.Matrix4;_gripPosition=new c.Vector3;_gripQuaternion=new c.Quaternion;_linearVelocity=new c.Vector3;_rayPositionRaw=new c.Vector3;_rayRotationRaw=new c.Quaternion;_rayMatrix=new c.Matrix4;_rayPosition=new c.Vector3;_rayQuaternion=new c.Quaternion;get gripPosition(){return V(this._gripPosition)}get gripQuaternion(){return qi(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return V(this._linearVelocity).applyQuaternion(Pi)}get rayPosition(){return V(this._rayPosition)}get rayQuaternion(){return qi(this._rayQuaternion)}get gripWorldPosition(){return V(this._gripWorldPosition)}_gripWorldPosition=new c.Vector3;get gripWorldQuaternion(){return qi(this._gripWorldQuaternion)}_gripWorldQuaternion=new c.Quaternion;get rayWorldPosition(){return V(this._rayWorldPosition)}_rayWorldPosition=new c.Vector3;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return qi(this._rayWorldQuaternion)}_rayWorldQuaternion=new c.Quaternion;get pinchPosition(){return V(this._pinchPosition)}_pinchPosition=new c.Vector3;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?ue(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Pi),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(V(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=V(0,1,0).applyQuaternion(e.quaternion),i=V(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new c.AxesHelper(.15);_debugGripAxesHelper=new c.AxesHelper(.07);_debugRayAxesHelper=new c.AxesHelper(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new c.Object3D,this._object.name=`NeedleXRController_${i}`,Un&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new c.Object3D,this._raySpaceObject=new c.Object3D,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new c.Ray,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){B.DrawSphere(this.rayWorldPosition,.003),B.DrawDirection(this.rayWorldPosition,V(0,0,10).applyQuaternion(this.rayWorldQuaternion));const t=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),i=this.inputSource.profiles.join(`
|
|
146
146
|
`);let n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
|
|
147
147
|
C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(n+=`
|
|
@@ -946,7 +946,7 @@ ${t.path}! : AssetReference;
|
|
|
946
946
|
Could not find method ${r.method} on object ${l.name}. Please rename ${r.method} to ${p}?
|
|
947
947
|
`,l[p],`
|
|
948
948
|
in script: `,l),he("EventList methods must start with lowercase letter, see console for details");return}else console.warn(`EventList method:
|
|
949
|
-
Could not find method ${r.method} on object ${l.name}`,l,typeof l[r.method])};if(typeof l[r.method]!="function"){let p=!1,m=l;for(;m;){const y=Object.getOwnPropertyDescriptor(m,r.method);if(y&&(y.writable===!0||y.set)){p=!0;break}m=Object.getPrototypeOf(m)}!p&&(A()||st)&&d()}}if(l){let d=r.argument;if(d!==void 0?d=a(d):r.arguments!==void 0&&(d=r.arguments.map(a)),!l[r.method])console.warn(`EventList method not found: "${r.method}" on ${l?.name}`);else{d!==void 0&&!Array.isArray(d)&&(d=[d]);const p=new es(l,r.method,d,r.enabled);i.push(p)}}else A()&&console.warn(`[Dev] EventList: Could not find event listener in scene (${t.object?.name})`,r)}const n=new ae(i);st&&console.log(n);const o=t.target;return o!==void 0&&t.path!==void 0&&n.setEventTarget(t.path,o),n}}}const E1=new R1,pd=new WeakMap,T1=c.Texture.prototype.clone;c.Texture.prototype.clone=function(){const s=T1.call(this);return pd.has(s)||pd.set(s,this),s};class H0 extends Fi{constructor(){super([xn,c.WebGLRenderTarget])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof c.Texture&&t.type===xn){let i=e;pd.has(i)&&(i=pd.get(i)),i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof c.CompressedTexture&&(i.isCompressedTexture=!1,i.format=c.RGBAFormat);const n=new xn(i.image.width,i.image.height,{colorSpace:c.LinearSRGBColorSpace});return n.texture=i,n}}}new H0;class q0 extends Fi{constructor(){super([URL])}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e=="string"&&e.length>0)return Ys(t.gltfId,e)}}new q0;var A1=Object.defineProperty,L1=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&A1(e,t,n),n};class la extends k{awake(){Dt.createIfNoneExists(this.context)}onEnable(){Dt.get(this.context)?.register(this)}onDisable(){Dt.get(this.context)?.unregister(this)}}class ci extends la{targets=null;raycastHits=[];ignoreSkinnedMeshes=!1;start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??=new Js,e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;const t=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=n=>n instanceof c.SkinnedMesh?"continue in children":t?t(n):!0);const i=this.context.physics.raycast(e);return e.testObject=t,i}}L1([f()],ci.prototype,"ignoreSkinnedMeshes");class qd extends ci{constructor(){super(),this.ignoreSkinnedMeshes=!0}}class Ho extends la{static allow=!0;performRaycast(e){if(!H.active||!Ho.allow||!e?.ray)return null;const t=e.ray.origin;return this.context.physics.sphereOverlap(t,.015,!1,!0)}}class wm{static getObject(e){const t=e[ii];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(t&&(t.canvasGroup=void 0,t.graphic=void 0),e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;const i=this.tryFindCanvasGroup(e);if(i?.isCanvasGroup===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Wo(e,o=>{if(o.isGraphic===!0)return o},!1);return t&&n?.isGraphic===!0&&(t.graphic=n),!(n?.raycastTarget===!1||n?.layer===2)}static tryFindCanvasGroup(e){if(!e)return null;const t=Wo(e,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}}function Sm(s){const e=s[ii];return e||(s.parent?Sm(s.parent):null)}function D1(s){return s.isUI===!0||typeof s[ii]=="object"}function md(s,e){if(!s)return;const t=s.material;if(t?.isMaterial===!0){const i=s.parent;i&&i.isText,t.side=e.doubleSided??!0?c.DoubleSide:c.FrontSide,t.shadowSide=e.doubleSided?c.DoubleSide:c.FrontSide,s.castShadow=e.castShadows?e.castShadows:!1,s.receiveShadow=e.receiveShadows?e.receiveShadows:!1}for(const i of s.children)md(i,e)}function Lr(s,e,t){s[e]===void 0&&console.warn("Field",e,"is undefined on",s);const i=Proxy.revocable(s[e],{set(r,a,l,h){const d=r[a],u=Reflect.set(r,a,l,h);return t(l,d),u}}),n=i.revoke,o=s[e];return i.revoke=()=>{s[e]=o,n()},s[e]=i.proxy,i}const Qy=Symbol("Scheduled action");function I1(s,e,t=pe.OnBeforeRender){let i=s[Qy];i||(i=s[Qy]={});const n=e.name;i[t]||(i[t]={});const o=i[t];if(o[n])return;function*a(){e?.call(s),o[n]=null}const l=s.startCoroutine(a(),t);o[n]=l}const Ts=x("debugeventsystem");var gp=(s=>(s.BeforeHandleInput="BeforeHandleInput",s.AfterHandleInput="AfterHandleInput",s))(gp||{});I0(s=>{Dt.createIfNoneExists(s)});class Dt extends k{static ensureUpdateMeshUI(e,t,i=!1){za.update(e,t,i)}static markUIDirty(e){za.markDirty()}static createIfNoneExists(e){e.scene.getComponent(Dt)||e.scene.addComponent(Dt)}static get(e){return this.createIfNoneExists(e),e.scene.getComponent(Dt)}static get instance(){return this.get(F.Current)}raycaster=[];register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){const t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(la)||this.context.scene.addComponent(ci)}onEnable(){this.context.input.addEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.addEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.addEventListener(xe.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerMove,this.onPointerEvent)}pressedByID=new Map;hoveredByID=new Map;onBeforeRender(){this.resetMeshUIStates()}onPointerEvent=e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;const t=new fc(this.context.input,e);this._currentPointerEventName=e.type,t.inputSource=this.context.input,t.isClick=e.isClick,t.isDoubleClick=e.isDoubleClick,t.isDown=e.type==xe.PointerDown,t.isUp=e.type==xe.PointerUp,t.isPressed=this.context.input.getPointerPressed(e.pointerId);const i=new Js;e.hasRay?i.ray=e.ray:i.screenPoint=this.context.input.getPointerPositionRC(e.pointerId),i.allowSlowRaycastFallback=e.isClick||e.isDoubleClick;const n=this.performRaycast(i);if(Ts&&(t.isDown?console.log("DOWN",{id:t.pointerId,hits:n.length}):t.isUp&&console.log("UP",{id:t.pointerId,hits:n.length}),t.isClick&&console.log("CLICK",{id:t.pointerId,hits:n.length})),n){for(const r of n)r.event=e,e.intersections.push(r);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:n})}Ts&&t.isClick&&Se("EventSystem: "+t.pointerId+" - "+this.context.time.frame+" - Up:"+t.isUp+", Down:"+t.isDown);const o={sender:this,args:t,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:o})),this.handleIntersections(n,t),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:o}))};_sortedHits=[];_testObjectsCache=new Map;_currentlyActiveRaycaster=null;_currentPointerEventName=null;shouldRaycastObject=e=>{const t=e&&"getComponent"in e?e.getComponent(la):null;if(t&&t!=this._currentlyActiveRaycaster)return!1;let i=null;if(D1(e)&&(i=e[ii]?.gameObject),this._testObjectsCache.has(e)||i&&this._testObjectsCache.has(i))return this._testObjectsCache.get(e)===!1?"continue in children":!0;{let o=fd(e,this._currentPointerEventName);if(!o&&i&&(o=fd(i,this._currentPointerEventName)),o){this._testObjectsCache.set(e,!0);for(const r of e.children)this.shouldRaycastObject_AddToYesCache(r);return!0}return this._testObjectsCache.set(e,!1),"continue in children"}};shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(const t of e.children)this.shouldRaycastObject_AddToYesCache(t)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e.testObject=this.shouldRaycastObject;for(const t of this.raycaster){if(!t.activeAndEnabled)continue;this._currentlyActiveRaycaster=t;const i=t.performRaycast(e);this._currentlyActiveRaycaster=null,i&&i.length>0&&this._sortedHits.push(...i)}return this._sortedHits.sort((t,i)=>t.distance-i.distance),this._sortedHits}assignHitInformation(e,t){t?(e.intersection=t,e.point=t.point,e.normal=t.normal,e.face=t.face,e.distance=t.distance,e.instanceId=t.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,t){if(e?.length){e=this.sortCandidates(e);for(const n of e){if(t.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(t,n),this.handleEventOnObject(n.object,t))return!0}}this.assignHitInformation(t,e?.[0]),this.invokePointerCapture(t);const i=this.hoveredByID.get(t.pointerId);return i&&this.propagatePointerExit(i.obj,i.data,null),this.hoveredByID.delete(t.pointerId),t.isUp&&(this.pressedByID.get(t.pointerId)?.handlers.forEach(n=>this.invokeOnPointerUp(t,n)),this.pressedByID.delete(t.pointerId)),!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t<e.length;t++){const i=e[t],n=i.object;if(n.material&&n.material.depthTest===!1){this._noDepthTestingResults.push(i);continue}this._sortingBuffer.push(i)}for(const t of this._sortingBuffer)this._noDepthTestingResults.push(t);return this._noDepthTestingResults}out={};handleEventOnObject(e,t){if(!this.testIsVisible(e))return t.isClick&&Ts&&console.log("not allowed",e),!1;if(t.pointerId===void 0)return Ts&&console.error("Event without pointer can't be handled",t),!1;t.object=e;const i=e.parent,n=t.isClick??!1;let o=null;if(i&&i.isUI){const d=(t.isPressed||t.isClick)??!1;if(i[ii]){const u=i[ii].gameObject;if(u){if(!wm.isInteractable(u,this.out))return!1;o=this.out.canvasGroup??null,this.handleMeshUIIntersection(e,d),e=u}}}n&&Ts&&console.log(this.context.time.frame,e);const r=this.hoveredByID.get(t.pointerId),a=r?.obj;a!==e&&a&&this.propagatePointerExit(a,r.data,e);const h=this.hoveredByID.get(t.pointerId);if(h?(h.obj=e,h.data=t):this.hoveredByID.set(t.pointerId,{obj:e,data:t}),t.isDown){const d=this.pressedByID.get(t.pointerId);d?(d.obj=e,d.data=t):this.pressedByID.set(t.pointerId,{obj:e,data:t,handlers:new Set})}return(o===null||o.interactable)&&this.handleMainInteraction(e,t,a??null),!0}propagate(e,t){for(;e;)S.foreachComponent(e,i=>{t(i)},!1),e=e.parent}handleMainInteraction(e,t,i){const n=this.pressedByID.get(t.pointerId),o=i!==e;let r=!0;switch(t.event.pointerType){case"mouse":case"touch":const a=this.context.input.getPointerPositionLastFrame(t.pointerId),l=this.context.input.getPointerPosition(t.pointerId);r=a&&!D.approximately(a,l);break}this.propagate(e,a=>{const l=a;l.interactable!==!1&&(!l.activeAndEnabled||!l.enabled||(l.onPointerEnter&&o&&this.handlePointerEnter(l,t),t.isDown&&l.onPointerDown&&(l.onPointerDown(t),n?.handlers.add(l),this.handlePointerCapture(t,l)),l.onPointerMove&&(r&&l.onPointerMove(t),this.handlePointerCapture(t,l)),t.isUp&&(l.onPointerUp&&(this.invokeOnPointerUp(t,l),n?.handlers.delete(l)),l.onPointerExit&&t.event?.pointerType===Id.Touch&&(this.handlePointerExit(l,t),this.hoveredByID.delete(t.pointerId))),t.isClick&&l.onPointerClick&&l.onPointerClick(t)))}),t.isUp&&(n?.handlers.forEach(a=>{this.invokeOnPointerUp(t,a)}),this.pressedByID.delete(t.pointerId))}propagatePointerExit(e,t,i){this.propagate(e,n=>{if(!n.gameObject||n.destroyed)return;const o=n;if(o.onPointerExit||o.onPointerEnter){if(i&&this.isChild(i,n.gameObject))return;this.handlePointerExit(o,t)}})}invokeOnPointerUp(e,t){t.onPointerUp?.call(t,e),this.releasePointerCapture(e,t)}handlePointerEnter(e,t){e.onPointerEnter&&this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(t),this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,t){e.onPointerExit&&this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(t),this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,t,i,n){let o=e[i];if(n)return o&&o.includes(t)?!1:(o=o||[],o.push(t),e[i]=o,!0);{if(!o||!o.includes(t))return!1;const r=o.indexOf(t);return r!==-1&&o.splice(r,1),!0}}_capturedPointer={};handlePointerCapture(e,t){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;const i=e.pointerId;if(t.onPointerMove){const n=this._capturedPointer[i]||[];n.push(t),this._capturedPointer[i]=n}else A()&&!t.z__warned_no_pointermove&&(t.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,t))}releasePointerCapture(e,t){const i=e.pointerId;if(this._capturedPointer[i]){const n=this._capturedPointer[i].indexOf(t);n!==-1&&(this._capturedPointer[i].splice(n,1),Ts&&console.log("released pointer capture",i,t,this._capturedPointer))}}invokePointerCapture(e){if(e.event.type===xe.PointerMove){const t=e.pointerId,i=this._capturedPointer[t];if(i){Ts&&console.log("Captured",t,i);for(let n=0;n<i.length;n++){const o=i[n];if(o.destroyed){i.splice(n,1),n--;continue}o.onPointerMove?.call(o,e)}}}}pointerEnterSymbol=Symbol("pointerEnter");pointerExitSymbol=Symbol("pointerExit");isChild(e,t){return!e||!t?!1:e===t?!0:e.parent?this.isChild(e.parent,t):!1}handleMeshUiObjectWithoutShadowDom(e,t){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,t)}currentActiveMeshUIComponents=[];handleMeshUIIntersection(e,t){const i=za.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&za.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){const t=this.currentActiveMeshUIComponents[e];za.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?S.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}}class za{static lastSelected=null;static lastUpdateFrame=[];static needsUpdate=!1;static markDirty(){this.needsUpdate=!0}static update(e,t,i=!1){if(i){e.update();return}const n=t.time.frameCount;for(const o of this.lastUpdateFrame)if(o.context===t){if(n===o.frame)return;o.frame=n;let r=this.needsUpdate||n<1;o.nextUpdate<=n&&(r=!0),r&&(Ts&&console.log("Update threemeshui"),this.needsUpdate=!1,o.nextUpdate=n+60,e.update());return}this.lastUpdateFrame=[{context:t,frame:n,nextUpdate:n+60}],e.update(),this.needsUpdate=!1}static updateState(e,t){let i=null;if(e&&(i=this.findBlockOrTextInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const e=this.lastSelected;e&&(this.lastSelected=null,this.resetState(e))}static resetState(e){e&&(this.needsUpdate=!0)}static findBlockOrTextInParent(e){return e?e.isBlock||e.isText?e:this.findBlockOrTextInParent(e.parent):null}}var j1=Object.defineProperty,Ce=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&j1(e,t,n),n};const wi=x("debugorbit"),sf=x("freecam"),Na=x("debugcamerafit"),dh=x("smoothcam"),B1={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let of;class Vl extends CustomEvent{constructor(e,t){super("target-reached",{detail:{controls:e,type:t}})}}class de extends k{get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener("start",e)}autoTarget=!0;autoFit=!1;enableRotate=!0;autoRotate=!1;autoRotateSpeed=1;minAzimuthAngle=1/0;maxAzimuthAngle=1/0;minPolarAngle=0;maxPolarAngle=Math.PI;enableKeys=!1;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;zoomSpeed=1;zoomToCursor=!1;enablePan=!0;lookAtConstraint=null;lookAtConstraint01=1;allowInterrupt=!0;middleClickToFocus=!0;doubleClickToFocus=!0;clickBackgroundToFitScene=2;get targetElement(){return this._controls?.domElement??this._targetElement}set targetElement(e){this._targetElement=e,this._controls&&this._controls.domElement!==e&&(this._controls.disconnect(),this._controls.domElement=e,this._controls.connect())}_targetElement=null;debugLog=!1;get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}targetLerpDuration=1;rotateLeft(e){this._controls?._rotateLeft(e)}rotateUp(e){this._controls?._rotateUp(e)}pan(e,t){this._controls?._pan(e,t)}zoomIn(e){e>0?this._controls?._dollyIn(1-e):e<0&&this._controls?._dollyOut(1+e)}_controls=null;_cameraObject=null;_lookTargetLerpActive=!1;_lookTargetStartPosition=new c.Vector3;_lookTargetEndPosition=new c.Vector3;_lookTargetLerp01=0;_lookTargetLerpDuration=0;_cameraLerpActive=!1;_cameraStartPosition=new c.Vector3;_cameraEndPosition=new c.Vector3;_cameraLerp01=0;_cameraLerpDuration=0;_fovLerpActive=!1;_fovLerpStartValue=0;_fovLerpEndValue=0;_fovLerp01=0;_fovLerpDuration=0;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;_eventSystem;_afterHandleInputFn;_camera=null;_syncedTransform;_didSetTarget=0;awake(){wi&&console.debug("OrbitControls",this),this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._eventSystem=Dt.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(gp.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){this._controls?.dispose(),this._eventSystem?.removeEventListener(gp.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const e=S.getComponent(this.gameObject,Vt);this._camera=e;let t=e?.threeCamera;if(!t&&this.gameObject instanceof c.PerspectiveCamera&&(t=this.gameObject),t&&Gf(t,this,!0),!this._controls&&t instanceof c.Object3D){this._cameraObject=t;const i=this.targetElement??this.context.renderer.domElement,n=t?.quaternion.clone();this._controls=new q.OrbitControls(t,i),t?.quaternion.copy(n),of===void 0&&(of={...this._controls.keys});const o=X(t),r=this.gameObject.worldForward,l=o.clone().sub(r.multiplyScalar(2.5));this._controls.target.copy(l)}if(this._controls)if(sf&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,exports.DeviceUtilities.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),this._controls.addEventListener("endMovement",this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=S.getComponent(this.gameObject,tn)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener("pointerdown",this._onPointerDown,{queue:Nt.Early}),this.context.input.addEventListener("pointerdown",this._onPointerDownLate,{queue:Nt.Late}),this.context.input.addEventListener("pointerup",this._onPointerUp,{queue:Nt.Early}),this.context.input.addEventListener("pointerup",this._onPointerUpLate,{queue:Nt.Late})}onDisable(){if(this._camera?.threeCamera&&Gf(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted),this._controls.removeEventListener("endMovement",this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener("pointerdown",this._onPointerDown),this.context.input.removeEventListener("pointerdown",this._onPointerDownLate),this.context.input.removeEventListener("pointerup",this._onPointerUp),this.context.input.removeEventListener("pointerup",this._onPointerUpLate)}_activePointerEvents;_lastTimeClickOnBackground=-1;_clickOnBackgroundCount=0;_onPointerDown=e=>{this._activePointerEvents.push(e)};_onPointerDownLate=e=>{e.used&&this._controls&&(this._controls.enabled=!1)};_onPointerUp=e=>{for(let t=this._activePointerEvents.length-1;t>=0;t--){const i=this._activePointerEvents[t];if(i.pointerId===e.pointerId&&i.button===e.button){this._activePointerEvents.splice(t,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){const t=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||t<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}wi&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}};_onPointerUpLate=e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()};updateTargetNow(e){const t=new c.Ray(this._cameraObject?.worldPosition,this._cameraObject?.worldForward.multiplyScalar(-1)),i=this.context.physics.raycastFromRay(t,e),n=i.length>0?i[0]:void 0;n&&n.distance>this.minZoom&&n.distance<this.maxZoom&&(wi&&B.DrawWireSphere(n.point,.1,16711680,2),this._controls?.target.copy(i[0].point))}_orbitStartAngle=0;_zoomStartDistance=0;onControlsChangeStarted=()=>{this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle(),this._zoomStartDistance=this._controls.getDistance()),this._syncedTransform&&this._syncedTransform.requestOwnership()};onControlsChangeEnded=()=>{if(this._controls&&this.autoTarget){const t=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(t)<.01?(wi&&console.debug("OrbitControls: Update target",{deltaAngle:t}),this.updateTargetNow({allowSlowRaycastFallback:!1})):wi&&console.debug("OrbitControls: No target update",{deltaAngle:t})}};_shouldDisable=!1;afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onPausedChanged(e){this._controls&&e&&(this._controls.enabled=!1)}onBeforeRender(){if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&this.context.input.getPointerPositionDelta(0)?.length())&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const t=S.getComponent(this.gameObject,Vt);if(t&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const i=X(t.threeCamera),n=Math.max(.01,i.length()),o=new c.Vector3(0,0,-n).applyMatrix4(t.threeCamera.matrixWorld);wi&&B.DrawLine(i,o,5592575,10),this.setLookTargetPosition(o,!0)}if(!this.setLookTargetFromConstraint()){const i=new Js;i.screenPoint=new c.Vector2(0,0),i.lineThreshold=.1;const n=this.context.physics.raycast(i);n.length>0&&this.setLookTargetPosition(n[0].point,!0),Na&&console.log("OrbitControls hits",...n)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Vl(this,"camera"));else{const t=D.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,t)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1),this._lookTargetLerpActive=!1,this.dispatchEvent(new Vl(this,"lookat"));else{const t=D.easeInOutCubic(this._lookTargetLerp01);this.lerpLookTarget(this._lookTargetStartPosition,this._lookTargetEndPosition,t)}if(this._fovLerpActive&&this._cameraObject){const t=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)t.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{const i=D.easeInOutCubic(this._fovLerp01);t.fov=D.lerp(this._fovLerpStartValue,this._fovLerpEndValue,i)}t.updateProjectionMatrix()}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(t=>t.used),this._controls.keys=this.enableKeys?of:B1,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,sf||(this._camera?.threeCamera?.type==="PerspectiveCamera"?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof dh=="number"||dh===!0){this._controls.enableDamping=!0;const t=typeof dh=="number"?dh:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,t))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!sf&&this.lookAtConstraint?.locked&&!this._lookTargetLerpActive&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(this.context.time.deltaTime),wi&&B.DrawWireSphere(this._controls.target,.1,65280))}}__onPreRender=()=>{const e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:"y",immediate:!0,objects:this.scene.children}))};setCameraAndLookTarget(e,t=!1){if(!e)return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is null"),!1;if(!(e instanceof c.Object3D)&&!(e instanceof Vt))return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera"),!1;e instanceof Vt&&(e=e.gameObject);const i=e.worldPosition,n=e.worldForward;e instanceof c.Camera&&(wi&&console.debug("[OrbitControls] setCameraAndLookTarget flip forward direction for camera"),n.multiplyScalar(-1));const o=new c.Ray(i,n);return wi&&B.DrawRay(o.origin,o.direction,16711680,10),this.setTargetFromRaycast(o,t)||this.setLookTargetPosition(o.at(2,V()),t),this.setCameraTargetPosition(i,t),!0}setCameraTargetPosition(e,t=!1){e&&(e instanceof c.Object3D&&(e=X(e)),this._cameraEndPosition||(this._cameraEndPosition=new c.Vector3),this._cameraEndPosition.copy(e),t===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy(this._cameraObject?.position),typeof t=="number"?this._cameraLerpDuration=t:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,t=!1){if(!this._controls||typeof e!="number")return;const i=this._camera?.threeCamera;i&&(t===!0?i.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=i.fov,this._fovLerpEndValue=e,typeof t=="number"?this._fovLerpDuration=t:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,t=!1){this._controls&&e&&(e instanceof c.Object3D&&(e=X(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,wi&&(console.warn("OrbitControls: setLookTargetPosition",e,t),B.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),t===!0?this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof t=="number"?this._lookTargetLerpDuration=t:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=0,t=1){if(!this._controls||this.lookAtConstraint?.enabled===!1)return!1;const i=this.lookAtConstraint?.sources;if(i&&i.length>0){const n=i[e];if(n)return n.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._controls.target,this._lookTargetEndPosition,t),!0}return!1}lerpLookTarget(e,t,i){this._controls&&(i>=1?this._controls.target.copy(t):this._controls.target.lerpVectors(e,t,i),this.lookAtConstraint&&this.lookAtConstraint.setConstraintPosition(this._controls.target))}setTargetFromRaycast(e,t=!1){if(!this.controls)return!1;const i=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(const n of i)if(n.distance>0&&S.isActiveInHierarchy(n.object)){const o=Sm(n.object);if(o&&o.canvas?.screenspace)break;return this.setLookTargetPosition(n.point,t),!0}return!1}fitCamera(e,t){if(this.context.isInXR){console.warn("[OrbitControls] Can not fit camera while XR session is active");return}let i;if(Array.isArray(e)?i=e:e&&"type"in e?i=e.children:e&&typeof e=="object"&&!(e instanceof c.Object3D)&&!Array.isArray(e)&&(t=e,i=t.objects),i&&!Array.isArray(i)&&(i=i.children),(!Array.isArray(i)||i&&i.length<=0)&&(i=this.context.scene.children),!Array.isArray(i)||i.length<=0){console.warn("No objects to fit camera to...");return}const n=this._cameraObject,o=this._controls;if(!n||!o){console.warn("No camera or controls found to fit camera to objects...");return}t||(t={});const{immediate:r=!1,centerCamera:a,cameraNearFar:l="auto",fitOffset:h=1.1,fov:d=n?.fov}=t,u=new c.Vector3,p=new c.Vector3,m=Wt(i,void 0,this._camera?.threeCamera?.layers),y=m.clone();m.getCenter(p);const b=new c.Vector3;if(m.getSize(b),n.updateMatrixWorld(),m.applyMatrix4(n.matrixWorldInverse),m.getSize(u),m.setFromCenterAndSize(p,u),Number.isNaN(u.x)||Number.isNaN(u.y)||Number.isNaN(u.z)){console.warn("Camera fit size resultet in NaN",n,m,[...i]);return}if(u.length()<=1e-10){Na&&console.warn("Camera fit size is zero",m,[...i]);return}const g=d,v=2*Math.atan(Math.tan(g*Math.PI/360/2)*n.aspect)/Math.PI*360,_=u.y/(2*Math.atan(Math.PI*g/360)),w=u.x/(2*Math.atan(Math.PI*v/360)),T=h*Math.max(_,w)+u.z/2;Na&&console.log("Fit camera to objects",{fitHeightDistance:_,fitWidthDistance:w,distance:T,verticalFov:g,horizontalFov:v}),this.maxZoom=T*10,this.minZoom=T*.01;const O=.05,M=p.clone();if(M.y-=u.y*O,t.targetOffset&&(t.targetOffset.x!==void 0&&(M.x+=t.targetOffset.x),t.targetOffset.y!==void 0&&(M.y+=t.targetOffset.y),t.targetOffset.z!==void 0&&(M.z+=t.targetOffset.z)),t.relativeTargetOffset&&(t.relativeTargetOffset.x!==void 0&&(M.x+=t.relativeTargetOffset.x*u.x),t.relativeTargetOffset.y!==void 0&&(M.y+=t.relativeTargetOffset.y*u.y),t.relativeTargetOffset.z!==void 0&&(M.z+=t.relativeTargetOffset.z*u.z)),this.setLookTargetPosition(M,r),this.setFieldOfView(t.fov,r),l==null||l=="auto"){const z=S.findObjectOfType(An),$=z?z.radius:0,E=Math.max(b.x,b.y,b.z,$);n.near=T/100,n.far=E+T*10,n.updateProjectionMatrix(),z&&(this.maxZoom=Math.max(Math.min(this.maxZoom,$*.5),T))}const R=o.getDistance();R<this.minZoom&&(this.minZoom=R*.9),R>this.maxZoom&&(this.maxZoom=R*1.1);const j=p.clone();t.fitDirection?j.sub(new c.Vector3().copy(t.fitDirection).multiplyScalar(1e6)):j.sub(n.worldPosition),a==="y"&&(j.y=0),j.normalize(),j.multiplyScalar(T),a==="y"&&(j.y+=-O*4*T);let L=p.clone().sub(j);t.cameraOffset&&(t.cameraOffset.x!==void 0&&(L.x+=t.cameraOffset.x),t.cameraOffset.y!==void 0&&(L.y+=t.cameraOffset.y),t.cameraOffset.z!==void 0&&(L.z+=t.cameraOffset.z)),t.relativeCameraOffset&&(t.relativeCameraOffset.x!==void 0&&(L.x+=t.relativeCameraOffset.x*u.x),t.relativeCameraOffset.y!==void 0&&(L.y+=t.relativeCameraOffset.y*u.y),t.relativeCameraOffset.z!==void 0&&(L.z+=t.relativeCameraOffset.z*u.z)),n.parent&&(L=n.parent.worldToLocal(L)),this.setCameraTargetPosition(L,r),(Na||t.debug)&&(B.DrawWireBox3(m,16777011,10),B.DrawWireBox3(y,65280,10),!this._haveAttachedKeyboardEvents&&Na&&(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",z=>{if(z.code==="KeyF"){let $;this._cameraObject instanceof c.PerspectiveCamera&&($=Math.random()*Math.random()*170+10),this.fitCamera({objects:i,fitOffset:h,immediate:!1,fov:$})}z.code==="KeyV"&&this._cameraObject instanceof c.PerspectiveCamera&&(this._cameraObject.fov=60)}))),this.onBeforeRender()}_haveAttachedKeyboardEvents=!1}Ce([f()],de.prototype,"autoTarget");Ce([f()],de.prototype,"autoFit");Ce([f()],de.prototype,"enableRotate");Ce([f()],de.prototype,"autoRotate");Ce([f()],de.prototype,"autoRotateSpeed");Ce([f()],de.prototype,"minAzimuthAngle");Ce([f()],de.prototype,"maxAzimuthAngle");Ce([f()],de.prototype,"minPolarAngle");Ce([f()],de.prototype,"maxPolarAngle");Ce([f()],de.prototype,"enableKeys");Ce([f()],de.prototype,"enableDamping");Ce([f()],de.prototype,"dampingFactor");Ce([f()],de.prototype,"enableZoom");Ce([f()],de.prototype,"minZoom");Ce([f()],de.prototype,"maxZoom");Ce([f()],de.prototype,"zoomSpeed");Ce([f()],de.prototype,"enablePan");Ce([f(nr)],de.prototype,"lookAtConstraint");Ce([f()],de.prototype,"lookAtConstraint01");Ce([f()],de.prototype,"allowInterrupt");Ce([f()],de.prototype,"middleClickToFocus");Ce([f()],de.prototype,"doubleClickToFocus");Ce([f()],de.prototype,"clickBackgroundToFitScene");Ce([f()],de.prototype,"targetLerpDuration");var F1=Object.defineProperty,U1=Object.getOwnPropertyDescriptor,It=(s,e,t,i)=>{for(var n=i>1?void 0:i?U1(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&&F1(e,t,n),n},Fo=(s=>(s[s.None=0]="None",s[s.Skybox=1]="Skybox",s[s.SolidColor=2]="SolidColor",s[s.Uninitialized=4]="Uninitialized",s))(Fo||{});const As=x("debugcam"),Yy=x("debugscreenpointtoray"),xt=class ll extends k{get isCamera(){return!0}get aspect(){return this._cam instanceof c.PerspectiveCamera?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof c.PerspectiveCamera&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof c.PerspectiveCamera?this._cam.fov:this._fov}set fieldOfView(e){const t=this.fieldOfView!=e;if(this._fov=e,t&&this._cam&&this._cam instanceof c.PerspectiveCamera){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(t||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(t||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e=="string")switch(e){case"skybox":e=1;break;case"solidcolor":e=2;break;default:e=0;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}_backgroundBlurriness=void 0;set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}_backgroundIntensity=void 0;set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}_backgroundRotation=void 0;set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}_environmentIntensity=void 0;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||(this._backgroundColor=new Z(1,1,1,1)),this._backgroundColor.copy(e),(!("alpha"in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}_targetTexture=null;_backgroundColor;_fov;_cam=null;_clearFlags=2;_skybox;get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}static _origin=new c.Vector3;static _direction=new c.Vector3;screenPointToRay(e,t,i){const n=this.threeCamera,o=ll._origin;o.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(o),Yy&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",o.x.toFixed(2),o.y.toFixed(2),"isInXR:"+this.context.isInXR),o.z=-1,o.unproject(n);const r=ll._direction.set(o.x,o.y,o.z),a=X(n);return r.sub(a),r.normalize(),i?(i.set(a,r),i):new c.Ray(a.clone(),r.clone())}_frustum;getFrustum(){return this._frustum||(this._frustum=new c.Frustum,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new c.Frustum),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,t){return t&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}_projScreenMatrix=new c.Matrix4;awake(){Yy&&window.addEventListener("pointerdown",e=>{const t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));const n=this.screenPointToRay(t,i),o="#"+Math.floor(Math.random()*16777215).toString(16);B.DrawRay(n.origin,n.direction,o,10)})}onEnable(){As&&console.log(`Camera enabled: "${this.name}". ClearFlags=${Fo[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),N1(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onLeaveXR(e){this.fieldOfView=this._fov}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const t=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),t?.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let t=null;if(e?(t=this.gameObject,t?.layers.enableAll(),t instanceof c.PerspectiveCamera&&(this._fov=t.fov)):t=this.gameObject.children[0],t&&t.isCamera)t instanceof c.PerspectiveCamera&&(this._fov&&(t.fov=this._fov),t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new c.PerspectiveCamera(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(t.fov=this.fieldOfView),this.gameObject.add(t);else{const i=this.orthographicSize*100;t=new c.OrthographicCamera(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){if(!this._cam){As&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this.fieldOfView,As){const i=`[Camera] Apply ClearFlags: ${Fo[this._clearFlags]} - "${this.name}"`;console.debug(i)}const t=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");switch(this._clearFlags){case 0:return;case 1:if(ll.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||e?.applySkybox===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute("background-blurriness")?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:As&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute("background-intensity")&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute("background-rotation")?this.context.scene.backgroundRotation=this._backgroundRotation:As&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor&&!t){let i=this._backgroundColor.alpha;ll.backgroundShouldBeTransparent(this.context)&&(i=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.xr?.isVR?this.context.renderer.setClearColor(rb(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,i)}else this._backgroundColor||As&&console.warn(`[Camera] has no background color "${this.name}" `);break;case 4:t||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||(this._skybox=new z1(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){const t=e.renderer.xr?.getSession();if(!t)return!1;if(typeof t._transparent=="boolean")return t._transparent;const i=t.environmentBlendMode;As&&Se("Environment blend mode: "+i+" on "+navigator.userAgent);let n=i==="additive"||i==="alpha-blend";return e.isInAR&&i==="opaque"&&(navigator.userAgent?.includes("OculusBrowser")||navigator.userAgent?.includes("Mozilla")&&navigator.userAgent?.includes("Mobile WebXRViewer/v2"))&&(n=!0),t._transparent=n,n}};It([f()],xt.prototype,"aspect",1);It([f()],xt.prototype,"fieldOfView",1);It([f()],xt.prototype,"nearClipPlane",1);It([f()],xt.prototype,"farClipPlane",1);It([f()],xt.prototype,"clearFlags",1);It([f()],xt.prototype,"orthographic",2);It([f()],xt.prototype,"orthographicSize",2);It([f()],xt.prototype,"ARBackgroundAlpha",2);It([f()],xt.prototype,"cullingMask",1);It([f()],xt.prototype,"backgroundBlurriness",1);It([f()],xt.prototype,"backgroundIntensity",1);It([f(c.Euler)],xt.prototype,"backgroundRotation",1);It([f()],xt.prototype,"environmentIntensity",1);It([f(Z)],xt.prototype,"backgroundColor",1);It([f(xn)],xt.prototype,"targetTexture",1);let Vt=xt;class z1{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}apply(){if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){const e=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");As&&console.debug(`[Camera] Apply Skybox ${this._skybox?.name} ${e} - "${this._camera.name}"`),e?.length||(this._skybox.mapping=c.EquirectangularReflectionMapping,this.context.scene.background=this._skybox)}}}function N1(s){x("freecam")&&s.context.mainCameraComponent===s&&S.getOrAddComponent(s.gameObject,de)}class ts extends k{get listener(){return this._listener==null&&(this._listener=new c.AudioListener),this._listener}_listener=null;onEnable(){en.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){en.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}onInteraction=()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()};addListenerIfItExists(){const e=this._listener;if(!e||e?.parent)return;const t=this.context.mainCameraComponent||S.getComponentInParent(this.gameObject,Vt);t?.threeCamera?t.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){const e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}}var V1=Object.defineProperty,$1=Object.getOwnPropertyDescriptor,on=(s,e,t,i)=>{for(var n=i>1?void 0:i?$1(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&&V1(e,t,n),n};const lt=x("debugaudio"),Ui=class Ls extends k{static get userInteractionRegistered(){return en.userInteractionRegistered}static registerWaitForAllowAudio(e){en.registerWaitForInteraction(e)}clip="";playOnAwake=!1;preload=!0;playInBackground=!0;get isPlaying(){return this.sound?.isPlaying??!1}get duration(){return this.sound?.buffer?.duration}get time01(){const e=this.duration;return e&&this.sound?this.sound?.context.currentTime/e:0}set time01(e){const t=this.duration;t&&this.sound&&(this.time=e*t)}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(lt&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}_volume=1;set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;_audioElement=null;get Sound(){if(!this.sound&&Ls.userInteractionRegistered){let e=this.gameObject.getComponent(ts)??this.context.mainCamera.getComponent(ts)??lc(ts,this.context,!1);!e&&this.context.mainCamera&&(e=this.context.mainCamera.addComponent(ts)),e?.listener?(this.sound=new c.PositionalAudio(e.listener),this.gameObject?.add(this.sound)):lt&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){return this.sound?.context}awake(){lt&&console.log("[AudioSource]",this),this.audioLoader=new c.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),Ls.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():Ls.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(Qf.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(Qf.MuteChanged,this.onApplicationMuteChanged),this.pause()}onVisibilityChanged=()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||exports.DeviceUtilities.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":lt&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,Ls.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&Ls.userInteractionRegistered&&this.wasPlaying&&this.play();break}};onApplicationMuteChanged=()=>{this.context.application.muted?this.sound?.setVolume(0):this.sound?.setVolume(this.volume)};createAudio=e=>{if(this.destroyed){lt&&console.warn("AudioSource destroyed, not creating audio",this.name);return}lt&&console.log("AudioBuffer finished loading",e);const t=this.Sound;if(!t){lt&&console.warn("Failed getting sound?",this.name);return}t.isPlaying&&t.stop(),e&&t.setBuffer(e),t.loop=this._loop,this.context.application.muted?t.setVolume(0):t.setVolume(this.volume),t.autoplay=this.shouldPlay&&Ls.userInteractionRegistered,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),Ls.registerWaitForAllowAudio(this.__onAllowAudioCallback)};__onAllowAudioCallback=()=>{this.shouldPlay&&this.play()};applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const t=D.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(lt&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?lt&&!this.helper&&(this.helper=new q.PositionalAudioHelper(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(lt&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new c.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===e){lt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,lt&&console.log("load audio",e);const t=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),t&&this.createAudio(t)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(A()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
|
|
949
|
+
Could not find method ${r.method} on object ${l.name}`,l,typeof l[r.method])};if(typeof l[r.method]!="function"){let p=!1,m=l;for(;m;){const y=Object.getOwnPropertyDescriptor(m,r.method);if(y&&(y.writable===!0||y.set)){p=!0;break}m=Object.getPrototypeOf(m)}!p&&(A()||st)&&d()}}if(l){let d=r.argument;if(d!==void 0?d=a(d):r.arguments!==void 0&&(d=r.arguments.map(a)),!l[r.method])console.warn(`EventList method not found: "${r.method}" on ${l?.name}`);else{d!==void 0&&!Array.isArray(d)&&(d=[d]);const p=new es(l,r.method,d,r.enabled);i.push(p)}}else A()&&console.warn(`[Dev] EventList: Could not find event listener in scene (${t.object?.name})`,r)}const n=new ae(i);st&&console.log(n);const o=t.target;return o!==void 0&&t.path!==void 0&&n.setEventTarget(t.path,o),n}}}const E1=new R1,pd=new WeakMap,T1=c.Texture.prototype.clone;c.Texture.prototype.clone=function(){const s=T1.call(this);return pd.has(s)||pd.set(s,this),s};class H0 extends Fi{constructor(){super([xn,c.WebGLRenderTarget])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof c.Texture&&t.type===xn){let i=e;pd.has(i)&&(i=pd.get(i)),i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof c.CompressedTexture&&(i.isCompressedTexture=!1,i.format=c.RGBAFormat);const n=new xn(i.image.width,i.image.height,{colorSpace:c.LinearSRGBColorSpace});return n.texture=i,n}}}new H0;class q0 extends Fi{constructor(){super([URL])}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e=="string"&&e.length>0)return Ys(t.gltfId,e)}}new q0;var A1=Object.defineProperty,L1=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&A1(e,t,n),n};class la extends k{awake(){Dt.createIfNoneExists(this.context)}onEnable(){Dt.get(this.context)?.register(this)}onDisable(){Dt.get(this.context)?.unregister(this)}}class ci extends la{targets=null;raycastHits=[];ignoreSkinnedMeshes=!1;start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??=new Js,e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;const t=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=n=>n instanceof c.SkinnedMesh?"continue in children":t?t(n):!0);const i=this.context.physics.raycast(e);return e.testObject=t,i}}L1([f()],ci.prototype,"ignoreSkinnedMeshes");class qd extends ci{constructor(){super(),this.ignoreSkinnedMeshes=!0}}class Ho extends la{static allow=!0;performRaycast(e){if(!H.active||!Ho.allow||!e?.ray)return null;const t=e.ray.origin;return this.context.physics.sphereOverlap(t,.015,!1,!0)}}class wm{static getObject(e){const t=e[ii];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(t&&(t.canvasGroup=void 0,t.graphic=void 0),e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;const i=this.tryFindCanvasGroup(e);if(i?.isCanvasGroup===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Wo(e,o=>{if(o.isGraphic===!0)return o},!1);return t&&n?.isGraphic===!0&&(t.graphic=n),!(n?.raycastTarget===!1||n?.layer===2)}static tryFindCanvasGroup(e){if(!e)return null;const t=Wo(e,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}}function Sm(s){const e=s[ii];return e||(s.parent?Sm(s.parent):null)}function D1(s){return s.isUI===!0||typeof s[ii]=="object"}function md(s,e){if(!s)return;const t=s.material;if(t?.isMaterial===!0){const i=s.parent;i&&i.isText,t.side=e.doubleSided??!0?c.DoubleSide:c.FrontSide,t.shadowSide=e.doubleSided?c.DoubleSide:c.FrontSide,s.castShadow=e.castShadows?e.castShadows:!1,s.receiveShadow=e.receiveShadows?e.receiveShadows:!1}for(const i of s.children)md(i,e)}function Lr(s,e,t){s[e]===void 0&&console.warn("Field",e,"is undefined on",s);const i=Proxy.revocable(s[e],{set(r,a,l,h){const d=r[a],u=Reflect.set(r,a,l,h);return t(l,d),u}}),n=i.revoke,o=s[e];return i.revoke=()=>{s[e]=o,n()},s[e]=i.proxy,i}const Qy=Symbol("Scheduled action");function I1(s,e,t=pe.OnBeforeRender){let i=s[Qy];i||(i=s[Qy]={});const n=e.name;i[t]||(i[t]={});const o=i[t];if(o[n])return;function*a(){e?.call(s),o[n]=null}const l=s.startCoroutine(a(),t);o[n]=l}const Ts=x("debugeventsystem");var gp=(s=>(s.BeforeHandleInput="BeforeHandleInput",s.AfterHandleInput="AfterHandleInput",s))(gp||{});I0(s=>{Dt.createIfNoneExists(s)});class Dt extends k{static ensureUpdateMeshUI(e,t,i=!1){za.update(e,t,i)}static markUIDirty(e){za.markDirty()}static createIfNoneExists(e){e.scene.getComponent(Dt)||e.scene.addComponent(Dt)}static get(e){return this.createIfNoneExists(e),e.scene.getComponent(Dt)}static get instance(){return this.get(F.Current)}raycaster=[];register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){const t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(la)||this.context.scene.addComponent(ci)}onEnable(){this.context.input.addEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.addEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.addEventListener(xe.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(xe.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(xe.PointerMove,this.onPointerEvent)}pressedByID=new Map;hoveredByID=new Map;onBeforeRender(){this.resetMeshUIStates()}onPointerEvent=e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;const t=new fc(this.context.input,e);this._currentPointerEventName=e.type,t.inputSource=this.context.input,t.isClick=e.isClick,t.isDoubleClick=e.isDoubleClick,t.isDown=e.type==xe.PointerDown,t.isUp=e.type==xe.PointerUp,t.isPressed=this.context.input.getPointerPressed(e.pointerId);const i=new Js;e.hasRay?i.ray=e.ray:i.screenPoint=this.context.input.getPointerPositionRC(e.pointerId),i.allowSlowRaycastFallback=e.isClick||e.isDoubleClick;const n=this.performRaycast(i);if(Ts&&(t.isDown?console.log("DOWN",{id:t.pointerId,hits:n.length}):t.isUp&&console.log("UP",{id:t.pointerId,hits:n.length}),t.isClick&&console.log("CLICK",{id:t.pointerId,hits:n.length})),n){for(const r of n)r.event=e,e.intersections.push(r);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:n})}Ts&&t.isClick&&Se("EventSystem: "+t.pointerId+" - "+this.context.time.frame+" - Up:"+t.isUp+", Down:"+t.isDown);const o={sender:this,args:t,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:o})),this.handleIntersections(n,t),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:o}))};_sortedHits=[];_testObjectsCache=new Map;_currentlyActiveRaycaster=null;_currentPointerEventName=null;shouldRaycastObject=e=>{const t=e&&"getComponent"in e?e.getComponent(la):null;if(t&&t!=this._currentlyActiveRaycaster)return!1;let i=null;if(D1(e)&&(i=e[ii]?.gameObject),this._testObjectsCache.has(e)||i&&this._testObjectsCache.has(i))return this._testObjectsCache.get(e)===!1?"continue in children":!0;{let o=fd(e,this._currentPointerEventName);if(!o&&i&&(o=fd(i,this._currentPointerEventName)),o){this._testObjectsCache.set(e,!0);for(const r of e.children)this.shouldRaycastObject_AddToYesCache(r);return!0}return this._testObjectsCache.set(e,!1),"continue in children"}};shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(const t of e.children)this.shouldRaycastObject_AddToYesCache(t)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e.testObject=this.shouldRaycastObject;for(const t of this.raycaster){if(!t.activeAndEnabled)continue;this._currentlyActiveRaycaster=t;const i=t.performRaycast(e);this._currentlyActiveRaycaster=null,i&&i.length>0&&this._sortedHits.push(...i)}return this._sortedHits.sort((t,i)=>t.distance-i.distance),this._sortedHits}assignHitInformation(e,t){t?(e.intersection=t,e.point=t.point,e.normal=t.normal,e.face=t.face,e.distance=t.distance,e.instanceId=t.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,t){if(e?.length){e=this.sortCandidates(e);for(const n of e){if(t.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(t,n),this.handleEventOnObject(n.object,t))return!0}}this.assignHitInformation(t,e?.[0]),this.invokePointerCapture(t);const i=this.hoveredByID.get(t.pointerId);return i&&this.propagatePointerExit(i.obj,i.data,null),this.hoveredByID.delete(t.pointerId),t.isUp&&(this.pressedByID.get(t.pointerId)?.handlers.forEach(n=>this.invokeOnPointerUp(t,n)),this.pressedByID.delete(t.pointerId)),!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t<e.length;t++){const i=e[t],n=i.object;if(n.material&&n.material.depthTest===!1){this._noDepthTestingResults.push(i);continue}this._sortingBuffer.push(i)}for(const t of this._sortingBuffer)this._noDepthTestingResults.push(t);return this._noDepthTestingResults}out={};handleEventOnObject(e,t){if(!this.testIsVisible(e))return t.isClick&&Ts&&console.log("not allowed",e),!1;if(t.pointerId===void 0)return Ts&&console.error("Event without pointer can't be handled",t),!1;t.object=e;const i=e.parent,n=t.isClick??!1;let o=null;if(i&&i.isUI){const d=(t.isPressed||t.isClick)??!1;if(i[ii]){const u=i[ii].gameObject;if(u){if(!wm.isInteractable(u,this.out))return!1;o=this.out.canvasGroup??null,this.handleMeshUIIntersection(e,d),e=u}}}n&&Ts&&console.log(this.context.time.frame,e);const r=this.hoveredByID.get(t.pointerId),a=r?.obj;a!==e&&a&&this.propagatePointerExit(a,r.data,e);const h=this.hoveredByID.get(t.pointerId);if(h?(h.obj=e,h.data=t):this.hoveredByID.set(t.pointerId,{obj:e,data:t}),t.isDown){const d=this.pressedByID.get(t.pointerId);d?(d.obj=e,d.data=t):this.pressedByID.set(t.pointerId,{obj:e,data:t,handlers:new Set})}return(o===null||o.interactable)&&this.handleMainInteraction(e,t,a??null),!0}propagate(e,t){for(;e;)S.foreachComponent(e,i=>{t(i)},!1),e=e.parent}handleMainInteraction(e,t,i){const n=this.pressedByID.get(t.pointerId),o=i!==e;let r=!0;switch(t.event.pointerType){case"mouse":case"touch":const a=this.context.input.getPointerPositionLastFrame(t.pointerId),l=this.context.input.getPointerPosition(t.pointerId);r=a&&!D.approximately(a,l);break}this.propagate(e,a=>{const l=a;l.interactable!==!1&&(!l.activeAndEnabled||!l.enabled||(l.onPointerEnter&&o&&this.handlePointerEnter(l,t),t.isDown&&l.onPointerDown&&(l.onPointerDown(t),n?.handlers.add(l),this.handlePointerCapture(t,l)),l.onPointerMove&&(r&&l.onPointerMove(t),this.handlePointerCapture(t,l)),t.isUp&&(l.onPointerUp&&(this.invokeOnPointerUp(t,l),n?.handlers.delete(l)),l.onPointerExit&&t.event?.pointerType===Id.Touch&&(this.handlePointerExit(l,t),this.hoveredByID.delete(t.pointerId))),t.isClick&&l.onPointerClick&&l.onPointerClick(t)))}),t.isUp&&(n?.handlers.forEach(a=>{this.invokeOnPointerUp(t,a)}),this.pressedByID.delete(t.pointerId))}propagatePointerExit(e,t,i){this.propagate(e,n=>{if(!n.gameObject||n.destroyed)return;const o=n;if(o.onPointerExit||o.onPointerEnter){if(i&&this.isChild(i,n.gameObject))return;this.handlePointerExit(o,t)}})}invokeOnPointerUp(e,t){t.onPointerUp?.call(t,e),this.releasePointerCapture(e,t)}handlePointerEnter(e,t){e.onPointerEnter&&this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(t),this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,t){e.onPointerExit&&this.updatePointerState(e,t.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(t),this.updatePointerState(e,t.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,t,i,n){let o=e[i];if(n)return o&&o.includes(t)?!1:(o=o||[],o.push(t),e[i]=o,!0);{if(!o||!o.includes(t))return!1;const r=o.indexOf(t);return r!==-1&&o.splice(r,1),!0}}_capturedPointer={};handlePointerCapture(e,t){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;const i=e.pointerId;if(t.onPointerMove){const n=this._capturedPointer[i]||[];n.push(t),this._capturedPointer[i]=n}else A()&&!t.z__warned_no_pointermove&&(t.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,t))}releasePointerCapture(e,t){const i=e.pointerId;if(this._capturedPointer[i]){const n=this._capturedPointer[i].indexOf(t);n!==-1&&(this._capturedPointer[i].splice(n,1),Ts&&console.log("released pointer capture",i,t,this._capturedPointer))}}invokePointerCapture(e){if(e.event.type===xe.PointerMove){const t=e.pointerId,i=this._capturedPointer[t];if(i){Ts&&console.log("Captured",t,i);for(let n=0;n<i.length;n++){const o=i[n];if(o.destroyed){i.splice(n,1),n--;continue}o.onPointerMove?.call(o,e)}}}}pointerEnterSymbol=Symbol("pointerEnter");pointerExitSymbol=Symbol("pointerExit");isChild(e,t){return!e||!t?!1:e===t?!0:e.parent?this.isChild(e.parent,t):!1}handleMeshUiObjectWithoutShadowDom(e,t){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,t)}currentActiveMeshUIComponents=[];handleMeshUIIntersection(e,t){const i=za.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&za.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){const t=this.currentActiveMeshUIComponents[e];za.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?S.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}}class za{static lastSelected=null;static lastUpdateFrame=[];static needsUpdate=!1;static markDirty(){this.needsUpdate=!0}static update(e,t,i=!1){if(i){e.update();return}const n=t.time.frameCount;for(const o of this.lastUpdateFrame)if(o.context===t){if(n===o.frame)return;o.frame=n;let r=this.needsUpdate||n<1;o.nextUpdate<=n&&(r=!0),r&&(Ts&&console.log("Update threemeshui"),this.needsUpdate=!1,o.nextUpdate=n+60,e.update());return}this.lastUpdateFrame=[{context:t,frame:n,nextUpdate:n+60}],e.update(),this.needsUpdate=!1}static updateState(e,t){let i=null;if(e&&(i=this.findBlockOrTextInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const e=this.lastSelected;e&&(this.lastSelected=null,this.resetState(e))}static resetState(e){e&&(this.needsUpdate=!0)}static findBlockOrTextInParent(e){return e?e.isBlock||e.isText?e:this.findBlockOrTextInParent(e.parent):null}}var j1=Object.defineProperty,Ce=(s,e,t,i)=>{for(var n=void 0,o=s.length-1,r;o>=0;o--)(r=s[o])&&(n=r(e,t,n)||n);return n&&j1(e,t,n),n};const wi=x("debugorbit"),sf=x("freecam"),Na=x("debugcamerafit"),dh=x("smoothcam"),B1={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let of;class Vl extends CustomEvent{constructor(e,t){super("target-reached",{detail:{controls:e,type:t}})}}class de extends k{get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener("start",e)}autoTarget=!0;autoFit=!1;enableRotate=!0;autoRotate=!1;autoRotateSpeed=1;minAzimuthAngle=1/0;maxAzimuthAngle=1/0;minPolarAngle=0;maxPolarAngle=Math.PI;enableKeys=!1;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;zoomSpeed=1;zoomToCursor=!1;enablePan=!0;lookAtConstraint=null;lookAtConstraint01=1;allowInterrupt=!0;middleClickToFocus=!0;doubleClickToFocus=!0;clickBackgroundToFitScene=2;get targetElement(){return this._controls?.domElement??this._targetElement}set targetElement(e){this._targetElement=e,this._controls&&this._controls.domElement!==e&&(this._controls.disconnect(),this._controls.domElement=e,this._controls.connect())}_targetElement=null;debugLog=!1;get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}targetLerpDuration=1;rotateLeft(e){this._controls?._rotateLeft(e)}rotateUp(e){this._controls?._rotateUp(e)}pan(e,t){this._controls?._pan(e,t)}zoomIn(e){e>0?this._controls?._dollyIn(1-e):e<0&&this._controls?._dollyOut(1+e)}_controls=null;_cameraObject=null;_lookTargetLerpActive=!1;_lookTargetStartPosition=new c.Vector3;_lookTargetEndPosition=new c.Vector3;_lookTargetLerp01=0;_lookTargetLerpDuration=0;_cameraLerpActive=!1;_cameraStartPosition=new c.Vector3;_cameraEndPosition=new c.Vector3;_cameraLerp01=0;_cameraLerpDuration=0;_fovLerpActive=!1;_fovLerpStartValue=0;_fovLerpEndValue=0;_fovLerp01=0;_fovLerpDuration=0;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;_eventSystem;_afterHandleInputFn;_camera=null;_syncedTransform;_didSetTarget=0;awake(){wi&&console.debug("OrbitControls",this),this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._eventSystem=Dt.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(gp.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){this._controls?.dispose(),this._eventSystem?.removeEventListener(gp.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const e=S.getComponent(this.gameObject,Vt);this._camera=e;let t=e?.threeCamera;if(!t&&this.gameObject instanceof c.PerspectiveCamera&&(t=this.gameObject),t&&Gf(t,this,!0),!this._controls&&t instanceof c.Object3D){this._cameraObject=t;const i=this.targetElement??this.context.renderer.domElement,n=t?.quaternion.clone();this._controls=new q.OrbitControls(t,i),t?.quaternion.copy(n),of===void 0&&(of={...this._controls.keys});const o=X(t),r=this.gameObject.worldForward,l=o.clone().sub(r.multiplyScalar(2.5));this._controls.target.copy(l)}if(this._controls)if(sf&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,exports.DeviceUtilities.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),this._controls.addEventListener("endMovement",this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=S.getComponent(this.gameObject,tn)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener("pointerdown",this._onPointerDown,{queue:Nt.Early}),this.context.input.addEventListener("pointerdown",this._onPointerDownLate,{queue:Nt.Late}),this.context.input.addEventListener("pointerup",this._onPointerUp,{queue:Nt.Early}),this.context.input.addEventListener("pointerup",this._onPointerUpLate,{queue:Nt.Late})}onDisable(){if(this._camera?.threeCamera&&Gf(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted),this._controls.removeEventListener("endMovement",this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener("pointerdown",this._onPointerDown),this.context.input.removeEventListener("pointerdown",this._onPointerDownLate),this.context.input.removeEventListener("pointerup",this._onPointerUp),this.context.input.removeEventListener("pointerup",this._onPointerUpLate)}_activePointerEvents;_lastTimeClickOnBackground=-1;_clickOnBackgroundCount=0;_onPointerDown=e=>{this._activePointerEvents.push(e)};_onPointerDownLate=e=>{e.used&&this._controls&&(this._controls.enabled=!1)};_onPointerUp=e=>{for(let t=this._activePointerEvents.length-1;t>=0;t--){const i=this._activePointerEvents[t];if(i.pointerId===e.pointerId&&i.button===e.button){this._activePointerEvents.splice(t,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){const t=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||t<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}wi&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}};_onPointerUpLate=e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()};updateTargetNow(e){const t=new c.Ray(this._cameraObject?.worldPosition,this._cameraObject?.worldForward.multiplyScalar(-1)),i=this.context.physics.raycastFromRay(t,e),n=i.length>0?i[0]:void 0;n&&n.distance>this.minZoom&&n.distance<this.maxZoom&&(wi&&B.DrawWireSphere(n.point,.1,16711680,2),this._controls?.target.copy(i[0].point))}_orbitStartAngle=0;_zoomStartDistance=0;onControlsChangeStarted=()=>{this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle(),this._zoomStartDistance=this._controls.getDistance()),this._syncedTransform&&this._syncedTransform.requestOwnership()};onControlsChangeEnded=()=>{if(this._controls&&this.autoTarget){const t=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(t)<.01?(wi&&console.debug("OrbitControls: Update target",{deltaAngle:t}),this.updateTargetNow({allowSlowRaycastFallback:!1})):wi&&console.debug("OrbitControls: No target update",{deltaAngle:t})}};_shouldDisable=!1;afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onPausedChanged(e){this._controls&&e&&(this._controls.enabled=!1)}onBeforeRender(){if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&this.context.input.getPointerPositionDelta(0)?.length())&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const t=S.getComponent(this.gameObject,Vt);if(t&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const i=X(t.threeCamera),n=Math.max(.01,i.length()),o=new c.Vector3(0,0,-n).applyMatrix4(t.threeCamera.matrixWorld);wi&&B.DrawLine(i,o,5592575,10),this.setLookTargetPosition(o,!0)}if(!this.setLookTargetFromConstraint()){const i=new Js;i.screenPoint=new c.Vector2(0,0),i.lineThreshold=.1;const n=this.context.physics.raycast(i);n.length>0&&this.setLookTargetPosition(n[0].point,!0),Na&&console.log("OrbitControls hits",...n)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Vl(this,"camera"));else{const t=D.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,t)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1),this._lookTargetLerpActive=!1,this.dispatchEvent(new Vl(this,"lookat"));else{const t=D.easeInOutCubic(this._lookTargetLerp01);this.lerpLookTarget(this._lookTargetStartPosition,this._lookTargetEndPosition,t)}if(this._fovLerpActive&&this._cameraObject){const t=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)t.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{const i=D.easeInOutCubic(this._fovLerp01);t.fov=D.lerp(this._fovLerpStartValue,this._fovLerpEndValue,i)}t.updateProjectionMatrix()}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(t=>t.used),this._controls.keys=this.enableKeys?of:B1,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,sf||(this._camera?.threeCamera?.type==="PerspectiveCamera"?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof dh=="number"||dh===!0){this._controls.enableDamping=!0;const t=typeof dh=="number"?dh:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,t))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!sf&&this.lookAtConstraint?.locked&&!this._lookTargetLerpActive&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(this.context.time.deltaTime),wi&&B.DrawWireSphere(this._controls.target,.1,65280))}}__onPreRender=()=>{const e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:"y",immediate:!0,objects:this.scene.children}))};setCameraAndLookTarget(e,t=!1){if(!e)return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is null"),!1;if(!(e instanceof c.Object3D)&&!(e instanceof Vt))return(A()||wi)&&console.warn("[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera"),!1;e instanceof Vt&&(e=e.gameObject);const i=e.worldPosition,n=e.worldForward;e instanceof c.Camera&&(wi&&console.debug("[OrbitControls] setCameraAndLookTarget flip forward direction for camera"),n.multiplyScalar(-1));const o=new c.Ray(i,n);return wi&&B.DrawRay(o.origin,o.direction,16711680,10),this.setTargetFromRaycast(o,t)||this.setLookTargetPosition(o.at(2,V()),t),this.setCameraTargetPosition(i,t),!0}setCameraTargetPosition(e,t=!1){e&&(e instanceof c.Object3D&&(e=X(e)),this._cameraEndPosition||(this._cameraEndPosition=new c.Vector3),this._cameraEndPosition.copy(e),t===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy(this._cameraObject?.position),typeof t=="number"?this._cameraLerpDuration=t:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,t=!1){if(!this._controls||typeof e!="number")return;const i=this._camera?.threeCamera;i&&(t===!0?i.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=i.fov,this._fovLerpEndValue=e,typeof t=="number"?this._fovLerpDuration=t:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,t=!1){this._controls&&e&&(e instanceof c.Object3D&&(e=X(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,wi&&(console.warn("OrbitControls: setLookTargetPosition",e,t),B.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),t===!0?this.lerpLookTarget(this._lookTargetEndPosition,this._lookTargetEndPosition,1):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof t=="number"?this._lookTargetLerpDuration=t:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=0,t=1){if(!this._controls||this.lookAtConstraint?.enabled===!1)return!1;const i=this.lookAtConstraint?.sources;if(i&&i.length>0){const n=i[e];if(n)return n.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._controls.target,this._lookTargetEndPosition,t),!0}return!1}lerpLookTarget(e,t,i){this._controls&&(i>=1?this._controls.target.copy(t):this._controls.target.lerpVectors(e,t,i),this.lookAtConstraint&&this.lookAtConstraint.setConstraintPosition(this._controls.target))}setTargetFromRaycast(e,t=!1){if(!this.controls)return!1;const i=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(const n of i)if(n.distance>0&&S.isActiveInHierarchy(n.object)){const o=Sm(n.object);if(o&&o.canvas?.screenspace)break;return this.setLookTargetPosition(n.point,t),!0}return!1}fitCamera(e,t){if(this.context.isInXR){console.warn("[OrbitControls] Can not fit camera while XR session is active");return}let i;if(Array.isArray(e)||e&&"type"in e?i=e:e&&typeof e=="object"&&!(e instanceof c.Object3D)&&!Array.isArray(e)&&(t=e,i=t.objects),i&&!Array.isArray(i)&&(i=[i]),(!Array.isArray(i)||i&&i.length<=0)&&(i=this.context.scene.children),!Array.isArray(i)||i.length<=0){console.warn("No objects to fit camera to...");return}const n=this._cameraObject,o=this._controls;if(!n||!o){console.warn("No camera or controls found to fit camera to objects...");return}t||(t={});const{immediate:r=!1,centerCamera:a,cameraNearFar:l="auto",fitOffset:h=1.1,fov:d=n?.fov}=t,u=new c.Vector3,p=new c.Vector3,m=Wt(i,void 0,this._camera?.threeCamera?.layers),y=m.clone();m.getCenter(p);const b=new c.Vector3;if(m.getSize(b),n.updateMatrixWorld(),m.applyMatrix4(n.matrixWorldInverse),m.getSize(u),m.setFromCenterAndSize(p,u),Number.isNaN(u.x)||Number.isNaN(u.y)||Number.isNaN(u.z)){console.warn("Camera fit size resultet in NaN",n,m,[...i]);return}if(u.length()<=1e-10){Na&&console.warn("Camera fit size is zero",m,[...i]);return}const g=d,v=2*Math.atan(Math.tan(g*Math.PI/360/2)*n.aspect)/Math.PI*360,_=u.y/(2*Math.atan(Math.PI*g/360)),w=u.x/(2*Math.atan(Math.PI*v/360)),T=h*Math.max(_,w)+u.z/2;Na&&console.log("Fit camera to objects",{fitHeightDistance:_,fitWidthDistance:w,distance:T,verticalFov:g,horizontalFov:v}),this.maxZoom=T*10,this.minZoom=T*.01;const O=.05,M=p.clone();if(M.y-=u.y*O,t.targetOffset&&(t.targetOffset.x!==void 0&&(M.x+=t.targetOffset.x),t.targetOffset.y!==void 0&&(M.y+=t.targetOffset.y),t.targetOffset.z!==void 0&&(M.z+=t.targetOffset.z)),t.relativeTargetOffset&&(t.relativeTargetOffset.x!==void 0&&(M.x+=t.relativeTargetOffset.x*u.x),t.relativeTargetOffset.y!==void 0&&(M.y+=t.relativeTargetOffset.y*u.y),t.relativeTargetOffset.z!==void 0&&(M.z+=t.relativeTargetOffset.z*u.z)),this.setLookTargetPosition(M,r),this.setFieldOfView(t.fov,r),l==null||l=="auto"){const z=S.findObjectOfType(An),$=z?z.radius:0,E=Math.max(b.x,b.y,b.z,$);n.near=T/100,n.far=E+T*10,n.updateProjectionMatrix(),z&&(this.maxZoom=Math.max(Math.min(this.maxZoom,$*.5),T))}const R=o.getDistance();R<this.minZoom&&(this.minZoom=R*.9),R>this.maxZoom&&(this.maxZoom=R*1.1);const j=p.clone();t.fitDirection?j.sub(new c.Vector3().copy(t.fitDirection).multiplyScalar(1e6)):j.sub(n.worldPosition),a==="y"&&(j.y=0),j.normalize(),j.multiplyScalar(T),a==="y"&&(j.y+=-O*4*T);let L=p.clone().sub(j);t.cameraOffset&&(t.cameraOffset.x!==void 0&&(L.x+=t.cameraOffset.x),t.cameraOffset.y!==void 0&&(L.y+=t.cameraOffset.y),t.cameraOffset.z!==void 0&&(L.z+=t.cameraOffset.z)),t.relativeCameraOffset&&(t.relativeCameraOffset.x!==void 0&&(L.x+=t.relativeCameraOffset.x*u.x),t.relativeCameraOffset.y!==void 0&&(L.y+=t.relativeCameraOffset.y*u.y),t.relativeCameraOffset.z!==void 0&&(L.z+=t.relativeCameraOffset.z*u.z)),n.parent&&(L=n.parent.worldToLocal(L)),this.setCameraTargetPosition(L,r),(Na||t.debug)&&(B.DrawWireBox3(m,16777011,10),B.DrawWireBox3(y,65280,10),!this._haveAttachedKeyboardEvents&&Na&&(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",z=>{if(z.code==="KeyF"){let $;this._cameraObject instanceof c.PerspectiveCamera&&($=Math.random()*Math.random()*170+10),this.fitCamera({objects:i,fitOffset:h,immediate:!1,fov:$})}z.code==="KeyV"&&this._cameraObject instanceof c.PerspectiveCamera&&(this._cameraObject.fov=60)}))),this.onBeforeRender()}_haveAttachedKeyboardEvents=!1}Ce([f()],de.prototype,"autoTarget");Ce([f()],de.prototype,"autoFit");Ce([f()],de.prototype,"enableRotate");Ce([f()],de.prototype,"autoRotate");Ce([f()],de.prototype,"autoRotateSpeed");Ce([f()],de.prototype,"minAzimuthAngle");Ce([f()],de.prototype,"maxAzimuthAngle");Ce([f()],de.prototype,"minPolarAngle");Ce([f()],de.prototype,"maxPolarAngle");Ce([f()],de.prototype,"enableKeys");Ce([f()],de.prototype,"enableDamping");Ce([f()],de.prototype,"dampingFactor");Ce([f()],de.prototype,"enableZoom");Ce([f()],de.prototype,"minZoom");Ce([f()],de.prototype,"maxZoom");Ce([f()],de.prototype,"zoomSpeed");Ce([f()],de.prototype,"enablePan");Ce([f(nr)],de.prototype,"lookAtConstraint");Ce([f()],de.prototype,"lookAtConstraint01");Ce([f()],de.prototype,"allowInterrupt");Ce([f()],de.prototype,"middleClickToFocus");Ce([f()],de.prototype,"doubleClickToFocus");Ce([f()],de.prototype,"clickBackgroundToFitScene");Ce([f()],de.prototype,"targetLerpDuration");var F1=Object.defineProperty,U1=Object.getOwnPropertyDescriptor,It=(s,e,t,i)=>{for(var n=i>1?void 0:i?U1(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&&F1(e,t,n),n},Fo=(s=>(s[s.None=0]="None",s[s.Skybox=1]="Skybox",s[s.SolidColor=2]="SolidColor",s[s.Uninitialized=4]="Uninitialized",s))(Fo||{});const As=x("debugcam"),Yy=x("debugscreenpointtoray"),xt=class ll extends k{get isCamera(){return!0}get aspect(){return this._cam instanceof c.PerspectiveCamera?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof c.PerspectiveCamera&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof c.PerspectiveCamera?this._cam.fov:this._fov}set fieldOfView(e){const t=this.fieldOfView!=e;if(this._fov=e,t&&this._cam&&this._cam instanceof c.PerspectiveCamera){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(t||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(t||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e=="string")switch(e){case"skybox":e=1;break;case"solidcolor":e=2;break;default:e=0;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}_backgroundBlurriness=void 0;set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}_backgroundIntensity=void 0;set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}_backgroundRotation=void 0;set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}_environmentIntensity=void 0;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||(this._backgroundColor=new Z(1,1,1,1)),this._backgroundColor.copy(e),(!("alpha"in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}_targetTexture=null;_backgroundColor;_fov;_cam=null;_clearFlags=2;_skybox;get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}static _origin=new c.Vector3;static _direction=new c.Vector3;screenPointToRay(e,t,i){const n=this.threeCamera,o=ll._origin;o.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(o),Yy&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",o.x.toFixed(2),o.y.toFixed(2),"isInXR:"+this.context.isInXR),o.z=-1,o.unproject(n);const r=ll._direction.set(o.x,o.y,o.z),a=X(n);return r.sub(a),r.normalize(),i?(i.set(a,r),i):new c.Ray(a.clone(),r.clone())}_frustum;getFrustum(){return this._frustum||(this._frustum=new c.Frustum,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new c.Frustum),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,t){return t&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}_projScreenMatrix=new c.Matrix4;awake(){Yy&&window.addEventListener("pointerdown",e=>{const t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));const n=this.screenPointToRay(t,i),o="#"+Math.floor(Math.random()*16777215).toString(16);B.DrawRay(n.origin,n.direction,o,10)})}onEnable(){As&&console.log(`Camera enabled: "${this.name}". ClearFlags=${Fo[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),N1(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onLeaveXR(e){this.fieldOfView=this._fov}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const t=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),t?.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let t=null;if(e?(t=this.gameObject,t?.layers.enableAll(),t instanceof c.PerspectiveCamera&&(this._fov=t.fov)):t=this.gameObject.children[0],t&&t.isCamera)t instanceof c.PerspectiveCamera&&(this._fov&&(t.fov=this._fov),t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new c.PerspectiveCamera(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(t.fov=this.fieldOfView),this.gameObject.add(t);else{const i=this.orthographicSize*100;t=new c.OrthographicCamera(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){if(!this._cam){As&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this.fieldOfView,As){const i=`[Camera] Apply ClearFlags: ${Fo[this._clearFlags]} - "${this.name}"`;console.debug(i)}const t=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");switch(this._clearFlags){case 0:return;case 1:if(ll.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||e?.applySkybox===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute("background-blurriness")?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:As&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute("background-intensity")&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute("background-rotation")?this.context.scene.backgroundRotation=this._backgroundRotation:As&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor&&!t){let i=this._backgroundColor.alpha;ll.backgroundShouldBeTransparent(this.context)&&(i=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.xr?.isVR?this.context.renderer.setClearColor(rb(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,i)}else this._backgroundColor||As&&console.warn(`[Camera] has no background color "${this.name}" `);break;case 4:t||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||(this._skybox=new z1(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){const t=e.renderer.xr?.getSession();if(!t)return!1;if(typeof t._transparent=="boolean")return t._transparent;const i=t.environmentBlendMode;As&&Se("Environment blend mode: "+i+" on "+navigator.userAgent);let n=i==="additive"||i==="alpha-blend";return e.isInAR&&i==="opaque"&&(navigator.userAgent?.includes("OculusBrowser")||navigator.userAgent?.includes("Mozilla")&&navigator.userAgent?.includes("Mobile WebXRViewer/v2"))&&(n=!0),t._transparent=n,n}};It([f()],xt.prototype,"aspect",1);It([f()],xt.prototype,"fieldOfView",1);It([f()],xt.prototype,"nearClipPlane",1);It([f()],xt.prototype,"farClipPlane",1);It([f()],xt.prototype,"clearFlags",1);It([f()],xt.prototype,"orthographic",2);It([f()],xt.prototype,"orthographicSize",2);It([f()],xt.prototype,"ARBackgroundAlpha",2);It([f()],xt.prototype,"cullingMask",1);It([f()],xt.prototype,"backgroundBlurriness",1);It([f()],xt.prototype,"backgroundIntensity",1);It([f(c.Euler)],xt.prototype,"backgroundRotation",1);It([f()],xt.prototype,"environmentIntensity",1);It([f(Z)],xt.prototype,"backgroundColor",1);It([f(xn)],xt.prototype,"targetTexture",1);let Vt=xt;class z1{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}apply(){if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){const e=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");As&&console.debug(`[Camera] Apply Skybox ${this._skybox?.name} ${e} - "${this._camera.name}"`),e?.length||(this._skybox.mapping=c.EquirectangularReflectionMapping,this.context.scene.background=this._skybox)}}}function N1(s){x("freecam")&&s.context.mainCameraComponent===s&&S.getOrAddComponent(s.gameObject,de)}class ts extends k{get listener(){return this._listener==null&&(this._listener=new c.AudioListener),this._listener}_listener=null;onEnable(){en.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){en.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}onInteraction=()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()};addListenerIfItExists(){const e=this._listener;if(!e||e?.parent)return;const t=this.context.mainCameraComponent||S.getComponentInParent(this.gameObject,Vt);t?.threeCamera?t.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){const e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}}var V1=Object.defineProperty,$1=Object.getOwnPropertyDescriptor,on=(s,e,t,i)=>{for(var n=i>1?void 0:i?$1(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&&V1(e,t,n),n};const lt=x("debugaudio"),Ui=class Ls extends k{static get userInteractionRegistered(){return en.userInteractionRegistered}static registerWaitForAllowAudio(e){en.registerWaitForInteraction(e)}clip="";playOnAwake=!1;preload=!0;playInBackground=!0;get isPlaying(){return this.sound?.isPlaying??!1}get duration(){return this.sound?.buffer?.duration}get time01(){const e=this.duration;return e&&this.sound?this.sound?.context.currentTime/e:0}set time01(e){const t=this.duration;t&&this.sound&&(this.time=e*t)}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(lt&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}_volume=1;set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;_audioElement=null;get Sound(){if(!this.sound&&Ls.userInteractionRegistered){let e=this.gameObject.getComponent(ts)??this.context.mainCamera.getComponent(ts)??lc(ts,this.context,!1);!e&&this.context.mainCamera&&(e=this.context.mainCamera.addComponent(ts)),e?.listener?(this.sound=new c.PositionalAudio(e.listener),this.gameObject?.add(this.sound)):lt&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){return this.sound?.context}awake(){lt&&console.log("[AudioSource]",this),this.audioLoader=new c.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),Ls.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():Ls.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(Qf.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(Qf.MuteChanged,this.onApplicationMuteChanged),this.pause()}onVisibilityChanged=()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||exports.DeviceUtilities.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":lt&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,Ls.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&Ls.userInteractionRegistered&&this.wasPlaying&&this.play();break}};onApplicationMuteChanged=()=>{this.context.application.muted?this.sound?.setVolume(0):this.sound?.setVolume(this.volume)};createAudio=e=>{if(this.destroyed){lt&&console.warn("AudioSource destroyed, not creating audio",this.name);return}lt&&console.log("AudioBuffer finished loading",e);const t=this.Sound;if(!t){lt&&console.warn("Failed getting sound?",this.name);return}t.isPlaying&&t.stop(),e&&t.setBuffer(e),t.loop=this._loop,this.context.application.muted?t.setVolume(0):t.setVolume(this.volume),t.autoplay=this.shouldPlay&&Ls.userInteractionRegistered,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),Ls.registerWaitForAllowAudio(this.__onAllowAudioCallback)};__onAllowAudioCallback=()=>{this.shouldPlay&&this.play()};applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const t=D.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(lt&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?lt&&!this.helper&&(this.helper=new q.PositionalAudioHelper(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(lt&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new c.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===e){lt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,lt&&console.log("load audio",e);const t=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),t&&this.createAudio(t)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(A()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
|
|
950
950
|
Using the assigned clip instead:`,this.clip),e=this.clip);let t=!this.sound||e&&e!==this.clip;if(typeof e=="string"&&!this.audioLoader&&(t=!0),(e instanceof MediaStream||typeof e=="string")&&(this.clip=e),t){this.shouldPlay=!0,this.onNewClip(e);return}if(this.shouldPlay=!0,this._hasEnded=!1,lt&&console.log("play",this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying){const i=this.context.application.muted;i&&this.sound.setVolume(0),this.gameObject?.add(this.sound),this.clip instanceof MediaStream?(this.sound.setMediaStreamSource(this.clip),this._audioElement||(this._audioElement=document.createElement("audio"),this._audioElement.style.display="none"),this._audioElement.parentNode||this.context.domElement.shadowRoot?.append(this._audioElement),this._audioElement.srcObject=this.clip,this._audioElement.autoplay=!1):(this._audioElement&&this._audioElement.remove(),this.sound.play(i?.1:0))}}pause(){lt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,this.sound.pause()),this._audioElement?.remove()}stop(){lt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,lt&&console.log(this._lastContextTime),this.sound.stop()),this._audioElement?.remove()}_lastContextTime=0;_hasEnded=!0;_needUpdateSpatialDistanceSettings=!1;update(){this.helper&&(this.isPlaying&&this.helper.update(),this.helper.visible=this.isPlaying),this._needUpdateSpatialDistanceSettings&&this.applySpatialDistanceSettings(),this.sound&&!this.sound.isPlaying&&this.shouldPlay&&!this._hasEnded&&(this._hasEnded=!0,lt&&console.log("Audio clip ended",this.clip),this.dispatchEvent(new CustomEvent("ended",{detail:this})))}};on([f(URL)],Ui.prototype,"clip",2);on([f()],Ui.prototype,"playOnAwake",2);on([f()],Ui.prototype,"preload",2);on([f()],Ui.prototype,"playInBackground",2);on([f()],Ui.prototype,"loop",1);on([f()],Ui.prototype,"spatialBlend",1);on([f()],Ui.prototype,"minDistance",1);on([f()],Ui.prototype,"maxDistance",1);on([f()],Ui.prototype,"volume",1);on([f()],Ui.prototype,"pitch",1);on([f()],Ui.prototype,"rollOffMode",2);let Di=Ui;const W1=x("debugavatar");class we extends k{static getAvatar(e){return e>=0&&e<we.instances.length?we.instances[e]:null}static instances=[];static onAvatarMarkerCreated(e){return we._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return we._onAvatarMarkerDestroyed.push(e),e}static _onNewAvatarMarkerAdded=[];static _onAvatarMarkerDestroyed=[];connectionId;avatar;awake(){we.instances.push(this),W1&&console.log(this);for(const e of we._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){we.instances.splice(we.instances.indexOf(this),1);for(const e of we._onAvatarMarkerDestroyed)e({avatarMarker:this,gameObject:this.gameObject})}isLocalAvatar(){return this.connectionId===this.context.connection.connectionId}}class Uo{static Pois=[];static LastChangeTime=0;static Add(e,t,i=null){if(t){for(const n of this.Pois)if(n.obj===t)return;this.Pois.push({obj:t,avatar:i}),this.LastChangeTime=e.time.time}}static Remove(e,t){if(t){for(const i of this.Pois)if(i.obj===t){this.Pois.splice(this.Pois.indexOf(i),1),this.LastChangeTime=e?.time.time??F.Current?.time.time;return}}}}class G1{guid;position=new c.Vector3}class $l extends k{set controlledTarget(e){this.target=e;const t=P.get("MoveRandom");if(t&&this.target){const i=S.getComponent(this.target,t);i&&i.destroy()}}target=null;avatar=null;_model=null;_targetModel=new G1;_currentTargetObject=null;_lastUpdateTime=0;_lookDuration=0;_lastPoiChangedTime=0;awake(){if(this.avatar=S.getComponentInParent(this.gameObject,we),this.avatar){const e=S.getComponentInParent(this.gameObject,we);this._model=new im(this.context.connection,this.guid),e?.isLocalAvatar&&this._model.requestOwnership()}this.context.connection.beginListen("avatar-look-target-changed",e=>{this.target&&e&&e.guid===this.avatar?.guid&&Ye(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(Uo.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=Uo.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){const t=X(this._currentTargetObject);Ye(this.target,t),this.context.connection.isConnected&&this.avatar&&(this.context.connection.send("avatar-look-target-changed",this._targetModel),this._targetModel.guid=this.avatar.guid,this._targetModel.position.copy(t))}}selectTarget(){if(this.context.time.time-this._lastUpdateTime>this._lookDuration){this._lastUpdateTime=this.context.time.time,this._lookDuration=Math.random()*.5+.2;const t=Uo.Pois;if(t.length>0){const i=t[Math.floor(Math.random()*t.length)];if(i&&i.obj){if(i.avatar&&i.avatar===this.avatar)return;this._currentTargetObject=i.obj}}}}}function X0(s){const e=s;return!!(e.parser&&e.parser.json)}var Xd=(s=>(s[s.None=0]="None",s[s.DontExport=1]="DontExport",s))(Xd||{});function Q0(s){return s&&s.isComponent}const H1=Symbol("object"),rf=new ai(()=>new c.Vector3,20);class Y0{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return rf.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return rf.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return rf.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,o,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=o,this._tangentVelocity=r}}class K0{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}}class Z0{object;collider;constructor(e,t){this.object=e,this.collider=t}}const Me=x("debugnetworkingstreams");var wn=(s=>(s.Connected="peer-user-connected",s.StreamReceived="receive-stream",s.StreamEnded="call-ended",s.Disconnected="peer-user-disconnected",s.UserJoined="user-joined",s))(wn||{});class Cm{type="call-ended";userId;direction;constructor(e,t){this.userId=e,this.direction=t}}class J0{type="receive-stream";userId;stream;target;constructor(e,t,i){this.userId=e,this.stream=t,this.target=i}}class q1{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}}var ev=(s=>(s.Incoming="incoming",s.Outgoing="outgoing",s))(ev||{});class X1 extends c.EventDispatcher{peerId;userId;direction;call;get stream(){return this._stream}_stream=null;_isDisposed=!1;close(){this._isDisposed||(this._isDisposed=!0,this.call.close(),Sn(this._stream))}get isOpen(){return this.call.peerConnection?.connectionState==="connected"}get isOpening(){return this.call.peerConnection?.connectionState==="connecting"}get isClosed(){return!this.isOpen||this._isDisposed}constructor(e,t,i,n=null){super(),this.peerId=t.peer,this.userId=e,this.call=t,this.direction=i,this._stream=n,t.on("stream",o=>{if(Me&&console.log("Receive stream",`
|
|
951
951
|
Audio:`,o.getAudioTracks(),`
|
|
952
952
|
Video:`,o.getVideoTracks()),this._stream=o,i==="incoming"){const r=new J0(e,o,this);this.dispatchEvent(r)}}),t.on("close",()=>{this.dispatchEvent(new Cm(e,i))})}}function Ky(s){return s=s.replace("a=fmtp:111 minptime=10;useinbandfec=1","a=fmtp:111 ptime=5;useinbandfec=1;stereo=1;maxplaybackrate=48000;maxaveragebitrat=128000;sprop-stereo=1"),s}class is extends c.EventDispatcher{static instances=new Map;static getOrCreate(e,t){if(is.instances.has(t))return is.instances.get(t);const i=new is(e,t);return is.instances.set(t,i),i}getMyPeerId(){if(this.context.connection.connectionId)return this.getPeerIdFromUserId(this.context.connection.connectionId)}getPeerIdFromUserId(e){return this.id+"-"+e}getUserIdFromPeerId(e){return e.substring(this.id.length+1)}makeCall(e,t){if(!t?.id){Me?console.warn("Can not make a call: mediastream has no id or is undefined"):console.debug("Can not make a call: mediastream has no id or is undefined");return}const i={metadata:{userId:this.context.connection.connectionId,streamId:t.id},sdpTransform:o=>Ky(o)},n=this._peer?.call(e,t,i);if(n){const o=this.registerCall(n,"outgoing",t);return Me&&console.warn(`📞 CALL ${e}`,`
|
|
@@ -1613,4 +1613,4 @@ Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[kt],i=e.membership;l
|
|
|
1613
1613
|
justify-content: center;
|
|
1614
1614
|
gap: .5rem;
|
|
1615
1615
|
}
|
|
1616
|
-
`),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),dd(hp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#l()),this.#o.observe(this.#e,{attributes:!0}),zf&&console.log("Needle Button updated")}#l(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#r=e=>{zf&&console.log("Needle Button clicked"),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(N_)&&window.customElements.define(N_,Ox);const il=x("debugavatar");class $g{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(o=>o.layers.set(2))}}class Mx{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){const o=new sn;i=S.instantiate(Jr(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(il&&console.log("[Custom Avatar] valid config",t,il?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,il?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(il&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+t);let o=null;if(n.ok){const a=await n.blob();a&&(o=await a.arrayBuffer())}return o?(await Ji().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return bm(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await Ji().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{il&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){const t=e;let i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]);const o=this.findAvatarPart(i,["left","hand"]),r=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;const l=new c.Vector3;new c.Box3().setFromObject(n).getSize(l);const h=Math.max(l.x,l.y,l.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new $g(t,n,o,r)}findAvatarPart(e,t){const i=e.name.toLowerCase();let n=!0;for(const o of t){if(!n)break;i.indexOf(o)===-1&&(n=!1)}if(n)return e;if(e.children)for(const o of e.children){const r=this.findAvatarPart(o,t);if(r)return r}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}}class kx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Rx{}const eE=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:le,ActionCollection:Iv,ActionModel:zt,AlignmentConstraint:dc,Animation:Gt,AnimationCurve:Tc,AnimationExtension:iu,AnimationTrackHandler:Cu,Animator:mt,AnimatorController:Ti,Antialiasing:Lc,AudioExtension:lr,AudioListener:ts,AudioSource:Di,AudioTrackHandler:ns,Avatar:qs,AvatarBlink_Simple:sr,AvatarEyeLook_Rotation:km,AvatarLoader:Mx,AvatarMarker:we,AvatarModel:$g,Avatar_Brain_LookAt:$l,Avatar_MouthShapes:mc,Avatar_MustacheShake:Om,Avatar_POI:Uo,AxesHelper:ga,BaseUIComponent:ji,BasicIKConstraint:Em,BehaviorExtension:og,BehaviorModel:pt,BloomEffect:mu,BoxCollider:Kd,BoxGizmo:ur,BoxHelperComponent:nt,Button:_s,CallInfo:es,Camera:Vt,CameraTargetReachedEvent:Vl,Canvas:ha,CanvasGroup:Xs,CapsuleCollider:rs,ChangeMaterialOnClick:Ym,ChangeTransformOnClick:cr,CharacterController:or,CharacterControllerInput:hs,ChromaticAberration:Dc,Collider:Xt,ColorAdjustments:lo,ColorBySpeedModule:ka,ColorOverLifetimeModule:uu,ContactShadows:gc,ControlTrackHandler:Pu,CustomBranding:dr,Deletable:Dm,DeleteBox:Vs,DepthOfField:an,DeviceFlag:Zd,DocumentExtension:kx,DragControls:Mo,DropListener:ds,Duplicatable:Bm,EffectWrapper:Xl,EmissionModule:gs,EmphasizeOnClick:va,EnvironmentScene:Eu,EventList:ae,EventListEvent:Hd,EventSystem:Dt,EventTrigger:eu,FieldWithDefault:vv,FixedJoint:bg,Fog:Pa,GltfExport:Hm,GltfExportBox:Wm,Gradient:pr,Graphic:Pc,GraphicRaycaster:qd,GridHelper:Oa,GridLayoutGroup:dg,GroundProjectedEnv:An,GroupActionModel:ko,HideOnStart:Oi,HingeJoint:Mc,HorizontalLayoutGroup:hg,Image:Ta,InheritVelocityModule:Sg,InputField:jg,InstanceHandle:zo,InstancingHandler:Xo,Interactable:Lm,Keyframe:$t,LODGroup:Rc,LODModel:Ma,Light:pi,LimitVelocityOverLifetimeModule:et,LogStats:Am,LookAt:Bg,LookAtConstraint:nr,MainModule:St,MaskableGraphic:Oc,MeshCollider:to,MeshRenderer:_c,MinMaxCurve:G,MinMaxGradient:mr,NeedleMenu:Dn,NestedGltf:Ec,Networking:xg,NoiseModule:fe,ObjectRaycaster:ci,OffsetConstraint:fr,OpenURL:Aa,OrbitControls:de,Outline:Ca,Padding:hr,ParticleBurst:Cd,ParticleSubEmitter:Cg,ParticleSystem:ql,ParticleSystemRenderer:Ni,PhysicsExtension:rg,PixelationEffect:Ic,PlayAnimationOnClick:Gl,PlayAudioOnClick:Hs,PlayableDirector:ua,PlayerColor:da,PointerEventData:fc,PostProcessingHandler:kg,PreliminaryAction:xa,PreliminaryTrigger:xc,RawImage:ku,Rect:zv,RectTransform:nn,ReflectionProbe:Wl,RegisteredAnimationInfo:Us,RemoteSkybox:yu,Renderer:hi,RendererLightmap:vd,Rigidbody:Ke,RotationBySpeedModule:zi,RotationOverLifetimeModule:rn,SceneSwitcher:Ie,ScreenCapture:co,ScreenSpaceAmbientOcclusion:ys,ScreenSpaceAmbientOcclusionN8:ln,SetActiveOnClick:Km,ShadowCatcher:Uc,ShapeModule:wg,SharpeningEffect:Bc,SignalAsset:Su,SignalReceiver:Wc,SignalReceiverEvent:$c,SignalTrackHandler:Ql,Size:Uv,SizeBySpeedModule:Kt,SizeOverLifetimeModule:gr,SkinnedMeshRenderer:$m,SmoothFollow:bu,SpatialGrabRaycaster:Ho,SpatialHtml:qc,SpatialTrigger:vu,SpatialTriggerReceiver:En,SpectatorCamera:xu,SphereCollider:ya,Sprite:fs,SpriteData:Kr,SpriteRenderer:Qt,SpriteSheet:ca,SubEmitterSystem:Pd,SyncedCamera:Eg,SyncedRoom:cn,SyncedTransform:tn,TapGestureTrigger:Jm,TeleportTarget:au,TestRunner:Tg,TestSimulateUserData:Ag,Text:wt,TextBuilder:lg,TextExtension:cu,TextureSheetAnimationModule:Ct,TiltShiftEffect:Bn,ToneMappingEffect:Qs,TrailModule:Ee,TransformData:ke,TransformGizmo:vr,TriggerBuilder:vt,TriggerModel:$s,UIRaycastUtils:wm,UIRootComponent:Sc,USDZExporter:Rn,USDZText:$r,USDZUIExtension:fg,UsageMarker:yc,VariantAction:Qm,VelocityOverLifetimeModule:Le,VerticalLayoutGroup:cg,VideoPlayer:Ze,Vignette:br,VisibilityAction:wc,Voip:eo,Volume:Ea,VolumeParameter:I,VolumeProfile:fu,WebARCameraBackground:Qc,WebARSessionRoot:ri,WebXR:lu,WebXRImageTracking:Yc,WebXRImageTrackingModel:vs,WebXRPlaneTracking:xs,WebXRTrackedImage:fa,XRControllerFollow:bs,XRControllerModel:as,XRControllerMovement:di,XRFlag:ki,XRRig:Au,XRState:Lt,__Ignore:Rx},Symbol.toStringTag,{value:"Module"})),Rd=x("debugmissingcamera");re.registerCallback(oe.MissingCamera,s=>{Rd&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new Vt;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Fo.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Fo.Skybox;else{if(i.clearFlags=Fo.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new Eu("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Lo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Ex(s.context,o),o});re.registerCallback(oe.ContextCreated,s=>{if(!s.context.mainCamera){Rd&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(nb(s.context.mainCamera)?.isCameraController==!0){Rd&&console.log("Will not auto-fit because a camera controller exists");return}Ex(s.context)}});function Ex(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Rd&&console.log("Creating default camera controls",e?.name),t){const i=oc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&n?.toLowerCase()!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const o=parseFloat(n);isNaN(o)||(i.autoRotateSpeed=o)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(oe.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Gt&&n.playAutomatically||n instanceof mt||n instanceof ua&&n.playOnAwake===!0)return!0;if(n instanceof Gt)return n.playAutomatically=!0,!0;if(n instanceof ua)return n.playOnAwake=!0,!0}},!0)!==!0&&ra.autoplayAnimations(t.file)});class tE extends se.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-2qGLkQjg.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Du&&Du.tagName.toUpperCase()==="SCRIPT"&&Du.src||new URL("needle-engine.bundle-DK1r3WiC.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:p}=d,m=se.MeshBVH.deserialize(u,t,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,u.index)if(t.index)t.index.array=u.index;else{const b=new c.BufferAttribute(u.index,1,!1);t.setIndex(b)}y.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 iE=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:tE},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=H1;exports.ActionBuilder=le;exports.ActionCollection=Iv;exports.ActionModel=zt;exports.Addressables=b0;exports.AlignmentConstraint=dc;exports.AmbientMode=Qr;exports.Animation=Gt;exports.AnimationCurve=Tc;exports.AnimationExtension=iu;exports.AnimationTrackHandler=Cu;exports.AnimationUtils=ra;exports.Animator=mt;exports.AnimatorConditionMode=Ds;exports.AnimatorController=Ti;exports.AnimatorControllerParameterType=vm;exports.AnimatorStateInfo=al;exports.Antialiasing=Lc;exports.Application=en;exports.AssetDatabase=Ib;exports.AssetReference=Y;exports.AudioExtension=lr;exports.AudioListener=ts;exports.AudioSource=Di;exports.AudioTrackHandler=ns;exports.Avatar=qs;exports.AvatarBlink_Simple=sr;exports.AvatarEyeLook_Rotation=km;exports.AvatarLoader=Mx;exports.AvatarMarker=we;exports.AvatarModel=$g;exports.Avatar_Brain_LookAt=$l;exports.Avatar_MouthShapes=mc;exports.Avatar_MustacheShake=Om;exports.Avatar_POI=Uo;exports.Axes=Nr;exports.AxesHelper=ga;exports.BUILD_TIME=Xp;exports.BaseUIComponent=ji;exports.BasicIKConstraint=Em;exports.BehaviorExtension=og;exports.BehaviorModel=pt;exports.BloomEffect=mu;exports.BoxCollider=Kd;exports.BoxGizmo=ur;exports.BoxHelperComponent=nt;exports.Button=_s;exports.ButtonsFactory=Qi;exports.CallDirection=ev;exports.CallInfo=es;exports.Camera=Vt;exports.CameraTargetReachedEvent=Vl;exports.Canvas=ha;exports.CanvasGroup=Xs;exports.CapsuleCollider=rs;exports.ChangeMaterialOnClick=Ym;exports.ChangeTransformOnClick=cr;exports.CharacterController=or;exports.CharacterControllerInput=hs;exports.ChromaticAberration=Dc;exports.CircularBuffer=ai;exports.ClearFlags=Fo;exports.ClipExtrapolation=pn;exports.Collider=Xt;exports.Collision=K0;exports.CollisionDetectionMode=Gd;exports.ColorAdjustments=lo;exports.ColorBySpeedModule=ka;exports.ColorOverLifetimeModule=uu;exports.Component=t1;exports.Component$1=k;exports.ComponentLifecycleEvents=Bd;exports.Components=eE;exports.ConnectionEvents=Rb;exports.ContactPoint=Y0;exports.ContactShadows=gc;exports.Context=F;exports.ContextArgs=zC;exports.ContextEvent=oe;exports.ContextRegistry=re;exports.ControlTrackHandler=Pu;exports.CustomBranding=dr;exports.CustomShader=ye;exports.DefaultReflectionMode=hd;exports.Deletable=Dm;exports.DeleteBox=Vs;exports.DepthOfField=an;exports.DeviceFlag=Zd;exports.DocumentExtension=kx;exports.DragControls=Mo;exports.DragMode=Im;exports.DropListener=ds;exports.Duplicatable=Bm;exports.EffectWrapper=Xl;exports.EmissionModule=gs;exports.EmphasizeOnClick=va;exports.EngineLoadingView=Yl;exports.EnvironmentScene=Eu;exports.EventList=ae;exports.EventListEvent=Hd;exports.EventSystem=Dt;exports.EventTrigger=eu;exports.FieldWithDefault=vv;exports.FileReference=jo;exports.FileReferenceSerializer=x0;exports.FileSpawnModel=mP;exports.File_Event=av;exports.FixedJoint=bg;exports.Fog=Pa;exports.FrameEvent=pe;exports.GENERATOR=Ad;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=Hm;exports.GltfExportBox=Wm;exports.Gradient=pr;exports.Graphic=Pc;exports.GraphicRaycaster=qd;exports.Graphics=Gs;exports.GridHelper=Oa;exports.GridLayoutGroup=dg;exports.GroundProjectedEnv=An;exports.GroupActionModel=ko;exports.HideFlags=Xd;exports.HideOnStart=Oi;exports.HingeJoint=Mc;exports.HorizontalLayoutGroup=hg;exports.HostData=WS;exports.Image=Ta;exports.ImageReference=Io;exports.ImageReferenceSerializer=v0;exports.InheritVelocityModule=Sg;exports.Input=Sb;exports.InputEventQueue=Nt;exports.InputEvents=xe;exports.InputField=jg;exports.InstanceHandle=zo;exports.InstancingHandler=Xo;exports.InstancingUtil=Ei;exports.InstantiateEvent=qb;exports.InstantiateIdProvider=ft;exports.InstantiateOptions=sn;exports.Interactable=Lm;exports.JoinedRoomResponse=mS;exports.KeyEventArgs=sS;exports.Keyframe=$t;exports.LODGroup=Rc;exports.LODModel=Ma;exports.LeftRoomResponse=gS;exports.Light=pi;exports.LightData=O0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=UR;exports.LogStats=Am;exports.LogType=oi;exports.LookAt=Bg;exports.LookAtConstraint=nr;exports.MainModule=St;exports.MarkerType=Lg;exports.MaskableGraphic=Oc;exports.Mathf=D;exports.MeshCollider=to;exports.MeshRenderer=_c;exports.MinMaxCurve=G;exports.MinMaxGradient=mr;exports.NEKeyboardEvent=nl;exports.NEPointerEvent=Qn;exports.NeedleButtonElement=Ox;exports.NeedleEngineWebComponent=Vg;exports.NeedleMenu=Dn;exports.NeedlePatchesKey=Lh;exports.NeedleXRController=Zp;exports.NeedleXRSession=H;exports.NeedleXRSync=Ab;exports.NeedleXRUtils=Db;exports.NestedGltf=Ec;exports.NetworkConnection=Tb;exports.NetworkedStreamEvents=wn;exports.NetworkedStreams=pc;exports.Networking=xg;exports.NewInstanceModel=Qb;exports.NoiseModule=fe;exports.ObjectRaycaster=ci;exports.ObjectUtils=Zo;exports.OffsetConstraint=fr;exports.OneEuroFilter=Th;exports.OneEuroFilterXYZ=zp;exports.OpenURL=Aa;exports.OrbitControls=de;exports.Outline=Ca;exports.OwnershipEvent=Eb;exports.OwnershipModel=im;exports.PUBLIC_KEY=Fr;exports.Padding=hr;exports.ParticleBurst=Cd;exports.ParticleSubEmitter=Cg;exports.ParticleSystem=ql;exports.ParticleSystemBaseBehaviour=ao;exports.ParticleSystemRenderer=Ni;exports.ParticleSystemShapeType=Sd;exports.PeerHandle=is;exports.PeerNetworking=kb;exports.Physics=sa;exports.PhysicsExtension=rg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=Ic;exports.PlayAnimationOnClick=Gl;exports.PlayAudioOnClick=Hs;exports.PlayableDirector=ua;exports.PlayerColor=da;exports.PlayerState=Yi;exports.PlayerStateEvent=Fv;exports.PlayerSync=ng;exports.PlayerView=S0;exports.PlayerViewManager=C0;exports.PointerEventData=fc;exports.PointerType=Id;exports.PostProcessingEffect=Ne;exports.PostProcessingEffectOrder=Qe;exports.PostProcessingHandler=kg;exports.PreliminaryAction=xa;exports.PreliminaryTrigger=xc;exports.PrimitiveType=Vo;exports.Progress=ie;exports.PromiseAllWithErrors=Fp;exports.PromiseErrorResult=$f;exports.RGBAColor=Z;exports.RapierPhysics=Zr;exports.RawImage=ku;exports.RaycastOptions=Js;exports.Rect=zv;exports.RectTransform=nn;exports.ReflectionProbe=Wl;exports.RegisteredAnimationInfo=Us;exports.RemoteSkybox=yu;exports.RenderTexture=xn;exports.RenderTextureSerializer=H0;exports.Renderer=hi;exports.RendererData=P0;exports.RendererLightmap=vd;exports.Rigidbody=Ke;exports.RigidbodyConstraints=De;exports.RoomEvents=Q;exports.RotationBySpeedModule=zi;exports.RotationOverLifetimeModule=rn;exports.SceneLightSettings=yd;exports.SceneSwitcher=Ie;exports.ScreenCapture=co;exports.ScreenSpaceAmbientOcclusion=ys;exports.ScreenSpaceAmbientOcclusionN8=ln;exports.SendQueue=Xi;exports.SerializationContext=um;exports.SetActiveOnClick=Km;exports.ShadowCatcher=Uc;exports.ShapeModule=wg;exports.ShapeOverlapResult=Z0;exports.SharpeningEffect=Bc;exports.SignalAsset=Su;exports.SignalReceiver=Wc;exports.SignalReceiverEvent=$c;exports.SignalTrackHandler=Ql;exports.Size=Uv;exports.SizeBySpeedModule=Kt;exports.SizeOverLifetimeModule=gr;exports.SkinnedMeshRenderer=$m;exports.SmoothFollow=bu;exports.SpatialGrabRaycaster=Ho;exports.SpatialHtml=qc;exports.SpatialTrigger=vu;exports.SpatialTriggerReceiver=En;exports.SpectatorCamera=xu;exports.SphereCollider=ya;exports.SphereIntersection=om;exports.Sprite=fs;exports.SpriteData=Kr;exports.SpriteRenderer=Qt;exports.SpriteSheet=ca;exports.StateMachineBehaviour=a1;exports.StreamEndedEvent=Cm;exports.StreamReceivedEvent=J0;exports.SubEmitterSystem=Pd;exports.SyncedCamera=Eg;exports.SyncedRoom=cn;exports.SyncedTransform=tn;exports.TapGestureTrigger=Jm;exports.TeleportTarget=au;exports.TestRunner=Tg;exports.TestSceneUtils=XR;exports.TestSimulateUserData=Ag;exports.Text=wt;exports.TextBuilder=lg;exports.TextExtension=cu;exports.TextureSheetAnimationModule=Ct;exports.TiltShiftEffect=Bn;exports.Time=M0;exports.ToneMappingEffect=Qs;exports.TrackHandler=Gc;exports.TrackType=ei;exports.TrailModule=Ee;exports.TransformData=ke;exports.TransformGizmo=vr;exports.TriggerBuilder=vt;exports.TriggerModel=$s;exports.TypeStore=P;exports.UIRaycastUtils=wm;exports.UIRootComponent=Sc;exports.USDDocument=qm;exports.USDObject=ze;exports.USDWriter=Ov;exports.USDZExporter=Rn;exports.USDZExporter$1=Mv;exports.USDZText=$r;exports.USDZUIExtension=fg;exports.UriSerializer=q0;exports.UsageMarker=yc;exports.UserJoinedOrLeftRoomModel=yS;exports.VERSION=Ki;exports.VariantAction=Qm;exports.VelocityOverLifetimeModule=Le;exports.VerticalLayoutGroup=cg;exports.VideoPlayer=Ze;exports.ViewDevice=zs;exports.Vignette=br;exports.VisibilityAction=wc;exports.Voip=eo;exports.Volume=Ea;exports.VolumeParameter=I;exports.VolumeProfile=fu;exports.WaitForFrames=bC;exports.WaitForPromise=w0;exports.WaitForSeconds=mm;exports.Watch=ss;exports.WebARCameraBackground=Qc;exports.WebARSessionRoot=ri;exports.WebXR=lu;exports.WebXRButtonFactory=Ws;exports.WebXRImageTracking=Yc;exports.WebXRImageTrackingModel=vs;exports.WebXRPlaneTracking=xs;exports.WebXRTrackedImage=fa;exports.XRControllerFollow=bs;exports.XRControllerModel=as;exports.XRControllerMovement=di;exports.XRFlag=ki;exports.XRRig=Au;exports.XRState=Lt;exports.XRStateFlag=bn;exports.__Ignore=Rx;exports.__internalNotifyObjectDestroyed=Nb;exports.activeInHierarchyFieldName=os;exports.addAttributeChangeCallback=Q_;exports.addComponent=Zi;exports.addCustomExtensionPlugin=BP;exports.addNewComponent=Lo;exports.addPatch=Ld;exports.apply=Ud;exports.applyHMRChanges=e1;exports.applyPrototypeExtensions=a0;exports.beginListenDestroy=Xb;exports.beginListenInstantiate=Kb;exports.binaryIdentifierCasts=Jp;exports.build_scene_functions=UC;exports.builtinComponentKeyName=wo;exports.calculateProgress01=Ng;exports.clearMessages=pw;exports.colorSerializer=C1;exports.compareAssociation=t0;exports.componentSerializer=Vh;exports.copyTexture=hb;exports.createMotion=V0;exports.debugNet=jt;exports.debugOwner=sl;exports.decompressGpuTexture=Tv;exports.deepClone=Zl;exports.delay=Tn;exports.delayForFrames=Jl;exports.deserializeObject=ld;exports.destroy=li;exports.destroyComponentInstance=h0;exports.determineMimeTypeFromExtension=lv;exports.disposeObjectResources=_e;exports.disposeStream=Sn;exports.editorGuidKeyName=wl;exports.enableSpatialConsole=Eo;exports.euler=O1;exports.eventListSerializer=E1;exports.exportAsGLTF=KR;exports.findByGuid=pm;exports.findObjectOfType=lc;exports.findObjectsOfType=u0;exports.findResourceUsers=rm;exports.fitObjectIntoVolume=ub;exports.foreachComponent=Wo;exports.foreachComponentEnumerator=Nd;exports.forward=Tw;exports.generateQRCode=K_;exports.generateSeed=Yb;exports.getBoundingBox=Wt;exports.getCameraController=nb;exports.getComponent=er;exports.getComponentInChildren=ac;exports.getComponentInParent=Ul;exports.getComponents=rc;exports.getComponentsInChildren=pa;exports.getComponentsInParent=Fd;exports.getFormattedDate=wv;exports.getIconElement=ut;exports.getIconTexture=cp;exports.getLoader=Ji;exports.getOrAddComponent=oc;exports.getParam=x;exports.getParentHierarchyPath=Dw;exports.getPath=Gx;exports.getPeerOptions=dS;exports.getPeerjsInstance=Mb;exports.getResourceUserCount=IS;exports.getTempColor=rb;exports.getTempQuaternion=qi;exports.getTempVector=V;exports.getUrlParams=Kl;exports.getVisibleInCustomShadowRendering=db;exports.getWorldDirection=ab;exports.getWorldEuler=$p;exports.getWorldPosition=X;exports.getWorldQuaternion=ue;exports.getWorldRotation=Td;exports.getWorldScale=Ae;exports.hasCommercialLicense=kn;exports.hasIndieLicense=hc;exports.hasPointerEventComponent=fd;exports.hasProLicense=Mn;exports.hideDebugConsole=gb;exports.imageToCanvas=Av;exports.instantiate=Go;exports.invokeLoadedImportPluginHooks=yv;exports.invokeXRSessionEnd=wb;exports.invokeXRSessionStart=xb;exports.isActiveInHierarchy=f0;exports.isActiveSelf=ma;exports.isAndroidDevice=Kx;exports.isAnimationAction=cb;exports.isComponent=Q0;exports.isDebugMode=Nx;exports.isDesktop=qx;exports.isDestroyed=$o;exports.isDevEnvironment=A;exports.isDisposed=LS;exports.isExporting=QR;exports.isGLTFModel=X0;exports.isHostedOnGlitch=V_;exports.isHotReloadEnabled=pp;exports.isHotReloading=ZC;exports.isIPad=Qx;exports.isIconElement=E0;exports.isLocalNetwork=Ai;exports.isMacOS=Jx;exports.isMobileDevice=Xx;exports.isMozillaXR=Zx;exports.isQuest=iw;exports.isResourceTrackingEnabled=Bb;exports.isSafari=tw;exports.isUsingInstancing=zd;exports.isiOS=ew;exports.isiPad=Yx;exports.loadAsset=LR;exports.loadPMREM=lx;exports.loadSync=zg;exports.logHierarchy=ed;exports.lookAtInverse=Sw;exports.lookAtObject=ec;exports.lookAtScreenPoint=Cw;exports.makeId=$x;exports.makeIdFromRandomWords=H_;exports.makeNameSafe=Ii;exports.markAsInstancedRendered=p0;exports.microphonePermissionsGranted=nw;exports.nameof=zx;exports.nameofFactory=W_;exports.objectSerializer=G0;exports.offXRSessionEnd=nS;exports.offXRSessionStart=iS;exports.onAfterRender=YC;exports.onBeforeRender=QC;exports.onClear=qC;exports.onDestroy=XC;exports.onInitialized=I0;exports.onStart=_m;exports.onUpdate=j0;exports.onXRSessionEnd=Kp;exports.onXRSessionStart=Dd;exports.parseSync=xx;exports.placeOnSurface=fb;exports.postprocessFBXMaterials=Hp;exports.prefix=_1;exports.pushState=G_;exports.randomNumber=Wx;exports.registerBinaryType=em;exports.registerComponent=$d;exports.registerComponentExtension=zm;exports.registerCustomEffectType=Vi;exports.registerExportExtensions=Nm;exports.registerExtensions=bd;exports.registerHotReloadType=F0;exports.registerLoader=Qp;exports.registerPrefabProvider=Jb;exports.registerPrototypeExtensions=l0;exports.registerType=QS;exports.relativePathPrefix=X_;exports.removeAttributeChangeCallback=Y_;exports.removeComponent=fm;exports.removeCustomImportExtensionType=FP;exports.removePatch=eS;exports.resolveUrl=Ys;exports.sanitizeString=q_;exports.saveImage=yx;exports.screenshot=mR;exports.screenshot2=Ug;exports.sendDestroyed=lm;exports.serializable=f;exports.serializeObject=n0;exports.serializeable=tr;exports.setActive=Pl;exports.setAllowBalloonMessages=eb;exports.setAllowOverlayMessages=hw;exports.setAutoFitEnabled=Zh;exports.setCameraController=Gf;exports.setDestroyed=g0;exports.setDevEnvironment=Vw;exports.setDisposable=Ub;exports.setDontDestroy=Ar;exports.setOrAddParamsToUrl=Vf;exports.setParam=Vx;exports.setParamWithoutReload=Il;exports.setPeerOptions=uS;exports.setResourceTrackingEnabled=AS;exports.setState=jp;exports.setVisibleInCustomShadowRendering=Gp;exports.setWorldEuler=Wp;exports.setWorldPosition=Ye;exports.setWorldPositionXYZ=No;exports.setWorldQuaternion=Li;exports.setWorldQuaternionXYZW=Vp;exports.setWorldRotation=lb;exports.setWorldRotationXYZ=tc;exports.setWorldScale=ea;exports.showBalloonError=ic;exports.showBalloonMessage=Se;exports.showBalloonWarning=he;exports.showDebugConsole=qp;exports.slerp=ww;exports.syncDestroy=nc;exports.syncField=ig;exports.syncInstantiate=cm;exports.textureToCanvas=Iw;exports.tryCastBinary=Pb;exports.tryDetermineMimetypeFromBinary=hv;exports.tryDetermineMimetypeFromURL=cv;exports.tryFindObject=Jr;exports.tryGetGuid=Ob;exports.unregisterHotReloadType=U0;exports.unwatchWrite=Bp;exports.useForAutoFit=sb;exports.validate=gt;exports.watchWrite=Ed;
|
|
1616
|
+
`),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),dd(hp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#l()),this.#o.observe(this.#e,{attributes:!0}),zf&&console.log("Needle Button updated")}#l(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#r=e=>{zf&&console.log("Needle Button clicked"),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(N_)&&window.customElements.define(N_,Ox);const il=x("debugavatar");class $g{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(o=>o.layers.set(2))}}class Mx{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){const o=new sn;i=S.instantiate(Jr(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(il&&console.log("[Custom Avatar] valid config",t,il?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,il?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(il&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+t);let o=null;if(n.ok){const a=await n.blob();a&&(o=await a.arrayBuffer())}return o?(await Ji().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return bm(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await Ji().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{il&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){const t=e;let i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]);const o=this.findAvatarPart(i,["left","hand"]),r=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;const l=new c.Vector3;new c.Box3().setFromObject(n).getSize(l);const h=Math.max(l.x,l.y,l.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new $g(t,n,o,r)}findAvatarPart(e,t){const i=e.name.toLowerCase();let n=!0;for(const o of t){if(!n)break;i.indexOf(o)===-1&&(n=!1)}if(n)return e;if(e.children)for(const o of e.children){const r=this.findAvatarPart(o,t);if(r)return r}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}}class kx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Rx{}const eE=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:le,ActionCollection:Iv,ActionModel:zt,AlignmentConstraint:dc,Animation:Gt,AnimationCurve:Tc,AnimationExtension:iu,AnimationTrackHandler:Cu,Animator:mt,AnimatorController:Ti,Antialiasing:Lc,AudioExtension:lr,AudioListener:ts,AudioSource:Di,AudioTrackHandler:ns,Avatar:qs,AvatarBlink_Simple:sr,AvatarEyeLook_Rotation:km,AvatarLoader:Mx,AvatarMarker:we,AvatarModel:$g,Avatar_Brain_LookAt:$l,Avatar_MouthShapes:mc,Avatar_MustacheShake:Om,Avatar_POI:Uo,AxesHelper:ga,BaseUIComponent:ji,BasicIKConstraint:Em,BehaviorExtension:og,BehaviorModel:pt,BloomEffect:mu,BoxCollider:Kd,BoxGizmo:ur,BoxHelperComponent:nt,Button:_s,CallInfo:es,Camera:Vt,CameraTargetReachedEvent:Vl,Canvas:ha,CanvasGroup:Xs,CapsuleCollider:rs,ChangeMaterialOnClick:Ym,ChangeTransformOnClick:cr,CharacterController:or,CharacterControllerInput:hs,ChromaticAberration:Dc,Collider:Xt,ColorAdjustments:lo,ColorBySpeedModule:ka,ColorOverLifetimeModule:uu,ContactShadows:gc,ControlTrackHandler:Pu,CustomBranding:dr,Deletable:Dm,DeleteBox:Vs,DepthOfField:an,DeviceFlag:Zd,DocumentExtension:kx,DragControls:Mo,DropListener:ds,Duplicatable:Bm,EffectWrapper:Xl,EmissionModule:gs,EmphasizeOnClick:va,EnvironmentScene:Eu,EventList:ae,EventListEvent:Hd,EventSystem:Dt,EventTrigger:eu,FieldWithDefault:vv,FixedJoint:bg,Fog:Pa,GltfExport:Hm,GltfExportBox:Wm,Gradient:pr,Graphic:Pc,GraphicRaycaster:qd,GridHelper:Oa,GridLayoutGroup:dg,GroundProjectedEnv:An,GroupActionModel:ko,HideOnStart:Oi,HingeJoint:Mc,HorizontalLayoutGroup:hg,Image:Ta,InheritVelocityModule:Sg,InputField:jg,InstanceHandle:zo,InstancingHandler:Xo,Interactable:Lm,Keyframe:$t,LODGroup:Rc,LODModel:Ma,Light:pi,LimitVelocityOverLifetimeModule:et,LogStats:Am,LookAt:Bg,LookAtConstraint:nr,MainModule:St,MaskableGraphic:Oc,MeshCollider:to,MeshRenderer:_c,MinMaxCurve:G,MinMaxGradient:mr,NeedleMenu:Dn,NestedGltf:Ec,Networking:xg,NoiseModule:fe,ObjectRaycaster:ci,OffsetConstraint:fr,OpenURL:Aa,OrbitControls:de,Outline:Ca,Padding:hr,ParticleBurst:Cd,ParticleSubEmitter:Cg,ParticleSystem:ql,ParticleSystemRenderer:Ni,PhysicsExtension:rg,PixelationEffect:Ic,PlayAnimationOnClick:Gl,PlayAudioOnClick:Hs,PlayableDirector:ua,PlayerColor:da,PointerEventData:fc,PostProcessingHandler:kg,PreliminaryAction:xa,PreliminaryTrigger:xc,RawImage:ku,Rect:zv,RectTransform:nn,ReflectionProbe:Wl,RegisteredAnimationInfo:Us,RemoteSkybox:yu,Renderer:hi,RendererLightmap:vd,Rigidbody:Ke,RotationBySpeedModule:zi,RotationOverLifetimeModule:rn,SceneSwitcher:Ie,ScreenCapture:co,ScreenSpaceAmbientOcclusion:ys,ScreenSpaceAmbientOcclusionN8:ln,SetActiveOnClick:Km,ShadowCatcher:Uc,ShapeModule:wg,SharpeningEffect:Bc,SignalAsset:Su,SignalReceiver:Wc,SignalReceiverEvent:$c,SignalTrackHandler:Ql,Size:Uv,SizeBySpeedModule:Kt,SizeOverLifetimeModule:gr,SkinnedMeshRenderer:$m,SmoothFollow:bu,SpatialGrabRaycaster:Ho,SpatialHtml:qc,SpatialTrigger:vu,SpatialTriggerReceiver:En,SpectatorCamera:xu,SphereCollider:ya,Sprite:fs,SpriteData:Kr,SpriteRenderer:Qt,SpriteSheet:ca,SubEmitterSystem:Pd,SyncedCamera:Eg,SyncedRoom:cn,SyncedTransform:tn,TapGestureTrigger:Jm,TeleportTarget:au,TestRunner:Tg,TestSimulateUserData:Ag,Text:wt,TextBuilder:lg,TextExtension:cu,TextureSheetAnimationModule:Ct,TiltShiftEffect:Bn,ToneMappingEffect:Qs,TrailModule:Ee,TransformData:ke,TransformGizmo:vr,TriggerBuilder:vt,TriggerModel:$s,UIRaycastUtils:wm,UIRootComponent:Sc,USDZExporter:Rn,USDZText:$r,USDZUIExtension:fg,UsageMarker:yc,VariantAction:Qm,VelocityOverLifetimeModule:Le,VerticalLayoutGroup:cg,VideoPlayer:Ze,Vignette:br,VisibilityAction:wc,Voip:eo,Volume:Ea,VolumeParameter:I,VolumeProfile:fu,WebARCameraBackground:Qc,WebARSessionRoot:ri,WebXR:lu,WebXRImageTracking:Yc,WebXRImageTrackingModel:vs,WebXRPlaneTracking:xs,WebXRTrackedImage:fa,XRControllerFollow:bs,XRControllerModel:as,XRControllerMovement:di,XRFlag:ki,XRRig:Au,XRState:Lt,__Ignore:Rx},Symbol.toStringTag,{value:"Module"})),Rd=x("debugmissingcamera");re.registerCallback(oe.MissingCamera,s=>{Rd&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new Vt;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Fo.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Fo.Skybox;else{if(i.clearFlags=Fo.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new Eu("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Lo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&Ex(s.context,o),o});re.registerCallback(oe.ContextCreated,s=>{if(!s.context.mainCamera){Rd&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(nb(s.context.mainCamera)?.isCameraController==!0){Rd&&console.log("Will not auto-fit because a camera controller exists");return}Ex(s.context)}});function Ex(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Rd&&console.log("Creating default camera controls",e?.name),t){const i=oc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&n?.toLowerCase()!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const o=parseFloat(n);isNaN(o)||(i.autoRotateSpeed=o)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(oe.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Gt&&n.playAutomatically||n instanceof mt||n instanceof ua&&n.playOnAwake===!0)return!0;if(n instanceof Gt)return n.playAutomatically=!0,!0;if(n instanceof ua)return n.playOnAwake=!0,!0}},!0)!==!0&&ra.autoplayAnimations(t.file)});class tE extends se.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-2qGLkQjg.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Du&&Du.tagName.toUpperCase()==="SCRIPT"&&Du.src||new URL("needle-engine.bundle-DGca1cic.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:p}=d,m=se.MeshBVH.deserialize(u,t,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,u.index)if(t.index)t.index.array=u.index;else{const b=new c.BufferAttribute(u.index,1,!1);t.setIndex(b)}y.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 iE=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:tE},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=H1;exports.ActionBuilder=le;exports.ActionCollection=Iv;exports.ActionModel=zt;exports.Addressables=b0;exports.AlignmentConstraint=dc;exports.AmbientMode=Qr;exports.Animation=Gt;exports.AnimationCurve=Tc;exports.AnimationExtension=iu;exports.AnimationTrackHandler=Cu;exports.AnimationUtils=ra;exports.Animator=mt;exports.AnimatorConditionMode=Ds;exports.AnimatorController=Ti;exports.AnimatorControllerParameterType=vm;exports.AnimatorStateInfo=al;exports.Antialiasing=Lc;exports.Application=en;exports.AssetDatabase=Ib;exports.AssetReference=Y;exports.AudioExtension=lr;exports.AudioListener=ts;exports.AudioSource=Di;exports.AudioTrackHandler=ns;exports.Avatar=qs;exports.AvatarBlink_Simple=sr;exports.AvatarEyeLook_Rotation=km;exports.AvatarLoader=Mx;exports.AvatarMarker=we;exports.AvatarModel=$g;exports.Avatar_Brain_LookAt=$l;exports.Avatar_MouthShapes=mc;exports.Avatar_MustacheShake=Om;exports.Avatar_POI=Uo;exports.Axes=Nr;exports.AxesHelper=ga;exports.BUILD_TIME=Xp;exports.BaseUIComponent=ji;exports.BasicIKConstraint=Em;exports.BehaviorExtension=og;exports.BehaviorModel=pt;exports.BloomEffect=mu;exports.BoxCollider=Kd;exports.BoxGizmo=ur;exports.BoxHelperComponent=nt;exports.Button=_s;exports.ButtonsFactory=Qi;exports.CallDirection=ev;exports.CallInfo=es;exports.Camera=Vt;exports.CameraTargetReachedEvent=Vl;exports.Canvas=ha;exports.CanvasGroup=Xs;exports.CapsuleCollider=rs;exports.ChangeMaterialOnClick=Ym;exports.ChangeTransformOnClick=cr;exports.CharacterController=or;exports.CharacterControllerInput=hs;exports.ChromaticAberration=Dc;exports.CircularBuffer=ai;exports.ClearFlags=Fo;exports.ClipExtrapolation=pn;exports.Collider=Xt;exports.Collision=K0;exports.CollisionDetectionMode=Gd;exports.ColorAdjustments=lo;exports.ColorBySpeedModule=ka;exports.ColorOverLifetimeModule=uu;exports.Component=t1;exports.Component$1=k;exports.ComponentLifecycleEvents=Bd;exports.Components=eE;exports.ConnectionEvents=Rb;exports.ContactPoint=Y0;exports.ContactShadows=gc;exports.Context=F;exports.ContextArgs=zC;exports.ContextEvent=oe;exports.ContextRegistry=re;exports.ControlTrackHandler=Pu;exports.CustomBranding=dr;exports.CustomShader=ye;exports.DefaultReflectionMode=hd;exports.Deletable=Dm;exports.DeleteBox=Vs;exports.DepthOfField=an;exports.DeviceFlag=Zd;exports.DocumentExtension=kx;exports.DragControls=Mo;exports.DragMode=Im;exports.DropListener=ds;exports.Duplicatable=Bm;exports.EffectWrapper=Xl;exports.EmissionModule=gs;exports.EmphasizeOnClick=va;exports.EngineLoadingView=Yl;exports.EnvironmentScene=Eu;exports.EventList=ae;exports.EventListEvent=Hd;exports.EventSystem=Dt;exports.EventTrigger=eu;exports.FieldWithDefault=vv;exports.FileReference=jo;exports.FileReferenceSerializer=x0;exports.FileSpawnModel=mP;exports.File_Event=av;exports.FixedJoint=bg;exports.Fog=Pa;exports.FrameEvent=pe;exports.GENERATOR=Ad;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=Hm;exports.GltfExportBox=Wm;exports.Gradient=pr;exports.Graphic=Pc;exports.GraphicRaycaster=qd;exports.Graphics=Gs;exports.GridHelper=Oa;exports.GridLayoutGroup=dg;exports.GroundProjectedEnv=An;exports.GroupActionModel=ko;exports.HideFlags=Xd;exports.HideOnStart=Oi;exports.HingeJoint=Mc;exports.HorizontalLayoutGroup=hg;exports.HostData=WS;exports.Image=Ta;exports.ImageReference=Io;exports.ImageReferenceSerializer=v0;exports.InheritVelocityModule=Sg;exports.Input=Sb;exports.InputEventQueue=Nt;exports.InputEvents=xe;exports.InputField=jg;exports.InstanceHandle=zo;exports.InstancingHandler=Xo;exports.InstancingUtil=Ei;exports.InstantiateEvent=qb;exports.InstantiateIdProvider=ft;exports.InstantiateOptions=sn;exports.Interactable=Lm;exports.JoinedRoomResponse=mS;exports.KeyEventArgs=sS;exports.Keyframe=$t;exports.LODGroup=Rc;exports.LODModel=Ma;exports.LeftRoomResponse=gS;exports.Light=pi;exports.LightData=O0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=UR;exports.LogStats=Am;exports.LogType=oi;exports.LookAt=Bg;exports.LookAtConstraint=nr;exports.MainModule=St;exports.MarkerType=Lg;exports.MaskableGraphic=Oc;exports.Mathf=D;exports.MeshCollider=to;exports.MeshRenderer=_c;exports.MinMaxCurve=G;exports.MinMaxGradient=mr;exports.NEKeyboardEvent=nl;exports.NEPointerEvent=Qn;exports.NeedleButtonElement=Ox;exports.NeedleEngineWebComponent=Vg;exports.NeedleMenu=Dn;exports.NeedlePatchesKey=Lh;exports.NeedleXRController=Zp;exports.NeedleXRSession=H;exports.NeedleXRSync=Ab;exports.NeedleXRUtils=Db;exports.NestedGltf=Ec;exports.NetworkConnection=Tb;exports.NetworkedStreamEvents=wn;exports.NetworkedStreams=pc;exports.Networking=xg;exports.NewInstanceModel=Qb;exports.NoiseModule=fe;exports.ObjectRaycaster=ci;exports.ObjectUtils=Zo;exports.OffsetConstraint=fr;exports.OneEuroFilter=Th;exports.OneEuroFilterXYZ=zp;exports.OpenURL=Aa;exports.OrbitControls=de;exports.Outline=Ca;exports.OwnershipEvent=Eb;exports.OwnershipModel=im;exports.PUBLIC_KEY=Fr;exports.Padding=hr;exports.ParticleBurst=Cd;exports.ParticleSubEmitter=Cg;exports.ParticleSystem=ql;exports.ParticleSystemBaseBehaviour=ao;exports.ParticleSystemRenderer=Ni;exports.ParticleSystemShapeType=Sd;exports.PeerHandle=is;exports.PeerNetworking=kb;exports.Physics=sa;exports.PhysicsExtension=rg;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=Ic;exports.PlayAnimationOnClick=Gl;exports.PlayAudioOnClick=Hs;exports.PlayableDirector=ua;exports.PlayerColor=da;exports.PlayerState=Yi;exports.PlayerStateEvent=Fv;exports.PlayerSync=ng;exports.PlayerView=S0;exports.PlayerViewManager=C0;exports.PointerEventData=fc;exports.PointerType=Id;exports.PostProcessingEffect=Ne;exports.PostProcessingEffectOrder=Qe;exports.PostProcessingHandler=kg;exports.PreliminaryAction=xa;exports.PreliminaryTrigger=xc;exports.PrimitiveType=Vo;exports.Progress=ie;exports.PromiseAllWithErrors=Fp;exports.PromiseErrorResult=$f;exports.RGBAColor=Z;exports.RapierPhysics=Zr;exports.RawImage=ku;exports.RaycastOptions=Js;exports.Rect=zv;exports.RectTransform=nn;exports.ReflectionProbe=Wl;exports.RegisteredAnimationInfo=Us;exports.RemoteSkybox=yu;exports.RenderTexture=xn;exports.RenderTextureSerializer=H0;exports.Renderer=hi;exports.RendererData=P0;exports.RendererLightmap=vd;exports.Rigidbody=Ke;exports.RigidbodyConstraints=De;exports.RoomEvents=Q;exports.RotationBySpeedModule=zi;exports.RotationOverLifetimeModule=rn;exports.SceneLightSettings=yd;exports.SceneSwitcher=Ie;exports.ScreenCapture=co;exports.ScreenSpaceAmbientOcclusion=ys;exports.ScreenSpaceAmbientOcclusionN8=ln;exports.SendQueue=Xi;exports.SerializationContext=um;exports.SetActiveOnClick=Km;exports.ShadowCatcher=Uc;exports.ShapeModule=wg;exports.ShapeOverlapResult=Z0;exports.SharpeningEffect=Bc;exports.SignalAsset=Su;exports.SignalReceiver=Wc;exports.SignalReceiverEvent=$c;exports.SignalTrackHandler=Ql;exports.Size=Uv;exports.SizeBySpeedModule=Kt;exports.SizeOverLifetimeModule=gr;exports.SkinnedMeshRenderer=$m;exports.SmoothFollow=bu;exports.SpatialGrabRaycaster=Ho;exports.SpatialHtml=qc;exports.SpatialTrigger=vu;exports.SpatialTriggerReceiver=En;exports.SpectatorCamera=xu;exports.SphereCollider=ya;exports.SphereIntersection=om;exports.Sprite=fs;exports.SpriteData=Kr;exports.SpriteRenderer=Qt;exports.SpriteSheet=ca;exports.StateMachineBehaviour=a1;exports.StreamEndedEvent=Cm;exports.StreamReceivedEvent=J0;exports.SubEmitterSystem=Pd;exports.SyncedCamera=Eg;exports.SyncedRoom=cn;exports.SyncedTransform=tn;exports.TapGestureTrigger=Jm;exports.TeleportTarget=au;exports.TestRunner=Tg;exports.TestSceneUtils=XR;exports.TestSimulateUserData=Ag;exports.Text=wt;exports.TextBuilder=lg;exports.TextExtension=cu;exports.TextureSheetAnimationModule=Ct;exports.TiltShiftEffect=Bn;exports.Time=M0;exports.ToneMappingEffect=Qs;exports.TrackHandler=Gc;exports.TrackType=ei;exports.TrailModule=Ee;exports.TransformData=ke;exports.TransformGizmo=vr;exports.TriggerBuilder=vt;exports.TriggerModel=$s;exports.TypeStore=P;exports.UIRaycastUtils=wm;exports.UIRootComponent=Sc;exports.USDDocument=qm;exports.USDObject=ze;exports.USDWriter=Ov;exports.USDZExporter=Rn;exports.USDZExporter$1=Mv;exports.USDZText=$r;exports.USDZUIExtension=fg;exports.UriSerializer=q0;exports.UsageMarker=yc;exports.UserJoinedOrLeftRoomModel=yS;exports.VERSION=Ki;exports.VariantAction=Qm;exports.VelocityOverLifetimeModule=Le;exports.VerticalLayoutGroup=cg;exports.VideoPlayer=Ze;exports.ViewDevice=zs;exports.Vignette=br;exports.VisibilityAction=wc;exports.Voip=eo;exports.Volume=Ea;exports.VolumeParameter=I;exports.VolumeProfile=fu;exports.WaitForFrames=bC;exports.WaitForPromise=w0;exports.WaitForSeconds=mm;exports.Watch=ss;exports.WebARCameraBackground=Qc;exports.WebARSessionRoot=ri;exports.WebXR=lu;exports.WebXRButtonFactory=Ws;exports.WebXRImageTracking=Yc;exports.WebXRImageTrackingModel=vs;exports.WebXRPlaneTracking=xs;exports.WebXRTrackedImage=fa;exports.XRControllerFollow=bs;exports.XRControllerModel=as;exports.XRControllerMovement=di;exports.XRFlag=ki;exports.XRRig=Au;exports.XRState=Lt;exports.XRStateFlag=bn;exports.__Ignore=Rx;exports.__internalNotifyObjectDestroyed=Nb;exports.activeInHierarchyFieldName=os;exports.addAttributeChangeCallback=Q_;exports.addComponent=Zi;exports.addCustomExtensionPlugin=BP;exports.addNewComponent=Lo;exports.addPatch=Ld;exports.apply=Ud;exports.applyHMRChanges=e1;exports.applyPrototypeExtensions=a0;exports.beginListenDestroy=Xb;exports.beginListenInstantiate=Kb;exports.binaryIdentifierCasts=Jp;exports.build_scene_functions=UC;exports.builtinComponentKeyName=wo;exports.calculateProgress01=Ng;exports.clearMessages=pw;exports.colorSerializer=C1;exports.compareAssociation=t0;exports.componentSerializer=Vh;exports.copyTexture=hb;exports.createMotion=V0;exports.debugNet=jt;exports.debugOwner=sl;exports.decompressGpuTexture=Tv;exports.deepClone=Zl;exports.delay=Tn;exports.delayForFrames=Jl;exports.deserializeObject=ld;exports.destroy=li;exports.destroyComponentInstance=h0;exports.determineMimeTypeFromExtension=lv;exports.disposeObjectResources=_e;exports.disposeStream=Sn;exports.editorGuidKeyName=wl;exports.enableSpatialConsole=Eo;exports.euler=O1;exports.eventListSerializer=E1;exports.exportAsGLTF=KR;exports.findByGuid=pm;exports.findObjectOfType=lc;exports.findObjectsOfType=u0;exports.findResourceUsers=rm;exports.fitObjectIntoVolume=ub;exports.foreachComponent=Wo;exports.foreachComponentEnumerator=Nd;exports.forward=Tw;exports.generateQRCode=K_;exports.generateSeed=Yb;exports.getBoundingBox=Wt;exports.getCameraController=nb;exports.getComponent=er;exports.getComponentInChildren=ac;exports.getComponentInParent=Ul;exports.getComponents=rc;exports.getComponentsInChildren=pa;exports.getComponentsInParent=Fd;exports.getFormattedDate=wv;exports.getIconElement=ut;exports.getIconTexture=cp;exports.getLoader=Ji;exports.getOrAddComponent=oc;exports.getParam=x;exports.getParentHierarchyPath=Dw;exports.getPath=Gx;exports.getPeerOptions=dS;exports.getPeerjsInstance=Mb;exports.getResourceUserCount=IS;exports.getTempColor=rb;exports.getTempQuaternion=qi;exports.getTempVector=V;exports.getUrlParams=Kl;exports.getVisibleInCustomShadowRendering=db;exports.getWorldDirection=ab;exports.getWorldEuler=$p;exports.getWorldPosition=X;exports.getWorldQuaternion=ue;exports.getWorldRotation=Td;exports.getWorldScale=Ae;exports.hasCommercialLicense=kn;exports.hasIndieLicense=hc;exports.hasPointerEventComponent=fd;exports.hasProLicense=Mn;exports.hideDebugConsole=gb;exports.imageToCanvas=Av;exports.instantiate=Go;exports.invokeLoadedImportPluginHooks=yv;exports.invokeXRSessionEnd=wb;exports.invokeXRSessionStart=xb;exports.isActiveInHierarchy=f0;exports.isActiveSelf=ma;exports.isAndroidDevice=Kx;exports.isAnimationAction=cb;exports.isComponent=Q0;exports.isDebugMode=Nx;exports.isDesktop=qx;exports.isDestroyed=$o;exports.isDevEnvironment=A;exports.isDisposed=LS;exports.isExporting=QR;exports.isGLTFModel=X0;exports.isHostedOnGlitch=V_;exports.isHotReloadEnabled=pp;exports.isHotReloading=ZC;exports.isIPad=Qx;exports.isIconElement=E0;exports.isLocalNetwork=Ai;exports.isMacOS=Jx;exports.isMobileDevice=Xx;exports.isMozillaXR=Zx;exports.isQuest=iw;exports.isResourceTrackingEnabled=Bb;exports.isSafari=tw;exports.isUsingInstancing=zd;exports.isiOS=ew;exports.isiPad=Yx;exports.loadAsset=LR;exports.loadPMREM=lx;exports.loadSync=zg;exports.logHierarchy=ed;exports.lookAtInverse=Sw;exports.lookAtObject=ec;exports.lookAtScreenPoint=Cw;exports.makeId=$x;exports.makeIdFromRandomWords=H_;exports.makeNameSafe=Ii;exports.markAsInstancedRendered=p0;exports.microphonePermissionsGranted=nw;exports.nameof=zx;exports.nameofFactory=W_;exports.objectSerializer=G0;exports.offXRSessionEnd=nS;exports.offXRSessionStart=iS;exports.onAfterRender=YC;exports.onBeforeRender=QC;exports.onClear=qC;exports.onDestroy=XC;exports.onInitialized=I0;exports.onStart=_m;exports.onUpdate=j0;exports.onXRSessionEnd=Kp;exports.onXRSessionStart=Dd;exports.parseSync=xx;exports.placeOnSurface=fb;exports.postprocessFBXMaterials=Hp;exports.prefix=_1;exports.pushState=G_;exports.randomNumber=Wx;exports.registerBinaryType=em;exports.registerComponent=$d;exports.registerComponentExtension=zm;exports.registerCustomEffectType=Vi;exports.registerExportExtensions=Nm;exports.registerExtensions=bd;exports.registerHotReloadType=F0;exports.registerLoader=Qp;exports.registerPrefabProvider=Jb;exports.registerPrototypeExtensions=l0;exports.registerType=QS;exports.relativePathPrefix=X_;exports.removeAttributeChangeCallback=Y_;exports.removeComponent=fm;exports.removeCustomImportExtensionType=FP;exports.removePatch=eS;exports.resolveUrl=Ys;exports.sanitizeString=q_;exports.saveImage=yx;exports.screenshot=mR;exports.screenshot2=Ug;exports.sendDestroyed=lm;exports.serializable=f;exports.serializeObject=n0;exports.serializeable=tr;exports.setActive=Pl;exports.setAllowBalloonMessages=eb;exports.setAllowOverlayMessages=hw;exports.setAutoFitEnabled=Zh;exports.setCameraController=Gf;exports.setDestroyed=g0;exports.setDevEnvironment=Vw;exports.setDisposable=Ub;exports.setDontDestroy=Ar;exports.setOrAddParamsToUrl=Vf;exports.setParam=Vx;exports.setParamWithoutReload=Il;exports.setPeerOptions=uS;exports.setResourceTrackingEnabled=AS;exports.setState=jp;exports.setVisibleInCustomShadowRendering=Gp;exports.setWorldEuler=Wp;exports.setWorldPosition=Ye;exports.setWorldPositionXYZ=No;exports.setWorldQuaternion=Li;exports.setWorldQuaternionXYZW=Vp;exports.setWorldRotation=lb;exports.setWorldRotationXYZ=tc;exports.setWorldScale=ea;exports.showBalloonError=ic;exports.showBalloonMessage=Se;exports.showBalloonWarning=he;exports.showDebugConsole=qp;exports.slerp=ww;exports.syncDestroy=nc;exports.syncField=ig;exports.syncInstantiate=cm;exports.textureToCanvas=Iw;exports.tryCastBinary=Pb;exports.tryDetermineMimetypeFromBinary=hv;exports.tryDetermineMimetypeFromURL=cv;exports.tryFindObject=Jr;exports.tryGetGuid=Ob;exports.unregisterHotReloadType=U0;exports.unwatchWrite=Bp;exports.useForAutoFit=sb;exports.validate=gt;exports.watchWrite=Ed;
|