@needle-tools/engine 5.0.0-next.40cc839 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{needle-engine.bundle-CAt_h_GH.umd.cjs → needle-engine.bundle-BAYLGumK.umd.cjs} +3 -3
- package/dist/{needle-engine.bundle-DysB2Idj.js → needle-engine.bundle-BDIyvCV6.js} +2 -2
- package/dist/{needle-engine.bundle-BLroQ2QT.min.js → needle-engine.bundle-CoEvMwYM.min.js} +1 -1
- package/dist/needle-engine.d.ts +22 -22
- package/dist/needle-engine.js +2 -2
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/package.json +2 -2
package/dist/{needle-engine.bundle-CAt_h_GH.umd.cjs → needle-engine.bundle-BAYLGumK.umd.cjs}
RENAMED
|
@@ -140,7 +140,7 @@ void main(){
|
|
|
140
140
|
#__vconsole .vc-mask {
|
|
141
141
|
overflow: hidden;
|
|
142
142
|
}
|
|
143
|
-
`,Lo?.prepend(i),s===!0&&_v()<=0&&Bv(),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.":"")),vl=!1,Zt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function aC(){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"),Zt?.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}const Up="padding: 10px; font-family: monospace;",h_="margin-bottom: 10px;",Io="margin-bottom: 10px; margin-top: 15px;",lC="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Fv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",cC=Fv,hC=Fv+" word-break: break-all;";function En(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${lC}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${cC}'>${i.label}</td><td style='${hC}'>${n}</td></tr>`}return t+="</tbody></table>",t}function Uv(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function dC(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Up}'>`;const i=wC();t+=`<h3 style='${h_}'>Device: ${i}</h3>`,t+=En([{label:"💻 Desktop",value:exports.DeviceUtilities.isDesktop()},{label:"📱 Mobile Device",value:exports.DeviceUtilities.isMobileDevice()},{label:"🍎 iOS",value:exports.DeviceUtilities.isiOS()},{label:"📱 iPad",value:exports.DeviceUtilities.isiPad()},{label:"🤖 Android",value:exports.DeviceUtilities.isAndroidDevice()},{label:"🦊 Mozilla XR",value:exports.DeviceUtilities.isMozillaXR()},{label:"🌵 Needle App Clip",value:exports.DeviceUtilities.isNeedleAppClip()},{label:"🍏 macOS",value:exports.DeviceUtilities.isMacOS()},{label:"👓 VisionOS",value:exports.DeviceUtilities.isVisionOS()},{label:"🧭 Safari",value:exports.DeviceUtilities.isSafari()},{label:"🕶️ Meta Quest",value:exports.DeviceUtilities.isQuest()},{label:"🔗 QuickLook AR Support",value:exports.DeviceUtilities.supportsQuickLookAR()}],!0);const n=[],o=exports.DeviceUtilities.getiOSVersion();o&&n.push({label:"🍎 iOS Version",value:o});const r=exports.DeviceUtilities.getChromeVersion();r&&n.push({label:"🌐 Chrome Version",value:r});const a=exports.DeviceUtilities.getSafariVersion();a&&n.push({label:"🧭 Safari Version",value:a}),n.length>0&&(t+=En(n,!1)),t+="</div>",t+=`<div style='${Up} margin-top: 20px;'>`,t+=`<h3 style='${h_}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"✅":"❌"},{label:"WebGPU",value:"gpu"in navigator?"✅":"❌"},{label:"WebGL 2",value:Uv()}];t+=En(l,!1),t+="</div>",e(t)}),s}function uC(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Up}'>`;const i=fC();i.length>0&&(t+=`<h3 style='${Io}'>General GPU Info</h3>`,t+=En(i,!1));const n=mC();n.length>0&&(t+=`<h3 style='${Io}'>WebGL</h3>`,t+=En(n,!1));const o=gC();o.length>0&&(t+=`<h3 style='${Io}'>WebGL 2 Features</h3>`,t+=En(o,!1));const r=yC();r.length>0&&(t+=`<h3 style='${Io}'>WebGL Limits</h3>`,t+=En(r,!1));const a=_C();a.length>0&&(t+=`<h3 style='${Io}'>Texture Formats</h3>`,t+=En(a,!1));const l=await bC();if(l.length>0&&(t+=`<h3 style='${Io}'>WebGPU</h3>`,t+=En(l,!1)),exports.DeviceUtilities.isSafari()){const h=vC();h.length>0&&(t+=`<h3 style='${Io}'>Safari GPU Info</h3>`,t+=En(h,!1))}t+="</div>",e(t)}),s}function fC(){const s=[],e=window.devicePixelRatio;s.push({label:"Device Pixel Ratio",value:e.toString()}),s.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),s.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const i=exports.DeviceUtilities.isMobileDevice()?150:96,n=screen.width/i,o=screen.height/i,r=n*2.54,a=o*2.54;s.push({label:"Estimated Width (cm)",value:r.toFixed(1)}),s.push({label:"Estimated Height (cm)",value:a.toFixed(1)});const l=zv();if(l){s.push({label:"GPU",value:l.renderer}),s.push({label:"Driver",value:l.vendor}),s.push({label:"ANGLE",value:l.angle||"Not detected"});const h=pC(l.renderer);h&&(h.manufacturer&&s.push({label:"Manufacturer",value:h.manufacturer}),h.cardVersion&&s.push({label:"Card Version",value:h.cardVersion}),h.brand&&s.push({label:"Brand",value:h.brand}),s.push({label:"Integrated",value:h.integrated?"Yes":"No"}),h.layer&&s.push({label:"WebGL Layer",value:h.layer}))}return s}function pC(s){if(!s)return null;const e=(h,d)=>{const u=d.match(h);return u&&u[0]},t=e(/(ANGLE)/g,s)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,s)||s,n=i.split(" ");n.shift();const o=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:o,cardVersion:r,brand:a,integrated:o==="Intel",layer:t,card:i}}function mC(){const s=[],e=zv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:Uv()})),s}function gC(){const s=[];try{const t=document.createElement("canvas").getContext("webgl2");if(!t)return s;s.push({label:"Float Color Buffer",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:t.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:t.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:t.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:t.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:t.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:t.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function yC(){const s=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return s;const i=t instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(s.push({label:"⚡ Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function _C(){const s=[];try{document.createElement("canvas").getContext("webgl")&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const n=document.createElement("canvas").getContext("webgl2");n&&(s.push({label:"WebGL 2 RGBA32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 R11F_G11F_B10F",value:"✅"}),s.push({label:"WebGL 2 RGB565",value:"✅"}),s.push({label:"WebGL 2 RGB5_A1",value:"✅"}),s.push({label:"WebGL 2 RGBA4444",value:"✅"}))}catch{}return s}async function bC(){const s=[];if(!("gpu"in navigator))return s.push({label:"🚀 WebGPU Support",value:"❌ Not supported"}),s;s.push({label:"🚀 WebGPU Support",value:"✅ Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return s.push({label:"🎯 Adapter",value:"No adapter available"}),s;s.push({label:"🎯 Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();s.push({label:"🔧 Device",value:t.label||"WebGPU Device"}),s.push({label:"📏 Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),s.push({label:"📐 Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),s.push({label:"📊 Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),s.push({label:"💾 Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),s.push({label:"🔗 Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){s.push({label:"❌ Error",value:e.message})}return s}function zv(){try{const s=document.createElement("canvas"),e=s.getContext("webgl2")||s.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),o=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:o,angle:r}}catch{return null}}function vC(){const s=[];try{const t=document.createElement("canvas").getContext("webgl");if(t){const i=t.getExtension("WEBGL_debug_renderer_info");if(i){const n=t.getParameter(i.UNMASKED_RENDERER_WEBGL);n&&n.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:n})}}}catch{}try{const t=document.createElement("canvas").getContext("webgl");t&&(t.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function wC(){return exports.DeviceUtilities.isQuest()?"Meta Quest":exports.DeviceUtilities.isVisionOS()?"Vision Pro":exports.DeviceUtilities.isiOS()?exports.DeviceUtilities.isiPad()?"iPad":"iPhone/iPod":exports.DeviceUtilities.isAndroidDevice()?"Android Device":exports.DeviceUtilities.isMozillaXR()?"Mozilla XR Browser":exports.DeviceUtilities.isNeedleAppClip()?"Needle App Clip":exports.DeviceUtilities.isMacOS()?"Mac":exports.DeviceUtilities.isDesktop()?"Desktop PC":"Unknown Device"}function xC(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function SC(){const s=document.querySelector("#__vconsole");return s||null}const jh=x("debugtypes");class CC{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){jh&&console.warn("TypeStore: Created",this)}add(e,t){jh&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?jh&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){jh&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const PC=Symbol("BuiltInType"),P=new CC,qm=function(s){P.get(s.name)||P.add(s.name,s)};class OC{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}class Hn{static testIfRootCanAnimate(e,t){const i=e.getRoot();return i&&(i.userData.static||i.matrixAutoUpdate===!1||i.matrixWorldAutoUpdate===!1)?((t===!0||t===void 0&&A())&&console.warn(`AnimationUtils: The root object (${i.name||i.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:i.userData.static,name:i.userData.name,tag:i.userData.tag,matrixAutoUpdate:i.matrixAutoUpdate,matrixWorldAutoUpdate:i.matrixWorldAutoUpdate}),!1):!0}static tryGetActionsFromMixer(e){const t=e._actions;return t||null}static tryGetAnimationClipsFromObjectHierarchy(e,t){if(t||(t=new Array),e)e.animations&&t.push(...e.animations);else return t;if(e.children)for(const i of e.children)this.tryGetAnimationClipsFromObjectHierarchy(i,t);return t}static autoplayAnimations(e){if(!e||!e.animations)return console.debug("No animations found in file"),null;const t="scene"in e?e.scene:e,i=new Array;for(let o=0;o<e.animations.length;o++){const r=e.animations[o];if(!r.tracks||r.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const a in r.tracks){const l=r.tracks[a],h=c.PropertyBinding.parseTrackName(l.name);let d=c.PropertyBinding.findNode(t,h.nodeName);if(!d){const p=l.__objectName??l.name.substring(0,l.name.indexOf("."));if(d=t.getObjectByProperty("uuid",p),!d)continue}let u=n(d)||n(t);if(!u){const p=P.get("Animation");if(u=t.addComponent(p),!u){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}i.push(u),u.addClip&&u.addClip(r)}}return i;function n(o){if(!o)return null;const r=o.userData?.components;if(r&&r.length>0)for(let a=0;a<r.length;a++){const l=r[a];if(l.isAnimationComponent===!0)return l}return n(o.parent)}}static emptyClip(){return new c.AnimationClip("empty",0,[])}static createScaleClip(e){const t=e?.duration??.3;let i={x:1,y:1,z:1};e?.scale!==void 0&&(typeof e.scale=="number"?i={x:e.scale,y:e.scale,z:e.scale}:i=e.scale);const n=e?.type??"linear",o=e?.scaleFactor??1.2,r=new Array,a=new Array;switch(n){case"linear":r.push(0,t),a.push(i.x,i.y,i.z,i.x*o,i.y*o,i.z*o);break;case"spring":r.push(0,t*.3,t*.5,t*.7,t*.9,t),a.push(i.x,i.y,i.z,i.x*o,i.y*o,i.z*o,i.x*.9,i.y*.9,i.z*.9,i.x*1.05,i.y*1.05,i.z*1.05,i.x*.98,i.y*.98,i.z*.98,i.x,i.y,i.z);break}const l=new c.KeyframeTrack(".scale",r,a);return new c.AnimationClip("scale",r[r.length-1],[l])}}const Be=function(s){return f(s)},f=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=d_(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=d_(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function d_(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const u_=x("debugcomponentevents");class gu{static eventListeners=new Map;static addComponentLifecylceEventListener(e,t){this.eventListeners.has(e)&&this.eventListeners.set(e,[]);let i=this.eventListeners.get(e);i||(i=[]),i.push(t),this.eventListeners.set(e,i),u_&&console.log("Added event listener for "+e,this.eventListeners)}static removeComponentLifecylceEventListener(e,t){const i=this.eventListeners.get(e);if(!i)return;const n=i.indexOf(t);n<0||i.splice(n,1)}static dispatchComponentLifecycleEvent(e,t){const i=this.eventListeners.get(e);if(u_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const Nv=x("debugdefines");go('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');go('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');go('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');go('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');go('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.0.0";');go('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');go('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Mar 27 2026 14:01:21 GMT+0000 (Coordinated Universal Time)";');go('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const ii="5.0.0",Ea="undefined",_c="Fri Mar 27 2026 14:01:21 GMT+0000 (Coordinated Universal Time)";Nv&&console.log(`Engine version: ${ii} (generator: ${Ea})
|
|
143
|
+
`,Lo?.prepend(i),s===!0&&_v()<=0&&Bv(),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.":"")),vl=!1,Zt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function aC(){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"),Zt?.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}const Up="padding: 10px; font-family: monospace;",h_="margin-bottom: 10px;",Io="margin-bottom: 10px; margin-top: 15px;",lC="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Fv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",cC=Fv,hC=Fv+" word-break: break-all;";function En(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${lC}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${cC}'>${i.label}</td><td style='${hC}'>${n}</td></tr>`}return t+="</tbody></table>",t}function Uv(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function dC(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Up}'>`;const i=wC();t+=`<h3 style='${h_}'>Device: ${i}</h3>`,t+=En([{label:"💻 Desktop",value:exports.DeviceUtilities.isDesktop()},{label:"📱 Mobile Device",value:exports.DeviceUtilities.isMobileDevice()},{label:"🍎 iOS",value:exports.DeviceUtilities.isiOS()},{label:"📱 iPad",value:exports.DeviceUtilities.isiPad()},{label:"🤖 Android",value:exports.DeviceUtilities.isAndroidDevice()},{label:"🦊 Mozilla XR",value:exports.DeviceUtilities.isMozillaXR()},{label:"🌵 Needle App Clip",value:exports.DeviceUtilities.isNeedleAppClip()},{label:"🍏 macOS",value:exports.DeviceUtilities.isMacOS()},{label:"👓 VisionOS",value:exports.DeviceUtilities.isVisionOS()},{label:"🧭 Safari",value:exports.DeviceUtilities.isSafari()},{label:"🕶️ Meta Quest",value:exports.DeviceUtilities.isQuest()},{label:"🔗 QuickLook AR Support",value:exports.DeviceUtilities.supportsQuickLookAR()}],!0);const n=[],o=exports.DeviceUtilities.getiOSVersion();o&&n.push({label:"🍎 iOS Version",value:o});const r=exports.DeviceUtilities.getChromeVersion();r&&n.push({label:"🌐 Chrome Version",value:r});const a=exports.DeviceUtilities.getSafariVersion();a&&n.push({label:"🧭 Safari Version",value:a}),n.length>0&&(t+=En(n,!1)),t+="</div>",t+=`<div style='${Up} margin-top: 20px;'>`,t+=`<h3 style='${h_}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"✅":"❌"},{label:"WebGPU",value:"gpu"in navigator?"✅":"❌"},{label:"WebGL 2",value:Uv()}];t+=En(l,!1),t+="</div>",e(t)}),s}function uC(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Up}'>`;const i=fC();i.length>0&&(t+=`<h3 style='${Io}'>General GPU Info</h3>`,t+=En(i,!1));const n=mC();n.length>0&&(t+=`<h3 style='${Io}'>WebGL</h3>`,t+=En(n,!1));const o=gC();o.length>0&&(t+=`<h3 style='${Io}'>WebGL 2 Features</h3>`,t+=En(o,!1));const r=yC();r.length>0&&(t+=`<h3 style='${Io}'>WebGL Limits</h3>`,t+=En(r,!1));const a=_C();a.length>0&&(t+=`<h3 style='${Io}'>Texture Formats</h3>`,t+=En(a,!1));const l=await bC();if(l.length>0&&(t+=`<h3 style='${Io}'>WebGPU</h3>`,t+=En(l,!1)),exports.DeviceUtilities.isSafari()){const h=vC();h.length>0&&(t+=`<h3 style='${Io}'>Safari GPU Info</h3>`,t+=En(h,!1))}t+="</div>",e(t)}),s}function fC(){const s=[],e=window.devicePixelRatio;s.push({label:"Device Pixel Ratio",value:e.toString()}),s.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),s.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const i=exports.DeviceUtilities.isMobileDevice()?150:96,n=screen.width/i,o=screen.height/i,r=n*2.54,a=o*2.54;s.push({label:"Estimated Width (cm)",value:r.toFixed(1)}),s.push({label:"Estimated Height (cm)",value:a.toFixed(1)});const l=zv();if(l){s.push({label:"GPU",value:l.renderer}),s.push({label:"Driver",value:l.vendor}),s.push({label:"ANGLE",value:l.angle||"Not detected"});const h=pC(l.renderer);h&&(h.manufacturer&&s.push({label:"Manufacturer",value:h.manufacturer}),h.cardVersion&&s.push({label:"Card Version",value:h.cardVersion}),h.brand&&s.push({label:"Brand",value:h.brand}),s.push({label:"Integrated",value:h.integrated?"Yes":"No"}),h.layer&&s.push({label:"WebGL Layer",value:h.layer}))}return s}function pC(s){if(!s)return null;const e=(h,d)=>{const u=d.match(h);return u&&u[0]},t=e(/(ANGLE)/g,s)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,s)||s,n=i.split(" ");n.shift();const o=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:o,cardVersion:r,brand:a,integrated:o==="Intel",layer:t,card:i}}function mC(){const s=[],e=zv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:Uv()})),s}function gC(){const s=[];try{const t=document.createElement("canvas").getContext("webgl2");if(!t)return s;s.push({label:"Float Color Buffer",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:t.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:t.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:t.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:t.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:t.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:t.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function yC(){const s=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return s;const i=t instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(s.push({label:"⚡ Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function _C(){const s=[];try{document.createElement("canvas").getContext("webgl")&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const n=document.createElement("canvas").getContext("webgl2");n&&(s.push({label:"WebGL 2 RGBA32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:n.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 R11F_G11F_B10F",value:"✅"}),s.push({label:"WebGL 2 RGB565",value:"✅"}),s.push({label:"WebGL 2 RGB5_A1",value:"✅"}),s.push({label:"WebGL 2 RGBA4444",value:"✅"}))}catch{}return s}async function bC(){const s=[];if(!("gpu"in navigator))return s.push({label:"🚀 WebGPU Support",value:"❌ Not supported"}),s;s.push({label:"🚀 WebGPU Support",value:"✅ Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return s.push({label:"🎯 Adapter",value:"No adapter available"}),s;s.push({label:"🎯 Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();s.push({label:"🔧 Device",value:t.label||"WebGPU Device"}),s.push({label:"📏 Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),s.push({label:"📐 Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),s.push({label:"📊 Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),s.push({label:"💾 Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),s.push({label:"🔗 Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){s.push({label:"❌ Error",value:e.message})}return s}function zv(){try{const s=document.createElement("canvas"),e=s.getContext("webgl2")||s.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),o=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:o,angle:r}}catch{return null}}function vC(){const s=[];try{const t=document.createElement("canvas").getContext("webgl");if(t){const i=t.getExtension("WEBGL_debug_renderer_info");if(i){const n=t.getParameter(i.UNMASKED_RENDERER_WEBGL);n&&n.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:n})}}}catch{}try{const t=document.createElement("canvas").getContext("webgl");t&&(t.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function wC(){return exports.DeviceUtilities.isQuest()?"Meta Quest":exports.DeviceUtilities.isVisionOS()?"Vision Pro":exports.DeviceUtilities.isiOS()?exports.DeviceUtilities.isiPad()?"iPad":"iPhone/iPod":exports.DeviceUtilities.isAndroidDevice()?"Android Device":exports.DeviceUtilities.isMozillaXR()?"Mozilla XR Browser":exports.DeviceUtilities.isNeedleAppClip()?"Needle App Clip":exports.DeviceUtilities.isMacOS()?"Mac":exports.DeviceUtilities.isDesktop()?"Desktop PC":"Unknown Device"}function xC(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function SC(){const s=document.querySelector("#__vconsole");return s||null}const jh=x("debugtypes");class CC{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){jh&&console.warn("TypeStore: Created",this)}add(e,t){jh&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?jh&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){jh&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const PC=Symbol("BuiltInType"),P=new CC,qm=function(s){P.get(s.name)||P.add(s.name,s)};class OC{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}class Hn{static testIfRootCanAnimate(e,t){const i=e.getRoot();return i&&(i.userData.static||i.matrixAutoUpdate===!1||i.matrixWorldAutoUpdate===!1)?((t===!0||t===void 0&&A())&&console.warn(`AnimationUtils: The root object (${i.name||i.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:i.userData.static,name:i.userData.name,tag:i.userData.tag,matrixAutoUpdate:i.matrixAutoUpdate,matrixWorldAutoUpdate:i.matrixWorldAutoUpdate}),!1):!0}static tryGetActionsFromMixer(e){const t=e._actions;return t||null}static tryGetAnimationClipsFromObjectHierarchy(e,t){if(t||(t=new Array),e)e.animations&&t.push(...e.animations);else return t;if(e.children)for(const i of e.children)this.tryGetAnimationClipsFromObjectHierarchy(i,t);return t}static autoplayAnimations(e){if(!e||!e.animations)return console.debug("No animations found in file"),null;const t="scene"in e?e.scene:e,i=new Array;for(let o=0;o<e.animations.length;o++){const r=e.animations[o];if(!r.tracks||r.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const a in r.tracks){const l=r.tracks[a],h=c.PropertyBinding.parseTrackName(l.name);let d=c.PropertyBinding.findNode(t,h.nodeName);if(!d){const p=l.__objectName??l.name.substring(0,l.name.indexOf("."));if(d=t.getObjectByProperty("uuid",p),!d)continue}let u=n(d)||n(t);if(!u){const p=P.get("Animation");if(u=t.addComponent(p),!u){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}i.push(u),u.addClip&&u.addClip(r)}}return i;function n(o){if(!o)return null;const r=o.userData?.components;if(r&&r.length>0)for(let a=0;a<r.length;a++){const l=r[a];if(l.isAnimationComponent===!0)return l}return n(o.parent)}}static emptyClip(){return new c.AnimationClip("empty",0,[])}static createScaleClip(e){const t=e?.duration??.3;let i={x:1,y:1,z:1};e?.scale!==void 0&&(typeof e.scale=="number"?i={x:e.scale,y:e.scale,z:e.scale}:i=e.scale);const n=e?.type??"linear",o=e?.scaleFactor??1.2,r=new Array,a=new Array;switch(n){case"linear":r.push(0,t),a.push(i.x,i.y,i.z,i.x*o,i.y*o,i.z*o);break;case"spring":r.push(0,t*.3,t*.5,t*.7,t*.9,t),a.push(i.x,i.y,i.z,i.x*o,i.y*o,i.z*o,i.x*.9,i.y*.9,i.z*.9,i.x*1.05,i.y*1.05,i.z*1.05,i.x*.98,i.y*.98,i.z*.98,i.x,i.y,i.z);break}const l=new c.KeyframeTrack(".scale",r,a);return new c.AnimationClip("scale",r[r.length-1],[l])}}const Be=function(s){return f(s)},f=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=d_(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=d_(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function d_(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const u_=x("debugcomponentevents");class gu{static eventListeners=new Map;static addComponentLifecylceEventListener(e,t){this.eventListeners.has(e)&&this.eventListeners.set(e,[]);let i=this.eventListeners.get(e);i||(i=[]),i.push(t),this.eventListeners.set(e,i),u_&&console.log("Added event listener for "+e,this.eventListeners)}static removeComponentLifecylceEventListener(e,t){const i=this.eventListeners.get(e);if(!i)return;const n=i.indexOf(t);n<0||i.splice(n,1)}static dispatchComponentLifecycleEvent(e,t){const i=this.eventListeners.get(e);if(u_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const Nv=x("debugdefines");go('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');go('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');go('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');go('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');go('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.0.0";');go('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');go('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Mar 27 2026 15:06:29 GMT+0000 (Coordinated Universal Time)";');go('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const ii="5.0.0",Ea="undefined",_c="Fri Mar 27 2026 15:06:29 GMT+0000 (Coordinated Universal Time)";Nv&&console.log(`Engine version: ${ii} (generator: ${Ea})
|
|
144
144
|
Project built at ${_c}`);const no=NEEDLE_PUBLIC_KEY,jn="needle_isActiveInHierarchy",Ho="builtin_components",ec="needle_editor_guid";function go(s){try{(0,eval)(s)}catch(e){Nv&&console.error(e)}}const Xm={experimentalSmartHierarchyUpdate:!1},pi=Symbol("shadowDomOwner"),MC=x("debugpatch");function yu(s,e,t,i){const n=MC===e;if(!t&&!i)return;const o=e+"___needle";EC(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]=p_(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]=p_(l,s,e);else{const h=this[o];Vv(s,e,this,h,l),this[o]=l,$v(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function kC(s,e,t){const i=Qm(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 f_=Symbol("Needle:Patches:WrappedFunction");function p_(s,e,t){if(s[f_])return s;const i=function(...n){Vv(e,t,this,...n);const o=s.apply(this,n);return $v(e,t,this,o,...n),o};return i[f_]=!0,i}const _d="Needle:Patches";function zp(){return globalThis[_d]||(globalThis[_d]=new WeakMap),globalThis[_d]}function Qm(s,e){const t=zp().get(s);return t?t.get(e):null}function EC(s,e,t,i){let n=zp().get(s);n||(n=new Map,zp().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function Vv(s,e,t,...i){if(!t)return;const n=Qm(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function $v(s,e,t,i,...n){if(!t)return;const o=Qm(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}function RC(s,e){if(typeof window!==void 0&&window.SPECTOR){console.log(window.SPECTOR);const t=new URLSearchParams(window.location.search);if(t.has("spector")){let i=function(){if(n>s.time.frame)return window.requestAnimationFrame(()=>i());const r=o.captureCanvas(e);r&&r instanceof Promise?r.then(()=>o.displayUI()):o.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const o=new window.SPECTOR.Spector;o.spyCanvases=!0,i();return}else A()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function Wv(s){const e=s;return!!(e.parser&&e.parser.json)}var _u=(s=>(s[s.None=0]="None",s[s.DontExport=1]="DontExport",s))(_u||{});const Gv=Symbol("component-name");function Ym(s){return s&&s.isComponent}const TC=Symbol("object"),Af=new _i(()=>new c.Vector3,20);class Hv{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return Af.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Af.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return Af.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 qv{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 Xv{object;collider;constructor(e,t){this.object=e,this.collider=t}}class Gd{constructor(e){this.context=e,this.root.style.cssText=`
|
|
145
145
|
position: absolute;
|
|
146
146
|
width: 1px; height: 1px;
|
|
@@ -876,7 +876,7 @@ Pinch: ${this.getGesture("pinch")?.value.toFixed(3)}`),n+=`
|
|
|
876
876
|
Layout: `;for(const o of Object.keys(this._layout.components||{})){const r=this.getStick(o),a=this._layout.components[o]?.gamepadIndices,l=a?Object.entries(a).map(h=>h[0][0].toUpperCase()+h[0].slice(1)+"="+h[1]).join(","):"";n+=`
|
|
877
877
|
${o}: ${this._layout.components[o]?.type} [${l}] (${r.x.toPrecision(2)},${r.y.toPrecision(2)})`}}B.DrawLabel(t,n,.006)}onUpdateFrame(e){if(this._handJointPoses.clear(),this._hand_wristDotUp=void 0,!this.xr.referenceSpace||!this.inputSource.gamepad?.connected){this._isTracking=!1;return}const t=e.getPose(this.inputSource.targetRaySpace,this.xr.referenceSpace);this._isTracking=t!=null;let i=null,n=null,o=null,r=null;if(t){const d=t.transform;this._rayMatrix.fromArray(d.matrix).premultiply(wa),this._rayMatrix.decompose(this._rayPosition,this._rayQuaternion,F(1,1,1)),o=F(d.position),r=ei(d.orientation),this._rayPositionRaw.copy(o),this._rayRotationRaw.copy(r)}if(this.inputSource.gripSpace){const d=e.getPose(this.inputSource.gripSpace,this.xr.referenceSpace);if(d){const u=d.transform;if(i=F(u.position),n=ei(u.orientation),this._gripMatrix.fromArray(u.matrix).premultiply(wa),this._gripMatrix.decompose(this._gripPosition,this._gripQuaternion,F(1,1,1)),"linearVelocity"in d&&d.linearVelocity){const p=d.linearVelocity;this._linearVelocity.set(p.x,p.y,p.z)}}}this.xr.context.mainCamera?.parent&&(this._object.parent!==this.xr.context.mainCamera?.parent&&this.xr.context.mainCamera.parent.add(this._object),this._gripSpaceObject!==void 0&&this._gripSpaceObject?.parent!==this.xr.context.mainCamera?.parent&&this.xr.context.mainCamera.parent.add(this._gripSpaceObject),this._raySpaceObject!==void 0&&this._raySpaceObject?.parent!==this.xr.context.mainCamera?.parent&&this.xr.context.mainCamera.parent.add(this._raySpaceObject));const a=this.hand;if(a){let d=!1;const u=a.get("wrist"),p=u&&this.getHandJointPose(u,e);if(p){d=!0;const _=p.transform.position,g=p.transform.orientation;this._object.position.set(_.x,_.y,_.z),this._object.quaternion.set(g.x,g.y,g.z,g.w).multiply(Li)}d||(this._object.position.copy(this._rayPosition),this._object.quaternion.copy(this._rayQuaternion).multiply(Li));const m=a.get("middle-finger-metacarpal"),y=m&&this.getHandJointPose(m,e);y&&(this._gripMatrix.fromArray(y.transform.matrix).premultiply(wa),this._gripMatrix.decompose(this._gripPosition,this._gripQuaternion,F(1,1,1)),i=F().copy(y.transform.position),n=ei().copy(y.transform.orientation),n.multiply(eP),i.add(F(tP).applyQuaternion(n)))}else this.inputSource.gripSpace&&this.targetRayMode==="transient-pointer"&&i&&n?(this._object.position.copy(i),this._object.quaternion.copy(n).multiply(Li)):o&&r&&(this._object.position.copy(o),this._object.quaternion.copy(r).multiply(Li));Jn&&(o&&r&&(this._raySpaceObject?.position.copy(o),this._raySpaceObject?.quaternion.copy(r).multiply(Li)),i&&n&&(this._gripSpaceObject?.position.copy(i),this._gripSpaceObject?.quaternion.copy(n).multiply(Li)));const l=this.xr.context.mainCamera?.parent,h=l?pe(l):void 0;i&&n&&(this._gripWorldPosition.copy(i),l&&this._gripWorldPosition.applyMatrix4(l.matrixWorld),this._gripWorldQuaternion.copy(n),this._gripWorldQuaternion.multiply(Li),h&&this._gripWorldQuaternion.premultiply(h)),this.updateRayWorldPosition(),this.updateRayWorldQuaternion()}onDisconnected(){this._connected=!1,Jn&&console.warn("Controller disconnected",this.index);for(const e of this._object.children)this.xr.context.scene.attach(e);this._object?.removeFromParent(),this._debugAxesHelper?.removeFromParent(),this._debugGripAxesHelper?.removeFromParent(),this._debugRayAxesHelper?.removeFromParent(),this._gripSpaceObject?.removeFromParent(),this._raySpaceObject?.removeFromParent(),this.unsubscribeEvents(),this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}getButton(e){if(!this._layout)return;switch(e){case"primary-button":if(this.isLeft)e="x-button";else if(this.isRight)e="a-button";else return;break;case"primary":return this.hand?this.getGesture("pinch"):this.toNeedleGamepadButton(0,e);case"xr-standard-trigger":if(this.inputSource.gamepad)return this.toNeedleGamepadButton(0,e);break;case"xr-standard-squeeze":if(this.inputSource.gamepad)return this.toNeedleGamepadButton(1,e);break;case"xr-standard-thumbstick":if(this.inputSource.gamepad)return this.toNeedleGamepadButton(3,e);break}if(this._buttonMap.has(e))return this.toNeedleGamepadButton(this._buttonMap.get(e),e);const t=this._layout?.components[e];if(t?.gamepadIndices)switch(t.type){case"button":case"squeeze":if(this.inputSource.gamepad){const i=t.gamepadIndices.button;return this._buttonMap.set(e,i),this.toNeedleGamepadButton(i,e)}break;default:console.warn("Unsupported component type",t.type);break}this._buttonMap.set(e,void 0)}getGesture(e){const t=this.states[e];if(!t)return null;this.states[e]=t;const i=this._needleGamepadButtons[e]||new U_(void 0,e);return i.pressed=t.pressed,i.value=t.value,i.isDown=t.isDown,i.isUp=t.isUp,this._needleGamepadButtons[e]=i,i}getPointerId(e){if((e==="primary"||e==="pinch")&&(e=0),typeof e!="number"){const t=this._buttonMap.get(e);if(t===void 0)return;e=t}return this.index*10+e}_needleGamepadButtons={};toNeedleGamepadButton(e,t){if(!this.inputSource.gamepad?.buttons)return;const i=this.inputSource.gamepad?.buttons[e],n=this.states[e],o=this._needleGamepadButtons[e]||new U_(e,t);return i&&(o.pressed=i.pressed,o.value=i.value,o.touched=i.touched),n&&(o.isDown=n.isDown,o.isUp=n.isUp),this._needleGamepadButtons[e]=o,o}getStick(e){if(!this._layout)return{x:0,y:0,z:0};if(this.isHand)return{x:0,y:0,z:0};e==="primary"&&this._layout.components["xr-standard-thumbstick"]&&(e="xr-standard-thumbstick");const t=this._layout?.components[e];if(t?.gamepadIndices)switch(t.type){case"thumbstick":case"touchpad":if(this.inputSource.gamepad){const i=t.gamepadIndices.xAxis,n=t.gamepadIndices.yAxis;let o=this.inputSource.gamepad.axes[i]||0,r=this.inputSource.gamepad.axes[n]||0;o*=-1,r*=-1;const a=t.gamepadIndices.button,l=this.inputSource.gamepad?.buttons[a]?.value||0;return{x:o,y:r,z:l}}}return{x:0,y:0,z:0}}_buttonMap=new Map;_motioncontroller;_layout;getMotionController;initialize(){if(this._hasSelectEvent=this.profiles.includes("generic-hand-select")||this.profiles.some(e=>e.startsWith("generic-trigger")),this._isMetaQuestTouchController=this.profiles.includes("meta-quest-touch-plus")||this.profiles.includes("oculus-touch-v3"),this._isMxInk=this.profiles.includes("logitech-mx-ink"),!this._layout){if(this.inputSource.targetRayMode==="transient-pointer")return;const e=le.fetchProfile(this.inputSource,Z1,J1);this.getMotionController=e.then(t=>{if(!this.connected)return null;this._motioncontroller=new le.MotionController(this.inputSource,t.profile,t.assetPath||"");const n=t.profile.layouts[this.inputSource.handedness];if(this._layout=n,this._layout){if(!this._layout.gamepad?.length){this._layout.gamepad=[];for(const o in this._layout.components){const r=this._layout.components[o];this._layout.gamepad[r.gamepadIndices.button]=o}}this.profiles.length>=1&&this.profiles[0]==="htc-vive-focus-plus"&&this.inputSource.gamepad&&this.inputSource.gamepad.axes.length===4&&!this._layout.components["xr-standard-thumbstick"]&&(this._layout.components["xr-standard-thumbstick"]={type:"thumbstick",gamepadIndices:{xAxis:2,yAxis:3}})}return this._motioncontroller}).catch(t=>(this.inputSource&&console.warn("Couldn't initialize motion controller profile for ",this.inputSource,t),null))}}emitPointerDownEvent=!0;emitPointerUpEvent=!0;emitPointerMoveEvent=!0;pointerMoveDistanceThreshold=.03;pointerMoveAngleThreshold=.05;subscribeEvents(){this.xr.session.addEventListener("selectstart",this.onSelectStart),this.xr.session.addEventListener("selectend",this.onSelectEnd),this.xr.session.addEventListener("squeezestart",this.onSequeezeStart),this.xr.session.addEventListener("squeezeend",this.onSequeezeEnd)}unsubscribeEvents(){this.xr.session.removeEventListener("selectstart",this.onSelectStart),this.xr.session.removeEventListener("selectend",this.onSelectEnd),this.xr.session.removeEventListener("squeezestart",this.onSequeezeStart),this.xr.session.removeEventListener("squeezeend",this.onSequeezeEnd)}_selectButtonIndex=void 0;_squeezeButtonIndex=void 0;onSelectStart=e=>{if(!this.emitPointerDownEvent||this.inputSource!==e.inputSource)return;this.onUpdateFrame(e.frame),this._hasSelectEvent=!0;const t=this._layout?.selectComponentId,i=this._layout?.components[t]?.gamepadIndices?.button;i!==void 0&&(this._selectButtonIndex=i),!Gh&&(Jn&&B.DrawDirection(this.rayWorldPosition,F(0,.01,1).applyQuaternion(this.rayWorldQuaternion),16711680,10),this.emitPointerEvent(Pe.PointerDown,this._selectButtonIndex||0,"xr-standard-trigger",!0,e))};onSelectEnd=e=>{this.emitPointerUpEvent&&(Gh||this.inputSource===e.inputSource&&this.emitPointerEvent(Pe.PointerUp,this._selectButtonIndex||0,"xr-standard-trigger",!0,e))};onSequeezeStart=e=>{this.emitPointerDownEvent&&this.inputSource===e.inputSource&&(this._squeezeButtonIndex=this._layout?.components["xr-standard-squeeze"]?.gamepadIndices?.button,this._squeezeButtonIndex!==void 0&&(Jn&&B.DrawDirection(this.rayWorldPosition,F(0,.01,1).applyQuaternion(this.rayWorldQuaternion),255,10),this.emitPointerEvent(Pe.PointerDown,this._squeezeButtonIndex||0,"xr-standard-squeeze",!0,e)))};onSequeezeEnd=e=>{this.emitPointerUpEvent&&this.inputSource===e.inputSource&&this._squeezeButtonIndex!==void 0&&this.emitPointerEvent(Pe.PointerUp,this._squeezeButtonIndex||0,"xr-standard-squeeze",!0,e)};states={};updateInputEvents(){if(this.gamepad?.buttons){for(let e=0;e<this.gamepad.buttons.length;e++){const t=this.gamepad.buttons[e],i=this.states[e]||new F_;let n=null;this._isMxInk&&(e===4||e===5)?(t.value>0&&!i.pressed?(n="pointerdown",i.isDown=!0,i.isUp=!1):t.value===0&&i.pressed?(n="pointerup",i.isDown=!1,i.isUp=!0):i.pressed&&(n="pointermove",i.isDown=!1,i.isUp=!1),i.pressed=t.value>0,i.value=t.value):(t.pressed&&!i.pressed?(n="pointerdown",i.isDown=!0,i.isUp=!1):!t.pressed&&i.pressed?(n="pointerup",i.isDown=!1,i.isUp=!0):(i.isDown=!1,i.isUp=!1),i.pressed=t.pressed,i.value=t.value),this.states[e]=i;const o=e!==this._selectButtonIndex&&e!==this._squeezeButtonIndex;if(n!=null&&o){let r=this._layout?.gamepad[e];this._isMxInk&&e===4&&(r="stylus-touch"),this._isMxInk&&e===5&&(r="stylus-tip"),(Jn||Gh)&&console.log("Emitting pointer event",n,e,r,t.value,this.gamepad,this._layout),this.emitPointerEvent(n,e,r??"none",!1,null,t.value)}}if(this._isMetaQuestTouchController){const e=this.gamepad.buttons.length-1,t=this.states[e];if(t&&t.isDown){const i=this.context.menu;i.spatialMenuIsVisible?i.setSpatialMenuVisible(!1):this.context.menu.setSpatialMenuVisible(!0)}}}if(this.hand){const e=this.handObject;if(e){const t=e.joints["index-finger-tip"],i=e.joints["thumb-tip"];if(t&&i){const n=t.position.distanceTo(i.position);this._pinchPosition.lerpVectors(t.position,i.position,.5);const o=this.xr.context.mainCamera?.parent;if(o&&this._pinchPosition.applyMatrix4(o.matrixWorld),n!==0){const l=this.states.pinch||new F_,h=(.02+.01)*1.5;l.value=1-(n-.02)/h;const d=n<.02-.01,u=n>.02+.01;d&&!l.pressed?(Gh&&console.log("pinch start",n),l.isDown=!0,l.isUp=!1,l.pressed=!0):u&&l.pressed?(l.isDown=!1,l.isUp=!0,l.pressed=!1):(l.isDown=!1,l.isUp=!1),this.states.pinch=l}}}}}_didMoveLastFrame=!1;_lastPointerMovePosition=new c.Vector3;_lastPointerMoveQuaternion=new c.Quaternion;onUpdateMove(){if(!this.emitPointerMoveEvent)return;let e=!1;if(this._lastPointerMovePosition.distanceTo(this.gripWorldPosition)>this.pointerMoveDistanceThreshold*this.xr.rigScale&&(e=!0),e||this._lastPointerMoveQuaternion.angleTo(this.gripWorldQuaternion)>this.pointerMoveAngleThreshold&&(e=!0),e){this._didMoveLastFrame=!0,this._lastPointerMovePosition.copy(this.gripWorldPosition),this._lastPointerMoveQuaternion.copy(this.gripWorldQuaternion),Jn&&B.DrawLabel(this.rayWorldPosition.add(this.object.worldForward.multiplyScalar(.1)),"move",.01);let i=this.xr.context.input.getFirstPressedButtonForPointer(this.index);i===void 0&&(i=0);const n=this.gamepad?.buttons[i]?.value;this.emitPointerEvent("pointermove",i,"none",!1,null,n)}else this._didMoveLastFrame=!1}pointerInit;emitPointerEvent(e,t,i,n,o=null,r){if(!this.emitEvents){Jn&&e!==Pe.PointerMove&&console.warn("Pointer events are disabled for this controller",this.index,e,t);return}if(this.xr.mode==="immersive-vr"||this.xr.isPassThrough){this.pointerInit.origin=this,this.pointerInit.pointerId=this.getPointerId(t),this.pointerInit.pointerType=this.hand?"hand":"controller",this.pointerInit.button=t,this.pointerInit.buttonName=i,this.pointerInit.isPrimary=n,this.pointerInit.mode=this.inputSource.targetRayMode,this.pointerInit.ray=this.ray,this.pointerInit.device=this.object,this.pointerInit.pressure=r,this.pointerInit.clientX=this._rayPosition.x/this.xr.rigScale,this.pointerInit.clientY=this._rayPosition.y/this.xr.rigScale,this.pointerInit.clientZ=this._rayPosition.z/this.xr.rigScale;const a=U.Current;U.Current=this.xr.context,Jn&&e!=="pointermove"&&console.warn("Pointer event",e,t,i,{...this.pointerInit}),this.xr.context.input.createInputEvent(new ss(e,o,this.pointerInit)),U.Current=a}}}class F_{isDown=!1;isUp=!1;pressed=!1;value=0}class U_{index;name;touched=!1;pressed=!1;value=0;isDown=!1;isUp=!1;constructor(e,t){this.index=e,this.name=t}}const nc=x("debugwebxr");class Vf{controllerStates=[];userId;context;userStateEvtName;constructor(e,t){this.userId=e,this.context=t,this.userStateEvtName="xr-sync-user-state-"+e,this.context.connection.beginListen(this.userStateEvtName,this.onReceivedControllerState)}dispose(){this.context.connection.stopListen(this.userStateEvtName,this.onReceivedControllerState)}onReceivedControllerState=e=>{nc&&console.log(`XRSync: Received change for ${this.userId}: ${e.type} ${e.handedness}; tracked=${e.isTracking}`);let t=!1;for(let i=0;i<this.controllerStates.length;i++)if(this.controllerStates[i].index===e.index){this.controllerStates[i]=e,t=!0;break}t||this.controllerStates.push(e)};update(e){if(this.context.connection.isConnected!=!1){for(let t=this.controllerStates.length-1;t>=0;t--){const i=this.controllerStates[t];let n=!1;for(let o=0;o<e.controllers.length;o++)e.controllers[o].index===i.index&&(n=!0);n||(nc&&console.log(`XRSync: ${i.type} ${i.handedness} removed`,i.index),this.controllerStates.splice(t,1),this.sendControllerRemoved(i))}for(const t of e.controllers)this.updateControllerStates(t)}}onExitXR(e){for(const t of this.controllerStates)this.sendControllerRemoved(t);this.controllerStates.length=0}sendControllerRemoved(e){e.isTracking=!1,e.guid="",this.context.connection.send(this.userStateEvtName,e),this.context.connection.sendDeleteRemoteState(e.guid)}updateControllerStates(e){const t=this.controllerStates.find(i=>i.index===e.index);if(t){let i=!1;i||=t.isTracking!=e.isTracking,i&&(t.isTracking=e.isTracking,this.context.connection.send(this.userStateEvtName,t))}else{const i={guid:this.userId+"-"+e.index,isTracking:e.isTracking,handedness:e.side,index:e.index,type:e.hand?"hand":"controller"};this.controllerStates.push(i),this.context.connection.send(this.userStateEvtName,i),nc&&console.log(`XRSync: ${i.type} ${i.handedness} added`,i.index)}}}class F0{hasState(e){return e?this._states.has(e):!1}isTracking(e,t){if(!e)return;const i=this._states.get(e);return i?i.controllerStates.find(o=>o.handedness===t)?.isTracking||!1:void 0}getDeviceType(e,t){if(!e)return;const i=this._states.get(e);return i?i.controllerStates.find(o=>o.handedness===t)?.type||"unknown":void 0}context;constructor(e){this.context=e,this.context.connection.beginListen(K.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(K.LeftRoom,this.onLeftRoom),this.context.connection.beginListen(K.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.beginListen(K.UserLeftRoom,this.onOtherUserLeftRoom)}destroy(){this.context.connection.stopListen(K.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(K.LeftRoom,this.onLeftRoom),this.context.connection.stopListen(K.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.stopListen(K.UserLeftRoom,this.onOtherUserLeftRoom)}onJoinedRoom=()=>{if(this.context.connection.connectionId){this._states.has(this.context.connection.connectionId)||(nc&&console.log("XRSync: Local user joined room",this.context.connection.connectionId),this._states.set(this.context.connection.connectionId,new Vf(this.context.connection.connectionId,this.context)));for(const e of this.context.connection.usersInRoom())this._states.has(e)||this._states.set(e,new Vf(e,this.context))}};onLeftRoom=()=>{this.context.connection.connectionId&&(this._states.has(this.context.connection.connectionId)||(this._states.get(this.context.connection.connectionId)?.dispose(),this._states.delete(this.context.connection.connectionId)))};onOtherUserJoinedRoom=e=>{const t=e.userId;this._states.has(t)||(nc&&console.log("XRSync: Remote user joined room",t),this._states.set(t,new Vf(t,this.context)))};onOtherUserLeftRoom=e=>{const t=e.userId;this._states.has(t)||(this._states.get(t)?.dispose(),this._states.delete(t))};_states=new Map;onUpdate(e){this.context.connection.isConnected&&this.context.connection.connectionId&&this._states.get(this.context.connection.connectionId)?.update(e)}onExitXR(e){this.context.connection.isConnected&&this.context.connection.connectionId&&this._states.get(this.context.connection.connectionId)?.onExitXR(e)}}class z_{_fadeToColorQuad;_fadeToColorMaterial;constructor(){this._fadeToColorMaterial=new c.MeshBasicMaterial({color:0,transparent:!0,depthTest:!1,fog:!1,side:c.DoubleSide}),this._fadeToColorQuad=new c.Mesh(new c.PlaneGeometry(10,10),this._fadeToColorMaterial)}dispose(){this._fadeToColorQuad.geometry.dispose(),this._fadeToColorMaterial.dispose()}update(e,t){const i=this._fadeToColorQuad,n=this._fadeToColorMaterial;i.parent!==e&&n.opacity>0?e.add(i):n.opacity===0&&i.removeFromParent(),i.layers.set(2),i.material=this._fadeToColorMaterial,i.position.z=-1,i.renderOrder=1/0;const o=this._requestedFadeValue;n.opacity=I.lerp(n.opacity,o,t/.03),Math.abs(n.opacity-o)<=.01&&this._transitionResolve&&(this._transitionResolve(),this._transitionResolve=null,this._transitionPromise=null,this._requestedFadeValue=0)}remove(){this._fadeToColorQuad.removeFromParent()}fadeTransition(){if(this._transitionPromise)return this._transitionPromise;this._requestedFadeValue=1;const e=new Promise(t=>{this._transitionResolve=t});return this._transitionPromise=e,e}_requestedFadeValue=0;_transitionPromise=null;_transitionResolve=null}class La{static _active=null;static get active(){return this._active}static _requestInFlight=!1;static async start(e,t){if(this._active)return console.error("Cannot start a new XR session while one is already active"),null;if(this._requestInFlight)return console.error("Cannot start a new XR session while a request is already in flight"),null;if("xr"in navigator&&navigator.xr){if(!t)return console.error("XRSessionInit must be provided"),null;this._requestInFlight=!0;const i=await navigator.xr.requestSession(e,t).catch(n=>{console.error("Failed to start temporary XR session:",n)});return i?(i.addEventListener("end",()=>{this._active=null}),this._requestInFlight?(this._requestInFlight=!1,this._active=new La(e,t,i),this._active):(i.end(),null)):(this._requestInFlight=!1,null)}return null}static async handoff(){return this._active?this._active.handoff():null}static async stop(){this._requestInFlight=!1,this._active&&(await this._active.end(),await _s(100)),this._active=null}_session;_mode;_init;get isAR(){return this._mode==="immersive-ar"}get isVR(){return this._mode==="immersive-vr"}_renderer;_camera;_scene;constructor(e,t,i){this._mode=e,this._init=t,this._session=i,this._session.addEventListener("end",this.onEnd),this._renderer=new c.WebGLRenderer({alpha:!0,antialias:!0}),this._renderer.outputColorSpace="srgb",this._renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),this._renderer.setSize(window.innerWidth,window.innerHeight,!0),exports.DeviceUtilities.isNeedleAppClip()&&window.requestAnimationFrame(()=>{const n=Math.min(2,window.devicePixelRatio),o=Math.floor(window.innerWidth*n),r=Math.floor(window.innerHeight*n);this._renderer.domElement.width=o,this._renderer.domElement.height=r}),this._renderer.setAnimationLoop(this.onFrame),this._renderer.xr.setSession(i),this._renderer.xr.enabled=!0,this._camera=new c.PerspectiveCamera,this._scene=new c.Scene,this._scene.fog=new c.Fog(4473924,10,250),this._scene.add(this._camera),this.setupScene()}end(){return this._session?this._session.end():Promise.resolve()}async handoff(){if(!this._session)throw new Error("Cannot handoff a session that has already ended");const e={session:this._session,mode:this._mode,init:this._init};return await this.onBeforeHandoff(),this.onEnd(),this._session=null,e}onEnd=()=>{this._session?.removeEventListener("end",this.onEnd),this._renderer.setAnimationLoop(null),this._renderer.dispose(),this._scene.clear()};_lastTime=0;_frames=0;onFrame=(e,t)=>{const i=e-this._lastTime;this.update(e,i),this._camera.parent!==this._scene&&this._scene.add(this._camera),this._renderer.render(this._scene,this._camera),this._lastTime=e,this._frames++};_roomFlyObjects=[];_logoObject=null;get _logoDistance(){return this.isAR?.3:5}get _logoScale(){return this.isAR?.04:1}update(e,t){const i=e*4e-4;for(let r=0;r<this._roomFlyObjects.length;r++){const a=this._roomFlyObjects[r];a.position.y+=Math.sin(i+r*.5)*.005,a.rotateY(.002)}const n=this._logoObject,o=this._renderer.xr.getCamera();if(n){const r=new c.Vector3;o.getWorldDirection(r);const a=o.position.clone().addScaledVector(r,this._logoDistance),l=this.isAR?.005:1e-5;n.position.lerp(a,this._frames<=2?1:t*l),n.lookAt(this._camera.position)}}async onBeforeHandoff(){await _s(1e3),this._scene.clear()}setupScene(){this._scene.background=new c.Color(0);let e=Da;if($n()){const d=document.querySelector("needle-engine");if(d){const u=d.getAttribute("logo-src");u?.length&&(e=u,A()&&console.debug("[XR] Using custom loading logo from license:",e))}}const t=this._logoObject=new c.Mesh(new c.PlaneGeometry(1,1,1,1),new c.MeshBasicMaterial({transparent:!0,side:2}));t.scale.multiplyScalar(this._logoScale*window.devicePixelRatio),t.renderOrder=1e3,t.material.opacity=0,this._scene.add(t);const i=document.createElement("canvas"),n=i.getContext("2d"),o=new Image,r=d=>{if(!n)return;t.material.opacity=1;const u=1024;i.width=u,i.height=u,n.imageSmoothingQuality="high";const p=u*.19,m=o.width/o.height;{const w=i.height-p*1.5,R=w*m,O=(i.width-R)/2;n.drawImage(o,O,0,R,w)}const y=u*.12,_="Loading...";n.shadowBlur=0,n.fillStyle=this.isAR?"white":"rgba(255,255,255,0.4)",n.font=`${y}px Arial`,n.shadowBlur=u*.02,n.shadowColor="rgba(0,0,0,0.5)",n.shadowOffsetX=0,n.shadowOffsetY=0;const g=n.measureText(_);n.fillText(_,i.width/2-g.width/2,i.height-p/4),n.font=`${y}px Arial`,n.fillText(_,i.width/2-g.width/2,i.height-p/4);const v=new c.TextureLoader().load(i.toDataURL());v.generateMipmaps=!0,v.colorSpace="srgb",v.anisotropy=4;const b=i.width/i.height;t.scale.x=this._logoScale*b*window.devicePixelRatio,t.scale.y=this._logoScale*window.devicePixelRatio,t.material.map=v,t.material.needsUpdate=!0};o.onload=()=>r(),o.onerror=d=>{console.error("Failed to load temporary XR logo:",e,d),o.src=Da},o.crossOrigin="anonymous",o.src=e;const a=new c.DirectionalLight(16777215,1);a.position.set(0,20,0),a.castShadow=!1,this._scene.add(a);const l=new c.DirectionalLight(16777215,1);l.position.set(0,-1,0),l.castShadow=!1,this._scene.add(l);const h=new c.PointLight(16777215,1,100,1);if(h.position.set(0,2,0),h.castShadow=!1,h.distance=200,this._scene.add(h),this.isAR===!1)for(let u=0;u<100;u++){const p=new c.MeshStandardMaterial({color:2236962,metalness:1,roughness:.8}),m=Va.Sphere,y=_o.createPrimitive(m,{material:p});y.position.x=I.random(-50,50),y.position.y=I.random(-2,50),y.position.z=I.random(-50,50),y.rotation.x=I.random(0,Math.PI*2),y.rotation.y=I.random(0,Math.PI*2),y.rotation.z=I.random(0,Math.PI*2),y.scale.multiplyScalar(.5+Math.random()*10);const _=y.position.distanceTo(this._camera.position)-y.scale.x;_<10&&(y.position.z+=5,y.position.multiplyScalar(1+1/_)),this._roomFlyObjects.push(y),this._scene.add(y)}}}var xc;(s=>{const e=[];function t(){e?.length||A()&&console.warn("No USDZ exporters found – cannot export USDZ for QuickLook.");for(const o of e)o.exportAndOpen();return!0}s.exportAndOpen=t;function i(o){e.push(o)}s.registerExporter=i;function n(o){if(!e)return;const r=e.indexOf(o);r>=0&&e.splice(r,1)}s.unregisterExporter=n})(xc||(xc={}));const Ue=x("debugwebxr"),N_=x("stats");let $f=0;function iP(s){let e=null;const t=s;return t.getAROverlayContainer?e=t.getAROverlayContainer():e=s,e}nP();async function nP(){let s="immersive-vr";try{if(exports.DeviceUtilities.isNeedleAppClip()?s="immersive-ar":await navigator.xr?.isSessionSupported("immersive-vr")||(s="immersive-ar"),!await navigator.xr?.isSessionSupported("immersive-ar")&&s==="immersive-ar")return}catch(e){console.debug("[NeedleXRSession:granted] Error while checking XR support:",e);return}if(x("debugasap")){let e=globalThis["needle:XRSession"];if(e instanceof Promise){delete globalThis["needle:XRSession"],ce.addContextCreatedCallback(async t=>{if(!e)return;_a(!0);const i=await e;if(i){const n=q.getDefaultSessionInit(s);q.setSession(s,i,n,t.context)}else console.error("[NeedleXRSession:granted] ASAP session was rejected");e=void 0});return}}if("xr"in navigator){if(/WebXRViewer\//i.test(navigator.userAgent)){console.warn("WebXRViewer does not support addEventListener");return}navigator.xr?.addEventListener("sessiongranted",async()=>{const e=sessionStorage.getItem("needle_xr_session_mode"),t=sessionStorage.getItem("needle_xr_session_init")??null,i=t?JSON.parse(t):null;let n=null;if(U0()&&(await La.start(e||s,i||q.getDefaultSessionInit(s)).catch(o=>console.warn("[NeedleXRSession:granted] TemporaryXRContext start failed:",o)),await rP(),n=await La.handoff()),n)q.setSession(n.mode,n.session,n.init,U.Current);else if(e&&t){console.log("[NeedleXRSession:granted] Restore last session");const o=JSON.parse(t);q.start(e,o).catch(r=>console.warn(r))}else q.start(s).catch(o=>console.warn("[NeedleXRSession:granted] failed:",o))},{once:!0})}}function sP(s,e){sessionStorage.setItem("needle_xr_session_mode",s),sessionStorage.setItem("needle_xr_session_init",JSON.stringify(e))}function oP(){sessionStorage.removeItem("needle_xr_session_mode"),sessionStorage.removeItem("needle_xr_session_init")}const fg=new Set;ce.registerCallback(ae.ContextCreationStart,async s=>{fg.add(s.context)});ce.registerCallback(ae.ContextCreated,async s=>{fg.delete(s.context);const e=s.context?.domElement.getAttribute("autostart")||null;aP(e)});function U0(){return fg.size>0}function rP(){return new Promise(s=>{const e=Date.now(),t=setInterval(()=>{(!U0()||Date.now()-e>6e4)&&(clearInterval(t),s())},100)})}exports.DeviceUtilities.isDesktop()&&A()&&window.addEventListener("keydown",s=>{(s.key==="x"||s.key==="Escape")&&q.active&&q.stop()});function aP(s){s&&s?.toLowerCase()==="ar"&&fn.registerWaitForInteraction(()=>{q.start("ar")})}const Hh=Symbol("initial-fov"),Wf=Symbol("initial-near");class q{static _sync=null;static getXRSync(e){return this._sync||(this._sync=new F0(e)),this._sync}static get currentSessionRequest(){return this._currentSessionRequestMode}static _currentSessionRequestMode=null;static get active(){return this._activeSession}static get activeMode(){return this._activeSession?.mode??null}static get xrSystem(){return"xr"in navigator?navigator.xr:void 0}static isXRSupported(){return Promise.all([this.isVRSupported(),this.isARSupported()]).then(e=>e.some(t=>t)).catch(()=>!1)}static isVRSupported(){return this.isSessionSupported("immersive-vr")}static isARSupported(){return this.isSessionSupported("immersive-ar")}static isSessionSupported(e){return this.xrSystem?.isSessionSupported(e).catch(t=>(Ue&&console.error(t),!1))??Promise.resolve(!1)}static _currentSessionRequest;static _activeSession;static onSessionRequestStart(e){this._sessionRequestStartListeners.push(e)}static offSessionRequestStart(e){const t=this._sessionRequestStartListeners.indexOf(e);t>=0&&this._sessionRequestStartListeners.splice(t,1)}static _sessionRequestStartListeners=[];static onSessionRequestEnd(e){this._sessionRequestEndListeners.push(e)}static offSessionRequestEnd(e){const t=this._sessionRequestEndListeners.indexOf(e);t>=0&&this._sessionRequestEndListeners.splice(t,1)}static _sessionRequestEndListeners=[];static onXRSessionStart(e){this._xrStartListeners.push(e)}static offXRSessionStart(e){const t=this._xrStartListeners.indexOf(e);t>=0&&this._xrStartListeners.splice(t,1)}static _xrStartListeners=[];static onXRSessionEnd(e){this._xrEndListeners.push(e)}static offXRSessionEnd(e){const t=this._xrEndListeners.indexOf(e);t>=0&&this._xrEndListeners.splice(t,1)}static _xrEndListeners=[];static onControllerAdded(e){this._controllerAddedListeners.push(e)}static offControllerAdded(e){const t=this._controllerAddedListeners.indexOf(e);t>=0&&this._controllerAddedListeners.splice(t,1)}static _controllerAddedListeners=[];static onControllerRemoved(e){this._controllerRemovedListeners.push(e)}static offControllerRemoved(e){const t=this._controllerRemovedListeners.indexOf(e);t>=0&&this._controllerRemovedListeners.splice(t,1)}static _controllerRemovedListeners=[];static offerSession(e,t,i){return"xr"in navigator&&navigator.xr&&"offerSession"in navigator.xr?(typeof navigator.xr.offerSession=="function"&&(console.log("WebXR offerSession is available - requesting mode: "+e),t=="default"&&(t=this.getDefaultSessionInit(e)),navigator.xr.offerSession(e,{...t}).then(n=>q.setSession(e,n,t,i)).catch(n=>{console.log("XRSession offer rejected (perhaps because another call to offerSession was made or a call to requestSession was made)")})),!0):!1}static getDefaultSessionInit(e){switch(e){case"immersive-ar":const t=["anchors","local-floor","layers","dom-overlay","hit-test","unbounded"];return exports.DeviceUtilities.isVisionOS()||t.push("hand-tracking"),{optionalFeatures:t};case"immersive-vr":const i=["local-floor","bounded-floor","high-fixed-foveation-level","layers"];return exports.DeviceUtilities.isVisionOS()||i.push("hand-tracking"),{optionalFeatures:i};default:return console.warn("No default session init for mode",e),{}}}static async start(e,t,i){if(t||(t={}),exports.DeviceUtilities.isiOS()){const a=await this.isARSupported().catch(()=>!1);if(exports.DeviceUtilities.isVisionOS()&&!a&&(e==="ar"||e==="immersive-ar")&&(e="quicklook"),e==="quicklook")return ni.sendEvent(U.Current,"xr",{action:"quicklook_export",source:"NeedleXRSession.start"}),xc.exportAndOpen(),null;if(!a&&(e==="immersive-ar"||e==="ar")){this.invokeSessionRequestStart("immersive-ar",t);const l=new URL("https://appclip.apple.com/id?p=tools.needle.launch-app.Clip");l.searchParams.set("url",location.href);const h=l.toString();ni.sendEvent(U.Current,"xr",{action:"app_clip_launch",source:"NeedleXRSession.start",url:h});const d=window.top||window;try{console.debug("iOS device detected - opening Needle App Clip for AR experience",{mode:e,init:t,url:l}),d.location.href=h}catch(u){console.warn("Error navigating to AppClip "+h+`
|
|
878
878
|
`,u),window!==window.top?window.open(h,"_blank"):window.location.href=h}return setTimeout(()=>{this.invokeSessionRequestEnd("immersive-ar",t||{},null)},3e3),null}}if(e==="quicklook")return console.warn("QuickLook mode is only supported on iOS devices"),null;if(e=="ar"&&(e="immersive-ar"),A()&&x("debugxrpreroom"))return console.warn("Debug: Starting temporary XR session"),await La.start(e,t||q.getDefaultSessionInit(e)),null;if(this._currentSessionRequest)return console.warn("A XRSession is already being requested"),(Ue||A())&&fe("A XRSession is already being requested"),this._currentSessionRequest.then(()=>this._activeSession);if(this._activeSession)return console.error("A XRSession is already running"),this._activeSession;if(i||(i=U.Current),i||(i=ce.All[0]),!i)throw new Error("No Needle Engine Context found");switch(e){case"immersive-ar":{if(await this.xrSystem?.isSessionSupported("immersive-ar")!==!0)return console.error(e+" is not supported by this browser."),null;const l=this.getDefaultSessionInit(e),h=iP(i.domElement);h&&!exports.DeviceUtilities.isQuest()&&(l.domOverlay={root:h},l.optionalFeatures.push("dom-overlay")),t={...l,...t}}break;case"immersive-vr":{if(await this.xrSystem?.isSessionSupported("immersive-vr")!==!0)return console.error(e+" is not supported by this browser."),null;t={...this.getDefaultSessionInit(e),...t}}break;default:console.warn("No default session init for mode",e);break}t.optionalFeatures??=[],t.requiredFeatures??=[],await La.stop();const n=e=="immersive-ar"?i.scripts_immersive_ar:i.scripts_immersive_vr;Ue?console.log(`%cRequesting ${e} session`,"font-weight:bold;",t,n):console.log(`%cRequesting ${e} session`,"font-weight:bold;");for(const a of n)a.onBeforeXR&&a.activeAndEnabled&&!a.destroyed&&a.onBeforeXR(e,t);this.invokeSessionRequestStart(e,t),Ue&&Se("Requesting "+e+" session ("+Date.now()+")"),ni.sendEvent(U.Current,"xr",{action:"session_request",mode:e,features:(t.requiredFeatures??[]).concat(t.optionalFeatures??[]).join(","),source:"NeedleXRSession.start"}),this._currentSessionRequest=navigator?.xr?.requestSession(e,t),this._currentSessionRequestMode=e;const o=await this._currentSessionRequest?.catch(a=>{console.error(a,"Code: "+a?.code),a?.code===9&&fe("Couldn't start XR session. Make sure you allow the required permissions."),console.log("If the specified XR configuration is not supported (e.g. entering AR doesnt work) - make sure you access the website on a secure connection (HTTPS) and your device has the required permissions (e.g. camera access)"),location.protocol==="http:"&&fe("XR requires a secure connection (HTTPS)")});return this._currentSessionRequest=void 0,this._currentSessionRequestMode=null,this.invokeSessionRequestEnd(e,t,o),o?this.setSession(e,o,t,i):(console.warn("XR Session request was rejected"),null)}static invokeSessionRequestStart(e,t){for(const i of this._sessionRequestStartListeners)i({mode:e,init:t})}static invokeSessionRequestEnd(e,t,i){for(const n of this._sessionRequestEndListeners)n({mode:e,init:t,newSession:i||null})}static setSession(e,t,i,n){if(this._activeSession)return console.error("A XRSession is already running"),this._activeSession;const o=e=="immersive-ar"?n.scripts_immersive_ar:n.scripts_immersive_vr;return this._activeSession=new q(e,t,n,{scripts:o,controller_added:this._controllerAddedListeners,controller_removed:this._controllerRemovedListeners,init:i}),t.addEventListener("end",this.onEnd),Ue?console.log(`%cStarted ${e} session`,"font-weight:bold;",o):console.log(`%cStarted ${e} session`,"font-weight:bold;"),this._activeSession}static $_stop_request=Symbol();static stop(){const e=this._activeSession;e&&(e[this.$_stop_request]===void 0?(Ue&&console.log("[NeedleXRSession] Stopping XR Session... (new)"),e[this.$_stop_request]=setTimeout(()=>{e.end()})):Ue&&console.warn("[NeedleXRSession] XR Session stop already requested"))}static onEnd=()=>{Ue&&console.log("XR Session ended"),this._activeSession=null};context;get sync(){return q._sync}get running(){return!this._ended&&this.session!=null}session;mode;get interactionMode(){return this.session.interactionMode}get visibilityState(){return this.session.visibilityState}get isVisibleBlurred(){return this.session.visibilityState==="visible-blurred"}get isSystemKeyboardSupported(){return this.session.isSystemKeyboardSupported}get environmentBlendMode(){return this.session.environmentBlendMode}get frame(){return this.context.xrFrame}controllers=[];get leftController(){return this.controllers.find(e=>e.side==="left")}get rightController(){return this.controllers.find(e=>e.side==="right")}getController(e){return typeof e=="number"?this.controllers[e]||null:this.controllers.find(t=>t.side===e)||null}get isPassThrough(){return!!(this.environmentBlendMode!=="opaque"&&this.interactionMode==="world-space"||this.mode==="immersive-ar"&&this.environmentBlendMode!=="opaque"&&this.controllers.some(e=>e.inputSource.targetRayMode==="tracked-pointer")||A()&&exports.DeviceUtilities.isDesktop()&&this.mode==="immersive-ar")}get isAR(){return this.mode==="immersive-ar"}get isVR(){return this.mode==="immersive-vr"}get isScreenBasedAR(){return this.isAR&&!this.isPassThrough}get posePosition(){return this._transformPosition}get poseOrientation(){return this._transformOrientation}get referenceSpace(){return this.context.renderer.xr.getReferenceSpace()}get viewerPose(){return this._viewerPose}get isTrackingImages(){if(this.frame&&"getImageTrackingResults"in this.frame&&typeof this.frame.getImageTrackingResults=="function")try{const e=this.frame.getImageTrackingResults();for(const t of e)if(t.trackingState==="tracked")return!0}catch{return!1}return!1}get rig(){const e=this._rigs[0]??null;return e?.gameObject&&dr(e.gameObject)||e?.isActive===!1?(this.updateActiveXRRig(),this._rigs[0]??null):e}_rigScale=1;_lastRigScaleUpdate=-1;get rigScale(){return this._rigs[0]?(this._lastRigScaleUpdate!==this.context.time.frame&&(this._lastRigScaleUpdate=this.context.time.frame,this._rigScale=this._rigs[0].gameObject.worldScale.x),this._rigScale):1}addRig(e){this._rigs.indexOf(e)>=0||(e.priority===void 0&&(e.priority=0),this._rigs.push(e),this.updateActiveXRRig())}removeRig(e){const t=this._rigs.indexOf(e);t!==-1&&(this._rigs.splice(t,1),this.updateActiveXRRig())}setRigActive(e){const t=this._rigs.indexOf(e),i=this._rigs[0];this._rigs.splice(t,1),this._rigs.unshift(e),e.priority=i?.priority??0,this.updateActiveXRRig()}getUserOffsetInRig(){const e=this.context.mainCamera?.position;if(!e||!this.rig)return F(0,0,0);const t=F(e);return t.x*=-1,t.z*=-1,t.applyQuaternion(ei(this.rig.gameObject.quaternion)),t}updateActiveXRRig(){const e=this._rigs[0]??null;this._defaultRig.gameObject.parent!==this.context.scene&&this.context.scene.add(this._defaultRig.gameObject),this._defaultRig.gameObject.visible=!0,this._rigs.includes(this._defaultRig)||this._rigs.push(this._defaultRig);let t=this._rigs[0];t&&t.priority===void 0&&(t.priority=0);for(let i=1;i<this._rigs.length;i++){const n=this._rigs[i];if(n.isActive){if(dr(n.gameObject)){this._rigs.splice(i,1),i--;continue}(!t||t.isActive===!1||n.priority!==void 0&&n.priority>t.priority)&&(t=n)}}if(e!==t){const i=this._rigs.indexOf(t);i>=0&&this._rigs.splice(i,1),this._rigs.unshift(t)}Ue&&(e===t?console.log("Updated Active XR Rig:",t,"prev:",e):console.log("Updated Active XRRig:",t," (the same as before)"))}_rigs=[];_viewerHitTestSource=null;getHitTest(e){if(e)return this.getControllerHitTest(e);if(!this._viewerHitTestSource)return null;const t=this._viewerHitTestSource,i=this.frame.getHitTestResults(t);if(i.length>0){const n=i[0];return this.convertHitTestResult(n)}return null}getControllerHitTest(e){const t=e.getHitTestSource();if(!t)return null;const i=this.frame.getHitTestResultsForTransientInput(t);for(const n of i)if(n.inputSource===e.inputSource)for(const o of n.results)return this.convertHitTestResult(o);return null}convertHitTestResult(e){const t=this.context.renderer.xr.getReferenceSpace(),i=t&&e.getPose(t);if(i){const n=F(i.transform.position),o=ei(i.transform.orientation),r=this.context.mainCamera;if(r?.parent!==this._cameraRenderParent&&n.applyMatrix4(wa),r?.parent){n.applyMatrix4(r.parent.matrixWorld),o.multiply(Li);const a=pe(r.parent);a.premultiply(Li),o.premultiply(a)}return{hit:e,position:n,quaternion:o}}return null}convertSpace(e){const t=F(e.position);t.applyMatrix4(wa);const i=ei(e.orientation);return i.premultiply(Li),{position:t,quaternion:i}}_defaultRig;_xr_scripts;_xr_update_scripts=[];_inactive_scripts=[];_controllerAdded;_controllerRemoved;_originalCameraWorldPosition;_originalCameraWorldRotation;_originalCameraWorldScale;_originalCameraParent;_mainCamera=null;constructor(e,t,i,n){sP(e,n.init),this.session=t,this.mode=e,this.context=i,(Ue||x("console"))&&_a(!0),this._xr_scripts=[...n.scripts],this._xr_update_scripts=this._xr_scripts.filter(o=>typeof o.onUpdateXR=="function"),this._controllerAdded=n.controller_added,this._controllerRemoved=n.controller_removed,xs(this.onBefore,ge.LateUpdate),this.context.pre_render_callbacks.push(this.onBeforeRender),this.context.post_render_callbacks.push(this.onAfterRender),(n.init.optionalFeatures?.includes("hit-test")||n.init.requiredFeatures?.includes("hit-test"))&&t.requestReferenceSpace("viewer").then(o=>t.requestHitTestSource?.call(t,{space:o})?.then(r=>this._viewerHitTestSource=r).catch(r=>console.error(r))).catch(o=>console.error(o)),this.context.mainCamera&&(this._originalCameraWorldPosition=Y(this.context.mainCamera,new c.Vector3),this._originalCameraWorldRotation=pe(this.context.mainCamera,new c.Quaternion),this._originalCameraWorldScale=je(this.context.mainCamera,new c.Vector3),this._originalCameraParent=this.context.mainCamera.parent,this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera[Hh]=this.context.mainCamera.fov)),this._defaultRig=new K1,this.context.scene.add(this._defaultRig.gameObject),this.addRig(this._defaultRig);for(let o=0;o<t.inputSources.length;o++){const r=t.inputSources[o];if(!r.handedness){console.warn("Input source in xr session has no handedness - ignoring",o);continue}this.onInputSourceAdded(r)}this.session.addEventListener("end",this.onEnd),this.session.addEventListener("inputsourceschange",o=>{for(const r of o.removed)this.disconnectInputSource(r);for(const r of o.added)this.onInputSourceAdded(r)}),this.context.xr=this,this.context.renderer.xr.setSession(this.session).then(this.onRendererSessionSet),"controllerAutoUpdate"in this.context.renderer.xr?(console.debug("Disabling three.js controllerAutoUpdate"),this.context.renderer.xr.controllerAutoUpdate=!1):Ue&&console.warn("controllerAutoUpdate is not available in three.js - cannot disable it"),exports.DeviceUtilities.isNeedleAppClip()&&window.requestAnimationFrame(()=>{const o=this.context.renderer.domElement,r=window.devicePixelRatio||1,a=o.width,l=o.height,h=Math.floor(window.innerWidth*r),d=Math.floor(window.innerHeight*r);(Math.abs(a-h)>2||Math.abs(l-d)>2)&&(o.width=h,o.height=d,console.debug("Applied DPR scaling for Needle AppClip XR session",r,o.width,o.height))})}onRendererSessionSet=()=>{this.running&&(this.context.renderer.xr.enabled=!0,this.context.renderer.xr.updateCamera(this.context.mainCamera),this.context.mainCameraComponent?.applyClearFlags())};onInputSourceAdded=e=>{if(e.targetRayMode==="screen")return;let t=0;for(let n=0;n<this.session.inputSources.length;n++)if(this.session.inputSources[n]===e){t=n;break}if(this.controllers.find(n=>n.inputSource===e)){console.debug("Controller already exists for input source",t);return}else if(this._newControllers.find(n=>n.inputSource===e)){console.debug("Controller already registered for input source",t);return}const i=new ug(this,e,t);this._newControllers.push(i)};disconnectInputSource(e){const t=(o,r)=>{if(o.inputSource===e){Ue&&console.log("Disconnecting controller",o.index);const a=r.indexOf(o);a>=0&&r.splice(a,1),this.invokeControllerEvent(o,this._controllerRemoved,"removed");const l={xr:this,controller:o,change:"removed"};for(const h of this._xr_scripts)h.onXRControllerRemoved&&h.onXRControllerRemoved(l);o.onDisconnected()}},i=[...this.controllers];for(let o=i.length-1;o>=0;o--){const r=i[o];t(r,this.controllers)}const n=[...this._newControllers];for(let o=n.length-1;o>=0;o--){const r=n[o];t(r,this._newControllers)}}end(){this._ended||this.session.end().catch(e=>console.warn(e))}_ended=!1;_newControllers=[];onEnd=e=>{if(this._ended)return;this._ended=!0,console.debug("XR Session ended"),ni.sendEvent(U.Current,"xr",{action:"session_end",mode:this.mode,source:"NeedleXRSession.onEnd"}),oP(),this.onAfterRender(),this.revertCustomForward(),this._didStart=!1,this._previousCameraParent=null,this.requestedCameraNearPlane=null,yo(this.onBefore,ge.LateUpdate);const t=this.context.pre_render_callbacks.indexOf(this.onBeforeRender);t>=0&&this.context.pre_render_callbacks.splice(t,1);const i=this.context.post_render_callbacks.indexOf(this.onAfterRender);i>=0&&this.context.post_render_callbacks.splice(i,1),this.context.xr=null,this.context.renderer.xr.enabled=!1,this.context.pre_update_oneshot_callbacks.push(()=>{this.context.mainCameraComponent?.applyClearFlags(),this.context.mainCameraComponent?.applyClippingPlane()}),D0({session:this});for(const o of q._xrEndListeners)o({xr:this});const n=[...this.controllers];for(let o=0;o<n.length;o++)this.disconnectInputSource(n[o].inputSource);this.controllers.length=0,this._newControllers.length=0;for(const o of this._xr_scripts)o?.onLeaveXR?.({xr:this});this.sync?.onExitXR(this),this.context.mainCamera&&(this._originalCameraParent?.add(this.context.mainCamera),this._originalCameraWorldPosition&&at(this.context.mainCamera,this._originalCameraWorldPosition),this._originalCameraWorldRotation&&dn(this.context.mainCamera,this._originalCameraWorldRotation),this._originalCameraWorldScale&&ka(this.context.mainCamera,this._originalCameraWorldScale),this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera[Hh]&&(this.context.mainCamera.fov=this.context.mainCamera[Hh],this.context.mainCamera[Hh]=0),this.context.mainCamera[Wf]&&(this.context.mainCamera.near=this.context.mainCamera[Wf],this.context.mainCamera[Wf]=0))),this.context.requestSizeUpdate(),this._defaultRig.gameObject.removeFromParent(),_a(!1)};_didStart=!1;onBefore=e=>{const t=e.xrFrame;if(!t)return;this.context.xr=this,this.context.mainCameraComponent&&this.context.mainCameraComponent!==this._mainCamera&&(this._mainCamera=this.context.mainCameraComponent),this.rig?.isActive==!1&&(Ue&&console.warn("Latest rig is not active - trying to activate a different rig",this.rig),this.updateActiveXRRig()),this.rig&&this._mainCamera?.gameObject&&this._mainCamera?.gameObject?.parent!==this.rig.gameObject&&this.rig.gameObject.add(this._mainCamera?.gameObject),this.internalUpdateState(),this.applyCustomForward();const i={xr:this};if(this._didStart){if(this.context.new_scripts_xr.length>0){const n=[...this.context.new_scripts_xr];for(let o=0;o<n.length;o++){const r=this.context.new_scripts_xr[o];if(!r||r.destroyed||r.supportsXR?.(this.mode)==!1){this.context.new_scripts_xr.splice(o,1);continue}if(!r.activeAndEnabled){this.context.new_scripts_xr.splice(o,1),this.markInactive(r);continue}if(this.addScript(r)){this.invokeCallback_EnterXR(r);for(const a of this.controllers)this.invokeCallback_ControllerAdded(r,a)}}}}else{if(this._didStart=!0,this.mode==="immersive-vr"){const o=ri(this.context.scene.children);if(o){const r=o.getSize(F());if(r.length()>0){const a=this._defaultRig.gameObject;a.position.set(o.min.x+r.x*.5,o.min.y,o.max.z+r.z*.5+1.5);const l=o.getCenter(F());l.y=a.position.y,a.lookAt(l)}}}A0({session:this}),_r();for(const o of q._xrStartListeners)o(i);const n=[...this._xr_scripts];Ue&&console.log("NeedleXRSession start, handle scripts:",n);for(const o of n){if(o.destroyed){this._script_to_remove.push(o);continue}if(!o.activeAndEnabled){this.markInactive(o);continue}this.invokeCallback_EnterXR(o);for(const r of this.controllers)this.invokeCallback_ControllerAdded(o,r)}}this.syncCameraCullingMask();for(const n of this.controllers)n.onUpdate(t);if(this._newControllers.length>0){const n=[...this._newControllers];this._newControllers.length=0;for(const o of n){if(!o.connected){console.warn("New controller is not connected",o);continue}this.controllers.push(o);for(const r of this._xr_scripts){if(r.destroyed){this._script_to_remove.push(r);continue}r.activeAndEnabled!==!1&&this.invokeCallback_ControllerAdded(r,o)}}this.controllers.sort((o,r)=>o.index-r.index)}Ue&&this.context.time.frame%30===0&&this.controllers.length<=0&&this.session.inputSources.length>0&&(_a(!0),console.error("XRControllers are not added but inputSources are present"));for(const n of this._xr_update_scripts){if(n.destroyed===!0){this._script_to_remove.push(n);continue}if(n.activeAndEnabled===!1){this.markInactive(n);continue}n.onUpdateXR&&n.onUpdateXR(i)}if(this.handleInactiveScripts(),this._script_to_remove.length>0){const n=[...new Set(this._script_to_remove)];this._script_to_remove.length=0;for(const o of n)!o.destroyed&&this.running&&o.onLeaveXR?.(i),this.removeScript(o)}this.sync?.onUpdate(this),this.onRenderDebug()};onRenderDebug(){if(Ue)for(const e of this.controllers)e.onRenderDebug();if((Ue||N_)&&this.rig&&($f++,$f>=20)){const e=this.rig.gameObject.worldPosition,t=this.rig.gameObject.worldForward;e.add(t.multiplyScalar(1.5));const i=this.rig.gameObject.worldUp;e.add(i.multiplyScalar(2.5));let n="";if(n+=`${this.context.time.smoothedFps.toFixed(0)} FPS`,n+=`, calls: ${this.context.renderer.info.render.calls}, tris: ${this.context.renderer.info.render.triangles.toLocaleString()}`,Ue||N_)for(const o of this.controllers)n+=`
|
|
879
|
-
${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;$f=0,B.DrawLabel(e,n,void 0,1/60*20)}}onBeforeRender=()=>{this.context.mainCamera&&(this.updateFade(this.context.mainCamera),this.requestedCameraNearPlane!==null&&this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera.near=this.requestedCameraNearPlane,this.requestedCameraNearPlane=null))};onAfterRender=()=>{if(this.onUpdateFade_PostRender(),exports.DeviceUtilities.isDesktop()||!this._renderOnceOnDevice){const e=this.context.renderer;if(e.xr.isPresenting&&this.context.mainCamera){this._renderOnceOnDevice=!0;const t=e.xr.enabled,i=e.getRenderTarget(),n=this.context.scene.background;e.xr.enabled=!1,e.setRenderTarget(null),this.isPassThrough&&(this.context.scene.background=null),this.context.composer?this.context.composer.render(this.context.time.deltaTime):e.render(this.context.scene,this.context.mainCamera),e.xr.enabled=t,e.setRenderTarget(i),this.context.scene.background=n}}};addScript(e){return this._xr_scripts.includes(e)?!1:(Ue&&console.log("Register new XRScript",e),this._xr_scripts.push(e),typeof e.onUpdateXR=="function"&&this._xr_update_scripts.push(e),!0)}markInactive(e){if(!(this._inactive_scripts.indexOf(e)>=0)){this.removeScript(e,!1),this._inactive_scripts.push(e);for(const t of this.controllers)this.invokeCallback_ControllerRemoved(e,t);this.invokeCallback_LeaveXR(e)}}handleInactiveScripts(){if(this._inactive_scripts.length>0)for(let e=this._inactive_scripts.length-1;e>=0;e--){const t=this._inactive_scripts[e];if(t.activeAndEnabled){this._inactive_scripts.splice(e,1),this.addScript(t),this.invokeCallback_EnterXR(t);for(const i of this.controllers)this.invokeCallback_ControllerAdded(t,i)}}}_script_to_remove=[];removeScript(e,t=!0){Ue&&console.log("Remove XRScript",e);const i=this._xr_scripts.indexOf(e);i>=0&&this._xr_scripts.splice(i,1);const n=this._xr_update_scripts.indexOf(e);if(n>=0&&this._xr_update_scripts.splice(n,1),t){const o=this._inactive_scripts.indexOf(e);o>=0&&this._inactive_scripts.splice(o,1)}}invokeCallback_EnterXR(e){e.onEnterXR&&e.onEnterXR({xr:this})}invokeCallback_ControllerAdded(e,t){e.onXRControllerAdded&&e.onXRControllerAdded({xr:this,controller:t,change:"added"})}invokeCallback_ControllerRemoved(e,t){e.onXRControllerRemoved&&e.onXRControllerRemoved({xr:this,controller:t,change:"removed"})}invokeCallback_LeaveXR(e){e.onLeaveXR&&!e.destroyed&&e.onLeaveXR({xr:this})}syncCameraCullingMask(){const e=this.context.xrCamera,t=this.context.mainCameraComponent?.cullingMask;if(e&&t!==void 0){for(const i of e.cameras)i.layers.mask=t;e.layers.mask=t}else if(e){for(const i of e.cameras)i.layers.enableAll();e.layers.enableAll()}}invokeControllerEvent(e,t,i){for(let n=t.length-1;n>=0;n--){const o=t[n];if(o)try{o({xr:this,controller:e,change:i})}catch(r){console.error(r)}}}_camera;_cameraRenderParent=new c.Object3D().rotateY(Math.PI);_previousCameraParent;_customforward=!0;originalCameraNearPlane;requestedCameraNearPlane=null;applyCustomForward(){if(this.context.mainCamera&&this._customforward){this._camera=this.context.mainCamera,this._camera.parent!==this._cameraRenderParent&&(this._previousCameraParent=this._camera.parent,this._previousCameraParent?.add(this._cameraRenderParent)),this._cameraRenderParent.name="XR Camera Render Parent",this._cameraRenderParent.add(this._camera);{let e=.02;const t=.001;if(this.rig){const i=je(this.rig.gameObject);e*=i.x}this._camera instanceof c.PerspectiveCamera&&Math.abs(this._camera.near-e)>t&&(this.isAR?this.originalCameraNearPlane=this._camera.near:this._camera.near=e,Ue&&console.debug(`Setting camera near plane to ${e} (was ${this.originalCameraNearPlane}) to account for XR rendering scale`))}}}revertCustomForward(){this._camera&&this._previousCameraParent&&this._previousCameraParent.add(this._camera),this._previousCameraParent=null,this._camera instanceof c.PerspectiveCamera&&this.originalCameraNearPlane!=null&&(this._camera.near=this.originalCameraNearPlane,this.originalCameraNearPlane=void 0)}_viewerPose;_transformOrientation=new c.Quaternion;_transformPosition=new c.Vector3;internalUpdateState(){const e=this.context.renderer.xr.getReferenceSpace();if(!e){this._viewerPose=void 0;return}if(this._viewerPose=this.frame.getViewerPose(e),this._viewerPose){const t=this._viewerPose.transform;this._transformPosition.set(t.position.x,t.position.y,t.position.z),this._transformOrientation.set(t.orientation.x,t.orientation.y,t.orientation.z,t.orientation.w)}}_transition;get transition(){return this._transition||(this._transition=new z_),this._transition}fadeTransition(){return this._transition||(this._transition=new z_),this._transition.fadeTransition()}updateFade(e){this._transition&&e instanceof c.PerspectiveCamera&&this._transition.update(e,this.context.time.deltaTime)}onUpdateFade_PostRender(){this._transition?.remove()}}const Gf=x("debugwebxr");class z0{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Gf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new Z("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Gf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new Z("",t,e)),!i.rightHand&&n.includes("right")&&(Gf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new Z("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class te extends c.Color{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(),typeof e=="number"&&typeof t=="number"&&typeof i=="number"?(this.set(e,t,i),this.alpha=typeof n=="number"?n:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){const e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){const i=e;return i.alpha!=null&&(this.alpha=I.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){const n=e,o=t;return n.alpha!=null&&o.alpha!=null&&(this.alpha=I.lerp(n.alpha,o.alpha,i)),super.lerpColors(e,t,i)}multiply(e){const t=e;return t.alpha!=null&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(e){if(typeof e=="string"){if(e.trim()==="transparent")return new te(0,0,0,0);if(e.startsWith("#")&&e.length===9){const t=parseInt(e.slice(1,9),16),i=t>>24&255,n=t>>16&255,o=t>>8&255,r=t>>0&255;return new te(i/255,n/255,o/255,r/255)}else if(e.startsWith("#")){const t=parseInt(e.slice(1),16),i=t>>16&255,n=t>>8&255,o=t>>0&255;return new te(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new te(t[0]/255,t[1]/255,t[2]/255,t[3])}else if(e.startsWith("rgb")){const t=e.slice(4,-1).split(",").map(Number);return new te(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new te(e[0],e[1],e[2],e[3]);if(e.length===3)return new te(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new te(e)}}const Mt=new c.Vector3,V_=new c.Vector3,$_=new c.Quaternion,lP=x("debuggizmos"),nn=8947848,Hf=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[Jp]!==void 0}static setVisible(e){for(const t of Ei.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=nn);const l=q.active?.rigScale??1,h=Ei.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),Mt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,rn(r.material,i)}static DrawDirection(e,t,i=nn,n=0,o=!0,r=1){if(!B.enabled)return;const a=Ei.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(Mt.set(0,0,-r),$_.set(t.x,t.y,t.z,t.w),Mt.applyQuaternion($_)):(Mt.set(t.x,t.y,t.z),Mt.multiplyScalar(r)),l.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,rn(a.material,i)}static DrawLine(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,rn(r.material,i)}static DrawCircle(e,t,i,n=nn,o=0,r=!0){if(!B.enabled)return;const a=Ei.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,Mt.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,rn(a.material,n)}static DrawWireSphere(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getSphere(t,n,!0);hr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,rn(r.material,i)}static DrawSphere(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getSphere(t,n,!1);hr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,rn(r.material,i)}static DrawWireBox(e,t,i=nn,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Ei.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,rn(a.material,i)}static DrawWireBox3(e,t=nn,i=0,n=!0){if(!B.enabled)return;const o=Ei.getBox(i);o.position.copy(e.getCenter(Mt)),o.scale.copy(e.getSize(Mt)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,rn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=nn,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Ei.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),Mt.set(t.x,t.y,t.z).sub(V_.set(e.x,e.y,e.z)).normalize());const h=Mt.set(t.x,t.y,t.z).sub(V_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,rn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Ei.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,rn(t.material,e.color??nn)}}const cP=new c.BoxGeometry(1,1,1);function pg(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(cP);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function rn(s,e){if(Array.isArray(s)){for(const i of s)rn(i,e);return}const t=e instanceof te?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Jp=Symbol("GizmoCache");class Ei{static familyName="needle-gizmos";static ensureFont(){let e=ie.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ie.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ie.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),lP&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new ie.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(U.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(U.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(Hf*3),3),t.geometry.setAttribute("position",i);const n=F(0,1,0),o=F(0,0,1),r=F(o);r.cross(n).normalize();const a=F(r),l=Math.PI*2/(Hf-1);for(let h=0;h<Hf+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(U.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(U.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(U.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[Jp]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(U.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,ie.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ie.__webpack_exports__default.MeshUIBaseElement){if(dr(n))continue;const o=e.isInVR,r=!1,a=!o;Nc(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),dr(r)!=!0&&r[Jp].push(r))}}}const Vt=x("debugphysics"),hP=x("debugworker"),W_=new c.Layers;class bo{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){W_.set(e),this.layerMask=W_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class mg{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ia{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new bo;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){Vt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return Vt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),Vt&&console.time("raycast"),o.length=0,Ia._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),Ia._raycasting--,Vt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&G_(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof X.GroundedSkybox&&(u=!1),d==="lod"){const p=re.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&uP(a,e,i)||(n.useAcceleratedRaycast!==!1?Zd.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,Vt&&i.length!=h){const p=i[i.length-1];B.DrawWireSphere(p.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof X.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const p=l(e);if(p===!1)return;p==="continue in children"&&(h=!1)}if(u&&G_(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(Zd.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const p=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(p)){const y=Y(e),_=y.distanceTo(m.center),g=new mg(e,_,y);if(o.push(g),!r)return}}}if(e.children)for(const p of e.children){const m=o.length;if(this.intersectSphere(p,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function G_(s){return!(s.index&&s.index.array.length<3)}const jo=new c.Sphere,qh=new c.Plane,dP=new c.Matrix3;function uP(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof X.GroundedSkybox){qh.setFromNormalAndCoplanarPoint(F(0,1,0),F(0,-l.position.y,0)),qh.applyMatrix4(l.matrixWorld,dP);const u=o.ray.intersectPlane(qh,F());if(u){jo.copy(h),jo.applyMatrix4(l.matrixWorld);const m=F(u).sub(o.ray.origin).length(),y=jo.radius*.5;m<y&&r.push({distance:m,point:u,object:l,normal:qh.normal.clone()})}return}jo.copy(h),jo.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(jo,F());if(d){const u=F(d).sub(o.ray.origin),p=u.length();if(p>jo.radius){const m=u.clone().normalize();r.push({distance:p,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Zd;(s=>{let e=0;function t(b,w,R,O,M){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const L=w,j=L.bvhNeedsUpdate;if(!L.staticGenerator)l(),r&&(L.staticGenerator=new r(w),L.staticGenerator.applyWorldTransforms=!1,L.staticGeometry=L.staticGenerator.generate(),D.boundsTree=a?.call(L.staticGeometry),L.staticGeometryLastUpdate=performance.now()+Math.random()*200,L.bvhNeedsUpdate=!0);else if(D.boundsTree&&(L.autoUpdateMeshBvhInterval!==void 0&&L.autoUpdateMeshBvhInterval>=0||j===!0)){const V=performance.now(),W=V-L.staticGeometryLastUpdate,k=L.autoUpdateMeshBvhInterval??100;(j||W>k)&&(Vt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),L.bvhNeedsUpdate=!1,L.staticGeometryLastUpdate=V,L.staticGenerator?.generate(L.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||v();let L=!0;if((O.xr||D[y]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(L=!1),L&&p){if(D[m]===void 0){let j=null;if(g.length>0){const V=g.shift();V&&!V.running&&(j=V)}if(!j&&_.length<3)try{hP&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-CAt_h_GH.umd.cjs",document.baseURI).href),j=new p,_.push(j)}catch(V){V instanceof DOMException&&V.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug(V),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(V)),e++}if(j!=null&&!j.running){const V=w.name;Vt&&console.log("<<<< worker start",V,j),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{j.generate(W).then(k=>{D[m]="done",D.boundsTree=k}).catch(k=>{D[m]="failed - "+k?.message,D[y]=!1,Vt&&console.error("Failed to generate mesh bvh on worker",k)}).finally(()=>{Vt&&console.log(">>>>> worker done",V,{hasBoundsTre:D.boundsTree!=null}),g.push(j),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(k){console.error("Failed to generate mesh bvh on worker",k)}}else Vt&&console.warn("No worker available")}}else(!u||!L)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const L=b,j=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),Vt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(Vt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return Vt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const V=L.firstHitOnly;return L.firstHitOnly=!1,L.intersectObject(w,!1,R),L.firstHitOnly=V,w.raycast=j,!0}else if(b instanceof c.Sphere){const L=D.boundsTree;if(L){const j=b;if(h.copy(w.matrixWorld).invert(),j.applyMatrix4(h),L.intersectsSphere(j)){const W=Y(w),k=W.distanceTo(j.center),N=new mg(w,k,W);R.push(N)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-CntUvmJu.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(Vt||A())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,p=null;const m=Symbol("Needle:MeshBVH-Worker"),y=Symbol("Needle:MeshBVH-CanUseWorker"),_=[],g=[];function v(){d=!0,u=!0,Promise.resolve().then(()=>kA).then(b=>{p=b.GenerateMeshBVHWorker}).catch(b=>{Vt||A()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Zd||(Zd={}));const H_=Symbol("gltf-loader-internal-usage-tracker"),fP=x("debugusers");class xa{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return xa._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){xa._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[H_]=e._loadingId),r)),o},null}afterRoot(e){xa._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[H_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{fP&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class N0{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
|
|
879
|
+
${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;$f=0,B.DrawLabel(e,n,void 0,1/60*20)}}onBeforeRender=()=>{this.context.mainCamera&&(this.updateFade(this.context.mainCamera),this.requestedCameraNearPlane!==null&&this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera.near=this.requestedCameraNearPlane,this.requestedCameraNearPlane=null))};onAfterRender=()=>{if(this.onUpdateFade_PostRender(),exports.DeviceUtilities.isDesktop()||!this._renderOnceOnDevice){const e=this.context.renderer;if(e.xr.isPresenting&&this.context.mainCamera){this._renderOnceOnDevice=!0;const t=e.xr.enabled,i=e.getRenderTarget(),n=this.context.scene.background;e.xr.enabled=!1,e.setRenderTarget(null),this.isPassThrough&&(this.context.scene.background=null),this.context.composer?this.context.composer.render(this.context.time.deltaTime):e.render(this.context.scene,this.context.mainCamera),e.xr.enabled=t,e.setRenderTarget(i),this.context.scene.background=n}}};addScript(e){return this._xr_scripts.includes(e)?!1:(Ue&&console.log("Register new XRScript",e),this._xr_scripts.push(e),typeof e.onUpdateXR=="function"&&this._xr_update_scripts.push(e),!0)}markInactive(e){if(!(this._inactive_scripts.indexOf(e)>=0)){this.removeScript(e,!1),this._inactive_scripts.push(e);for(const t of this.controllers)this.invokeCallback_ControllerRemoved(e,t);this.invokeCallback_LeaveXR(e)}}handleInactiveScripts(){if(this._inactive_scripts.length>0)for(let e=this._inactive_scripts.length-1;e>=0;e--){const t=this._inactive_scripts[e];if(t.activeAndEnabled){this._inactive_scripts.splice(e,1),this.addScript(t),this.invokeCallback_EnterXR(t);for(const i of this.controllers)this.invokeCallback_ControllerAdded(t,i)}}}_script_to_remove=[];removeScript(e,t=!0){Ue&&console.log("Remove XRScript",e);const i=this._xr_scripts.indexOf(e);i>=0&&this._xr_scripts.splice(i,1);const n=this._xr_update_scripts.indexOf(e);if(n>=0&&this._xr_update_scripts.splice(n,1),t){const o=this._inactive_scripts.indexOf(e);o>=0&&this._inactive_scripts.splice(o,1)}}invokeCallback_EnterXR(e){e.onEnterXR&&e.onEnterXR({xr:this})}invokeCallback_ControllerAdded(e,t){e.onXRControllerAdded&&e.onXRControllerAdded({xr:this,controller:t,change:"added"})}invokeCallback_ControllerRemoved(e,t){e.onXRControllerRemoved&&e.onXRControllerRemoved({xr:this,controller:t,change:"removed"})}invokeCallback_LeaveXR(e){e.onLeaveXR&&!e.destroyed&&e.onLeaveXR({xr:this})}syncCameraCullingMask(){const e=this.context.xrCamera,t=this.context.mainCameraComponent?.cullingMask;if(e&&t!==void 0){for(const i of e.cameras)i.layers.mask=t;e.layers.mask=t}else if(e){for(const i of e.cameras)i.layers.enableAll();e.layers.enableAll()}}invokeControllerEvent(e,t,i){for(let n=t.length-1;n>=0;n--){const o=t[n];if(o)try{o({xr:this,controller:e,change:i})}catch(r){console.error(r)}}}_camera;_cameraRenderParent=new c.Object3D().rotateY(Math.PI);_previousCameraParent;_customforward=!0;originalCameraNearPlane;requestedCameraNearPlane=null;applyCustomForward(){if(this.context.mainCamera&&this._customforward){this._camera=this.context.mainCamera,this._camera.parent!==this._cameraRenderParent&&(this._previousCameraParent=this._camera.parent,this._previousCameraParent?.add(this._cameraRenderParent)),this._cameraRenderParent.name="XR Camera Render Parent",this._cameraRenderParent.add(this._camera);{let e=.02;const t=.001;if(this.rig){const i=je(this.rig.gameObject);e*=i.x}this._camera instanceof c.PerspectiveCamera&&Math.abs(this._camera.near-e)>t&&(this.isAR?this.originalCameraNearPlane=this._camera.near:this._camera.near=e,Ue&&console.debug(`Setting camera near plane to ${e} (was ${this.originalCameraNearPlane}) to account for XR rendering scale`))}}}revertCustomForward(){this._camera&&this._previousCameraParent&&this._previousCameraParent.add(this._camera),this._previousCameraParent=null,this._camera instanceof c.PerspectiveCamera&&this.originalCameraNearPlane!=null&&(this._camera.near=this.originalCameraNearPlane,this.originalCameraNearPlane=void 0)}_viewerPose;_transformOrientation=new c.Quaternion;_transformPosition=new c.Vector3;internalUpdateState(){const e=this.context.renderer.xr.getReferenceSpace();if(!e){this._viewerPose=void 0;return}if(this._viewerPose=this.frame.getViewerPose(e),this._viewerPose){const t=this._viewerPose.transform;this._transformPosition.set(t.position.x,t.position.y,t.position.z),this._transformOrientation.set(t.orientation.x,t.orientation.y,t.orientation.z,t.orientation.w)}}_transition;get transition(){return this._transition||(this._transition=new z_),this._transition}fadeTransition(){return this._transition||(this._transition=new z_),this._transition.fadeTransition()}updateFade(e){this._transition&&e instanceof c.PerspectiveCamera&&this._transition.update(e,this.context.time.deltaTime)}onUpdateFade_PostRender(){this._transition?.remove()}}const Gf=x("debugwebxr");class z0{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Gf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new Z("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Gf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new Z("",t,e)),!i.rightHand&&n.includes("right")&&(Gf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new Z("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class te extends c.Color{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(),typeof e=="number"&&typeof t=="number"&&typeof i=="number"?(this.set(e,t,i),this.alpha=typeof n=="number"?n:1):e!==void 0&&(this.set(e),this.alpha=1)}clone(){const e=super.clone();return e.alpha=this.alpha,e}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){const i=e;return i.alpha!=null&&(this.alpha=I.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){const n=e,o=t;return n.alpha!=null&&o.alpha!=null&&(this.alpha=I.lerp(n.alpha,o.alpha,i)),super.lerpColors(e,t,i)}multiply(e){const t=e;return t.alpha!=null&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}fromArray(e,t=0){return this.alpha=e[t+3],super.fromArray(e,t)}static fromColorRepresentation(e){if(typeof e=="string"){if(e.trim()==="transparent")return new te(0,0,0,0);if(e.startsWith("#")&&e.length===9){const t=parseInt(e.slice(1,9),16),i=t>>24&255,n=t>>16&255,o=t>>8&255,r=t>>0&255;return new te(i/255,n/255,o/255,r/255)}else if(e.startsWith("#")){const t=parseInt(e.slice(1),16),i=t>>16&255,n=t>>8&255,o=t>>0&255;return new te(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new te(t[0]/255,t[1]/255,t[2]/255,t[3])}else if(e.startsWith("rgb")){const t=e.slice(4,-1).split(",").map(Number);return new te(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new te(e[0],e[1],e[2],e[3]);if(e.length===3)return new te(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new te(e)}}const Mt=new c.Vector3,V_=new c.Vector3,$_=new c.Quaternion,lP=x("debuggizmos"),nn=8947848,Hf=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[Jp]!==void 0}static setVisible(e){for(const t of Ei.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=nn);const l=q.active?.rigScale??1,h=Ei.getTextLabel(n,t,i*l,o,r);return a instanceof c.Object3D&&a.add(h),h.position.x=e.x,h.position.y=e.y,h.position.z=e.z,h}static DrawRay(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),Mt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,rn(r.material,i)}static DrawDirection(e,t,i=nn,n=0,o=!0,r=1){if(!B.enabled)return;const a=Ei.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(Mt.set(0,0,-r),$_.set(t.x,t.y,t.z,t.w),Mt.applyQuaternion($_)):(Mt.set(t.x,t.y,t.z),Mt.multiplyScalar(r)),l.setXYZ(1,e.x+Mt.x,e.y+Mt.y,e.z+Mt.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,rn(a.material,i)}static DrawLine(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,rn(r.material,i)}static DrawCircle(e,t,i,n=nn,o=0,r=!0){if(!B.enabled)return;const a=Ei.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,Mt.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,rn(a.material,n)}static DrawWireSphere(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getSphere(t,n,!0);hr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,rn(r.material,i)}static DrawSphere(e,t,i=nn,n=0,o=!0){if(!B.enabled)return;const r=Ei.getSphere(t,n,!1);hr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,rn(r.material,i)}static DrawWireBox(e,t,i=nn,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Ei.getBox(n);a.position.set(e.x,e.y,e.z),a.scale.set(t.x,t.y,t.z),r?a.quaternion.copy(r):a.quaternion.identity(),a.material.depthTest=o,a.material.wireframe=!0,a.material.depthWrite=!1,a.material.fog=!1,rn(a.material,i)}static DrawWireBox3(e,t=nn,i=0,n=!0){if(!B.enabled)return;const o=Ei.getBox(i);o.position.copy(e.getCenter(Mt)),o.scale.copy(e.getSize(Mt)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,rn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=nn,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Ei.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),Mt.set(t.x,t.y,t.z).sub(V_.set(e.x,e.y,e.z)).normalize());const h=Mt.set(t.x,t.y,t.z).sub(V_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,rn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Ei.getMesh(e.duration??0);"mesh"in e?(t.geometry=e.mesh.geometry,t.matrixWorld.copy(e.mesh.matrixWorld)):(t.geometry=e.geometry,t.matrixWorld.copy(e.matrix)),t.matrixAutoUpdate=!1,t.matrixWorldAutoUpdate=!1,t.material.depthTest=e.depthTest??!0,t.material.wireframe=!0,rn(t.material,e.color??nn)}}const cP=new c.BoxGeometry(1,1,1);function pg(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(cP);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function rn(s,e){if(Array.isArray(s)){for(const i of s)rn(i,e);return}const t=e instanceof te?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Jp=Symbol("GizmoCache");class Ei{static familyName="needle-gizmos";static ensureFont(){let e=ie.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ie.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ie.__webpack_exports__default.update()}))}static getTextLabel(e,t,i,n,o){this.ensureFont();let r=this.textLabelCache.pop(),a=1;o&&typeof o=="string"&&o?.length>=8&&o.startsWith("#")?(a=parseInt(o.substring(7),16)/255,o=o.substring(0,7),lP&&console.log(o,a)):typeof o=="object"&&o.a!==void 0&&(a=o.a);const l={boxSizing:"border-box",fontFamily:this.familyName,width:"auto",fontSize:i,color:n,lineHeight:1,backgroundColor:o??void 0,backgroundOpacity:a,textContent:t,borderRadius:.5*i,padding:.8*i,whiteSpace:"pre",offset:.05*i};if(r)r.set(l);else{r=new ie.__webpack_exports__Text(l);const h=this,d=r;d.setText=function(u){this.set({textContent:u}),h.tmuiNeedsUpdate=!0}}return this.tmuiNeedsUpdate=!0,this.registerTimedObject(U.Current,r,e,this.textLabelCache),r}static getBox(e){let t=this.boxesCache.pop();if(!t){const i=new c.BoxGeometry(1,1,1);t=new c.Mesh(i)}return this.registerTimedObject(U.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");i||(i=new c.BufferAttribute(new Float32Array(6),3),t.geometry.setAttribute("position",i))}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.linesCache),t}static getCircle(e){let t=this.circlesCache.pop();if(!t){t=new c.Line;let i=t.geometry.getAttribute("position");if(!i){i=new c.BufferAttribute(new Float32Array(Hf*3),3),t.geometry.setAttribute("position",i);const n=F(0,1,0),o=F(0,0,1),r=F(o);r.cross(n).normalize();const a=F(r),l=Math.PI*2/(Hf-1);for(let h=0;h<Hf+1;h++){const d=l*h;n.copy(a).multiplyScalar(Math.cos(d)*1),r.copy(o).multiplyScalar(Math.sin(d)*1);const u=n.add(r);i.setXYZ(h,u.x,u.y,u.z)}}}return t.frustumCulled=!1,this.registerTimedObject(U.Current,t,e,this.circlesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new c.Mesh(new c.SphereGeometry(1,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(U.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new c.Mesh(new c.CylinderGeometry(0,.5,1,8))),this.registerTimedObject(U.Current,t,e,this.arrowHeadsCache),t}static getMesh(e){let t=this.mesh.pop();return t||(t=new c.Mesh,t.material=new c.MeshBasicMaterial),this.registerTimedObject(U.Current,t,e,this.mesh),t}static linesCache=[];static circlesCache=[];static spheresCache=[];static boxesCache=[];static arrowHeadsCache=[];static mesh=[];static textLabelCache=[];static registerTimedObject(e,t,i,n){if(!e){console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");return}const o=this.contextBeforeRenderCallbacks.get(e),r=this.contextPostRenderCallbacks.get(e);if(o){if(e.pre_render_callbacks[e.pre_render_callbacks.length-1]!==o){const a=e.pre_render_callbacks.indexOf(o);a>=0&&e.pre_render_callbacks.splice(a,1),e.pre_render_callbacks.push(o)}}else{const a=()=>{this.onBeforeRender(e,this.timedObjectsBuffer)};this.contextBeforeRenderCallbacks.set(e,a),e.pre_render_callbacks.push(a)}if(r){if(e.post_render_callbacks[e.post_render_callbacks.length-1]!==r){const a=e.post_render_callbacks.indexOf(r);a>=0&&e.post_render_callbacks.splice(a,1),e.post_render_callbacks.push(r)}}else{const a=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,a),e.post_render_callbacks.push(a)}t.traverse(a=>{a.layers.disableAll(),a.layers.enable(2)}),t.renderOrder=999999,t[Jp]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(U.Current.time.realtimeSinceStartup+i),e.scene.add(t)}static timedObjectsBuffer=new Array;static timesBuffer=new Array;static contextPostRenderCallbacks=new Map;static contextBeforeRenderCallbacks=new Map;static tmuiNeedsUpdate=!1;static onBeforeRender(e,t){this.tmuiNeedsUpdate&&(this.tmuiNeedsUpdate=!1,ie.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ie.__webpack_exports__default.MeshUIBaseElement){if(dr(n))continue;const o=e.isInVR,r=!1,a=!o;Nc(n,e.mainCamera,r,a)}}}static onPostRender(e,t,i){const n=e.time.realtimeSinceStartup;for(let o=t.length-1;o>=0;o--){const r=t[o];n>=i[o]-1e-6&&(t.splice(o,1),i.splice(o,1),r.removeFromParent(),dr(r)!=!0&&r[Jp].push(r))}}}const Vt=x("debugphysics"),hP=x("debugworker"),W_=new c.Layers;class bo{static AllLayers=4294967295;ray;cam;screenPoint;raycaster;results;targets;recursive=!0;minDistance;maxDistance;lineThreshold;layerMask;ignore;testObject;useAcceleratedRaycast;allowSlowRaycastFallback=!0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new c.Vector2),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setLayer(e){W_.set(e),this.layerMask=W_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class mg{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ia{static _raycasting=0;static get raycasting(){return this._raycasting>0}raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycast(e,t,{maxDistance:i,solid:n})??null}raycastPhysicsFastAndGetNormal(e,t=void 0,i=1/0,n=!0){return this.context.physics.engine?.raycastAndGetNormal(e,t,{maxDistance:i,solid:n})??null}sphereOverlapPhysics(e,t){return this.context.physics.engine?.sphereOverlap(e,t)??null}context;engine;constructor(e){this.context=e}raycaster=new c.Raycaster;defaultRaycastOptions=new bo;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:-1},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new c.Layers;sphere=new c.Sphere;sphereOverlap(e,t,i=!0,n=!1,o=null){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;const r=this.sphereMask;r.enableAll(),r.disable(2);for(const a of this.context.scene.children)this.intersectSphere(a,e,t,r,this.sphereResults,i,n,o);return this.sphereResults.sort((a,l)=>a.distance-l.distance)}raycastFromRay(e,t=null){const i=t??this.defaultRaycastOptions;i.ray=e;const n=this.raycast(i);return i===this.defaultRaycastOptions&&(i.ray=void 0),n}raycast(e=null){Vt&&performance.mark("raycast.start"),e||(e=this.defaultRaycastOptions);const t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold===void 0&&(e.lineThreshold=-1),i.params.Line={threshold:e.lineThreshold},e.ray)i.ray.copy(e.ray);else{const a=e.cam??this.context.mainCamera;if(!a)return Vt&&console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];const l=this.context.xrCamera;this.context.isInXR&&l instanceof c.ArrayCamera&&l.cameras.length>0?i.setFromCamera(t,l.cameras[0]):i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n.length=1,n[0]=this.context.scene);let o=e.results;this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),o||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),o=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof c.Layers?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),Vt&&console.time("raycast"),o.length=0,Ia._raycasting++,this.intersect(this.raycaster,n,o,e),o.sort((a,l)=>a.distance-l.distance);const r=e.ignore;return r!==void 0&&r.length>0&&(o=o.filter(a=>!r.includes(a.object))),Ia._raycasting--,Vt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&G_(l)||(r=!1));if(r){const h=i.length,d=o.raycastPreference||"lod";let u=d!=="bounds";if(n.precise===!1&&(u=!1),l&&(u||=l.getAttribute("position")?.array?.length<64),a instanceof X.GroundedSkybox&&(u=!1),d==="lod"){const p=re.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&uP(a,e,i)||(n.useAcceleratedRaycast!==!1?Zd.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,Vt&&i.length!=h){const p=i[i.length-1];B.DrawWireSphere(p.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof X.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const p=l(e);if(p===!1)return;p==="continue in children"&&(h=!1)}if(u&&G_(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(Zd.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const p=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(p)){const y=Y(e),_=y.distanceTo(m.center),g=new mg(e,_,y);if(o.push(g),!r)return}}}if(e.children)for(const p of e.children){const m=o.length;if(this.intersectSphere(p,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function G_(s){return!(s.index&&s.index.array.length<3)}const jo=new c.Sphere,qh=new c.Plane,dP=new c.Matrix3;function uP(s,e,t){const i=s._computeIntersections;if(!i)return!1;let n=s["_computeIntersections:Needle"];return n||(n=s["_computeIntersections:Needle"]=function(o,r,a){const l=this,h=l.geometry.boundingSphere;if(h){if(l instanceof X.GroundedSkybox){qh.setFromNormalAndCoplanarPoint(F(0,1,0),F(0,-l.position.y,0)),qh.applyMatrix4(l.matrixWorld,dP);const u=o.ray.intersectPlane(qh,F());if(u){jo.copy(h),jo.applyMatrix4(l.matrixWorld);const m=F(u).sub(o.ray.origin).length(),y=jo.radius*.5;m<y&&r.push({distance:m,point:u,object:l,normal:qh.normal.clone()})}return}jo.copy(h),jo.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(jo,F());if(d){const u=F(d).sub(o.ray.origin),p=u.length();if(p>jo.radius){const m=u.clone().normalize();r.push({distance:p,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Zd;(s=>{let e=0;function t(b,w,R,O,M){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const L=w,j=L.bvhNeedsUpdate;if(!L.staticGenerator)l(),r&&(L.staticGenerator=new r(w),L.staticGenerator.applyWorldTransforms=!1,L.staticGeometry=L.staticGenerator.generate(),D.boundsTree=a?.call(L.staticGeometry),L.staticGeometryLastUpdate=performance.now()+Math.random()*200,L.bvhNeedsUpdate=!0);else if(D.boundsTree&&(L.autoUpdateMeshBvhInterval!==void 0&&L.autoUpdateMeshBvhInterval>=0||j===!0)){const V=performance.now(),W=V-L.staticGeometryLastUpdate,k=L.autoUpdateMeshBvhInterval??100;(j||W>k)&&(Vt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),L.bvhNeedsUpdate=!1,L.staticGeometryLastUpdate=V,L.staticGenerator?.generate(L.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||v();let L=!0;if((O.xr||D[y]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(L=!1),L&&p){if(D[m]===void 0){let j=null;if(g.length>0){const V=g.shift();V&&!V.running&&(j=V)}if(!j&&_.length<3)try{hP&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-BAYLGumK.umd.cjs",document.baseURI).href),j=new p,_.push(j)}catch(V){V instanceof DOMException&&V.name==="SecurityError"?(console.warn("Failed to create MeshBVH worker, falling back to main thread generation. This can happen when running from file://, if the browser does not support workers or if the browser is blocking workers for other reasons."),console.debug(V),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(V)),e++}if(j!=null&&!j.running){const V=w.name;Vt&&console.log("<<<< worker start",V,j),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{j.generate(W).then(k=>{D[m]="done",D.boundsTree=k}).catch(k=>{D[m]="failed - "+k?.message,D[y]=!1,Vt&&console.error("Failed to generate mesh bvh on worker",k)}).finally(()=>{Vt&&console.log(">>>>> worker done",V,{hasBoundsTre:D.boundsTree!=null}),g.push(j),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(k){console.error("Failed to generate mesh bvh on worker",k)}}else Vt&&console.warn("No worker available")}}else(!u||!L)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const L=b,j=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),Vt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(Vt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return Vt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const V=L.firstHitOnly;return L.firstHitOnly=!1,L.intersectObject(w,!1,R),L.firstHitOnly=V,w.raycast=j,!0}else if(b instanceof c.Sphere){const L=D.boundsTree;if(L){const j=b;if(h.copy(w.matrixWorld).invert(),j.applyMatrix4(h),L.intersectsSphere(j)){const W=Y(w),k=W.distanceTo(j.center),N=new mg(w,k,W);R.push(N)}}return!0}return!1}s.runMeshBVHRaycast=t;let i=!1,n=null,o=null,r=null,a=null;function l(){i||(i=!0,Promise.resolve().then(()=>require("./vendor-CntUvmJu.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(Vt||A())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,p=null;const m=Symbol("Needle:MeshBVH-Worker"),y=Symbol("Needle:MeshBVH-CanUseWorker"),_=[],g=[];function v(){d=!0,u=!0,Promise.resolve().then(()=>kA).then(b=>{p=b.GenerateMeshBVHWorker}).catch(b=>{Vt||A()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Zd||(Zd={}));const H_=Symbol("gltf-loader-internal-usage-tracker"),fP=x("debugusers");class xa{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return xa._loadingProcesses>0}static _loadingProcesses=0;parser;_getDependency;_loadingId;_loadedObjects=new Set;constructor(e){this.parser=e,this._getDependency=this.parser.getDependency,this._loadingId=Date.now().toString()}beforeRoot(){xa._loadingProcesses++;const e=this,t=this._getDependency;return this.parser.getDependency=function(i,n){const o=t.call(this,i,n);return o.then(r=>(r&&(e._loadedObjects.add(r),r[H_]=e._loadingId),r)),o},null}afterRoot(e){xa._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[H_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{fP&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class N0{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;const t=e?.reason?.path;if(t){const i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
|
|
880
880
|
`+i.src),e.preventDefault())}})}}const Pu=x("trackresources");function V0(){return Pu==="dispose"}let br=!0;Pu===0&&(br=!1);function pP(s){br=s}function $0(){return br}const W0=Symbol("disposable");function G0(s,e){s&&(s[W0]=e,nr&&console.warn("Set disposable",e,s))}const H0=Symbol("disposed");function mP(s){return s[H0]===!0}function we(s){if(s){if(s[W0]===!1){nr&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[H0]=!0),s instanceof c.Scene)we(s.environment),we(s.background),we(s.customDepthMaterial),we(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)we(s.geometry),we(s.material),we(s.skeleton),we(s.bindMatrix),we(s.bindMatrixInverse),we(s.customDepthMaterial),we(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)we(s.geometry),we(s.material),we(s.customDepthMaterial),we(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){qr(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];we(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)nr&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&we(e);else if(s instanceof c.Material){qr(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&we(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?we(i):i instanceof c.Uniform$1&&we(i.value)}}else s instanceof c.Texture?(qr(s),qr(s.source),s.source?.data instanceof ImageBitmap&&qr(s.source.data)):s instanceof c.Skeleton?(qr(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&nr&&console.warn("Unknown object type",s)}}function qr(s){s&&((nr||V0()||Pu)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function gP(s){}const yP=new Set;function gg(s,e,t=null,i){if(i||(i=yP,i.clear()),!s)return i;const n=s[Sc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&gg(o,!0,t,i));return i}function _P(s){return s[zl]}const nr=x("debugresourceusers")||x("debugmemory"),Sc=Symbol("needle-resource-users"),zl=Symbol("needle-resource-users-count");function Bt(s,e){yu(s,e,function(t,i){br&&!Ia.raycasting&&(Jd(Sc,this,t,!1),Jd(Sc,this,i,!0))})}br&&(Bt(c.Mesh.prototype,"material"),Bt(c.Mesh.prototype,"geometry"),Bt(c.Material.prototype,"map"),Bt(c.Material.prototype,"bumpMap"),Bt(c.Material.prototype,"alphaMap"),Bt(c.Material.prototype,"normalMap"),Bt(c.Material.prototype,"displacementMap"),Bt(c.Material.prototype,"roughnessMap"),Bt(c.Material.prototype,"metalnessMap"),Bt(c.Material.prototype,"emissiveMap"),Bt(c.Material.prototype,"specularMap"),Bt(c.Material.prototype,"envMap"),Bt(c.Material.prototype,"lightMap"),Bt(c.Material.prototype,"aoMap"),Bt(c.Material.prototype,"gradientMap"));function bP(s){if(br===!1)return;const e=s[Sc];if(e)for(const t of e)Jd(Sc,t,s,!1)}br&&yu(c.Material.prototype,"dispose",function(){bP(this)});let em=0;function Jd(s,e,t,i){if(em>0)return;if(Array.isArray(t)){for(const o of t)Jd(s,e,o,i);return}if(!t)return;let n=t[s];if(n||(n=new Set),i){if(e&&!n.has(e)){n.add(e);let o=t[zl]||0;o+=1,t[zl]=o,nr&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[zl]||0;o>0&&(o-=1,t[zl]=o),nr&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(xa.isLoading(t)||(Pu&&console.warn(`🔴 Removed all user of "${t.type}"`,t),V0()&&we(t)))}t[s]=n}try{yu(c.WebGLRenderer.prototype,"render",function(){em++},function(){em--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const Cc=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),q0=Symbol("isUsingInstancing"),X0=Symbol("instancingRenderer"),Nl=Symbol("instancingAutoUpdateBounds");class Ni{static isUsingInstancing(e){return e[q0]===!0}static getRenderer(e){return e[X0]||null}setAutoUpdateBounds(e,t){const i=Ni.getRenderer(e);i&&(i[Nl]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[Cc]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)Ni.markDirty(i,!0)}}const Q0=new Map;function Y0(s,e){if(!s)return;if(!e){console.warn("No prototype found",s,s.prototype,s.constructor);return}const t=Q0.get(e);t&&t.apply(s)}function yg(s){const e=vP(s.prototype);Q0.set(s,e)}function vP(s){return new wP(s)}class wP{$symbol;extensions;descriptors;constructor(e){this.$symbol=Symbol("prototype-extension"),this.extensions=Object.keys(e),this.descriptors=new Array;for(let t=0;t<this.extensions.length;t++){const i=this.extensions[t],n=Object.getOwnPropertyDescriptor(e,i);n&&this.descriptors.push(n)}}apply(e){if(!e[this.$symbol]){e[this.$symbol]=!0;for(let t=0;t<this.extensions.length;t++){const i=this.extensions[t],n=this.descriptors[t];n&&Object.defineProperty(e,i,n)}}}}function Ou(s){s&&s.isObject3D===!0&&Y0(s,c.Object3D)}let q_=!1;function xP(){if(q_)return;if(q_=!0,Xm.experimentalSmartHierarchyUpdate){const i=c.Object3D.prototype.add;c.Object3D.prototype.add=function(...r){return Xf(),i.apply(this,r)};const n=c.Object3D.prototype.attach;c.Object3D.prototype.attach=function(...r){return Xf(),n.apply(this,r)};const o=c.Object3D.prototype.remove;c.Object3D.prototype.remove=function(...r){return Xf(),o.apply(this,r)}}c.Object3D.prototype.SetActive=function(i){this.visible=i},c.Object3D.prototype.setActive=function(i){this.visible=i},c.Object3D.prototype.destroy=function(){bi(this)},c.Object3D.prototype.addComponent=function(i,n){return hn(this,i,n)},c.Object3D.prototype.addNewComponent=function(i,n){return hn(this,i,n)},c.Object3D.prototype.removeComponent=function(i){return vg(this,i)},c.Object3D.prototype.getOrAddComponent=function(i,n){return Xc(this,i,n)},c.Object3D.prototype.getComponent=function(i){return vr(this,i)},c.Object3D.prototype.getComponents=function(i,n){return Qc(this,i,n)},c.Object3D.prototype.getComponentInChildren=function(i,n=!1){return Yc(this,i,n)},c.Object3D.prototype.getComponentsInChildren=function(i,n){return Wa(this,i,n)},c.Object3D.prototype.getComponentInParent=function(i,n=!1){return Pc(this,i,n)},c.Object3D.prototype.getComponentsInParent=function(i,n){return Eu(this,i,n)},Object.getOwnPropertyDescriptor(c.Object3D.prototype,"activeSelf")||Object.defineProperty(c.Object3D.prototype,"activeSelf",{get:function(){return $a(this)},set:function(i){sc(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"raycastAllowed")||Object.defineProperty(c.Object3D.prototype,"raycastAllowed",{get:function(){return this.userData&&this.userData.raycastAllowed!==!1},set:function(i){const n=this;n.userData||(n.userData={}),n.userData.raycastAllowed=i}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldPosition")||Object.defineProperty(c.Object3D.prototype,"worldPosition",{get:function(){return this instanceof X.TransformControlsGizmo?Y(this.object):Y(this)},set:function(i){at(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldQuaternion")||Object.defineProperty(c.Object3D.prototype,"worldQuaternion",{get:function(){return this instanceof X.TransformControlsGizmo?pe(this.object):pe(this)},set:function(i){dn(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldRotation")||Object.defineProperty(c.Object3D.prototype,"worldRotation",{get:function(){return mu(this)},set:function(i){Ev(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldScale")||Object.defineProperty(c.Object3D.prototype,"worldScale",{get:function(){return je(this)},set:function(i){ka(this,i)}});const s=new c.Matrix4,e=new c.Vector3(0,0,0),t=new c.Vector3(0,1,0);Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldForward")||Object.defineProperty(c.Object3D.prototype,"worldForward",{get:function(){return F().set(0,0,1).applyQuaternion(pe(this))},set:function(i){const n=ei().setFromRotationMatrix(s.lookAt(e.set(0,0,0),i,t.set(0,1,0)));this.worldQuaternion=n}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldRight")||Object.defineProperty(c.Object3D.prototype,"worldRight",{get:function(){return F().set(1,0,0).applyQuaternion(pe(this))}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldUp")||Object.defineProperty(c.Object3D.prototype,"worldUp",{get:function(){return F().set(0,1,0).applyQuaternion(pe(this))}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"contains")||Object.defineProperty(c.Object3D.prototype,"contains",{value:function(i){if(!i)return!1;if(this===i)return!0;for(const n of this.children)if(n.contains(i))return!0;return!1}}),yg(c.Object3D)}const wd=x("debuggetcomponent"),sr=x("debuginstantiate");class gn{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context;components;clone(){const e=new gn;return e.idProvider=this.idProvider,e.parent=this.parent,e.keepWorldPosition=this.keepWorldPosition,e.position=Array.isArray(this.position)?[...this.position]:this.position?.clone(),e.rotation=Array.isArray(this.rotation)?[...this.rotation]:this.rotation?.clone(),e.scale=Array.isArray(this.scale)?[...this.scale]:this.scale?.clone(),e.visible=this.visible,e.context=this.context,e.components=this.components,e}cloneAssign(e){this.idProvider=e.idProvider,this.parent=e.parent,this.keepWorldPosition=e.keepWorldPosition,this.position=Array.isArray(e.position)?[...e.position]:e.position?.clone(),this.rotation=Array.isArray(e.rotation)?[...e.rotation]:e.rotation?.clone(),this.scale=Array.isArray(e.scale)?[...e.scale]:e.scale?.clone(),this.visible=e.visible,this.context=e.context,this.components=e.components}}function $a(s){return s.visible}function sc(s,e){return typeof e=="number"&&(e=e>.5),s.visible=e,s.visible}function K0(s){return s[jn]||Mu(s)}function Z0(s,e){s[q0]=e}function Mu(s){return Ni.isUsingInstancing(s)}function _g(s,e){return Ma(s,e,!0,!0)}const J0=Symbol("isDestroyed");function dr(s){return s[J0]}function ew(s,e){s[J0]=e}const tm=Symbol("isDontDestroy");function na(s,e=!0){s[tm]=e}const xd=[],Sd=[];function bi(s,e=!0,t=!1){xd.length=0,Sd.length=0,im(s,e,!0);for(const i of xd)i.gameObject=null,i.context=null;for(const i of Sd)ew(i,!0),t&&we(i);Sd.length=0,xd.length=0}function im(s,e=!0,t=!0){if(s==null)return;const i=s;if(i.isComponent){if(i[tm])return;xd.push(i);const r=i.gameObject;i.__internalDisable(),i.__internalDestroy(),i.gameObject=r;return}if(s[tm])return;const n=s;wd&&console.log(n),Sd.push(n);const o=n.userData?.components;if(o!=null&&Array.isArray(o)){let r=o.length;for(let a=0;a<o.length;a++){const l=o[a];im(l,e,!1),o.length<r&&(r=o.length,a--)}}if(e&&n.children)for(const r of n.children)im(r,e,!1);t&&n.removeFromParent()}function ur(s,e,t=!0){return tw(s,e,t)}function*ku(s,e,t=!1,i=999,n=0){if(s?.userData.components&&!(n>i)){for(const o of s.userData.components)e&&o?.isComponent===!0&&o instanceof e?yield o:yield o;if(t===!0)for(const o of s.children)yield*ku(o,e,!0,i,n+1)}}function tw(s,e,t,i=0){if(s){if(s.isObject3D,i>1e3){console.warn("Failed to iterate components: too many levels");return}if(s.userData?.components)for(let n=0;n<s.userData.components.length;n++){const o=s.userData.components[n];if(o?.isComponent===!0){const r=e(o);if(r!==void 0)return r}}if(t&&s.children){const n=i+1;for(let o=0;o<s.children.length;o++){const r=s.children[o];if(!r)continue;const a=tw(r,e,t,n);if(a!==void 0)return a}}}}function ho(s,e){if("isAssetReference"in s)return s.instantiate(e??void 0);let t=null;e!=null&&(e.x!==void 0?(t=new gn,t.position=e):t=e);let i=U.Current;t?.context&&(i=t.context),wd&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new xt(Date.now()));const n=[],o={},r={},a=iw(i,s,t,n,o,r);a&&(PP(a,o),CP(r,o)),wd&&($d(s,!0),$d(a,!0));const l={};if(t?.components!==!1){for(const h in n){const d=n[h],u=d.guid;t&&t.idProvider&&(d.guid=t.idProvider.generateUUID(),l[u]=d.guid,wd&&console.log(d.name,d.guid)),Cu(d,i),d.__internalNewInstanceCreated&&d.__internalNewInstanceCreated()}for(const h in n){const d=n[h];d.resolveGuids&&d.resolveGuids(l),d.enabled!==!1&&(d.enabled=!0)}eu(i)}return a}function iw(s,e,t,i,n,o){if(!e||e[pi])return null;const r=e.userData;e.userData={};const a=e.children;e.children=[];const l=e.clone(!1);if(Ou(l),e.userData=r,e.children=a,n[e.uuid]={original:e,clone:l},sr&&console.log("ADD",e,l),e.type==="SkinnedMesh"&&(o[e.uuid]={original:e,clone:l}),t?.visible!==void 0&&(l.visible=t.visible),t?.idProvider){l.uuid=t.idProvider.generateUUID();const d=l;d&&(d.guid=l.uuid)}e.animations&&e.animations.length>0&&(l.animations=[...e.animations]);const h=e.parent;if(h&&h.add(l),t?.position)if(Array.isArray(t.position)){const d=new c.Vector3;d.fromArray(t.position),l.worldPosition=d}else l.worldPosition=t.position;else l.position.copy(e.position);if(t?.rotation){if(t.rotation instanceof c.Quaternion)l.worldQuaternion=t.rotation;else if(t.rotation instanceof c.Euler)l.worldQuaternion=ei().setFromEuler(t.rotation);else if(Array.isArray(t.rotation)){const d=new c.Euler;d.fromArray(t.rotation),l.worldQuaternion=ei().setFromEuler(d)}}else l.quaternion.copy(e.quaternion);if(t?.scale)if(Array.isArray(t.scale)){const d=new c.Vector3;d.fromArray(t.scale),t.scale=d}else l.scale.copy(t.scale);else l.scale.copy(e.scale);if(t?.parent&&t.parent!=="scene"){let d=null;if(typeof t.parent=="string"?d=Ma(t.parent,s.scene,!0):d=t.parent,d){const u=t.keepWorldPosition===!0?d.attach:d.add;u?u.call(d,l):console.error("Invalid parent object",d,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(const[d,u]of Object.entries(e.userData))d!=="components"&&(l.userData[d]=u);if(e.userData?.components){const d=e.userData.components,u=[];l.userData.components=u;for(let p=0;p<d.length;p++){const m=d[p],y=new m.constructor;SP(m,y),m[ec]!==void 0&&(y[ec]=m[ec]),u.push(y),y.gameObject=l,i.push(y),n[m.guid]={original:m,clone:y},gu.dispatchComponentLifecycleEvent("component-added",y)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0,t.visible=void 0);for(const d in e.children){const u=e.children[d],p=iw(s,u,t,i,n,o);p&&(n[p.uuid]={original:u,clone:p},l.add(p))}return l}function SP(s,e,t){Ra(e,s,void 0,{})}function CP(s,e){for(const t in s){const i=s[t],n=i.original,o=n.skeleton,r=i.clone;if(!o){console.warn("Skinned mesh has no skeleton?",i);continue}const a=o.bones,l=r.skeleton.clone();r.skeleton=l,r.bindMatrix.clone().copy(n.bindMatrix),r.bindMatrixInverse.copy(n.bindMatrixInverse);const h=[];l.bones=h;for(let d=0;d<a.length;d++){const u=a[d],m=e[u.uuid].clone;h.push(m)}}for(const t in s){const i=s[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function PP(s,e){for(const t in e){const n=e[t].clone;if(n?.isObject3D&&n?.userData?.components)for(let o=0;o<n.userData.components.length;o++){const r=n.userData.components[o],a=Object.entries(r);for(const[l,h]of a)if(Array.isArray(h)){const d=[];r[l]=d;for(let u=0;u<h.length;u++){const p=h[u];if(typeof p!="object"){d.push(p);continue}const m=X_(r,l,p,e);m!==void 0?(sr&&console.log("Found new instance for",l,p,"->",m),d.push(m)):(sr&&console.warn("Could not find new instance for",l,p),d.push(p))}}else if(typeof h=="object"){const d=X_(r,l,h,e);d!==void 0?r[l]=d:sr&&console.warn("Could not find new instance for",l,h)}}}}function X_(s,e,t,i){if(t!=null)if(t.isComponent===!0){const n=t.gameObject;if(n){const o=n.uuid,r=i[o]?.clone;if(!r){sr&&console.log("reference did not change",e,s,t);return}const a=n.userData.components.indexOf(t);if(a>=0&&r.isObject3D)return sr&&console.log(e,o),r.userData.components[a];console.warn("could not find component",e,t)}}else if(t.isObject3D===!0){if(e==="gameObject")return;const n=t;if(n){const o=n.uuid,r=i[o]?.clone;if(r)return sr&&console.log(e,"old",t,"new",r),r}}else{if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone();if(t.isColor===!0)return t.clone();if(t.isEventList===!0)return t.__internalOnInstantiate(i)}}function oc(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const nm=x("debugnewscripts"),OP=x("debughierarchy"),Ce=[];function MP(){return Ce.length>0}function eu(s){if(nm&&console.log("Register new components",s.new_scripts.length,[...s.new_scripts],s.alias?"element: "+s.alias:s.hash,s),s.new_scripts_pre_setup_callbacks.length>0){for(const e of s.new_scripts_pre_setup_callbacks)e&&e();s.new_scripts_pre_setup_callbacks.length=0}if(!(s.new_scripts.length<=0)){Ce.length=0,s.new_scripts.length>0&&Ce.push(...s.new_scripts),s.new_scripts.length=0;for(let e=0;e<Ce.length;e++)try{const t=Ce[e];if(t.isComponent!==!0){(A()||nm)&&console.error(`Registered script is not a Needle Engine component.
|
|
881
881
|
The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
|
|
882
882
|
`,t),Ce.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
|
|
@@ -1651,4 +1651,4 @@ Needle Engine: Begin loading `+i+`
|
|
|
1651
1651
|
Needle Engine: finished loading `+i+`
|
|
1652
1652
|
`,t,`Aborted? ${u.signal.aborted}`),u.signal.aborted){console.log("Loading finished but aborted...");return}if(this._loadId!==i){console.log("Load id changed during loading process");return}this._loadingProgress01=1,r&&y&&this._loadingView?.onLoadingUpdate(1,"creating scene"),this._didFullyLoad=!0,this.classList.remove("loading"),this.classList.add("loading-finished"),this.dispatchEvent(new CustomEvent("loadfinished",{detail:{context:this._context,src:n,loadedFiles:a}}))}applyAttributes(){const e=this.getOrCreateContext();if(e.renderer){const o=T0(this.toneMapping);o!==void 0&&(e.renderer.toneMapping=o);const r=this.getAttribute("tone-mapping-exposure");if(r!=null){const a=parseFloat(r);isNaN(a)||(e.renderer.toneMappingExposure=a)}}const t=this.getAttribute("background-blurriness");if(t!=null){const o=parseFloat(t);isNaN(o)||(e.scene.backgroundBlurriness=o)}const i=this.getAttribute("environment-intensity");if(i!=null){const o=parseFloat(i);isNaN(o)||(e.scene.environmentIntensity=o)}const n=this.getAttribute("background-color");if(e.renderer)if(typeof n=="string"&&n.length>0){const o=te.fromColorRepresentation(n);be&&console.debug("<needle-engine> background-color changed, str:",n,"→",o),e.renderer.setClearColor(o,o.alpha),e.scene.background=null}else this.getAttribute("background-image")&&this.setAttribute("background-image",this.getAttribute("background-image"))}onXRSessionStarted=()=>{const e=this.getOrCreateContext(),t=e.xrSessionMode;t==="immersive-ar"?this.onEnterAR(e.xrSession):t==="immersive-vr"&&this.onEnterVR(e.xrSession),e.xrSession?.addEventListener("end",()=>{this.dispatchEvent(new CustomEvent("xr-session-ended",{detail:{session:e.xrSession,context:this._context,sessionMode:t}})),t==="immersive-ar"?this.onExitAR(e.xrSession):t==="immersive-vr"&&this.onExitVR(e.xrSession)})};onReady=()=>this._loadingView?.onLoadingFinished();onError=()=>this._loadingView?.setMessage("Loading failed!");getSourceFiles(){const e=this.getAttribute("src");if(!e)return[];let t;Array.isArray(e)?t=e:e.startsWith("[")&&e.endsWith("]")?t=JSON.parse(e):e.includes(",")?t=e.split(","):t=[e];for(let i=t.length-1;i>=0;i--){const n=t[i];(n==="null"||n==="undefined"||n?.length<=0)&&t.splice(i,1)}return t}checkIfSourceHasChanged(e,t){if(e?.length!==t?.length||e==null&&t!==null||e!==null&&t==null)return!0;if(e!==null&&t!==null){for(let i=0;i<e?.length;i++)if(e[i]!==t[i])return!0}return!1}_previouslyRegisteredMap=new Map;ensureLoadStartIsRegistered(){const e=this.getAttribute("loadstart");e&&this.registerEventFromAttribute("loadstart",e)}registerEventFromAttribute(e,t){const i=this._previouslyRegisteredMap.get(e);if(i&&(this._previouslyRegisteredMap.delete(e),this.removeEventListener(e,i)),typeof t=="string"&&t.length>0)try{const n=(0,eval)(t);typeof n=="function"&&(this._previouslyRegisteredMap.set(e,n),this.addEventListener(e,o=>n?.call(globalThis,this.getOrCreateContext(),o)))}catch(n){console.error("Error registering event "+e+'="'+t+`" failed with the following error:
|
|
1653
1653
|
`,n)}}setPublicKey(){no&&no.length>0&&this.setAttribute("public-key",no)}setVersion(){ii.length>0&&this.setAttribute("version",ii)}getAROverlayContainer(){return this._overlay_ar.createOverlayContainer(this)}getVROverlayContainer(){for(let e=0;e<this.children.length;e++){const t=this.children[e];if(t.classList.contains("vr"))return t}return null}onEnterAR(e){const t=this.getOrCreateContext();this.onSetupAR();const i=this.getAROverlayContainer();this._overlay_ar.onBegin(t,i,e),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:e,context:t,htmlContainer:this._overlay_ar?.ARContainer}}))}onExitAR(e){const t=this.getOrCreateContext();this._overlay_ar.onEnd(t),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:e,context:t,htmlContainer:this._overlay_ar?.ARContainer}}))}onEnterVR(e){const t=this.getOrCreateContext();this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:e,context:t}}))}onExitVR(e){const t=this.getOrCreateContext();this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:e,context:t}}))}onSetupAR(){this.classList.add(Il),this.classList.remove(jl);const e=this.getAROverlayContainer();be&&console.warn("onSetupAR:",e),e&&(e.classList.add(Il),e.classList.remove(jl)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Gx))}onSetupVR(){this.classList.remove(Il),this.classList.remove(jl),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Hx))}onSetupDesktop(){this.classList.remove(Il),this.classList.add(jl);const e=this.getAROverlayContainer();e&&(e.classList.remove(Il),e.classList.add(jl)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,qx))}setupElementsForMode(e,t,i=null){if(e===this._context?.renderer?.domElement||e.id==="VRButton"||e.id==="ARButton")return;if(e.classList.contains(t))e.style.visibility="visible",e.style.display==="none"&&(e.style.display="block");else for(const o of uA)e.classList.contains(o)&&(e.style.visibility="hidden",e.style.display="none")}foreachHtmlElement(e){for(let t=0;t<this.children.length;t++){const i=this.children[t];i.style&&e(i)}}onBeforeBeginLoading(){const e=this.getAttribute("dracoDecoderPath");e&&(be&&console.log("using custom draco decoder path",e),Bb(e));const t=this.getAttribute("dracoDecoderType");t&&(be&&console.log("using custom draco decoder type",t),Fb(t));const i=this.getAttribute("ktx2DecoderPath");i&&(be&&console.log("using custom ktx2 decoder path",i),Ub(i))}setAttribute(e,t){super.setAttribute(e,typeof t=="string"?t:String(t))}getAttribute(e){return super.getAttribute(e)}addEventListener(e,t,i){return super.addEventListener(e,t,i)}}function pA(s){if(s.startsWith("blob:"))return"blob";const e=s.split("/");let t=e[e.length-1];const i=t.indexOf("?");i>0&&(t=t.substring(0,i));const n=t.indexOf("=");n>0&&(t=t.substring(n));const o=t.split(".").pop(),a=o?["glb","gltf","usdz","usd","fbx","obj","mtl"].indexOf(o.toLowerCase()):-1;if(o&&a>=0&&(t=t.substring(0,t.length-o.length-1)),t=decodeURIComponent(t),t.length>3){let l="",h=!1;const d=["(",")","[","]","{","}",":",";",",",".","!","?"];for(let u=0;u<t.length;u++){let p=t[u];(p==="_"||p==="-")&&(p=" "),!(p===" "&&l.length<=0||d.includes(p)||(l.length===0&&(p=p.toUpperCase()),h&&p===" "))&&(h&&(p=p.toUpperCase()),h=!1,l+=p,p===" "&&(h=!0))}return A()&&t!==l&&console.debug('Generated display name: "'+t+'" → "'+l+'"'),l.trim()}return t}function mA(s){bu(e=>{const t=s.getAttribute("loading-blur");if(t!==null&&t!=="0"&&e.domElement===s){const i=e.lodsManager.manager?.awaitLoading({frames:5,signal:AbortSignal.timeout(1e4),maxPromisesPerObject:1}).catch(r=>{});let n="20px";t.endsWith("px")&&(n=t);const o=170;if(e.scene.background===null){const r=s,a=e.renderer.domElement,l=a.style.filter,h=a.style.overflow;a.style.filter+=`blur(${n})`,r.style.overflow="hidden",i?.then(()=>{const d=a.animate([{filter:"blur(0px)"}],{duration:o,easing:"ease-in"});d.onfinish=()=>{a.style.filter=l,r.style.overflow=h}})}else{const r=document.createElement("div");e.domElement.prepend(r),r.style.cssText="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; pointer-events: none",r.style.backdropFilter=`blur(${n})`,i?.then(()=>{const a=r.animate([{backdropFilter:"blur(0px)",opacity:0}],{duration:o,easing:"ease-in"});a.onfinish=()=>{r.remove()}})}}},{once:!0})}const gA=Object.freeze(Object.defineProperty({__proto__:null,NeedleEngineWebComponent:qy},Symbol.toStringTag,{value:"Module"}));function yA(){typeof window>"u"||(window.customElements.get("needle-engine")||window.customElements.define("needle-engine",qy),window.customElements.get("needle-button")||window.customElements.define("needle-button",Wx),window.customElements.get("needle-logo-element")||window.customElements.define("needle-logo-element",Su),window.customElements.get("needle-menu")||window.customElements.define("needle-menu",wc))}let av=!1;function _A(){av||(av=!0,yA(),ak(),R0(),mM(),aA(),xP(),lA(),qT(),tA(),setTimeout(XT,1e3),IO(),AO(),XO(),FO())}const Ee=x("debugphysics"),Rp=x("debugcolliderplacement"),Tp=x("debugcollisions"),bA=x("showcolliders"),md=x("debugraycasts"),Kt=Symbol("needle component"),gt=Symbol("physics body"),lv=Symbol("rigidbody");globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0;Ee&&console.log("Use Rapier",!0,globalThis.NEEDLE_USE_RAPIER);ce.registerCallback(ae.ContextCreationStart,s=>{Ee&&console.log("Register rapier physics backend"),s.context.physics.engine=new Oa(s.context)});class Oa{debugRenderColliders=!1;debugRenderRaycasts=!1;removeBody(e){if(Ee&&console.log("REMOVE BODY",e?.name,e[gt]),!e)return;this.validate();const t=e[gt];if(e[gt]=null,t&&this.world){const i=this.objects.findIndex(n=>n===e);if(i>=0){const n=this.bodies[i];if(this.bodies.splice(i,1),this.objects.splice(i,1),n instanceof T.RAPIER_PHYSICS.MODULE.Collider){const o=n;this.world?.removeCollider(o,!0);const r=o.parent();r&&r.numColliders()<=0&&(r[Kt]||this.world?.removeRigidBody(r))}else n instanceof T.RAPIER_PHYSICS.MODULE.RigidBody&&(n.numColliders()<=0?this.world?.removeRigidBody(n):A()&&(n.did_log_removing||setTimeout(()=>{n.numColliders()>0&&(n.did_log_removing=!0,console.warn("RapierPhysics: removing rigidbody with colliders from the physics world is not possible right now, please remove the colliders first"))},1)))}}}setColliderEnabled(e,t){const i=e[gt];return i?(i.setEnabled(t),Ee&&console.log("SET COLLIDER ENABLED",e.name,t),!0):!1}updateBody(e,t,i){if(this.validate(),!!this.enabled&&!(e.destroyed||!e.gameObject)&&!(!t&&!i))if(e.isCollider===!0)console.warn("TODO: implement updating collider position");else{const n=e,o=n[gt];o&&this.syncPhysicsBody(n.gameObject,o,t,i)}}updateProperties(e){if(this.validate(),e.isCollider){const t=e,i=t[gt];i&&(this.internalUpdateColliderProperties(t,i),t.sharedMaterial&&this.updatePhysicsMaterial(t))}else{const t=e,i=this.internal_getRigidbody(t);i&&this.internalUpdateRigidbodyProperties(t,i)}}addForce(e,t,i){this.validate();const n=this.internal_getRigidbody(e);n?n.addForce(t,i):this._isInitialized&&console.warn("Physics Body doesn't exist: can not apply force (does your object with the Rigidbody have a collider?)")}addImpulse(e,t,i){this.validate();const n=this.internal_getRigidbody(e);n?n.applyImpulse(t,i):this._isInitialized&&console.warn("Physics Body doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)")}getLinearVelocity(e){this.validate();const t=this.internal_getRigidbody(e);return t?t.linvel():null}getAngularVelocity(e){this.validate();const t=this.internal_getRigidbody(e);return t?t.angvel():null}resetForces(e,t){this.validate(),this.internal_getRigidbody(e)?.resetForces(t)}resetTorques(e,t){this.validate(),this.internal_getRigidbody(e)?.resetTorques(t)}applyImpulse(e,t,i){this.validate();const n=this.internal_getRigidbody(e);n?n.applyImpulse(t,i):this._isInitialized&&console.warn("Rigidbody doesn't exist: can not apply impulse (does your object with the Rigidbody have a collider?)")}wakeup(e){this.validate();const t=this.internal_getRigidbody(e);t?t.wakeUp():this._isInitialized&&console.warn("Rigidbody doesn't exist: can not wake up (does your object with the Rigidbody have a collider?)")}isSleeping(e){return this.validate(),this.internal_getRigidbody(e)?.isSleeping()}setAngularVelocity(e,t,i){this.validate();const n=this.internal_getRigidbody(e);n?n.setAngvel(t,i):this._isInitialized&&console.warn("Rigidbody doesn't exist: can not set angular velocity (does your object with the Rigidbody have a collider?)")}setLinearVelocity(e,t,i){this.validate();const n=this.internal_getRigidbody(e);n?n.setLinvel(t,i):this._isInitialized&&console.warn("Rigidbody doesn't exist: can not set linear velocity (does your object with the Rigidbody have a collider?)")}context;_initializePromise;_isInitialized=!1;constructor(e){this.context=e}get isInitialized(){return this._isInitialized}async initialize(){return this._initializePromise||(this._initializePromise=this.internalInitialization()),this._initializePromise}async internalInitialization(){return x("__nophysics")?(console.warn("Physics are disabled"),!1):(Ee&&console.log("Initialize rapier physics engine"),this._hasCreatedWorld?(console.error("Invalid call to create physics world: world is already created"),!0):(this._hasCreatedWorld=!0,T.RAPIER_PHYSICS.MAYBEMODULE==null&&(Ee&&console.trace("Loading rapier physics engine"),await(await T.RAPIER_PHYSICS.load()).init()),Ee&&console.log("Physics engine initialized, creating world..."),this._world=new T.RAPIER_PHYSICS.MODULE.World(this._gravity),this.rapierRay=new T.RAPIER_PHYSICS.MODULE.Ray({x:0,y:0,z:0},{x:0,y:0,z:1}),this.enabled=!0,this._isInitialized=!0,Ee&&console.log("Physics world created"),!0))}validate(){this._isInitialized||Ee&&(this._lastWarnTime=this._lastWarnTime??0,Date.now()-this._lastWarnTime>1e3&&(this._lastWarnTime=Date.now(),console.warn("Physics engine is not initialized")))}rapierRay;raycastVectorsBuffer=new _i(()=>new c.Vector3,10);raycast(e,t,i){if(!this._isInitialized)return console.log("Physics engine is not initialized"),null;let n=i?.maxDistance,o=i?.solid;n===void 0&&(n=1/0),o===void 0&&(o=!0);const r=this.getPhysicsRay(this.rapierRay,e,t);if(!r)return null;(this.debugRenderRaycasts||md)&&B.DrawRay(r.origin,r.dir,255,1);const a=this.world?.castRay(r,n,o,i?.queryFilterFlags,i?.filterGroups,void 0,void 0,l=>{const h=l[Kt];return i?.filterPredicate?i.filterPredicate(h):i?.useIgnoreRaycastLayer!==!1?!h?.gameObject.layers.isEnabled(2):!0});if(a){const l=r.pointAt(a.timeOfImpact),h=this.raycastVectorsBuffer.get();return h.set(l.x,l.y,l.z),{point:h,collider:a.collider[Kt]}}return null}raycastAndGetNormal(e,t,i){if(!this._isInitialized)return null;let n=i?.maxDistance,o=i?.solid;n===void 0&&(n=1/0),o===void 0&&(o=!0);const r=this.getPhysicsRay(this.rapierRay,e,t);if(!r)return null;(this.debugRenderRaycasts||md)&&B.DrawRay(r.origin,r.dir,255,1);const a=this.world?.castRayAndGetNormal(r,n,o,i?.queryFilterFlags,i?.filterGroups,void 0,void 0,l=>{const h=l[Kt];return i?.filterPredicate?i.filterPredicate(h):i?.useIgnoreRaycastLayer!==!1?!h?.gameObject.layers.isEnabled(2):!0});if(a){const l=r.pointAt(a.timeOfImpact),h=a.normal,d=this.raycastVectorsBuffer.get(),u=this.raycastVectorsBuffer.get();return d.set(l.x,l.y,l.z),u.set(h.x,h.y,h.z),{point:d,normal:u,collider:a.collider[Kt]}}return null}getPhysicsRay(e,t,i){const n=this.context?.mainCamera;if(t===void 0){const a=this.context?.input.getPointerPosition(0);if(a)t=a;else return null}if(t.z===void 0){if(!n)return console.error("Can not perform raycast from 2d point - no main camera found"),null;const a=this.raycastVectorsBuffer.get();a.x=t.x,a.y=t.y,a.z=0,(a.x>1||a.y>1||a.y<-1||a.x<-1)&&(Ee&&console.warn("Converting screenspace to raycast space",a),this.context?.input.convertScreenspaceToRaycastSpace(a)),a.unproject(n),t=a}const o=t;e.origin.x=o.x,e.origin.y=o.y,e.origin.z=o.z;const r=this.raycastVectorsBuffer.get();if(i)r.set(i.x,i.y,i.z);else{if(!n)return console.error("Can not perform raycast - no camera found"),null;r.set(e.origin.x,e.origin.y,e.origin.z);const a=Y(n);r.sub(a)}return r.normalize(),e.dir.x=r.x,e.dir.y=r.y,e.dir.z=r.z,e}rapierSphere=null;rapierBox=null;rapierColliderArray=[];rapierIdentityRotation={x:0,y:0,z:0,w:1};rapierForwardVector={x:0,y:0,z:1};sphereOverlap(e,t){return this.rapierSphere??=new T.RAPIER_PHYSICS.MODULE.Ball(t),this.rapierSphere.radius=t,(this.debugRenderRaycasts||md)&&B.DrawWireSphere(e,t,3359999,1),this.shapeOverlap(e,this.rapierIdentityRotation,this.rapierSphere)}boxOverlap(e,t,i=null){return i===null&&(i=this.rapierIdentityRotation),this.rapierBox??=new T.RAPIER_PHYSICS.MODULE.Cuboid(1,1,1),this.rapierBox.halfExtents.x=t.x*.5,this.rapierBox.halfExtents.y=t.y*.5,this.rapierBox.halfExtents.z=t.z*.5,(this.debugRenderRaycasts||md)&&B.DrawWireBox(e,t,3359999,1,!0,i),this.shapeOverlap(e,i,this.rapierBox)}shapeOverlap(e,t,i){return this.rapierColliderArray.length=0,this._isInitialized?this.world?(this.world.intersectionsWithShape(e,t,i,n=>{const o=n[Kt],r=new Xv(o.gameObject,o);return this.rapierColliderArray.push(r),!0},void 0,void 0,void 0,void 0,n=>n.isSensor()?!1:n[Kt].gameObject.layers.isEnabled(2)==!1),this.rapierColliderArray):this.rapierColliderArray:this.rapierColliderArray}enabled=!1;get world(){return this._world}_tempPosition=new c.Vector3;_tempQuaternion=new c.Quaternion;_tempScale=new c.Vector3;_tempMatrix=new c.Matrix4;static _didLoadPhysicsEngine=!1;_isUpdatingPhysicsWorld=!1;get isUpdating(){return this._isUpdatingPhysicsWorld}_world;_hasCreatedWorld=!1;eventQueue;collisionHandler;objects=[];bodies=[];_meshCache=new Map;_gravity={x:0,y:-9.81,z:0};get gravity(){return this.world?.gravity??this._gravity}set gravity(e){this.world?this.world.gravity=e:this._gravity=e}clearCaches(){this._meshCache.clear(),this.eventQueue?.raw&&this.eventQueue?.free(),this.world?.bodies&&this.world?.free()}async addBoxCollider(e,t){if(this._isInitialized||await this.initialize(),!e.activeAndEnabled)return;if(!this.enabled){Ee&&console.warn("Physics are disabled");return}const i=e.gameObject,n=je(i,this._tempPosition).multiply(t);n.multiplyScalar(.5),n.x<0&&(n.x=Math.abs(n.x)),n.y<0&&(n.y=Math.abs(n.y)),n.z<0&&(n.z=Math.abs(n.z));const o=1e-7;n.x<o&&(n.x=o),n.y<o&&(n.y=o),n.z<o&&(n.z=o);const r=T.RAPIER_PHYSICS.MODULE.ColliderDesc.cuboid(n.x,n.y,n.z);this.createCollider(e,r)}async addSphereCollider(e){if(this._isInitialized||await this.initialize(),!e.activeAndEnabled)return;if(!this.enabled){Ee&&console.warn("Physics are disabled");return}const t=T.RAPIER_PHYSICS.MODULE.ColliderDesc.ball(.5);this.createCollider(e,t),this.updateProperties(e)}async addCapsuleCollider(e,t,i){if(this._isInitialized||await this.initialize(),!e.activeAndEnabled)return;if(!this.enabled){Ee&&console.warn("Physics are disabled");return}const o=e.gameObject.worldScale;o.x=Math.abs(o.x),o.y=Math.abs(o.y);const r=i*o.x;t=Math.max(t,r);const a=I.clamp(t*.5*o.y-i*o.x,0,Number.MAX_SAFE_INTEGER),l=T.RAPIER_PHYSICS.MODULE.ColliderDesc.capsule(a,r);this.createCollider(e,l)}async addMeshCollider(e,t,i,n){let o=t.geometry;if(!o){Ee&&console.warn("Missing mesh geometry",t.name);return}o.index?.array?.length||(console.warn(`Your MeshCollider is missing vertices or indices in the assined mesh "${t.name}". Consider providing an indexed geometry.`),o=X.mergeVertices(o));let r=null;const a=o.getAttribute("position");if(a instanceof c.InterleavedBufferAttribute){const u=a.count;r=new Float32Array(u*3);for(let p=0;p<u;p++){const m=a.getX(p),y=a.getY(p),_=a.getZ(p);r[p*3]=m,r[p*3+1]=y,r[p*3+2]=_}}else r=a.array;if(await this.initialize(),!this.enabled){Ee&&console.warn("Physics are disabled");return}if(!e.activeAndEnabled)return;const l=o.index?.array,h=e.gameObject.worldScale.clone();if(n&&h.multiply(n),Math.abs(h.x-1)>1e-4||Math.abs(h.y-1)>1e-4||Math.abs(h.z-1)>1e-4){const u=`${o.uuid}_${h.x}_${h.y}_${h.z}_${i}`;if(this._meshCache.has(u))Ee&&console.warn("Use cached mesh collider"),r=this._meshCache.get(u);else{(Ee||A())&&console.debug(`[Performance] Your MeshCollider "${e.name}" is scaled: consider applying the scale to the collider mesh instead (${h.x}, ${h.y}, ${h.z})`);const p=new Float32Array(r.length);for(let m=0;m<r.length;m+=3)p[m]=r[m]*h.x,p[m+1]=r[m+1]*h.y,p[m+2]=r[m+2]*h.z;r=p,this._meshCache.set(u,p)}}const d=i?T.RAPIER_PHYSICS.MODULE.ColliderDesc.convexHull(r):T.RAPIER_PHYSICS.MODULE.ColliderDesc.trimesh(r,l);d&&this.createCollider(e,d)}updatePhysicsMaterial(e){if(!e)return;const t=e.sharedMaterial,i=e[gt];if(i&&t){if(t.bounciness!==void 0&&i.setRestitution(t.bounciness),t.bounceCombine!==void 0)switch(t.bounceCombine){case st.Average:i.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case st.Maximum:i.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case st.Minimum:i.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case st.Multiply:i.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}if(t.dynamicFriction!==void 0&&i.setFriction(t.dynamicFriction),t.frictionCombine!==void 0)switch(t.frictionCombine){case st.Average:i.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case st.Maximum:i.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case st.Minimum:i.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case st.Multiply:i.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}}}getBody(e){return e?e[gt]:null}getComponent(e){return e?e[Kt]:null}createCollider(e,t){if(!this.world)throw new Error("Physics world not initialized");const i=this._tempMatrix;let n;e.attachedRigidbody?n=this.getRigidbody(e,this._tempMatrix):(Ee&&console.log("Create collider without rigidbody",e.name),i.makeRotationFromQuaternion(pe(e.gameObject)),i.setPosition(Y(e.gameObject))),i.decompose(this._tempPosition,this._tempQuaternion,this._tempScale),this.tryApplyCenter(e,this._tempPosition),t.setTranslation(this._tempPosition.x,this._tempPosition.y,this._tempPosition.z),t.setRotation(this._tempQuaternion),t.setSensor(e.isTrigger);const o=e.sharedMaterial;if(o){if(o.bounciness!==void 0&&t.setRestitution(o.bounciness),o.bounceCombine!==void 0)switch(o.bounceCombine){case st.Average:t.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case st.Maximum:t.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case st.Minimum:t.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case st.Multiply:t.setRestitutionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}if(o.dynamicFriction!==void 0&&t.setFriction(o.dynamicFriction),o.frictionCombine!==void 0)switch(o.frictionCombine){case st.Average:t.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Average);break;case st.Maximum:t.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Max);break;case st.Minimum:t.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Min);break;case st.Multiply:t.setFrictionCombineRule(T.RAPIER_PHYSICS.MODULE.CoefficientCombineRule.Multiply);break}}e.attachedRigidbody?.autoMass===!1&&(t.setDensity(1e-6),t.setMass(1e-6));try{const r=this.world.createCollider(t,n);return r[Kt]=e,e[gt]=r,r.setActiveEvents(T.RAPIER_PHYSICS.MODULE.ActiveEvents.COLLISION_EVENTS),r.setActiveCollisionTypes(T.RAPIER_PHYSICS.MODULE.ActiveCollisionTypes.ALL),this.objects.push(e),this.bodies.push(r),this.updateColliderCollisionGroups(e),Ee&&console.log("Created collider",e.name,r),r}catch(r){return console.error('Error creating collider "'+e.name+`"
|
|
1654
|
-
Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[gt],i=e.membership;let n=0;if(i==null)n=65535;else for(let a=0;a<i.length;a++){const l=i[a];l>31?console.error(`Rapier only supports 32 layers, layer ${l} is not supported`):n|=1<<Math.floor(l)}const o=e.filter;let r=0;if(o==null)r=65535;else for(let a=0;a<o.length;a++){const l=o[a];l>31?console.error(`Rapier only supports 32 layers, layer ${l} is not supported`):r|=1<<Math.floor(l)}t.setCollisionGroups(n<<16|r)}getRigidbody(e,t){if(!this.world)throw new Error("Physics world not initialized");let i=null;if(e.attachedRigidbody){const n=e.attachedRigidbody;if(i=n[gt],!i){const o=n.isKinematic&&!Rp;Ee&&console.log("Create rigidbody",o);const r=o?T.RAPIER_PHYSICS.MODULE.RigidBodyDesc.kinematicPositionBased():T.RAPIER_PHYSICS.MODULE.RigidBodyDesc.dynamic(),a=Y(e.attachedRigidbody.gameObject);r.setTranslation(a.x,a.y,a.z),r.setRotation(pe(e.attachedRigidbody.gameObject)),r.centerOfMass=new T.RAPIER_PHYSICS.MODULE.Vector3(n.centerOfMass.x,n.centerOfMass.y,n.centerOfMass.z),i=this.world.createRigidBody(r),this.bodies.push(i),this.objects.push(n)}i[Kt]=n,n[gt]=i,this.internalUpdateRigidbodyProperties(n,i),this.getRigidbodyRelativeMatrix(e.gameObject,n.gameObject,t),e[lv]=i}else{const n=T.RAPIER_PHYSICS.MODULE.RigidBodyDesc.kinematicPositionBased(),o=Y(e.gameObject);n.setTranslation(o.x,o.y,o.z),n.setRotation(pe(e.gameObject)),i=this.world.createRigidBody(n),t.identity(),i[Kt]=null}return i}internal_getRigidbody(e){return e.isCollider===!0?e[lv]:e[gt]}internalUpdateColliderProperties(e,t){const i=t.shape;let n=!1;switch(i.type){case T.RAPIER_PHYSICS.MODULE.ShapeType.Ball:{const p=i,m=e,y=e.gameObject,_=je(y,this._tempPosition),g=Math.abs(m.radius*_.x);n=p.radius!==g,p.radius=g,n&&t.setShape(p);break}case T.RAPIER_PHYSICS.MODULE.ShapeType.Cuboid:const o=i,r=e,a=e.gameObject,l=je(a,this._tempPosition),h=Math.abs(r.size.x*.5*l.x),d=Math.abs(r.size.y*.5*l.y),u=Math.abs(r.size.z*.5*l.z);n=o.halfExtents.x!==h||o.halfExtents.y!==d||o.halfExtents.z!==u,o.halfExtents.x=h,o.halfExtents.y=d,o.halfExtents.z=u,n&&t.setShape(o);break}if(n){const o=e.attachedRigidbody;o?.autoMass&&this.getBody(o)?.recomputeMassPropertiesFromColliders()}this.updateColliderCollisionGroups(e),e.isTrigger!==t.isSensor()&&t.setSensor(e.isTrigger)}internalUpdateRigidbodyProperties(e,t){if(t.enableCcd(e.collisionDetectionMode!==Au.Discrete),t.setLinearDamping(e.drag),t.setAngularDamping(e.angularDrag),t.setGravityScale(e.useGravity?e.gravityScale:0,!0),e.dominanceGroup<=127&&e.dominanceGroup>=-127?t.setDominanceGroup(Math.floor(e.dominanceGroup)):t.setDominanceGroup(0),e.autoMass){t.setAdditionalMass(0,!1);for(let i=0;i<t.numColliders();i++)t.collider(i).setDensity(1);t.recomputeMassPropertiesFromColliders()}else{t.setAdditionalMass(e.mass,!1);for(let i=0;i<t.numColliders();i++)t.collider(i).setDensity(1e-7);t.recomputeMassPropertiesFromColliders()}t.setEnabledRotations(!e.lockRotationX,!e.lockRotationY,!e.lockRotationZ,!1),t.setEnabledTranslations(!e.lockPositionX,!e.lockPositionY,!e.lockPositionZ,!1),e.isKinematic?t.setBodyType(T.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicPositionBased,!1):t.setBodyType(T.RAPIER_PHYSICS.MODULE.RigidBodyType.Dynamic,!1)}lines;disabledLines;step(e){if(this.world&&this.enabled){if(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new T.RAPIER_PHYSICS.MODULE.EventQueue(!1)),e===void 0||e<=0){this._isUpdatingPhysicsWorld=!1;return}else if(e!==void 0){const t=I.lerp(this.world.timestep,e,.8);this.world.timestep=t}try{this.world.step(this.eventQueue)}catch(t){console.warn("Error running physics step",{timestep:this.world.timestep},t)}this._isUpdatingPhysicsWorld=!1}}postStep(){this.world&&this.enabled&&(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new vA(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()),this.updateDebugRendering(this.world))}updateDebugRendering(e){if(Ee||Rp||bA||this.debugRenderColliders===!0){if(!this.lines){const n=new c.LineBasicMaterial({color:7855479,fog:!1}),o=new c.BufferGeometry;this.lines=new c.LineSegments(o,n),this.lines.layers.disableAll(),this.lines.layers.enable(2)}if(!this.disabledLines){const n=new c.LineBasicMaterial({color:14514039,fog:!1}),o=new c.BufferGeometry;this.disabledLines=new c.LineSegments(o,n),this.disabledLines.layers.disableAll(),this.disabledLines.layers.enable(2)}this.lines.parent!==this.context?.scene&&this.context?.scene.add(this.lines),this.disabledLines.parent!==this.context?.scene&&this.context?.scene.add(this.disabledLines);const t=e.debugRender(void 0,n=>n.isEnabled());this.lines.geometry.setAttribute("position",new c.BufferAttribute(t.vertices,3)),this.lines.geometry.setAttribute("color",new c.BufferAttribute(t.colors,4));const i=e.debugRender(void 0,n=>!n.isEnabled());this.disabledLines.geometry.setAttribute("position",new c.BufferAttribute(i.vertices,3)),this.disabledLines.geometry.setAttribute("color",new c.BufferAttribute(i.colors,4)),this.disabledLines.visible=i.vertices.length>0,(this.context.time.frame%30===0||this.lines.geometry.boundingSphere?.radius===0)&&(this.lines.geometry.computeBoundingSphere(),this.disabledLines.geometry.computeBoundingSphere())}else this.lines&&this.context?.scene.remove(this.lines),this.disabledLines&&this.context?.scene.remove(this.disabledLines)}syncObjects(){if(!Rp)for(let e=0;e<this.bodies.length;e++){const t=this.objects[e],i=this.bodies[e],n=t;if(n?.isCollider===!0&&!n.attachedRigidbody){const l=i.parent();l?this.syncPhysicsBody(t.gameObject,l,!0,!0):this.syncPhysicsBody(t.gameObject,i,!0,!0);continue}const o=i.translation(),r=i.rotation();if(Number.isNaN(o.x)||Number.isNaN(r.x)){!n.__COLLIDER_NAN&&A()&&(console.warn("Collider has NaN values",n.name,n.gameObject,i),n.__COLLIDER_NAN=!0);continue}const a=t.center;if(a&&a.isVector3){this._tempQuaternion.set(r.x,r.y,r.z,r.w);const l=this._tempPosition.copy(a).applyQuaternion(this._tempQuaternion),h=je(t.gameObject);l.multiply(h),o.x-=l.x,o.y-=l.y,o.z-=l.z}hr(t.gameObject,o.x,o.y,o.z),Nm(t.gameObject,r.x,r.y,r.z,r.w)}}syncPhysicsBody(e,t,i,n){if(t instanceof T.RAPIER_PHYSICS.MODULE.RigidBody){const o=Y(e,this._tempPosition),r=pe(e,this._tempQuaternion);switch(t.bodyType()){case T.RAPIER_PHYSICS.MODULE.RigidBodyType.Fixed:case T.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicPositionBased:case T.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicVelocityBased:i&&t.setNextKinematicTranslation(o),n&&t.setNextKinematicRotation(r);break;default:i&&t.setTranslation(o,!1),n&&t.setRotation(r,!1);break}}else if(t instanceof T.RAPIER_PHYSICS.MODULE.Collider){e.matrixWorldNeedsUpdate&&e.updateWorldMatrix(!0,!1),e.matrixWorld.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const o=this._tempPosition,r=this._tempQuaternion,a=t[Kt];if(this.tryApplyCenter(a,o),i){const l=t.translation();(l.x!==o.x||l.y!==o.y||l.z!==o.z)&&t.setTranslation(o)}if(n){const l=t.rotation();(l.x!==r.x||l.y!==r.y||l.z!==r.z||l.w!==r.w)&&t.setRotation(r)}}}_tempCenterPos=new c.Vector3;_tempCenterVec=new c.Vector3;_tempCenterQuaternion=new c.Quaternion;tryApplyCenter(e,t){const i=e.center;i&&e.gameObject&&(i.x!==0||i.y!==0||i.z!==0)&&(this._tempCenterPos.x=i.x,this._tempCenterPos.y=i.y,this._tempCenterPos.z=i.z,je(e.gameObject,this._tempCenterVec),this._tempCenterPos.multiply(this._tempCenterVec),e.attachedRigidbody?this._tempCenterPos.applyQuaternion(e.gameObject.quaternion):(pe(e.gameObject,this._tempCenterQuaternion),this._tempCenterPos.applyQuaternion(this._tempCenterQuaternion)),t.x+=this._tempCenterPos.x,t.y+=this._tempCenterPos.y,t.z+=this._tempCenterPos.z)}static _matricesBuffer=[];getRigidbodyRelativeMatrix(e,t,i,n){if(n===void 0&&(n=Oa._matricesBuffer,n.length=0),e===t){const o=je(e,this._tempPosition);i.makeScale(o.x,o.y,o.z);for(let r=n.length-1;r>=0;r--)i.multiply(n[r]);return i}return n.push(e.matrix),e.parent&&this.getRigidbodyRelativeMatrix(e.parent,t,i,n),i}static centerConnectionPos={x:0,y:0,z:0};static centerConnectionRot={x:0,y:0,z:0,w:1};addFixedJoint(e,t){if(!this.world){console.error("Physics world not initialized");return}const i=e[gt],n=t[gt];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const o=T.RAPIER_PHYSICS.MODULE.JointData.fixed(Oa.centerConnectionPos,Oa.centerConnectionRot,this._tempPosition,this._tempQuaternion),r=this.world.createImpulseJoint(o,i,n,!0);Ee&&console.log("ADD FIXED JOINT",r)}addHingeJoint(e,t,i,n){if(!this.world){console.error("Physics world not initialized");return}const o=e[gt],r=t[gt];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const a=T.RAPIER_PHYSICS.MODULE.JointData.revolute(i,this._tempPosition,n),l=this.world.createImpulseJoint(a,o,r,!0);Ee&&console.log("ADD HINGE JOINT",l)}calculateJointRelativeMatrices(e,t,i){e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);const n=e.matrixWorld,o=t.matrixWorld;n.elements[0]=1,n.elements[5]=1,n.elements[10]=1,o.elements[0]=1,o.elements[5]=1,o.elements[10]=1,i.copy(o).premultiply(n.invert()).invert()}}class vA{world;eventQueue;constructor(e,t){this.world=e,this.eventQueue=t}activeCollisions=[];activeCollisionsStay=[];activeTriggers=[];handleCollisionEvents(){this.eventQueue&&this.world&&this.eventQueue.drainCollisionEvents((e,t,i)=>{const n=this.world.getCollider(e),o=this.world.getCollider(t);if(!n||!o)return;const r=n[Kt],a=o[Kt];Tp&&console.log("EVT",r.name,a.name,i,n,o),r&&a&&(i?(this.onCollisionStarted(r,n,a,o),this.onCollisionStarted(a,o,r,n)):(this.onCollisionEnded(r,a),this.onCollisionEnded(a,r)))})}update(){this.onHandleCollisionStay()}onCollisionStarted(e,t,i,n){let o=null;if(e.isTrigger||i.isTrigger)ur(e.gameObject,r=>{r.onTriggerEnter&&!r.destroyed&&r.onTriggerEnter(i),this.activeTriggers.push({collider:e,component:r,otherCollider:i})});else{const r=e.gameObject;this.world.contactPair(t,n,(a,l)=>{ur(r,h=>{if(h.destroyed)return;const d=h.onCollisionEnter||h.onCollisionStay||h.onCollisionExit;if(d||Tp){if(!o){const u=[],p=a.normal();i instanceof wo&&i.convex&&(p.x=-p.x,p.y=-p.y,p.z=-p.z);for(let m=0;m<a.numSolverContacts();m++){const y=a.solverContactPoint(m),_=a.contactImpulse(m);if(y){const g=a.contactDist(m),v=a.solverContactFriction(m),b=a.solverContactTangentVelocity(m),w=new Hv(y,g,p,_,v,b);u.push(w),Tp&&B.DrawDirection(y,p,16711680,3,!0)}}o=new qv(r,i,u)}if(d){const u={collider:e,component:h,collision:o};this.activeCollisions.push(u),h.onCollisionStay&&this.activeCollisionsStay.push(u),h.onCollisionEnter?.call(h,o)}}})})}}onHandleCollisionStay(){for(const e of this.activeCollisionsStay){const t=e.component;if(!t.destroyed&&t.activeAndEnabled&&t.onCollisionStay){if(e.collision.collider.destroyed)continue;const i=e.collision;t.onCollisionStay(i)}}for(const e of this.activeTriggers){const t=e.component;if(!t.destroyed&&t.activeAndEnabled&&t.onTriggerStay){const i=e.otherCollider;if(i.destroyed)continue;t.onTriggerStay(i)}}}onCollisionEnded(e,t){if(!(e.destroyed||t.destroyed)){for(let i=0;i<this.activeCollisions.length;i++){const n=this.activeCollisions[i],o=n.collider;if(o.destroyed||n.collision.collider.destroyed){this.activeCollisions.splice(i,1),i--;continue}if(o===e&&n.collision.collider===t){const r=n.component;if(this.activeCollisions.splice(i,1),i--,r.activeAndEnabled&&r.onCollisionExit){const a=n.collision;r.onCollisionExit(a)}}}for(let i=0;i<this.activeCollisionsStay.length;i++){const n=this.activeCollisionsStay[i],o=n.collider;if(o.destroyed||n.collision.collider.destroyed){this.activeCollisionsStay.splice(i,1),i--;continue}if(o===e&&n.collision.collider===t){const r=n.component;if(this.activeCollisionsStay.splice(i,1),i--,r.activeAndEnabled&&r.onCollisionExit){const a=n.collision;r.onCollisionExit(a)}}}for(let i=0;i<this.activeTriggers.length;i++){const n=this.activeTriggers[i],o=n.collider;if(o.destroyed||n.otherCollider.destroyed){this.activeTriggers.splice(i,1),i--;continue}if(o===e&&n.otherCollider===t){const r=n.component;if(this.activeTriggers.splice(i,1),i--,r.activeAndEnabled&&r.onTriggerExit){const a=n.otherCollider;r.onTriggerExit(a)}}}}}}let Am=0;function cv(s){s?Am++:Am--}function wA(){return Am>0}const xA={binary:!0,animations:!0};async function SA(s){if(!s.context)throw new Error("No context provided to exportAsGLTF");s.scene||(s.scene=s.context.scene);const e={...xA,...s},{context:t}=e,i=new X.GLTFExporter;i.register(a=>new Vw(a)),i.register(a=>new ok(a)),i.register(a=>new Ww(a)),$g(i,e.context);const n={binary:e.binary,animations:PA(t,e.scene,[])},o=new CA;console.debug("Exporting GLTF",n),o.onBeforeExport(e),cv(!0);const r=await i.parseAsync(e.scene,n).catch(a=>(console.error(a),null));if(cv(!1),o.onAfterExport(e),!r)throw new Error("Failed to export GLTF");if(e.downloadAs!=null){let a=null;if(r instanceof ArrayBuffer?a=new Blob([r],{type:"application/octet-stream"}):console.error("Can not download GLTF as a blob",r),a){const l=URL.createObjectURL(a),h=document.createElement("a");h.href=l;let d=e.downloadAs;!d.endsWith(".glb")&&!d.endsWith(".gltf")&&(d+=e.binary?".glb":".gltf"),h.download=d,h.click()}}return r}const hv=Symbol("needle:weight");class CA{_undo=[];onBeforeExport(e){e.context.animations.mixers.forEach(t=>{const i=Hn.tryGetActionsFromMixer(t);if(i)for(let n=0;n<i.length;n++){const o=i[n];o[hv]=o.weight,o.weight=0,this._undo.push(()=>{o.weight=o[hv]})}t.update(0)}),e.context.scene.traverse(t=>{if(!mm(t)){const i=t.parent;i&&(t.removeFromParent(),this._undo.push(()=>i.add(t)))}})}onAfterExport(e){this._undo.forEach(t=>t()),this._undo.length=0}}function PA(s,e,t){s.animations.mixers.forEach(n=>{const o=Hn.tryGetActionsFromMixer(n);if(o)for(let r=0;r<o.length;r++){const l=o[r].getClip();t.push(l)}}),Array.isArray(e)||(e=[e]);for(const n of e)Hn.tryGetAnimationClipsFromObjectHierarchy(n,t);const i=new Set(t);return Array.from(i)}const Bl=x("debugavatar");class Xy{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 Xx{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 gn;i=S.instantiate(Ma(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Bl&&console.log("[Custom Avatar] valid config",t,Bl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Bl?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(Bl&&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 un().parseSync(e,o,null,0))?.scene??null:null}const i=new X.GLTFLoader;return cy(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await un().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Bl&&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 Xy(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 Qx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Yx{}const OA=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ue,ActionCollection:ox,ActionModel:Jt,AlignmentConstraint:ih,Animation:Tt,AnimationCurve:yh,AnimationExtension:Xu,AnimationTrackHandler:Rc,Animator:lt,AnimatorController:Vi,Antialiasing:bh,Attractor:al,AudioExtension:Mr,AudioListener:ds,AudioSource:vi,AudioTrackHandler:us,Avatar:fo,AvatarBlink_Simple:Sr,AvatarEyeLook_Rotation:Lg,AvatarLoader:Xx,AvatarMarker:Oe,AvatarModel:Xy,Avatar_Brain_LookAt:Ac,Avatar_MouthShapes:sh,Avatar_MustacheShake:Ag,Avatar_POI:lr,AxesHelper:qa,BaseUIComponent:Wi,BasicIKConstraint:jg,BehaviorExtension:hy,BehaviorModel:St,BloomEffect:hf,BoxCollider:Vu,BoxGizmo:Tr,BoxHelperComponent:bt,Button:Ds,CallInfo:ls,Camera:si,CameraTargetReachedEvent:Ec,Canvas:Fa,CanvasGroup:po,CapsuleCollider:bs,ChangeMaterialOnClick:iy,ChangeTransformOnClick:kr,CharacterController:Cr,CharacterControllerInput:Cs,ChromaticAberration:vh,ClickThrough:wf,ColorAdjustments:ko,ColorBySpeedModule:rl,ColorOverLifetimeModule:af,ContactShadows:oh,ControlTrackHandler:Bu,CursorFollow:Vr,CustomBranding:Rr,Deletable:zg,DeleteBox:ro,DepthOfField:bn,DeviceFlag:$u,DocumentExtension:Qx,DragControls:Ko,DropListener:Os,Duplicatable:qg,EffectWrapper:jc,EmissionModule:Rs,EmphasizeOnClick:Ka,EnvironmentScene:Fu,EventList:ne,EventListEvent:Tu,EventSystem:Gt,EventTrigger:Hu,FieldWithDefault:zw,FixedJoint:Cy,Fog:il,GltfExport:Zg,GltfExportBox:Yg,Gradient:Dr,Graphic:ph,GraphicRaycaster:Du,GridHelper:nl,GridLayoutGroup:gy,GroundProjectedEnv:Xn,GroupActionModel:Zo,HideOnStart:Ii,HingeJoint:gh,HorizontalLayoutGroup:my,get HoverAnimation(){return exports.HoverAnimation},Image:dl,InheritVelocityModule:Ey,InputField:zy,InstanceHandle:cr,InstancingHandler:gr,Interactable:Ug,Keyframe:oi,LODGroup:sf,LODModel:sl,Light:Ot,LimitVelocityOverLifetimeModule:nt,LogStats:Fg,LookAt:Ny,LookAtConstraint:xr,MainModule:Lt,MarkerTrackHandler:ju,MaskableGraphic:mh,MeshCollider:wo,MeshRenderer:lh,MinMaxCurve:H,MinMaxGradient:Lr,NeedleMenu:Yn,NestedGltf:ol,Networking:My,NoiseModule:me,ObjectRaycaster:$i,OffsetConstraint:Ar,OpenURL:ul,OrbitControls:he,Outline:tl,Padding:Er,ParticleBurst:du,ParticleSubEmitter:Ry,ParticleSystem:Ic,ParticleSystemRenderer:Yi,PhysicsExtension:dy,PixelationEffect:wh,PlayAnimationOnClick:Dc,PlayAudioOnClick:uo,PlayableDirector:ja,PlayerColor:Ua,PointerEventData:Zc,PostProcessingHandler:za,PreliminaryAction:Za,PreliminaryTrigger:hh,RawImage:_f,Rect:dx,RectTransform:mn,ReflectionProbe:os,RegisteredAnimationInfo:so,RemoteSkybox:Uu,Renderer:Ht,RendererLightmap:Wg,Rigidbody:$e,RotationBySpeedModule:Qi,RotationOverLifetimeModule:_n,SceneSwitcher:We,ScreenCapture:Eo,ScreenSpaceAmbientOcclusion:Ts,ScreenSpaceAmbientOcclusionN8:vn,ScrollFollow:Ls,SeeThrough:As,SetActiveOnClick:ny,ShadowCatcher:Ph,ShapeModule:ky,SharpeningEffect:Sh,SignalAsset:Iu,SignalReceiver:eh,SignalReceiverEvent:Jc,SignalTrackHandler:Tc,Size:hx,SizeBySpeedModule:di,SizeOverLifetimeModule:Ir,SkinnedMeshRenderer:Gg,SmoothFollow:ff,SpatialGrabRaycaster:fr,SpatialHtml:Eh,SpatialTrigger:pf,SpatialTriggerReceiver:Gn,SpectatorCamera:mf,SphereCollider:Xa,SplineContainer:zr,SplineData:qn,SplineWalker:Zi,Sprite:Ms,SpriteData:Pa,SpriteRenderer:ci,SpriteSheet:Ba,SubEmitterSystem:uu,SyncedCamera:jy,SyncedRoom:wn,SyncedTransform:pn,TapGestureTrigger:oy,TeleportTarget:Ju,TestRunner:By,TestSimulateUserData:Fy,Text:Dt,TextBuilder:fy,TextExtension:tf,TextureSheetAnimationModule:It,TiltShiftEffect:Zn,ToneMappingEffect:mo,TrailModule:Le,TransformData:Ae,TransformGizmo:Nr,TriggerBuilder:Rt,TriggerModel:ao,UIRaycastUtils:xg,UIRootComponent:uh,USDZExporter:Wn,USDZText:ma,USDZUIExtension:_y,UsageMarker:rh,VariantAction:ty,VelocityOverLifetimeModule:Fe,VerticalLayoutGroup:py,VideoPlayer:tt,get ViewBox(){return exports.ViewBox},Vignette:Fr,VisibilityAction:dh,Voip:vo,Volume:Ur,VolumeParameter:z,VolumeProfile:lf,WebARCameraBackground:Th,WebARSessionRoot:Ui,WebXR:ef,WebXRImageTracking:Ah,WebXRImageTrackingModel:js,WebXRPlaneTracking:Bs,WebXRTrackedImage:Na,XRControllerFollow:Is,XRControllerModel:vs,XRControllerMovement:xi,XRFlag:ji,XRRig:Cf,XRState:Wt,__Ignore:Yx},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new zr,r=1-I.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new qn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class MA extends le.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-CAt_h_GH.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=le.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 _=new c.BufferAttribute(u.index,1,!1);t.setIndex(_)}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 kA=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:MA},Symbol.toStringTag,{value:"Module"}));exports.$componentName=Gv;exports.$physicsKey=TC;exports.ActionBuilder=ue;exports.ActionCollection=ox;exports.ActionModel=Jt;exports.Addressables=f0;exports.AlignmentConstraint=ih;exports.AmbientMode=va;exports.Animation=Tt;exports.AnimationCurve=yh;exports.AnimationExtension=Xu;exports.AnimationTrackHandler=Rc;exports.AnimationUtils=Hn;exports.Animator=lt;exports.AnimatorConditionMode=Zs;exports.AnimatorController=Vi;exports.AnimatorControllerParameterType=wg;exports.AnimatorStateInfo=Vl;exports.Antialiasing=bh;exports.Application=fn;exports.AssetDatabase=N0;exports.AssetReference=Z;exports.Attractor=al;exports.AudioExtension=Mr;exports.AudioListener=ds;exports.AudioSource=vi;exports.AudioTrackHandler=us;exports.Avatar=fo;exports.AvatarBlink_Simple=Sr;exports.AvatarEyeLook_Rotation=Lg;exports.AvatarLoader=Xx;exports.AvatarMarker=Oe;exports.AvatarModel=Xy;exports.Avatar_Brain_LookAt=Ac;exports.Avatar_MouthShapes=sh;exports.Avatar_MustacheShake=Ag;exports.Avatar_POI=lr;exports.Axes=fa;exports.AxesHelper=qa;exports.BUILD_TIME=_c;exports.BaseUIComponent=Wi;exports.BasicIKConstraint=jg;exports.BehaviorExtension=hy;exports.BehaviorModel=St;exports.BloomEffect=hf;exports.BoxCollider=Vu;exports.BoxGizmo=Tr;exports.BoxHelperComponent=bt;exports.Button=Ds;exports.ButtonsFactory=Fi;exports.CallDirection=Sw;exports.CallInfo=ls;exports.Camera=si;exports.CameraTargetReachedEvent=Ec;exports.Canvas=Fa;exports.CanvasGroup=po;exports.CapsuleCollider=bs;exports.ChangeMaterialOnClick=iy;exports.ChangeTransformOnClick=kr;exports.CharacterController=Cr;exports.CharacterControllerInput=Cs;exports.ChromaticAberration=vh;exports.CircularBuffer=_i;exports.ClearFlags=ar;exports.ClickThrough=wf;exports.ClipExtrapolation=Mn;exports.Collider=Xi;exports.Collision=qv;exports.CollisionDetectionMode=Au;exports.ColorAdjustments=ko;exports.ColorBySpeedModule=rl;exports.ColorOverLifetimeModule=af;exports.Component=BP;exports.Component$1=E;exports.ComponentLifecycleEvents=gu;exports.Components=OA;exports.ConnectionEvents=x0;exports.ContactPoint=Hv;exports.ContactShadows=oh;exports.Context=U;exports.ContextArgs=Q1;exports.ContextEvent=ae;exports.ContextRegistry=ce;exports.ControlTrackHandler=Bu;exports.CursorFollow=Vr;exports.CustomBranding=Rr;exports.CustomShader=ve;exports.DefaultReflectionMode=Kd;exports.Deletable=zg;exports.DeleteBox=ro;exports.DepthOfField=bn;exports.DeviceFlag=$u;exports.DocumentExtension=Qx;exports.DragControls=Ko;exports.DragMode=Ng;exports.DropListener=Os;exports.Duplicatable=qg;exports.EffectWrapper=jc;exports.EmissionModule=Rs;exports.EmphasizeOnClick=Ka;exports.EngineLoadingView=Bc;exports.EnvironmentScene=Fu;exports.EventList=ne;exports.EventListEvent=Tu;exports.EventSystem=Gt;exports.EventTrigger=Hu;exports.FieldWithDefault=zw;exports.FileReference=ir;exports.FileReferenceSerializer=m0;exports.FileSpawnModel=xM;exports.File_Event=Tw;exports.FixedJoint=Cy;exports.Fog=il;exports.FrameEvent=ge;exports.GENERATOR=Ea;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=Zg;exports.GltfExportBox=Yg;exports.Gradient=Dr;exports.Graphic=ph;exports.GraphicRaycaster=Du;exports.Graphics=co;exports.GridHelper=nl;exports.GridLayoutGroup=gy;exports.GroundProjectedEnv=Xn;exports.GroupActionModel=Zo;exports.HideFlags=_u;exports.HideOnStart=Ii;exports.HingeJoint=gh;exports.HorizontalLayoutGroup=my;exports.HostData=$C;exports.Image=dl;exports.ImageReference=tr;exports.ImageReferenceSerializer=p0;exports.InheritVelocityModule=Ey;exports.Input=y0;exports.InputEventQueue=ti;exports.InputEvents=Pe;exports.InputField=zy;exports.InstanceHandle=cr;exports.InstancingHandler=gr;exports.InstancingUtil=Ni;exports.InstantiateEvent=t0;exports.InstantiateIdProvider=xt;exports.InstantiateOptions=gn;exports.Interactable=Ug;exports.JoinedRoomResponse=b1;exports.KeyEventArgs=d1;exports.Keyframe=oi;exports.LODGroup=sf;exports.LODModel=sl;exports.LeftRoomResponse=v1;exports.Light=Ot;exports.LightData=k0;exports.LimitVelocityOverLifetimeModule=nt;exports.LoadingElementOptions=dA;exports.LogStats=Fg;exports.LogType=gi;exports.LookAt=Ny;exports.LookAtConstraint=xr;exports.MODULES=T;exports.MainModule=Lt;exports.MarkerTrackHandler=ju;exports.MarkerType=Pg;exports.MaskableGraphic=mh;exports.MaterialPropertyBlock=ys;exports.Mathf=I;exports.MeshCollider=wo;exports.MeshRenderer=lh;exports.MinMaxCurve=H;exports.MinMaxGradient=Lr;exports.NEEDLE_ENGINE_FEATURE_FLAGS=Xm;exports.NEKeyboardEvent=Fl;exports.NEPointerEvent=ss;exports.NeedleButtonElement=Wx;exports.NeedleEngineWebComponent=qy;exports.NeedleMenu=Yn;exports.NeedlePatchesKey=_d;exports.NeedleXRController=ug;exports.NeedleXRSession=q;exports.NeedleXRSync=F0;exports.NeedleXRUtils=z0;exports.NestedGltf=ol;exports.NetworkConnection=C0;exports.NetworkedStreamEvents=Un;exports.NetworkedStreams=nh;exports.Networking=My;exports.NewInstanceModel=n0;exports.NoiseModule=me;exports.ObjectRaycaster=$i;exports.ObjectUtils=_o;exports.OffsetConstraint=Ar;exports.OneEuroFilter=gd;exports.OneEuroFilterXYZ=Um;exports.OpenURL=ul;exports.OrbitControls=he;exports.Outline=tl;exports.OwnershipEvent=S0;exports.OwnershipModel=lg;exports.PUBLIC_KEY=no;exports.Padding=Er;exports.ParticleBurst=du;exports.ParticleSubEmitter=Ry;exports.ParticleSystem=Ic;exports.ParticleSystemBaseBehaviour=Mo;exports.ParticleSystemRenderer=Yi;exports.ParticleSystemShapeType=hu;exports.PeerHandle=fs;exports.PeerNetworking=w0;exports.Physics=Ia;exports.PhysicsExtension=dy;exports.PhysicsMaterialCombine=st;exports.PixelationEffect=wh;exports.PlayAnimationOnClick=Dc;exports.PlayAudioOnClick=uo;exports.PlayableDirector=ja;exports.PlayerColor=Ua;exports.PlayerState=zi;exports.PlayerStateEvent=lx;exports.PlayerSync=ay;exports.PlayerView=P0;exports.PlayerViewManager=O0;exports.PointerEventData=Zc;exports.PointerType=vu;exports.PostProcessingEffect=Xe;exports.PostProcessingEffectOrder=et;exports.PostProcessingHandler=za;exports.PreliminaryAction=Za;exports.PreliminaryTrigger=hh;exports.PrimitiveType=Va;exports.Progress=oe;exports.PromiseAllWithErrors=Bm;exports.PromiseErrorResult=Lp;exports.RGBAColor=te;exports.RapierPhysics=Oa;exports.RawImage=_f;exports.RaycastOptions=bo;exports.Rect=dx;exports.RectTransform=mn;exports.ReflectionProbe=os;exports.RegisteredAnimationInfo=so;exports.RemoteSkybox=Uu;exports.RenderTexture=Bn;exports.RenderTextureSerializer=pw;exports.Renderer=Ht;exports.RendererData=M0;exports.RendererLightmap=Wg;exports.Rigidbody=$e;exports.RigidbodyConstraints=Ve;exports.RoomEvents=K;exports.RotationBySpeedModule=Qi;exports.RotationOverLifetimeModule=_n;exports.SceneLightSettings=ou;exports.SceneSwitcher=We;exports.ScreenCapture=Eo;exports.ScreenSpaceAmbientOcclusion=Ts;exports.ScreenSpaceAmbientOcclusionN8=vn;exports.ScrollFollow=Ls;exports.SeeThrough=As;exports.SendQueue=ln;exports.SerializationContext=ng;exports.SetActiveOnClick=ny;exports.ShadowCatcher=Ph;exports.ShapeModule=ky;exports.ShapeOverlapResult=Xv;exports.SharpeningEffect=Sh;exports.SignalAsset=Iu;exports.SignalReceiver=eh;exports.SignalReceiverEvent=Jc;exports.SignalTrackHandler=Tc;exports.Size=hx;exports.SizeBySpeedModule=di;exports.SizeOverLifetimeModule=Ir;exports.SkinnedMeshRenderer=Gg;exports.SmoothFollow=ff;exports.SpatialGrabRaycaster=fr;exports.SpatialHtml=Eh;exports.SpatialTrigger=pf;exports.SpatialTriggerReceiver=Gn;exports.SpectatorCamera=mf;exports.SphereCollider=Xa;exports.SphereIntersection=mg;exports.SplineContainer=zr;exports.SplineData=qn;exports.SplineWalker=Zi;exports.Sprite=Ms;exports.SpriteData=Pa;exports.SpriteRenderer=ci;exports.SpriteSheet=Ba;exports.StateMachineBehaviour=VP;exports.StreamEndedEvent=Rg;exports.StreamReceivedEvent=xw;exports.SubEmitterSystem=uu;exports.SyncedCamera=jy;exports.SyncedRoom=wn;exports.SyncedTransform=pn;exports.TapGestureTrigger=oy;exports.TeleportTarget=Ju;exports.TestRunner=By;exports.TestSimulateUserData=Fy;exports.Text=Dt;exports.TextBuilder=fy;exports.TextExtension=tf;exports.TextureSheetAnimationModule=It;exports.TiltShiftEffect=Zn;exports.Time=E0;exports.ToneMappingEffect=mo;exports.TrackHandler=Ha;exports.TrackType=fi;exports.TrailModule=Le;exports.TransformData=Ae;exports.TransformGizmo=Nr;exports.TriggerBuilder=Rt;exports.TriggerModel=ao;exports.TypeStore=P;exports.UIRaycastUtils=xg;exports.UIRootComponent=uh;exports.USDDocument=Jg;exports.USDObject=qe;exports.USDWriter=Yw;exports.USDZExporter=Kw;exports.USDZExporter$1=Wn;exports.USDZText=ma;exports.USDZUIExtension=_y;exports.UriSerializer=mw;exports.UsageMarker=rh;exports.UserJoinedOrLeftRoomModel=w1;exports.VERSION=ii;exports.VariantAction=ty;exports.VelocityOverLifetimeModule=Fe;exports.VerticalLayoutGroup=py;exports.VideoPlayer=tt;exports.ViewDevice=gs;exports.Vignette=Fr;exports.VisibilityAction=dh;exports.Voip=vo;exports.Volume=Ur;exports.VolumeParameter=z;exports.VolumeProfile=lf;exports.WaitForFrames=a1;exports.WaitForPromise=g0;exports.WaitForSeconds=sg;exports.Watch=ms;exports.WebARCameraBackground=Th;exports.WebARSessionRoot=Ui;exports.WebXR=ef;exports.WebXRButtonFactory=lo;exports.WebXRImageTracking=Ah;exports.WebXRImageTrackingModel=js;exports.WebXRPlaneTracking=Bs;exports.WebXRTrackedImage=Na;exports.XRControllerFollow=Is;exports.XRControllerModel=vs;exports.XRControllerMovement=xi;exports.XRFlag=ji;exports.XRRig=Cf;exports.XRState=Wt;exports.XRStateFlag=Ln;exports.__Ignore=Yx;exports.__internalNotifyObjectDestroyed=gP;exports.activeInHierarchyFieldName=jn;exports.addAttributeChangeCallback=Im;exports.addComponent=hn;exports.addCustomExtensionPlugin=HM;exports.addNewComponent=or;exports.addPatch=yu;exports.apply=Ou;exports.applyHMRChanges=jP;exports.applyPrototypeExtensions=Y0;exports.beginListenDestroy=i0;exports.beginListenInstantiate=o0;exports.binaryIdentifierCasts=og;exports.build_scene_functions=X1;exports.builtinComponentKeyName=Ho;exports.calculateProgress01=Hy;exports.clearMessages=PS;exports.colorSerializer=QP;exports.compareAssociation=c0;exports.componentSerializer=Md;exports.copyTexture=Tv;exports.createMotion=uw;exports.debugNet=Yt;exports.debugOwner=Ul;exports.decompressGpuTexture=tx;exports.deepClone=Uc;exports.delay=_s;exports.delayForFrames=zc;exports.deserializeObject=Qd;exports.destroy=bi;exports.destroyComponentInstance=rw;exports.determineMimeTypeFromExtension=Aw;exports.disposeObjectResources=we;exports.disposeStream=zn;exports.editorGuidKeyName=ec;exports.enableSpatialConsole=_a;exports.euler=KP;exports.eventListSerializer=tO;exports.exportAsGLTF=SA;exports.findByGuid=_g;exports.findObjectOfType=Ga;exports.findObjectsOfType=lw;exports.findResourceUsers=gg;exports.fitCamera=gw;exports.fitObjectIntoVolume=Dv;exports.foreachComponent=ur;exports.foreachComponentEnumerator=ku;exports.forward=WS;exports.generateQRCode=L0;exports.generateSeed=s0;exports.getBoundingBox=ri;exports.getCameraController=Sv;exports.getComponent=vr;exports.getComponentInChildren=Yc;exports.getComponentInParent=Pc;exports.getComponents=Qc;exports.getComponentsInChildren=Wa;exports.getComponentsInParent=Eu;exports.getFormattedDate=Hw;exports.getIconElement=wt;exports.getIconTexture=Kp;exports.getLoader=un;exports.getOrAddComponent=Xc;exports.getParam=x;exports.getParentHierarchyPath=qS;exports.getPath=nS;exports.getPeerOptions=m1;exports.getPeerjsInstance=v0;exports.getResourceUserCount=_P;exports.getTempColor=Mv;exports.getTempQuaternion=ei;exports.getTempVector=F;exports.getUrlParams=Fc;exports.getVisibleInCustomShadowRendering=Av;exports.getWorldDirection=kv;exports.getWorldEuler=Vm;exports.getWorldPosition=Y;exports.getWorldQuaternion=pe;exports.getWorldRotation=mu;exports.getWorldScale=je;exports.hasCommercialLicense=$n;exports.hasIndieLicense=Wc;exports.hasPointerEventComponent=iu;exports.hasProLicense=Vn;exports.hideDebugConsole=Bv;exports.imageToCanvas=ix;exports.initEngine=_A;exports.instantiate=ho;exports.invokeLoadedImportPluginHooks=Uw;exports.invokeXRSessionEnd=D0;exports.invokeXRSessionStart=A0;exports.isActiveInHierarchy=K0;exports.isActiveSelf=$a;exports.isAndroidDevice=cS;exports.isAnimationAction=Rv;exports.isComponent=Ym;exports.isDebugMode=Jx;exports.isDesktop=oS;exports.isDestroyed=dr;exports.isDevEnvironment=A;exports.isDisposed=mP;exports.isExporting=wA;exports.isGLTFModel=Wv;exports.isHostedOnGlitch=dv;exports.isHotReloadEnabled=lm;exports.isHotReloading=LP;exports.isIPad=aS;exports.isIconElement=I0;exports.isLocalNetwork=yi;exports.isMacOS=dS;exports.isMobileDevice=rS;exports.isMozillaXR=hS;exports.isQuest=pS;exports.isResourceTrackingEnabled=$0;exports.isSafari=fS;exports.isUsingInstancing=Mu;exports.isiOS=uS;exports.isiPad=lS;exports.loadAsset=nA;exports.loadPMREM=Eg;exports.loadSync=Gy;exports.logHierarchy=$d;exports.lookAtInverse=jS;exports.lookAtObject=Nc;exports.lookAtScreenPoint=BS;exports.makeId=tS;exports.makeIdFromRandomWords=pv;exports.makeNameSafe=wi;exports.markAsInstancedRendered=Z0;exports.microphonePermissionsGranted=mS;exports.nameof=Zx;exports.nameofFactory=uv;exports.objectSerializer=fw;exports.offXRSessionEnd=A1;exports.offXRSessionStart=T1;exports.onAfterRender=IC;exports.onBeforeRender=LC;exports.onClear=AC;exports.onDestroy=DC;exports.onInitialized=Km;exports.onStart=bu;exports.onUpdate=Zv;exports.onXRSessionEnd=hg;exports.onXRSessionStart=xu;exports.parseSync=Vx;exports.placeOnSurface=Lv;exports.postprocessFBXMaterials=Gm;exports.prefix=lO;exports.pushState=fv;exports.randomNumber=iS;exports.registerBinaryType=rg;exports.registerComponent=Cu;exports.registerComponentExtension=Vg;exports.registerCustomEffectType=Ki;exports.registerExportExtensions=$g;exports.registerExtensions=au;exports.registerHotReloadType=cw;exports.registerLoader=Yv;exports.registerPrefabProvider=a0;exports.registerPrototypeExtensions=yg;exports.registerType=qm;exports.relativePathPrefix=gv;exports.removeAttributeChangeCallback=jm;exports.removeComponent=vg;exports.removeCustomImportExtensionType=qM;exports.removePatch=kC;exports.resolveUrl=ws;exports.sanitizeString=mv;exports.saveImage=Ux;exports.screenshot=jT;exports.screenshot2=Wy;exports.sendDestroyed=Jm;exports.serializable=f;exports.serializeObject=d0;exports.serializeable=Be;exports.setActive=sc;exports.setAllowBalloonMessages=vv;exports.setAllowOverlayMessages=wS;exports.setAutoFitEnabled=Nd;exports.setCameraController=Bp;exports.setDestroyed=ew;exports.setDevEnvironment=RS;exports.setDisposable=G0;exports.setDontDestroy=na;exports.setOrAddParamsToUrl=Dp;exports.setParam=eS;exports.setParamWithoutReload=yc;exports.setPeerOptions=g1;exports.setResourceTrackingEnabled=pP;exports.setState=Dm;exports.setVisibleInCustomShadowRendering=Wm;exports.setWorldEuler=$m;exports.setWorldPosition=at;exports.setWorldPositionXYZ=hr;exports.setWorldQuaternion=dn;exports.setWorldQuaternionXYZW=Nm;exports.setWorldRotation=Ev;exports.setWorldRotationXYZ=Vc;exports.setWorldScale=ka;exports.showBalloonError=$c;exports.showBalloonMessage=Se;exports.showBalloonWarning=fe;exports.showDebugConsole=Hm;exports.slerp=Pv;exports.syncDestroy=Gc;exports.syncField=kg;exports.syncInstantiate=eg;exports.textureToCanvas=XS;exports.toSourceId=yv;exports.tryCastBinary=_0;exports.tryDetermineMimetypeFromBinary=Lw;exports.tryDetermineMimetypeFromURL=Dw;exports.tryFindObject=Ma;exports.tryGetGuid=b0;exports.unregisterHotReloadType=hw;exports.unwatchWrite=Lm;exports.useForAutoFit=Cv;exports.validate=Ct;exports.watchWrite=pu;
|
|
1654
|
+
Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[gt],i=e.membership;let n=0;if(i==null)n=65535;else for(let a=0;a<i.length;a++){const l=i[a];l>31?console.error(`Rapier only supports 32 layers, layer ${l} is not supported`):n|=1<<Math.floor(l)}const o=e.filter;let r=0;if(o==null)r=65535;else for(let a=0;a<o.length;a++){const l=o[a];l>31?console.error(`Rapier only supports 32 layers, layer ${l} is not supported`):r|=1<<Math.floor(l)}t.setCollisionGroups(n<<16|r)}getRigidbody(e,t){if(!this.world)throw new Error("Physics world not initialized");let i=null;if(e.attachedRigidbody){const n=e.attachedRigidbody;if(i=n[gt],!i){const o=n.isKinematic&&!Rp;Ee&&console.log("Create rigidbody",o);const r=o?T.RAPIER_PHYSICS.MODULE.RigidBodyDesc.kinematicPositionBased():T.RAPIER_PHYSICS.MODULE.RigidBodyDesc.dynamic(),a=Y(e.attachedRigidbody.gameObject);r.setTranslation(a.x,a.y,a.z),r.setRotation(pe(e.attachedRigidbody.gameObject)),r.centerOfMass=new T.RAPIER_PHYSICS.MODULE.Vector3(n.centerOfMass.x,n.centerOfMass.y,n.centerOfMass.z),i=this.world.createRigidBody(r),this.bodies.push(i),this.objects.push(n)}i[Kt]=n,n[gt]=i,this.internalUpdateRigidbodyProperties(n,i),this.getRigidbodyRelativeMatrix(e.gameObject,n.gameObject,t),e[lv]=i}else{const n=T.RAPIER_PHYSICS.MODULE.RigidBodyDesc.kinematicPositionBased(),o=Y(e.gameObject);n.setTranslation(o.x,o.y,o.z),n.setRotation(pe(e.gameObject)),i=this.world.createRigidBody(n),t.identity(),i[Kt]=null}return i}internal_getRigidbody(e){return e.isCollider===!0?e[lv]:e[gt]}internalUpdateColliderProperties(e,t){const i=t.shape;let n=!1;switch(i.type){case T.RAPIER_PHYSICS.MODULE.ShapeType.Ball:{const p=i,m=e,y=e.gameObject,_=je(y,this._tempPosition),g=Math.abs(m.radius*_.x);n=p.radius!==g,p.radius=g,n&&t.setShape(p);break}case T.RAPIER_PHYSICS.MODULE.ShapeType.Cuboid:const o=i,r=e,a=e.gameObject,l=je(a,this._tempPosition),h=Math.abs(r.size.x*.5*l.x),d=Math.abs(r.size.y*.5*l.y),u=Math.abs(r.size.z*.5*l.z);n=o.halfExtents.x!==h||o.halfExtents.y!==d||o.halfExtents.z!==u,o.halfExtents.x=h,o.halfExtents.y=d,o.halfExtents.z=u,n&&t.setShape(o);break}if(n){const o=e.attachedRigidbody;o?.autoMass&&this.getBody(o)?.recomputeMassPropertiesFromColliders()}this.updateColliderCollisionGroups(e),e.isTrigger!==t.isSensor()&&t.setSensor(e.isTrigger)}internalUpdateRigidbodyProperties(e,t){if(t.enableCcd(e.collisionDetectionMode!==Au.Discrete),t.setLinearDamping(e.drag),t.setAngularDamping(e.angularDrag),t.setGravityScale(e.useGravity?e.gravityScale:0,!0),e.dominanceGroup<=127&&e.dominanceGroup>=-127?t.setDominanceGroup(Math.floor(e.dominanceGroup)):t.setDominanceGroup(0),e.autoMass){t.setAdditionalMass(0,!1);for(let i=0;i<t.numColliders();i++)t.collider(i).setDensity(1);t.recomputeMassPropertiesFromColliders()}else{t.setAdditionalMass(e.mass,!1);for(let i=0;i<t.numColliders();i++)t.collider(i).setDensity(1e-7);t.recomputeMassPropertiesFromColliders()}t.setEnabledRotations(!e.lockRotationX,!e.lockRotationY,!e.lockRotationZ,!1),t.setEnabledTranslations(!e.lockPositionX,!e.lockPositionY,!e.lockPositionZ,!1),e.isKinematic?t.setBodyType(T.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicPositionBased,!1):t.setBodyType(T.RAPIER_PHYSICS.MODULE.RigidBodyType.Dynamic,!1)}lines;disabledLines;step(e){if(this.world&&this.enabled){if(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new T.RAPIER_PHYSICS.MODULE.EventQueue(!1)),e===void 0||e<=0){this._isUpdatingPhysicsWorld=!1;return}else if(e!==void 0){const t=I.lerp(this.world.timestep,e,.8);this.world.timestep=t}try{this.world.step(this.eventQueue)}catch(t){console.warn("Error running physics step",{timestep:this.world.timestep},t)}this._isUpdatingPhysicsWorld=!1}}postStep(){this.world&&this.enabled&&(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new vA(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()),this.updateDebugRendering(this.world))}updateDebugRendering(e){if(Ee||Rp||bA||this.debugRenderColliders===!0){if(!this.lines){const n=new c.LineBasicMaterial({color:7855479,fog:!1}),o=new c.BufferGeometry;this.lines=new c.LineSegments(o,n),this.lines.layers.disableAll(),this.lines.layers.enable(2)}if(!this.disabledLines){const n=new c.LineBasicMaterial({color:14514039,fog:!1}),o=new c.BufferGeometry;this.disabledLines=new c.LineSegments(o,n),this.disabledLines.layers.disableAll(),this.disabledLines.layers.enable(2)}this.lines.parent!==this.context?.scene&&this.context?.scene.add(this.lines),this.disabledLines.parent!==this.context?.scene&&this.context?.scene.add(this.disabledLines);const t=e.debugRender(void 0,n=>n.isEnabled());this.lines.geometry.setAttribute("position",new c.BufferAttribute(t.vertices,3)),this.lines.geometry.setAttribute("color",new c.BufferAttribute(t.colors,4));const i=e.debugRender(void 0,n=>!n.isEnabled());this.disabledLines.geometry.setAttribute("position",new c.BufferAttribute(i.vertices,3)),this.disabledLines.geometry.setAttribute("color",new c.BufferAttribute(i.colors,4)),this.disabledLines.visible=i.vertices.length>0,(this.context.time.frame%30===0||this.lines.geometry.boundingSphere?.radius===0)&&(this.lines.geometry.computeBoundingSphere(),this.disabledLines.geometry.computeBoundingSphere())}else this.lines&&this.context?.scene.remove(this.lines),this.disabledLines&&this.context?.scene.remove(this.disabledLines)}syncObjects(){if(!Rp)for(let e=0;e<this.bodies.length;e++){const t=this.objects[e],i=this.bodies[e],n=t;if(n?.isCollider===!0&&!n.attachedRigidbody){const l=i.parent();l?this.syncPhysicsBody(t.gameObject,l,!0,!0):this.syncPhysicsBody(t.gameObject,i,!0,!0);continue}const o=i.translation(),r=i.rotation();if(Number.isNaN(o.x)||Number.isNaN(r.x)){!n.__COLLIDER_NAN&&A()&&(console.warn("Collider has NaN values",n.name,n.gameObject,i),n.__COLLIDER_NAN=!0);continue}const a=t.center;if(a&&a.isVector3){this._tempQuaternion.set(r.x,r.y,r.z,r.w);const l=this._tempPosition.copy(a).applyQuaternion(this._tempQuaternion),h=je(t.gameObject);l.multiply(h),o.x-=l.x,o.y-=l.y,o.z-=l.z}hr(t.gameObject,o.x,o.y,o.z),Nm(t.gameObject,r.x,r.y,r.z,r.w)}}syncPhysicsBody(e,t,i,n){if(t instanceof T.RAPIER_PHYSICS.MODULE.RigidBody){const o=Y(e,this._tempPosition),r=pe(e,this._tempQuaternion);switch(t.bodyType()){case T.RAPIER_PHYSICS.MODULE.RigidBodyType.Fixed:case T.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicPositionBased:case T.RAPIER_PHYSICS.MODULE.RigidBodyType.KinematicVelocityBased:i&&t.setNextKinematicTranslation(o),n&&t.setNextKinematicRotation(r);break;default:i&&t.setTranslation(o,!1),n&&t.setRotation(r,!1);break}}else if(t instanceof T.RAPIER_PHYSICS.MODULE.Collider){e.matrixWorldNeedsUpdate&&e.updateWorldMatrix(!0,!1),e.matrixWorld.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const o=this._tempPosition,r=this._tempQuaternion,a=t[Kt];if(this.tryApplyCenter(a,o),i){const l=t.translation();(l.x!==o.x||l.y!==o.y||l.z!==o.z)&&t.setTranslation(o)}if(n){const l=t.rotation();(l.x!==r.x||l.y!==r.y||l.z!==r.z||l.w!==r.w)&&t.setRotation(r)}}}_tempCenterPos=new c.Vector3;_tempCenterVec=new c.Vector3;_tempCenterQuaternion=new c.Quaternion;tryApplyCenter(e,t){const i=e.center;i&&e.gameObject&&(i.x!==0||i.y!==0||i.z!==0)&&(this._tempCenterPos.x=i.x,this._tempCenterPos.y=i.y,this._tempCenterPos.z=i.z,je(e.gameObject,this._tempCenterVec),this._tempCenterPos.multiply(this._tempCenterVec),e.attachedRigidbody?this._tempCenterPos.applyQuaternion(e.gameObject.quaternion):(pe(e.gameObject,this._tempCenterQuaternion),this._tempCenterPos.applyQuaternion(this._tempCenterQuaternion)),t.x+=this._tempCenterPos.x,t.y+=this._tempCenterPos.y,t.z+=this._tempCenterPos.z)}static _matricesBuffer=[];getRigidbodyRelativeMatrix(e,t,i,n){if(n===void 0&&(n=Oa._matricesBuffer,n.length=0),e===t){const o=je(e,this._tempPosition);i.makeScale(o.x,o.y,o.z);for(let r=n.length-1;r>=0;r--)i.multiply(n[r]);return i}return n.push(e.matrix),e.parent&&this.getRigidbodyRelativeMatrix(e.parent,t,i,n),i}static centerConnectionPos={x:0,y:0,z:0};static centerConnectionRot={x:0,y:0,z:0,w:1};addFixedJoint(e,t){if(!this.world){console.error("Physics world not initialized");return}const i=e[gt],n=t[gt];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const o=T.RAPIER_PHYSICS.MODULE.JointData.fixed(Oa.centerConnectionPos,Oa.centerConnectionRot,this._tempPosition,this._tempQuaternion),r=this.world.createImpulseJoint(o,i,n,!0);Ee&&console.log("ADD FIXED JOINT",r)}addHingeJoint(e,t,i,n){if(!this.world){console.error("Physics world not initialized");return}const o=e[gt],r=t[gt];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);const a=T.RAPIER_PHYSICS.MODULE.JointData.revolute(i,this._tempPosition,n),l=this.world.createImpulseJoint(a,o,r,!0);Ee&&console.log("ADD HINGE JOINT",l)}calculateJointRelativeMatrices(e,t,i){e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);const n=e.matrixWorld,o=t.matrixWorld;n.elements[0]=1,n.elements[5]=1,n.elements[10]=1,o.elements[0]=1,o.elements[5]=1,o.elements[10]=1,i.copy(o).premultiply(n.invert()).invert()}}class vA{world;eventQueue;constructor(e,t){this.world=e,this.eventQueue=t}activeCollisions=[];activeCollisionsStay=[];activeTriggers=[];handleCollisionEvents(){this.eventQueue&&this.world&&this.eventQueue.drainCollisionEvents((e,t,i)=>{const n=this.world.getCollider(e),o=this.world.getCollider(t);if(!n||!o)return;const r=n[Kt],a=o[Kt];Tp&&console.log("EVT",r.name,a.name,i,n,o),r&&a&&(i?(this.onCollisionStarted(r,n,a,o),this.onCollisionStarted(a,o,r,n)):(this.onCollisionEnded(r,a),this.onCollisionEnded(a,r)))})}update(){this.onHandleCollisionStay()}onCollisionStarted(e,t,i,n){let o=null;if(e.isTrigger||i.isTrigger)ur(e.gameObject,r=>{r.onTriggerEnter&&!r.destroyed&&r.onTriggerEnter(i),this.activeTriggers.push({collider:e,component:r,otherCollider:i})});else{const r=e.gameObject;this.world.contactPair(t,n,(a,l)=>{ur(r,h=>{if(h.destroyed)return;const d=h.onCollisionEnter||h.onCollisionStay||h.onCollisionExit;if(d||Tp){if(!o){const u=[],p=a.normal();i instanceof wo&&i.convex&&(p.x=-p.x,p.y=-p.y,p.z=-p.z);for(let m=0;m<a.numSolverContacts();m++){const y=a.solverContactPoint(m),_=a.contactImpulse(m);if(y){const g=a.contactDist(m),v=a.solverContactFriction(m),b=a.solverContactTangentVelocity(m),w=new Hv(y,g,p,_,v,b);u.push(w),Tp&&B.DrawDirection(y,p,16711680,3,!0)}}o=new qv(r,i,u)}if(d){const u={collider:e,component:h,collision:o};this.activeCollisions.push(u),h.onCollisionStay&&this.activeCollisionsStay.push(u),h.onCollisionEnter?.call(h,o)}}})})}}onHandleCollisionStay(){for(const e of this.activeCollisionsStay){const t=e.component;if(!t.destroyed&&t.activeAndEnabled&&t.onCollisionStay){if(e.collision.collider.destroyed)continue;const i=e.collision;t.onCollisionStay(i)}}for(const e of this.activeTriggers){const t=e.component;if(!t.destroyed&&t.activeAndEnabled&&t.onTriggerStay){const i=e.otherCollider;if(i.destroyed)continue;t.onTriggerStay(i)}}}onCollisionEnded(e,t){if(!(e.destroyed||t.destroyed)){for(let i=0;i<this.activeCollisions.length;i++){const n=this.activeCollisions[i],o=n.collider;if(o.destroyed||n.collision.collider.destroyed){this.activeCollisions.splice(i,1),i--;continue}if(o===e&&n.collision.collider===t){const r=n.component;if(this.activeCollisions.splice(i,1),i--,r.activeAndEnabled&&r.onCollisionExit){const a=n.collision;r.onCollisionExit(a)}}}for(let i=0;i<this.activeCollisionsStay.length;i++){const n=this.activeCollisionsStay[i],o=n.collider;if(o.destroyed||n.collision.collider.destroyed){this.activeCollisionsStay.splice(i,1),i--;continue}if(o===e&&n.collision.collider===t){const r=n.component;if(this.activeCollisionsStay.splice(i,1),i--,r.activeAndEnabled&&r.onCollisionExit){const a=n.collision;r.onCollisionExit(a)}}}for(let i=0;i<this.activeTriggers.length;i++){const n=this.activeTriggers[i],o=n.collider;if(o.destroyed||n.otherCollider.destroyed){this.activeTriggers.splice(i,1),i--;continue}if(o===e&&n.otherCollider===t){const r=n.component;if(this.activeTriggers.splice(i,1),i--,r.activeAndEnabled&&r.onTriggerExit){const a=n.otherCollider;r.onTriggerExit(a)}}}}}}let Am=0;function cv(s){s?Am++:Am--}function wA(){return Am>0}const xA={binary:!0,animations:!0};async function SA(s){if(!s.context)throw new Error("No context provided to exportAsGLTF");s.scene||(s.scene=s.context.scene);const e={...xA,...s},{context:t}=e,i=new X.GLTFExporter;i.register(a=>new Vw(a)),i.register(a=>new ok(a)),i.register(a=>new Ww(a)),$g(i,e.context);const n={binary:e.binary,animations:PA(t,e.scene,[])},o=new CA;console.debug("Exporting GLTF",n),o.onBeforeExport(e),cv(!0);const r=await i.parseAsync(e.scene,n).catch(a=>(console.error(a),null));if(cv(!1),o.onAfterExport(e),!r)throw new Error("Failed to export GLTF");if(e.downloadAs!=null){let a=null;if(r instanceof ArrayBuffer?a=new Blob([r],{type:"application/octet-stream"}):console.error("Can not download GLTF as a blob",r),a){const l=URL.createObjectURL(a),h=document.createElement("a");h.href=l;let d=e.downloadAs;!d.endsWith(".glb")&&!d.endsWith(".gltf")&&(d+=e.binary?".glb":".gltf"),h.download=d,h.click()}}return r}const hv=Symbol("needle:weight");class CA{_undo=[];onBeforeExport(e){e.context.animations.mixers.forEach(t=>{const i=Hn.tryGetActionsFromMixer(t);if(i)for(let n=0;n<i.length;n++){const o=i[n];o[hv]=o.weight,o.weight=0,this._undo.push(()=>{o.weight=o[hv]})}t.update(0)}),e.context.scene.traverse(t=>{if(!mm(t)){const i=t.parent;i&&(t.removeFromParent(),this._undo.push(()=>i.add(t)))}})}onAfterExport(e){this._undo.forEach(t=>t()),this._undo.length=0}}function PA(s,e,t){s.animations.mixers.forEach(n=>{const o=Hn.tryGetActionsFromMixer(n);if(o)for(let r=0;r<o.length;r++){const l=o[r].getClip();t.push(l)}}),Array.isArray(e)||(e=[e]);for(const n of e)Hn.tryGetAnimationClipsFromObjectHierarchy(n,t);const i=new Set(t);return Array.from(i)}const Bl=x("debugavatar");class Xy{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 Xx{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 gn;i=S.instantiate(Ma(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Bl&&console.log("[Custom Avatar] valid config",t,Bl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Bl?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(Bl&&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 un().parseSync(e,o,null,0))?.scene??null:null}const i=new X.GLTFLoader;return cy(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await un().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Bl&&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 Xy(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 Qx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class Yx{}const OA=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ue,ActionCollection:ox,ActionModel:Jt,AlignmentConstraint:ih,Animation:Tt,AnimationCurve:yh,AnimationExtension:Xu,AnimationTrackHandler:Rc,Animator:lt,AnimatorController:Vi,Antialiasing:bh,Attractor:al,AudioExtension:Mr,AudioListener:ds,AudioSource:vi,AudioTrackHandler:us,Avatar:fo,AvatarBlink_Simple:Sr,AvatarEyeLook_Rotation:Lg,AvatarLoader:Xx,AvatarMarker:Oe,AvatarModel:Xy,Avatar_Brain_LookAt:Ac,Avatar_MouthShapes:sh,Avatar_MustacheShake:Ag,Avatar_POI:lr,AxesHelper:qa,BaseUIComponent:Wi,BasicIKConstraint:jg,BehaviorExtension:hy,BehaviorModel:St,BloomEffect:hf,BoxCollider:Vu,BoxGizmo:Tr,BoxHelperComponent:bt,Button:Ds,CallInfo:ls,Camera:si,CameraTargetReachedEvent:Ec,Canvas:Fa,CanvasGroup:po,CapsuleCollider:bs,ChangeMaterialOnClick:iy,ChangeTransformOnClick:kr,CharacterController:Cr,CharacterControllerInput:Cs,ChromaticAberration:vh,ClickThrough:wf,ColorAdjustments:ko,ColorBySpeedModule:rl,ColorOverLifetimeModule:af,ContactShadows:oh,ControlTrackHandler:Bu,CursorFollow:Vr,CustomBranding:Rr,Deletable:zg,DeleteBox:ro,DepthOfField:bn,DeviceFlag:$u,DocumentExtension:Qx,DragControls:Ko,DropListener:Os,Duplicatable:qg,EffectWrapper:jc,EmissionModule:Rs,EmphasizeOnClick:Ka,EnvironmentScene:Fu,EventList:ne,EventListEvent:Tu,EventSystem:Gt,EventTrigger:Hu,FieldWithDefault:zw,FixedJoint:Cy,Fog:il,GltfExport:Zg,GltfExportBox:Yg,Gradient:Dr,Graphic:ph,GraphicRaycaster:Du,GridHelper:nl,GridLayoutGroup:gy,GroundProjectedEnv:Xn,GroupActionModel:Zo,HideOnStart:Ii,HingeJoint:gh,HorizontalLayoutGroup:my,get HoverAnimation(){return exports.HoverAnimation},Image:dl,InheritVelocityModule:Ey,InputField:zy,InstanceHandle:cr,InstancingHandler:gr,Interactable:Ug,Keyframe:oi,LODGroup:sf,LODModel:sl,Light:Ot,LimitVelocityOverLifetimeModule:nt,LogStats:Fg,LookAt:Ny,LookAtConstraint:xr,MainModule:Lt,MarkerTrackHandler:ju,MaskableGraphic:mh,MeshCollider:wo,MeshRenderer:lh,MinMaxCurve:H,MinMaxGradient:Lr,NeedleMenu:Yn,NestedGltf:ol,Networking:My,NoiseModule:me,ObjectRaycaster:$i,OffsetConstraint:Ar,OpenURL:ul,OrbitControls:he,Outline:tl,Padding:Er,ParticleBurst:du,ParticleSubEmitter:Ry,ParticleSystem:Ic,ParticleSystemRenderer:Yi,PhysicsExtension:dy,PixelationEffect:wh,PlayAnimationOnClick:Dc,PlayAudioOnClick:uo,PlayableDirector:ja,PlayerColor:Ua,PointerEventData:Zc,PostProcessingHandler:za,PreliminaryAction:Za,PreliminaryTrigger:hh,RawImage:_f,Rect:dx,RectTransform:mn,ReflectionProbe:os,RegisteredAnimationInfo:so,RemoteSkybox:Uu,Renderer:Ht,RendererLightmap:Wg,Rigidbody:$e,RotationBySpeedModule:Qi,RotationOverLifetimeModule:_n,SceneSwitcher:We,ScreenCapture:Eo,ScreenSpaceAmbientOcclusion:Ts,ScreenSpaceAmbientOcclusionN8:vn,ScrollFollow:Ls,SeeThrough:As,SetActiveOnClick:ny,ShadowCatcher:Ph,ShapeModule:ky,SharpeningEffect:Sh,SignalAsset:Iu,SignalReceiver:eh,SignalReceiverEvent:Jc,SignalTrackHandler:Tc,Size:hx,SizeBySpeedModule:di,SizeOverLifetimeModule:Ir,SkinnedMeshRenderer:Gg,SmoothFollow:ff,SpatialGrabRaycaster:fr,SpatialHtml:Eh,SpatialTrigger:pf,SpatialTriggerReceiver:Gn,SpectatorCamera:mf,SphereCollider:Xa,SplineContainer:zr,SplineData:qn,SplineWalker:Zi,Sprite:Ms,SpriteData:Pa,SpriteRenderer:ci,SpriteSheet:Ba,SubEmitterSystem:uu,SyncedCamera:jy,SyncedRoom:wn,SyncedTransform:pn,TapGestureTrigger:oy,TeleportTarget:Ju,TestRunner:By,TestSimulateUserData:Fy,Text:Dt,TextBuilder:fy,TextExtension:tf,TextureSheetAnimationModule:It,TiltShiftEffect:Zn,ToneMappingEffect:mo,TrailModule:Le,TransformData:Ae,TransformGizmo:Nr,TriggerBuilder:Rt,TriggerModel:ao,UIRaycastUtils:xg,UIRootComponent:uh,USDZExporter:Wn,USDZText:ma,USDZUIExtension:_y,UsageMarker:rh,VariantAction:ty,VelocityOverLifetimeModule:Fe,VerticalLayoutGroup:py,VideoPlayer:tt,get ViewBox(){return exports.ViewBox},Vignette:Fr,VisibilityAction:dh,Voip:vo,Volume:Ur,VolumeParameter:z,VolumeProfile:lf,WebARCameraBackground:Th,WebARSessionRoot:Ui,WebXR:ef,WebXRImageTracking:Ah,WebXRImageTrackingModel:js,WebXRPlaneTracking:Bs,WebXRTrackedImage:Na,XRControllerFollow:Is,XRControllerModel:vs,XRControllerMovement:xi,XRFlag:ji,XRRig:Cf,XRState:Wt,__Ignore:Yx},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new zr,r=1-I.clamp(n,0,1);return t.forEach((a,l)=>{const h=new c.Vector3;l<t.length-1?h.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&h.subVectors(t[0],a).normalize().multiplyScalar(r);const d=new qn;d.position.copy(a),d.tangentIn.copy(h),d.tangentOut.copy(h),o.addKnot(d)}),o.closed=i,o}s.createFromPoints=e})(exports.SplineUtils||(exports.SplineUtils={}));class MA extends le.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:ya&&ya.tagName.toUpperCase()==="SCRIPT"&&ya.src||new URL("needle-engine.bundle-BAYLGumK.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=le.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 _=new c.BufferAttribute(u.index,1,!1);t.setIndex(_)}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 kA=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:MA},Symbol.toStringTag,{value:"Module"}));exports.$componentName=Gv;exports.$physicsKey=TC;exports.ActionBuilder=ue;exports.ActionCollection=ox;exports.ActionModel=Jt;exports.Addressables=f0;exports.AlignmentConstraint=ih;exports.AmbientMode=va;exports.Animation=Tt;exports.AnimationCurve=yh;exports.AnimationExtension=Xu;exports.AnimationTrackHandler=Rc;exports.AnimationUtils=Hn;exports.Animator=lt;exports.AnimatorConditionMode=Zs;exports.AnimatorController=Vi;exports.AnimatorControllerParameterType=wg;exports.AnimatorStateInfo=Vl;exports.Antialiasing=bh;exports.Application=fn;exports.AssetDatabase=N0;exports.AssetReference=Z;exports.Attractor=al;exports.AudioExtension=Mr;exports.AudioListener=ds;exports.AudioSource=vi;exports.AudioTrackHandler=us;exports.Avatar=fo;exports.AvatarBlink_Simple=Sr;exports.AvatarEyeLook_Rotation=Lg;exports.AvatarLoader=Xx;exports.AvatarMarker=Oe;exports.AvatarModel=Xy;exports.Avatar_Brain_LookAt=Ac;exports.Avatar_MouthShapes=sh;exports.Avatar_MustacheShake=Ag;exports.Avatar_POI=lr;exports.Axes=fa;exports.AxesHelper=qa;exports.BUILD_TIME=_c;exports.BaseUIComponent=Wi;exports.BasicIKConstraint=jg;exports.BehaviorExtension=hy;exports.BehaviorModel=St;exports.BloomEffect=hf;exports.BoxCollider=Vu;exports.BoxGizmo=Tr;exports.BoxHelperComponent=bt;exports.Button=Ds;exports.ButtonsFactory=Fi;exports.CallDirection=Sw;exports.CallInfo=ls;exports.Camera=si;exports.CameraTargetReachedEvent=Ec;exports.Canvas=Fa;exports.CanvasGroup=po;exports.CapsuleCollider=bs;exports.ChangeMaterialOnClick=iy;exports.ChangeTransformOnClick=kr;exports.CharacterController=Cr;exports.CharacterControllerInput=Cs;exports.ChromaticAberration=vh;exports.CircularBuffer=_i;exports.ClearFlags=ar;exports.ClickThrough=wf;exports.ClipExtrapolation=Mn;exports.Collider=Xi;exports.Collision=qv;exports.CollisionDetectionMode=Au;exports.ColorAdjustments=ko;exports.ColorBySpeedModule=rl;exports.ColorOverLifetimeModule=af;exports.Component=BP;exports.Component$1=E;exports.ComponentLifecycleEvents=gu;exports.Components=OA;exports.ConnectionEvents=x0;exports.ContactPoint=Hv;exports.ContactShadows=oh;exports.Context=U;exports.ContextArgs=Q1;exports.ContextEvent=ae;exports.ContextRegistry=ce;exports.ControlTrackHandler=Bu;exports.CursorFollow=Vr;exports.CustomBranding=Rr;exports.CustomShader=ve;exports.DefaultReflectionMode=Kd;exports.Deletable=zg;exports.DeleteBox=ro;exports.DepthOfField=bn;exports.DeviceFlag=$u;exports.DocumentExtension=Qx;exports.DragControls=Ko;exports.DragMode=Ng;exports.DropListener=Os;exports.Duplicatable=qg;exports.EffectWrapper=jc;exports.EmissionModule=Rs;exports.EmphasizeOnClick=Ka;exports.EngineLoadingView=Bc;exports.EnvironmentScene=Fu;exports.EventList=ne;exports.EventListEvent=Tu;exports.EventSystem=Gt;exports.EventTrigger=Hu;exports.FieldWithDefault=zw;exports.FileReference=ir;exports.FileReferenceSerializer=m0;exports.FileSpawnModel=xM;exports.File_Event=Tw;exports.FixedJoint=Cy;exports.Fog=il;exports.FrameEvent=ge;exports.GENERATOR=Ea;exports.GameObject=S;exports.Gizmos=B;exports.GltfExport=Zg;exports.GltfExportBox=Yg;exports.Gradient=Dr;exports.Graphic=ph;exports.GraphicRaycaster=Du;exports.Graphics=co;exports.GridHelper=nl;exports.GridLayoutGroup=gy;exports.GroundProjectedEnv=Xn;exports.GroupActionModel=Zo;exports.HideFlags=_u;exports.HideOnStart=Ii;exports.HingeJoint=gh;exports.HorizontalLayoutGroup=my;exports.HostData=$C;exports.Image=dl;exports.ImageReference=tr;exports.ImageReferenceSerializer=p0;exports.InheritVelocityModule=Ey;exports.Input=y0;exports.InputEventQueue=ti;exports.InputEvents=Pe;exports.InputField=zy;exports.InstanceHandle=cr;exports.InstancingHandler=gr;exports.InstancingUtil=Ni;exports.InstantiateEvent=t0;exports.InstantiateIdProvider=xt;exports.InstantiateOptions=gn;exports.Interactable=Ug;exports.JoinedRoomResponse=b1;exports.KeyEventArgs=d1;exports.Keyframe=oi;exports.LODGroup=sf;exports.LODModel=sl;exports.LeftRoomResponse=v1;exports.Light=Ot;exports.LightData=k0;exports.LimitVelocityOverLifetimeModule=nt;exports.LoadingElementOptions=dA;exports.LogStats=Fg;exports.LogType=gi;exports.LookAt=Ny;exports.LookAtConstraint=xr;exports.MODULES=T;exports.MainModule=Lt;exports.MarkerTrackHandler=ju;exports.MarkerType=Pg;exports.MaskableGraphic=mh;exports.MaterialPropertyBlock=ys;exports.Mathf=I;exports.MeshCollider=wo;exports.MeshRenderer=lh;exports.MinMaxCurve=H;exports.MinMaxGradient=Lr;exports.NEEDLE_ENGINE_FEATURE_FLAGS=Xm;exports.NEKeyboardEvent=Fl;exports.NEPointerEvent=ss;exports.NeedleButtonElement=Wx;exports.NeedleEngineWebComponent=qy;exports.NeedleMenu=Yn;exports.NeedlePatchesKey=_d;exports.NeedleXRController=ug;exports.NeedleXRSession=q;exports.NeedleXRSync=F0;exports.NeedleXRUtils=z0;exports.NestedGltf=ol;exports.NetworkConnection=C0;exports.NetworkedStreamEvents=Un;exports.NetworkedStreams=nh;exports.Networking=My;exports.NewInstanceModel=n0;exports.NoiseModule=me;exports.ObjectRaycaster=$i;exports.ObjectUtils=_o;exports.OffsetConstraint=Ar;exports.OneEuroFilter=gd;exports.OneEuroFilterXYZ=Um;exports.OpenURL=ul;exports.OrbitControls=he;exports.Outline=tl;exports.OwnershipEvent=S0;exports.OwnershipModel=lg;exports.PUBLIC_KEY=no;exports.Padding=Er;exports.ParticleBurst=du;exports.ParticleSubEmitter=Ry;exports.ParticleSystem=Ic;exports.ParticleSystemBaseBehaviour=Mo;exports.ParticleSystemRenderer=Yi;exports.ParticleSystemShapeType=hu;exports.PeerHandle=fs;exports.PeerNetworking=w0;exports.Physics=Ia;exports.PhysicsExtension=dy;exports.PhysicsMaterialCombine=st;exports.PixelationEffect=wh;exports.PlayAnimationOnClick=Dc;exports.PlayAudioOnClick=uo;exports.PlayableDirector=ja;exports.PlayerColor=Ua;exports.PlayerState=zi;exports.PlayerStateEvent=lx;exports.PlayerSync=ay;exports.PlayerView=P0;exports.PlayerViewManager=O0;exports.PointerEventData=Zc;exports.PointerType=vu;exports.PostProcessingEffect=Xe;exports.PostProcessingEffectOrder=et;exports.PostProcessingHandler=za;exports.PreliminaryAction=Za;exports.PreliminaryTrigger=hh;exports.PrimitiveType=Va;exports.Progress=oe;exports.PromiseAllWithErrors=Bm;exports.PromiseErrorResult=Lp;exports.RGBAColor=te;exports.RapierPhysics=Oa;exports.RawImage=_f;exports.RaycastOptions=bo;exports.Rect=dx;exports.RectTransform=mn;exports.ReflectionProbe=os;exports.RegisteredAnimationInfo=so;exports.RemoteSkybox=Uu;exports.RenderTexture=Bn;exports.RenderTextureSerializer=pw;exports.Renderer=Ht;exports.RendererData=M0;exports.RendererLightmap=Wg;exports.Rigidbody=$e;exports.RigidbodyConstraints=Ve;exports.RoomEvents=K;exports.RotationBySpeedModule=Qi;exports.RotationOverLifetimeModule=_n;exports.SceneLightSettings=ou;exports.SceneSwitcher=We;exports.ScreenCapture=Eo;exports.ScreenSpaceAmbientOcclusion=Ts;exports.ScreenSpaceAmbientOcclusionN8=vn;exports.ScrollFollow=Ls;exports.SeeThrough=As;exports.SendQueue=ln;exports.SerializationContext=ng;exports.SetActiveOnClick=ny;exports.ShadowCatcher=Ph;exports.ShapeModule=ky;exports.ShapeOverlapResult=Xv;exports.SharpeningEffect=Sh;exports.SignalAsset=Iu;exports.SignalReceiver=eh;exports.SignalReceiverEvent=Jc;exports.SignalTrackHandler=Tc;exports.Size=hx;exports.SizeBySpeedModule=di;exports.SizeOverLifetimeModule=Ir;exports.SkinnedMeshRenderer=Gg;exports.SmoothFollow=ff;exports.SpatialGrabRaycaster=fr;exports.SpatialHtml=Eh;exports.SpatialTrigger=pf;exports.SpatialTriggerReceiver=Gn;exports.SpectatorCamera=mf;exports.SphereCollider=Xa;exports.SphereIntersection=mg;exports.SplineContainer=zr;exports.SplineData=qn;exports.SplineWalker=Zi;exports.Sprite=Ms;exports.SpriteData=Pa;exports.SpriteRenderer=ci;exports.SpriteSheet=Ba;exports.StateMachineBehaviour=VP;exports.StreamEndedEvent=Rg;exports.StreamReceivedEvent=xw;exports.SubEmitterSystem=uu;exports.SyncedCamera=jy;exports.SyncedRoom=wn;exports.SyncedTransform=pn;exports.TapGestureTrigger=oy;exports.TeleportTarget=Ju;exports.TestRunner=By;exports.TestSimulateUserData=Fy;exports.Text=Dt;exports.TextBuilder=fy;exports.TextExtension=tf;exports.TextureSheetAnimationModule=It;exports.TiltShiftEffect=Zn;exports.Time=E0;exports.ToneMappingEffect=mo;exports.TrackHandler=Ha;exports.TrackType=fi;exports.TrailModule=Le;exports.TransformData=Ae;exports.TransformGizmo=Nr;exports.TriggerBuilder=Rt;exports.TriggerModel=ao;exports.TypeStore=P;exports.UIRaycastUtils=xg;exports.UIRootComponent=uh;exports.USDDocument=Jg;exports.USDObject=qe;exports.USDWriter=Yw;exports.USDZExporter=Kw;exports.USDZExporter$1=Wn;exports.USDZText=ma;exports.USDZUIExtension=_y;exports.UriSerializer=mw;exports.UsageMarker=rh;exports.UserJoinedOrLeftRoomModel=w1;exports.VERSION=ii;exports.VariantAction=ty;exports.VelocityOverLifetimeModule=Fe;exports.VerticalLayoutGroup=py;exports.VideoPlayer=tt;exports.ViewDevice=gs;exports.Vignette=Fr;exports.VisibilityAction=dh;exports.Voip=vo;exports.Volume=Ur;exports.VolumeParameter=z;exports.VolumeProfile=lf;exports.WaitForFrames=a1;exports.WaitForPromise=g0;exports.WaitForSeconds=sg;exports.Watch=ms;exports.WebARCameraBackground=Th;exports.WebARSessionRoot=Ui;exports.WebXR=ef;exports.WebXRButtonFactory=lo;exports.WebXRImageTracking=Ah;exports.WebXRImageTrackingModel=js;exports.WebXRPlaneTracking=Bs;exports.WebXRTrackedImage=Na;exports.XRControllerFollow=Is;exports.XRControllerModel=vs;exports.XRControllerMovement=xi;exports.XRFlag=ji;exports.XRRig=Cf;exports.XRState=Wt;exports.XRStateFlag=Ln;exports.__Ignore=Yx;exports.__internalNotifyObjectDestroyed=gP;exports.activeInHierarchyFieldName=jn;exports.addAttributeChangeCallback=Im;exports.addComponent=hn;exports.addCustomExtensionPlugin=HM;exports.addNewComponent=or;exports.addPatch=yu;exports.apply=Ou;exports.applyHMRChanges=jP;exports.applyPrototypeExtensions=Y0;exports.beginListenDestroy=i0;exports.beginListenInstantiate=o0;exports.binaryIdentifierCasts=og;exports.build_scene_functions=X1;exports.builtinComponentKeyName=Ho;exports.calculateProgress01=Hy;exports.clearMessages=PS;exports.colorSerializer=QP;exports.compareAssociation=c0;exports.componentSerializer=Md;exports.copyTexture=Tv;exports.createMotion=uw;exports.debugNet=Yt;exports.debugOwner=Ul;exports.decompressGpuTexture=tx;exports.deepClone=Uc;exports.delay=_s;exports.delayForFrames=zc;exports.deserializeObject=Qd;exports.destroy=bi;exports.destroyComponentInstance=rw;exports.determineMimeTypeFromExtension=Aw;exports.disposeObjectResources=we;exports.disposeStream=zn;exports.editorGuidKeyName=ec;exports.enableSpatialConsole=_a;exports.euler=KP;exports.eventListSerializer=tO;exports.exportAsGLTF=SA;exports.findByGuid=_g;exports.findObjectOfType=Ga;exports.findObjectsOfType=lw;exports.findResourceUsers=gg;exports.fitCamera=gw;exports.fitObjectIntoVolume=Dv;exports.foreachComponent=ur;exports.foreachComponentEnumerator=ku;exports.forward=WS;exports.generateQRCode=L0;exports.generateSeed=s0;exports.getBoundingBox=ri;exports.getCameraController=Sv;exports.getComponent=vr;exports.getComponentInChildren=Yc;exports.getComponentInParent=Pc;exports.getComponents=Qc;exports.getComponentsInChildren=Wa;exports.getComponentsInParent=Eu;exports.getFormattedDate=Hw;exports.getIconElement=wt;exports.getIconTexture=Kp;exports.getLoader=un;exports.getOrAddComponent=Xc;exports.getParam=x;exports.getParentHierarchyPath=qS;exports.getPath=nS;exports.getPeerOptions=m1;exports.getPeerjsInstance=v0;exports.getResourceUserCount=_P;exports.getTempColor=Mv;exports.getTempQuaternion=ei;exports.getTempVector=F;exports.getUrlParams=Fc;exports.getVisibleInCustomShadowRendering=Av;exports.getWorldDirection=kv;exports.getWorldEuler=Vm;exports.getWorldPosition=Y;exports.getWorldQuaternion=pe;exports.getWorldRotation=mu;exports.getWorldScale=je;exports.hasCommercialLicense=$n;exports.hasIndieLicense=Wc;exports.hasPointerEventComponent=iu;exports.hasProLicense=Vn;exports.hideDebugConsole=Bv;exports.imageToCanvas=ix;exports.initEngine=_A;exports.instantiate=ho;exports.invokeLoadedImportPluginHooks=Uw;exports.invokeXRSessionEnd=D0;exports.invokeXRSessionStart=A0;exports.isActiveInHierarchy=K0;exports.isActiveSelf=$a;exports.isAndroidDevice=cS;exports.isAnimationAction=Rv;exports.isComponent=Ym;exports.isDebugMode=Jx;exports.isDesktop=oS;exports.isDestroyed=dr;exports.isDevEnvironment=A;exports.isDisposed=mP;exports.isExporting=wA;exports.isGLTFModel=Wv;exports.isHostedOnGlitch=dv;exports.isHotReloadEnabled=lm;exports.isHotReloading=LP;exports.isIPad=aS;exports.isIconElement=I0;exports.isLocalNetwork=yi;exports.isMacOS=dS;exports.isMobileDevice=rS;exports.isMozillaXR=hS;exports.isQuest=pS;exports.isResourceTrackingEnabled=$0;exports.isSafari=fS;exports.isUsingInstancing=Mu;exports.isiOS=uS;exports.isiPad=lS;exports.loadAsset=nA;exports.loadPMREM=Eg;exports.loadSync=Gy;exports.logHierarchy=$d;exports.lookAtInverse=jS;exports.lookAtObject=Nc;exports.lookAtScreenPoint=BS;exports.makeId=tS;exports.makeIdFromRandomWords=pv;exports.makeNameSafe=wi;exports.markAsInstancedRendered=Z0;exports.microphonePermissionsGranted=mS;exports.nameof=Zx;exports.nameofFactory=uv;exports.objectSerializer=fw;exports.offXRSessionEnd=A1;exports.offXRSessionStart=T1;exports.onAfterRender=IC;exports.onBeforeRender=LC;exports.onClear=AC;exports.onDestroy=DC;exports.onInitialized=Km;exports.onStart=bu;exports.onUpdate=Zv;exports.onXRSessionEnd=hg;exports.onXRSessionStart=xu;exports.parseSync=Vx;exports.placeOnSurface=Lv;exports.postprocessFBXMaterials=Gm;exports.prefix=lO;exports.pushState=fv;exports.randomNumber=iS;exports.registerBinaryType=rg;exports.registerComponent=Cu;exports.registerComponentExtension=Vg;exports.registerCustomEffectType=Ki;exports.registerExportExtensions=$g;exports.registerExtensions=au;exports.registerHotReloadType=cw;exports.registerLoader=Yv;exports.registerPrefabProvider=a0;exports.registerPrototypeExtensions=yg;exports.registerType=qm;exports.relativePathPrefix=gv;exports.removeAttributeChangeCallback=jm;exports.removeComponent=vg;exports.removeCustomImportExtensionType=qM;exports.removePatch=kC;exports.resolveUrl=ws;exports.sanitizeString=mv;exports.saveImage=Ux;exports.screenshot=jT;exports.screenshot2=Wy;exports.sendDestroyed=Jm;exports.serializable=f;exports.serializeObject=d0;exports.serializeable=Be;exports.setActive=sc;exports.setAllowBalloonMessages=vv;exports.setAllowOverlayMessages=wS;exports.setAutoFitEnabled=Nd;exports.setCameraController=Bp;exports.setDestroyed=ew;exports.setDevEnvironment=RS;exports.setDisposable=G0;exports.setDontDestroy=na;exports.setOrAddParamsToUrl=Dp;exports.setParam=eS;exports.setParamWithoutReload=yc;exports.setPeerOptions=g1;exports.setResourceTrackingEnabled=pP;exports.setState=Dm;exports.setVisibleInCustomShadowRendering=Wm;exports.setWorldEuler=$m;exports.setWorldPosition=at;exports.setWorldPositionXYZ=hr;exports.setWorldQuaternion=dn;exports.setWorldQuaternionXYZW=Nm;exports.setWorldRotation=Ev;exports.setWorldRotationXYZ=Vc;exports.setWorldScale=ka;exports.showBalloonError=$c;exports.showBalloonMessage=Se;exports.showBalloonWarning=fe;exports.showDebugConsole=Hm;exports.slerp=Pv;exports.syncDestroy=Gc;exports.syncField=kg;exports.syncInstantiate=eg;exports.textureToCanvas=XS;exports.toSourceId=yv;exports.tryCastBinary=_0;exports.tryDetermineMimetypeFromBinary=Lw;exports.tryDetermineMimetypeFromURL=Dw;exports.tryFindObject=Ma;exports.tryGetGuid=b0;exports.unregisterHotReloadType=hw;exports.unwatchWrite=Lm;exports.useForAutoFit=Cv;exports.validate=Ct;exports.watchWrite=pu;
|
|
@@ -2246,9 +2246,9 @@ To('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUIL
|
|
|
2246
2246
|
To('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
|
|
2247
2247
|
To('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.0.0";');
|
|
2248
2248
|
To('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
|
|
2249
|
-
To('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Mar 27 2026
|
|
2249
|
+
To('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Mar 27 2026 15:06:29 GMT+0000 (Coordinated Universal Time)";');
|
|
2250
2250
|
To('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
|
|
2251
|
-
const Pi = "5.0.0", Lc = "undefined", Xd = "Fri Mar 27 2026
|
|
2251
|
+
const Pi = "5.0.0", Lc = "undefined", Xd = "Fri Mar 27 2026 15:06:29 GMT+0000 (Coordinated Universal Time)";
|
|
2252
2252
|
y0 && console.log(`Engine version: ${Pi} (generator: ${Lc})
|
|
2253
2253
|
Project built at ${Xd}`);
|
|
2254
2254
|
const yr = NEEDLE_PUBLIC_KEY, ws = "needle_isActiveInHierarchy", fa = "builtin_components", yd = "needle_editor_guid";
|
|
@@ -140,7 +140,7 @@ void main(){
|
|
|
140
140
|
#__vconsole .vc-mask {
|
|
141
141
|
overflow: hidden;
|
|
142
142
|
}
|
|
143
|
-
`,kr?.prepend(i),o===!0&&u_()<=0&&N_(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),xc=!1,pi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function dk(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),pi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}const Cg="padding: 10px; font-family: monospace;",V_="margin-bottom: 10px;",Mr="margin-bottom: 10px; margin-top: 15px;",uk="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",$_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",pk=$_,mk=$_+" word-break: break-all;";function Xn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${uk}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${pk}'>${i.label}</td><td style='${mk}'>${n}</td></tr>`}return t+="</tbody></table>",t}function H_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function gk(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("device-utilities","\u{1F4F1} Device Info");return o.on("renderTab",function(e){let t=`<div style='${Cg}'>`;const i=Pk();t+=`<h3 style='${V_}'>Device: ${i}</h3>`,t+=Xn([{label:"\u{1F4BB} Desktop",value:I.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:I.isMobileDevice()},{label:"\u{1F34E} iOS",value:I.isiOS()},{label:"\u{1F4F1} iPad",value:I.isiPad()},{label:"\u{1F916} Android",value:I.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:I.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:I.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:I.isMacOS()},{label:"\u{1F453} VisionOS",value:I.isVisionOS()},{label:"\u{1F9ED} Safari",value:I.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:I.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:I.supportsQuickLookAR()}],!0);const n=[],s=I.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=I.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=I.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=Xn(n,!1)),t+="</div>",t+=`<div style='${Cg} margin-top: 20px;'>`,t+=`<h3 style='${V_}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"\u2705":"\u274C"},{label:"WebGPU",value:"gpu"in navigator?"\u2705":"\u274C"},{label:"WebGL 2",value:H_()}];t+=Xn(l,!1),t+="</div>",e(t)}),o}function fk(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("graphics-info","\u{1F3A8} Graphics Info");return o.on("renderTab",async function(e){let t=`<div style='${Cg}'>`;const i=yk();i.length>0&&(t+=`<h3 style='${Mr}'>General GPU Info</h3>`,t+=Xn(i,!1));const n=_k();n.length>0&&(t+=`<h3 style='${Mr}'>WebGL</h3>`,t+=Xn(n,!1));const s=vk();s.length>0&&(t+=`<h3 style='${Mr}'>WebGL 2 Features</h3>`,t+=Xn(s,!1));const r=wk();r.length>0&&(t+=`<h3 style='${Mr}'>WebGL Limits</h3>`,t+=Xn(r,!1));const a=xk();a.length>0&&(t+=`<h3 style='${Mr}'>Texture Formats</h3>`,t+=Xn(a,!1));const l=await Sk();if(l.length>0&&(t+=`<h3 style='${Mr}'>WebGPU</h3>`,t+=Xn(l,!1)),I.isSafari()){const c=Ck();c.length>0&&(t+=`<h3 style='${Mr}'>Safari GPU Info</h3>`,t+=Xn(c,!1))}t+="</div>",e(t)}),o}function yk(){const o=[],e=window.devicePixelRatio;o.push({label:"Device Pixel Ratio",value:e.toString()}),o.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),o.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const t=I.isMobileDevice()?150:96,i=screen.width/t,n=screen.height/t,s=i*2.54,r=n*2.54;o.push({label:"Estimated Width (cm)",value:s.toFixed(1)}),o.push({label:"Estimated Height (cm)",value:r.toFixed(1)});const a=G_();if(a){o.push({label:"GPU",value:a.renderer}),o.push({label:"Driver",value:a.vendor}),o.push({label:"ANGLE",value:a.angle||"Not detected"});const l=bk(a.renderer);l&&(l.manufacturer&&o.push({label:"Manufacturer",value:l.manufacturer}),l.cardVersion&&o.push({label:"Card Version",value:l.cardVersion}),l.brand&&o.push({label:"Brand",value:l.brand}),o.push({label:"Integrated",value:l.integrated?"Yes":"No"}),l.layer&&o.push({label:"WebGL Layer",value:l.layer}))}return o}function bk(o){if(!o)return null;const e=(l,c)=>{const h=c.match(l);return h&&h[0]},t=e(/(ANGLE)/g,o)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,o)||o,n=i.split(" ");n.shift();const s=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:s,cardVersion:r,brand:a,integrated:s==="Intel",layer:t,card:i}}function _k(){const o=[],e=G_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:H_()})),o}function vk(){const o=[];try{const e=document.createElement("canvas").getContext("webgl2");if(!e)return o;o.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"\u2705":"\u274C"}),o.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"\u2705":"\u274C"}),o.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"\u2705":"\u274C"}),o.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"\u2705":"\u274C"}),o.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"\u2705":"\u274C"}),o.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"\u2705":"\u274C"})}catch{}return o}function wk(){const o=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return o;const i=t instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(o.push({label:"\u26A1 Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function xk(){const o=[];try{document.createElement("canvas").getContext("webgl")&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=document.createElement("canvas").getContext("webgl2");e&&(o.push({label:"WebGL 2 RGBA32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 RGB32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 R11F_G11F_B10F",value:"\u2705"}),o.push({label:"WebGL 2 RGB565",value:"\u2705"}),o.push({label:"WebGL 2 RGB5_A1",value:"\u2705"}),o.push({label:"WebGL 2 RGBA4444",value:"\u2705"}))}catch{}return o}async function Sk(){const o=[];if(!("gpu"in navigator))return o.push({label:"\u{1F680} WebGPU Support",value:"\u274C Not supported"}),o;o.push({label:"\u{1F680} WebGPU Support",value:"\u2705 Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return o.push({label:"\u{1F3AF} Adapter",value:"No adapter available"}),o;o.push({label:"\u{1F3AF} Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();o.push({label:"\u{1F527} Device",value:t.label||"WebGPU Device"}),o.push({label:"\u{1F4CF} Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),o.push({label:"\u{1F4D0} Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),o.push({label:"\u{1F4CA} Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),o.push({label:"\u{1F4BE} Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),o.push({label:"\u{1F517} Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){o.push({label:"\u274C Error",value:e.message})}return o}function G_(){try{const o=document.createElement("canvas"),e=o.getContext("webgl2")||o.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),s=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:s,angle:r}}catch{return null}}function Ck(){const o=[];try{const e=document.createElement("canvas").getContext("webgl");if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&o.push({label:"\u{1F34E} Apple GPU",value:i})}}}catch{}try{const e=document.createElement("canvas").getContext("webgl");e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function Pk(){return I.isQuest()?"Meta Quest":I.isVisionOS()?"Vision Pro":I.isiOS()?I.isiPad()?"iPad":"iPhone/iPod":I.isAndroidDevice()?"Android Device":I.isMozillaXR()?"Mozilla XR Browser":I.isNeedleAppClip()?"Needle App Clip":I.isMacOS()?"Mac":I.isDesktop()?"Desktop PC":"Unknown Device"}function Ok(){return document.querySelector("#__vconsole .vc-switch")||null}function kk(){return document.querySelector("#__vconsole")||null}const Kd=w("debugtypes");class Mk{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){Kd&&console.warn("TypeStore: Created",this)}add(e,t){Kd&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?Kd&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){Kd&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const Rk=Symbol("BuiltInType"),C=new Mk,Pg=function(o){C.get(o.name)||C.add(o.name,o)};class Ek{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}class Qn{static testIfRootCanAnimate(e,t){const i=e.getRoot();return i&&(i.userData.static||i.matrixAutoUpdate===!1||i.matrixWorldAutoUpdate===!1)?((t===!0||t===void 0&&A())&&console.warn(`AnimationUtils: The root object (${i.name||i.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:i.userData.static,name:i.userData.name,tag:i.userData.tag,matrixAutoUpdate:i.matrixAutoUpdate,matrixWorldAutoUpdate:i.matrixWorldAutoUpdate}),!1):!0}static tryGetActionsFromMixer(e){return e._actions||null}static tryGetAnimationClipsFromObjectHierarchy(e,t){if(t||(t=new Array),e)e.animations&&t.push(...e.animations);else return t;if(e.children)for(const i of e.children)this.tryGetAnimationClipsFromObjectHierarchy(i,t);return t}static autoplayAnimations(e){if(!e||!e.animations)return console.debug("No animations found in file"),null;const t="scene"in e?e.scene:e,i=new Array;for(let s=0;s<e.animations.length;s++){const r=e.animations[s];if(!r.tracks||r.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const a in r.tracks){const l=r.tracks[a],c=La.parseTrackName(l.name);let h=La.findNode(t,c.nodeName);if(!h){const p=l.__objectName??l.name.substring(0,l.name.indexOf("."));if(h=t.getObjectByProperty("uuid",p),!h)continue}let d=n(h)||n(t);if(!d){const p=C.get("Animation");if(d=t.addComponent(p),!d){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}i.push(d),d.addClip&&d.addClip(r)}}return i;function n(s){if(!s)return null;const r=s.userData?.components;if(r&&r.length>0)for(let a=0;a<r.length;a++){const l=r[a];if(l.isAnimationComponent===!0)return l}return n(s.parent)}}static emptyClip(){return new Ri("empty",0,[])}static createScaleClip(e){const t=e?.duration??.3;let i={x:1,y:1,z:1};e?.scale!==void 0&&(typeof e.scale=="number"?i={x:e.scale,y:e.scale,z:e.scale}:i=e.scale);const n=e?.type??"linear",s=e?.scaleFactor??1.2,r=new Array,a=new Array;switch(n){case"linear":r.push(0,t),a.push(i.x,i.y,i.z,i.x*s,i.y*s,i.z*s);break;case"spring":r.push(0,t*.3,t*.5,t*.7,t*.9,t),a.push(i.x,i.y,i.z,i.x*s,i.y*s,i.z*s,i.x*.9,i.y*.9,i.z*.9,i.x*1.05,i.y*1.05,i.z*1.05,i.x*.98,i.y*.98,i.z*.98,i.x,i.y,i.z);break}const l=new oC(".scale",r,a);return new Ri("scale",r[r.length-1],[l])}}const qe=function(o){return u(o)},u=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=q_(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=q_(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function q_(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const X_=w("debugcomponentevents");class Jd{static eventListeners=new Map;static addComponentLifecylceEventListener(e,t){this.eventListeners.has(e)&&this.eventListeners.set(e,[]);let i=this.eventListeners.get(e);i||(i=[]),i.push(t),this.eventListeners.set(e,i),X_&&console.log("Added event listener for "+e,this.eventListeners)}static removeComponentLifecylceEventListener(e,t){const i=this.eventListeners.get(e);if(!i)return;const n=i.indexOf(t);n<0||i.splice(n,1)}static dispatchComponentLifecycleEvent(e,t){const i=this.eventListeners.get(e);if(X_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const Q_=w("debugdefines");Os('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),Os('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),Os('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),Os('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),Os('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.0.0";'),Os('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),Os('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Mar 27 2026 14:01:21 GMT+0000 (Coordinated Universal Time)";'),Os('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const mi="5.0.0",$a="undefined",Sc="Fri Mar 27 2026 14:01:21 GMT+0000 (Coordinated Universal Time)";Q_&&console.log(`Engine version: ${mi} (generator: ${$a})
|
|
143
|
+
`,kr?.prepend(i),o===!0&&u_()<=0&&N_(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),xc=!1,pi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function dk(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),pi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}const Cg="padding: 10px; font-family: monospace;",V_="margin-bottom: 10px;",Mr="margin-bottom: 10px; margin-top: 15px;",uk="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",$_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",pk=$_,mk=$_+" word-break: break-all;";function Xn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${uk}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${pk}'>${i.label}</td><td style='${mk}'>${n}</td></tr>`}return t+="</tbody></table>",t}function H_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function gk(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("device-utilities","\u{1F4F1} Device Info");return o.on("renderTab",function(e){let t=`<div style='${Cg}'>`;const i=Pk();t+=`<h3 style='${V_}'>Device: ${i}</h3>`,t+=Xn([{label:"\u{1F4BB} Desktop",value:I.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:I.isMobileDevice()},{label:"\u{1F34E} iOS",value:I.isiOS()},{label:"\u{1F4F1} iPad",value:I.isiPad()},{label:"\u{1F916} Android",value:I.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:I.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:I.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:I.isMacOS()},{label:"\u{1F453} VisionOS",value:I.isVisionOS()},{label:"\u{1F9ED} Safari",value:I.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:I.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:I.supportsQuickLookAR()}],!0);const n=[],s=I.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=I.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=I.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=Xn(n,!1)),t+="</div>",t+=`<div style='${Cg} margin-top: 20px;'>`,t+=`<h3 style='${V_}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"\u2705":"\u274C"},{label:"WebGPU",value:"gpu"in navigator?"\u2705":"\u274C"},{label:"WebGL 2",value:H_()}];t+=Xn(l,!1),t+="</div>",e(t)}),o}function fk(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("graphics-info","\u{1F3A8} Graphics Info");return o.on("renderTab",async function(e){let t=`<div style='${Cg}'>`;const i=yk();i.length>0&&(t+=`<h3 style='${Mr}'>General GPU Info</h3>`,t+=Xn(i,!1));const n=_k();n.length>0&&(t+=`<h3 style='${Mr}'>WebGL</h3>`,t+=Xn(n,!1));const s=vk();s.length>0&&(t+=`<h3 style='${Mr}'>WebGL 2 Features</h3>`,t+=Xn(s,!1));const r=wk();r.length>0&&(t+=`<h3 style='${Mr}'>WebGL Limits</h3>`,t+=Xn(r,!1));const a=xk();a.length>0&&(t+=`<h3 style='${Mr}'>Texture Formats</h3>`,t+=Xn(a,!1));const l=await Sk();if(l.length>0&&(t+=`<h3 style='${Mr}'>WebGPU</h3>`,t+=Xn(l,!1)),I.isSafari()){const c=Ck();c.length>0&&(t+=`<h3 style='${Mr}'>Safari GPU Info</h3>`,t+=Xn(c,!1))}t+="</div>",e(t)}),o}function yk(){const o=[],e=window.devicePixelRatio;o.push({label:"Device Pixel Ratio",value:e.toString()}),o.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),o.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const t=I.isMobileDevice()?150:96,i=screen.width/t,n=screen.height/t,s=i*2.54,r=n*2.54;o.push({label:"Estimated Width (cm)",value:s.toFixed(1)}),o.push({label:"Estimated Height (cm)",value:r.toFixed(1)});const a=G_();if(a){o.push({label:"GPU",value:a.renderer}),o.push({label:"Driver",value:a.vendor}),o.push({label:"ANGLE",value:a.angle||"Not detected"});const l=bk(a.renderer);l&&(l.manufacturer&&o.push({label:"Manufacturer",value:l.manufacturer}),l.cardVersion&&o.push({label:"Card Version",value:l.cardVersion}),l.brand&&o.push({label:"Brand",value:l.brand}),o.push({label:"Integrated",value:l.integrated?"Yes":"No"}),l.layer&&o.push({label:"WebGL Layer",value:l.layer}))}return o}function bk(o){if(!o)return null;const e=(l,c)=>{const h=c.match(l);return h&&h[0]},t=e(/(ANGLE)/g,o)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,o)||o,n=i.split(" ");n.shift();const s=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:s,cardVersion:r,brand:a,integrated:s==="Intel",layer:t,card:i}}function _k(){const o=[],e=G_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:H_()})),o}function vk(){const o=[];try{const e=document.createElement("canvas").getContext("webgl2");if(!e)return o;o.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"\u2705":"\u274C"}),o.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"\u2705":"\u274C"}),o.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"\u2705":"\u274C"}),o.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"\u2705":"\u274C"}),o.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"\u2705":"\u274C"}),o.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"\u2705":"\u274C"})}catch{}return o}function wk(){const o=[];try{const e=document.createElement("canvas"),t=e.getContext("webgl2")||e.getContext("webgl");if(!t)return o;const i=t instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:t.getParameter(t.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:t.getParameter(t.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:t.getParameter(t.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS).toString()}),i&&(o.push({label:"\u26A1 Max Samples",value:t.getParameter(t.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:t.getParameter(t.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function xk(){const o=[];try{document.createElement("canvas").getContext("webgl")&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=document.createElement("canvas").getContext("webgl2");e&&(o.push({label:"WebGL 2 RGBA32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 RGB32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 R11F_G11F_B10F",value:"\u2705"}),o.push({label:"WebGL 2 RGB565",value:"\u2705"}),o.push({label:"WebGL 2 RGB5_A1",value:"\u2705"}),o.push({label:"WebGL 2 RGBA4444",value:"\u2705"}))}catch{}return o}async function Sk(){const o=[];if(!("gpu"in navigator))return o.push({label:"\u{1F680} WebGPU Support",value:"\u274C Not supported"}),o;o.push({label:"\u{1F680} WebGPU Support",value:"\u2705 Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return o.push({label:"\u{1F3AF} Adapter",value:"No adapter available"}),o;o.push({label:"\u{1F3AF} Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();o.push({label:"\u{1F527} Device",value:t.label||"WebGPU Device"}),o.push({label:"\u{1F4CF} Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),o.push({label:"\u{1F4D0} Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),o.push({label:"\u{1F4CA} Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),o.push({label:"\u{1F4BE} Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),o.push({label:"\u{1F517} Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){o.push({label:"\u274C Error",value:e.message})}return o}function G_(){try{const o=document.createElement("canvas"),e=o.getContext("webgl2")||o.getContext("webgl");if(!e)return null;const t=e.getExtension("WEBGL_debug_renderer_info"),i=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),n=t?e.getParameter(t.UNMASKED_VENDOR_WEBGL):e.getParameter(e.VENDOR),s=e.getParameter(e.VERSION);let r;if(i&&i.includes("ANGLE")){const a=i.match(/ANGLE \(([^)]+)\)/);a&&(r=a[1])}return{renderer:i,vendor:n,version:s,angle:r}}catch{return null}}function Ck(){const o=[];try{const e=document.createElement("canvas").getContext("webgl");if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&o.push({label:"\u{1F34E} Apple GPU",value:i})}}}catch{}try{const e=document.createElement("canvas").getContext("webgl");e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function Pk(){return I.isQuest()?"Meta Quest":I.isVisionOS()?"Vision Pro":I.isiOS()?I.isiPad()?"iPad":"iPhone/iPod":I.isAndroidDevice()?"Android Device":I.isMozillaXR()?"Mozilla XR Browser":I.isNeedleAppClip()?"Needle App Clip":I.isMacOS()?"Mac":I.isDesktop()?"Desktop PC":"Unknown Device"}function Ok(){return document.querySelector("#__vconsole .vc-switch")||null}function kk(){return document.querySelector("#__vconsole")||null}const Kd=w("debugtypes");class Mk{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){Kd&&console.warn("TypeStore: Created",this)}add(e,t){Kd&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?Kd&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){Kd&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const Rk=Symbol("BuiltInType"),C=new Mk,Pg=function(o){C.get(o.name)||C.add(o.name,o)};class Ek{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}class Qn{static testIfRootCanAnimate(e,t){const i=e.getRoot();return i&&(i.userData.static||i.matrixAutoUpdate===!1||i.matrixWorldAutoUpdate===!1)?((t===!0||t===void 0&&A())&&console.warn(`AnimationUtils: The root object (${i.name||i.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:i.userData.static,name:i.userData.name,tag:i.userData.tag,matrixAutoUpdate:i.matrixAutoUpdate,matrixWorldAutoUpdate:i.matrixWorldAutoUpdate}),!1):!0}static tryGetActionsFromMixer(e){return e._actions||null}static tryGetAnimationClipsFromObjectHierarchy(e,t){if(t||(t=new Array),e)e.animations&&t.push(...e.animations);else return t;if(e.children)for(const i of e.children)this.tryGetAnimationClipsFromObjectHierarchy(i,t);return t}static autoplayAnimations(e){if(!e||!e.animations)return console.debug("No animations found in file"),null;const t="scene"in e?e.scene:e,i=new Array;for(let s=0;s<e.animations.length;s++){const r=e.animations[s];if(!r.tracks||r.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const a in r.tracks){const l=r.tracks[a],c=La.parseTrackName(l.name);let h=La.findNode(t,c.nodeName);if(!h){const p=l.__objectName??l.name.substring(0,l.name.indexOf("."));if(h=t.getObjectByProperty("uuid",p),!h)continue}let d=n(h)||n(t);if(!d){const p=C.get("Animation");if(d=t.addComponent(p),!d){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}i.push(d),d.addClip&&d.addClip(r)}}return i;function n(s){if(!s)return null;const r=s.userData?.components;if(r&&r.length>0)for(let a=0;a<r.length;a++){const l=r[a];if(l.isAnimationComponent===!0)return l}return n(s.parent)}}static emptyClip(){return new Ri("empty",0,[])}static createScaleClip(e){const t=e?.duration??.3;let i={x:1,y:1,z:1};e?.scale!==void 0&&(typeof e.scale=="number"?i={x:e.scale,y:e.scale,z:e.scale}:i=e.scale);const n=e?.type??"linear",s=e?.scaleFactor??1.2,r=new Array,a=new Array;switch(n){case"linear":r.push(0,t),a.push(i.x,i.y,i.z,i.x*s,i.y*s,i.z*s);break;case"spring":r.push(0,t*.3,t*.5,t*.7,t*.9,t),a.push(i.x,i.y,i.z,i.x*s,i.y*s,i.z*s,i.x*.9,i.y*.9,i.z*.9,i.x*1.05,i.y*1.05,i.z*1.05,i.x*.98,i.y*.98,i.z*.98,i.x,i.y,i.z);break}const l=new oC(".scale",r,a);return new Ri("scale",r[r.length-1],[l])}}const qe=function(o){return u(o)},u=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=q_(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=q_(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function q_(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const X_=w("debugcomponentevents");class Jd{static eventListeners=new Map;static addComponentLifecylceEventListener(e,t){this.eventListeners.has(e)&&this.eventListeners.set(e,[]);let i=this.eventListeners.get(e);i||(i=[]),i.push(t),this.eventListeners.set(e,i),X_&&console.log("Added event listener for "+e,this.eventListeners)}static removeComponentLifecylceEventListener(e,t){const i=this.eventListeners.get(e);if(!i)return;const n=i.indexOf(t);n<0||i.splice(n,1)}static dispatchComponentLifecycleEvent(e,t){const i=this.eventListeners.get(e);if(X_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const Q_=w("debugdefines");Os('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),Os('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),Os('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),Os('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),Os('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.0.0";'),Os('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),Os('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Mar 27 2026 15:06:29 GMT+0000 (Coordinated Universal Time)";'),Os('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const mi="5.0.0",$a="undefined",Sc="Fri Mar 27 2026 15:06:29 GMT+0000 (Coordinated Universal Time)";Q_&&console.log(`Engine version: ${mi} (generator: ${$a})
|
|
144
144
|
Project built at ${Sc}`);const Ps=NEEDLE_PUBLIC_KEY,Yn="needle_isActiveInHierarchy",Rr="builtin_components",Cc="needle_editor_guid";function Os(o){try{(0,eval)(o)}catch(e){Q_&&console.error(e)}}const Og={experimentalSmartHierarchyUpdate:!1},Di=Symbol("shadowDomOwner"),Tk=w("debugpatch");function eu(o,e,t,i){const n=Tk===e;if(!t&&!i)return;const s=e+"___needle";Ik(o,e,t,i);const r=Object.getOwnPropertyDescriptor(o,e),a=o[e];n&&console.log("Patch",o.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",o.constructor.name,e,r),typeof r.value=="function"&&(o[e]=Z_(r.value,o,e))):(n&&console.log("Create patch with new property",o.constructor.name,e,r),Object.defineProperty(o,e,{set:function(l){if(typeof l=="function")this[s]=Z_(l,o,e);else{const c=this[s];K_(o,e,this,c,l),this[s]=l,J_(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function Ak(o,e,t){const i=Mg(o,e);if(i)for(let n=i.length-1;n>=0;n--){const s=i[n];s.prefix===t&&(s.prefix=null),s.postfix===t&&(s.postfix=null),!s.prefix&&!s.postfix&&i.splice(n,1)}}const Y_=Symbol("Needle:Patches:WrappedFunction");function Z_(o,e,t){if(o[Y_])return o;const i=function(...n){K_(e,t,this,...n);const s=o.apply(this,n);return J_(e,t,this,s,...n),s};return i[Y_]=!0,i}const tu="Needle:Patches";function kg(){return globalThis[tu]||(globalThis[tu]=new WeakMap),globalThis[tu]}function Mg(o,e){const t=kg().get(o);return t?t.get(e):null}function Ik(o,e,t,i){let n=kg().get(o);n||(n=new Map,kg().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function K_(o,e,t,...i){if(!t)return;const n=Mg(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function J_(o,e,t,i,...n){if(!t)return;const s=Mg(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}function Lk(o,e){if(typeof window!==void 0&&window.SPECTOR){console.log(window.SPECTOR);const t=new URLSearchParams(window.location.search);if(t.has("spector")){let i=function(){if(n>o.time.frame)return window.requestAnimationFrame(()=>i());const r=s.captureCanvas(e);r&&r instanceof Promise?r.then(()=>s.displayUI()):s.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const s=new window.SPECTOR.Spector;s.spyCanvases=!0,i();return}else A()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function ev(o){const e=o;return!!(e.parser&&e.parser.json)}var iu=(o=>(o[o.None=0]="None",o[o.DontExport=1]="DontExport",o))(iu||{});const tv=Symbol("component-name");function Rg(o){return o&&o.isComponent}const Dk=Symbol("object"),Eg=new Ii(()=>new b,20);class iv{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return Eg.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Eg.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return Eg.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,s,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=s,this._tangentVelocity=r}}class nv{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 ov{object;collider;constructor(e,t){this.object=e,this.collider=t}}class Rm{constructor(e){this.context=e,this.root.style.cssText=`
|
|
145
145
|
position: absolute;
|
|
146
146
|
width: 1px; height: 1px;
|
package/dist/needle-engine.d.ts
CHANGED
|
@@ -22819,28 +22819,6 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
22819
22819
|
export { }
|
|
22820
22820
|
|
|
22821
22821
|
|
|
22822
|
-
declare module 'three' {
|
|
22823
|
-
interface SkinnedMesh {
|
|
22824
|
-
staticGenerator?: StaticGeometryGenerator;
|
|
22825
|
-
staticGeometry?: BufferGeometry;
|
|
22826
|
-
staticGeometryLastUpdate?: number;
|
|
22827
|
-
}
|
|
22828
|
-
interface Mesh {
|
|
22829
|
-
acceleratedRaycast?: any;
|
|
22830
|
-
}
|
|
22831
|
-
interface SkinnedMesh {
|
|
22832
|
-
/** @deprecated use autoUpdateMeshBvhInterval */
|
|
22833
|
-
autoUpdateMeshBVH?: boolean;
|
|
22834
|
-
/**
|
|
22835
|
-
* Interval in milliseconds to automatically update the mesh BVH. When set to >= 0 the BVH will be updated every x milliseconds.
|
|
22836
|
-
* @default undefined (disabled)
|
|
22837
|
-
*/
|
|
22838
|
-
autoUpdateMeshBvhInterval?: number;
|
|
22839
|
-
bvhNeedsUpdate?: boolean;
|
|
22840
|
-
}
|
|
22841
|
-
}
|
|
22842
|
-
|
|
22843
|
-
|
|
22844
22822
|
declare module 'three' {
|
|
22845
22823
|
interface Object3D {
|
|
22846
22824
|
get guid(): string | undefined;
|
|
@@ -22986,3 +22964,25 @@ declare module 'three' {
|
|
|
22986
22964
|
slerp(end: Vector3, t: number): Vector3;
|
|
22987
22965
|
}
|
|
22988
22966
|
}
|
|
22967
|
+
|
|
22968
|
+
|
|
22969
|
+
declare module 'three' {
|
|
22970
|
+
interface SkinnedMesh {
|
|
22971
|
+
staticGenerator?: StaticGeometryGenerator;
|
|
22972
|
+
staticGeometry?: BufferGeometry;
|
|
22973
|
+
staticGeometryLastUpdate?: number;
|
|
22974
|
+
}
|
|
22975
|
+
interface Mesh {
|
|
22976
|
+
acceleratedRaycast?: any;
|
|
22977
|
+
}
|
|
22978
|
+
interface SkinnedMesh {
|
|
22979
|
+
/** @deprecated use autoUpdateMeshBvhInterval */
|
|
22980
|
+
autoUpdateMeshBVH?: boolean;
|
|
22981
|
+
/**
|
|
22982
|
+
* Interval in milliseconds to automatically update the mesh BVH. When set to >= 0 the BVH will be updated every x milliseconds.
|
|
22983
|
+
* @default undefined (disabled)
|
|
22984
|
+
*/
|
|
22985
|
+
autoUpdateMeshBvhInterval?: number;
|
|
22986
|
+
bvhNeedsUpdate?: boolean;
|
|
22987
|
+
}
|
|
22988
|
+
}
|
package/dist/needle-engine.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { initEngine as i, GameObject as r, onClear as a, onDestroy as s, onInitialized as l, onAfterRender as d, onBeforeRender as c, onUpdate as m, onStart as p, TypeStore as g, loadAsset as u, NeedleXRSession as S, Context as C, VERSION as y, Component as E, Components as R } from "./needle-engine.bundle-
|
|
2
|
-
import { $componentName as T, $physicsKey as b, ActionBuilder as M, ActionCollection as I, ActionModel as D, Addressables as O, AlignmentConstraint as x, AmbientMode as k, Animation as L, AnimationCurve as N, AnimationExtension as B, AnimationTrackHandler as F, AnimationUtils as w, Animator as U, AnimatorConditionMode as G, AnimatorController as W, AnimatorControllerParameterType as H, AnimatorStateInfo as X, Antialiasing as z, Application as V, AssetDatabase as _, AssetReference as j, Attractor as Z, AudioExtension as K, AudioListener as Q, AudioSource as $, AudioTrackHandler as Y, Avatar as J, AvatarBlink_Simple as q, AvatarEyeLook_Rotation as ee, AvatarLoader as te, AvatarMarker as oe, AvatarModel as re, Avatar_Brain_LookAt as ne, Avatar_MouthShapes as ie, Avatar_MustacheShake as ae, Avatar_POI as se, Axes as le, AxesHelper as de, BUILD_TIME as ce, BaseUIComponent as me, BasicIKConstraint as pe, BehaviorExtension as ge, BehaviorModel as ue, Component$1 as Se, BlobStorage as Ce, BloomEffect as ye, BoxCollider as Ee, BoxGizmo as Re, BoxHelperComponent as he, Button as fe, ButtonsFactory as ve, CallDirection as Pe, CallInfo as Ae, Camera as Te, CameraTargetReachedEvent as be, Canvas as Me, CanvasGroup as Ie, CapsuleCollider as De, ChangeMaterialOnClick as Oe, ChangeTransformOnClick as xe, CharacterController as ke, CharacterControllerInput as Le, ChromaticAberration as Ne, CircularBuffer as Be, ClearFlags as Fe, ClickThrough as we, ClipExtrapolation as Ue, Collider as Ge, Collision as We, CollisionDetectionMode as He, ColorAdjustments as Xe, ColorBySpeedModule as ze, ColorOverLifetimeModule as Ve, Component$1 as _e, ComponentLifecycleEvents as je, ConnectionEvents as Ze, ContactPoint as Ke, ContactShadows as Qe, ContextArgs as $e, ContextEvent as Ye, ContextRegistry as Je, ControlTrackHandler as qe, CursorFollow as et, CustomBranding as tt, CustomShader as ot, DefaultReflectionMode as rt, Deletable as nt, DeleteBox as it, DepthOfField as at, DeviceFlag as st, DeviceUtilities as lt, DocumentExtension as dt, DragControls as ct, DragMode as mt, DropListener as pt, Duplicatable as gt, EffectWrapper as ut, EmissionModule as St, EmphasizeOnClick as Ct, EngineLoadingView as yt, EnvironmentScene as Et, EventList as Rt, EventListEvent as ht, EventSystem as ft, EventTrigger as vt, FieldWithDefault as Pt, FileReference as At, FileReferenceSerializer as Tt, FileSpawnModel as bt, File_Event as Mt, FixedJoint as It, Fog as Dt, FrameEvent as Ot, GENERATOR as xt, Gizmos as kt, GltfExport as Lt, GltfExportBox as Nt, Gradient as Bt, Graphic as Ft, GraphicRaycaster as wt, Graphics as Ut, GridHelper as Gt, GridLayoutGroup as Wt, GroundProjectedEnv as Ht, GroupActionModel as Xt, HideFlags as zt, HideOnStart as Vt, HingeJoint as _t, HorizontalLayoutGroup as jt, HostData as Zt, HoverAnimation as Kt, Image as Qt, ImageReference as $t, ImageReferenceSerializer as Yt, InheritVelocityModule as Jt, Input as qt, InputEventQueue as eo, InputEvents as to, InputField as oo, InstanceHandle as ro, InstancingHandler as no, InstancingUtil as io, InstantiateEvent as ao, InstantiateIdProvider as so, InstantiateOptions as lo, Interactable as co, InternalScreenshotUtils as mo, JoinedRoomResponse as po, KeyEventArgs as go, Keyframe as uo, LODGroup as So, LODModel as Co, LeftRoomResponse as yo, Light as Eo, LightData as Ro, LimitVelocityOverLifetimeModule as ho, LoadingElementOptions as fo, LogStats as vo, LogType as Po, LookAt as Ao, LookAtConstraint as To, MainModule as bo, MarkerTrackHandler as Mo, MarkerType as Io, MaskableGraphic as Do, MaterialPropertyBlock as Oo, MaterialX as xo, Mathf as ko, MeshCollider as Lo, MeshRenderer as No, MinMaxCurve as Bo, MinMaxGradient as Fo, NEEDLE_ENGINE_FEATURE_FLAGS as wo, MODULES as Uo, NEKeyboardEvent as Go, NEPointerEvent as Wo, NeedleButtonElement as Ho, ContextRegistry as Xo, NeedleEngineModelLoader as zo, NeedleEngineWebComponent as Vo, NeedleMenu as _o, NeedlePatchesKey as jo, USDZExporter as Zo, NeedleXRController as Ko, NeedleXRSync as Qo, NeedleXRUtils as $o, NestedGltf as Yo, NetworkConnection as Jo, NetworkedStreamEvents as qo, NetworkedStreams as er, Networking as tr, NewInstanceModel as or, NoiseModule as rr, ObjectRaycaster as nr, ObjectUtils as ir, OffsetConstraint as ar, OneEuroFilter as sr, OneEuroFilterXYZ as lr, OpenURL as dr, OrbitControls as cr, Outline as mr, OwnershipEvent as pr, OwnershipModel as gr, PUBLIC_KEY as ur, Padding as Sr, ParticleBurst as Cr, ParticleSubEmitter as yr, ParticleSystem as Er, ParticleSystemBaseBehaviour as Rr, ParticleSystemRenderer as hr, ParticleSystemShapeType as fr, PeerHandle as vr, PeerNetworking as Pr, Physics as Ar, PhysicsExtension as Tr, PhysicsMaterialCombine as br, PixelationEffect as Mr, PlayAnimationOnClick as Ir, PlayAudioOnClick as Dr, PlayableDirector as Or, PlayerColor as xr, PlayerState as kr, PlayerStateEvent as Lr, PlayerSync as Nr, PlayerView as Br, PlayerViewManager as Fr, PointerEventData as wr, PointerType as Ur, PostProcessingEffect as Gr, PostProcessingEffectOrder as Wr, PostProcessingHandler as Hr, Volume as Xr, PreliminaryAction as zr, PreliminaryTrigger as Vr, PreviewHelper as _r, PrimitiveType as jr, Progress as Zr, PromiseAllWithErrors as Kr, PromiseErrorResult as Qr, RGBAColor as $r, RapierPhysics as Yr, RawImage as Jr, RaycastOptions as qr, Rect as en, RectTransform as tn, ReflectionProbe as on, RegisteredAnimationInfo as rn, RemoteSkybox as nn, RenderTexture as an, RenderTextureSerializer as sn, Renderer as ln, RendererData as dn, RendererLightmap as cn, Rigidbody as mn, RigidbodyConstraints as pn, RoomEvents as gn, RotationBySpeedModule as un, RotationOverLifetimeModule as Sn, SceneLightSettings as Cn, SceneSwitcher as yn, ScreenCapture as En, ScreenSpaceAmbientOcclusion as Rn, ScreenSpaceAmbientOcclusionN8 as hn, ScrollFollow as fn, SeeThrough as vn, SendQueue as Pn, SerializationContext as An, SetActiveOnClick as Tn, ShadowCatcher as bn, ShapeModule as Mn, ShapeOverlapResult as In, SharpeningEffect as Dn, SignalAsset as On, SignalReceiver as xn, SignalReceiverEvent as kn, SignalTrackHandler as Ln, Size as Nn, SizeBySpeedModule as Bn, SizeOverLifetimeModule as Fn, SkinnedMeshRenderer as wn, SmoothFollow as Un, SpatialGrabRaycaster as Gn, SpatialHtml as Wn, SpatialTrigger as Hn, SpatialTriggerReceiver as Xn, SpectatorCamera as zn, SphereCollider as Vn, SphereIntersection as _n, SplineContainer as jn, SplineData as Zn, SplineUtils as Kn, SplineWalker as Qn, Sprite as $n, SpriteData as Yn, SpriteRenderer as Jn, SpriteSheet as qn, StateMachineBehaviour as ei, StreamEndedEvent as ti, StreamReceivedEvent as oi, SubEmitterSystem as ri, SyncedCamera as ni, SyncedRoom as ii, SyncedTransform as ai, TapGestureTrigger as si, TeleportTarget as li, TestRunner as di, TestSimulateUserData as ci, Text as mi, TextBuilder as pi, TextExtension as gi, TextureSheetAnimationModule as ui, TiltShiftEffect as Si, Time as Ci, ToneMappingEffect as yi, TrackHandler as Ei, TrackType as Ri, TrailModule as hi, TransformData as fi, TransformGizmo as vi, TriggerBuilder as Pi, TriggerModel as Ai, UIRaycastUtils as Ti, UIRootComponent as bi, USDDocument as Mi, USDObject as Ii, USDWriter as Di, USDZExporter$1 as Oi, USDZText as xi, USDZUIExtension as ki, UriSerializer as Li, UsageMarker as Ni, UserJoinedOrLeftRoomModel as Bi, VariantAction as Fi, VelocityOverLifetimeModule as wi, VerticalLayoutGroup as Ui, VideoPlayer as Gi, ViewBox as Wi, ViewDevice as Hi, Vignette as Xi, VisibilityAction as zi, Voip as Vi, Volume as _i, VolumeParameter as ji, VolumeProfile as Zi, WaitForFrames as Ki, WaitForPromise as Qi, WaitForSeconds as $i, Watch as Yi, WebARCameraBackground as Ji, WebARSessionRoot as qi, WebXR as ea, WebXRButtonFactory as ta, WebXRImageTracking as oa, WebXRImageTrackingModel as ra, WebXRPlaneTracking as na, WebXRTrackedImage as ia, XRControllerFollow as aa, XRControllerModel as sa, XRControllerMovement as la, XRFlag as da, XRRig as ca, XRState as ma, XRStateFlag as pa, __Ignore as ga, __internalNotifyObjectDestroyed as ua, activeInHierarchyFieldName as Sa, addAttributeChangeCallback as Ca, addComponent as ya, addCustomExtensionPlugin as Ea, addNewComponent as Ra, addPatch as ha, apply as fa, applyHMRChanges as va, applyPrototypeExtensions as Pa, beginListenDestroy as Aa, beginListenInstantiate as Ta, binaryIdentifierCasts as ba, build_scene_functions as Ma, builtinComponentKeyName as Ia, calculateProgress01 as Da, clearMessages as Oa, clearMessages as xa, colorSerializer as ka, compareAssociation as La, componentSerializer as Na, copyTexture as Ba, createMotion as Fa, debugNet as wa, debugOwner as Ua, decompressGpuTexture as Ga, deepClone as Wa, delay as Ha, delayForFrames as Xa, deserializeObject as za, destroy as Va, destroyComponentInstance as _a, determineMimeTypeFromExtension as ja, disposeObjectResources as Za, disposeStream as Ka, editorGuidKeyName as Qa, enableSpatialConsole as $a, euler as Ya, eventListSerializer as Ja, exportAsGLTF as qa, findByGuid as es, findObjectOfType as ts, findObjectsOfType as os, findResourceUsers as rs, fitCamera as ns, fitObjectIntoVolume as is, foreachComponent as as, foreachComponentEnumerator as ss, forward as ls, generateQRCode as ds, generateSeed as cs, getBoundingBox as ms, getCameraController as ps, getComponent as gs, getComponentInChildren as us, getComponentInParent as Ss, getComponents as Cs, getComponentsInChildren as ys, getComponentsInParent as Es, getFormattedDate as Rs, getIconElement as hs, getIconTexture as fs, getLoader as vs, getOrAddComponent as Ps, getParam as As, getParentHierarchyPath as Ts, getPath as bs, getPeerOptions as Ms, getPeerjsInstance as Is, getResourceUserCount as Ds, getTempColor as Os, getTempQuaternion as xs, getTempVector as ks, getUrlParams as Ls, getVisibleInCustomShadowRendering as Ns, getWorldDirection as Bs, getWorldEuler as Fs, getWorldPosition as ws, getWorldQuaternion as Us, getWorldRotation as Gs, getWorldScale as Ws, hasCommercialLicense as Hs, hasIndieLicense as Xs, hasPointerEventComponent as zs, hasProLicense as Vs, hideDebugConsole as _s, imageToCanvas as js, instantiate as Zs, invokeLoadedImportPluginHooks as Ks, invokeXRSessionEnd as Qs, invokeXRSessionStart as $s, isActiveInHierarchy as Ys, isActiveSelf as Js, isAndroidDevice as qs, isAnimationAction as el, isComponent as tl, isDebugMode as ol, isDesktop as rl, isDestroyed as nl, isDevEnvironment as il, isDisposed as al, isExporting as sl, isGLTFModel as ll, isHostedOnGlitch as dl, isHotReloadEnabled as cl, isHotReloading as ml, isIPad as pl, isIconElement as gl, isLocalNetwork as ul, isMacOS as Sl, isMobileDevice as Cl, isMozillaXR as yl, isQuest as El, isResourceTrackingEnabled as Rl, isSafari as hl, isUsingInstancing as fl, isiOS as vl, isiPad as Pl, loadPMREM as Al, loadSync as Tl, logHierarchy as bl, lookAtInverse as Ml, lookAtObject as Il, lookAtScreenPoint as Dl, makeId as Ol, makeIdFromRandomWords as xl, makeNameSafe as kl, markAsInstancedRendered as Ll, microphonePermissionsGranted as Nl, nameof as Bl, nameofFactory as Fl, objectSerializer as wl, offXRSessionEnd as Ul, offXRSessionStart as Gl, onXRSessionEnd as Wl, onXRSessionStart as Hl, parseSync as Xl, placeOnSurface as zl, postprocessFBXMaterials as Vl, prefix as _l, pushState as jl, randomNumber as Zl, registerBinaryType as Kl, registerComponent as Ql, registerComponentExtension as $l, registerCustomEffectType as Yl, registerExportExtensions as Jl, registerExtensions as ql, registerHotReloadType as ed, registerLoader as td, registerPrefabProvider as od, registerPrototypeExtensions as rd, registerType as nd, relativePathPrefix as id, removeAttributeChangeCallback as ad, removeComponent as sd, removeCustomImportExtensionType as ld, removePatch as dd, resolveUrl as cd, sanitizeString as md, saveImage as pd, screenshot as gd, screenshot2 as ud, sendDestroyed as Sd, serializable as Cd, serializeObject as yd, serializeable as Ed, setActive as Rd, setAllowBalloonMessages as hd, setAllowOverlayMessages as fd, setAutoFitEnabled as vd, setCameraController as Pd, setDestroyed as Ad, setDevEnvironment as Td, setDisposable as bd, setDontDestroy as Md, setOrAddParamsToUrl as Id, setParam as Dd, setParamWithoutReload as Od, setPeerOptions as xd, setResourceTrackingEnabled as kd, setState as Ld, setVisibleInCustomShadowRendering as Nd, setWorldEuler as Bd, setWorldPosition as Fd, setWorldPositionXYZ as wd, setWorldQuaternion as Ud, setWorldQuaternionXYZW as Gd, setWorldRotation as Wd, setWorldRotationXYZ as Hd, setWorldScale as Xd, showBalloonError as zd, showBalloonMessage as Vd, showBalloonWarning as _d, showDebugConsole as jd, slerp as Zd, syncDestroy as Kd, syncField as Qd, syncInstantiate as $d, textureToCanvas as Yd, toSourceId as Jd, tryCastBinary as qd, tryDetermineMimetypeFromBinary as ec, tryDetermineMimetypeFromURL as tc, tryFindObject as oc, tryGetGuid as rc, unregisterHotReloadType as nc, unwatchWrite as ic, useForAutoFit as ac, validate as sc, watchWrite as lc } from "./needle-engine.bundle-DysB2Idj.js";
|
|
1
|
+
import { initEngine as i, GameObject as r, onClear as a, onDestroy as s, onInitialized as l, onAfterRender as d, onBeforeRender as c, onUpdate as m, onStart as p, TypeStore as g, loadAsset as u, NeedleXRSession as S, Context as C, VERSION as y, Component as E, Components as R } from "./needle-engine.bundle-BDIyvCV6.js";
|
|
2
|
+
import { $componentName as T, $physicsKey as b, ActionBuilder as M, ActionCollection as I, ActionModel as D, Addressables as O, AlignmentConstraint as x, AmbientMode as k, Animation as L, AnimationCurve as N, AnimationExtension as B, AnimationTrackHandler as F, AnimationUtils as w, Animator as U, AnimatorConditionMode as G, AnimatorController as W, AnimatorControllerParameterType as H, AnimatorStateInfo as X, Antialiasing as z, Application as V, AssetDatabase as _, AssetReference as j, Attractor as Z, AudioExtension as K, AudioListener as Q, AudioSource as $, AudioTrackHandler as Y, Avatar as J, AvatarBlink_Simple as q, AvatarEyeLook_Rotation as ee, AvatarLoader as te, AvatarMarker as oe, AvatarModel as re, Avatar_Brain_LookAt as ne, Avatar_MouthShapes as ie, Avatar_MustacheShake as ae, Avatar_POI as se, Axes as le, AxesHelper as de, BUILD_TIME as ce, BaseUIComponent as me, BasicIKConstraint as pe, BehaviorExtension as ge, BehaviorModel as ue, Component$1 as Se, BlobStorage as Ce, BloomEffect as ye, BoxCollider as Ee, BoxGizmo as Re, BoxHelperComponent as he, Button as fe, ButtonsFactory as ve, CallDirection as Pe, CallInfo as Ae, Camera as Te, CameraTargetReachedEvent as be, Canvas as Me, CanvasGroup as Ie, CapsuleCollider as De, ChangeMaterialOnClick as Oe, ChangeTransformOnClick as xe, CharacterController as ke, CharacterControllerInput as Le, ChromaticAberration as Ne, CircularBuffer as Be, ClearFlags as Fe, ClickThrough as we, ClipExtrapolation as Ue, Collider as Ge, Collision as We, CollisionDetectionMode as He, ColorAdjustments as Xe, ColorBySpeedModule as ze, ColorOverLifetimeModule as Ve, Component$1 as _e, ComponentLifecycleEvents as je, ConnectionEvents as Ze, ContactPoint as Ke, ContactShadows as Qe, ContextArgs as $e, ContextEvent as Ye, ContextRegistry as Je, ControlTrackHandler as qe, CursorFollow as et, CustomBranding as tt, CustomShader as ot, DefaultReflectionMode as rt, Deletable as nt, DeleteBox as it, DepthOfField as at, DeviceFlag as st, DeviceUtilities as lt, DocumentExtension as dt, DragControls as ct, DragMode as mt, DropListener as pt, Duplicatable as gt, EffectWrapper as ut, EmissionModule as St, EmphasizeOnClick as Ct, EngineLoadingView as yt, EnvironmentScene as Et, EventList as Rt, EventListEvent as ht, EventSystem as ft, EventTrigger as vt, FieldWithDefault as Pt, FileReference as At, FileReferenceSerializer as Tt, FileSpawnModel as bt, File_Event as Mt, FixedJoint as It, Fog as Dt, FrameEvent as Ot, GENERATOR as xt, Gizmos as kt, GltfExport as Lt, GltfExportBox as Nt, Gradient as Bt, Graphic as Ft, GraphicRaycaster as wt, Graphics as Ut, GridHelper as Gt, GridLayoutGroup as Wt, GroundProjectedEnv as Ht, GroupActionModel as Xt, HideFlags as zt, HideOnStart as Vt, HingeJoint as _t, HorizontalLayoutGroup as jt, HostData as Zt, HoverAnimation as Kt, Image as Qt, ImageReference as $t, ImageReferenceSerializer as Yt, InheritVelocityModule as Jt, Input as qt, InputEventQueue as eo, InputEvents as to, InputField as oo, InstanceHandle as ro, InstancingHandler as no, InstancingUtil as io, InstantiateEvent as ao, InstantiateIdProvider as so, InstantiateOptions as lo, Interactable as co, InternalScreenshotUtils as mo, JoinedRoomResponse as po, KeyEventArgs as go, Keyframe as uo, LODGroup as So, LODModel as Co, LeftRoomResponse as yo, Light as Eo, LightData as Ro, LimitVelocityOverLifetimeModule as ho, LoadingElementOptions as fo, LogStats as vo, LogType as Po, LookAt as Ao, LookAtConstraint as To, MainModule as bo, MarkerTrackHandler as Mo, MarkerType as Io, MaskableGraphic as Do, MaterialPropertyBlock as Oo, MaterialX as xo, Mathf as ko, MeshCollider as Lo, MeshRenderer as No, MinMaxCurve as Bo, MinMaxGradient as Fo, NEEDLE_ENGINE_FEATURE_FLAGS as wo, MODULES as Uo, NEKeyboardEvent as Go, NEPointerEvent as Wo, NeedleButtonElement as Ho, ContextRegistry as Xo, NeedleEngineModelLoader as zo, NeedleEngineWebComponent as Vo, NeedleMenu as _o, NeedlePatchesKey as jo, USDZExporter as Zo, NeedleXRController as Ko, NeedleXRSync as Qo, NeedleXRUtils as $o, NestedGltf as Yo, NetworkConnection as Jo, NetworkedStreamEvents as qo, NetworkedStreams as er, Networking as tr, NewInstanceModel as or, NoiseModule as rr, ObjectRaycaster as nr, ObjectUtils as ir, OffsetConstraint as ar, OneEuroFilter as sr, OneEuroFilterXYZ as lr, OpenURL as dr, OrbitControls as cr, Outline as mr, OwnershipEvent as pr, OwnershipModel as gr, PUBLIC_KEY as ur, Padding as Sr, ParticleBurst as Cr, ParticleSubEmitter as yr, ParticleSystem as Er, ParticleSystemBaseBehaviour as Rr, ParticleSystemRenderer as hr, ParticleSystemShapeType as fr, PeerHandle as vr, PeerNetworking as Pr, Physics as Ar, PhysicsExtension as Tr, PhysicsMaterialCombine as br, PixelationEffect as Mr, PlayAnimationOnClick as Ir, PlayAudioOnClick as Dr, PlayableDirector as Or, PlayerColor as xr, PlayerState as kr, PlayerStateEvent as Lr, PlayerSync as Nr, PlayerView as Br, PlayerViewManager as Fr, PointerEventData as wr, PointerType as Ur, PostProcessingEffect as Gr, PostProcessingEffectOrder as Wr, PostProcessingHandler as Hr, Volume as Xr, PreliminaryAction as zr, PreliminaryTrigger as Vr, PreviewHelper as _r, PrimitiveType as jr, Progress as Zr, PromiseAllWithErrors as Kr, PromiseErrorResult as Qr, RGBAColor as $r, RapierPhysics as Yr, RawImage as Jr, RaycastOptions as qr, Rect as en, RectTransform as tn, ReflectionProbe as on, RegisteredAnimationInfo as rn, RemoteSkybox as nn, RenderTexture as an, RenderTextureSerializer as sn, Renderer as ln, RendererData as dn, RendererLightmap as cn, Rigidbody as mn, RigidbodyConstraints as pn, RoomEvents as gn, RotationBySpeedModule as un, RotationOverLifetimeModule as Sn, SceneLightSettings as Cn, SceneSwitcher as yn, ScreenCapture as En, ScreenSpaceAmbientOcclusion as Rn, ScreenSpaceAmbientOcclusionN8 as hn, ScrollFollow as fn, SeeThrough as vn, SendQueue as Pn, SerializationContext as An, SetActiveOnClick as Tn, ShadowCatcher as bn, ShapeModule as Mn, ShapeOverlapResult as In, SharpeningEffect as Dn, SignalAsset as On, SignalReceiver as xn, SignalReceiverEvent as kn, SignalTrackHandler as Ln, Size as Nn, SizeBySpeedModule as Bn, SizeOverLifetimeModule as Fn, SkinnedMeshRenderer as wn, SmoothFollow as Un, SpatialGrabRaycaster as Gn, SpatialHtml as Wn, SpatialTrigger as Hn, SpatialTriggerReceiver as Xn, SpectatorCamera as zn, SphereCollider as Vn, SphereIntersection as _n, SplineContainer as jn, SplineData as Zn, SplineUtils as Kn, SplineWalker as Qn, Sprite as $n, SpriteData as Yn, SpriteRenderer as Jn, SpriteSheet as qn, StateMachineBehaviour as ei, StreamEndedEvent as ti, StreamReceivedEvent as oi, SubEmitterSystem as ri, SyncedCamera as ni, SyncedRoom as ii, SyncedTransform as ai, TapGestureTrigger as si, TeleportTarget as li, TestRunner as di, TestSimulateUserData as ci, Text as mi, TextBuilder as pi, TextExtension as gi, TextureSheetAnimationModule as ui, TiltShiftEffect as Si, Time as Ci, ToneMappingEffect as yi, TrackHandler as Ei, TrackType as Ri, TrailModule as hi, TransformData as fi, TransformGizmo as vi, TriggerBuilder as Pi, TriggerModel as Ai, UIRaycastUtils as Ti, UIRootComponent as bi, USDDocument as Mi, USDObject as Ii, USDWriter as Di, USDZExporter$1 as Oi, USDZText as xi, USDZUIExtension as ki, UriSerializer as Li, UsageMarker as Ni, UserJoinedOrLeftRoomModel as Bi, VariantAction as Fi, VelocityOverLifetimeModule as wi, VerticalLayoutGroup as Ui, VideoPlayer as Gi, ViewBox as Wi, ViewDevice as Hi, Vignette as Xi, VisibilityAction as zi, Voip as Vi, Volume as _i, VolumeParameter as ji, VolumeProfile as Zi, WaitForFrames as Ki, WaitForPromise as Qi, WaitForSeconds as $i, Watch as Yi, WebARCameraBackground as Ji, WebARSessionRoot as qi, WebXR as ea, WebXRButtonFactory as ta, WebXRImageTracking as oa, WebXRImageTrackingModel as ra, WebXRPlaneTracking as na, WebXRTrackedImage as ia, XRControllerFollow as aa, XRControllerModel as sa, XRControllerMovement as la, XRFlag as da, XRRig as ca, XRState as ma, XRStateFlag as pa, __Ignore as ga, __internalNotifyObjectDestroyed as ua, activeInHierarchyFieldName as Sa, addAttributeChangeCallback as Ca, addComponent as ya, addCustomExtensionPlugin as Ea, addNewComponent as Ra, addPatch as ha, apply as fa, applyHMRChanges as va, applyPrototypeExtensions as Pa, beginListenDestroy as Aa, beginListenInstantiate as Ta, binaryIdentifierCasts as ba, build_scene_functions as Ma, builtinComponentKeyName as Ia, calculateProgress01 as Da, clearMessages as Oa, clearMessages as xa, colorSerializer as ka, compareAssociation as La, componentSerializer as Na, copyTexture as Ba, createMotion as Fa, debugNet as wa, debugOwner as Ua, decompressGpuTexture as Ga, deepClone as Wa, delay as Ha, delayForFrames as Xa, deserializeObject as za, destroy as Va, destroyComponentInstance as _a, determineMimeTypeFromExtension as ja, disposeObjectResources as Za, disposeStream as Ka, editorGuidKeyName as Qa, enableSpatialConsole as $a, euler as Ya, eventListSerializer as Ja, exportAsGLTF as qa, findByGuid as es, findObjectOfType as ts, findObjectsOfType as os, findResourceUsers as rs, fitCamera as ns, fitObjectIntoVolume as is, foreachComponent as as, foreachComponentEnumerator as ss, forward as ls, generateQRCode as ds, generateSeed as cs, getBoundingBox as ms, getCameraController as ps, getComponent as gs, getComponentInChildren as us, getComponentInParent as Ss, getComponents as Cs, getComponentsInChildren as ys, getComponentsInParent as Es, getFormattedDate as Rs, getIconElement as hs, getIconTexture as fs, getLoader as vs, getOrAddComponent as Ps, getParam as As, getParentHierarchyPath as Ts, getPath as bs, getPeerOptions as Ms, getPeerjsInstance as Is, getResourceUserCount as Ds, getTempColor as Os, getTempQuaternion as xs, getTempVector as ks, getUrlParams as Ls, getVisibleInCustomShadowRendering as Ns, getWorldDirection as Bs, getWorldEuler as Fs, getWorldPosition as ws, getWorldQuaternion as Us, getWorldRotation as Gs, getWorldScale as Ws, hasCommercialLicense as Hs, hasIndieLicense as Xs, hasPointerEventComponent as zs, hasProLicense as Vs, hideDebugConsole as _s, imageToCanvas as js, instantiate as Zs, invokeLoadedImportPluginHooks as Ks, invokeXRSessionEnd as Qs, invokeXRSessionStart as $s, isActiveInHierarchy as Ys, isActiveSelf as Js, isAndroidDevice as qs, isAnimationAction as el, isComponent as tl, isDebugMode as ol, isDesktop as rl, isDestroyed as nl, isDevEnvironment as il, isDisposed as al, isExporting as sl, isGLTFModel as ll, isHostedOnGlitch as dl, isHotReloadEnabled as cl, isHotReloading as ml, isIPad as pl, isIconElement as gl, isLocalNetwork as ul, isMacOS as Sl, isMobileDevice as Cl, isMozillaXR as yl, isQuest as El, isResourceTrackingEnabled as Rl, isSafari as hl, isUsingInstancing as fl, isiOS as vl, isiPad as Pl, loadPMREM as Al, loadSync as Tl, logHierarchy as bl, lookAtInverse as Ml, lookAtObject as Il, lookAtScreenPoint as Dl, makeId as Ol, makeIdFromRandomWords as xl, makeNameSafe as kl, markAsInstancedRendered as Ll, microphonePermissionsGranted as Nl, nameof as Bl, nameofFactory as Fl, objectSerializer as wl, offXRSessionEnd as Ul, offXRSessionStart as Gl, onXRSessionEnd as Wl, onXRSessionStart as Hl, parseSync as Xl, placeOnSurface as zl, postprocessFBXMaterials as Vl, prefix as _l, pushState as jl, randomNumber as Zl, registerBinaryType as Kl, registerComponent as Ql, registerComponentExtension as $l, registerCustomEffectType as Yl, registerExportExtensions as Jl, registerExtensions as ql, registerHotReloadType as ed, registerLoader as td, registerPrefabProvider as od, registerPrototypeExtensions as rd, registerType as nd, relativePathPrefix as id, removeAttributeChangeCallback as ad, removeComponent as sd, removeCustomImportExtensionType as ld, removePatch as dd, resolveUrl as cd, sanitizeString as md, saveImage as pd, screenshot as gd, screenshot2 as ud, sendDestroyed as Sd, serializable as Cd, serializeObject as yd, serializeable as Ed, setActive as Rd, setAllowBalloonMessages as hd, setAllowOverlayMessages as fd, setAutoFitEnabled as vd, setCameraController as Pd, setDestroyed as Ad, setDevEnvironment as Td, setDisposable as bd, setDontDestroy as Md, setOrAddParamsToUrl as Id, setParam as Dd, setParamWithoutReload as Od, setPeerOptions as xd, setResourceTrackingEnabled as kd, setState as Ld, setVisibleInCustomShadowRendering as Nd, setWorldEuler as Bd, setWorldPosition as Fd, setWorldPositionXYZ as wd, setWorldQuaternion as Ud, setWorldQuaternionXYZW as Gd, setWorldRotation as Wd, setWorldRotationXYZ as Hd, setWorldScale as Xd, showBalloonError as zd, showBalloonMessage as Vd, showBalloonWarning as _d, showDebugConsole as jd, slerp as Zd, syncDestroy as Kd, syncField as Qd, syncInstantiate as $d, textureToCanvas as Yd, toSourceId as Jd, tryCastBinary as qd, tryDetermineMimetypeFromBinary as ec, tryDetermineMimetypeFromURL as tc, tryFindObject as oc, tryGetGuid as rc, unregisterHotReloadType as nc, unwatchWrite as ic, useForAutoFit as ac, validate as sc, watchWrite as lc } from "./needle-engine.bundle-BDIyvCV6.js";
|
|
3
3
|
import { THREE as h } from "./three.js";
|
|
4
4
|
import { NEEDLE_progressive as cc } from "./gltf-progressive-Cl167Vjx.js";
|
|
5
5
|
i();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{initEngine as y,GameObject as s,onClear as o,onDestroy as r,onInitialized as n,onAfterRender as i,onBeforeRender as l,onUpdate as d,onStart as c,TypeStore as m,loadAsset as p,NeedleXRSession as g,Context as u,VERSION as S,Component as E,Components as R}from"./needle-engine.bundle-BLroQ2QT.min.js";import{$componentName as h,$physicsKey as v,ActionBuilder as f,ActionCollection as P,ActionModel as A,Addressables as T,AlignmentConstraint as M,AmbientMode as b,Animation as I,AnimationCurve as D,AnimationExtension as O,AnimationTrackHandler as x,AnimationUtils as k,Animator as L,AnimatorConditionMode as B,AnimatorController as F,AnimatorControllerParameterType as N,AnimatorStateInfo as w,Antialiasing as W,Application as G,AssetDatabase as U,AssetReference as H,Attractor as X,AudioExtension as z,AudioListener as V,AudioSource as _,AudioTrackHandler as j,Avatar as K,AvatarBlink_Simple as Q,AvatarEyeLook_Rotation as Z,AvatarLoader as Y,AvatarMarker as J,AvatarModel as $,Avatar_Brain_LookAt as q,Avatar_MouthShapes as ee,Avatar_MustacheShake as ae,Avatar_POI as se,Axes as te,AxesHelper as oe,BUILD_TIME as re,BaseUIComponent as ne,BasicIKConstraint as ie,BehaviorExtension as le,BehaviorModel as de,Component$1 as ce,BlobStorage as me,BloomEffect as pe,BoxCollider as ge,BoxGizmo as ue,BoxHelperComponent as Se,Button as Ce,ButtonsFactory as ye,CallDirection as Ee,CallInfo as Re,Camera as he,CameraTargetReachedEvent as ve,Canvas as fe,CanvasGroup as Pe,CapsuleCollider as Ae,ChangeMaterialOnClick as Te,ChangeTransformOnClick as Me,CharacterController as be,CharacterControllerInput as Ie,ChromaticAberration as De,CircularBuffer as Oe,ClearFlags as xe,ClickThrough as ke,ClipExtrapolation as Le,Collider as Be,Collision as Fe,CollisionDetectionMode as Ne,ColorAdjustments as we,ColorBySpeedModule as We,ColorOverLifetimeModule as Ge,Component$1 as Ue,ComponentLifecycleEvents as He,ConnectionEvents as Xe,ContactPoint as ze,ContactShadows as Ve,ContextArgs as _e,ContextEvent as je,ContextRegistry as Ke,ControlTrackHandler as Qe,CursorFollow as Ze,CustomBranding as Ye,CustomShader as Je,DefaultReflectionMode as $e,Deletable as qe,DeleteBox as ea,DepthOfField as aa,DeviceFlag as sa,DeviceUtilities as ta,DocumentExtension as oa,DragControls as ra,DragMode as na,DropListener as ia,Duplicatable as la,EffectWrapper as da,EmissionModule as ca,EmphasizeOnClick as ma,EngineLoadingView as pa,EnvironmentScene as ga,EventList as ua,EventListEvent as Sa,EventSystem as Ca,EventTrigger as ya,FieldWithDefault as Ea,FileReference as Ra,FileReferenceSerializer as ha,FileSpawnModel as va,File_Event as fa,FixedJoint as Pa,Fog as Aa,FrameEvent as Ta,GENERATOR as Ma,Gizmos as ba,GltfExport as Ia,GltfExportBox as Da,Gradient as Oa,Graphic as xa,GraphicRaycaster as ka,Graphics as La,GridHelper as Ba,GridLayoutGroup as Fa,GroundProjectedEnv as Na,GroupActionModel as wa,HideFlags as Wa,HideOnStart as Ga,HingeJoint as Ua,HorizontalLayoutGroup as Ha,HostData as Xa,HoverAnimation as za,Image as Va,ImageReference as _a,ImageReferenceSerializer as ja,InheritVelocityModule as Ka,Input as Qa,InputEventQueue as Za,InputEvents as Ya,InputField as Ja,InstanceHandle as $a,InstancingHandler as qa,InstancingUtil as es,InstantiateEvent as as,InstantiateIdProvider as ss,InstantiateOptions as ts,Interactable as os,InternalScreenshotUtils as rs,JoinedRoomResponse as ns,KeyEventArgs as is,Keyframe as ls,LODGroup as ds,LODModel as cs,LeftRoomResponse as ms,Light as ps,LightData as gs,LimitVelocityOverLifetimeModule as us,LoadingElementOptions as Ss,LogStats as Cs,LogType as ys,LookAt as Es,LookAtConstraint as Rs,MainModule as hs,MarkerTrackHandler as vs,MarkerType as fs,MaskableGraphic as Ps,MaterialPropertyBlock as As,MaterialX as Ts,Mathf as Ms,MeshCollider as bs,MeshRenderer as Is,MinMaxCurve as Ds,MinMaxGradient as Os,NEEDLE_ENGINE_FEATURE_FLAGS as xs,MODULES as ks,NEKeyboardEvent as Ls,NEPointerEvent as Bs,NeedleButtonElement as Fs,ContextRegistry as Ns,NeedleEngineModelLoader as ws,NeedleEngineWebComponent as Ws,NeedleMenu as Gs,NeedlePatchesKey as Us,USDZExporter as Hs,NeedleXRController as Xs,NeedleXRSync as zs,NeedleXRUtils as Vs,NestedGltf as _s,NetworkConnection as js,NetworkedStreamEvents as Ks,NetworkedStreams as Qs,Networking as Zs,NewInstanceModel as Ys,NoiseModule as Js,ObjectRaycaster as $s,ObjectUtils as qs,OffsetConstraint as et,OneEuroFilter as at,OneEuroFilterXYZ as st,OpenURL as tt,OrbitControls as ot,Outline as rt,OwnershipEvent as nt,OwnershipModel as it,PUBLIC_KEY as lt,Padding as dt,ParticleBurst as ct,ParticleSubEmitter as mt,ParticleSystem as pt,ParticleSystemBaseBehaviour as gt,ParticleSystemRenderer as ut,ParticleSystemShapeType as St,PeerHandle as Ct,PeerNetworking as yt,Physics as Et,PhysicsExtension as Rt,PhysicsMaterialCombine as ht,PixelationEffect as vt,PlayAnimationOnClick as ft,PlayAudioOnClick as Pt,PlayableDirector as At,PlayerColor as Tt,PlayerState as Mt,PlayerStateEvent as bt,PlayerSync as It,PlayerView as Dt,PlayerViewManager as Ot,PointerEventData as xt,PointerType as kt,PostProcessingEffect as Lt,PostProcessingEffectOrder as Bt,PostProcessingHandler as Ft,Volume as Nt,PreliminaryAction as wt,PreliminaryTrigger as Wt,PreviewHelper as Gt,PrimitiveType as Ut,Progress as Ht,PromiseAllWithErrors as Xt,PromiseErrorResult as zt,RGBAColor as Vt,RapierPhysics as _t,RawImage as jt,RaycastOptions as Kt,Rect as Qt,RectTransform as Zt,ReflectionProbe as Yt,RegisteredAnimationInfo as Jt,RemoteSkybox as $t,RenderTexture as qt,RenderTextureSerializer as eo,Renderer as ao,RendererData as so,RendererLightmap as to,Rigidbody as oo,RigidbodyConstraints as ro,RoomEvents as no,RotationBySpeedModule as io,RotationOverLifetimeModule as lo,SceneLightSettings as co,SceneSwitcher as mo,ScreenCapture as po,ScreenSpaceAmbientOcclusion as go,ScreenSpaceAmbientOcclusionN8 as uo,ScrollFollow as So,SeeThrough as Co,SendQueue as yo,SerializationContext as Eo,SetActiveOnClick as Ro,ShadowCatcher as ho,ShapeModule as vo,ShapeOverlapResult as fo,SharpeningEffect as Po,SignalAsset as Ao,SignalReceiver as To,SignalReceiverEvent as Mo,SignalTrackHandler as bo,Size as Io,SizeBySpeedModule as Do,SizeOverLifetimeModule as Oo,SkinnedMeshRenderer as xo,SmoothFollow as ko,SpatialGrabRaycaster as Lo,SpatialHtml as Bo,SpatialTrigger as Fo,SpatialTriggerReceiver as No,SpectatorCamera as wo,SphereCollider as Wo,SphereIntersection as Go,SplineContainer as Uo,SplineData as Ho,SplineUtils as Xo,SplineWalker as zo,Sprite as Vo,SpriteData as _o,SpriteRenderer as jo,SpriteSheet as Ko,StateMachineBehaviour as Qo,StreamEndedEvent as Zo,StreamReceivedEvent as Yo,SubEmitterSystem as Jo,SyncedCamera as $o,SyncedRoom as qo,SyncedTransform as er,TapGestureTrigger as ar,TeleportTarget as sr,TestRunner as tr,TestSimulateUserData as or,Text as rr,TextBuilder as nr,TextExtension as ir,TextureSheetAnimationModule as lr,TiltShiftEffect as dr,Time as cr,ToneMappingEffect as mr,TrackHandler as pr,TrackType as gr,TrailModule as ur,TransformData as Sr,TransformGizmo as Cr,TriggerBuilder as yr,TriggerModel as Er,UIRaycastUtils as Rr,UIRootComponent as hr,USDDocument as vr,USDObject as fr,USDWriter as Pr,USDZExporter$1 as Ar,USDZText as Tr,USDZUIExtension as Mr,UriSerializer as br,UsageMarker as Ir,UserJoinedOrLeftRoomModel as Dr,VariantAction as Or,VelocityOverLifetimeModule as xr,VerticalLayoutGroup as kr,VideoPlayer as Lr,ViewBox as Br,ViewDevice as Fr,Vignette as Nr,VisibilityAction as wr,Voip as Wr,Volume as Gr,VolumeParameter as Ur,VolumeProfile as Hr,WaitForFrames as Xr,WaitForPromise as zr,WaitForSeconds as Vr,Watch as _r,WebARCameraBackground as jr,WebARSessionRoot as Kr,WebXR as Qr,WebXRButtonFactory as Zr,WebXRImageTracking as Yr,WebXRImageTrackingModel as Jr,WebXRPlaneTracking as $r,WebXRTrackedImage as qr,XRControllerFollow as en,XRControllerModel as an,XRControllerMovement as sn,XRFlag as tn,XRRig as on,XRState as rn,XRStateFlag as nn,__Ignore as ln,__internalNotifyObjectDestroyed as dn,activeInHierarchyFieldName as cn,addAttributeChangeCallback as mn,addComponent as pn,addCustomExtensionPlugin as gn,addNewComponent as un,addPatch as Sn,apply as Cn,applyHMRChanges as yn,applyPrototypeExtensions as En,beginListenDestroy as Rn,beginListenInstantiate as hn,binaryIdentifierCasts as vn,build_scene_functions as fn,builtinComponentKeyName as Pn,calculateProgress01 as An,clearMessages as Tn,clearMessages as Mn,colorSerializer as bn,compareAssociation as In,componentSerializer as Dn,copyTexture as On,createMotion as xn,debugNet as kn,debugOwner as Ln,decompressGpuTexture as Bn,deepClone as Fn,delay as Nn,delayForFrames as wn,deserializeObject as Wn,destroy as Gn,destroyComponentInstance as Un,determineMimeTypeFromExtension as Hn,disposeObjectResources as Xn,disposeStream as zn,editorGuidKeyName as Vn,enableSpatialConsole as _n,euler as jn,eventListSerializer as Kn,exportAsGLTF as Qn,findByGuid as Zn,findObjectOfType as Yn,findObjectsOfType as Jn,findResourceUsers as $n,fitCamera as qn,fitObjectIntoVolume as ei,foreachComponent as ai,foreachComponentEnumerator as si,forward as ti,generateQRCode as oi,generateSeed as ri,getBoundingBox as ni,getCameraController as ii,getComponent as li,getComponentInChildren as di,getComponentInParent as ci,getComponents as mi,getComponentsInChildren as pi,getComponentsInParent as gi,getFormattedDate as ui,getIconElement as Si,getIconTexture as Ci,getLoader as yi,getOrAddComponent as Ei,getParam as Ri,getParentHierarchyPath as hi,getPath as vi,getPeerOptions as fi,getPeerjsInstance as Pi,getResourceUserCount as Ai,getTempColor as Ti,getTempQuaternion as Mi,getTempVector as bi,getUrlParams as Ii,getVisibleInCustomShadowRendering as Di,getWorldDirection as Oi,getWorldEuler as xi,getWorldPosition as ki,getWorldQuaternion as Li,getWorldRotation as Bi,getWorldScale as Fi,hasCommercialLicense as Ni,hasIndieLicense as wi,hasPointerEventComponent as Wi,hasProLicense as Gi,hideDebugConsole as Ui,imageToCanvas as Hi,instantiate as Xi,invokeLoadedImportPluginHooks as zi,invokeXRSessionEnd as Vi,invokeXRSessionStart as _i,isActiveInHierarchy as ji,isActiveSelf as Ki,isAndroidDevice as Qi,isAnimationAction as Zi,isComponent as Yi,isDebugMode as Ji,isDesktop as $i,isDestroyed as qi,isDevEnvironment as el,isDisposed as al,isExporting as sl,isGLTFModel as tl,isHostedOnGlitch as ol,isHotReloadEnabled as rl,isHotReloading as nl,isIPad as il,isIconElement as ll,isLocalNetwork as dl,isMacOS as cl,isMobileDevice as ml,isMozillaXR as pl,isQuest as gl,isResourceTrackingEnabled as ul,isSafari as Sl,isUsingInstancing as Cl,isiOS as yl,isiPad as El,loadPMREM as Rl,loadSync as hl,logHierarchy as vl,lookAtInverse as fl,lookAtObject as Pl,lookAtScreenPoint as Al,makeId as Tl,makeIdFromRandomWords as Ml,makeNameSafe as bl,markAsInstancedRendered as Il,microphonePermissionsGranted as Dl,nameof as Ol,nameofFactory as xl,objectSerializer as kl,offXRSessionEnd as Ll,offXRSessionStart as Bl,onXRSessionEnd as Fl,onXRSessionStart as Nl,parseSync as wl,placeOnSurface as Wl,postprocessFBXMaterials as Gl,prefix as Ul,pushState as Hl,randomNumber as Xl,registerBinaryType as zl,registerComponent as Vl,registerComponentExtension as _l,registerCustomEffectType as jl,registerExportExtensions as Kl,registerExtensions as Ql,registerHotReloadType as Zl,registerLoader as Yl,registerPrefabProvider as Jl,registerPrototypeExtensions as $l,registerType as ql,relativePathPrefix as ed,removeAttributeChangeCallback as ad,removeComponent as sd,removeCustomImportExtensionType as td,removePatch as od,resolveUrl as rd,sanitizeString as nd,saveImage as id,screenshot as ld,screenshot2 as dd,sendDestroyed as cd,serializable as md,serializeObject as pd,serializeable as gd,setActive as ud,setAllowBalloonMessages as Sd,setAllowOverlayMessages as Cd,setAutoFitEnabled as yd,setCameraController as Ed,setDestroyed as Rd,setDevEnvironment as hd,setDisposable as vd,setDontDestroy as fd,setOrAddParamsToUrl as Pd,setParam as Ad,setParamWithoutReload as Td,setPeerOptions as Md,setResourceTrackingEnabled as bd,setState as Id,setVisibleInCustomShadowRendering as Dd,setWorldEuler as Od,setWorldPosition as xd,setWorldPositionXYZ as kd,setWorldQuaternion as Ld,setWorldQuaternionXYZW as Bd,setWorldRotation as Fd,setWorldRotationXYZ as Nd,setWorldScale as wd,showBalloonError as Wd,showBalloonMessage as Gd,showBalloonWarning as Ud,showDebugConsole as Hd,slerp as Xd,syncDestroy as zd,syncField as Vd,syncInstantiate as _d,textureToCanvas as jd,toSourceId as Kd,tryCastBinary as Qd,tryDetermineMimetypeFromBinary as Zd,tryDetermineMimetypeFromURL as Yd,tryFindObject as Jd,tryGetGuid as $d,unregisterHotReloadType as qd,unwatchWrite as ec,useForAutoFit as ac,validate as sc,watchWrite as tc}from"./needle-engine.bundle-BLroQ2QT.min.js";import{THREE as oc}from"./three.min.js";import{NEEDLE_progressive as rc}from"./gltf-progressive-BryRjllq.min.js";y();const a={VERSION:S,Context:u,NeedleXRSession:g,assets:{loadFromURL:p},types:m,onStart:c,onUpdate:d,onBeforeRender:l,onAfterRender:i,onInitializedContext:n,onDestroyContext:r,onClearContext:o};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function C(e){for(const t in e)a[t]=e[t]}C(E),C(R);for(const e of Object.getOwnPropertyNames(s))switch(e){case"prototype":case"constructor":case"length":case"name":continue;default:a[e]=s[e];break}if(!globalThis.Needle)globalThis.Needle=a;else for(const e in a)globalThis.Needle[e]=a[e];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=oc;export{h as $componentName,v as $physicsKey,f as ActionBuilder,P as ActionCollection,A as ActionModel,T as Addressables,M as AlignmentConstraint,b as AmbientMode,I as Animation,D as AnimationCurve,O as AnimationExtension,x as AnimationTrackHandler,k as AnimationUtils,L as Animator,B as AnimatorConditionMode,F as AnimatorController,N as AnimatorControllerParameterType,w as AnimatorStateInfo,W as Antialiasing,G as Application,U as AssetDatabase,H as AssetReference,X as Attractor,z as AudioExtension,V as AudioListener,_ as AudioSource,j as AudioTrackHandler,K as Avatar,Q as AvatarBlink_Simple,Z as AvatarEyeLook_Rotation,Y as AvatarLoader,J as AvatarMarker,$ as AvatarModel,q as Avatar_Brain_LookAt,ee as Avatar_MouthShapes,ae as Avatar_MustacheShake,se as Avatar_POI,te as Axes,oe as AxesHelper,re as BUILD_TIME,ne as BaseUIComponent,ie as BasicIKConstraint,le as BehaviorExtension,de as BehaviorModel,ce as Behaviour,me as BlobStorage,pe as BloomEffect,ge as BoxCollider,ue as BoxGizmo,Se as BoxHelperComponent,Ce as Button,ye as ButtonsFactory,Ee as CallDirection,Re as CallInfo,he as Camera,ve as CameraTargetReachedEvent,fe as Canvas,Pe as CanvasGroup,Ae as CapsuleCollider,Te as ChangeMaterialOnClick,Me as ChangeTransformOnClick,be as CharacterController,Ie as CharacterControllerInput,De as ChromaticAberration,Oe as CircularBuffer,xe as ClearFlags,ke as ClickThrough,Le as ClipExtrapolation,Be as Collider,Fe as Collision,Ne as CollisionDetectionMode,we as ColorAdjustments,We as ColorBySpeedModule,Ge as ColorOverLifetimeModule,Ue as Component,He as ComponentLifecycleEvents,Xe as ConnectionEvents,ze as ContactPoint,Ve as ContactShadows,u as Context,_e as ContextArgs,je as ContextEvent,Ke as ContextRegistry,Qe as ControlTrackHandler,Ze as CursorFollow,Ye as CustomBranding,Je as CustomShader,$e as DefaultReflectionMode,qe as Deletable,ea as DeleteBox,aa as DepthOfField,sa as DeviceFlag,ta as DeviceUtilities,oa as DocumentExtension,ra as DragControls,na as DragMode,ia as DropListener,la as Duplicatable,da as EffectWrapper,ca as EmissionModule,ma as EmphasizeOnClick,pa as EngineLoadingView,ga as EnvironmentScene,ua as EventList,Sa as EventListEvent,Ca as EventSystem,ya as EventTrigger,Ea as FieldWithDefault,Ra as FileReference,ha as FileReferenceSerializer,va as FileSpawnModel,fa as File_Event,Pa as FixedJoint,Aa as Fog,Ta as FrameEvent,Ma as GENERATOR,s as GameObject,ba as Gizmos,Ia as GltfExport,Da as GltfExportBox,Oa as Gradient,xa as Graphic,ka as GraphicRaycaster,La as Graphics,Ba as GridHelper,Fa as GridLayoutGroup,Na as GroundProjectedEnv,wa as GroupActionModel,Wa as HideFlags,Ga as HideOnStart,Ua as HingeJoint,Ha as HorizontalLayoutGroup,Xa as HostData,za as HoverAnimation,Va as Image,_a as ImageReference,ja as ImageReferenceSerializer,Ka as InheritVelocityModule,Qa as Input,Za as InputEventQueue,Ya as InputEvents,Ja as InputField,$a as InstanceHandle,qa as InstancingHandler,es as InstancingUtil,as as InstantiateEvent,ss as InstantiateIdProvider,ts as InstantiateOptions,os as Interactable,rs as InternalScreenshotUtils,ns as JoinedRoomResponse,is as KeyEventArgs,ls as Keyframe,ds as LODGroup,cs as LODModel,ms as LeftRoomResponse,ps as Light,gs as LightData,us as LimitVelocityOverLifetimeModule,Ss as LoadingElementOptions,Cs as LogStats,ys as LogType,Es as LookAt,Rs as LookAtConstraint,hs as MainModule,vs as MarkerTrackHandler,fs as MarkerType,Ps as MaskableGraphic,As as MaterialPropertyBlock,Ts as MaterialX,Ms as Mathf,bs as MeshCollider,Is as MeshRenderer,Ds as MinMaxCurve,Os as MinMaxGradient,xs as NEEDLE_ENGINE_FEATURE_FLAGS,ks as NEEDLE_ENGINE_MODULES,rc as NEEDLE_progressive,Ls as NEKeyboardEvent,Bs as NEPointerEvent,Fs as NeedleButtonElement,Ns as NeedleEngine,ws as NeedleEngineModelLoader,Ws as NeedleEngineWebComponent,Gs as NeedleMenu,Us as NeedlePatchesKey,Hs as NeedleUSDZExporter,Xs as NeedleXRController,g as NeedleXRSession,zs as NeedleXRSync,Vs as NeedleXRUtils,_s as NestedGltf,js as NetworkConnection,Ks as NetworkedStreamEvents,Qs as NetworkedStreams,Zs as Networking,Ys as NewInstanceModel,Js as NoiseModule,$s as ObjectRaycaster,qs as ObjectUtils,et as OffsetConstraint,at as OneEuroFilter,st as OneEuroFilterXYZ,tt as OpenURL,ot as OrbitControls,rt as Outline,nt as OwnershipEvent,it as OwnershipModel,lt as PUBLIC_KEY,dt as Padding,ct as ParticleBurst,mt as ParticleSubEmitter,pt as ParticleSystem,gt as ParticleSystemBaseBehaviour,ut as ParticleSystemRenderer,St as ParticleSystemShapeType,Ct as PeerHandle,yt as PeerNetworking,Et as Physics,Rt as PhysicsExtension,ht as PhysicsMaterialCombine,vt as PixelationEffect,ft as PlayAnimationOnClick,Pt as PlayAudioOnClick,At as PlayableDirector,Tt as PlayerColor,Mt as PlayerState,bt as PlayerStateEvent,It as PlayerSync,Dt as PlayerView,Ot as PlayerViewManager,xt as PointerEventData,kt as PointerType,Lt as PostProcessingEffect,Bt as PostProcessingEffectOrder,Ft as PostProcessingHandler,Nt as PostProcessingManager,wt as PreliminaryAction,Wt as PreliminaryTrigger,Gt as PreviewHelper,Ut as PrimitiveType,Ht as Progress,Xt as PromiseAllWithErrors,zt as PromiseErrorResult,Vt as RGBAColor,_t as RapierPhysics,jt as RawImage,Kt as RaycastOptions,Qt as Rect,Zt as RectTransform,Yt as ReflectionProbe,Jt as RegisteredAnimationInfo,$t as RemoteSkybox,qt as RenderTexture,eo as RenderTextureSerializer,ao as Renderer,so as RendererData,to as RendererLightmap,oo as Rigidbody,ro as RigidbodyConstraints,no as RoomEvents,io as RotationBySpeedModule,lo as RotationOverLifetimeModule,co as SceneLightSettings,mo as SceneSwitcher,po as ScreenCapture,go as ScreenSpaceAmbientOcclusion,uo as ScreenSpaceAmbientOcclusionN8,So as ScrollFollow,Co as SeeThrough,yo as SendQueue,Eo as SerializationContext,Ro as SetActiveOnClick,ho as ShadowCatcher,vo as ShapeModule,fo as ShapeOverlapResult,Po as SharpeningEffect,Ao as SignalAsset,To as SignalReceiver,Mo as SignalReceiverEvent,bo as SignalTrackHandler,Io as Size,Do as SizeBySpeedModule,Oo as SizeOverLifetimeModule,xo as SkinnedMeshRenderer,ko as SmoothFollow,Lo as SpatialGrabRaycaster,Bo as SpatialHtml,Fo as SpatialTrigger,No as SpatialTriggerReceiver,wo as SpectatorCamera,Wo as SphereCollider,Go as SphereIntersection,Uo as SplineContainer,Ho as SplineData,Xo as SplineUtils,zo as SplineWalker,Vo as Sprite,_o as SpriteData,jo as SpriteRenderer,Ko as SpriteSheet,Qo as StateMachineBehaviour,Zo as StreamEndedEvent,Yo as StreamReceivedEvent,Jo as SubEmitterSystem,$o as SyncedCamera,qo as SyncedRoom,er as SyncedTransform,ar as TapGestureTrigger,sr as TeleportTarget,tr as TestRunner,or as TestSimulateUserData,rr as Text,nr as TextBuilder,ir as TextExtension,lr as TextureSheetAnimationModule,dr as TiltShiftEffect,cr as Time,mr as ToneMappingEffect,pr as TrackHandler,gr as TrackType,ur as TrailModule,Sr as TransformData,Cr as TransformGizmo,yr as TriggerBuilder,Er as TriggerModel,m as TypeStore,Rr as UIRaycastUtils,hr as UIRootComponent,vr as USDDocument,fr as USDObject,Pr as USDWriter,Ar as USDZExporter,Tr as USDZText,Mr as USDZUIExtension,br as UriSerializer,Ir as UsageMarker,Dr as UserJoinedOrLeftRoomModel,S as VERSION,Or as VariantAction,xr as VelocityOverLifetimeModule,kr as VerticalLayoutGroup,Lr as VideoPlayer,Br as ViewBox,Fr as ViewDevice,Nr as Vignette,wr as VisibilityAction,Wr as Voip,Gr as Volume,Ur as VolumeParameter,Hr as VolumeProfile,Xr as WaitForFrames,zr as WaitForPromise,Vr as WaitForSeconds,_r as Watch,jr as WebARCameraBackground,Kr as WebARSessionRoot,Qr as WebXR,Zr as WebXRButtonFactory,Yr as WebXRImageTracking,Jr as WebXRImageTrackingModel,$r as WebXRPlaneTracking,qr as WebXRTrackedImage,en as XRControllerFollow,an as XRControllerModel,sn as XRControllerMovement,tn as XRFlag,on as XRRig,rn as XRState,nn as XRStateFlag,ln as __Ignore,dn as __internalNotifyObjectDestroyed,cn as activeInHierarchyFieldName,mn as addAttributeChangeCallback,pn as addComponent,gn as addCustomExtensionPlugin,un as addNewComponent,Sn as addPatch,Cn as apply,yn as applyHMRChanges,En as applyPrototypeExtensions,Rn as beginListenDestroy,hn as beginListenInstantiate,vn as binaryIdentifierCasts,fn as build_scene_functions,Pn as builtinComponentKeyName,An as calculateProgress01,Tn as clearBalloonMessages,Mn as clearOverlayMessages,bn as colorSerializer,In as compareAssociation,Dn as componentSerializer,On as copyTexture,xn as createMotion,kn as debugNet,Ln as debugOwner,Bn as decompressGpuTexture,Fn as deepClone,Nn as delay,wn as delayForFrames,Wn as deserializeObject,Gn as destroy,Un as destroyComponentInstance,Hn as determineMimeTypeFromExtension,Xn as disposeObjectResources,zn as disposeStream,Vn as editorGuidKeyName,_n as enableSpatialConsole,jn as euler,Kn as eventListSerializer,Qn as exportAsGLTF,Zn as findByGuid,Yn as findObjectOfType,Jn as findObjectsOfType,$n as findResourceUsers,qn as fitCamera,ei as fitObjectIntoVolume,ai as foreachComponent,si as foreachComponentEnumerator,ti as forward,oi as generateQRCode,ri as generateSeed,ni as getBoundingBox,ii as getCameraController,li as getComponent,di as getComponentInChildren,ci as getComponentInParent,mi as getComponents,pi as getComponentsInChildren,gi as getComponentsInParent,ui as getFormattedDate,Si as getIconElement,Ci as getIconTexture,yi as getLoader,Ei as getOrAddComponent,Ri as getParam,hi as getParentHierarchyPath,vi as getPath,fi as getPeerOptions,Pi as getPeerjsInstance,Ai as getResourceUserCount,Ti as getTempColor,Mi as getTempQuaternion,bi as getTempVector,Ii as getUrlParams,Di as getVisibleInCustomShadowRendering,Oi as getWorldDirection,xi as getWorldEuler,ki as getWorldPosition,Li as getWorldQuaternion,Bi as getWorldRotation,Fi as getWorldScale,Ni as hasCommercialLicense,wi as hasIndieLicense,Wi as hasPointerEventComponent,Gi as hasProLicense,Ui as hideDebugConsole,Hi as imageToCanvas,Xi as instantiate,zi as invokeLoadedImportPluginHooks,Vi as invokeXRSessionEnd,_i as invokeXRSessionStart,ji as isActiveInHierarchy,Ki as isActiveSelf,Qi as isAndroidDevice,Zi as isAnimationAction,Yi as isComponent,Ji as isDebugMode,$i as isDesktop,qi as isDestroyed,el as isDevEnvironment,al as isDisposed,sl as isExporting,tl as isGLTFModel,ol as isHostedOnGlitch,rl as isHotReloadEnabled,nl as isHotReloading,il as isIPad,ll as isIconElement,dl as isLocalNetwork,cl as isMacOS,ml as isMobileDevice,pl as isMozillaXR,gl as isQuest,ul as isResourceTrackingEnabled,Sl as isSafari,Cl as isUsingInstancing,yl as isiOS,El as isiPad,p as loadAsset,Rl as loadPMREM,hl as loadSync,vl as logHierarchy,fl as lookAtInverse,Pl as lookAtObject,Al as lookAtScreenPoint,Tl as makeId,Ml as makeIdFromRandomWords,bl as makeNameSafeForUSD,Il as markAsInstancedRendered,Dl as microphonePermissionsGranted,Ol as nameof,xl as nameofFactory,kl as objectSerializer,Ll as offXRSessionEnd,Bl as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,Fl as onXRSessionEnd,Nl as onXRSessionStart,wl as parseSync,Wl as placeOnSurface,Gl as postprocessFBXMaterials,Ul as prefix,Hl as pushState,Xl as randomNumber,zl as registerBinaryType,Vl as registerComponent,_l as registerComponentExtension,jl as registerCustomEffectType,Kl as registerExportExtensions,Ql as registerExtensions,Zl as registerHotReloadType,Yl as registerLoader,Jl as registerPrefabProvider,$l as registerPrototypeExtensions,ql as registerType,ed as relativePathPrefix,ad as removeAttributeChangeCallback,sd as removeComponent,td as removeCustomImportExtensionType,od as removePatch,rd as resolveUrl,nd as sanitizeString,id as saveImage,ld as screenshot,dd as screenshot2,cd as sendDestroyed,md as serializable,pd as serializeObject,gd as serializeable,ud as setActive,Sd as setAllowBalloonMessages,Cd as setAllowOverlayMessages,yd as setAutoFitEnabled,Ed as setCameraController,Rd as setDestroyed,hd as setDevEnvironment,vd as setDisposable,fd as setDontDestroy,Pd as setOrAddParamsToUrl,Ad as setParam,Td as setParamWithoutReload,Md as setPeerOptions,bd as setResourceTrackingEnabled,Id as setState,Dd as setVisibleInCustomShadowRendering,Od as setWorldEuler,xd as setWorldPosition,kd as setWorldPositionXYZ,Ld as setWorldQuaternion,Bd as setWorldQuaternionXYZW,Fd as setWorldRotation,Nd as setWorldRotationXYZ,wd as setWorldScale,Wd as showBalloonError,Gd as showBalloonMessage,Ud as showBalloonWarning,Hd as showDebugConsole,Xd as slerp,zd as syncDestroy,Vd as syncField,_d as syncInstantiate,jd as textureToCanvas,Kd as toSourceId,Qd as tryCastBinary,Zd as tryDetermineMimetypeFromBinary,Yd as tryDetermineMimetypeFromURL,Jd as tryFindObject,$d as tryGetGuid,qd as unregisterHotReloadType,ec as unwatchWrite,ac as useForAutoFit,sc as validate,tc as watchWrite};
|
|
1
|
+
import{initEngine as y,GameObject as s,onClear as o,onDestroy as r,onInitialized as n,onAfterRender as i,onBeforeRender as l,onUpdate as d,onStart as c,TypeStore as m,loadAsset as p,NeedleXRSession as g,Context as u,VERSION as S,Component as E,Components as R}from"./needle-engine.bundle-CoEvMwYM.min.js";import{$componentName as h,$physicsKey as v,ActionBuilder as f,ActionCollection as P,ActionModel as A,Addressables as T,AlignmentConstraint as M,AmbientMode as b,Animation as I,AnimationCurve as D,AnimationExtension as O,AnimationTrackHandler as x,AnimationUtils as k,Animator as L,AnimatorConditionMode as B,AnimatorController as F,AnimatorControllerParameterType as N,AnimatorStateInfo as w,Antialiasing as W,Application as G,AssetDatabase as U,AssetReference as H,Attractor as X,AudioExtension as z,AudioListener as V,AudioSource as _,AudioTrackHandler as j,Avatar as K,AvatarBlink_Simple as Q,AvatarEyeLook_Rotation as Z,AvatarLoader as Y,AvatarMarker as J,AvatarModel as $,Avatar_Brain_LookAt as q,Avatar_MouthShapes as ee,Avatar_MustacheShake as ae,Avatar_POI as se,Axes as te,AxesHelper as oe,BUILD_TIME as re,BaseUIComponent as ne,BasicIKConstraint as ie,BehaviorExtension as le,BehaviorModel as de,Component$1 as ce,BlobStorage as me,BloomEffect as pe,BoxCollider as ge,BoxGizmo as ue,BoxHelperComponent as Se,Button as Ce,ButtonsFactory as ye,CallDirection as Ee,CallInfo as Re,Camera as he,CameraTargetReachedEvent as ve,Canvas as fe,CanvasGroup as Pe,CapsuleCollider as Ae,ChangeMaterialOnClick as Te,ChangeTransformOnClick as Me,CharacterController as be,CharacterControllerInput as Ie,ChromaticAberration as De,CircularBuffer as Oe,ClearFlags as xe,ClickThrough as ke,ClipExtrapolation as Le,Collider as Be,Collision as Fe,CollisionDetectionMode as Ne,ColorAdjustments as we,ColorBySpeedModule as We,ColorOverLifetimeModule as Ge,Component$1 as Ue,ComponentLifecycleEvents as He,ConnectionEvents as Xe,ContactPoint as ze,ContactShadows as Ve,ContextArgs as _e,ContextEvent as je,ContextRegistry as Ke,ControlTrackHandler as Qe,CursorFollow as Ze,CustomBranding as Ye,CustomShader as Je,DefaultReflectionMode as $e,Deletable as qe,DeleteBox as ea,DepthOfField as aa,DeviceFlag as sa,DeviceUtilities as ta,DocumentExtension as oa,DragControls as ra,DragMode as na,DropListener as ia,Duplicatable as la,EffectWrapper as da,EmissionModule as ca,EmphasizeOnClick as ma,EngineLoadingView as pa,EnvironmentScene as ga,EventList as ua,EventListEvent as Sa,EventSystem as Ca,EventTrigger as ya,FieldWithDefault as Ea,FileReference as Ra,FileReferenceSerializer as ha,FileSpawnModel as va,File_Event as fa,FixedJoint as Pa,Fog as Aa,FrameEvent as Ta,GENERATOR as Ma,Gizmos as ba,GltfExport as Ia,GltfExportBox as Da,Gradient as Oa,Graphic as xa,GraphicRaycaster as ka,Graphics as La,GridHelper as Ba,GridLayoutGroup as Fa,GroundProjectedEnv as Na,GroupActionModel as wa,HideFlags as Wa,HideOnStart as Ga,HingeJoint as Ua,HorizontalLayoutGroup as Ha,HostData as Xa,HoverAnimation as za,Image as Va,ImageReference as _a,ImageReferenceSerializer as ja,InheritVelocityModule as Ka,Input as Qa,InputEventQueue as Za,InputEvents as Ya,InputField as Ja,InstanceHandle as $a,InstancingHandler as qa,InstancingUtil as es,InstantiateEvent as as,InstantiateIdProvider as ss,InstantiateOptions as ts,Interactable as os,InternalScreenshotUtils as rs,JoinedRoomResponse as ns,KeyEventArgs as is,Keyframe as ls,LODGroup as ds,LODModel as cs,LeftRoomResponse as ms,Light as ps,LightData as gs,LimitVelocityOverLifetimeModule as us,LoadingElementOptions as Ss,LogStats as Cs,LogType as ys,LookAt as Es,LookAtConstraint as Rs,MainModule as hs,MarkerTrackHandler as vs,MarkerType as fs,MaskableGraphic as Ps,MaterialPropertyBlock as As,MaterialX as Ts,Mathf as Ms,MeshCollider as bs,MeshRenderer as Is,MinMaxCurve as Ds,MinMaxGradient as Os,NEEDLE_ENGINE_FEATURE_FLAGS as xs,MODULES as ks,NEKeyboardEvent as Ls,NEPointerEvent as Bs,NeedleButtonElement as Fs,ContextRegistry as Ns,NeedleEngineModelLoader as ws,NeedleEngineWebComponent as Ws,NeedleMenu as Gs,NeedlePatchesKey as Us,USDZExporter as Hs,NeedleXRController as Xs,NeedleXRSync as zs,NeedleXRUtils as Vs,NestedGltf as _s,NetworkConnection as js,NetworkedStreamEvents as Ks,NetworkedStreams as Qs,Networking as Zs,NewInstanceModel as Ys,NoiseModule as Js,ObjectRaycaster as $s,ObjectUtils as qs,OffsetConstraint as et,OneEuroFilter as at,OneEuroFilterXYZ as st,OpenURL as tt,OrbitControls as ot,Outline as rt,OwnershipEvent as nt,OwnershipModel as it,PUBLIC_KEY as lt,Padding as dt,ParticleBurst as ct,ParticleSubEmitter as mt,ParticleSystem as pt,ParticleSystemBaseBehaviour as gt,ParticleSystemRenderer as ut,ParticleSystemShapeType as St,PeerHandle as Ct,PeerNetworking as yt,Physics as Et,PhysicsExtension as Rt,PhysicsMaterialCombine as ht,PixelationEffect as vt,PlayAnimationOnClick as ft,PlayAudioOnClick as Pt,PlayableDirector as At,PlayerColor as Tt,PlayerState as Mt,PlayerStateEvent as bt,PlayerSync as It,PlayerView as Dt,PlayerViewManager as Ot,PointerEventData as xt,PointerType as kt,PostProcessingEffect as Lt,PostProcessingEffectOrder as Bt,PostProcessingHandler as Ft,Volume as Nt,PreliminaryAction as wt,PreliminaryTrigger as Wt,PreviewHelper as Gt,PrimitiveType as Ut,Progress as Ht,PromiseAllWithErrors as Xt,PromiseErrorResult as zt,RGBAColor as Vt,RapierPhysics as _t,RawImage as jt,RaycastOptions as Kt,Rect as Qt,RectTransform as Zt,ReflectionProbe as Yt,RegisteredAnimationInfo as Jt,RemoteSkybox as $t,RenderTexture as qt,RenderTextureSerializer as eo,Renderer as ao,RendererData as so,RendererLightmap as to,Rigidbody as oo,RigidbodyConstraints as ro,RoomEvents as no,RotationBySpeedModule as io,RotationOverLifetimeModule as lo,SceneLightSettings as co,SceneSwitcher as mo,ScreenCapture as po,ScreenSpaceAmbientOcclusion as go,ScreenSpaceAmbientOcclusionN8 as uo,ScrollFollow as So,SeeThrough as Co,SendQueue as yo,SerializationContext as Eo,SetActiveOnClick as Ro,ShadowCatcher as ho,ShapeModule as vo,ShapeOverlapResult as fo,SharpeningEffect as Po,SignalAsset as Ao,SignalReceiver as To,SignalReceiverEvent as Mo,SignalTrackHandler as bo,Size as Io,SizeBySpeedModule as Do,SizeOverLifetimeModule as Oo,SkinnedMeshRenderer as xo,SmoothFollow as ko,SpatialGrabRaycaster as Lo,SpatialHtml as Bo,SpatialTrigger as Fo,SpatialTriggerReceiver as No,SpectatorCamera as wo,SphereCollider as Wo,SphereIntersection as Go,SplineContainer as Uo,SplineData as Ho,SplineUtils as Xo,SplineWalker as zo,Sprite as Vo,SpriteData as _o,SpriteRenderer as jo,SpriteSheet as Ko,StateMachineBehaviour as Qo,StreamEndedEvent as Zo,StreamReceivedEvent as Yo,SubEmitterSystem as Jo,SyncedCamera as $o,SyncedRoom as qo,SyncedTransform as er,TapGestureTrigger as ar,TeleportTarget as sr,TestRunner as tr,TestSimulateUserData as or,Text as rr,TextBuilder as nr,TextExtension as ir,TextureSheetAnimationModule as lr,TiltShiftEffect as dr,Time as cr,ToneMappingEffect as mr,TrackHandler as pr,TrackType as gr,TrailModule as ur,TransformData as Sr,TransformGizmo as Cr,TriggerBuilder as yr,TriggerModel as Er,UIRaycastUtils as Rr,UIRootComponent as hr,USDDocument as vr,USDObject as fr,USDWriter as Pr,USDZExporter$1 as Ar,USDZText as Tr,USDZUIExtension as Mr,UriSerializer as br,UsageMarker as Ir,UserJoinedOrLeftRoomModel as Dr,VariantAction as Or,VelocityOverLifetimeModule as xr,VerticalLayoutGroup as kr,VideoPlayer as Lr,ViewBox as Br,ViewDevice as Fr,Vignette as Nr,VisibilityAction as wr,Voip as Wr,Volume as Gr,VolumeParameter as Ur,VolumeProfile as Hr,WaitForFrames as Xr,WaitForPromise as zr,WaitForSeconds as Vr,Watch as _r,WebARCameraBackground as jr,WebARSessionRoot as Kr,WebXR as Qr,WebXRButtonFactory as Zr,WebXRImageTracking as Yr,WebXRImageTrackingModel as Jr,WebXRPlaneTracking as $r,WebXRTrackedImage as qr,XRControllerFollow as en,XRControllerModel as an,XRControllerMovement as sn,XRFlag as tn,XRRig as on,XRState as rn,XRStateFlag as nn,__Ignore as ln,__internalNotifyObjectDestroyed as dn,activeInHierarchyFieldName as cn,addAttributeChangeCallback as mn,addComponent as pn,addCustomExtensionPlugin as gn,addNewComponent as un,addPatch as Sn,apply as Cn,applyHMRChanges as yn,applyPrototypeExtensions as En,beginListenDestroy as Rn,beginListenInstantiate as hn,binaryIdentifierCasts as vn,build_scene_functions as fn,builtinComponentKeyName as Pn,calculateProgress01 as An,clearMessages as Tn,clearMessages as Mn,colorSerializer as bn,compareAssociation as In,componentSerializer as Dn,copyTexture as On,createMotion as xn,debugNet as kn,debugOwner as Ln,decompressGpuTexture as Bn,deepClone as Fn,delay as Nn,delayForFrames as wn,deserializeObject as Wn,destroy as Gn,destroyComponentInstance as Un,determineMimeTypeFromExtension as Hn,disposeObjectResources as Xn,disposeStream as zn,editorGuidKeyName as Vn,enableSpatialConsole as _n,euler as jn,eventListSerializer as Kn,exportAsGLTF as Qn,findByGuid as Zn,findObjectOfType as Yn,findObjectsOfType as Jn,findResourceUsers as $n,fitCamera as qn,fitObjectIntoVolume as ei,foreachComponent as ai,foreachComponentEnumerator as si,forward as ti,generateQRCode as oi,generateSeed as ri,getBoundingBox as ni,getCameraController as ii,getComponent as li,getComponentInChildren as di,getComponentInParent as ci,getComponents as mi,getComponentsInChildren as pi,getComponentsInParent as gi,getFormattedDate as ui,getIconElement as Si,getIconTexture as Ci,getLoader as yi,getOrAddComponent as Ei,getParam as Ri,getParentHierarchyPath as hi,getPath as vi,getPeerOptions as fi,getPeerjsInstance as Pi,getResourceUserCount as Ai,getTempColor as Ti,getTempQuaternion as Mi,getTempVector as bi,getUrlParams as Ii,getVisibleInCustomShadowRendering as Di,getWorldDirection as Oi,getWorldEuler as xi,getWorldPosition as ki,getWorldQuaternion as Li,getWorldRotation as Bi,getWorldScale as Fi,hasCommercialLicense as Ni,hasIndieLicense as wi,hasPointerEventComponent as Wi,hasProLicense as Gi,hideDebugConsole as Ui,imageToCanvas as Hi,instantiate as Xi,invokeLoadedImportPluginHooks as zi,invokeXRSessionEnd as Vi,invokeXRSessionStart as _i,isActiveInHierarchy as ji,isActiveSelf as Ki,isAndroidDevice as Qi,isAnimationAction as Zi,isComponent as Yi,isDebugMode as Ji,isDesktop as $i,isDestroyed as qi,isDevEnvironment as el,isDisposed as al,isExporting as sl,isGLTFModel as tl,isHostedOnGlitch as ol,isHotReloadEnabled as rl,isHotReloading as nl,isIPad as il,isIconElement as ll,isLocalNetwork as dl,isMacOS as cl,isMobileDevice as ml,isMozillaXR as pl,isQuest as gl,isResourceTrackingEnabled as ul,isSafari as Sl,isUsingInstancing as Cl,isiOS as yl,isiPad as El,loadPMREM as Rl,loadSync as hl,logHierarchy as vl,lookAtInverse as fl,lookAtObject as Pl,lookAtScreenPoint as Al,makeId as Tl,makeIdFromRandomWords as Ml,makeNameSafe as bl,markAsInstancedRendered as Il,microphonePermissionsGranted as Dl,nameof as Ol,nameofFactory as xl,objectSerializer as kl,offXRSessionEnd as Ll,offXRSessionStart as Bl,onXRSessionEnd as Fl,onXRSessionStart as Nl,parseSync as wl,placeOnSurface as Wl,postprocessFBXMaterials as Gl,prefix as Ul,pushState as Hl,randomNumber as Xl,registerBinaryType as zl,registerComponent as Vl,registerComponentExtension as _l,registerCustomEffectType as jl,registerExportExtensions as Kl,registerExtensions as Ql,registerHotReloadType as Zl,registerLoader as Yl,registerPrefabProvider as Jl,registerPrototypeExtensions as $l,registerType as ql,relativePathPrefix as ed,removeAttributeChangeCallback as ad,removeComponent as sd,removeCustomImportExtensionType as td,removePatch as od,resolveUrl as rd,sanitizeString as nd,saveImage as id,screenshot as ld,screenshot2 as dd,sendDestroyed as cd,serializable as md,serializeObject as pd,serializeable as gd,setActive as ud,setAllowBalloonMessages as Sd,setAllowOverlayMessages as Cd,setAutoFitEnabled as yd,setCameraController as Ed,setDestroyed as Rd,setDevEnvironment as hd,setDisposable as vd,setDontDestroy as fd,setOrAddParamsToUrl as Pd,setParam as Ad,setParamWithoutReload as Td,setPeerOptions as Md,setResourceTrackingEnabled as bd,setState as Id,setVisibleInCustomShadowRendering as Dd,setWorldEuler as Od,setWorldPosition as xd,setWorldPositionXYZ as kd,setWorldQuaternion as Ld,setWorldQuaternionXYZW as Bd,setWorldRotation as Fd,setWorldRotationXYZ as Nd,setWorldScale as wd,showBalloonError as Wd,showBalloonMessage as Gd,showBalloonWarning as Ud,showDebugConsole as Hd,slerp as Xd,syncDestroy as zd,syncField as Vd,syncInstantiate as _d,textureToCanvas as jd,toSourceId as Kd,tryCastBinary as Qd,tryDetermineMimetypeFromBinary as Zd,tryDetermineMimetypeFromURL as Yd,tryFindObject as Jd,tryGetGuid as $d,unregisterHotReloadType as qd,unwatchWrite as ec,useForAutoFit as ac,validate as sc,watchWrite as tc}from"./needle-engine.bundle-CoEvMwYM.min.js";import{THREE as oc}from"./three.min.js";import{NEEDLE_progressive as rc}from"./gltf-progressive-BryRjllq.min.js";y();const a={VERSION:S,Context:u,NeedleXRSession:g,assets:{loadFromURL:p},types:m,onStart:c,onUpdate:d,onBeforeRender:l,onAfterRender:i,onInitializedContext:n,onDestroyContext:r,onClearContext:o};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function C(e){for(const t in e)a[t]=e[t]}C(E),C(R);for(const e of Object.getOwnPropertyNames(s))switch(e){case"prototype":case"constructor":case"length":case"name":continue;default:a[e]=s[e];break}if(!globalThis.Needle)globalThis.Needle=a;else for(const e in a)globalThis.Needle[e]=a[e];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=oc;export{h as $componentName,v as $physicsKey,f as ActionBuilder,P as ActionCollection,A as ActionModel,T as Addressables,M as AlignmentConstraint,b as AmbientMode,I as Animation,D as AnimationCurve,O as AnimationExtension,x as AnimationTrackHandler,k as AnimationUtils,L as Animator,B as AnimatorConditionMode,F as AnimatorController,N as AnimatorControllerParameterType,w as AnimatorStateInfo,W as Antialiasing,G as Application,U as AssetDatabase,H as AssetReference,X as Attractor,z as AudioExtension,V as AudioListener,_ as AudioSource,j as AudioTrackHandler,K as Avatar,Q as AvatarBlink_Simple,Z as AvatarEyeLook_Rotation,Y as AvatarLoader,J as AvatarMarker,$ as AvatarModel,q as Avatar_Brain_LookAt,ee as Avatar_MouthShapes,ae as Avatar_MustacheShake,se as Avatar_POI,te as Axes,oe as AxesHelper,re as BUILD_TIME,ne as BaseUIComponent,ie as BasicIKConstraint,le as BehaviorExtension,de as BehaviorModel,ce as Behaviour,me as BlobStorage,pe as BloomEffect,ge as BoxCollider,ue as BoxGizmo,Se as BoxHelperComponent,Ce as Button,ye as ButtonsFactory,Ee as CallDirection,Re as CallInfo,he as Camera,ve as CameraTargetReachedEvent,fe as Canvas,Pe as CanvasGroup,Ae as CapsuleCollider,Te as ChangeMaterialOnClick,Me as ChangeTransformOnClick,be as CharacterController,Ie as CharacterControllerInput,De as ChromaticAberration,Oe as CircularBuffer,xe as ClearFlags,ke as ClickThrough,Le as ClipExtrapolation,Be as Collider,Fe as Collision,Ne as CollisionDetectionMode,we as ColorAdjustments,We as ColorBySpeedModule,Ge as ColorOverLifetimeModule,Ue as Component,He as ComponentLifecycleEvents,Xe as ConnectionEvents,ze as ContactPoint,Ve as ContactShadows,u as Context,_e as ContextArgs,je as ContextEvent,Ke as ContextRegistry,Qe as ControlTrackHandler,Ze as CursorFollow,Ye as CustomBranding,Je as CustomShader,$e as DefaultReflectionMode,qe as Deletable,ea as DeleteBox,aa as DepthOfField,sa as DeviceFlag,ta as DeviceUtilities,oa as DocumentExtension,ra as DragControls,na as DragMode,ia as DropListener,la as Duplicatable,da as EffectWrapper,ca as EmissionModule,ma as EmphasizeOnClick,pa as EngineLoadingView,ga as EnvironmentScene,ua as EventList,Sa as EventListEvent,Ca as EventSystem,ya as EventTrigger,Ea as FieldWithDefault,Ra as FileReference,ha as FileReferenceSerializer,va as FileSpawnModel,fa as File_Event,Pa as FixedJoint,Aa as Fog,Ta as FrameEvent,Ma as GENERATOR,s as GameObject,ba as Gizmos,Ia as GltfExport,Da as GltfExportBox,Oa as Gradient,xa as Graphic,ka as GraphicRaycaster,La as Graphics,Ba as GridHelper,Fa as GridLayoutGroup,Na as GroundProjectedEnv,wa as GroupActionModel,Wa as HideFlags,Ga as HideOnStart,Ua as HingeJoint,Ha as HorizontalLayoutGroup,Xa as HostData,za as HoverAnimation,Va as Image,_a as ImageReference,ja as ImageReferenceSerializer,Ka as InheritVelocityModule,Qa as Input,Za as InputEventQueue,Ya as InputEvents,Ja as InputField,$a as InstanceHandle,qa as InstancingHandler,es as InstancingUtil,as as InstantiateEvent,ss as InstantiateIdProvider,ts as InstantiateOptions,os as Interactable,rs as InternalScreenshotUtils,ns as JoinedRoomResponse,is as KeyEventArgs,ls as Keyframe,ds as LODGroup,cs as LODModel,ms as LeftRoomResponse,ps as Light,gs as LightData,us as LimitVelocityOverLifetimeModule,Ss as LoadingElementOptions,Cs as LogStats,ys as LogType,Es as LookAt,Rs as LookAtConstraint,hs as MainModule,vs as MarkerTrackHandler,fs as MarkerType,Ps as MaskableGraphic,As as MaterialPropertyBlock,Ts as MaterialX,Ms as Mathf,bs as MeshCollider,Is as MeshRenderer,Ds as MinMaxCurve,Os as MinMaxGradient,xs as NEEDLE_ENGINE_FEATURE_FLAGS,ks as NEEDLE_ENGINE_MODULES,rc as NEEDLE_progressive,Ls as NEKeyboardEvent,Bs as NEPointerEvent,Fs as NeedleButtonElement,Ns as NeedleEngine,ws as NeedleEngineModelLoader,Ws as NeedleEngineWebComponent,Gs as NeedleMenu,Us as NeedlePatchesKey,Hs as NeedleUSDZExporter,Xs as NeedleXRController,g as NeedleXRSession,zs as NeedleXRSync,Vs as NeedleXRUtils,_s as NestedGltf,js as NetworkConnection,Ks as NetworkedStreamEvents,Qs as NetworkedStreams,Zs as Networking,Ys as NewInstanceModel,Js as NoiseModule,$s as ObjectRaycaster,qs as ObjectUtils,et as OffsetConstraint,at as OneEuroFilter,st as OneEuroFilterXYZ,tt as OpenURL,ot as OrbitControls,rt as Outline,nt as OwnershipEvent,it as OwnershipModel,lt as PUBLIC_KEY,dt as Padding,ct as ParticleBurst,mt as ParticleSubEmitter,pt as ParticleSystem,gt as ParticleSystemBaseBehaviour,ut as ParticleSystemRenderer,St as ParticleSystemShapeType,Ct as PeerHandle,yt as PeerNetworking,Et as Physics,Rt as PhysicsExtension,ht as PhysicsMaterialCombine,vt as PixelationEffect,ft as PlayAnimationOnClick,Pt as PlayAudioOnClick,At as PlayableDirector,Tt as PlayerColor,Mt as PlayerState,bt as PlayerStateEvent,It as PlayerSync,Dt as PlayerView,Ot as PlayerViewManager,xt as PointerEventData,kt as PointerType,Lt as PostProcessingEffect,Bt as PostProcessingEffectOrder,Ft as PostProcessingHandler,Nt as PostProcessingManager,wt as PreliminaryAction,Wt as PreliminaryTrigger,Gt as PreviewHelper,Ut as PrimitiveType,Ht as Progress,Xt as PromiseAllWithErrors,zt as PromiseErrorResult,Vt as RGBAColor,_t as RapierPhysics,jt as RawImage,Kt as RaycastOptions,Qt as Rect,Zt as RectTransform,Yt as ReflectionProbe,Jt as RegisteredAnimationInfo,$t as RemoteSkybox,qt as RenderTexture,eo as RenderTextureSerializer,ao as Renderer,so as RendererData,to as RendererLightmap,oo as Rigidbody,ro as RigidbodyConstraints,no as RoomEvents,io as RotationBySpeedModule,lo as RotationOverLifetimeModule,co as SceneLightSettings,mo as SceneSwitcher,po as ScreenCapture,go as ScreenSpaceAmbientOcclusion,uo as ScreenSpaceAmbientOcclusionN8,So as ScrollFollow,Co as SeeThrough,yo as SendQueue,Eo as SerializationContext,Ro as SetActiveOnClick,ho as ShadowCatcher,vo as ShapeModule,fo as ShapeOverlapResult,Po as SharpeningEffect,Ao as SignalAsset,To as SignalReceiver,Mo as SignalReceiverEvent,bo as SignalTrackHandler,Io as Size,Do as SizeBySpeedModule,Oo as SizeOverLifetimeModule,xo as SkinnedMeshRenderer,ko as SmoothFollow,Lo as SpatialGrabRaycaster,Bo as SpatialHtml,Fo as SpatialTrigger,No as SpatialTriggerReceiver,wo as SpectatorCamera,Wo as SphereCollider,Go as SphereIntersection,Uo as SplineContainer,Ho as SplineData,Xo as SplineUtils,zo as SplineWalker,Vo as Sprite,_o as SpriteData,jo as SpriteRenderer,Ko as SpriteSheet,Qo as StateMachineBehaviour,Zo as StreamEndedEvent,Yo as StreamReceivedEvent,Jo as SubEmitterSystem,$o as SyncedCamera,qo as SyncedRoom,er as SyncedTransform,ar as TapGestureTrigger,sr as TeleportTarget,tr as TestRunner,or as TestSimulateUserData,rr as Text,nr as TextBuilder,ir as TextExtension,lr as TextureSheetAnimationModule,dr as TiltShiftEffect,cr as Time,mr as ToneMappingEffect,pr as TrackHandler,gr as TrackType,ur as TrailModule,Sr as TransformData,Cr as TransformGizmo,yr as TriggerBuilder,Er as TriggerModel,m as TypeStore,Rr as UIRaycastUtils,hr as UIRootComponent,vr as USDDocument,fr as USDObject,Pr as USDWriter,Ar as USDZExporter,Tr as USDZText,Mr as USDZUIExtension,br as UriSerializer,Ir as UsageMarker,Dr as UserJoinedOrLeftRoomModel,S as VERSION,Or as VariantAction,xr as VelocityOverLifetimeModule,kr as VerticalLayoutGroup,Lr as VideoPlayer,Br as ViewBox,Fr as ViewDevice,Nr as Vignette,wr as VisibilityAction,Wr as Voip,Gr as Volume,Ur as VolumeParameter,Hr as VolumeProfile,Xr as WaitForFrames,zr as WaitForPromise,Vr as WaitForSeconds,_r as Watch,jr as WebARCameraBackground,Kr as WebARSessionRoot,Qr as WebXR,Zr as WebXRButtonFactory,Yr as WebXRImageTracking,Jr as WebXRImageTrackingModel,$r as WebXRPlaneTracking,qr as WebXRTrackedImage,en as XRControllerFollow,an as XRControllerModel,sn as XRControllerMovement,tn as XRFlag,on as XRRig,rn as XRState,nn as XRStateFlag,ln as __Ignore,dn as __internalNotifyObjectDestroyed,cn as activeInHierarchyFieldName,mn as addAttributeChangeCallback,pn as addComponent,gn as addCustomExtensionPlugin,un as addNewComponent,Sn as addPatch,Cn as apply,yn as applyHMRChanges,En as applyPrototypeExtensions,Rn as beginListenDestroy,hn as beginListenInstantiate,vn as binaryIdentifierCasts,fn as build_scene_functions,Pn as builtinComponentKeyName,An as calculateProgress01,Tn as clearBalloonMessages,Mn as clearOverlayMessages,bn as colorSerializer,In as compareAssociation,Dn as componentSerializer,On as copyTexture,xn as createMotion,kn as debugNet,Ln as debugOwner,Bn as decompressGpuTexture,Fn as deepClone,Nn as delay,wn as delayForFrames,Wn as deserializeObject,Gn as destroy,Un as destroyComponentInstance,Hn as determineMimeTypeFromExtension,Xn as disposeObjectResources,zn as disposeStream,Vn as editorGuidKeyName,_n as enableSpatialConsole,jn as euler,Kn as eventListSerializer,Qn as exportAsGLTF,Zn as findByGuid,Yn as findObjectOfType,Jn as findObjectsOfType,$n as findResourceUsers,qn as fitCamera,ei as fitObjectIntoVolume,ai as foreachComponent,si as foreachComponentEnumerator,ti as forward,oi as generateQRCode,ri as generateSeed,ni as getBoundingBox,ii as getCameraController,li as getComponent,di as getComponentInChildren,ci as getComponentInParent,mi as getComponents,pi as getComponentsInChildren,gi as getComponentsInParent,ui as getFormattedDate,Si as getIconElement,Ci as getIconTexture,yi as getLoader,Ei as getOrAddComponent,Ri as getParam,hi as getParentHierarchyPath,vi as getPath,fi as getPeerOptions,Pi as getPeerjsInstance,Ai as getResourceUserCount,Ti as getTempColor,Mi as getTempQuaternion,bi as getTempVector,Ii as getUrlParams,Di as getVisibleInCustomShadowRendering,Oi as getWorldDirection,xi as getWorldEuler,ki as getWorldPosition,Li as getWorldQuaternion,Bi as getWorldRotation,Fi as getWorldScale,Ni as hasCommercialLicense,wi as hasIndieLicense,Wi as hasPointerEventComponent,Gi as hasProLicense,Ui as hideDebugConsole,Hi as imageToCanvas,Xi as instantiate,zi as invokeLoadedImportPluginHooks,Vi as invokeXRSessionEnd,_i as invokeXRSessionStart,ji as isActiveInHierarchy,Ki as isActiveSelf,Qi as isAndroidDevice,Zi as isAnimationAction,Yi as isComponent,Ji as isDebugMode,$i as isDesktop,qi as isDestroyed,el as isDevEnvironment,al as isDisposed,sl as isExporting,tl as isGLTFModel,ol as isHostedOnGlitch,rl as isHotReloadEnabled,nl as isHotReloading,il as isIPad,ll as isIconElement,dl as isLocalNetwork,cl as isMacOS,ml as isMobileDevice,pl as isMozillaXR,gl as isQuest,ul as isResourceTrackingEnabled,Sl as isSafari,Cl as isUsingInstancing,yl as isiOS,El as isiPad,p as loadAsset,Rl as loadPMREM,hl as loadSync,vl as logHierarchy,fl as lookAtInverse,Pl as lookAtObject,Al as lookAtScreenPoint,Tl as makeId,Ml as makeIdFromRandomWords,bl as makeNameSafeForUSD,Il as markAsInstancedRendered,Dl as microphonePermissionsGranted,Ol as nameof,xl as nameofFactory,kl as objectSerializer,Ll as offXRSessionEnd,Bl as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,Fl as onXRSessionEnd,Nl as onXRSessionStart,wl as parseSync,Wl as placeOnSurface,Gl as postprocessFBXMaterials,Ul as prefix,Hl as pushState,Xl as randomNumber,zl as registerBinaryType,Vl as registerComponent,_l as registerComponentExtension,jl as registerCustomEffectType,Kl as registerExportExtensions,Ql as registerExtensions,Zl as registerHotReloadType,Yl as registerLoader,Jl as registerPrefabProvider,$l as registerPrototypeExtensions,ql as registerType,ed as relativePathPrefix,ad as removeAttributeChangeCallback,sd as removeComponent,td as removeCustomImportExtensionType,od as removePatch,rd as resolveUrl,nd as sanitizeString,id as saveImage,ld as screenshot,dd as screenshot2,cd as sendDestroyed,md as serializable,pd as serializeObject,gd as serializeable,ud as setActive,Sd as setAllowBalloonMessages,Cd as setAllowOverlayMessages,yd as setAutoFitEnabled,Ed as setCameraController,Rd as setDestroyed,hd as setDevEnvironment,vd as setDisposable,fd as setDontDestroy,Pd as setOrAddParamsToUrl,Ad as setParam,Td as setParamWithoutReload,Md as setPeerOptions,bd as setResourceTrackingEnabled,Id as setState,Dd as setVisibleInCustomShadowRendering,Od as setWorldEuler,xd as setWorldPosition,kd as setWorldPositionXYZ,Ld as setWorldQuaternion,Bd as setWorldQuaternionXYZW,Fd as setWorldRotation,Nd as setWorldRotationXYZ,wd as setWorldScale,Wd as showBalloonError,Gd as showBalloonMessage,Ud as showBalloonWarning,Hd as showDebugConsole,Xd as slerp,zd as syncDestroy,Vd as syncField,_d as syncInstantiate,jd as textureToCanvas,Kd as toSourceId,Qd as tryCastBinary,Zd as tryDetermineMimetypeFromBinary,Yd as tryDetermineMimetypeFromURL,Jd as tryFindObject,$d as tryGetGuid,qd as unregisterHotReloadType,ec as unwatchWrite,ac as useForAutoFit,sc as validate,tc as watchWrite};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-CAt_h_GH.umd.cjs"),i=require("./three.umd.cjs"),a=require("./gltf-progressive-DJBMx-zB.umd.cjs");e.initEngine();const o={VERSION:e.VERSION,Context:e.Context,NeedleXRSession:e.NeedleXRSession,assets:{loadFromURL:e.loadAsset},types:e.TypeStore,onStart:e.onStart,onUpdate:e.onUpdate,onBeforeRender:e.onBeforeRender,onAfterRender:e.onAfterRender,onInitializedContext:e.onInitialized,onDestroyContext:e.onDestroy,onClearContext:e.onClear};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function n(t){for(const r in t)o[r]=t[r]}n(e.Component);n(e.Components);for(const t of Object.getOwnPropertyNames(e.GameObject))switch(t){case"prototype":case"constructor":case"length":case"name":continue;default:o[t]=e.GameObject[t];break}if(!globalThis.Needle)globalThis.Needle=o;else for(const t in o)globalThis.Needle[t]=o[t];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=i.THREE;exports.$componentName=e.$componentName;exports.$physicsKey=e.$physicsKey;exports.ActionBuilder=e.ActionBuilder;exports.ActionCollection=e.ActionCollection;exports.ActionModel=e.ActionModel;exports.Addressables=e.Addressables;exports.AlignmentConstraint=e.AlignmentConstraint;exports.AmbientMode=e.AmbientMode;exports.Animation=e.Animation;exports.AnimationCurve=e.AnimationCurve;exports.AnimationExtension=e.AnimationExtension;exports.AnimationTrackHandler=e.AnimationTrackHandler;exports.AnimationUtils=e.AnimationUtils;exports.Animator=e.Animator;exports.AnimatorConditionMode=e.AnimatorConditionMode;exports.AnimatorController=e.AnimatorController;exports.AnimatorControllerParameterType=e.AnimatorControllerParameterType;exports.AnimatorStateInfo=e.AnimatorStateInfo;exports.Antialiasing=e.Antialiasing;exports.Application=e.Application;exports.AssetDatabase=e.AssetDatabase;exports.AssetReference=e.AssetReference;exports.Attractor=e.Attractor;exports.AudioExtension=e.AudioExtension;exports.AudioListener=e.AudioListener;exports.AudioSource=e.AudioSource;exports.AudioTrackHandler=e.AudioTrackHandler;exports.Avatar=e.Avatar;exports.AvatarBlink_Simple=e.AvatarBlink_Simple;exports.AvatarEyeLook_Rotation=e.AvatarEyeLook_Rotation;exports.AvatarLoader=e.AvatarLoader;exports.AvatarMarker=e.AvatarMarker;exports.AvatarModel=e.AvatarModel;exports.Avatar_Brain_LookAt=e.Avatar_Brain_LookAt;exports.Avatar_MouthShapes=e.Avatar_MouthShapes;exports.Avatar_MustacheShake=e.Avatar_MustacheShake;exports.Avatar_POI=e.Avatar_POI;exports.Axes=e.Axes;exports.AxesHelper=e.AxesHelper;exports.BUILD_TIME=e.BUILD_TIME;exports.BaseUIComponent=e.BaseUIComponent;exports.BasicIKConstraint=e.BasicIKConstraint;exports.BehaviorExtension=e.BehaviorExtension;exports.BehaviorModel=e.BehaviorModel;exports.Behaviour=e.Component$1;Object.defineProperty(exports,"BlobStorage",{enumerable:!0,get:()=>e.BlobStorage});exports.BloomEffect=e.BloomEffect;exports.BoxCollider=e.BoxCollider;exports.BoxGizmo=e.BoxGizmo;exports.BoxHelperComponent=e.BoxHelperComponent;exports.Button=e.Button;exports.ButtonsFactory=e.ButtonsFactory;exports.CallDirection=e.CallDirection;exports.CallInfo=e.CallInfo;exports.Camera=e.Camera;exports.CameraTargetReachedEvent=e.CameraTargetReachedEvent;exports.Canvas=e.Canvas;exports.CanvasGroup=e.CanvasGroup;exports.CapsuleCollider=e.CapsuleCollider;exports.ChangeMaterialOnClick=e.ChangeMaterialOnClick;exports.ChangeTransformOnClick=e.ChangeTransformOnClick;exports.CharacterController=e.CharacterController;exports.CharacterControllerInput=e.CharacterControllerInput;exports.ChromaticAberration=e.ChromaticAberration;exports.CircularBuffer=e.CircularBuffer;exports.ClearFlags=e.ClearFlags;exports.ClickThrough=e.ClickThrough;exports.ClipExtrapolation=e.ClipExtrapolation;exports.Collider=e.Collider;exports.Collision=e.Collision;exports.CollisionDetectionMode=e.CollisionDetectionMode;exports.ColorAdjustments=e.ColorAdjustments;exports.ColorBySpeedModule=e.ColorBySpeedModule;exports.ColorOverLifetimeModule=e.ColorOverLifetimeModule;exports.Component=e.Component$1;exports.ComponentLifecycleEvents=e.ComponentLifecycleEvents;exports.ConnectionEvents=e.ConnectionEvents;exports.ContactPoint=e.ContactPoint;exports.ContactShadows=e.ContactShadows;exports.Context=e.Context;exports.ContextArgs=e.ContextArgs;exports.ContextEvent=e.ContextEvent;exports.ContextRegistry=e.ContextRegistry;exports.ControlTrackHandler=e.ControlTrackHandler;exports.CursorFollow=e.CursorFollow;exports.CustomBranding=e.CustomBranding;exports.CustomShader=e.CustomShader;exports.DefaultReflectionMode=e.DefaultReflectionMode;exports.Deletable=e.Deletable;exports.DeleteBox=e.DeleteBox;exports.DepthOfField=e.DepthOfField;exports.DeviceFlag=e.DeviceFlag;Object.defineProperty(exports,"DeviceUtilities",{enumerable:!0,get:()=>e.DeviceUtilities});exports.DocumentExtension=e.DocumentExtension;exports.DragControls=e.DragControls;exports.DragMode=e.DragMode;exports.DropListener=e.DropListener;exports.Duplicatable=e.Duplicatable;exports.EffectWrapper=e.EffectWrapper;exports.EmissionModule=e.EmissionModule;exports.EmphasizeOnClick=e.EmphasizeOnClick;exports.EngineLoadingView=e.EngineLoadingView;exports.EnvironmentScene=e.EnvironmentScene;exports.EventList=e.EventList;exports.EventListEvent=e.EventListEvent;exports.EventSystem=e.EventSystem;exports.EventTrigger=e.EventTrigger;exports.FieldWithDefault=e.FieldWithDefault;exports.FileReference=e.FileReference;exports.FileReferenceSerializer=e.FileReferenceSerializer;exports.FileSpawnModel=e.FileSpawnModel;exports.File_Event=e.File_Event;exports.FixedJoint=e.FixedJoint;exports.Fog=e.Fog;exports.FrameEvent=e.FrameEvent;exports.GENERATOR=e.GENERATOR;exports.GameObject=e.GameObject;exports.Gizmos=e.Gizmos;exports.GltfExport=e.GltfExport;exports.GltfExportBox=e.GltfExportBox;exports.Gradient=e.Gradient;exports.Graphic=e.Graphic;exports.GraphicRaycaster=e.GraphicRaycaster;exports.Graphics=e.Graphics;exports.GridHelper=e.GridHelper;exports.GridLayoutGroup=e.GridLayoutGroup;exports.GroundProjectedEnv=e.GroundProjectedEnv;exports.GroupActionModel=e.GroupActionModel;exports.HideFlags=e.HideFlags;exports.HideOnStart=e.HideOnStart;exports.HingeJoint=e.HingeJoint;exports.HorizontalLayoutGroup=e.HorizontalLayoutGroup;exports.HostData=e.HostData;Object.defineProperty(exports,"HoverAnimation",{enumerable:!0,get:()=>e.HoverAnimation});exports.Image=e.Image;exports.ImageReference=e.ImageReference;exports.ImageReferenceSerializer=e.ImageReferenceSerializer;exports.InheritVelocityModule=e.InheritVelocityModule;exports.Input=e.Input;exports.InputEventQueue=e.InputEventQueue;exports.InputEvents=e.InputEvents;exports.InputField=e.InputField;exports.InstanceHandle=e.InstanceHandle;exports.InstancingHandler=e.InstancingHandler;exports.InstancingUtil=e.InstancingUtil;exports.InstantiateEvent=e.InstantiateEvent;exports.InstantiateIdProvider=e.InstantiateIdProvider;exports.InstantiateOptions=e.InstantiateOptions;exports.Interactable=e.Interactable;Object.defineProperty(exports,"InternalScreenshotUtils",{enumerable:!0,get:()=>e.InternalScreenshotUtils});exports.JoinedRoomResponse=e.JoinedRoomResponse;exports.KeyEventArgs=e.KeyEventArgs;exports.Keyframe=e.Keyframe;exports.LODGroup=e.LODGroup;exports.LODModel=e.LODModel;exports.LeftRoomResponse=e.LeftRoomResponse;exports.Light=e.Light;exports.LightData=e.LightData;exports.LimitVelocityOverLifetimeModule=e.LimitVelocityOverLifetimeModule;exports.LoadingElementOptions=e.LoadingElementOptions;exports.LogStats=e.LogStats;exports.LogType=e.LogType;exports.LookAt=e.LookAt;exports.LookAtConstraint=e.LookAtConstraint;exports.MainModule=e.MainModule;exports.MarkerTrackHandler=e.MarkerTrackHandler;exports.MarkerType=e.MarkerType;exports.MaskableGraphic=e.MaskableGraphic;exports.MaterialPropertyBlock=e.MaterialPropertyBlock;Object.defineProperty(exports,"MaterialX",{enumerable:!0,get:()=>e.MaterialX});exports.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;exports.NEEDLE_ENGINE_FEATURE_FLAGS=e.NEEDLE_ENGINE_FEATURE_FLAGS;exports.NEEDLE_ENGINE_MODULES=e.MODULES;exports.NEKeyboardEvent=e.NEKeyboardEvent;exports.NEPointerEvent=e.NEPointerEvent;exports.NeedleButtonElement=e.NeedleButtonElement;exports.NeedleEngine=e.ContextRegistry;Object.defineProperty(exports,"NeedleEngineModelLoader",{enumerable:!0,get:()=>e.NeedleEngineModelLoader});exports.NeedleEngineWebComponent=e.NeedleEngineWebComponent;exports.NeedleMenu=e.NeedleMenu;exports.NeedlePatchesKey=e.NeedlePatchesKey;exports.NeedleUSDZExporter=e.USDZExporter;exports.NeedleXRController=e.NeedleXRController;exports.NeedleXRSession=e.NeedleXRSession;exports.NeedleXRSync=e.NeedleXRSync;exports.NeedleXRUtils=e.NeedleXRUtils;exports.NestedGltf=e.NestedGltf;exports.NetworkConnection=e.NetworkConnection;exports.NetworkedStreamEvents=e.NetworkedStreamEvents;exports.NetworkedStreams=e.NetworkedStreams;exports.Networking=e.Networking;exports.NewInstanceModel=e.NewInstanceModel;exports.NoiseModule=e.NoiseModule;exports.ObjectRaycaster=e.ObjectRaycaster;exports.ObjectUtils=e.ObjectUtils;exports.OffsetConstraint=e.OffsetConstraint;exports.OneEuroFilter=e.OneEuroFilter;exports.OneEuroFilterXYZ=e.OneEuroFilterXYZ;exports.OpenURL=e.OpenURL;exports.OrbitControls=e.OrbitControls;exports.Outline=e.Outline;exports.OwnershipEvent=e.OwnershipEvent;exports.OwnershipModel=e.OwnershipModel;exports.PUBLIC_KEY=e.PUBLIC_KEY;exports.Padding=e.Padding;exports.ParticleBurst=e.ParticleBurst;exports.ParticleSubEmitter=e.ParticleSubEmitter;exports.ParticleSystem=e.ParticleSystem;exports.ParticleSystemBaseBehaviour=e.ParticleSystemBaseBehaviour;exports.ParticleSystemRenderer=e.ParticleSystemRenderer;exports.ParticleSystemShapeType=e.ParticleSystemShapeType;exports.PeerHandle=e.PeerHandle;exports.PeerNetworking=e.PeerNetworking;exports.Physics=e.Physics;exports.PhysicsExtension=e.PhysicsExtension;exports.PhysicsMaterialCombine=e.PhysicsMaterialCombine;exports.PixelationEffect=e.PixelationEffect;exports.PlayAnimationOnClick=e.PlayAnimationOnClick;exports.PlayAudioOnClick=e.PlayAudioOnClick;exports.PlayableDirector=e.PlayableDirector;exports.PlayerColor=e.PlayerColor;exports.PlayerState=e.PlayerState;exports.PlayerStateEvent=e.PlayerStateEvent;exports.PlayerSync=e.PlayerSync;exports.PlayerView=e.PlayerView;exports.PlayerViewManager=e.PlayerViewManager;exports.PointerEventData=e.PointerEventData;exports.PointerType=e.PointerType;exports.PostProcessingEffect=e.PostProcessingEffect;exports.PostProcessingEffectOrder=e.PostProcessingEffectOrder;exports.PostProcessingHandler=e.PostProcessingHandler;exports.PostProcessingManager=e.Volume;exports.PreliminaryAction=e.PreliminaryAction;exports.PreliminaryTrigger=e.PreliminaryTrigger;Object.defineProperty(exports,"PreviewHelper",{enumerable:!0,get:()=>e.PreviewHelper});exports.PrimitiveType=e.PrimitiveType;exports.Progress=e.Progress;exports.PromiseAllWithErrors=e.PromiseAllWithErrors;exports.PromiseErrorResult=e.PromiseErrorResult;exports.RGBAColor=e.RGBAColor;exports.RapierPhysics=e.RapierPhysics;exports.RawImage=e.RawImage;exports.RaycastOptions=e.RaycastOptions;exports.Rect=e.Rect;exports.RectTransform=e.RectTransform;exports.ReflectionProbe=e.ReflectionProbe;exports.RegisteredAnimationInfo=e.RegisteredAnimationInfo;exports.RemoteSkybox=e.RemoteSkybox;exports.RenderTexture=e.RenderTexture;exports.RenderTextureSerializer=e.RenderTextureSerializer;exports.Renderer=e.Renderer;exports.RendererData=e.RendererData;exports.RendererLightmap=e.RendererLightmap;exports.Rigidbody=e.Rigidbody;exports.RigidbodyConstraints=e.RigidbodyConstraints;exports.RoomEvents=e.RoomEvents;exports.RotationBySpeedModule=e.RotationBySpeedModule;exports.RotationOverLifetimeModule=e.RotationOverLifetimeModule;exports.SceneLightSettings=e.SceneLightSettings;exports.SceneSwitcher=e.SceneSwitcher;exports.ScreenCapture=e.ScreenCapture;exports.ScreenSpaceAmbientOcclusion=e.ScreenSpaceAmbientOcclusion;exports.ScreenSpaceAmbientOcclusionN8=e.ScreenSpaceAmbientOcclusionN8;exports.ScrollFollow=e.ScrollFollow;exports.SeeThrough=e.SeeThrough;exports.SendQueue=e.SendQueue;exports.SerializationContext=e.SerializationContext;exports.SetActiveOnClick=e.SetActiveOnClick;exports.ShadowCatcher=e.ShadowCatcher;exports.ShapeModule=e.ShapeModule;exports.ShapeOverlapResult=e.ShapeOverlapResult;exports.SharpeningEffect=e.SharpeningEffect;exports.SignalAsset=e.SignalAsset;exports.SignalReceiver=e.SignalReceiver;exports.SignalReceiverEvent=e.SignalReceiverEvent;exports.SignalTrackHandler=e.SignalTrackHandler;exports.Size=e.Size;exports.SizeBySpeedModule=e.SizeBySpeedModule;exports.SizeOverLifetimeModule=e.SizeOverLifetimeModule;exports.SkinnedMeshRenderer=e.SkinnedMeshRenderer;exports.SmoothFollow=e.SmoothFollow;exports.SpatialGrabRaycaster=e.SpatialGrabRaycaster;exports.SpatialHtml=e.SpatialHtml;exports.SpatialTrigger=e.SpatialTrigger;exports.SpatialTriggerReceiver=e.SpatialTriggerReceiver;exports.SpectatorCamera=e.SpectatorCamera;exports.SphereCollider=e.SphereCollider;exports.SphereIntersection=e.SphereIntersection;exports.SplineContainer=e.SplineContainer;exports.SplineData=e.SplineData;Object.defineProperty(exports,"SplineUtils",{enumerable:!0,get:()=>e.SplineUtils});exports.SplineWalker=e.SplineWalker;exports.Sprite=e.Sprite;exports.SpriteData=e.SpriteData;exports.SpriteRenderer=e.SpriteRenderer;exports.SpriteSheet=e.SpriteSheet;exports.StateMachineBehaviour=e.StateMachineBehaviour;exports.StreamEndedEvent=e.StreamEndedEvent;exports.StreamReceivedEvent=e.StreamReceivedEvent;exports.SubEmitterSystem=e.SubEmitterSystem;exports.SyncedCamera=e.SyncedCamera;exports.SyncedRoom=e.SyncedRoom;exports.SyncedTransform=e.SyncedTransform;exports.TapGestureTrigger=e.TapGestureTrigger;exports.TeleportTarget=e.TeleportTarget;exports.TestRunner=e.TestRunner;exports.TestSimulateUserData=e.TestSimulateUserData;exports.Text=e.Text;exports.TextBuilder=e.TextBuilder;exports.TextExtension=e.TextExtension;exports.TextureSheetAnimationModule=e.TextureSheetAnimationModule;exports.TiltShiftEffect=e.TiltShiftEffect;exports.Time=e.Time;exports.ToneMappingEffect=e.ToneMappingEffect;exports.TrackHandler=e.TrackHandler;exports.TrackType=e.TrackType;exports.TrailModule=e.TrailModule;exports.TransformData=e.TransformData;exports.TransformGizmo=e.TransformGizmo;exports.TriggerBuilder=e.TriggerBuilder;exports.TriggerModel=e.TriggerModel;exports.TypeStore=e.TypeStore;exports.UIRaycastUtils=e.UIRaycastUtils;exports.UIRootComponent=e.UIRootComponent;exports.USDDocument=e.USDDocument;exports.USDObject=e.USDObject;exports.USDWriter=e.USDWriter;exports.USDZExporter=e.USDZExporter$1;exports.USDZText=e.USDZText;exports.USDZUIExtension=e.USDZUIExtension;exports.UriSerializer=e.UriSerializer;exports.UsageMarker=e.UsageMarker;exports.UserJoinedOrLeftRoomModel=e.UserJoinedOrLeftRoomModel;exports.VERSION=e.VERSION;exports.VariantAction=e.VariantAction;exports.VelocityOverLifetimeModule=e.VelocityOverLifetimeModule;exports.VerticalLayoutGroup=e.VerticalLayoutGroup;exports.VideoPlayer=e.VideoPlayer;Object.defineProperty(exports,"ViewBox",{enumerable:!0,get:()=>e.ViewBox});exports.ViewDevice=e.ViewDevice;exports.Vignette=e.Vignette;exports.VisibilityAction=e.VisibilityAction;exports.Voip=e.Voip;exports.Volume=e.Volume;exports.VolumeParameter=e.VolumeParameter;exports.VolumeProfile=e.VolumeProfile;exports.WaitForFrames=e.WaitForFrames;exports.WaitForPromise=e.WaitForPromise;exports.WaitForSeconds=e.WaitForSeconds;exports.Watch=e.Watch;exports.WebARCameraBackground=e.WebARCameraBackground;exports.WebARSessionRoot=e.WebARSessionRoot;exports.WebXR=e.WebXR;exports.WebXRButtonFactory=e.WebXRButtonFactory;exports.WebXRImageTracking=e.WebXRImageTracking;exports.WebXRImageTrackingModel=e.WebXRImageTrackingModel;exports.WebXRPlaneTracking=e.WebXRPlaneTracking;exports.WebXRTrackedImage=e.WebXRTrackedImage;exports.XRControllerFollow=e.XRControllerFollow;exports.XRControllerModel=e.XRControllerModel;exports.XRControllerMovement=e.XRControllerMovement;exports.XRFlag=e.XRFlag;exports.XRRig=e.XRRig;exports.XRState=e.XRState;exports.XRStateFlag=e.XRStateFlag;exports.__Ignore=e.__Ignore;exports.__internalNotifyObjectDestroyed=e.__internalNotifyObjectDestroyed;exports.activeInHierarchyFieldName=e.activeInHierarchyFieldName;exports.addAttributeChangeCallback=e.addAttributeChangeCallback;exports.addComponent=e.addComponent;exports.addCustomExtensionPlugin=e.addCustomExtensionPlugin;exports.addNewComponent=e.addNewComponent;exports.addPatch=e.addPatch;exports.apply=e.apply;exports.applyHMRChanges=e.applyHMRChanges;exports.applyPrototypeExtensions=e.applyPrototypeExtensions;exports.beginListenDestroy=e.beginListenDestroy;exports.beginListenInstantiate=e.beginListenInstantiate;exports.binaryIdentifierCasts=e.binaryIdentifierCasts;exports.build_scene_functions=e.build_scene_functions;exports.builtinComponentKeyName=e.builtinComponentKeyName;exports.calculateProgress01=e.calculateProgress01;exports.clearBalloonMessages=e.clearMessages;exports.clearOverlayMessages=e.clearMessages;exports.colorSerializer=e.colorSerializer;exports.compareAssociation=e.compareAssociation;exports.componentSerializer=e.componentSerializer;exports.copyTexture=e.copyTexture;exports.createMotion=e.createMotion;exports.debugNet=e.debugNet;exports.debugOwner=e.debugOwner;exports.decompressGpuTexture=e.decompressGpuTexture;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.delayForFrames=e.delayForFrames;exports.deserializeObject=e.deserializeObject;exports.destroy=e.destroy;exports.destroyComponentInstance=e.destroyComponentInstance;exports.determineMimeTypeFromExtension=e.determineMimeTypeFromExtension;exports.disposeObjectResources=e.disposeObjectResources;exports.disposeStream=e.disposeStream;exports.editorGuidKeyName=e.editorGuidKeyName;exports.enableSpatialConsole=e.enableSpatialConsole;exports.euler=e.euler;exports.eventListSerializer=e.eventListSerializer;exports.exportAsGLTF=e.exportAsGLTF;exports.findByGuid=e.findByGuid;exports.findObjectOfType=e.findObjectOfType;exports.findObjectsOfType=e.findObjectsOfType;exports.findResourceUsers=e.findResourceUsers;exports.fitCamera=e.fitCamera;exports.fitObjectIntoVolume=e.fitObjectIntoVolume;exports.foreachComponent=e.foreachComponent;exports.foreachComponentEnumerator=e.foreachComponentEnumerator;exports.forward=e.forward;exports.generateQRCode=e.generateQRCode;exports.generateSeed=e.generateSeed;exports.getBoundingBox=e.getBoundingBox;exports.getCameraController=e.getCameraController;exports.getComponent=e.getComponent;exports.getComponentInChildren=e.getComponentInChildren;exports.getComponentInParent=e.getComponentInParent;exports.getComponents=e.getComponents;exports.getComponentsInChildren=e.getComponentsInChildren;exports.getComponentsInParent=e.getComponentsInParent;exports.getFormattedDate=e.getFormattedDate;exports.getIconElement=e.getIconElement;exports.getIconTexture=e.getIconTexture;exports.getLoader=e.getLoader;exports.getOrAddComponent=e.getOrAddComponent;exports.getParam=e.getParam;exports.getParentHierarchyPath=e.getParentHierarchyPath;exports.getPath=e.getPath;exports.getPeerOptions=e.getPeerOptions;exports.getPeerjsInstance=e.getPeerjsInstance;exports.getResourceUserCount=e.getResourceUserCount;exports.getTempColor=e.getTempColor;exports.getTempQuaternion=e.getTempQuaternion;exports.getTempVector=e.getTempVector;exports.getUrlParams=e.getUrlParams;exports.getVisibleInCustomShadowRendering=e.getVisibleInCustomShadowRendering;exports.getWorldDirection=e.getWorldDirection;exports.getWorldEuler=e.getWorldEuler;exports.getWorldPosition=e.getWorldPosition;exports.getWorldQuaternion=e.getWorldQuaternion;exports.getWorldRotation=e.getWorldRotation;exports.getWorldScale=e.getWorldScale;exports.hasCommercialLicense=e.hasCommercialLicense;exports.hasIndieLicense=e.hasIndieLicense;exports.hasPointerEventComponent=e.hasPointerEventComponent;exports.hasProLicense=e.hasProLicense;exports.hideDebugConsole=e.hideDebugConsole;exports.imageToCanvas=e.imageToCanvas;exports.instantiate=e.instantiate;exports.invokeLoadedImportPluginHooks=e.invokeLoadedImportPluginHooks;exports.invokeXRSessionEnd=e.invokeXRSessionEnd;exports.invokeXRSessionStart=e.invokeXRSessionStart;exports.isActiveInHierarchy=e.isActiveInHierarchy;exports.isActiveSelf=e.isActiveSelf;exports.isAndroidDevice=e.isAndroidDevice;exports.isAnimationAction=e.isAnimationAction;exports.isComponent=e.isComponent;exports.isDebugMode=e.isDebugMode;exports.isDesktop=e.isDesktop;exports.isDestroyed=e.isDestroyed;exports.isDevEnvironment=e.isDevEnvironment;exports.isDisposed=e.isDisposed;exports.isExporting=e.isExporting;exports.isGLTFModel=e.isGLTFModel;exports.isHostedOnGlitch=e.isHostedOnGlitch;exports.isHotReloadEnabled=e.isHotReloadEnabled;exports.isHotReloading=e.isHotReloading;exports.isIPad=e.isIPad;exports.isIconElement=e.isIconElement;exports.isLocalNetwork=e.isLocalNetwork;exports.isMacOS=e.isMacOS;exports.isMobileDevice=e.isMobileDevice;exports.isMozillaXR=e.isMozillaXR;exports.isQuest=e.isQuest;exports.isResourceTrackingEnabled=e.isResourceTrackingEnabled;exports.isSafari=e.isSafari;exports.isUsingInstancing=e.isUsingInstancing;exports.isiOS=e.isiOS;exports.isiPad=e.isiPad;exports.loadAsset=e.loadAsset;exports.loadPMREM=e.loadPMREM;exports.loadSync=e.loadSync;exports.logHierarchy=e.logHierarchy;exports.lookAtInverse=e.lookAtInverse;exports.lookAtObject=e.lookAtObject;exports.lookAtScreenPoint=e.lookAtScreenPoint;exports.makeId=e.makeId;exports.makeIdFromRandomWords=e.makeIdFromRandomWords;exports.makeNameSafeForUSD=e.makeNameSafe;exports.markAsInstancedRendered=e.markAsInstancedRendered;exports.microphonePermissionsGranted=e.microphonePermissionsGranted;exports.nameof=e.nameof;exports.nameofFactory=e.nameofFactory;exports.objectSerializer=e.objectSerializer;exports.offXRSessionEnd=e.offXRSessionEnd;exports.offXRSessionStart=e.offXRSessionStart;exports.onAfterRender=e.onAfterRender;exports.onBeforeRender=e.onBeforeRender;exports.onClear=e.onClear;exports.onDestroy=e.onDestroy;exports.onInitialized=e.onInitialized;exports.onStart=e.onStart;exports.onUpdate=e.onUpdate;exports.onXRSessionEnd=e.onXRSessionEnd;exports.onXRSessionStart=e.onXRSessionStart;exports.parseSync=e.parseSync;exports.placeOnSurface=e.placeOnSurface;exports.postprocessFBXMaterials=e.postprocessFBXMaterials;exports.prefix=e.prefix;exports.pushState=e.pushState;exports.randomNumber=e.randomNumber;exports.registerBinaryType=e.registerBinaryType;exports.registerComponent=e.registerComponent;exports.registerComponentExtension=e.registerComponentExtension;exports.registerCustomEffectType=e.registerCustomEffectType;exports.registerExportExtensions=e.registerExportExtensions;exports.registerExtensions=e.registerExtensions;exports.registerHotReloadType=e.registerHotReloadType;exports.registerLoader=e.registerLoader;exports.registerPrefabProvider=e.registerPrefabProvider;exports.registerPrototypeExtensions=e.registerPrototypeExtensions;exports.registerType=e.registerType;exports.relativePathPrefix=e.relativePathPrefix;exports.removeAttributeChangeCallback=e.removeAttributeChangeCallback;exports.removeComponent=e.removeComponent;exports.removeCustomImportExtensionType=e.removeCustomImportExtensionType;exports.removePatch=e.removePatch;exports.resolveUrl=e.resolveUrl;exports.sanitizeString=e.sanitizeString;exports.saveImage=e.saveImage;exports.screenshot=e.screenshot;exports.screenshot2=e.screenshot2;exports.sendDestroyed=e.sendDestroyed;exports.serializable=e.serializable;exports.serializeObject=e.serializeObject;exports.serializeable=e.serializeable;exports.setActive=e.setActive;exports.setAllowBalloonMessages=e.setAllowBalloonMessages;exports.setAllowOverlayMessages=e.setAllowOverlayMessages;exports.setAutoFitEnabled=e.setAutoFitEnabled;exports.setCameraController=e.setCameraController;exports.setDestroyed=e.setDestroyed;exports.setDevEnvironment=e.setDevEnvironment;exports.setDisposable=e.setDisposable;exports.setDontDestroy=e.setDontDestroy;exports.setOrAddParamsToUrl=e.setOrAddParamsToUrl;exports.setParam=e.setParam;exports.setParamWithoutReload=e.setParamWithoutReload;exports.setPeerOptions=e.setPeerOptions;exports.setResourceTrackingEnabled=e.setResourceTrackingEnabled;exports.setState=e.setState;exports.setVisibleInCustomShadowRendering=e.setVisibleInCustomShadowRendering;exports.setWorldEuler=e.setWorldEuler;exports.setWorldPosition=e.setWorldPosition;exports.setWorldPositionXYZ=e.setWorldPositionXYZ;exports.setWorldQuaternion=e.setWorldQuaternion;exports.setWorldQuaternionXYZW=e.setWorldQuaternionXYZW;exports.setWorldRotation=e.setWorldRotation;exports.setWorldRotationXYZ=e.setWorldRotationXYZ;exports.setWorldScale=e.setWorldScale;exports.showBalloonError=e.showBalloonError;exports.showBalloonMessage=e.showBalloonMessage;exports.showBalloonWarning=e.showBalloonWarning;exports.showDebugConsole=e.showDebugConsole;exports.slerp=e.slerp;exports.syncDestroy=e.syncDestroy;exports.syncField=e.syncField;exports.syncInstantiate=e.syncInstantiate;exports.textureToCanvas=e.textureToCanvas;exports.toSourceId=e.toSourceId;exports.tryCastBinary=e.tryCastBinary;exports.tryDetermineMimetypeFromBinary=e.tryDetermineMimetypeFromBinary;exports.tryDetermineMimetypeFromURL=e.tryDetermineMimetypeFromURL;exports.tryFindObject=e.tryFindObject;exports.tryGetGuid=e.tryGetGuid;exports.unregisterHotReloadType=e.unregisterHotReloadType;exports.unwatchWrite=e.unwatchWrite;exports.useForAutoFit=e.useForAutoFit;exports.validate=e.validate;exports.watchWrite=e.watchWrite;exports.NEEDLE_progressive=a.NEEDLE_progressive;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-BAYLGumK.umd.cjs"),i=require("./three.umd.cjs"),a=require("./gltf-progressive-DJBMx-zB.umd.cjs");e.initEngine();const o={VERSION:e.VERSION,Context:e.Context,NeedleXRSession:e.NeedleXRSession,assets:{loadFromURL:e.loadAsset},types:e.TypeStore,onStart:e.onStart,onUpdate:e.onUpdate,onBeforeRender:e.onBeforeRender,onAfterRender:e.onAfterRender,onInitializedContext:e.onInitialized,onDestroyContext:e.onDestroy,onClearContext:e.onClear};globalThis.Needle?.VERSION!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function n(t){for(const r in t)o[r]=t[r]}n(e.Component);n(e.Components);for(const t of Object.getOwnPropertyNames(e.GameObject))switch(t){case"prototype":case"constructor":case"length":case"name":continue;default:o[t]=e.GameObject[t];break}if(!globalThis.Needle)globalThis.Needle=o;else for(const t in o)globalThis.Needle[t]=o[t];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=i.THREE;exports.$componentName=e.$componentName;exports.$physicsKey=e.$physicsKey;exports.ActionBuilder=e.ActionBuilder;exports.ActionCollection=e.ActionCollection;exports.ActionModel=e.ActionModel;exports.Addressables=e.Addressables;exports.AlignmentConstraint=e.AlignmentConstraint;exports.AmbientMode=e.AmbientMode;exports.Animation=e.Animation;exports.AnimationCurve=e.AnimationCurve;exports.AnimationExtension=e.AnimationExtension;exports.AnimationTrackHandler=e.AnimationTrackHandler;exports.AnimationUtils=e.AnimationUtils;exports.Animator=e.Animator;exports.AnimatorConditionMode=e.AnimatorConditionMode;exports.AnimatorController=e.AnimatorController;exports.AnimatorControllerParameterType=e.AnimatorControllerParameterType;exports.AnimatorStateInfo=e.AnimatorStateInfo;exports.Antialiasing=e.Antialiasing;exports.Application=e.Application;exports.AssetDatabase=e.AssetDatabase;exports.AssetReference=e.AssetReference;exports.Attractor=e.Attractor;exports.AudioExtension=e.AudioExtension;exports.AudioListener=e.AudioListener;exports.AudioSource=e.AudioSource;exports.AudioTrackHandler=e.AudioTrackHandler;exports.Avatar=e.Avatar;exports.AvatarBlink_Simple=e.AvatarBlink_Simple;exports.AvatarEyeLook_Rotation=e.AvatarEyeLook_Rotation;exports.AvatarLoader=e.AvatarLoader;exports.AvatarMarker=e.AvatarMarker;exports.AvatarModel=e.AvatarModel;exports.Avatar_Brain_LookAt=e.Avatar_Brain_LookAt;exports.Avatar_MouthShapes=e.Avatar_MouthShapes;exports.Avatar_MustacheShake=e.Avatar_MustacheShake;exports.Avatar_POI=e.Avatar_POI;exports.Axes=e.Axes;exports.AxesHelper=e.AxesHelper;exports.BUILD_TIME=e.BUILD_TIME;exports.BaseUIComponent=e.BaseUIComponent;exports.BasicIKConstraint=e.BasicIKConstraint;exports.BehaviorExtension=e.BehaviorExtension;exports.BehaviorModel=e.BehaviorModel;exports.Behaviour=e.Component$1;Object.defineProperty(exports,"BlobStorage",{enumerable:!0,get:()=>e.BlobStorage});exports.BloomEffect=e.BloomEffect;exports.BoxCollider=e.BoxCollider;exports.BoxGizmo=e.BoxGizmo;exports.BoxHelperComponent=e.BoxHelperComponent;exports.Button=e.Button;exports.ButtonsFactory=e.ButtonsFactory;exports.CallDirection=e.CallDirection;exports.CallInfo=e.CallInfo;exports.Camera=e.Camera;exports.CameraTargetReachedEvent=e.CameraTargetReachedEvent;exports.Canvas=e.Canvas;exports.CanvasGroup=e.CanvasGroup;exports.CapsuleCollider=e.CapsuleCollider;exports.ChangeMaterialOnClick=e.ChangeMaterialOnClick;exports.ChangeTransformOnClick=e.ChangeTransformOnClick;exports.CharacterController=e.CharacterController;exports.CharacterControllerInput=e.CharacterControllerInput;exports.ChromaticAberration=e.ChromaticAberration;exports.CircularBuffer=e.CircularBuffer;exports.ClearFlags=e.ClearFlags;exports.ClickThrough=e.ClickThrough;exports.ClipExtrapolation=e.ClipExtrapolation;exports.Collider=e.Collider;exports.Collision=e.Collision;exports.CollisionDetectionMode=e.CollisionDetectionMode;exports.ColorAdjustments=e.ColorAdjustments;exports.ColorBySpeedModule=e.ColorBySpeedModule;exports.ColorOverLifetimeModule=e.ColorOverLifetimeModule;exports.Component=e.Component$1;exports.ComponentLifecycleEvents=e.ComponentLifecycleEvents;exports.ConnectionEvents=e.ConnectionEvents;exports.ContactPoint=e.ContactPoint;exports.ContactShadows=e.ContactShadows;exports.Context=e.Context;exports.ContextArgs=e.ContextArgs;exports.ContextEvent=e.ContextEvent;exports.ContextRegistry=e.ContextRegistry;exports.ControlTrackHandler=e.ControlTrackHandler;exports.CursorFollow=e.CursorFollow;exports.CustomBranding=e.CustomBranding;exports.CustomShader=e.CustomShader;exports.DefaultReflectionMode=e.DefaultReflectionMode;exports.Deletable=e.Deletable;exports.DeleteBox=e.DeleteBox;exports.DepthOfField=e.DepthOfField;exports.DeviceFlag=e.DeviceFlag;Object.defineProperty(exports,"DeviceUtilities",{enumerable:!0,get:()=>e.DeviceUtilities});exports.DocumentExtension=e.DocumentExtension;exports.DragControls=e.DragControls;exports.DragMode=e.DragMode;exports.DropListener=e.DropListener;exports.Duplicatable=e.Duplicatable;exports.EffectWrapper=e.EffectWrapper;exports.EmissionModule=e.EmissionModule;exports.EmphasizeOnClick=e.EmphasizeOnClick;exports.EngineLoadingView=e.EngineLoadingView;exports.EnvironmentScene=e.EnvironmentScene;exports.EventList=e.EventList;exports.EventListEvent=e.EventListEvent;exports.EventSystem=e.EventSystem;exports.EventTrigger=e.EventTrigger;exports.FieldWithDefault=e.FieldWithDefault;exports.FileReference=e.FileReference;exports.FileReferenceSerializer=e.FileReferenceSerializer;exports.FileSpawnModel=e.FileSpawnModel;exports.File_Event=e.File_Event;exports.FixedJoint=e.FixedJoint;exports.Fog=e.Fog;exports.FrameEvent=e.FrameEvent;exports.GENERATOR=e.GENERATOR;exports.GameObject=e.GameObject;exports.Gizmos=e.Gizmos;exports.GltfExport=e.GltfExport;exports.GltfExportBox=e.GltfExportBox;exports.Gradient=e.Gradient;exports.Graphic=e.Graphic;exports.GraphicRaycaster=e.GraphicRaycaster;exports.Graphics=e.Graphics;exports.GridHelper=e.GridHelper;exports.GridLayoutGroup=e.GridLayoutGroup;exports.GroundProjectedEnv=e.GroundProjectedEnv;exports.GroupActionModel=e.GroupActionModel;exports.HideFlags=e.HideFlags;exports.HideOnStart=e.HideOnStart;exports.HingeJoint=e.HingeJoint;exports.HorizontalLayoutGroup=e.HorizontalLayoutGroup;exports.HostData=e.HostData;Object.defineProperty(exports,"HoverAnimation",{enumerable:!0,get:()=>e.HoverAnimation});exports.Image=e.Image;exports.ImageReference=e.ImageReference;exports.ImageReferenceSerializer=e.ImageReferenceSerializer;exports.InheritVelocityModule=e.InheritVelocityModule;exports.Input=e.Input;exports.InputEventQueue=e.InputEventQueue;exports.InputEvents=e.InputEvents;exports.InputField=e.InputField;exports.InstanceHandle=e.InstanceHandle;exports.InstancingHandler=e.InstancingHandler;exports.InstancingUtil=e.InstancingUtil;exports.InstantiateEvent=e.InstantiateEvent;exports.InstantiateIdProvider=e.InstantiateIdProvider;exports.InstantiateOptions=e.InstantiateOptions;exports.Interactable=e.Interactable;Object.defineProperty(exports,"InternalScreenshotUtils",{enumerable:!0,get:()=>e.InternalScreenshotUtils});exports.JoinedRoomResponse=e.JoinedRoomResponse;exports.KeyEventArgs=e.KeyEventArgs;exports.Keyframe=e.Keyframe;exports.LODGroup=e.LODGroup;exports.LODModel=e.LODModel;exports.LeftRoomResponse=e.LeftRoomResponse;exports.Light=e.Light;exports.LightData=e.LightData;exports.LimitVelocityOverLifetimeModule=e.LimitVelocityOverLifetimeModule;exports.LoadingElementOptions=e.LoadingElementOptions;exports.LogStats=e.LogStats;exports.LogType=e.LogType;exports.LookAt=e.LookAt;exports.LookAtConstraint=e.LookAtConstraint;exports.MainModule=e.MainModule;exports.MarkerTrackHandler=e.MarkerTrackHandler;exports.MarkerType=e.MarkerType;exports.MaskableGraphic=e.MaskableGraphic;exports.MaterialPropertyBlock=e.MaterialPropertyBlock;Object.defineProperty(exports,"MaterialX",{enumerable:!0,get:()=>e.MaterialX});exports.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;exports.NEEDLE_ENGINE_FEATURE_FLAGS=e.NEEDLE_ENGINE_FEATURE_FLAGS;exports.NEEDLE_ENGINE_MODULES=e.MODULES;exports.NEKeyboardEvent=e.NEKeyboardEvent;exports.NEPointerEvent=e.NEPointerEvent;exports.NeedleButtonElement=e.NeedleButtonElement;exports.NeedleEngine=e.ContextRegistry;Object.defineProperty(exports,"NeedleEngineModelLoader",{enumerable:!0,get:()=>e.NeedleEngineModelLoader});exports.NeedleEngineWebComponent=e.NeedleEngineWebComponent;exports.NeedleMenu=e.NeedleMenu;exports.NeedlePatchesKey=e.NeedlePatchesKey;exports.NeedleUSDZExporter=e.USDZExporter;exports.NeedleXRController=e.NeedleXRController;exports.NeedleXRSession=e.NeedleXRSession;exports.NeedleXRSync=e.NeedleXRSync;exports.NeedleXRUtils=e.NeedleXRUtils;exports.NestedGltf=e.NestedGltf;exports.NetworkConnection=e.NetworkConnection;exports.NetworkedStreamEvents=e.NetworkedStreamEvents;exports.NetworkedStreams=e.NetworkedStreams;exports.Networking=e.Networking;exports.NewInstanceModel=e.NewInstanceModel;exports.NoiseModule=e.NoiseModule;exports.ObjectRaycaster=e.ObjectRaycaster;exports.ObjectUtils=e.ObjectUtils;exports.OffsetConstraint=e.OffsetConstraint;exports.OneEuroFilter=e.OneEuroFilter;exports.OneEuroFilterXYZ=e.OneEuroFilterXYZ;exports.OpenURL=e.OpenURL;exports.OrbitControls=e.OrbitControls;exports.Outline=e.Outline;exports.OwnershipEvent=e.OwnershipEvent;exports.OwnershipModel=e.OwnershipModel;exports.PUBLIC_KEY=e.PUBLIC_KEY;exports.Padding=e.Padding;exports.ParticleBurst=e.ParticleBurst;exports.ParticleSubEmitter=e.ParticleSubEmitter;exports.ParticleSystem=e.ParticleSystem;exports.ParticleSystemBaseBehaviour=e.ParticleSystemBaseBehaviour;exports.ParticleSystemRenderer=e.ParticleSystemRenderer;exports.ParticleSystemShapeType=e.ParticleSystemShapeType;exports.PeerHandle=e.PeerHandle;exports.PeerNetworking=e.PeerNetworking;exports.Physics=e.Physics;exports.PhysicsExtension=e.PhysicsExtension;exports.PhysicsMaterialCombine=e.PhysicsMaterialCombine;exports.PixelationEffect=e.PixelationEffect;exports.PlayAnimationOnClick=e.PlayAnimationOnClick;exports.PlayAudioOnClick=e.PlayAudioOnClick;exports.PlayableDirector=e.PlayableDirector;exports.PlayerColor=e.PlayerColor;exports.PlayerState=e.PlayerState;exports.PlayerStateEvent=e.PlayerStateEvent;exports.PlayerSync=e.PlayerSync;exports.PlayerView=e.PlayerView;exports.PlayerViewManager=e.PlayerViewManager;exports.PointerEventData=e.PointerEventData;exports.PointerType=e.PointerType;exports.PostProcessingEffect=e.PostProcessingEffect;exports.PostProcessingEffectOrder=e.PostProcessingEffectOrder;exports.PostProcessingHandler=e.PostProcessingHandler;exports.PostProcessingManager=e.Volume;exports.PreliminaryAction=e.PreliminaryAction;exports.PreliminaryTrigger=e.PreliminaryTrigger;Object.defineProperty(exports,"PreviewHelper",{enumerable:!0,get:()=>e.PreviewHelper});exports.PrimitiveType=e.PrimitiveType;exports.Progress=e.Progress;exports.PromiseAllWithErrors=e.PromiseAllWithErrors;exports.PromiseErrorResult=e.PromiseErrorResult;exports.RGBAColor=e.RGBAColor;exports.RapierPhysics=e.RapierPhysics;exports.RawImage=e.RawImage;exports.RaycastOptions=e.RaycastOptions;exports.Rect=e.Rect;exports.RectTransform=e.RectTransform;exports.ReflectionProbe=e.ReflectionProbe;exports.RegisteredAnimationInfo=e.RegisteredAnimationInfo;exports.RemoteSkybox=e.RemoteSkybox;exports.RenderTexture=e.RenderTexture;exports.RenderTextureSerializer=e.RenderTextureSerializer;exports.Renderer=e.Renderer;exports.RendererData=e.RendererData;exports.RendererLightmap=e.RendererLightmap;exports.Rigidbody=e.Rigidbody;exports.RigidbodyConstraints=e.RigidbodyConstraints;exports.RoomEvents=e.RoomEvents;exports.RotationBySpeedModule=e.RotationBySpeedModule;exports.RotationOverLifetimeModule=e.RotationOverLifetimeModule;exports.SceneLightSettings=e.SceneLightSettings;exports.SceneSwitcher=e.SceneSwitcher;exports.ScreenCapture=e.ScreenCapture;exports.ScreenSpaceAmbientOcclusion=e.ScreenSpaceAmbientOcclusion;exports.ScreenSpaceAmbientOcclusionN8=e.ScreenSpaceAmbientOcclusionN8;exports.ScrollFollow=e.ScrollFollow;exports.SeeThrough=e.SeeThrough;exports.SendQueue=e.SendQueue;exports.SerializationContext=e.SerializationContext;exports.SetActiveOnClick=e.SetActiveOnClick;exports.ShadowCatcher=e.ShadowCatcher;exports.ShapeModule=e.ShapeModule;exports.ShapeOverlapResult=e.ShapeOverlapResult;exports.SharpeningEffect=e.SharpeningEffect;exports.SignalAsset=e.SignalAsset;exports.SignalReceiver=e.SignalReceiver;exports.SignalReceiverEvent=e.SignalReceiverEvent;exports.SignalTrackHandler=e.SignalTrackHandler;exports.Size=e.Size;exports.SizeBySpeedModule=e.SizeBySpeedModule;exports.SizeOverLifetimeModule=e.SizeOverLifetimeModule;exports.SkinnedMeshRenderer=e.SkinnedMeshRenderer;exports.SmoothFollow=e.SmoothFollow;exports.SpatialGrabRaycaster=e.SpatialGrabRaycaster;exports.SpatialHtml=e.SpatialHtml;exports.SpatialTrigger=e.SpatialTrigger;exports.SpatialTriggerReceiver=e.SpatialTriggerReceiver;exports.SpectatorCamera=e.SpectatorCamera;exports.SphereCollider=e.SphereCollider;exports.SphereIntersection=e.SphereIntersection;exports.SplineContainer=e.SplineContainer;exports.SplineData=e.SplineData;Object.defineProperty(exports,"SplineUtils",{enumerable:!0,get:()=>e.SplineUtils});exports.SplineWalker=e.SplineWalker;exports.Sprite=e.Sprite;exports.SpriteData=e.SpriteData;exports.SpriteRenderer=e.SpriteRenderer;exports.SpriteSheet=e.SpriteSheet;exports.StateMachineBehaviour=e.StateMachineBehaviour;exports.StreamEndedEvent=e.StreamEndedEvent;exports.StreamReceivedEvent=e.StreamReceivedEvent;exports.SubEmitterSystem=e.SubEmitterSystem;exports.SyncedCamera=e.SyncedCamera;exports.SyncedRoom=e.SyncedRoom;exports.SyncedTransform=e.SyncedTransform;exports.TapGestureTrigger=e.TapGestureTrigger;exports.TeleportTarget=e.TeleportTarget;exports.TestRunner=e.TestRunner;exports.TestSimulateUserData=e.TestSimulateUserData;exports.Text=e.Text;exports.TextBuilder=e.TextBuilder;exports.TextExtension=e.TextExtension;exports.TextureSheetAnimationModule=e.TextureSheetAnimationModule;exports.TiltShiftEffect=e.TiltShiftEffect;exports.Time=e.Time;exports.ToneMappingEffect=e.ToneMappingEffect;exports.TrackHandler=e.TrackHandler;exports.TrackType=e.TrackType;exports.TrailModule=e.TrailModule;exports.TransformData=e.TransformData;exports.TransformGizmo=e.TransformGizmo;exports.TriggerBuilder=e.TriggerBuilder;exports.TriggerModel=e.TriggerModel;exports.TypeStore=e.TypeStore;exports.UIRaycastUtils=e.UIRaycastUtils;exports.UIRootComponent=e.UIRootComponent;exports.USDDocument=e.USDDocument;exports.USDObject=e.USDObject;exports.USDWriter=e.USDWriter;exports.USDZExporter=e.USDZExporter$1;exports.USDZText=e.USDZText;exports.USDZUIExtension=e.USDZUIExtension;exports.UriSerializer=e.UriSerializer;exports.UsageMarker=e.UsageMarker;exports.UserJoinedOrLeftRoomModel=e.UserJoinedOrLeftRoomModel;exports.VERSION=e.VERSION;exports.VariantAction=e.VariantAction;exports.VelocityOverLifetimeModule=e.VelocityOverLifetimeModule;exports.VerticalLayoutGroup=e.VerticalLayoutGroup;exports.VideoPlayer=e.VideoPlayer;Object.defineProperty(exports,"ViewBox",{enumerable:!0,get:()=>e.ViewBox});exports.ViewDevice=e.ViewDevice;exports.Vignette=e.Vignette;exports.VisibilityAction=e.VisibilityAction;exports.Voip=e.Voip;exports.Volume=e.Volume;exports.VolumeParameter=e.VolumeParameter;exports.VolumeProfile=e.VolumeProfile;exports.WaitForFrames=e.WaitForFrames;exports.WaitForPromise=e.WaitForPromise;exports.WaitForSeconds=e.WaitForSeconds;exports.Watch=e.Watch;exports.WebARCameraBackground=e.WebARCameraBackground;exports.WebARSessionRoot=e.WebARSessionRoot;exports.WebXR=e.WebXR;exports.WebXRButtonFactory=e.WebXRButtonFactory;exports.WebXRImageTracking=e.WebXRImageTracking;exports.WebXRImageTrackingModel=e.WebXRImageTrackingModel;exports.WebXRPlaneTracking=e.WebXRPlaneTracking;exports.WebXRTrackedImage=e.WebXRTrackedImage;exports.XRControllerFollow=e.XRControllerFollow;exports.XRControllerModel=e.XRControllerModel;exports.XRControllerMovement=e.XRControllerMovement;exports.XRFlag=e.XRFlag;exports.XRRig=e.XRRig;exports.XRState=e.XRState;exports.XRStateFlag=e.XRStateFlag;exports.__Ignore=e.__Ignore;exports.__internalNotifyObjectDestroyed=e.__internalNotifyObjectDestroyed;exports.activeInHierarchyFieldName=e.activeInHierarchyFieldName;exports.addAttributeChangeCallback=e.addAttributeChangeCallback;exports.addComponent=e.addComponent;exports.addCustomExtensionPlugin=e.addCustomExtensionPlugin;exports.addNewComponent=e.addNewComponent;exports.addPatch=e.addPatch;exports.apply=e.apply;exports.applyHMRChanges=e.applyHMRChanges;exports.applyPrototypeExtensions=e.applyPrototypeExtensions;exports.beginListenDestroy=e.beginListenDestroy;exports.beginListenInstantiate=e.beginListenInstantiate;exports.binaryIdentifierCasts=e.binaryIdentifierCasts;exports.build_scene_functions=e.build_scene_functions;exports.builtinComponentKeyName=e.builtinComponentKeyName;exports.calculateProgress01=e.calculateProgress01;exports.clearBalloonMessages=e.clearMessages;exports.clearOverlayMessages=e.clearMessages;exports.colorSerializer=e.colorSerializer;exports.compareAssociation=e.compareAssociation;exports.componentSerializer=e.componentSerializer;exports.copyTexture=e.copyTexture;exports.createMotion=e.createMotion;exports.debugNet=e.debugNet;exports.debugOwner=e.debugOwner;exports.decompressGpuTexture=e.decompressGpuTexture;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.delayForFrames=e.delayForFrames;exports.deserializeObject=e.deserializeObject;exports.destroy=e.destroy;exports.destroyComponentInstance=e.destroyComponentInstance;exports.determineMimeTypeFromExtension=e.determineMimeTypeFromExtension;exports.disposeObjectResources=e.disposeObjectResources;exports.disposeStream=e.disposeStream;exports.editorGuidKeyName=e.editorGuidKeyName;exports.enableSpatialConsole=e.enableSpatialConsole;exports.euler=e.euler;exports.eventListSerializer=e.eventListSerializer;exports.exportAsGLTF=e.exportAsGLTF;exports.findByGuid=e.findByGuid;exports.findObjectOfType=e.findObjectOfType;exports.findObjectsOfType=e.findObjectsOfType;exports.findResourceUsers=e.findResourceUsers;exports.fitCamera=e.fitCamera;exports.fitObjectIntoVolume=e.fitObjectIntoVolume;exports.foreachComponent=e.foreachComponent;exports.foreachComponentEnumerator=e.foreachComponentEnumerator;exports.forward=e.forward;exports.generateQRCode=e.generateQRCode;exports.generateSeed=e.generateSeed;exports.getBoundingBox=e.getBoundingBox;exports.getCameraController=e.getCameraController;exports.getComponent=e.getComponent;exports.getComponentInChildren=e.getComponentInChildren;exports.getComponentInParent=e.getComponentInParent;exports.getComponents=e.getComponents;exports.getComponentsInChildren=e.getComponentsInChildren;exports.getComponentsInParent=e.getComponentsInParent;exports.getFormattedDate=e.getFormattedDate;exports.getIconElement=e.getIconElement;exports.getIconTexture=e.getIconTexture;exports.getLoader=e.getLoader;exports.getOrAddComponent=e.getOrAddComponent;exports.getParam=e.getParam;exports.getParentHierarchyPath=e.getParentHierarchyPath;exports.getPath=e.getPath;exports.getPeerOptions=e.getPeerOptions;exports.getPeerjsInstance=e.getPeerjsInstance;exports.getResourceUserCount=e.getResourceUserCount;exports.getTempColor=e.getTempColor;exports.getTempQuaternion=e.getTempQuaternion;exports.getTempVector=e.getTempVector;exports.getUrlParams=e.getUrlParams;exports.getVisibleInCustomShadowRendering=e.getVisibleInCustomShadowRendering;exports.getWorldDirection=e.getWorldDirection;exports.getWorldEuler=e.getWorldEuler;exports.getWorldPosition=e.getWorldPosition;exports.getWorldQuaternion=e.getWorldQuaternion;exports.getWorldRotation=e.getWorldRotation;exports.getWorldScale=e.getWorldScale;exports.hasCommercialLicense=e.hasCommercialLicense;exports.hasIndieLicense=e.hasIndieLicense;exports.hasPointerEventComponent=e.hasPointerEventComponent;exports.hasProLicense=e.hasProLicense;exports.hideDebugConsole=e.hideDebugConsole;exports.imageToCanvas=e.imageToCanvas;exports.instantiate=e.instantiate;exports.invokeLoadedImportPluginHooks=e.invokeLoadedImportPluginHooks;exports.invokeXRSessionEnd=e.invokeXRSessionEnd;exports.invokeXRSessionStart=e.invokeXRSessionStart;exports.isActiveInHierarchy=e.isActiveInHierarchy;exports.isActiveSelf=e.isActiveSelf;exports.isAndroidDevice=e.isAndroidDevice;exports.isAnimationAction=e.isAnimationAction;exports.isComponent=e.isComponent;exports.isDebugMode=e.isDebugMode;exports.isDesktop=e.isDesktop;exports.isDestroyed=e.isDestroyed;exports.isDevEnvironment=e.isDevEnvironment;exports.isDisposed=e.isDisposed;exports.isExporting=e.isExporting;exports.isGLTFModel=e.isGLTFModel;exports.isHostedOnGlitch=e.isHostedOnGlitch;exports.isHotReloadEnabled=e.isHotReloadEnabled;exports.isHotReloading=e.isHotReloading;exports.isIPad=e.isIPad;exports.isIconElement=e.isIconElement;exports.isLocalNetwork=e.isLocalNetwork;exports.isMacOS=e.isMacOS;exports.isMobileDevice=e.isMobileDevice;exports.isMozillaXR=e.isMozillaXR;exports.isQuest=e.isQuest;exports.isResourceTrackingEnabled=e.isResourceTrackingEnabled;exports.isSafari=e.isSafari;exports.isUsingInstancing=e.isUsingInstancing;exports.isiOS=e.isiOS;exports.isiPad=e.isiPad;exports.loadAsset=e.loadAsset;exports.loadPMREM=e.loadPMREM;exports.loadSync=e.loadSync;exports.logHierarchy=e.logHierarchy;exports.lookAtInverse=e.lookAtInverse;exports.lookAtObject=e.lookAtObject;exports.lookAtScreenPoint=e.lookAtScreenPoint;exports.makeId=e.makeId;exports.makeIdFromRandomWords=e.makeIdFromRandomWords;exports.makeNameSafeForUSD=e.makeNameSafe;exports.markAsInstancedRendered=e.markAsInstancedRendered;exports.microphonePermissionsGranted=e.microphonePermissionsGranted;exports.nameof=e.nameof;exports.nameofFactory=e.nameofFactory;exports.objectSerializer=e.objectSerializer;exports.offXRSessionEnd=e.offXRSessionEnd;exports.offXRSessionStart=e.offXRSessionStart;exports.onAfterRender=e.onAfterRender;exports.onBeforeRender=e.onBeforeRender;exports.onClear=e.onClear;exports.onDestroy=e.onDestroy;exports.onInitialized=e.onInitialized;exports.onStart=e.onStart;exports.onUpdate=e.onUpdate;exports.onXRSessionEnd=e.onXRSessionEnd;exports.onXRSessionStart=e.onXRSessionStart;exports.parseSync=e.parseSync;exports.placeOnSurface=e.placeOnSurface;exports.postprocessFBXMaterials=e.postprocessFBXMaterials;exports.prefix=e.prefix;exports.pushState=e.pushState;exports.randomNumber=e.randomNumber;exports.registerBinaryType=e.registerBinaryType;exports.registerComponent=e.registerComponent;exports.registerComponentExtension=e.registerComponentExtension;exports.registerCustomEffectType=e.registerCustomEffectType;exports.registerExportExtensions=e.registerExportExtensions;exports.registerExtensions=e.registerExtensions;exports.registerHotReloadType=e.registerHotReloadType;exports.registerLoader=e.registerLoader;exports.registerPrefabProvider=e.registerPrefabProvider;exports.registerPrototypeExtensions=e.registerPrototypeExtensions;exports.registerType=e.registerType;exports.relativePathPrefix=e.relativePathPrefix;exports.removeAttributeChangeCallback=e.removeAttributeChangeCallback;exports.removeComponent=e.removeComponent;exports.removeCustomImportExtensionType=e.removeCustomImportExtensionType;exports.removePatch=e.removePatch;exports.resolveUrl=e.resolveUrl;exports.sanitizeString=e.sanitizeString;exports.saveImage=e.saveImage;exports.screenshot=e.screenshot;exports.screenshot2=e.screenshot2;exports.sendDestroyed=e.sendDestroyed;exports.serializable=e.serializable;exports.serializeObject=e.serializeObject;exports.serializeable=e.serializeable;exports.setActive=e.setActive;exports.setAllowBalloonMessages=e.setAllowBalloonMessages;exports.setAllowOverlayMessages=e.setAllowOverlayMessages;exports.setAutoFitEnabled=e.setAutoFitEnabled;exports.setCameraController=e.setCameraController;exports.setDestroyed=e.setDestroyed;exports.setDevEnvironment=e.setDevEnvironment;exports.setDisposable=e.setDisposable;exports.setDontDestroy=e.setDontDestroy;exports.setOrAddParamsToUrl=e.setOrAddParamsToUrl;exports.setParam=e.setParam;exports.setParamWithoutReload=e.setParamWithoutReload;exports.setPeerOptions=e.setPeerOptions;exports.setResourceTrackingEnabled=e.setResourceTrackingEnabled;exports.setState=e.setState;exports.setVisibleInCustomShadowRendering=e.setVisibleInCustomShadowRendering;exports.setWorldEuler=e.setWorldEuler;exports.setWorldPosition=e.setWorldPosition;exports.setWorldPositionXYZ=e.setWorldPositionXYZ;exports.setWorldQuaternion=e.setWorldQuaternion;exports.setWorldQuaternionXYZW=e.setWorldQuaternionXYZW;exports.setWorldRotation=e.setWorldRotation;exports.setWorldRotationXYZ=e.setWorldRotationXYZ;exports.setWorldScale=e.setWorldScale;exports.showBalloonError=e.showBalloonError;exports.showBalloonMessage=e.showBalloonMessage;exports.showBalloonWarning=e.showBalloonWarning;exports.showDebugConsole=e.showDebugConsole;exports.slerp=e.slerp;exports.syncDestroy=e.syncDestroy;exports.syncField=e.syncField;exports.syncInstantiate=e.syncInstantiate;exports.textureToCanvas=e.textureToCanvas;exports.toSourceId=e.toSourceId;exports.tryCastBinary=e.tryCastBinary;exports.tryDetermineMimetypeFromBinary=e.tryDetermineMimetypeFromBinary;exports.tryDetermineMimetypeFromURL=e.tryDetermineMimetypeFromURL;exports.tryFindObject=e.tryFindObject;exports.tryGetGuid=e.tryGetGuid;exports.unregisterHotReloadType=e.unregisterHotReloadType;exports.unwatchWrite=e.unwatchWrite;exports.useForAutoFit=e.useForAutoFit;exports.validate=e.validate;exports.watchWrite=e.watchWrite;exports.NEEDLE_progressive=a.NEEDLE_progressive;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-tools/engine",
|
|
3
|
-
"version": "5.0.0
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
|
|
5
5
|
"main": "dist/needle-engine.min.js",
|
|
6
6
|
"exports": {
|
|
@@ -204,4 +204,4 @@
|
|
|
204
204
|
"module": "lib/needle-engine.js",
|
|
205
205
|
"typings": "lib/needle-engine.d.ts",
|
|
206
206
|
"types": "lib/needle-engine.d.ts"
|
|
207
|
-
}
|
|
207
|
+
}
|