@needle-tools/engine 4.12.0 → 4.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -4
- package/dist/{needle-engine.bundle-BhAUDZcQ.min.js → needle-engine.bundle-BPNuWGjI.min.js} +1 -1
- package/dist/{needle-engine.bundle-DQdhrcLq.umd.cjs → needle-engine.bundle-BV9DUnnS.umd.cjs} +3 -3
- package/dist/{needle-engine.bundle-CpPhY8AW.js → needle-engine.bundle-C4PyE3dQ.js} +3 -3
- package/dist/needle-engine.d.ts +15 -15
- 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 +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -21,13 +21,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
21
21
|
- Improve: JSDoc documentation for Everywhere Actions and other components
|
|
22
22
|
- Fix: issue with callbacks on freshly destroyed components when leaving XR sessions
|
|
23
23
|
- Fix: Instancing issue with growing vertex/index buffers when not necessary
|
|
24
|
-
- Fix: Instancing and texture LODs
|
|
25
24
|
- Fix: Issue with `<needle-engine>` element being moved in the DOM
|
|
26
|
-
- Fix: SceneSwitcher was destroying local scene content
|
|
27
25
|
- Fix: Better type declarations in package.json
|
|
28
26
|
|
|
29
|
-
https://cloud.needle.tools/-/media/WI0Q0s961BjdXgUEQHxifQ.gif
|
|
30
|
-
|
|
31
27
|
## [4.11.5] - 2025-10-31
|
|
32
28
|
- Fix: Timeline cloning with `instantiate` ([forum 2733](<https://forum.needle.tools/t/2733>))
|
|
33
29
|
- Fix: Renderer `sharedMaterials` being null in awake
|
|
@@ -141,7 +141,7 @@ void main(){
|
|
|
141
141
|
#__vconsole .vc-mask {
|
|
142
142
|
overflow: hidden;
|
|
143
143
|
}
|
|
144
|
-
`,vr?.prepend(i),o===!0&&Gb()<=0&&b_(),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.":"")),mc=!1,hi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function FO(){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"),hi?.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;",wr="margin-bottom: 10px; margin-top: 15px;",UO="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",w_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",zO=w_,NO=w_+" word-break: break-all;";function Gn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${UO}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${zO}'>${i.label}</td><td style='${NO}'>${n}</td></tr>`}return t+="</tbody></table>",t}function x_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function WO(){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=KO();t+=`<h3 style='${v_}'>Device: ${i}</h3>`,t+=Gn([{label:"\u{1F4BB} Desktop",value:L.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:L.isMobileDevice()},{label:"\u{1F34E} iOS",value:L.isiOS()},{label:"\u{1F4F1} iPad",value:L.isiPad()},{label:"\u{1F916} Android",value:L.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:L.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:L.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:L.isMacOS()},{label:"\u{1F453} VisionOS",value:L.isVisionOS()},{label:"\u{1F9ED} Safari",value:L.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:L.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:L.supportsQuickLookAR()}],!0);const n=[],s=L.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=L.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=L.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=Gn(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:x_()}];t+=Gn(l,!1),t+="</div>",e(t)}),o}function VO(){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=$O();i.length>0&&(t+=`<h3 style='${wr}'>General GPU Info</h3>`,t+=Gn(i,!1));const n=GO();n.length>0&&(t+=`<h3 style='${wr}'>WebGL</h3>`,t+=Gn(n,!1));const s=qO();s.length>0&&(t+=`<h3 style='${wr}'>WebGL 2 Features</h3>`,t+=Gn(s,!1));const r=XO();r.length>0&&(t+=`<h3 style='${wr}'>WebGL Limits</h3>`,t+=Gn(r,!1));const a=QO();a.length>0&&(t+=`<h3 style='${wr}'>Texture Formats</h3>`,t+=Gn(a,!1));const l=await YO();if(l.length>0&&(t+=`<h3 style='${wr}'>WebGPU</h3>`,t+=Gn(l,!1)),L.isSafari()){const c=ZO();c.length>0&&(t+=`<h3 style='${wr}'>Safari GPU Info</h3>`,t+=Gn(c,!1))}t+="</div>",e(t)}),o}function $O(){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=L.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=S_();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=HO(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 HO(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 GO(){const o=[],e=S_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:x_()})),o}function qO(){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 XO(){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 QO(){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 YO(){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 S_(){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 ZO(){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 KO(){return L.isQuest()?"Meta Quest":L.isVisionOS()?"Vision Pro":L.isiOS()?L.isiPad()?"iPad":"iPhone/iPod":L.isAndroidDevice()?"Android Device":L.isMozillaXR()?"Mozilla XR Browser":L.isNeedleAppClip()?"Needle App Clip":L.isMacOS()?"Mac":L.isDesktop()?"Desktop PC":"Unknown Device"}function JO(){return document.querySelector("#__vconsole .vc-switch")||null}function ek(){return document.querySelector("#__vconsole")||null}const C_=v("debugdefines");vs('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),vs('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),vs('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),vs('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),vs('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.12.0";'),vs('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),vs('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jan 30 2026 12:34:50 GMT+0000 (Coordinated Universal Time)";'),vs('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ai="4.12.0",Fa="undefined",gc="Fri Jan 30 2026 12:34:50 GMT+0000 (Coordinated Universal Time)";C_&&console.log(`Engine version: ${Ai} (generator: ${Fa})
|
|
144
|
+
`,vr?.prepend(i),o===!0&&Gb()<=0&&b_(),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.":"")),mc=!1,hi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function FO(){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"),hi?.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;",wr="margin-bottom: 10px; margin-top: 15px;",UO="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",w_="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",zO=w_,NO=w_+" word-break: break-all;";function Gn(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${UO}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${zO}'>${i.label}</td><td style='${NO}'>${n}</td></tr>`}return t+="</tbody></table>",t}function x_(){try{if(document.createElement("canvas").getContext("webgl2"))return"\u2705"}catch{}return"\u274C"}function WO(){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=KO();t+=`<h3 style='${v_}'>Device: ${i}</h3>`,t+=Gn([{label:"\u{1F4BB} Desktop",value:L.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:L.isMobileDevice()},{label:"\u{1F34E} iOS",value:L.isiOS()},{label:"\u{1F4F1} iPad",value:L.isiPad()},{label:"\u{1F916} Android",value:L.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:L.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:L.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:L.isMacOS()},{label:"\u{1F453} VisionOS",value:L.isVisionOS()},{label:"\u{1F9ED} Safari",value:L.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:L.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:L.supportsQuickLookAR()}],!0);const n=[],s=L.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=L.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=L.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=Gn(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:x_()}];t+=Gn(l,!1),t+="</div>",e(t)}),o}function VO(){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=$O();i.length>0&&(t+=`<h3 style='${wr}'>General GPU Info</h3>`,t+=Gn(i,!1));const n=GO();n.length>0&&(t+=`<h3 style='${wr}'>WebGL</h3>`,t+=Gn(n,!1));const s=qO();s.length>0&&(t+=`<h3 style='${wr}'>WebGL 2 Features</h3>`,t+=Gn(s,!1));const r=XO();r.length>0&&(t+=`<h3 style='${wr}'>WebGL Limits</h3>`,t+=Gn(r,!1));const a=QO();a.length>0&&(t+=`<h3 style='${wr}'>Texture Formats</h3>`,t+=Gn(a,!1));const l=await YO();if(l.length>0&&(t+=`<h3 style='${wr}'>WebGPU</h3>`,t+=Gn(l,!1)),L.isSafari()){const c=ZO();c.length>0&&(t+=`<h3 style='${wr}'>Safari GPU Info</h3>`,t+=Gn(c,!1))}t+="</div>",e(t)}),o}function $O(){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=L.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=S_();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=HO(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 HO(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 GO(){const o=[],e=S_();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:x_()})),o}function qO(){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 XO(){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 QO(){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 YO(){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 S_(){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 ZO(){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 KO(){return L.isQuest()?"Meta Quest":L.isVisionOS()?"Vision Pro":L.isiOS()?L.isiPad()?"iPad":"iPhone/iPod":L.isAndroidDevice()?"Android Device":L.isMozillaXR()?"Mozilla XR Browser":L.isNeedleAppClip()?"Needle App Clip":L.isMacOS()?"Mac":L.isDesktop()?"Desktop PC":"Unknown Device"}function JO(){return document.querySelector("#__vconsole .vc-switch")||null}function ek(){return document.querySelector("#__vconsole")||null}const C_=v("debugdefines");vs('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),vs('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),vs('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),vs('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),vs('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.12.1";'),vs('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),vs('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jan 30 2026 15:20:40 GMT+0000 (Coordinated Universal Time)";'),vs('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Ai="4.12.1",Fa="undefined",gc="Fri Jan 30 2026 15:20:40 GMT+0000 (Coordinated Universal Time)";C_&&console.log(`Engine version: ${Ai} (generator: ${Fa})
|
|
145
145
|
Project built at ${gc}`);const _s=NEEDLE_PUBLIC_KEY,Ro="needle_isActiveInHierarchy",xr="builtin_components",fc="needle_editor_guid";function vs(o){try{(0,eval)(o)}catch(e){C_&&console.error(e)}}let P_,O_=null;function wn(){return P_}function hg(o){if(o==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}O_!==o&&(O_=o,P_=new o)}function tk(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.")}}const Ii=Symbol("shadowDomOwner"),ik=v("debugpatch");function Vd(o,e,t,i){const n=ik===e;if(!t&&!i)return;const s=e+"___needle";ok(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]=M_(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]=M_(l,o,e);else{const c=this[s];R_(o,e,this,c,l),this[s]=l,E_(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function nk(o,e,t){const i=ug(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 k_=Symbol("Needle:Patches:WrappedFunction");function M_(o,e,t){if(o[k_])return o;const i=function(...n){R_(e,t,this,...n);const s=o.apply(this,n);return E_(e,t,this,s,...n),s};return i[k_]=!0,i}const $d="Needle:Patches";function dg(){return globalThis[$d]||(globalThis[$d]=new WeakMap),globalThis[$d]}function ug(o,e){const t=dg().get(o);return t?t.get(e):null}function ok(o,e,t,i){let n=dg().get(o);n||(n=new Map,dg().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function R_(o,e,t,...i){if(!t)return;const n=ug(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function E_(o,e,t,i,...n){if(!t)return;const s=ug(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}const Ua=[];function Hd(o){Ua.indexOf(o)===-1&&Ua.push(o)}function sk(o){const e=Ua.indexOf(o);e!==-1&&Ua.splice(e,1)}const za=[];function pg(o){za.indexOf(o)===-1&&za.push(o)}function rk(o){const e=za.indexOf(o);e!==-1&&za.splice(e,1)}function T_(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:o}));for(let e=0;e<Ua.length;e++)Ua[e](o)}function A_(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:o}));for(let e=0;e<za.length;e++)za[e](o)}const rt=v("debuginput");var Gd=(o=>(o.Mouse="mouse",o.Touch="touch",o.Controller="controller",o.Hand="hand",o))(Gd||{}),Te=(o=>(o.PointerDown="pointerdown",o.PointerUp="pointerup",o.PointerMove="pointermove",o.KeyDown="keydown",o.KeyUp="keyup",o.KeyPressed="keypress",o))(Te||{});class Eo extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new wo(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;buttonName=void 0;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device,this.buttonName=i.buttonName}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),rt&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class yc extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class ak{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var di=(o=>(o[o.Early=-100]="Early",o[o.Default=0]="Default",o[o.Late=100]="Late",o))(di||{});class I_{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const s=this._eventListeners[e],r=s.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(s.push({priority:n,listeners:[{callback:t,options:i}]}),s.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const s=n.find(a=>a.priority===i.queue);if(!s)return;const r=s.listeners.findIndex(a=>a.callback===t);r>=0&&s.listeners.splice(r,1)}else for(const s of n){const r=s.listeners.findIndex(a=>a.callback===t);r>=0&&s.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof yc){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let s=0;s<n.listeners.length;s++){const r=n.listeners[s];if(r.options?.signal?.aborted){n.listeners.splice(s,1),s--;continue}r.options.once&&(n.listeners.splice(s,1),s--),r.callback(e)}}if(e instanceof Eo){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let s=0;s<n.listeners.length;s++){const r=n.listeners[s];if(r.options?.signal?.aborted){n.listeners.splice(s,1),s--;continue}if(e.immediatePropagationStopped){t=!0,rt&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,rt&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(s,1),s--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const s of e)if(i===s){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new ee];_pointerPositionsLastFrame=[new ee];_pointerPositionsDelta=[new ee];_pointerPositionsRC=[new ee];_pointerPositionDown=[new b];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":rt&&Pe("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":rt&&Pe("Create Pointer move"),this.onMove(e);break;case"pointerup":rt&&Pe("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&L.isMozillaXR()?!0:(rt&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)!==!1&&e instanceof PointerEvent&&e.pointerType};keysPressed={};onKeyDown=e=>{if(rt&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new yc("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new yc("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new yc("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);rt&&Pe(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new Eo("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),s=new Eo("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(s)};onPointerCancel=e=>{this.context.isInAR||(rt&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new Eo("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,rt&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Eo("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Eo("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=new Eo("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(s),this._pointerIds[n]=-1}};tempNearPlaneVector=new b;tempFarPlaneVector=new b;tempLookMatrix=new K;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new k,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const s=this.context.mainCamera;if(s){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(s),a.unproject(s);const l=s.worldUp||F(0,1,0).applyQuaternion(_e(s));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,s=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return rt&&!s&&console.log("Not in rect",t,i,n),s}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${t}`,rt?e:""),rt&&console.log(e.pointerType,"DOWN",t),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new b);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new ee);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){rt&&console.log(e.pointerType,"UP",t,"was not down");return}rt&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let a=this._pointerEventsPressed.length-1;a>=0;a--)if(this._pointerEventsPressed[a].pointerId===t){this._pointerEventsPressed.splice(a,1);break}if(!this._pointerPositionDown[t]){rt&&be("Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const i=this._pointerUpTime[t],n=this._pointerDownTime[t],s=this.context.time.realtimeSinceStartup,r=s-n;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=s,r<1){let a=e.clientX-this._pointerPositionDown[t].x,l=e.clientY-this._pointerPositionDown[t].y,c=0;if(e.isSpatial&&e.clientZ!=null&&(c=e.clientZ-this._pointerPositionDown[t].z,a*=200,l*=200,c*=200),Math.abs(a)<5&&Math.abs(l)<5&&Math.abs(c)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const h=s-i;rt&&console.log("CLICK",t,a,l,c,h),h<this._doubleClickTimeThreshold&&h>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new ee);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new ee);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new ee);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let s=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const h=e.source;s===0&&h.movementX!==0&&(s=h.movementX||0),r===0&&h.movementY!==0&&(r=h.movementY||0)}n.x+=s,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new ee);const c=this._pointerPositionsRC[t];c.set(a,l),this.convertScreenspaceToRaycastSpace(c)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(rt&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=U.Current;try{U.Current=this.context,this.dispatchEvent(e)}finally{U.Current=t}}}const Na=new K().makeRotationY(Math.PI),Xi=new N().setFromAxisAngle(new b(0,1,0),Math.PI),lk=v("debugwebxr");class ck{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new k,this.gameObject.name="Implicit XR Rig",lk){const e=Mg(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const To=v("debugwebxr"),qd=v("debugcustomgesture"),hk="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",dk="generic-trigger",uk=new N().setFromEuler(new st(xo.degToRad(0),xo.degToRad(-90),xo.degToRad(-90))),pk=new b(.04,-.04,0);class mg{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new K;_gripPosition=new b;_gripQuaternion=new N;_linearVelocity=new b;_rayPositionRaw=new b;_rayRotationRaw=new N;_rayMatrix=new K;_rayPosition=new b;_rayQuaternion=new N;get gripPosition(){return F(this._gripPosition)}get gripQuaternion(){return ci(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return F(this._linearVelocity).applyQuaternion(Xi)}get rayPosition(){return F(this._rayPosition)}get rayQuaternion(){return ci(this._rayQuaternion)}get gripWorldPosition(){return F(this._gripWorldPosition)}_gripWorldPosition=new b;get gripWorldQuaternion(){return ci(this._gripWorldQuaternion)}_gripWorldQuaternion=new N;get rayWorldPosition(){return F(this._rayWorldPosition)}_rayWorldPosition=new b;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return ci(this._rayWorldQuaternion)}_rayWorldQuaternion=new N;get pinchPosition(){return F(this._pinchPosition)}_pinchPosition=new b;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?_e(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Xi),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(F(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=F(0,1,0).applyQuaternion(e.quaternion),i=F(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new Oi(.15);_debugGripAxesHelper=new Oi(.07);_debugRayAxesHelper=new Oi(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new k,this._object.name=`NeedleXRController_${i}`,To&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new k,this._raySpaceObject=new k,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new wo,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){B.DrawSphere(this.rayWorldPosition,.003),B.DrawDirection(this.rayWorldPosition,F(0,0,10).applyQuaternion(this.rayWorldQuaternion));const e=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),t=this.inputSource.profiles.join(`
|
|
146
146
|
`);let i=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
|
|
147
147
|
C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(i+=`
|
package/dist/{needle-engine.bundle-DQdhrcLq.umd.cjs → needle-engine.bundle-BV9DUnnS.umd.cjs}
RENAMED
|
@@ -141,7 +141,7 @@ void main(){
|
|
|
141
141
|
#__vconsole .vc-mask {
|
|
142
142
|
overflow: hidden;
|
|
143
143
|
}
|
|
144
|
-
`,ko?.prepend(i),s===!0&&Fb()<=0&&nv(),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.":"")),dl=!1,Qt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function LS(){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"),Qt?.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 Pp="padding: 10px; font-family: monospace;",zy="margin-bottom: 10px;",Eo="margin-bottom: 10px; margin-top: 15px;",IS="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",sv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",jS=sv,BS=sv+" word-break: break-all;";function Pn(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${IS}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${jS}'>${i.label}</td><td style='${BS}'>${n}</td></tr>`}return t+="</tbody></table>",t}function ov(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function US(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Pp}'>`;const i=XS();t+=`<h3 style='${zy}'>Device: ${i}</h3>`,t+=Pn([{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+=Pn(n,!1)),t+="</div>",t+=`<div style='${Pp} margin-top: 20px;'>`,t+=`<h3 style='${zy}'>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:ov()}];t+=Pn(l,!1),t+="</div>",e(t)}),s}function FS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Pp}'>`;const i=zS();i.length>0&&(t+=`<h3 style='${Eo}'>General GPU Info</h3>`,t+=Pn(i,!1));const n=VS();n.length>0&&(t+=`<h3 style='${Eo}'>WebGL</h3>`,t+=Pn(n,!1));const o=$S();o.length>0&&(t+=`<h3 style='${Eo}'>WebGL 2 Features</h3>`,t+=Pn(o,!1));const r=WS();r.length>0&&(t+=`<h3 style='${Eo}'>WebGL Limits</h3>`,t+=Pn(r,!1));const a=GS();a.length>0&&(t+=`<h3 style='${Eo}'>Texture Formats</h3>`,t+=Pn(a,!1));const l=await HS();if(l.length>0&&(t+=`<h3 style='${Eo}'>WebGPU</h3>`,t+=Pn(l,!1)),exports.DeviceUtilities.isSafari()){const h=qS();h.length>0&&(t+=`<h3 style='${Eo}'>Safari GPU Info</h3>`,t+=Pn(h,!1))}t+="</div>",e(t)}),s}function zS(){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=rv();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=NS(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 NS(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 VS(){const s=[],e=rv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:ov()})),s}function $S(){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 WS(){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 GS(){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 HS(){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 rv(){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 qS(){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 XS(){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 QS(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function YS(){const s=document.querySelector("#__vconsole");return s||null}const av=x("debugdefines");ho('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');ho('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');ho('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');ho('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');ho('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.12.0";');ho('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');ho('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jan 30 2026 12:34:50 GMT+0000 (Coordinated Universal Time)";');ho('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const pi="4.12.0",Sa="undefined",ac="Fri Jan 30 2026 12:34:50 GMT+0000 (Coordinated Universal Time)";av&&console.log(`Engine version: ${pi} (generator: ${Sa})
|
|
144
|
+
`,ko?.prepend(i),s===!0&&Fb()<=0&&nv(),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.":"")),dl=!1,Qt=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function LS(){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"),Qt?.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 Pp="padding: 10px; font-family: monospace;",zy="margin-bottom: 10px;",Eo="margin-bottom: 10px; margin-top: 15px;",IS="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",sv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",jS=sv,BS=sv+" word-break: break-all;";function Pn(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${IS}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${jS}'>${i.label}</td><td style='${BS}'>${n}</td></tr>`}return t+="</tbody></table>",t}function ov(){try{if(document.createElement("canvas").getContext("webgl2"))return"✅"}catch{}return"❌"}function US(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Pp}'>`;const i=XS();t+=`<h3 style='${zy}'>Device: ${i}</h3>`,t+=Pn([{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+=Pn(n,!1)),t+="</div>",t+=`<div style='${Pp} margin-top: 20px;'>`,t+=`<h3 style='${zy}'>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:ov()}];t+=Pn(l,!1),t+="</div>",e(t)}),s}function FS(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Pp}'>`;const i=zS();i.length>0&&(t+=`<h3 style='${Eo}'>General GPU Info</h3>`,t+=Pn(i,!1));const n=VS();n.length>0&&(t+=`<h3 style='${Eo}'>WebGL</h3>`,t+=Pn(n,!1));const o=$S();o.length>0&&(t+=`<h3 style='${Eo}'>WebGL 2 Features</h3>`,t+=Pn(o,!1));const r=WS();r.length>0&&(t+=`<h3 style='${Eo}'>WebGL Limits</h3>`,t+=Pn(r,!1));const a=GS();a.length>0&&(t+=`<h3 style='${Eo}'>Texture Formats</h3>`,t+=Pn(a,!1));const l=await HS();if(l.length>0&&(t+=`<h3 style='${Eo}'>WebGPU</h3>`,t+=Pn(l,!1)),exports.DeviceUtilities.isSafari()){const h=qS();h.length>0&&(t+=`<h3 style='${Eo}'>Safari GPU Info</h3>`,t+=Pn(h,!1))}t+="</div>",e(t)}),s}function zS(){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=rv();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=NS(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 NS(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 VS(){const s=[],e=rv();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:ov()})),s}function $S(){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 WS(){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 GS(){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 HS(){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 rv(){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 qS(){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 XS(){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 QS(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function YS(){const s=document.querySelector("#__vconsole");return s||null}const av=x("debugdefines");ho('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');ho('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');ho('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');ho('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');ho('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.12.1";');ho('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');ho('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jan 30 2026 15:20:40 GMT+0000 (Coordinated Universal Time)";');ho('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const pi="4.12.1",Sa="undefined",ac="Fri Jan 30 2026 15:20:40 GMT+0000 (Coordinated Universal Time)";av&&console.log(`Engine version: ${pi} (generator: ${Sa})
|
|
145
145
|
Project built at ${ac}`);const Ys=NEEDLE_PUBLIC_KEY,cs="needle_isActiveInHierarchy",Fo="builtin_components",Gl="needle_editor_guid";function ho(s){try{(0,eval)(s)}catch(e){av&&console.error(e)}}let lv,Ny=null;function ln(){return lv}function km(s){if(s==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}Ny!==s&&(Ny=s,lv=new s)}function KS(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 R()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}const hi=Symbol("shadowDomOwner"),ZS=x("debugpatch");function nu(s,e,t,i){const n=ZS===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]=$y(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]=$y(l,s,e);else{const h=this[o];cv(s,e,this,h,l),this[o]=l,hv(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function JS(s,e,t){const i=Em(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 Vy=Symbol("Needle:Patches:WrappedFunction");function $y(s,e,t){if(s[Vy])return s;const i=function(...n){cv(e,t,this,...n);const o=s.apply(this,n);return hv(e,t,this,o,...n),o};return i[Vy]=!0,i}const rd="Needle:Patches";function Op(){return globalThis[rd]||(globalThis[rd]=new WeakMap),globalThis[rd]}function Em(s,e){const t=Op().get(s);return t?t.get(e):null}function eC(s,e,t,i){let n=Op().get(s);n||(n=new Map,Op().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function cv(s,e,t,...i){if(!t)return;const n=Em(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function hv(s,e,t,i,...n){if(!t)return;const o=Em(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}const Ca=[];function su(s){Ca.indexOf(s)===-1&&Ca.push(s)}function tC(s){const e=Ca.indexOf(s);e!==-1&&Ca.splice(e,1)}const Pa=[];function Rm(s){Pa.indexOf(s)===-1&&Pa.push(s)}function iC(s){const e=Pa.indexOf(s);e!==-1&&Pa.splice(e,1)}function dv(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:s}));for(let e=0;e<Ca.length;e++)Ca[e](s)}function uv(s){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:s}));for(let e=0;e<Pa.length;e++)Pa[e](s)}const Xe=x("debuginput");var ou=(s=>(s.Mouse="mouse",s.Touch="touch",s.Controller="controller",s.Hand="hand",s))(ou||{}),Ce=(s=>(s.PointerDown="pointerdown",s.PointerUp="pointerup",s.PointerMove="pointermove",s.KeyDown="keydown",s.KeyUp="keyup",s.KeyPressed="keypress",s))(Ce||{});class Jn extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new c.Ray(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;buttonName=void 0;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device,this.buttonName=i.buttonName}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),Xe&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class kl extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class nC{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var Zt=(s=>(s[s.Early=-100]="Early",s[s.Default=0]="Default",s[s.Late=100]="Late",s))(Zt||{});class fv{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const o=this._eventListeners[e],r=o.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(o.push({priority:n,listeners:[{callback:t,options:i}]}),o.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const o=n.find(a=>a.priority===i.queue);if(!o)return;const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}else for(const o of n){const r=o.listeners.findIndex(a=>a.callback===t);r>=0&&o.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof kl){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}if(e instanceof Jn){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let o=0;o<n.listeners.length;o++){const r=n.listeners[o];if(r.options?.signal?.aborted){n.listeners.splice(o,1),o--;continue}if(e.immediatePropagationStopped){t=!0,Xe&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,Xe&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(o,1),o--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const o of e)if(i===o){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new c.Vector2];_pointerPositionsLastFrame=[new c.Vector2];_pointerPositionsDelta=[new c.Vector2];_pointerPositionsRC=[new c.Vector2];_pointerPositionDown=[new c.Vector3];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":Xe&&we("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":Xe&&we("Create Pointer move"),this.onMove(e);break;case"pointerup":Xe&&we("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&exports.DeviceUtilities.isMozillaXR()?!0:(Xe&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)!==!1&&e instanceof PointerEvent&&e.pointerType};keysPressed={};onKeyDown=e=>{if(Xe&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new kl("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new kl("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new kl("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);Xe&&we(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new Jn("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),o=new Jn("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(o)};onPointerCancel=e=>{this.context.isInAR||(Xe&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new Jn("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,Xe&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Jn("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Jn("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:o,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),o=new Jn("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(o),this._pointerIds[n]=-1}};tempNearPlaneVector=new c.Vector3;tempFarPlaneVector=new c.Vector3;tempLookMatrix=new c.Matrix4;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new c.Object3D,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const o=this.context.mainCamera;if(o){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(o),a.unproject(o);const l=o.worldUp||B(0,1,0).applyQuaternion(fe(o));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,o=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return Xe&&!o&&console.log("Not in rect",t,i,n),o}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${t}`,Xe?e:""),Xe&&console.log(e.pointerType,"DOWN",t),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new c.Vector3);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){Xe&&console.log(e.pointerType,"UP",t,"was not down");return}Xe&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let l=this._pointerEventsPressed.length-1;l>=0;l--)if(this._pointerEventsPressed[l].pointerId===t){this._pointerEventsPressed.splice(l,1);break}if(!this._pointerPositionDown[t]){Xe&&ue("Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const n=this._pointerUpTime[t],o=this._pointerDownTime[t],r=this.context.time.realtimeSinceStartup,a=r-o;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=r,a<1){let l=e.clientX-this._pointerPositionDown[t].x,h=e.clientY-this._pointerPositionDown[t].y,d=0;if(e.isSpatial&&e.clientZ!=null&&(d=e.clientZ-this._pointerPositionDown[t].z,l*=200,h*=200,d*=200),Math.abs(l)<5&&Math.abs(h)<5&&Math.abs(d)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const u=r-n;Xe&&console.log("CLICK",t,l,h,d,u),u<this._doubleClickTimeThreshold&&u>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new c.Vector2);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new c.Vector2);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new c.Vector2);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let o=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const d=e.source;o===0&&d.movementX!==0&&(o=d.movementX||0),r===0&&d.movementY!==0&&(r=d.movementY||0)}n.x+=o,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new c.Vector2);const h=this._pointerPositionsRC[t];h.set(a,l),this.convertScreenspaceToRaycastSpace(h)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(Xe&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=U.Current;try{U.Current=this.context,this.dispatchEvent(e)}finally{U.Current=t}}}const fa=new c.Matrix4().makeRotationY(Math.PI),Ai=new c.Quaternion().setFromAxisAngle(new c.Vector3(0,1,0),Math.PI),sC=x("debugwebxr");class oC{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new c.Object3D,this.gameObject.name="Implicit XR Rig",sC){const e=Bm(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const Hn=x("debugwebxr"),Mh=x("debugcustomgesture"),rC="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",aC="generic-trigger",lC=new c.Quaternion().setFromEuler(new c.Euler(c.MathUtils.degToRad(0),c.MathUtils.degToRad(-90),c.MathUtils.degToRad(-90))),cC=new c.Vector3(.04,-.04,0);class Tm{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new c.Matrix4;_gripPosition=new c.Vector3;_gripQuaternion=new c.Quaternion;_linearVelocity=new c.Vector3;_rayPositionRaw=new c.Vector3;_rayRotationRaw=new c.Quaternion;_rayMatrix=new c.Matrix4;_rayPosition=new c.Vector3;_rayQuaternion=new c.Quaternion;get gripPosition(){return B(this._gripPosition)}get gripQuaternion(){return Kt(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return B(this._linearVelocity).applyQuaternion(Ai)}get rayPosition(){return B(this._rayPosition)}get rayQuaternion(){return Kt(this._rayQuaternion)}get gripWorldPosition(){return B(this._gripWorldPosition)}_gripWorldPosition=new c.Vector3;get gripWorldQuaternion(){return Kt(this._gripWorldQuaternion)}_gripWorldQuaternion=new c.Quaternion;get rayWorldPosition(){return B(this._rayWorldPosition)}_rayWorldPosition=new c.Vector3;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return Kt(this._rayWorldQuaternion)}_rayWorldQuaternion=new c.Quaternion;get pinchPosition(){return B(this._pinchPosition)}_pinchPosition=new c.Vector3;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?fe(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Ai),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(B(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=B(0,1,0).applyQuaternion(e.quaternion),i=B(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new c.AxesHelper(.15);_debugGripAxesHelper=new c.AxesHelper(.07);_debugRayAxesHelper=new c.AxesHelper(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new c.Object3D,this._object.name=`NeedleXRController_${i}`,Hn&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new c.Object3D,this._raySpaceObject=new c.Object3D,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new c.Ray,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){j.DrawSphere(this.rayWorldPosition,.003),j.DrawDirection(this.rayWorldPosition,B(0,0,10).applyQuaternion(this.rayWorldQuaternion));const t=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),i=this.inputSource.profiles.join(`
|
|
146
146
|
`);let n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
|
|
147
147
|
C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(n+=`
|
|
@@ -165,7 +165,7 @@ See https://engine.needle.tools/docs/scripting.html#special-lifecycle-hooks for
|
|
|
165
165
|
`+Oi):console.debug("Connected to networking backend",Oi),n(!0),this.onSendQueued(tn.OnConnection)}).onClose(h=>{this._connectingToWebsocketPromise=null,this.connected=!1,this._isInRoom=!1,n(!1);let d="Websocket connection closed...";Oi?.includes("/socket")||(d+=' Do you perhaps mean to connect to "/socket"?'),console.error(d)}).onError(h=>{console.error("Websocket connection failed..."),n(!1),Jt.sendEvent(this.context,"networking",{event:"connection_error"})}).onRetry(()=>{console.log("Retry connecting to networking websocket")}).build();l.addEventListener(o.WebsocketEvent.message,(h,d)=>{this.onMessage(h,d)})})}onMessage(e,t){const i=t.data;try{if(typeof i!="string"){i.size&&this.handleIncomingBinaryMessage(i);return}const n=JSON.parse(i);if(Array.isArray(n))for(const o of n)this.handleIncomingStringMessage(o);else this.handleIncomingStringMessage(n);return}catch(n){qt&&i==="pong"?console.log("<<",i):R()&&console.error("Failed to parse message",n)}}async handleIncomingBinaryMessage(e){Eh&&console.log("<< bin",this.context.time.frame);const t=await e.arrayBuffer();var i=new Uint8Array(t);const n=new re.ByteBuffer(i),o=n.getBufferIdentifier(),r=this._listenersBinary[o],a=mv(n),l=gv(a);if(l&&typeof l=="string"&&(this._state[l]=a),!r)return;const h=a??n;for(const d of r)d(h)}handleIncomingStringMessage(e){if(qt&&console.log("<<",e.key??e),e.key)switch(e.key){case"connection-start-info":if(e.data){const r=e.data;r&&(console.assert(r.id!==void 0&&r.id!==null&&r.id.length>0,"server did not send connection id",r.id),console.debug("Your id is: "+r.id,this.context.alias??""),this._connectionId=r.id,Jt.sendEvent(this.context,"networking",{event:"connected"}))}else console.warn("Expected connection id in "+e.key);break;case"joined-room":if(qt&&console.log(e),e){this._isInRoom=!0;const r=e;this._currentRoomName=r.room,this._currentRoomViewId=r.viewId,this._currentRoomAllowEditing=r.allowEditing??!0,this._currentInRoom.length=0,this._currentInRoom.push(...r.inRoom),(Eh||R())&&console.debug("Joined Needle Engine Room: "+r.room);const a=new URL(window.location.href);a.searchParams.has("room")&&a.searchParams.delete("room"),a.searchParams.set("view",this._currentRoomViewId),console.debug(`Room view id: ${this._currentRoomViewId}
|
|
166
166
|
${a.href}`)}this.onSendQueued(tn.OnRoomJoin),Jt.sendEvent(this.context,"networking",{event:"joined_room",room:this._currentRoomName});break;case"left-room":const n=e;n.room===this.currentRoomName&&(this._isInRoom=!1,this._currentRoomName=null,this._currentRoomAllowEditing=!0,this._currentInRoom.length=0,(Eh||R())&&console.debug("Left Needle Engine Room: "+n.room)),Jt.sendEvent(this.context,"networking",{event:"left_room",room:n.room});break;case"user-joined-room":if(e.data){const r=e.data;this._currentInRoom.push(r.userId),qt&&console.log(r.userId+" joined","now in room:",this._currentInRoom)}break;case"user-left-room":if(e.data){const r=e.data,a=this._currentInRoom.indexOf(r.userId);a>=0&&(qt&&console.log(r.userId+" left","now in room:",this._currentInRoom),this._currentInRoom.splice(a,1)),r.userId===this.connectionId&&console.log("you left the room")}break;case"all-room-state-deleted":qt&&console.log("RECEIVED all-room-state-deleted"),this._state={};break;case"ping":case"pong":const o=e.data?.time;o&&(this._currentDelay=this.context.time.time-o),qt&&console.log(`Current latency: ${(this._currentDelay*1e3).toFixed()} ms`,"Clients in room: "+this._currentInRoom?.length);break}const t=e.data;t&&(this._state[t.guid]=t);let i=this._listeners[e.key];if(i){i=[...i];for(const n of i)try{n(e.data)}catch(o){console.error('Error invoking callback for "'+e.key+'"',o)}}}toMessage(e,t){return{key:e,data:t}}sendWithWebsocket(e,t,i=tn.OnRoomJoin){if(!this._ws){const o=this._waitingForSocket[i]||[];o.push(()=>this.sendWithWebsocket(e,t,i)),this._waitingForSocket[i]=o;return}const n=JSON.stringify(this.toMessage(e,t));qt&&console.log(">>",e),this._ws.send(n)}onSendQueued(e){const t=this._waitingForSocket[e];if(t){for(const i of t)i();t.length=0}}}const Hl=x("debugwebxr");class mf{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=>{Hl&&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||(Hl&&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),Hl&&console.log(`XRSync: ${i.type} ${i.handedness} added`,i.index)}}}class xv{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(Y.JoinedRoom,this.onJoinedRoom),this.context.connection.beginListen(Y.LeftRoom,this.onLeftRoom),this.context.connection.beginListen(Y.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.beginListen(Y.UserLeftRoom,this.onOtherUserLeftRoom)}destroy(){this.context.connection.stopListen(Y.JoinedRoom,this.onJoinedRoom),this.context.connection.stopListen(Y.LeftRoom,this.onLeftRoom),this.context.connection.stopListen(Y.UserJoinedRoom,this.onOtherUserJoinedRoom),this.context.connection.stopListen(Y.UserLeftRoom,this.onOtherUserLeftRoom)}onJoinedRoom=()=>{if(this.context.connection.connectionId){this._states.has(this.context.connection.connectionId)||(Hl&&console.log("XRSync: Local user joined room",this.context.connection.connectionId),this._states.set(this.context.connection.connectionId,new mf(this.context.connection.connectionId,this.context)));for(const e of this.context.connection.usersInRoom())this._states.has(e)||this._states.set(e,new mf(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)||(Hl&&console.log("XRSync: Remote user joined room",t),this._states.set(t,new mf(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 Ky{_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=L.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}var or=(s=>(s[s.Quad=0]="Quad",s[s.Cube=1]="Cube",s[s.Sphere=2]="Sphere",s[s.Cylinder=3]="Cylinder",s[s.RoundedCube=10]="RoundedCube",s))(or||{});class mr{static createText(e,t){let i=null;const n=t?.font||_C(t?.familyFamily||null);n instanceof q.Font?i=this.#t(e,n,t):i==null&&(i=new c.BufferGeometry);const o=t?.color||16777215,r=new c.Mesh(i,t?.material??new c.MeshStandardMaterial({color:o}));return this.applyDefaultObjectOptions(r,t),n instanceof Promise?n.then(a=>{r.geometry=this.#t(e,a,t),t?.onGeometry&&t.onGeometry(r)}):t?.onGeometry&&t.onGeometry(r),r}static#t(e,t,i){const n=i?.depth||.1;return new q.TextGeometry(e,{font:t,size:1,depth:n,height:n,bevelEnabled:i?.bevel||!1,bevelThickness:.01,bevelOffset:.01,bevelSize:.01})}static createOccluder(e){const t=new c.MeshBasicMaterial({colorWrite:!1,depthWrite:!0,side:c.DoubleSide});return this.createPrimitive(e,{material:t})}static createPrimitive(e,t){let i;const n=t?.color||16777215;switch(e){case"Quad":case 0:{const o=new c.PlaneGeometry(1,1,1,1),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Quad"}break;case"Cube":case 1:{const o=new c.BoxGeometry(1,1,1),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Cube"}break;case 10:case"RoundedCube":{const o=yC(1,1,1,.1,2),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="RoundedCube"}break;case"Sphere":case 2:{const o=new c.SphereGeometry(.5,16,16),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Sphere"}break;case"Cylinder":case 3:{const o=new c.CylinderGeometry(.5,.5,1,32),r=t?.material??new c.MeshStandardMaterial({color:n});t?.texture&&"map"in r&&(r.map=t.texture),i=new c.Mesh(o,r),i.name="Cylinder"}break;case"ShaderBall":i=new c.Group,i.name="ShaderBall",bC(i,t);break}return this.applyDefaultObjectOptions(i,t),i}static createSprite(e){const i=new c.SpriteMaterial({color:16777215});e?.texture&&"map"in i&&(i.map=e.texture);const n=new c.Sprite(i);return this.applyDefaultObjectOptions(n,e),n}static applyDefaultObjectOptions(e,t){e.receiveShadow=!0,e.castShadow=!0,t?.name&&(e.name=t.name),t?.position&&(Array.isArray(t.position)?e.position.set(t.position[0],t.position[1],t.position[2]):e.position.set(t.position.x||0,t.position.y||0,t.position.z||0)),t?.rotation&&(Array.isArray(t.rotation)?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2]):e.rotation.set(t.rotation.x||0,t.rotation.y||0,t.rotation.z||0)),t?.scale&&(typeof t.scale=="number"?e.scale.set(t.scale,t.scale,t.scale):Array.isArray(t.scale)?e.scale.set(t.scale[0],t.scale[1],t.scale[2]):e.scale.set(t.scale.x||1,t.scale.y||1,t.scale.z||1)),t?.receiveShadow!=null&&(e.receiveShadow=t.receiveShadow),t?.castShadow!=null&&(e.castShadow=t.castShadow),t?.parent&&t.parent.add(e)}}function yC(s,e,t,i,n){const o=new c.Shape,r=1e-5,a=i-r;o.absarc(r,r,r,-Math.PI/2,-Math.PI,!0),o.absarc(r,e-a*2,r,Math.PI,Math.PI/2,!0),o.absarc(s-a*2,e-a*2,r,Math.PI/2,0,!0),o.absarc(s-a*2,r,r,0,-Math.PI/2,!0);const l=new c.ExtrudeGeometry(o,{bevelEnabled:!0,bevelSegments:n*2,steps:1,bevelSize:a,bevelThickness:i,curveSegments:n,UVGenerator:{generateTopUV:(h,d)=>{const u=[];for(let p=0;p<d.length;p+=3)u.push(new c.Vector2(d[p]/s,d[p+1]/e));return u},generateSideWallUV:(h,d,u,p,m,y)=>{const _=[];return _.push(new c.Vector2(d[u]/s,d[u+1]/e)),_.push(new c.Vector2(d[p]/s,d[p+1]/e)),_.push(new c.Vector2(d[m]/s,d[m+1]/e)),_.push(new c.Vector2(d[y]/s,d[y+1]/e)),_}}});return l.scale(1,1,1-i),l.center(),l.index||l.setIndex(Array.from({length:l.attributes.position.count},(h,d)=>d)),l.computeVertexNormals(),l}const Rh=new Map;function _C(s){let e="";switch(s){default:case"OpenSans":e="https://cdn.needle.tools/static/fonts/facetype/Open Sans_Regular_ascii.json";break;case"Helvetiker":e="https://raw.githubusercontent.com/mrdoob/three.js/master/examples/fonts/helvetiker_regular.typeface.json";break}if(Rh.has(e)){const n=Rh.get(e);if(n)return n}const t=new q.FontLoader,i=new Promise((n,o)=>{t.load(e,r=>{Rh.set(e,r),n(r)},void 0,o)});return Rh.set(e,i),i}let gf=!1,yf=null;function bC(s,e){if(yf===null){const t="https://cdn.needle.tools/static/models/shaderball.glb",i=new q.GLTFLoader,n=se.createLoaders(null);i.setDRACOLoader(n.dracoLoader),i.setKTX2Loader(n.ktx2Loader),gf=!0,yf=i.loadAsync(t).then(o=>{const r=o.scene;return r.position.y-=.5,r}).catch(o=>(console.warn("Failed to load shaderball mesh: "+o.message),Jy())).finally(()=>{gf=!1})}if(gf){const t=Jy();t.name="ShaderBall-Placeholder";const i=t.children[0];i?.type==="Mesh"&&Zy(i,e),s.add(t)}yf.then(t=>{s.children.forEach(o=>{o.name==="ShaderBall-Placeholder"&&s.remove(o)});const i=t.clone(),n=i.children[0];n?.type==="Mesh"&&(n.geometry.attributes.tangent||n.geometry.computeTangents(),Zy(n,e)),s.add(i)})}function Zy(s,e){if(e?.color||e?.material||e?.texture){const i=e?.material??s.material?.clone()??new c.MeshStandardMaterial;e.color&&"color"in i&&i.color instanceof c.Color&&i.color.set(e.color),e?.texture&&"map"in i&&(i.map=e.texture),s.material=i}}function Jy(){return new c.Group().add(mr.createPrimitive("Sphere",{material:new c.MeshBasicMaterial({transparent:!0,opacity:.1})}))}class Oa{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 Oa(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 us(100)),this._active=null}_session;_mode;_init;get isAR(){return this._mode==="immersive-ar"}_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.setAnimationLoop(this.onFrame),this._renderer.xr.setSession(i),this._renderer.xr.enabled=!0,this._renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),this._renderer.setSize(window.innerWidth,window.innerHeight),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;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)};async onBeforeHandoff(){await us(1e3),this._scene.clear()}_objects=[];setupScene(){this._scene.background=new c.Color(0),this._scene.add(new c.GridHelper(5,10,1118481,1118481));const e=new c.DirectionalLight(16777215,1);e.position.set(0,20,0),e.castShadow=!1,this._scene.add(e);const t=new c.DirectionalLight(16777215,1);t.position.set(0,-1,0),t.castShadow=!1,this._scene.add(t);const i=new c.PointLight(16777215,1,100,1);i.position.set(0,2,0),i.castShadow=!1,i.distance=200,this._scene.add(i);const n=50;for(let o=0;o<100;o++){const r=new c.MeshStandardMaterial({color:2236962,metalness:1,roughness:.8});this.isAR&&(r.emissive=new c.Color(Math.random(),Math.random(),Math.random()),r.emissiveIntensity=Math.random());const a=L.random(0,1)>.5?or.Sphere:or.Cube,l=mr.createPrimitive(a,{material:r});l.position.x=L.random(-n,n),l.position.y=L.random(-2,n),l.position.z=L.random(-n,n),l.rotation.x=L.random(0,Math.PI*2),l.rotation.y=L.random(0,Math.PI*2),l.rotation.z=L.random(0,Math.PI*2),l.scale.multiplyScalar(.5+Math.random()*10);const h=l.position.distanceTo(this._camera.position)-l.scale.x;h<1&&l.position.multiplyScalar(1+1/h),this._objects.push(l),this._scene.add(l)}}update(e,t){const i=e*4e-4;for(let n=0;n<this._objects.length;n++){const o=this._objects[n];o.position.y+=Math.sin(i+n*.5)*.005,o.rotateY(.002)}}}var cc;(s=>{const e=[];function t(){e?.length||R()&&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})(cc||(cc={}));const je=x("debugwebxr"),e_=x("stats");let _f=0;function vC(s){let e=null;const t=s;return t.getAROverlayContainer?e=t.getAROverlayContainer():e=s,e}wC();async function wC(){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"],le.addContextCreatedCallback(async t=>{if(!e)return;ua(!0);const i=await e;if(i){const n=H.getDefaultSessionInit(s);H.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(Sv()&&(await Oa.start(e||s,i||H.getDefaultSessionInit(s)).catch(o=>console.warn("[NeedleXRSession:granted] TemporaryXRContext start failed:",o)),await CC(),n=await Oa.handoff()),n)H.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);H.start(e,o).catch(r=>console.warn(r))}else H.start(s).catch(o=>console.warn("[NeedleXRSession:granted] failed:",o))},{once:!0})}}function xC(s,e){sessionStorage.setItem("needle_xr_session_mode",s),sessionStorage.setItem("needle_xr_session_init",JSON.stringify(e))}function SC(){sessionStorage.removeItem("needle_xr_session_mode"),sessionStorage.removeItem("needle_xr_session_init")}const jm=new Set;le.registerCallback(ae.ContextCreationStart,async s=>{jm.add(s.context)});le.registerCallback(ae.ContextCreated,async s=>{jm.delete(s.context);const e=s.context?.domElement.getAttribute("autostart")||null;PC(e)});function Sv(){return jm.size>0}function CC(){return new Promise(s=>{const e=Date.now(),t=setInterval(()=>{(!Sv()||Date.now()-e>6e4)&&(clearInterval(t),s())},100)})}exports.DeviceUtilities.isDesktop()&&R()&&window.addEventListener("keydown",s=>{(s.key==="x"||s.key==="Escape")&&H.active&&H.stop()});function PC(s){s&&s?.toLowerCase()==="ar"&&cn.registerWaitForInteraction(()=>{H.start("ar")})}const Th=Symbol("initial-fov");class H{static _sync=null;static getXRSync(e){return this._sync||(this._sync=new xv(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=>(je&&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=>H.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(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 Jt.sendEvent(U.Current,"xr",{action:"quicklook_export",source:"NeedleXRSession.start"}),cc.exportAndOpen(),null;if(!a&&(e==="immersive-ar"||e==="ar")){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();Jt.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+`
|
|
167
167
|
`,u),window!==window.top?window.open(h,"_blank"):window.location.href=h}return null}}if(e==="quicklook")return console.warn("QuickLook mode is only supported on iOS devices"),null;if(e=="ar"&&(e="immersive-ar"),R()&&x("debugxrpreroom"))return console.warn("Debug: Starting temporary XR session"),await Oa.start(e,t||H.getDefaultSessionInit(e)),null;if(this._currentSessionRequest)return console.warn("A XRSession is already being requested"),(je||R())&&ue("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=le.All[0]),!i)throw new Error("No Needle Engine Context found");switch(t||(t={}),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=vC(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 Oa.stop();const n=e=="immersive-ar"?i.scripts_immersive_ar:i.scripts_immersive_vr;je?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);for(const a of this._sessionRequestStartListeners)a({mode:e,init:t});je&&we("Requesting "+e+" session ("+Date.now()+")"),Jt.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&&ue("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:"&&ue("XR requires a secure connection (HTTPS)")});this._currentSessionRequest=void 0,this._currentSessionRequestMode=null;for(const a of this._sessionRequestEndListeners)a({mode:e,init:t,newSession:o||null});return o?this.setSession(e,o,t,i):(console.warn("XR Session request was rejected"),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 H(e,t,n,{scripts:o,controller_added:this._controllerAddedListeners,controller_removed:this._controllerRemovedListeners,init:i}),t.addEventListener("end",this.onEnd),je?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?(je&&console.log("[NeedleXRSession] Stopping XR Session... (new)"),e[this.$_stop_request]=setTimeout(()=>{e.end()})):je&&console.warn("[NeedleXRSession] XR Session stop already requested"))}static onEnd=()=>{je&&console.log("XR Session ended"),this._activeSession=null};context;get sync(){return H._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")||R()&&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&&rr(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 B(0,0,0);const t=B(e);return t.x*=-1,t.z*=-1,t.applyQuaternion(Kt(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(rr(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)}je&&(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=B(i.transform.position),o=Kt(i.transform.orientation),r=this.context.mainCamera;if(r?.parent!==this._cameraRenderParent&&n.applyMatrix4(fa),r?.parent){n.applyMatrix4(r.parent.matrixWorld),o.multiply(Ai);const a=fe(r.parent);a.premultiply(Ai),o.premultiply(a)}return{hit:e,position:n,quaternion:o}}return null}convertSpace(e){const t=B(e.position);t.applyMatrix4(fa);const i=Kt(e.orientation);return i.premultiply(Ai),{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){xC(e,n.init),this.session=t,this.mode=e,this.context=i,(je||x("console"))&&ua(!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,ms(this.onBefore,me.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=Q(this.context.mainCamera,new c.Vector3),this._originalCameraWorldRotation=fe(this.context.mainCamera,new c.Quaternion),this._originalCameraWorldScale=Le(this.context.mainCamera,new c.Vector3),this._originalCameraParent=this.context.mainCamera.parent,this.context.mainCamera instanceof c.PerspectiveCamera&&(this.context.mainCamera[Th]=this.context.mainCamera.fov)),this._defaultRig=new oC,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):je&&console.warn("controllerAutoUpdate is not available in three.js - cannot disable it")}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 Tm(this,e,t);this._newControllers.push(i)};disconnectInputSource(e){const t=(o,r)=>{if(o.inputSource===e){je&&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"),Jt.sendEvent(U.Current,"xr",{action:"session_end",mode:this.mode,source:"NeedleXRSession.onEnd"}),SC(),this.onAfterRender(),this.revertCustomForward(),this._didStart=!1,this._previousCameraParent=null,this.requestedCameraNearPlane=null,uo(this.onBefore,me.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()}),uv({session:this});for(const o of H._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&&rt(this.context.mainCamera,this._originalCameraWorldPosition),this._originalCameraWorldRotation&&an(this.context.mainCamera,this._originalCameraWorldRotation),this._originalCameraWorldScale&&xa(this.context.mainCamera,this._originalCameraWorldScale),this.context.mainCamera instanceof c.PerspectiveCamera&&this.context.mainCamera[Th]&&(this.context.mainCamera.fov=this.context.mainCamera[Th],this.context.mainCamera[Th]=0)),this.context.requestSizeUpdate(),this._defaultRig.gameObject.removeFromParent(),ua(!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&&(je&&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=$t(this.context.scene.children);if(o){const r=o.getSize(B());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(B());l.y=a.position.y,a.lookAt(l)}}}dv({session:this}),pr();for(const o of H._xrStartListeners)o(i);const n=[...this._xr_scripts];je&&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)}je&&this.context.time.frame%30===0&&this.controllers.length<=0&&this.session.inputSources.length>0&&(ua(!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(je)for(const e of this.controllers)e.onRenderDebug();if((je||e_)&&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()}`,je||e_)for(const o of this.controllers)n+=`
|
|
168
|
-
${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;_f=0,j.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:(je&&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){je&&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=Le(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,je&&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 Ky),this._transition}fadeTransition(){return this._transition||(this._transition=new Ky),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 bf=x("debugwebxr");class Cv{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(bf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(bf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(bf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new K("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class ee 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=L.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=L.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 ee(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 ee(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 ee(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ee(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 ee(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ee(e[0],e[1],e[2],e[3]);if(e.length===3)return new ee(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ee(e)}}const xt=new c.Vector3,t_=new c.Vector3,i_=new c.Quaternion,OC=x("debuggizmos"),Yi=8947848,vf=32;class j{constructor(){}static enabled=!0;static isGizmo(e){return e[Ep]!==void 0}static setVisible(e){for(const t of Mi.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!j.enabled)return null;o||(o=Yi);const l=H.active?.rigScale??1,h=Mi.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=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),xt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+xt.x,e.y+xt.y,e.z+xt.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,en(r.material,i)}static DrawDirection(e,t,i=Yi,n=0,o=!0,r=1){if(!j.enabled)return;const a=Mi.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(xt.set(0,0,-r),i_.set(t.x,t.y,t.z,t.w),xt.applyQuaternion(i_)):(xt.set(t.x,t.y,t.z),xt.multiplyScalar(r)),l.setXYZ(1,e.x+xt.x,e.y+xt.y,e.z+xt.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,en(a.material,i)}static DrawLine(e,t,i=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.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,en(r.material,i)}static DrawCircle(e,t,i,n=Yi,o=0,r=!0){if(!j.enabled)return;const a=Mi.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,xt.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,en(a.material,n)}static DrawWireSphere(e,t,i=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.getSphere(t,n,!0);sr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,en(r.material,i)}static DrawSphere(e,t,i=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.getSphere(t,n,!1);sr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,en(r.material,i)}static DrawWireBox(e,t,i=Yi,n=0,o=!0,r=void 0){if(!j.enabled)return;const a=Mi.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,en(a.material,i)}static DrawWireBox3(e,t=Yi,i=0,n=!0){if(!j.enabled)return;const o=Mi.getBox(i);o.position.copy(e.getCenter(xt)),o.scale.copy(e.getSize(xt)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,en(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=Yi,n=0,o=!0,r=!1){if(!j.enabled)return;const a=Mi.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),xt.set(t.x,t.y,t.z).sub(t_.set(e.x,e.y,e.z)).normalize());const h=xt.set(t.x,t.y,t.z).sub(t_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,en(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Mi.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,en(t.material,e.color??Yi)}}const MC=new c.BoxGeometry(1,1,1);function Bm(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(MC);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function en(s,e){if(Array.isArray(s)){for(const i of s)en(i,e);return}const t=e instanceof ee?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Ep=Symbol("GizmoCache");class Mi{static familyName="needle-gizmos";static ensureFont(){let e=te.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=te.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://uploads.needle.tools/include/font-msdf.json","https://uploads.needle.tools/include/font.png")?.addEventListener("ready",()=>{te.__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),OC&&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 te.__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(vf*3),3),t.geometry.setAttribute("position",i);const n=B(0,1,0),o=B(0,0,1),r=B(o);r.cross(n).normalize();const a=B(r),l=Math.PI*2/(vf-1);for(let h=0;h<vf+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[Ep]=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,te.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof te.__webpack_exports__default.MeshUIBaseElement){if(rr(n))continue;const o=e.isInVR,r=!1,a=!o;Ec(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(),rr(r)!=!0&&r[Ep].push(r))}}}const Ft=x("debugphysics"),kC=x("debugworker"),n_=new c.Layers;class fo{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){n_.set(e),this.layerMask=n_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class Um{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ma{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 fo;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){Ft&&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 Ft&&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)),Ft&&console.time("raycast"),o.length=0,Ma._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))),Ma._raycasting--,Ft&&(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||j.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&&s_(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 q.GroundedSkybox&&(u=!1),d==="lod"){const p=se.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&RC(a,e,i)||(n.useAcceleratedRaycast!==!1?Ed.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,Ft&&i.length!=h){const p=i[i.length-1];j.DrawWireSphere(p.point,.1,7798784,1,!1),j.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)&&!j.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof q.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&&s_(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(Ed.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=Q(e),_=y.distanceTo(m.center),g=new Um(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 s_(s){return!(s.index&&s.index.array.length<3)}const Ro=new c.Sphere,Ah=new c.Plane,EC=new c.Matrix3;function RC(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 q.GroundedSkybox){Ah.setFromNormalAndCoplanarPoint(B(0,1,0),B(0,-l.position.y,0)),Ah.applyMatrix4(l.matrixWorld,EC);const u=o.ray.intersectPlane(Ah,B());if(u){Ro.copy(h),Ro.applyMatrix4(l.matrixWorld);const m=B(u).sub(o.ray.origin).length(),y=Ro.radius*.5;m<y&&r.push({distance:m,point:u,object:l,normal:Ah.normal.clone()})}return}Ro.copy(h),Ro.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Ro,B());if(d){const u=B(d).sub(o.ray.origin),p=u.length();if(p>Ro.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 Ed;(s=>{let e=0;function t(b,v,T,O,M){if(!v.geometry||!v.geometry.hasAttribute("position"))return!1;const A=v.geometry;if(v?.isSkinnedMesh){const D=v,I=D.bvhNeedsUpdate;if(!D.staticGenerator)l(),r&&(D.staticGenerator=new r(v),D.staticGenerator.applyWorldTransforms=!1,D.staticGeometry=D.staticGenerator.generate(),A.boundsTree=a?.call(D.staticGeometry),D.staticGeometryLastUpdate=performance.now()+Math.random()*200,D.bvhNeedsUpdate=!0);else if(A.boundsTree&&(D.autoUpdateMeshBvhInterval!==void 0&&D.autoUpdateMeshBvhInterval>=0||I===!0)){const N=performance.now(),$=N-D.staticGeometryLastUpdate,k=D.autoUpdateMeshBvhInterval??100;(I||$>k)&&(Ft&&console.warn(`Physics: updating skinned mesh bvh for ${v.name} after ${$.toFixed(2)}ms`),D.bvhNeedsUpdate=!1,D.staticGeometryLastUpdate=N,D.staticGenerator?.generate(D.staticGeometry),A.boundsTree.refit())}}else if(!A.boundsTree){d||w();let D=!0;if((O.xr||A[y]===!1||A.getAttribute("position")?.isInterleavedBufferAttribute||A.index&&A.index?.isInterleavedBufferAttribute||e>10)&&(D=!1),D&&p){if(A[m]===void 0){let I=null;if(g.length>0){const N=g.shift();N&&!N.running&&(I=N)}if(!I&&_.length<3)try{kC&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:da&&da.tagName.toUpperCase()==="SCRIPT"&&da.src||new URL("needle-engine.bundle-DQdhrcLq.umd.cjs",document.baseURI).href),I=new p,_.push(I)}catch(N){N instanceof DOMException&&N.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(N),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(N)),e++}if(I!=null&&!I.running){const N=v.name;Ft&&console.log("<<<< worker start",N,I),A[m]="queued",performance.mark("bvh.create.start");const $=A.clone();try{I.generate($).then(k=>{A[m]="done",A.boundsTree=k}).catch(k=>{A[m]="failed - "+k?.message,A[y]=!1,Ft&&console.error("Failed to generate mesh bvh on worker",k)}).finally(()=>{Ft&&console.log(">>>>> worker done",N,{hasBoundsTre:A.boundsTree!=null}),g.push(I),$.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 Ft&&console.warn("No worker available")}}else(!u||!D)&&(l(),o&&(performance.mark("bvh.create.start"),A.boundsTree=new o(A),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const D=b,I=v.raycast;if(A.boundsTree)l(),n&&(v.acceleratedRaycast||(v.acceleratedRaycast=n.bind(v),Ft&&console.debug(`Physics: bind acceleratedRaycast fn to "${v.name}"`)),v.raycast=v.acceleratedRaycast);else if(Ft&&console.warn("No bounds tree found for mesh",v.name,{workerTask:A[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(A.getAttribute("position")?.array?.length??0)>2e3)return Ft&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const N=D.firstHitOnly;return D.firstHitOnly=!1,D.intersectObject(v,!1,T),D.firstHitOnly=N,v.raycast=I,!0}else if(b instanceof c.Sphere){const D=A.boundsTree;if(D){const I=b;if(h.copy(v.matrixWorld).invert(),I.applyMatrix4(h),D.intersectsSphere(I)){const $=Q(v),k=$.distanceTo(I.center),z=new Um(v,k,$);T.push(z)}}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-tyBvnMF-.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(Ft||R())&&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 w(){d=!0,u=!0,Promise.resolve().then(()=>LT).then(b=>{p=b.GenerateMeshBVHWorker}).catch(b=>{Ft||R()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Ed||(Ed={}));const o_=Symbol("gltf-loader-internal-usage-tracker"),TC=x("debugusers");class ma{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ma._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(){ma._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[o_]=e._loadingId),r)),o},null}afterRoot(e){ma._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[o_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{TC&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class Pv{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:
|
|
168
|
+
${o.hand?"hand":"ctrl"} ${o.inputSource.handedness}[${o.index}] con:${o.connected} tr:${o.isTracking} hts:${o.hasHitTestSource?"yes":"no"}`;_f=0,j.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:(je&&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){je&&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=Le(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,je&&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 Ky),this._transition}fadeTransition(){return this._transition||(this._transition=new Ky),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 bf=x("debugwebxr");class Cv{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(bf&&console.log("FOUND AVATAR HEAD",e.name),i.head=new K("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(bf&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new K("",t,e)),!i.rightHand&&n.includes("right")&&(bf&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new K("",t,e)));for(let o=0;o<e.children.length;o++){if(i.head&&i.leftHand&&i.rightHand)return;const r=e.children[o];this.tryFindAvatarObjects(r,t,i)}}}class ee 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=L.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=L.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 ee(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 ee(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 ee(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ee(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 ee(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ee(e[0],e[1],e[2],e[3]);if(e.length===3)return new ee(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ee(e)}}const xt=new c.Vector3,t_=new c.Vector3,i_=new c.Quaternion,OC=x("debuggizmos"),Yi=8947848,vf=32;class j{constructor(){}static enabled=!0;static isGizmo(e){return e[Ep]!==void 0}static setVisible(e){for(const t of Mi.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!j.enabled)return null;o||(o=Yi);const l=H.active?.rigScale??1,h=Mi.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=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),xt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+xt.x,e.y+xt.y,e.z+xt.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,en(r.material,i)}static DrawDirection(e,t,i=Yi,n=0,o=!0,r=1){if(!j.enabled)return;const a=Mi.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(xt.set(0,0,-r),i_.set(t.x,t.y,t.z,t.w),xt.applyQuaternion(i_)):(xt.set(t.x,t.y,t.z),xt.multiplyScalar(r)),l.setXYZ(1,e.x+xt.x,e.y+xt.y,e.z+xt.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,en(a.material,i)}static DrawLine(e,t,i=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.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,en(r.material,i)}static DrawCircle(e,t,i,n=Yi,o=0,r=!0){if(!j.enabled)return;const a=Mi.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,xt.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,en(a.material,n)}static DrawWireSphere(e,t,i=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.getSphere(t,n,!0);sr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,en(r.material,i)}static DrawSphere(e,t,i=Yi,n=0,o=!0){if(!j.enabled)return;const r=Mi.getSphere(t,n,!1);sr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,en(r.material,i)}static DrawWireBox(e,t,i=Yi,n=0,o=!0,r=void 0){if(!j.enabled)return;const a=Mi.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,en(a.material,i)}static DrawWireBox3(e,t=Yi,i=0,n=!0){if(!j.enabled)return;const o=Mi.getBox(i);o.position.copy(e.getCenter(xt)),o.scale.copy(e.getSize(xt)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,en(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=Yi,n=0,o=!0,r=!1){if(!j.enabled)return;const a=Mi.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),xt.set(t.x,t.y,t.z).sub(t_.set(e.x,e.y,e.z)).normalize());const h=xt.set(t.x,t.y,t.z).sub(t_.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,en(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Mi.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,en(t.material,e.color??Yi)}}const MC=new c.BoxGeometry(1,1,1);function Bm(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(MC);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function en(s,e){if(Array.isArray(s)){for(const i of s)en(i,e);return}const t=e instanceof ee?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Ep=Symbol("GizmoCache");class Mi{static familyName="needle-gizmos";static ensureFont(){let e=te.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=te.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://uploads.needle.tools/include/font-msdf.json","https://uploads.needle.tools/include/font.png")?.addEventListener("ready",()=>{te.__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),OC&&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 te.__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(vf*3),3),t.geometry.setAttribute("position",i);const n=B(0,1,0),o=B(0,0,1),r=B(o);r.cross(n).normalize();const a=B(r),l=Math.PI*2/(vf-1);for(let h=0;h<vf+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[Ep]=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,te.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof te.__webpack_exports__default.MeshUIBaseElement){if(rr(n))continue;const o=e.isInVR,r=!1,a=!o;Ec(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(),rr(r)!=!0&&r[Ep].push(r))}}}const Ft=x("debugphysics"),kC=x("debugworker"),n_=new c.Layers;class fo{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){n_.set(e),this.layerMask=n_}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class Um{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Ma{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 fo;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){Ft&&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 Ft&&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)),Ft&&console.time("raycast"),o.length=0,Ma._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))),Ma._raycasting--,Ft&&(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||j.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&&s_(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 q.GroundedSkybox&&(u=!1),d==="lod"){const p=se.getRaycastMesh(o);p&&(a.geometry=p)}if(!u&&RC(a,e,i)||(n.useAcceleratedRaycast!==!1?Ed.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,Ft&&i.length!=h){const p=i[i.length-1];j.DrawWireSphere(p.point,.1,7798784,1,!1),j.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)&&!j.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof q.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&&s_(u)||(h=!1),h){if(a){const p=this.sphere;p.center.copy(t),p.radius=i;const m=o.length;if(Ed.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=Q(e),_=y.distanceTo(m.center),g=new Um(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 s_(s){return!(s.index&&s.index.array.length<3)}const Ro=new c.Sphere,Ah=new c.Plane,EC=new c.Matrix3;function RC(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 q.GroundedSkybox){Ah.setFromNormalAndCoplanarPoint(B(0,1,0),B(0,-l.position.y,0)),Ah.applyMatrix4(l.matrixWorld,EC);const u=o.ray.intersectPlane(Ah,B());if(u){Ro.copy(h),Ro.applyMatrix4(l.matrixWorld);const m=B(u).sub(o.ray.origin).length(),y=Ro.radius*.5;m<y&&r.push({distance:m,point:u,object:l,normal:Ah.normal.clone()})}return}Ro.copy(h),Ro.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(Ro,B());if(d){const u=B(d).sub(o.ray.origin),p=u.length();if(p>Ro.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 Ed;(s=>{let e=0;function t(b,v,T,O,M){if(!v.geometry||!v.geometry.hasAttribute("position"))return!1;const A=v.geometry;if(v?.isSkinnedMesh){const D=v,I=D.bvhNeedsUpdate;if(!D.staticGenerator)l(),r&&(D.staticGenerator=new r(v),D.staticGenerator.applyWorldTransforms=!1,D.staticGeometry=D.staticGenerator.generate(),A.boundsTree=a?.call(D.staticGeometry),D.staticGeometryLastUpdate=performance.now()+Math.random()*200,D.bvhNeedsUpdate=!0);else if(A.boundsTree&&(D.autoUpdateMeshBvhInterval!==void 0&&D.autoUpdateMeshBvhInterval>=0||I===!0)){const N=performance.now(),$=N-D.staticGeometryLastUpdate,k=D.autoUpdateMeshBvhInterval??100;(I||$>k)&&(Ft&&console.warn(`Physics: updating skinned mesh bvh for ${v.name} after ${$.toFixed(2)}ms`),D.bvhNeedsUpdate=!1,D.staticGeometryLastUpdate=N,D.staticGenerator?.generate(D.staticGeometry),A.boundsTree.refit())}}else if(!A.boundsTree){d||w();let D=!0;if((O.xr||A[y]===!1||A.getAttribute("position")?.isInterleavedBufferAttribute||A.index&&A.index?.isInterleavedBufferAttribute||e>10)&&(D=!1),D&&p){if(A[m]===void 0){let I=null;if(g.length>0){const N=g.shift();N&&!N.running&&(I=N)}if(!I&&_.length<3)try{kC&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:da&&da.tagName.toUpperCase()==="SCRIPT"&&da.src||new URL("needle-engine.bundle-BV9DUnnS.umd.cjs",document.baseURI).href),I=new p,_.push(I)}catch(N){N instanceof DOMException&&N.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(N),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log(N)),e++}if(I!=null&&!I.running){const N=v.name;Ft&&console.log("<<<< worker start",N,I),A[m]="queued",performance.mark("bvh.create.start");const $=A.clone();try{I.generate($).then(k=>{A[m]="done",A.boundsTree=k}).catch(k=>{A[m]="failed - "+k?.message,A[y]=!1,Ft&&console.error("Failed to generate mesh bvh on worker",k)}).finally(()=>{Ft&&console.log(">>>>> worker done",N,{hasBoundsTre:A.boundsTree!=null}),g.push(I),$.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 Ft&&console.warn("No worker available")}}else(!u||!D)&&(l(),o&&(performance.mark("bvh.create.start"),A.boundsTree=new o(A),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const D=b,I=v.raycast;if(A.boundsTree)l(),n&&(v.acceleratedRaycast||(v.acceleratedRaycast=n.bind(v),Ft&&console.debug(`Physics: bind acceleratedRaycast fn to "${v.name}"`)),v.raycast=v.acceleratedRaycast);else if(Ft&&console.warn("No bounds tree found for mesh",v.name,{workerTask:A[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(A.getAttribute("position")?.array?.length??0)>2e3)return Ft&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const N=D.firstHitOnly;return D.firstHitOnly=!1,D.intersectObject(v,!1,T),D.firstHitOnly=N,v.raycast=I,!0}else if(b instanceof c.Sphere){const D=A.boundsTree;if(D){const I=b;if(h.copy(v.matrixWorld).invert(),I.applyMatrix4(h),D.intersectsSphere(I)){const $=Q(v),k=$.distanceTo(I.center),z=new Um(v,k,$);T.push(z)}}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-tyBvnMF-.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(Ft||R())&&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 w(){d=!0,u=!0,Promise.resolve().then(()=>LT).then(b=>{p=b.GenerateMeshBVHWorker}).catch(b=>{Ft||R()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Ed||(Ed={}));const o_=Symbol("gltf-loader-internal-usage-tracker"),TC=x("debugusers");class ma{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return ma._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(){ma._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[o_]=e._loadingId),r)),o},null}afterRoot(e){ma._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[o_],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{TC&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class Pv{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:
|
|
169
169
|
`+i.src),e.preventDefault())}})}}const ru=x("trackresources");function Ov(){return ru==="dispose"}let gr=!0;ru===0&&(gr=!1);function AC(s){gr=s}function Mv(){return gr}const kv=Symbol("disposable");function Ev(s,e){s&&(s[kv]=e,Qo&&console.warn("Set disposable",e,s))}const Rv=Symbol("disposed");function DC(s){return s[Rv]===!0}function be(s){if(s){if(s[kv]===!1){Qo&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[Rv]=!0),s instanceof c.Scene)be(s.environment),be(s.background),be(s.customDepthMaterial),be(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)be(s.geometry),be(s.material),be(s.skeleton),be(s.bindMatrix),be(s.bindMatrixInverse),be(s.customDepthMaterial),be(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)be(s.geometry),be(s.material),be(s.customDepthMaterial),be(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){zr(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];be(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)Qo&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&be(e);else if(s instanceof c.Material){zr(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&be(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?be(i):i instanceof c.Uniform$1&&be(i.value)}}else s instanceof c.Texture?(zr(s),zr(s.source),s.source?.data instanceof ImageBitmap&&zr(s.source.data)):s instanceof c.Skeleton?(zr(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&Qo&&console.warn("Unknown object type",s)}}function zr(s){s&&((Qo||Ov()||ru)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function LC(s){}const IC=new Set;function Fm(s,e,t=null,i){if(i||(i=IC,i.clear()),!s)return i;const n=s[hc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&Fm(o,!0,t,i));return i}function jC(s){return s[Rl]}const Qo=x("debugresourceusers")||x("debugmemory"),hc=Symbol("needle-resource-users"),Rl=Symbol("needle-resource-users-count");function Lt(s,e){nu(s,e,function(t,i){gr&&!Ma.raycasting&&(Rd(hc,this,t,!1),Rd(hc,this,i,!0))})}gr&&(Lt(c.Mesh.prototype,"material"),Lt(c.Mesh.prototype,"geometry"),Lt(c.Material.prototype,"map"),Lt(c.Material.prototype,"bumpMap"),Lt(c.Material.prototype,"alphaMap"),Lt(c.Material.prototype,"normalMap"),Lt(c.Material.prototype,"displacementMap"),Lt(c.Material.prototype,"roughnessMap"),Lt(c.Material.prototype,"metalnessMap"),Lt(c.Material.prototype,"emissiveMap"),Lt(c.Material.prototype,"specularMap"),Lt(c.Material.prototype,"envMap"),Lt(c.Material.prototype,"lightMap"),Lt(c.Material.prototype,"aoMap"),Lt(c.Material.prototype,"gradientMap"));function BC(s){if(gr===!1)return;const e=s[hc];if(e)for(const t of e)Rd(hc,t,s,!1)}gr&&nu(c.Material.prototype,"dispose",function(){BC(this)});let Rp=0;function Rd(s,e,t,i){if(Rp>0)return;if(Array.isArray(t)){for(const o of t)Rd(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[Rl]||0;o+=1,t[Rl]=o,Qo&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[Rl]||0;o>0&&(o-=1,t[Rl]=o),Qo&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(ma.isLoading(t)||(ru&&console.warn(`🔴 Removed all user of "${t.type}"`,t),Ov()&&be(t)))}t[s]=n}try{nu(c.WebGLRenderer.prototype,"render",function(){Rp++},function(){Rp--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const r_=x("debugcomponentevents");class au{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),r_&&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(r_&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const dc=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),Tv=Symbol("isUsingInstancing"),Av=Symbol("instancingRenderer"),Tl=Symbol("instancingAutoUpdateBounds");class Bi{static isUsingInstancing(e){return e[Tv]===!0}static getRenderer(e){return e[Av]||null}setAutoUpdateBounds(e,t){const i=Bi.getRenderer(e);i&&(i[Tl]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[dc]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)Bi.markDirty(i,!0)}}exports.NEEDLE_ENGINE_FEATURE_FLAGS=void 0;(s=>{s.experimentalSmartHierarchyUpdate=!1})(exports.NEEDLE_ENGINE_FEATURE_FLAGS||(exports.NEEDLE_ENGINE_FEATURE_FLAGS={}));function ga(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const Tp=x("debugnewscripts"),UC=x("debughierarchy"),Se=[];function FC(){return Se.length>0}function Td(s){if(Tp&&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)){Se.length=0,s.new_scripts.length>0&&Se.push(...s.new_scripts),s.new_scripts.length=0;for(let e=0;e<Se.length;e++)try{const t=Se[e];if(t.isComponent!==!0){(R()||Tp)&&console.error(`Registered script is not a Needle Engine component.
|
|
170
170
|
The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
|
|
171
171
|
`,t),Se.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
|
|
@@ -1644,4 +1644,4 @@ Error:`,r),null}}updateColliderCollisionGroups(e){const t=e[Ct],i=e.membership;l
|
|
|
1644
1644
|
justify-content: center;
|
|
1645
1645
|
gap: .5rem;
|
|
1646
1646
|
}
|
|
1647
|
-
`),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),Ud(Vp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#l()),this.#o.observe(this.#e,{attributes:!0}),yp&&console.log("Needle Button updated")}#l(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#r=e=>{yp&&console.log("Needle Button clicked"),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(Tb)&&window.customElements.define(Tb,_x);const Ml=x("debugavatar");class Oy{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 bx{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 un;i=S.instantiate(wa(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Ml&&console.log("[Custom Avatar] valid config",t,Ml?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Ml?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(Ml&&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 ln().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return Jm(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await ln().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Ml&&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 Oy(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 vx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class wx{}const AT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:he,ActionCollection:Pw,ActionModel:Yt,AlignmentConstraint:Fc,Animation:kt,AnimationCurve:oh,AnimationExtension:Mu,AnimationTrackHandler:xc,Animator:at,AnimatorController:Ui,Antialiasing:ah,Attractor:Ya,AudioExtension:Cr,AudioListener:os,AudioSource:bi,AudioTrackHandler:as,Avatar:ro,AvatarBlink_Simple:vr,AvatarEyeLook_Rotation:lg,AvatarLoader:bx,AvatarMarker:Pe,AvatarModel:Oy,Avatar_Brain_LookAt:gc,Avatar_MouthShapes:$c,Avatar_MustacheShake:rg,Avatar_POI:ir,AxesHelper:Ba,BaseUIComponent:Fi,BasicIKConstraint:hg,BehaviorExtension:zg,BehaviorModel:bt,BloomEffect:zu,BoxCollider:xu,BoxGizmo:kr,BoxHelperComponent:st,Button:Os,CallInfo:ss,Camera:ei,CameraTargetReachedEvent:mc,Canvas:Ta,CanvasGroup:ao,CapsuleCollider:fs,ChangeMaterialOnClick:Tg,ChangeTransformOnClick:Pr,CharacterController:wr,CharacterControllerInput:ys,ChromaticAberration:lh,ClickThrough:sf,ColorAdjustments:xo,ColorBySpeedModule:Qa,ColorOverLifetimeModule:Bu,ContactShadows:Wc,ControlTrackHandler:Yu,CursorFollow:Ur,CustomBranding:Mr,Deletable:pg,DeleteBox:Js,DepthOfField:mn,DeviceFlag:Su,DocumentExtension:vx,DragControls:Go,DropListener:bs,Duplicatable:xg,EffectWrapper:wc,EmissionModule:Ss,EmphasizeOnClick:Na,EnvironmentScene:tf,EventList:oe,EventListEvent:yu,EventSystem:Vt,EventTrigger:Pu,FieldWithDefault:rw,FixedJoint:ey,Fog:Ha,GltfExport:Mg,GltfExportBox:Pg,Gradient:Rr,Graphic:Jc,GraphicRaycaster:_u,GridHelper:qa,GridLayoutGroup:Hg,GroundProjectedEnv:zn,GroupActionModel:Ho,HideOnStart:Di,HingeJoint:th,HorizontalLayoutGroup:Gg,get HoverAnimation(){return exports.HoverAnimation},Image:il,InheritVelocityModule:sy,InputField:_y,InstanceHandle:nr,InstancingHandler:hr,Interactable:fg,Keyframe:ti,LODGroup:nh,LODModel:Xa,Light:ri,LimitVelocityOverLifetimeModule:et,LogStats:ug,LookAt:by,LookAtConstraint:br,MainModule:Tt,MarkerTrackHandler:Qu,MaskableGraphic:eh,MeshCollider:mo,MeshRenderer:Hc,MinMaxCurve:G,MinMaxGradient:Tr,NeedleMenu:Vn,NestedGltf:sh,Networking:iy,NoiseModule:pe,ObjectRaycaster:_i,OffsetConstraint:Er,OpenURL:nl,OrbitControls:de,Outline:Ga,Padding:Or,ParticleBurst:Yd,ParticleSubEmitter:oy,ParticleSystem:vc,ParticleSystemRenderer:Gi,PhysicsExtension:Ng,PixelationEffect:ch,PlayAnimationOnClick:_c,PlayAudioOnClick:oo,PlayableDirector:fr,PlayerColor:Aa,PointerEventData:Nc,PostProcessingHandler:hy,PreliminaryAction:Va,PreliminaryTrigger:Qc,RawImage:Ju,Rect:Rw,RectTransform:dn,ReflectionProbe:yc,RegisteredAnimationInfo:Ks,RemoteSkybox:Vu,Renderer:Wt,RendererLightmap:bg,Rigidbody:Ue,RotationBySpeedModule:Wi,RotationOverLifetimeModule:pn,SceneSwitcher:ze,ScreenCapture:So,ScreenSpaceAmbientOcclusion:Cs,ScreenSpaceAmbientOcclusionN8:gn,ScrollFollow:Ms,SeeThrough:Ps,SetActiveOnClick:Ag,ShadowCatcher:fh,ShapeModule:ny,SharpeningEffect:dh,SignalAsset:Xu,SignalReceiver:_h,SignalReceiverEvent:yh,SignalTrackHandler:Sc,Size:Ew,SizeBySpeedModule:ai,SizeOverLifetimeModule:Ar,SkinnedMeshRenderer:vg,SmoothFollow:Wu,SpatialGrabRaycaster:lr,SpatialHtml:vh,SpatialTrigger:Gu,SpatialTriggerReceiver:Un,SpectatorCamera:Hu,SphereCollider:Ua,SplineContainer:jr,SplineData:Fn,SplineWalker:qi,Sprite:vs,SpriteData:ba,SpriteRenderer:si,SpriteSheet:Ra,SubEmitterSystem:Kd,SyncedCamera:uy,SyncedRoom:yn,SyncedTransform:hn,TapGestureTrigger:Lg,TeleportTarget:Au,TestRunner:fy,TestSimulateUserData:py,Text:Rt,TextBuilder:$g,TextExtension:Lu,TextureSheetAnimationModule:At,TiltShiftEffect:Gn,ToneMappingEffect:lo,TrailModule:Te,TransformData:Ee,TransformGizmo:Br,TriggerBuilder:Mt,TriggerModel:eo,UIRaycastUtils:ig,UIRootComponent:Kc,USDZExporter:rn,USDZText:ca,USDZUIExtension:Xg,UsageMarker:Gc,VariantAction:Rg,VelocityOverLifetimeModule:Ie,VerticalLayoutGroup:Wg,VideoPlayer:Ze,get ViewBox(){return exports.ViewBox},Vignette:Ir,VisibilityAction:Yc,Voip:po,Volume:Za,VolumeParameter:F,VolumeProfile:Uu,WebARCameraBackground:xh,WebARSessionRoot:fi,WebXR:Du,WebXRImageTracking:Sh,WebXRImageTrackingModel:Es,WebXRPlaneTracking:Rs,WebXRTrackedImage:Da,XRControllerFollow:ks,XRControllerModel:ps,XRControllerMovement:wi,XRFlag:Li,XRRig:af,XRState:Nt,__Ignore:wx},Symbol.toStringTag,{value:"Module"})),Pc=x("debugmissingcamera");le.registerCallback(ae.MissingCamera,s=>{Pc&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new ei;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=tr.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=tr.Skybox;else{if(i.clearFlags=tr.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new tf("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Yo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&xx(s.context,o),o});le.registerCallback(ae.ContextCreated,s=>{if(!s.context.mainCamera){Pc&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(Wb(s.context.mainCamera)?.isCameraController==!0){Pc&&console.log("Will not auto-fit because a camera controller exists");return}xx(s.context)}});function xx(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Pc&&console.log("Creating default camera controls",e?.name),t){const i=Lc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");i.autoRotate=n!="0"&&n?.toLowerCase()!="false";const o=Number.parseFloat(n||".5");i.autoRotateSpeed=isNaN(o)?.5:o,Pc&&console.log("Auto-rotate",i.autoRotate,"speed:",i.autoRotateSpeed);const r=s.domElement.getAttribute("auto-fit");i.autoFit=r!=="0"&&r?.toLowerCase()!="false",i.autoTarget=!0}else console.warn("Missing camera object, can not add orbit controls")}le.registerCallback(ae.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof kt&&n.playAutomatically||n instanceof at||n instanceof fr&&n.playOnAwake===!0)return!0;if(n instanceof kt)return n.playAutomatically=!0,!0;if(n instanceof fr)return n.playOnAwake=!0,!0}},!0)!==!0&&so.autoplayAnimations(t.file)});exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new jr,r=1-L.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 Fn;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 DT extends re.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-iyfPIK6R.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:da&&da.tagName.toUpperCase()==="SCRIPT"&&da.src||new URL("needle-engine.bundle-DQdhrcLq.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=re.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 LT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:DT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=aO;exports.ActionBuilder=he;exports.ActionCollection=Pw;exports.ActionModel=Yt;exports.Addressables=l0;exports.AlignmentConstraint=Fc;exports.AmbientMode=ya;exports.Animation=kt;exports.AnimationCurve=oh;exports.AnimationExtension=Mu;exports.AnimationTrackHandler=xc;exports.AnimationUtils=so;exports.Animator=at;exports.AnimatorConditionMode=Gs;exports.AnimatorController=Ui;exports.AnimatorControllerParameterType=eg;exports.AnimatorStateInfo=Al;exports.Antialiasing=ah;exports.Application=cn;exports.AssetDatabase=Pv;exports.AssetReference=K;exports.Attractor=Ya;exports.AudioExtension=Cr;exports.AudioListener=os;exports.AudioSource=bi;exports.AudioTrackHandler=as;exports.Avatar=ro;exports.AvatarBlink_Simple=vr;exports.AvatarEyeLook_Rotation=lg;exports.AvatarLoader=bx;exports.AvatarMarker=Pe;exports.AvatarModel=Oy;exports.Avatar_Brain_LookAt=gc;exports.Avatar_MouthShapes=$c;exports.Avatar_MustacheShake=rg;exports.Avatar_POI=ir;exports.Axes=aa;exports.AxesHelper=Ba;exports.BUILD_TIME=ac;exports.BaseUIComponent=Fi;exports.BasicIKConstraint=hg;exports.BehaviorExtension=zg;exports.BehaviorModel=bt;exports.BloomEffect=zu;exports.BoxCollider=xu;exports.BoxGizmo=kr;exports.BoxHelperComponent=st;exports.Button=Os;exports.ButtonsFactory=nn;exports.CallDirection=W0;exports.CallInfo=ss;exports.Camera=ei;exports.CameraTargetReachedEvent=mc;exports.Canvas=Ta;exports.CanvasGroup=ao;exports.CapsuleCollider=fs;exports.ChangeMaterialOnClick=Tg;exports.ChangeTransformOnClick=Pr;exports.CharacterController=wr;exports.CharacterControllerInput=ys;exports.ChromaticAberration=lh;exports.CircularBuffer=gi;exports.ClearFlags=tr;exports.ClickThrough=sf;exports.ClipExtrapolation=Cn;exports.Collider=$i;exports.Collision=N0;exports.CollisionDetectionMode=gu;exports.ColorAdjustments=xo;exports.ColorBySpeedModule=Qa;exports.ColorOverLifetimeModule=Bu;exports.Component=pP;exports.Component$1=E;exports.ComponentLifecycleEvents=au;exports.Components=AT;exports.ConnectionEvents=bv;exports.ContactPoint=z0;exports.ContactShadows=Wc;exports.Context=U;exports.ContextArgs=Z1;exports.ContextEvent=ae;exports.ContextRegistry=le;exports.ControlTrackHandler=Yu;exports.CursorFollow=Ur;exports.CustomBranding=Mr;exports.CustomShader=_e;exports.DefaultReflectionMode=jd;exports.Deletable=pg;exports.DeleteBox=Js;exports.DepthOfField=mn;exports.DeviceFlag=Su;exports.DocumentExtension=vx;exports.DragControls=Go;exports.DragMode=mg;exports.DropListener=bs;exports.Duplicatable=xg;exports.EffectWrapper=wc;exports.EmissionModule=Ss;exports.EmphasizeOnClick=Na;exports.EngineLoadingView=Cc;exports.EnvironmentScene=tf;exports.EventList=oe;exports.EventListEvent=yu;exports.EventSystem=Vt;exports.EventTrigger=Pu;exports.FieldWithDefault=rw;exports.FileReference=Jo;exports.FileReferenceSerializer=h0;exports.FileSpawnModel=RO;exports.File_Event=K0;exports.FixedJoint=ey;exports.Fog=Ha;exports.FrameEvent=me;exports.GENERATOR=Sa;exports.GameObject=S;exports.Gizmos=j;exports.GltfExport=Mg;exports.GltfExportBox=Pg;exports.Gradient=Rr;exports.Graphic=Jc;exports.GraphicRaycaster=_u;exports.Graphics=io;exports.GridHelper=qa;exports.GridLayoutGroup=Hg;exports.GroundProjectedEnv=zn;exports.GroupActionModel=Ho;exports.HideFlags=bu;exports.HideOnStart=Di;exports.HingeJoint=th;exports.HorizontalLayoutGroup=Gg;exports.HostData=GC;exports.Image=il;exports.ImageReference=Zo;exports.ImageReferenceSerializer=c0;exports.InheritVelocityModule=sy;exports.Input=fv;exports.InputEventQueue=Zt;exports.InputEvents=Ce;exports.InputField=_y;exports.InstanceHandle=nr;exports.InstancingHandler=hr;exports.InstancingUtil=Bi;exports.InstantiateEvent=jv;exports.InstantiateIdProvider=_t;exports.InstantiateOptions=un;exports.Interactable=fg;exports.JoinedRoomResponse=pC;exports.KeyEventArgs=nC;exports.Keyframe=ti;exports.LODGroup=nh;exports.LODModel=Xa;exports.LeftRoomResponse=mC;exports.Light=ri;exports.LightData=m0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=yT;exports.LogStats=ug;exports.LogType=ui;exports.LookAt=by;exports.LookAtConstraint=br;exports.MainModule=Tt;exports.MarkerTrackHandler=Qu;exports.MarkerType=my;exports.MaskableGraphic=eh;exports.Mathf=L;exports.MeshCollider=mo;exports.MeshRenderer=Hc;exports.MinMaxCurve=G;exports.MinMaxGradient=Tr;exports.NEKeyboardEvent=kl;exports.NEPointerEvent=Jn;exports.NeedleButtonElement=_x;exports.NeedleEngineWebComponent=Py;exports.NeedleMenu=Vn;exports.NeedlePatchesKey=rd;exports.NeedleXRController=Tm;exports.NeedleXRSession=H;exports.NeedleXRSync=xv;exports.NeedleXRUtils=Cv;exports.NestedGltf=sh;exports.NetworkConnection=wv;exports.NetworkedStreamEvents=Dn;exports.NetworkedStreams=Vc;exports.Networking=iy;exports.NewInstanceModel=Uv;exports.NoiseModule=pe;exports.ObjectRaycaster=_i;exports.ObjectUtils=mr;exports.OffsetConstraint=Er;exports.OneEuroFilter=sd;exports.OneEuroFilterXYZ=vm;exports.OpenURL=nl;exports.OrbitControls=de;exports.Outline=Ga;exports.OwnershipEvent=vv;exports.OwnershipModel=Im;exports.PUBLIC_KEY=Ys;exports.Padding=Or;exports.ParticleBurst=Yd;exports.ParticleSubEmitter=oy;exports.ParticleSystem=vc;exports.ParticleSystemBaseBehaviour=wo;exports.ParticleSystemRenderer=Gi;exports.ParticleSystemShapeType=Qd;exports.PeerHandle=rs;exports.PeerNetworking=_v;exports.Physics=Ma;exports.PhysicsExtension=Ng;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=ch;exports.PlayAnimationOnClick=_c;exports.PlayAudioOnClick=oo;exports.PlayableDirector=fr;exports.PlayerColor=Aa;exports.PlayerState=ji;exports.PlayerStateEvent=kw;exports.PlayerSync=Ug;exports.PlayerView=u0;exports.PlayerViewManager=f0;exports.PointerEventData=Nc;exports.PointerType=ou;exports.PostProcessingEffect=We;exports.PostProcessingEffectOrder=Ke;exports.PostProcessingHandler=hy;exports.PreliminaryAction=Va;exports.PreliminaryTrigger=Qc;exports.PrimitiveType=or;exports.Progress=ne;exports.PromiseAllWithErrors=_m;exports.PromiseErrorResult=vp;exports.RGBAColor=ee;exports.RapierPhysics=va;exports.RawImage=Ju;exports.RaycastOptions=fo;exports.Rect=Rw;exports.RectTransform=dn;exports.ReflectionProbe=yc;exports.RegisteredAnimationInfo=Ks;exports.RemoteSkybox=Vu;exports.RenderTexture=An;exports.RenderTextureSerializer=j0;exports.Renderer=Wt;exports.RendererData=p0;exports.RendererLightmap=bg;exports.Rigidbody=Ue;exports.RigidbodyConstraints=Be;exports.RoomEvents=Y;exports.RotationBySpeedModule=Wi;exports.RotationOverLifetimeModule=pn;exports.SceneLightSettings=Wd;exports.SceneSwitcher=ze;exports.ScreenCapture=So;exports.ScreenSpaceAmbientOcclusion=Cs;exports.ScreenSpaceAmbientOcclusionN8=gn;exports.ScrollFollow=Ms;exports.SeeThrough=Ps;exports.SendQueue=tn;exports.SerializationContext=Hm;exports.SetActiveOnClick=Ag;exports.ShadowCatcher=fh;exports.ShapeModule=ny;exports.ShapeOverlapResult=V0;exports.SharpeningEffect=dh;exports.SignalAsset=Xu;exports.SignalReceiver=_h;exports.SignalReceiverEvent=yh;exports.SignalTrackHandler=Sc;exports.Size=Ew;exports.SizeBySpeedModule=ai;exports.SizeOverLifetimeModule=Ar;exports.SkinnedMeshRenderer=vg;exports.SmoothFollow=Wu;exports.SpatialGrabRaycaster=lr;exports.SpatialHtml=vh;exports.SpatialTrigger=Gu;exports.SpatialTriggerReceiver=Un;exports.SpectatorCamera=Hu;exports.SphereCollider=Ua;exports.SphereIntersection=Um;exports.SplineContainer=jr;exports.SplineData=Fn;exports.SplineWalker=qi;exports.Sprite=vs;exports.SpriteData=ba;exports.SpriteRenderer=si;exports.SpriteSheet=Ra;exports.StateMachineBehaviour=vP;exports.StreamEndedEvent=sg;exports.StreamReceivedEvent=$0;exports.SubEmitterSystem=Kd;exports.SyncedCamera=uy;exports.SyncedRoom=yn;exports.SyncedTransform=hn;exports.TapGestureTrigger=Lg;exports.TeleportTarget=Au;exports.TestRunner=fy;exports.TestSceneUtils=OT;exports.TestSimulateUserData=py;exports.Text=Rt;exports.TextBuilder=$g;exports.TextExtension=Lu;exports.TextureSheetAnimationModule=At;exports.TiltShiftEffect=Gn;exports.Time=g0;exports.ToneMappingEffect=lo;exports.TrackHandler=tl;exports.TrackType=ci;exports.TrailModule=Te;exports.TransformData=Ee;exports.TransformGizmo=Br;exports.TriggerBuilder=Mt;exports.TriggerModel=eo;exports.TypeStore=P;exports.UIRaycastUtils=ig;exports.UIRootComponent=Kc;exports.USDDocument=kg;exports.USDObject=$e;exports.USDWriter=gw;exports.USDZExporter=yw;exports.USDZExporter$1=rn;exports.USDZText=ca;exports.USDZUIExtension=Xg;exports.UriSerializer=B0;exports.UsageMarker=Gc;exports.UserJoinedOrLeftRoomModel=gC;exports.VERSION=pi;exports.VariantAction=Rg;exports.VelocityOverLifetimeModule=Ie;exports.VerticalLayoutGroup=Wg;exports.VideoPlayer=Ze;exports.ViewDevice=hs;exports.Vignette=Ir;exports.VisibilityAction=Yc;exports.Voip=po;exports.Volume=Za;exports.VolumeParameter=F;exports.VolumeProfile=Uu;exports.WaitForFrames=S1;exports.WaitForPromise=d0;exports.WaitForSeconds=Qm;exports.Watch=ls;exports.WebARCameraBackground=xh;exports.WebARSessionRoot=fi;exports.WebXR=Du;exports.WebXRButtonFactory=to;exports.WebXRImageTracking=Sh;exports.WebXRImageTrackingModel=Es;exports.WebXRPlaneTracking=Rs;exports.WebXRTrackedImage=Da;exports.XRControllerFollow=ks;exports.XRControllerModel=ps;exports.XRControllerMovement=wi;exports.XRFlag=Li;exports.XRRig=af;exports.XRState=Nt;exports.XRStateFlag=Rn;exports.__Ignore=wx;exports.__internalNotifyObjectDestroyed=LC;exports.activeInHierarchyFieldName=cs;exports.addAttributeChangeCallback=gm;exports.addComponent=sn;exports.addCustomExtensionPlugin=HO;exports.addNewComponent=Yo;exports.addPatch=nu;exports.apply=cu;exports.applyHMRChanges=uP;exports.applyPrototypeExtensions=Yv;exports.beginListenDestroy=Bv;exports.beginListenInstantiate=zv;exports.binaryIdentifierCasts=Am;exports.build_scene_functions=K1;exports.builtinComponentKeyName=Fo;exports.calculateProgress01=Cy;exports.clearMessages=Kx;exports.colorSerializer=BP;exports.compareAssociation=Wv;exports.componentSerializer=md;exports.copyTexture=Kb;exports.createMotion=T0;exports.debugNet=qt;exports.debugOwner=El;exports.decompressGpuTexture=ww;exports.deepClone=Mc;exports.delay=us;exports.delayForFrames=kc;exports.deserializeObject=Ld;exports.destroy=yi;exports.destroyComponentInstance=Jv;exports.determineMimeTypeFromExtension=Z0;exports.disposeObjectResources=be;exports.disposeStream=Ln;exports.editorGuidKeyName=Gl;exports.enableSpatialConsole=ua;exports.euler=FP;exports.eventListSerializer=$P;exports.exportAsGLTF=ET;exports.findByGuid=Xm;exports.findObjectOfType=Ia;exports.findObjectsOfType=t0;exports.findResourceUsers=Fm;exports.fitCamera=A0;exports.fitObjectIntoVolume=Jb;exports.foreachComponent=ar;exports.foreachComponentEnumerator=du;exports.forward=mS;exports.generateQRCode=b0;exports.generateSeed=Fv;exports.getBoundingBox=$t;exports.getCameraController=Wb;exports.getComponent=yr;exports.getComponentInChildren=jc;exports.getComponentInParent=uc;exports.getComponents=Ic;exports.getComponentsInChildren=La;exports.getComponentsInParent=lu;exports.getFormattedDate=uw;exports.getIconElement=yt;exports.getIconTexture=Np;exports.getLoader=ln;exports.getOrAddComponent=Lc;exports.getParam=x;exports.getParentHierarchyPath=_S;exports.getPath=Ex;exports.getPeerOptions=hC;exports.getPeerjsInstance=yv;exports.getResourceUserCount=jC;exports.getTempColor=qb;exports.getTempQuaternion=Kt;exports.getTempVector=B;exports.getUrlParams=Oc;exports.getVisibleInCustomShadowRendering=Zb;exports.getWorldDirection=Xb;exports.getWorldEuler=Sm;exports.getWorldPosition=Q;exports.getWorldQuaternion=fe;exports.getWorldRotation=iu;exports.getWorldScale=Le;exports.hasCommercialLicense=ds;exports.hasIndieLicense=Uc;exports.hasPointerEventComponent=Nd;exports.hasProLicense=Bn;exports.hideDebugConsole=nv;exports.imageToCanvas=xw;exports.instantiate=no;exports.invokeLoadedImportPluginHooks=ow;exports.invokeXRSessionEnd=uv;exports.invokeXRSessionStart=dv;exports.isActiveInHierarchy=i0;exports.isActiveSelf=ja;exports.isAndroidDevice=Ix;exports.isAnimationAction=Yb;exports.isComponent=F0;exports.isDebugMode=Px;exports.isDesktop=Tx;exports.isDestroyed=rr;exports.isDevEnvironment=R;exports.isDisposed=DC;exports.isExporting=MT;exports.isGLTFModel=U0;exports.isHostedOnGlitch=Ab;exports.isHotReloadEnabled=Hp;exports.isHotReloading=hP;exports.isIPad=Dx;exports.isIconElement=v0;exports.isLocalNetwork=mi;exports.isMacOS=Bx;exports.isMobileDevice=Ax;exports.isMozillaXR=jx;exports.isQuest=zx;exports.isResourceTrackingEnabled=Mv;exports.isSafari=Fx;exports.isUsingInstancing=hu;exports.isiOS=Ux;exports.isiPad=Lx;exports.loadAsset=dT;exports.loadPMREM=Zw;exports.loadSync=Sy;exports.logHierarchy=Md;exports.lookAtInverse=aS;exports.lookAtObject=Ec;exports.lookAtScreenPoint=lS;exports.makeId=Mx;exports.makeIdFromRandomWords=Ib;exports.makeNameSafe=vi;exports.markAsInstancedRendered=n0;exports.microphonePermissionsGranted=Nx;exports.nameof=Cx;exports.nameofFactory=Db;exports.objectSerializer=I0;exports.offXRSessionEnd=iC;exports.offXRSessionStart=tC;exports.onAfterRender=iP;exports.onBeforeRender=tP;exports.onClear=J1;exports.onDestroy=eP;exports.onInitialized=Km;exports.onStart=pu;exports.onUpdate=S0;exports.onXRSessionEnd=Rm;exports.onXRSessionStart=su;exports.parseSync=fx;exports.placeOnSurface=ev;exports.postprocessFBXMaterials=Om;exports.prefix=TP;exports.pushState=Lb;exports.randomNumber=kx;exports.registerBinaryType=Dm;exports.registerComponent=fu;exports.registerComponentExtension=yg;exports.registerCustomEffectType=Hi;exports.registerExportExtensions=_g;exports.registerExtensions=Hd;exports.registerHotReloadType=M0;exports.registerLoader=km;exports.registerPrefabProvider=Vv;exports.registerPrototypeExtensions=Kv;exports.registerType=$m;exports.relativePathPrefix=Bb;exports.removeAttributeChangeCallback=ym;exports.removeComponent=qm;exports.removeCustomImportExtensionType=qO;exports.removePatch=JS;exports.resolveUrl=co;exports.sanitizeString=jb;exports.saveImage=cx;exports.screenshot=XR;exports.screenshot2=xy;exports.sendDestroyed=Nm;exports.serializable=f;exports.serializeObject=Hv;exports.serializeable=Fe;exports.setActive=Xl;exports.setAllowBalloonMessages=Nb;exports.setAllowOverlayMessages=qx;exports.setAutoFitEnabled=Pd;exports.setCameraController=xp;exports.setDestroyed=o0;exports.setDevEnvironment=OS;exports.setDisposable=Ev;exports.setDontDestroy=Zr;exports.setOrAddParamsToUrl=bp;exports.setParam=Ox;exports.setParamWithoutReload=rc;exports.setPeerOptions=dC;exports.setResourceTrackingEnabled=AC;exports.setState=pm;exports.setVisibleInCustomShadowRendering=Pm;exports.setWorldEuler=Cm;exports.setWorldPosition=rt;exports.setWorldPositionXYZ=sr;exports.setWorldQuaternion=an;exports.setWorldQuaternionXYZW=xm;exports.setWorldRotation=Qb;exports.setWorldRotationXYZ=Rc;exports.setWorldScale=xa;exports.showBalloonError=Tc;exports.showBalloonMessage=we;exports.showBalloonWarning=ue;exports.showDebugConsole=Mm;exports.slerp=rS;exports.syncDestroy=Ac;exports.syncField=Bg;exports.syncInstantiate=Vm;exports.textureToCanvas=bS;exports.toSourceId=Ub;exports.tryCastBinary=mv;exports.tryDetermineMimetypeFromBinary=ew;exports.tryDetermineMimetypeFromURL=J0;exports.tryFindObject=wa;exports.tryGetGuid=gv;exports.unregisterHotReloadType=k0;exports.unwatchWrite=mm;exports.useForAutoFit=Gb;exports.validate=vt;exports.watchWrite=tu;
|
|
1647
|
+
`),this.#n.innerHTML=this.#e.innerHTML,this.#n.style.cssText="display: flex; align-items: center; justify-content: center;",this.#e.innerHTML=this.#n.outerHTML,this.#t.innerHTML=this.#e.outerHTML,this.#t.prepend(this.#s),Ud(Vp,{element:this.#t}),this.#o?.disconnect(),this.#o??=new MutationObserver(()=>this.#l()),this.#o.observe(this.#e,{attributes:!0}),yp&&console.log("Needle Button updated")}#l(){this.#e&&(this.#e.style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))}#r=e=>{yp&&console.log("Needle Button clicked"),!e.defaultPrevented&&this.#e&&this.#e.click()}}typeof window<"u"&&!window.customElements.get(Tb)&&window.customElements.define(Tb,_x);const Ml=x("debugavatar");class Oy{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 bx{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 un;i=S.instantiate(wa(t,e.scene),o)}}else i=t;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Ml&&console.log("[Custom Avatar] valid config",t,Ml?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,Ml?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(Ml&&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 ln().parseSync(e,o,null,0))?.scene??null:null}const i=new q.GLTFLoader;return Jm(i,e),new Promise((n,o)=>{const r=this.avatarRegistryUrl+"/"+t;i.load(r,async a=>{await ln().createBuiltinComponents(e,r,a,null,void 0),n(a.scene)},a=>{Ml&&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 Oy(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 vx{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}class wx{}const AT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:he,ActionCollection:Pw,ActionModel:Yt,AlignmentConstraint:Fc,Animation:kt,AnimationCurve:oh,AnimationExtension:Mu,AnimationTrackHandler:xc,Animator:at,AnimatorController:Ui,Antialiasing:ah,Attractor:Ya,AudioExtension:Cr,AudioListener:os,AudioSource:bi,AudioTrackHandler:as,Avatar:ro,AvatarBlink_Simple:vr,AvatarEyeLook_Rotation:lg,AvatarLoader:bx,AvatarMarker:Pe,AvatarModel:Oy,Avatar_Brain_LookAt:gc,Avatar_MouthShapes:$c,Avatar_MustacheShake:rg,Avatar_POI:ir,AxesHelper:Ba,BaseUIComponent:Fi,BasicIKConstraint:hg,BehaviorExtension:zg,BehaviorModel:bt,BloomEffect:zu,BoxCollider:xu,BoxGizmo:kr,BoxHelperComponent:st,Button:Os,CallInfo:ss,Camera:ei,CameraTargetReachedEvent:mc,Canvas:Ta,CanvasGroup:ao,CapsuleCollider:fs,ChangeMaterialOnClick:Tg,ChangeTransformOnClick:Pr,CharacterController:wr,CharacterControllerInput:ys,ChromaticAberration:lh,ClickThrough:sf,ColorAdjustments:xo,ColorBySpeedModule:Qa,ColorOverLifetimeModule:Bu,ContactShadows:Wc,ControlTrackHandler:Yu,CursorFollow:Ur,CustomBranding:Mr,Deletable:pg,DeleteBox:Js,DepthOfField:mn,DeviceFlag:Su,DocumentExtension:vx,DragControls:Go,DropListener:bs,Duplicatable:xg,EffectWrapper:wc,EmissionModule:Ss,EmphasizeOnClick:Na,EnvironmentScene:tf,EventList:oe,EventListEvent:yu,EventSystem:Vt,EventTrigger:Pu,FieldWithDefault:rw,FixedJoint:ey,Fog:Ha,GltfExport:Mg,GltfExportBox:Pg,Gradient:Rr,Graphic:Jc,GraphicRaycaster:_u,GridHelper:qa,GridLayoutGroup:Hg,GroundProjectedEnv:zn,GroupActionModel:Ho,HideOnStart:Di,HingeJoint:th,HorizontalLayoutGroup:Gg,get HoverAnimation(){return exports.HoverAnimation},Image:il,InheritVelocityModule:sy,InputField:_y,InstanceHandle:nr,InstancingHandler:hr,Interactable:fg,Keyframe:ti,LODGroup:nh,LODModel:Xa,Light:ri,LimitVelocityOverLifetimeModule:et,LogStats:ug,LookAt:by,LookAtConstraint:br,MainModule:Tt,MarkerTrackHandler:Qu,MaskableGraphic:eh,MeshCollider:mo,MeshRenderer:Hc,MinMaxCurve:G,MinMaxGradient:Tr,NeedleMenu:Vn,NestedGltf:sh,Networking:iy,NoiseModule:pe,ObjectRaycaster:_i,OffsetConstraint:Er,OpenURL:nl,OrbitControls:de,Outline:Ga,Padding:Or,ParticleBurst:Yd,ParticleSubEmitter:oy,ParticleSystem:vc,ParticleSystemRenderer:Gi,PhysicsExtension:Ng,PixelationEffect:ch,PlayAnimationOnClick:_c,PlayAudioOnClick:oo,PlayableDirector:fr,PlayerColor:Aa,PointerEventData:Nc,PostProcessingHandler:hy,PreliminaryAction:Va,PreliminaryTrigger:Qc,RawImage:Ju,Rect:Rw,RectTransform:dn,ReflectionProbe:yc,RegisteredAnimationInfo:Ks,RemoteSkybox:Vu,Renderer:Wt,RendererLightmap:bg,Rigidbody:Ue,RotationBySpeedModule:Wi,RotationOverLifetimeModule:pn,SceneSwitcher:ze,ScreenCapture:So,ScreenSpaceAmbientOcclusion:Cs,ScreenSpaceAmbientOcclusionN8:gn,ScrollFollow:Ms,SeeThrough:Ps,SetActiveOnClick:Ag,ShadowCatcher:fh,ShapeModule:ny,SharpeningEffect:dh,SignalAsset:Xu,SignalReceiver:_h,SignalReceiverEvent:yh,SignalTrackHandler:Sc,Size:Ew,SizeBySpeedModule:ai,SizeOverLifetimeModule:Ar,SkinnedMeshRenderer:vg,SmoothFollow:Wu,SpatialGrabRaycaster:lr,SpatialHtml:vh,SpatialTrigger:Gu,SpatialTriggerReceiver:Un,SpectatorCamera:Hu,SphereCollider:Ua,SplineContainer:jr,SplineData:Fn,SplineWalker:qi,Sprite:vs,SpriteData:ba,SpriteRenderer:si,SpriteSheet:Ra,SubEmitterSystem:Kd,SyncedCamera:uy,SyncedRoom:yn,SyncedTransform:hn,TapGestureTrigger:Lg,TeleportTarget:Au,TestRunner:fy,TestSimulateUserData:py,Text:Rt,TextBuilder:$g,TextExtension:Lu,TextureSheetAnimationModule:At,TiltShiftEffect:Gn,ToneMappingEffect:lo,TrailModule:Te,TransformData:Ee,TransformGizmo:Br,TriggerBuilder:Mt,TriggerModel:eo,UIRaycastUtils:ig,UIRootComponent:Kc,USDZExporter:rn,USDZText:ca,USDZUIExtension:Xg,UsageMarker:Gc,VariantAction:Rg,VelocityOverLifetimeModule:Ie,VerticalLayoutGroup:Wg,VideoPlayer:Ze,get ViewBox(){return exports.ViewBox},Vignette:Ir,VisibilityAction:Yc,Voip:po,Volume:Za,VolumeParameter:F,VolumeProfile:Uu,WebARCameraBackground:xh,WebARSessionRoot:fi,WebXR:Du,WebXRImageTracking:Sh,WebXRImageTrackingModel:Es,WebXRPlaneTracking:Rs,WebXRTrackedImage:Da,XRControllerFollow:ks,XRControllerModel:ps,XRControllerMovement:wi,XRFlag:Li,XRRig:af,XRState:Nt,__Ignore:wx},Symbol.toStringTag,{value:"Module"})),Pc=x("debugmissingcamera");le.registerCallback(ae.MissingCamera,s=>{Pc&&console.warn("Creating missing camera");const e=s.context.scene,t=new c.PerspectiveCamera;t.name="Default Fallback Camera",e.add(t);const i=new ei;if(i.sourceId=s.files?.[0]?.src??"unknown",i.fieldOfView=35,s.context.domElement.getAttribute("transparent")!=null)i.clearFlags=tr.Uninitialized;else if(s.context.domElement.getAttribute("background-image")?.length||s.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=tr.Skybox;else{if(i.clearFlags=tr.SolidColor,!s.context.domElement.getAttribute("background-color")){let a="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(a="#1f1f1f"),e.background=new c.Color(a)}if(!e.environment){const a=new c.PMREMGenerator$1(s.context.renderer),l=new tf("neutral");e.environment=a.fromScene(l,.025).texture}}const o=Yo(t,i,!0);return t.position.x=0,t.position.y=1,t.position.z=2,s.context.domElement?.cameraControls!=!1&&xx(s.context,o),o});le.registerCallback(ae.ContextCreated,s=>{if(!s.context.mainCamera){Pc&&console.log("Will not auto-fit because a default camera exists");return}if(s.context.domElement?.cameraControls==!0){if(Wb(s.context.mainCamera)?.isCameraController==!0){Pc&&console.log("Will not auto-fit because a camera controller exists");return}xx(s.context)}});function xx(s,e){e=e??s.mainCameraComponent;const t=e?.gameObject;if(Pc&&console.log("Creating default camera controls",e?.name),t){const i=Lc(t,de);i.sourceId=e?.sourceId??"unknown";const n=s.domElement.getAttribute("auto-rotate");i.autoRotate=n!="0"&&n?.toLowerCase()!="false";const o=Number.parseFloat(n||".5");i.autoRotateSpeed=isNaN(o)?.5:o,Pc&&console.log("Auto-rotate",i.autoRotate,"speed:",i.autoRotateSpeed);const r=s.domElement.getAttribute("auto-fit");i.autoFit=r!=="0"&&r?.toLowerCase()!="false",i.autoTarget=!0}else console.warn("Missing camera object, can not add orbit controls")}le.registerCallback(ae.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)S.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof kt&&n.playAutomatically||n instanceof at||n instanceof fr&&n.playOnAwake===!0)return!0;if(n instanceof kt)return n.playAutomatically=!0,!0;if(n instanceof fr)return n.playOnAwake=!0,!0}},!0)!==!0&&so.autoplayAnimations(t.file)});exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new jr,r=1-L.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 Fn;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 DT extends re.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-iyfPIK6R.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:da&&da.tagName.toUpperCase()==="SCRIPT"&&da.src||new URL("needle-engine.bundle-BV9DUnnS.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=re.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 LT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:DT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=aO;exports.ActionBuilder=he;exports.ActionCollection=Pw;exports.ActionModel=Yt;exports.Addressables=l0;exports.AlignmentConstraint=Fc;exports.AmbientMode=ya;exports.Animation=kt;exports.AnimationCurve=oh;exports.AnimationExtension=Mu;exports.AnimationTrackHandler=xc;exports.AnimationUtils=so;exports.Animator=at;exports.AnimatorConditionMode=Gs;exports.AnimatorController=Ui;exports.AnimatorControllerParameterType=eg;exports.AnimatorStateInfo=Al;exports.Antialiasing=ah;exports.Application=cn;exports.AssetDatabase=Pv;exports.AssetReference=K;exports.Attractor=Ya;exports.AudioExtension=Cr;exports.AudioListener=os;exports.AudioSource=bi;exports.AudioTrackHandler=as;exports.Avatar=ro;exports.AvatarBlink_Simple=vr;exports.AvatarEyeLook_Rotation=lg;exports.AvatarLoader=bx;exports.AvatarMarker=Pe;exports.AvatarModel=Oy;exports.Avatar_Brain_LookAt=gc;exports.Avatar_MouthShapes=$c;exports.Avatar_MustacheShake=rg;exports.Avatar_POI=ir;exports.Axes=aa;exports.AxesHelper=Ba;exports.BUILD_TIME=ac;exports.BaseUIComponent=Fi;exports.BasicIKConstraint=hg;exports.BehaviorExtension=zg;exports.BehaviorModel=bt;exports.BloomEffect=zu;exports.BoxCollider=xu;exports.BoxGizmo=kr;exports.BoxHelperComponent=st;exports.Button=Os;exports.ButtonsFactory=nn;exports.CallDirection=W0;exports.CallInfo=ss;exports.Camera=ei;exports.CameraTargetReachedEvent=mc;exports.Canvas=Ta;exports.CanvasGroup=ao;exports.CapsuleCollider=fs;exports.ChangeMaterialOnClick=Tg;exports.ChangeTransformOnClick=Pr;exports.CharacterController=wr;exports.CharacterControllerInput=ys;exports.ChromaticAberration=lh;exports.CircularBuffer=gi;exports.ClearFlags=tr;exports.ClickThrough=sf;exports.ClipExtrapolation=Cn;exports.Collider=$i;exports.Collision=N0;exports.CollisionDetectionMode=gu;exports.ColorAdjustments=xo;exports.ColorBySpeedModule=Qa;exports.ColorOverLifetimeModule=Bu;exports.Component=pP;exports.Component$1=E;exports.ComponentLifecycleEvents=au;exports.Components=AT;exports.ConnectionEvents=bv;exports.ContactPoint=z0;exports.ContactShadows=Wc;exports.Context=U;exports.ContextArgs=Z1;exports.ContextEvent=ae;exports.ContextRegistry=le;exports.ControlTrackHandler=Yu;exports.CursorFollow=Ur;exports.CustomBranding=Mr;exports.CustomShader=_e;exports.DefaultReflectionMode=jd;exports.Deletable=pg;exports.DeleteBox=Js;exports.DepthOfField=mn;exports.DeviceFlag=Su;exports.DocumentExtension=vx;exports.DragControls=Go;exports.DragMode=mg;exports.DropListener=bs;exports.Duplicatable=xg;exports.EffectWrapper=wc;exports.EmissionModule=Ss;exports.EmphasizeOnClick=Na;exports.EngineLoadingView=Cc;exports.EnvironmentScene=tf;exports.EventList=oe;exports.EventListEvent=yu;exports.EventSystem=Vt;exports.EventTrigger=Pu;exports.FieldWithDefault=rw;exports.FileReference=Jo;exports.FileReferenceSerializer=h0;exports.FileSpawnModel=RO;exports.File_Event=K0;exports.FixedJoint=ey;exports.Fog=Ha;exports.FrameEvent=me;exports.GENERATOR=Sa;exports.GameObject=S;exports.Gizmos=j;exports.GltfExport=Mg;exports.GltfExportBox=Pg;exports.Gradient=Rr;exports.Graphic=Jc;exports.GraphicRaycaster=_u;exports.Graphics=io;exports.GridHelper=qa;exports.GridLayoutGroup=Hg;exports.GroundProjectedEnv=zn;exports.GroupActionModel=Ho;exports.HideFlags=bu;exports.HideOnStart=Di;exports.HingeJoint=th;exports.HorizontalLayoutGroup=Gg;exports.HostData=GC;exports.Image=il;exports.ImageReference=Zo;exports.ImageReferenceSerializer=c0;exports.InheritVelocityModule=sy;exports.Input=fv;exports.InputEventQueue=Zt;exports.InputEvents=Ce;exports.InputField=_y;exports.InstanceHandle=nr;exports.InstancingHandler=hr;exports.InstancingUtil=Bi;exports.InstantiateEvent=jv;exports.InstantiateIdProvider=_t;exports.InstantiateOptions=un;exports.Interactable=fg;exports.JoinedRoomResponse=pC;exports.KeyEventArgs=nC;exports.Keyframe=ti;exports.LODGroup=nh;exports.LODModel=Xa;exports.LeftRoomResponse=mC;exports.Light=ri;exports.LightData=m0;exports.LimitVelocityOverLifetimeModule=et;exports.LoadingElementOptions=yT;exports.LogStats=ug;exports.LogType=ui;exports.LookAt=by;exports.LookAtConstraint=br;exports.MainModule=Tt;exports.MarkerTrackHandler=Qu;exports.MarkerType=my;exports.MaskableGraphic=eh;exports.Mathf=L;exports.MeshCollider=mo;exports.MeshRenderer=Hc;exports.MinMaxCurve=G;exports.MinMaxGradient=Tr;exports.NEKeyboardEvent=kl;exports.NEPointerEvent=Jn;exports.NeedleButtonElement=_x;exports.NeedleEngineWebComponent=Py;exports.NeedleMenu=Vn;exports.NeedlePatchesKey=rd;exports.NeedleXRController=Tm;exports.NeedleXRSession=H;exports.NeedleXRSync=xv;exports.NeedleXRUtils=Cv;exports.NestedGltf=sh;exports.NetworkConnection=wv;exports.NetworkedStreamEvents=Dn;exports.NetworkedStreams=Vc;exports.Networking=iy;exports.NewInstanceModel=Uv;exports.NoiseModule=pe;exports.ObjectRaycaster=_i;exports.ObjectUtils=mr;exports.OffsetConstraint=Er;exports.OneEuroFilter=sd;exports.OneEuroFilterXYZ=vm;exports.OpenURL=nl;exports.OrbitControls=de;exports.Outline=Ga;exports.OwnershipEvent=vv;exports.OwnershipModel=Im;exports.PUBLIC_KEY=Ys;exports.Padding=Or;exports.ParticleBurst=Yd;exports.ParticleSubEmitter=oy;exports.ParticleSystem=vc;exports.ParticleSystemBaseBehaviour=wo;exports.ParticleSystemRenderer=Gi;exports.ParticleSystemShapeType=Qd;exports.PeerHandle=rs;exports.PeerNetworking=_v;exports.Physics=Ma;exports.PhysicsExtension=Ng;exports.PhysicsMaterialCombine=it;exports.PixelationEffect=ch;exports.PlayAnimationOnClick=_c;exports.PlayAudioOnClick=oo;exports.PlayableDirector=fr;exports.PlayerColor=Aa;exports.PlayerState=ji;exports.PlayerStateEvent=kw;exports.PlayerSync=Ug;exports.PlayerView=u0;exports.PlayerViewManager=f0;exports.PointerEventData=Nc;exports.PointerType=ou;exports.PostProcessingEffect=We;exports.PostProcessingEffectOrder=Ke;exports.PostProcessingHandler=hy;exports.PreliminaryAction=Va;exports.PreliminaryTrigger=Qc;exports.PrimitiveType=or;exports.Progress=ne;exports.PromiseAllWithErrors=_m;exports.PromiseErrorResult=vp;exports.RGBAColor=ee;exports.RapierPhysics=va;exports.RawImage=Ju;exports.RaycastOptions=fo;exports.Rect=Rw;exports.RectTransform=dn;exports.ReflectionProbe=yc;exports.RegisteredAnimationInfo=Ks;exports.RemoteSkybox=Vu;exports.RenderTexture=An;exports.RenderTextureSerializer=j0;exports.Renderer=Wt;exports.RendererData=p0;exports.RendererLightmap=bg;exports.Rigidbody=Ue;exports.RigidbodyConstraints=Be;exports.RoomEvents=Y;exports.RotationBySpeedModule=Wi;exports.RotationOverLifetimeModule=pn;exports.SceneLightSettings=Wd;exports.SceneSwitcher=ze;exports.ScreenCapture=So;exports.ScreenSpaceAmbientOcclusion=Cs;exports.ScreenSpaceAmbientOcclusionN8=gn;exports.ScrollFollow=Ms;exports.SeeThrough=Ps;exports.SendQueue=tn;exports.SerializationContext=Hm;exports.SetActiveOnClick=Ag;exports.ShadowCatcher=fh;exports.ShapeModule=ny;exports.ShapeOverlapResult=V0;exports.SharpeningEffect=dh;exports.SignalAsset=Xu;exports.SignalReceiver=_h;exports.SignalReceiverEvent=yh;exports.SignalTrackHandler=Sc;exports.Size=Ew;exports.SizeBySpeedModule=ai;exports.SizeOverLifetimeModule=Ar;exports.SkinnedMeshRenderer=vg;exports.SmoothFollow=Wu;exports.SpatialGrabRaycaster=lr;exports.SpatialHtml=vh;exports.SpatialTrigger=Gu;exports.SpatialTriggerReceiver=Un;exports.SpectatorCamera=Hu;exports.SphereCollider=Ua;exports.SphereIntersection=Um;exports.SplineContainer=jr;exports.SplineData=Fn;exports.SplineWalker=qi;exports.Sprite=vs;exports.SpriteData=ba;exports.SpriteRenderer=si;exports.SpriteSheet=Ra;exports.StateMachineBehaviour=vP;exports.StreamEndedEvent=sg;exports.StreamReceivedEvent=$0;exports.SubEmitterSystem=Kd;exports.SyncedCamera=uy;exports.SyncedRoom=yn;exports.SyncedTransform=hn;exports.TapGestureTrigger=Lg;exports.TeleportTarget=Au;exports.TestRunner=fy;exports.TestSceneUtils=OT;exports.TestSimulateUserData=py;exports.Text=Rt;exports.TextBuilder=$g;exports.TextExtension=Lu;exports.TextureSheetAnimationModule=At;exports.TiltShiftEffect=Gn;exports.Time=g0;exports.ToneMappingEffect=lo;exports.TrackHandler=tl;exports.TrackType=ci;exports.TrailModule=Te;exports.TransformData=Ee;exports.TransformGizmo=Br;exports.TriggerBuilder=Mt;exports.TriggerModel=eo;exports.TypeStore=P;exports.UIRaycastUtils=ig;exports.UIRootComponent=Kc;exports.USDDocument=kg;exports.USDObject=$e;exports.USDWriter=gw;exports.USDZExporter=yw;exports.USDZExporter$1=rn;exports.USDZText=ca;exports.USDZUIExtension=Xg;exports.UriSerializer=B0;exports.UsageMarker=Gc;exports.UserJoinedOrLeftRoomModel=gC;exports.VERSION=pi;exports.VariantAction=Rg;exports.VelocityOverLifetimeModule=Ie;exports.VerticalLayoutGroup=Wg;exports.VideoPlayer=Ze;exports.ViewDevice=hs;exports.Vignette=Ir;exports.VisibilityAction=Yc;exports.Voip=po;exports.Volume=Za;exports.VolumeParameter=F;exports.VolumeProfile=Uu;exports.WaitForFrames=S1;exports.WaitForPromise=d0;exports.WaitForSeconds=Qm;exports.Watch=ls;exports.WebARCameraBackground=xh;exports.WebARSessionRoot=fi;exports.WebXR=Du;exports.WebXRButtonFactory=to;exports.WebXRImageTracking=Sh;exports.WebXRImageTrackingModel=Es;exports.WebXRPlaneTracking=Rs;exports.WebXRTrackedImage=Da;exports.XRControllerFollow=ks;exports.XRControllerModel=ps;exports.XRControllerMovement=wi;exports.XRFlag=Li;exports.XRRig=af;exports.XRState=Nt;exports.XRStateFlag=Rn;exports.__Ignore=wx;exports.__internalNotifyObjectDestroyed=LC;exports.activeInHierarchyFieldName=cs;exports.addAttributeChangeCallback=gm;exports.addComponent=sn;exports.addCustomExtensionPlugin=HO;exports.addNewComponent=Yo;exports.addPatch=nu;exports.apply=cu;exports.applyHMRChanges=uP;exports.applyPrototypeExtensions=Yv;exports.beginListenDestroy=Bv;exports.beginListenInstantiate=zv;exports.binaryIdentifierCasts=Am;exports.build_scene_functions=K1;exports.builtinComponentKeyName=Fo;exports.calculateProgress01=Cy;exports.clearMessages=Kx;exports.colorSerializer=BP;exports.compareAssociation=Wv;exports.componentSerializer=md;exports.copyTexture=Kb;exports.createMotion=T0;exports.debugNet=qt;exports.debugOwner=El;exports.decompressGpuTexture=ww;exports.deepClone=Mc;exports.delay=us;exports.delayForFrames=kc;exports.deserializeObject=Ld;exports.destroy=yi;exports.destroyComponentInstance=Jv;exports.determineMimeTypeFromExtension=Z0;exports.disposeObjectResources=be;exports.disposeStream=Ln;exports.editorGuidKeyName=Gl;exports.enableSpatialConsole=ua;exports.euler=FP;exports.eventListSerializer=$P;exports.exportAsGLTF=ET;exports.findByGuid=Xm;exports.findObjectOfType=Ia;exports.findObjectsOfType=t0;exports.findResourceUsers=Fm;exports.fitCamera=A0;exports.fitObjectIntoVolume=Jb;exports.foreachComponent=ar;exports.foreachComponentEnumerator=du;exports.forward=mS;exports.generateQRCode=b0;exports.generateSeed=Fv;exports.getBoundingBox=$t;exports.getCameraController=Wb;exports.getComponent=yr;exports.getComponentInChildren=jc;exports.getComponentInParent=uc;exports.getComponents=Ic;exports.getComponentsInChildren=La;exports.getComponentsInParent=lu;exports.getFormattedDate=uw;exports.getIconElement=yt;exports.getIconTexture=Np;exports.getLoader=ln;exports.getOrAddComponent=Lc;exports.getParam=x;exports.getParentHierarchyPath=_S;exports.getPath=Ex;exports.getPeerOptions=hC;exports.getPeerjsInstance=yv;exports.getResourceUserCount=jC;exports.getTempColor=qb;exports.getTempQuaternion=Kt;exports.getTempVector=B;exports.getUrlParams=Oc;exports.getVisibleInCustomShadowRendering=Zb;exports.getWorldDirection=Xb;exports.getWorldEuler=Sm;exports.getWorldPosition=Q;exports.getWorldQuaternion=fe;exports.getWorldRotation=iu;exports.getWorldScale=Le;exports.hasCommercialLicense=ds;exports.hasIndieLicense=Uc;exports.hasPointerEventComponent=Nd;exports.hasProLicense=Bn;exports.hideDebugConsole=nv;exports.imageToCanvas=xw;exports.instantiate=no;exports.invokeLoadedImportPluginHooks=ow;exports.invokeXRSessionEnd=uv;exports.invokeXRSessionStart=dv;exports.isActiveInHierarchy=i0;exports.isActiveSelf=ja;exports.isAndroidDevice=Ix;exports.isAnimationAction=Yb;exports.isComponent=F0;exports.isDebugMode=Px;exports.isDesktop=Tx;exports.isDestroyed=rr;exports.isDevEnvironment=R;exports.isDisposed=DC;exports.isExporting=MT;exports.isGLTFModel=U0;exports.isHostedOnGlitch=Ab;exports.isHotReloadEnabled=Hp;exports.isHotReloading=hP;exports.isIPad=Dx;exports.isIconElement=v0;exports.isLocalNetwork=mi;exports.isMacOS=Bx;exports.isMobileDevice=Ax;exports.isMozillaXR=jx;exports.isQuest=zx;exports.isResourceTrackingEnabled=Mv;exports.isSafari=Fx;exports.isUsingInstancing=hu;exports.isiOS=Ux;exports.isiPad=Lx;exports.loadAsset=dT;exports.loadPMREM=Zw;exports.loadSync=Sy;exports.logHierarchy=Md;exports.lookAtInverse=aS;exports.lookAtObject=Ec;exports.lookAtScreenPoint=lS;exports.makeId=Mx;exports.makeIdFromRandomWords=Ib;exports.makeNameSafe=vi;exports.markAsInstancedRendered=n0;exports.microphonePermissionsGranted=Nx;exports.nameof=Cx;exports.nameofFactory=Db;exports.objectSerializer=I0;exports.offXRSessionEnd=iC;exports.offXRSessionStart=tC;exports.onAfterRender=iP;exports.onBeforeRender=tP;exports.onClear=J1;exports.onDestroy=eP;exports.onInitialized=Km;exports.onStart=pu;exports.onUpdate=S0;exports.onXRSessionEnd=Rm;exports.onXRSessionStart=su;exports.parseSync=fx;exports.placeOnSurface=ev;exports.postprocessFBXMaterials=Om;exports.prefix=TP;exports.pushState=Lb;exports.randomNumber=kx;exports.registerBinaryType=Dm;exports.registerComponent=fu;exports.registerComponentExtension=yg;exports.registerCustomEffectType=Hi;exports.registerExportExtensions=_g;exports.registerExtensions=Hd;exports.registerHotReloadType=M0;exports.registerLoader=km;exports.registerPrefabProvider=Vv;exports.registerPrototypeExtensions=Kv;exports.registerType=$m;exports.relativePathPrefix=Bb;exports.removeAttributeChangeCallback=ym;exports.removeComponent=qm;exports.removeCustomImportExtensionType=qO;exports.removePatch=JS;exports.resolveUrl=co;exports.sanitizeString=jb;exports.saveImage=cx;exports.screenshot=XR;exports.screenshot2=xy;exports.sendDestroyed=Nm;exports.serializable=f;exports.serializeObject=Hv;exports.serializeable=Fe;exports.setActive=Xl;exports.setAllowBalloonMessages=Nb;exports.setAllowOverlayMessages=qx;exports.setAutoFitEnabled=Pd;exports.setCameraController=xp;exports.setDestroyed=o0;exports.setDevEnvironment=OS;exports.setDisposable=Ev;exports.setDontDestroy=Zr;exports.setOrAddParamsToUrl=bp;exports.setParam=Ox;exports.setParamWithoutReload=rc;exports.setPeerOptions=dC;exports.setResourceTrackingEnabled=AC;exports.setState=pm;exports.setVisibleInCustomShadowRendering=Pm;exports.setWorldEuler=Cm;exports.setWorldPosition=rt;exports.setWorldPositionXYZ=sr;exports.setWorldQuaternion=an;exports.setWorldQuaternionXYZW=xm;exports.setWorldRotation=Qb;exports.setWorldRotationXYZ=Rc;exports.setWorldScale=xa;exports.showBalloonError=Tc;exports.showBalloonMessage=we;exports.showBalloonWarning=ue;exports.showDebugConsole=Mm;exports.slerp=rS;exports.syncDestroy=Ac;exports.syncField=Bg;exports.syncInstantiate=Vm;exports.textureToCanvas=bS;exports.toSourceId=Ub;exports.tryCastBinary=mv;exports.tryDetermineMimetypeFromBinary=ew;exports.tryDetermineMimetypeFromURL=J0;exports.tryFindObject=wa;exports.tryGetGuid=gv;exports.unregisterHotReloadType=k0;exports.unwatchWrite=mm;exports.useForAutoFit=Gb;exports.validate=vt;exports.watchWrite=tu;
|
|
@@ -1912,11 +1912,11 @@ Co('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"]
|
|
|
1912
1912
|
Co('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');
|
|
1913
1913
|
Co('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');
|
|
1914
1914
|
Co('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
|
|
1915
|
-
Co('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.12.
|
|
1915
|
+
Co('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.12.1";');
|
|
1916
1916
|
Co('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
|
|
1917
|
-
Co('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jan 30 2026
|
|
1917
|
+
Co('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jan 30 2026 15:20:40 GMT+0000 (Coordinated Universal Time)";');
|
|
1918
1918
|
Co('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
|
|
1919
|
-
const Xi = "4.12.
|
|
1919
|
+
const Xi = "4.12.1", Oc = "undefined", Md = "Fri Jan 30 2026 15:20:40 GMT+0000 (Coordinated Universal Time)";
|
|
1920
1920
|
N0 && console.log(`Engine version: ${Xi} (generator: ${Oc})
|
|
1921
1921
|
Project built at ${Md}`);
|
|
1922
1922
|
const hr = NEEDLE_PUBLIC_KEY, mo = "needle_isActiveInHierarchy", oa = "builtin_components", id = "needle_editor_guid";
|
package/dist/needle-engine.d.ts
CHANGED
|
@@ -18270,21 +18270,6 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
18270
18270
|
export { }
|
|
18271
18271
|
|
|
18272
18272
|
|
|
18273
|
-
declare module 'three/examples/jsm/controls/OrbitControls.js' {
|
|
18274
|
-
interface OrbitControls {
|
|
18275
|
-
_sphericalDelta: import("three").Spherical;
|
|
18276
|
-
_rotateLeft: (angleInRadians: number) => void;
|
|
18277
|
-
_rotateUp: (angleInRadians: number) => void;
|
|
18278
|
-
_pan: (dx: number, dy: number) => void;
|
|
18279
|
-
_dollyIn: (dollyScale: number) => void;
|
|
18280
|
-
_dollyOut: (dollyScale: number) => void;
|
|
18281
|
-
}
|
|
18282
|
-
interface OrbitControlsEventMap {
|
|
18283
|
-
endMovement: Event;
|
|
18284
|
-
}
|
|
18285
|
-
}
|
|
18286
|
-
|
|
18287
|
-
|
|
18288
18273
|
declare module 'three' {
|
|
18289
18274
|
interface SkinnedMesh {
|
|
18290
18275
|
staticGenerator?: StaticGeometryGenerator;
|
|
@@ -18307,6 +18292,21 @@ declare module 'three' {
|
|
|
18307
18292
|
}
|
|
18308
18293
|
|
|
18309
18294
|
|
|
18295
|
+
declare module 'three/examples/jsm/controls/OrbitControls.js' {
|
|
18296
|
+
interface OrbitControls {
|
|
18297
|
+
_sphericalDelta: import("three").Spherical;
|
|
18298
|
+
_rotateLeft: (angleInRadians: number) => void;
|
|
18299
|
+
_rotateUp: (angleInRadians: number) => void;
|
|
18300
|
+
_pan: (dx: number, dy: number) => void;
|
|
18301
|
+
_dollyIn: (dollyScale: number) => void;
|
|
18302
|
+
_dollyOut: (dollyScale: number) => void;
|
|
18303
|
+
}
|
|
18304
|
+
interface OrbitControlsEventMap {
|
|
18305
|
+
endMovement: Event;
|
|
18306
|
+
}
|
|
18307
|
+
}
|
|
18308
|
+
|
|
18309
|
+
|
|
18310
18310
|
declare module 'three' {
|
|
18311
18311
|
interface Object3D {
|
|
18312
18312
|
get guid(): string | undefined;
|
package/dist/needle-engine.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GameObject as r, onClear as i, onDestroy as a, onInitialized as s, onAfterRender as l, onBeforeRender as d, onUpdate as c, onStart as m, TypeStore as p, loadAsset as g, NeedleXRSession as u, Context as S, VERSION as C, Component as y, Components as E } from "./needle-engine.bundle-
|
|
2
|
-
import { $physicsKey as T, ActionBuilder as A, ActionCollection as b, ActionModel as M, Addressables as I, AlignmentConstraint as D, AmbientMode as O, Animation as x, AnimationCurve as k, AnimationExtension as L, AnimationTrackHandler as N, AnimationUtils as B, Animator as F, AnimatorConditionMode as U, AnimatorController as w, AnimatorControllerParameterType as G, AnimatorStateInfo as W, Antialiasing as H, Application as X, AssetDatabase as z, AssetReference as V, Attractor as _, AudioExtension as j, AudioListener as Z, AudioSource as K, AudioTrackHandler as Q, Avatar as Y, AvatarBlink_Simple as $, AvatarEyeLook_Rotation as J, AvatarLoader as q, AvatarMarker as ee, AvatarModel as te, Avatar_Brain_LookAt as oe, Avatar_MouthShapes as re, Avatar_MustacheShake as ne, Avatar_POI as ie, Axes as ae, AxesHelper as se, BUILD_TIME as le, BaseUIComponent as de, BasicIKConstraint as ce, BehaviorExtension as me, BehaviorModel as pe, Component$1 as ge, BlobStorage as ue, BloomEffect as Se, BoxCollider as Ce, BoxGizmo as ye, BoxHelperComponent as Ee, Button as Re, ButtonsFactory as he, CallDirection as fe, CallInfo as ve, Camera as Pe, CameraTargetReachedEvent as Te, Canvas as Ae, CanvasGroup as be, CapsuleCollider as Me, ChangeMaterialOnClick as Ie, ChangeTransformOnClick as De, CharacterController as Oe, CharacterControllerInput as xe, ChromaticAberration as ke, CircularBuffer as Le, ClearFlags as Ne, ClickThrough as Be, ClipExtrapolation as Fe, Collider as Ue, Collision as we, CollisionDetectionMode as Ge, ColorAdjustments as We, ColorBySpeedModule as He, ColorOverLifetimeModule as Xe, Component$1 as ze, ComponentLifecycleEvents as Ve, ConnectionEvents as _e, ContactPoint as je, ContactShadows as Ze, ContextArgs as Ke, ContextEvent as Qe, ContextRegistry as Ye, ControlTrackHandler as $e, CursorFollow as Je, CustomBranding as qe, CustomShader as et, DefaultReflectionMode as tt, Deletable as ot, DeleteBox as rt, DepthOfField as nt, DeviceFlag as it, DeviceUtilities as at, DocumentExtension as st, DragControls as lt, DragMode as dt, DropListener as ct, Duplicatable as mt, EffectWrapper as pt, EmissionModule as gt, EmphasizeOnClick as ut, EngineLoadingView as St, EnvironmentScene as Ct, EventList as yt, EventListEvent as Et, EventSystem as Rt, EventTrigger as ht, FieldWithDefault as ft, FileReference as vt, FileReferenceSerializer as Pt, FileSpawnModel as Tt, File_Event as At, FixedJoint as bt, Fog as Mt, FrameEvent as It, GENERATOR as Dt, Gizmos as Ot, GltfExport as xt, GltfExportBox as kt, Gradient as Lt, Graphic as Nt, GraphicRaycaster as Bt, Graphics as Ft, GridHelper as Ut, GridLayoutGroup as wt, GroundProjectedEnv as Gt, GroupActionModel as Wt, HideFlags as Ht, HideOnStart as Xt, HingeJoint as zt, HorizontalLayoutGroup as Vt, HostData as _t, HoverAnimation as jt, Image as Zt, ImageReference as Kt, ImageReferenceSerializer as Qt, InheritVelocityModule as Yt, Input as $t, InputEventQueue as Jt, InputEvents as qt, InputField as eo, InstanceHandle as to, InstancingHandler as oo, InstancingUtil as ro, InstantiateEvent as no, InstantiateIdProvider as io, InstantiateOptions as ao, Interactable as so, InternalScreenshotUtils as lo, JoinedRoomResponse as co, KeyEventArgs as mo, Keyframe as po, LODGroup as go, LODModel as uo, LeftRoomResponse as So, Light as Co, LightData as yo, LimitVelocityOverLifetimeModule as Eo, LoadingElementOptions as Ro, LogStats as ho, LogType as fo, LookAt as vo, LookAtConstraint as Po, MainModule as To, MarkerTrackHandler as Ao, MarkerType as bo, MaskableGraphic as Mo, Mathf as Io, MeshCollider as Do, MeshRenderer as Oo, MinMaxCurve as xo, MinMaxGradient as ko, NEEDLE_ENGINE_FEATURE_FLAGS as Lo, MODULES as No, NEKeyboardEvent as Bo, NEPointerEvent as Fo, NeedleButtonElement as Uo, ContextRegistry as wo, NeedleEngineModelLoader as Go, NeedleEngineWebComponent as Wo, NeedleMenu as Ho, NeedlePatchesKey as Xo, USDZExporter as zo, NeedleXRController as Vo, NeedleXRSync as _o, NeedleXRUtils as jo, NestedGltf as Zo, NetworkConnection as Ko, NetworkedStreamEvents as Qo, NetworkedStreams as Yo, Networking as $o, NewInstanceModel as Jo, NoiseModule as qo, ObjectRaycaster as er, ObjectUtils as tr, OffsetConstraint as or, OneEuroFilter as rr, OneEuroFilterXYZ as nr, OpenURL as ir, OrbitControls as ar, Outline as sr, OwnershipEvent as lr, OwnershipModel as dr, PUBLIC_KEY as cr, Padding as mr, ParticleBurst as pr, ParticleSubEmitter as gr, ParticleSystem as ur, ParticleSystemBaseBehaviour as Sr, ParticleSystemRenderer as Cr, ParticleSystemShapeType as yr, PeerHandle as Er, PeerNetworking as Rr, Physics as hr, PhysicsExtension as fr, PhysicsMaterialCombine as vr, PixelationEffect as Pr, PlayAnimationOnClick as Tr, PlayAudioOnClick as Ar, PlayableDirector as br, PlayerColor as Mr, PlayerState as Ir, PlayerStateEvent as Dr, PlayerSync as Or, PlayerView as xr, PlayerViewManager as kr, PointerEventData as Lr, PointerType as Nr, PostProcessingEffect as Br, PostProcessingEffectOrder as Fr, PostProcessingHandler as Ur, Volume as wr, PreliminaryAction as Gr, PreliminaryTrigger as Wr, PreviewHelper as Hr, PrimitiveType as Xr, Progress as zr, PromiseAllWithErrors as Vr, PromiseErrorResult as _r, RGBAColor as jr, RapierPhysics as Zr, RawImage as Kr, RaycastOptions as Qr, Rect as Yr, RectTransform as $r, ReflectionProbe as Jr, RegisteredAnimationInfo as qr, RemoteSkybox as en, RenderTexture as tn, RenderTextureSerializer as on, Renderer as rn, RendererData as nn, RendererLightmap as an, Rigidbody as sn, RigidbodyConstraints as ln, RoomEvents as dn, RotationBySpeedModule as cn, RotationOverLifetimeModule as mn, SceneLightSettings as pn, SceneSwitcher as gn, ScreenCapture as un, ScreenSpaceAmbientOcclusion as Sn, ScreenSpaceAmbientOcclusionN8 as Cn, ScrollFollow as yn, SeeThrough as En, SendQueue as Rn, SerializationContext as hn, SetActiveOnClick as fn, ShadowCatcher as vn, ShapeModule as Pn, ShapeOverlapResult as Tn, SharpeningEffect as An, SignalAsset as bn, SignalReceiver as Mn, SignalReceiverEvent as In, SignalTrackHandler as Dn, Size as On, SizeBySpeedModule as xn, SizeOverLifetimeModule as kn, SkinnedMeshRenderer as Ln, SmoothFollow as Nn, SpatialGrabRaycaster as Bn, SpatialHtml as Fn, SpatialTrigger as Un, SpatialTriggerReceiver as wn, SpectatorCamera as Gn, SphereCollider as Wn, SphereIntersection as Hn, SplineContainer as Xn, SplineData as zn, SplineUtils as Vn, SplineWalker as _n, Sprite as jn, SpriteData as Zn, SpriteRenderer as Kn, SpriteSheet as Qn, StateMachineBehaviour as Yn, StreamEndedEvent as $n, StreamReceivedEvent as Jn, SubEmitterSystem as qn, SyncedCamera as ei, SyncedRoom as ti, SyncedTransform as oi, TapGestureTrigger as ri, TeleportTarget as ni, TestRunner as ii, TestSceneUtils as ai, TestSimulateUserData as si, Text as li, TextBuilder as di, TextExtension as ci, TextureSheetAnimationModule as mi, TiltShiftEffect as pi, Time as gi, ToneMappingEffect as ui, TrackHandler as Si, TrackType as Ci, TrailModule as yi, TransformData as Ei, TransformGizmo as Ri, TriggerBuilder as hi, TriggerModel as fi, UIRaycastUtils as vi, UIRootComponent as Pi, USDDocument as Ti, USDObject as Ai, USDWriter as bi, USDZExporter$1 as Mi, USDZText as Ii, USDZUIExtension as Di, UriSerializer as Oi, UsageMarker as xi, UserJoinedOrLeftRoomModel as ki, VariantAction as Li, VelocityOverLifetimeModule as Ni, VerticalLayoutGroup as Bi, VideoPlayer as Fi, ViewBox as Ui, ViewDevice as wi, Vignette as Gi, VisibilityAction as Wi, Voip as Hi, Volume as Xi, VolumeParameter as zi, VolumeProfile as Vi, WaitForFrames as _i, WaitForPromise as ji, WaitForSeconds as Zi, Watch as Ki, WebARCameraBackground as Qi, WebARSessionRoot as Yi, WebXR as $i, WebXRButtonFactory as Ji, WebXRImageTracking as qi, WebXRImageTrackingModel as ea, WebXRPlaneTracking as ta, WebXRTrackedImage as oa, XRControllerFollow as ra, XRControllerModel as na, XRControllerMovement as ia, XRFlag as aa, XRRig as sa, XRState as la, XRStateFlag as da, __Ignore as ca, __internalNotifyObjectDestroyed as ma, activeInHierarchyFieldName as pa, addAttributeChangeCallback as ga, addComponent as ua, addCustomExtensionPlugin as Sa, addNewComponent as Ca, addPatch as ya, apply as Ea, applyHMRChanges as Ra, applyPrototypeExtensions as ha, beginListenDestroy as fa, beginListenInstantiate as va, binaryIdentifierCasts as Pa, build_scene_functions as Ta, builtinComponentKeyName as Aa, calculateProgress01 as ba, clearMessages as Ma, clearMessages as Ia, colorSerializer as Da, compareAssociation as Oa, componentSerializer as xa, copyTexture as ka, createMotion as La, debugNet as Na, debugOwner as Ba, decompressGpuTexture as Fa, deepClone as Ua, delay as wa, delayForFrames as Ga, deserializeObject as Wa, destroy as Ha, destroyComponentInstance as Xa, determineMimeTypeFromExtension as za, disposeObjectResources as Va, disposeStream as _a, editorGuidKeyName as ja, enableSpatialConsole as Za, euler as Ka, eventListSerializer as Qa, exportAsGLTF as Ya, findByGuid as $a, findObjectOfType as Ja, findObjectsOfType as qa, findResourceUsers as es, fitCamera as ts, fitObjectIntoVolume as os, foreachComponent as rs, foreachComponentEnumerator as ns, forward as is, generateQRCode as as, generateSeed as ss, getBoundingBox as ls, getCameraController as ds, getComponent as cs, getComponentInChildren as ms, getComponentInParent as ps, getComponents as gs, getComponentsInChildren as us, getComponentsInParent as Ss, getFormattedDate as Cs, getIconElement as ys, getIconTexture as Es, getLoader as Rs, getOrAddComponent as hs, getParam as fs, getParentHierarchyPath as vs, getPath as Ps, getPeerOptions as Ts, getPeerjsInstance as As, getResourceUserCount as bs, getTempColor as Ms, getTempQuaternion as Is, getTempVector as Ds, getUrlParams as Os, getVisibleInCustomShadowRendering as xs, getWorldDirection as ks, getWorldEuler as Ls, getWorldPosition as Ns, getWorldQuaternion as Bs, getWorldRotation as Fs, getWorldScale as Us, hasCommercialLicense as ws, hasIndieLicense as Gs, hasPointerEventComponent as Ws, hasProLicense as Hs, hideDebugConsole as Xs, imageToCanvas as zs, instantiate as Vs, invokeLoadedImportPluginHooks as _s, invokeXRSessionEnd as js, invokeXRSessionStart as Zs, isActiveInHierarchy as Ks, isActiveSelf as Qs, isAndroidDevice as Ys, isAnimationAction as $s, isComponent as Js, isDebugMode as qs, isDesktop as el, isDestroyed as tl, isDevEnvironment as ol, isDisposed as rl, isExporting as nl, isGLTFModel as il, isHostedOnGlitch as al, isHotReloadEnabled as sl, isHotReloading as ll, isIPad as dl, isIconElement as cl, isLocalNetwork as ml, isMacOS as pl, isMobileDevice as gl, isMozillaXR as ul, isQuest as Sl, isResourceTrackingEnabled as Cl, isSafari as yl, isUsingInstancing as El, isiOS as Rl, isiPad as hl, loadPMREM as fl, loadSync as vl, logHierarchy as Pl, lookAtInverse as Tl, lookAtObject as Al, lookAtScreenPoint as bl, makeId as Ml, makeIdFromRandomWords as Il, makeNameSafe as Dl, markAsInstancedRendered as Ol, microphonePermissionsGranted as xl, nameof as kl, nameofFactory as Ll, objectSerializer as Nl, offXRSessionEnd as Bl, offXRSessionStart as Fl, onXRSessionEnd as Ul, onXRSessionStart as wl, parseSync as Gl, placeOnSurface as Wl, postprocessFBXMaterials as Hl, prefix as Xl, pushState as zl, randomNumber as Vl, registerBinaryType as _l, registerComponent as jl, registerComponentExtension as Zl, registerCustomEffectType as Kl, registerExportExtensions as Ql, registerExtensions as Yl, registerHotReloadType as $l, registerLoader as Jl, registerPrefabProvider as ql, registerPrototypeExtensions as ed, registerType as td, relativePathPrefix as od, removeAttributeChangeCallback as rd, removeComponent as nd, removeCustomImportExtensionType as id, removePatch as ad, resolveUrl as sd, sanitizeString as ld, saveImage as dd, screenshot as cd, screenshot2 as md, sendDestroyed as pd, serializable as gd, serializeObject as ud, serializeable as Sd, setActive as Cd, setAllowBalloonMessages as yd, setAllowOverlayMessages as Ed, setAutoFitEnabled as Rd, setCameraController as hd, setDestroyed as fd, setDevEnvironment as vd, setDisposable as Pd, setDontDestroy as Td, setOrAddParamsToUrl as Ad, setParam as bd, setParamWithoutReload as Md, setPeerOptions as Id, setResourceTrackingEnabled as Dd, setState as Od, setVisibleInCustomShadowRendering as xd, setWorldEuler as kd, setWorldPosition as Ld, setWorldPositionXYZ as Nd, setWorldQuaternion as Bd, setWorldQuaternionXYZW as Fd, setWorldRotation as Ud, setWorldRotationXYZ as wd, setWorldScale as Gd, showBalloonError as Wd, showBalloonMessage as Hd, showBalloonWarning as Xd, showDebugConsole as zd, slerp as Vd, syncDestroy as _d, syncField as jd, syncInstantiate as Zd, textureToCanvas as Kd, toSourceId as Qd, tryCastBinary as Yd, tryDetermineMimetypeFromBinary as $d, tryDetermineMimetypeFromURL as Jd, tryFindObject as qd, tryGetGuid as ec, unregisterHotReloadType as tc, unwatchWrite as oc, useForAutoFit as rc, validate as nc, watchWrite as ic } from "./needle-engine.bundle-CpPhY8AW.js";
|
|
1
|
+
import { GameObject as r, onClear as i, onDestroy as a, onInitialized as s, onAfterRender as l, onBeforeRender as d, onUpdate as c, onStart as m, TypeStore as p, loadAsset as g, NeedleXRSession as u, Context as S, VERSION as C, Component as y, Components as E } from "./needle-engine.bundle-C4PyE3dQ.js";
|
|
2
|
+
import { $physicsKey as T, ActionBuilder as A, ActionCollection as b, ActionModel as M, Addressables as I, AlignmentConstraint as D, AmbientMode as O, Animation as x, AnimationCurve as k, AnimationExtension as L, AnimationTrackHandler as N, AnimationUtils as B, Animator as F, AnimatorConditionMode as U, AnimatorController as w, AnimatorControllerParameterType as G, AnimatorStateInfo as W, Antialiasing as H, Application as X, AssetDatabase as z, AssetReference as V, Attractor as _, AudioExtension as j, AudioListener as Z, AudioSource as K, AudioTrackHandler as Q, Avatar as Y, AvatarBlink_Simple as $, AvatarEyeLook_Rotation as J, AvatarLoader as q, AvatarMarker as ee, AvatarModel as te, Avatar_Brain_LookAt as oe, Avatar_MouthShapes as re, Avatar_MustacheShake as ne, Avatar_POI as ie, Axes as ae, AxesHelper as se, BUILD_TIME as le, BaseUIComponent as de, BasicIKConstraint as ce, BehaviorExtension as me, BehaviorModel as pe, Component$1 as ge, BlobStorage as ue, BloomEffect as Se, BoxCollider as Ce, BoxGizmo as ye, BoxHelperComponent as Ee, Button as Re, ButtonsFactory as he, CallDirection as fe, CallInfo as ve, Camera as Pe, CameraTargetReachedEvent as Te, Canvas as Ae, CanvasGroup as be, CapsuleCollider as Me, ChangeMaterialOnClick as Ie, ChangeTransformOnClick as De, CharacterController as Oe, CharacterControllerInput as xe, ChromaticAberration as ke, CircularBuffer as Le, ClearFlags as Ne, ClickThrough as Be, ClipExtrapolation as Fe, Collider as Ue, Collision as we, CollisionDetectionMode as Ge, ColorAdjustments as We, ColorBySpeedModule as He, ColorOverLifetimeModule as Xe, Component$1 as ze, ComponentLifecycleEvents as Ve, ConnectionEvents as _e, ContactPoint as je, ContactShadows as Ze, ContextArgs as Ke, ContextEvent as Qe, ContextRegistry as Ye, ControlTrackHandler as $e, CursorFollow as Je, CustomBranding as qe, CustomShader as et, DefaultReflectionMode as tt, Deletable as ot, DeleteBox as rt, DepthOfField as nt, DeviceFlag as it, DeviceUtilities as at, DocumentExtension as st, DragControls as lt, DragMode as dt, DropListener as ct, Duplicatable as mt, EffectWrapper as pt, EmissionModule as gt, EmphasizeOnClick as ut, EngineLoadingView as St, EnvironmentScene as Ct, EventList as yt, EventListEvent as Et, EventSystem as Rt, EventTrigger as ht, FieldWithDefault as ft, FileReference as vt, FileReferenceSerializer as Pt, FileSpawnModel as Tt, File_Event as At, FixedJoint as bt, Fog as Mt, FrameEvent as It, GENERATOR as Dt, Gizmos as Ot, GltfExport as xt, GltfExportBox as kt, Gradient as Lt, Graphic as Nt, GraphicRaycaster as Bt, Graphics as Ft, GridHelper as Ut, GridLayoutGroup as wt, GroundProjectedEnv as Gt, GroupActionModel as Wt, HideFlags as Ht, HideOnStart as Xt, HingeJoint as zt, HorizontalLayoutGroup as Vt, HostData as _t, HoverAnimation as jt, Image as Zt, ImageReference as Kt, ImageReferenceSerializer as Qt, InheritVelocityModule as Yt, Input as $t, InputEventQueue as Jt, InputEvents as qt, InputField as eo, InstanceHandle as to, InstancingHandler as oo, InstancingUtil as ro, InstantiateEvent as no, InstantiateIdProvider as io, InstantiateOptions as ao, Interactable as so, InternalScreenshotUtils as lo, JoinedRoomResponse as co, KeyEventArgs as mo, Keyframe as po, LODGroup as go, LODModel as uo, LeftRoomResponse as So, Light as Co, LightData as yo, LimitVelocityOverLifetimeModule as Eo, LoadingElementOptions as Ro, LogStats as ho, LogType as fo, LookAt as vo, LookAtConstraint as Po, MainModule as To, MarkerTrackHandler as Ao, MarkerType as bo, MaskableGraphic as Mo, Mathf as Io, MeshCollider as Do, MeshRenderer as Oo, MinMaxCurve as xo, MinMaxGradient as ko, NEEDLE_ENGINE_FEATURE_FLAGS as Lo, MODULES as No, NEKeyboardEvent as Bo, NEPointerEvent as Fo, NeedleButtonElement as Uo, ContextRegistry as wo, NeedleEngineModelLoader as Go, NeedleEngineWebComponent as Wo, NeedleMenu as Ho, NeedlePatchesKey as Xo, USDZExporter as zo, NeedleXRController as Vo, NeedleXRSync as _o, NeedleXRUtils as jo, NestedGltf as Zo, NetworkConnection as Ko, NetworkedStreamEvents as Qo, NetworkedStreams as Yo, Networking as $o, NewInstanceModel as Jo, NoiseModule as qo, ObjectRaycaster as er, ObjectUtils as tr, OffsetConstraint as or, OneEuroFilter as rr, OneEuroFilterXYZ as nr, OpenURL as ir, OrbitControls as ar, Outline as sr, OwnershipEvent as lr, OwnershipModel as dr, PUBLIC_KEY as cr, Padding as mr, ParticleBurst as pr, ParticleSubEmitter as gr, ParticleSystem as ur, ParticleSystemBaseBehaviour as Sr, ParticleSystemRenderer as Cr, ParticleSystemShapeType as yr, PeerHandle as Er, PeerNetworking as Rr, Physics as hr, PhysicsExtension as fr, PhysicsMaterialCombine as vr, PixelationEffect as Pr, PlayAnimationOnClick as Tr, PlayAudioOnClick as Ar, PlayableDirector as br, PlayerColor as Mr, PlayerState as Ir, PlayerStateEvent as Dr, PlayerSync as Or, PlayerView as xr, PlayerViewManager as kr, PointerEventData as Lr, PointerType as Nr, PostProcessingEffect as Br, PostProcessingEffectOrder as Fr, PostProcessingHandler as Ur, Volume as wr, PreliminaryAction as Gr, PreliminaryTrigger as Wr, PreviewHelper as Hr, PrimitiveType as Xr, Progress as zr, PromiseAllWithErrors as Vr, PromiseErrorResult as _r, RGBAColor as jr, RapierPhysics as Zr, RawImage as Kr, RaycastOptions as Qr, Rect as Yr, RectTransform as $r, ReflectionProbe as Jr, RegisteredAnimationInfo as qr, RemoteSkybox as en, RenderTexture as tn, RenderTextureSerializer as on, Renderer as rn, RendererData as nn, RendererLightmap as an, Rigidbody as sn, RigidbodyConstraints as ln, RoomEvents as dn, RotationBySpeedModule as cn, RotationOverLifetimeModule as mn, SceneLightSettings as pn, SceneSwitcher as gn, ScreenCapture as un, ScreenSpaceAmbientOcclusion as Sn, ScreenSpaceAmbientOcclusionN8 as Cn, ScrollFollow as yn, SeeThrough as En, SendQueue as Rn, SerializationContext as hn, SetActiveOnClick as fn, ShadowCatcher as vn, ShapeModule as Pn, ShapeOverlapResult as Tn, SharpeningEffect as An, SignalAsset as bn, SignalReceiver as Mn, SignalReceiverEvent as In, SignalTrackHandler as Dn, Size as On, SizeBySpeedModule as xn, SizeOverLifetimeModule as kn, SkinnedMeshRenderer as Ln, SmoothFollow as Nn, SpatialGrabRaycaster as Bn, SpatialHtml as Fn, SpatialTrigger as Un, SpatialTriggerReceiver as wn, SpectatorCamera as Gn, SphereCollider as Wn, SphereIntersection as Hn, SplineContainer as Xn, SplineData as zn, SplineUtils as Vn, SplineWalker as _n, Sprite as jn, SpriteData as Zn, SpriteRenderer as Kn, SpriteSheet as Qn, StateMachineBehaviour as Yn, StreamEndedEvent as $n, StreamReceivedEvent as Jn, SubEmitterSystem as qn, SyncedCamera as ei, SyncedRoom as ti, SyncedTransform as oi, TapGestureTrigger as ri, TeleportTarget as ni, TestRunner as ii, TestSceneUtils as ai, TestSimulateUserData as si, Text as li, TextBuilder as di, TextExtension as ci, TextureSheetAnimationModule as mi, TiltShiftEffect as pi, Time as gi, ToneMappingEffect as ui, TrackHandler as Si, TrackType as Ci, TrailModule as yi, TransformData as Ei, TransformGizmo as Ri, TriggerBuilder as hi, TriggerModel as fi, UIRaycastUtils as vi, UIRootComponent as Pi, USDDocument as Ti, USDObject as Ai, USDWriter as bi, USDZExporter$1 as Mi, USDZText as Ii, USDZUIExtension as Di, UriSerializer as Oi, UsageMarker as xi, UserJoinedOrLeftRoomModel as ki, VariantAction as Li, VelocityOverLifetimeModule as Ni, VerticalLayoutGroup as Bi, VideoPlayer as Fi, ViewBox as Ui, ViewDevice as wi, Vignette as Gi, VisibilityAction as Wi, Voip as Hi, Volume as Xi, VolumeParameter as zi, VolumeProfile as Vi, WaitForFrames as _i, WaitForPromise as ji, WaitForSeconds as Zi, Watch as Ki, WebARCameraBackground as Qi, WebARSessionRoot as Yi, WebXR as $i, WebXRButtonFactory as Ji, WebXRImageTracking as qi, WebXRImageTrackingModel as ea, WebXRPlaneTracking as ta, WebXRTrackedImage as oa, XRControllerFollow as ra, XRControllerModel as na, XRControllerMovement as ia, XRFlag as aa, XRRig as sa, XRState as la, XRStateFlag as da, __Ignore as ca, __internalNotifyObjectDestroyed as ma, activeInHierarchyFieldName as pa, addAttributeChangeCallback as ga, addComponent as ua, addCustomExtensionPlugin as Sa, addNewComponent as Ca, addPatch as ya, apply as Ea, applyHMRChanges as Ra, applyPrototypeExtensions as ha, beginListenDestroy as fa, beginListenInstantiate as va, binaryIdentifierCasts as Pa, build_scene_functions as Ta, builtinComponentKeyName as Aa, calculateProgress01 as ba, clearMessages as Ma, clearMessages as Ia, colorSerializer as Da, compareAssociation as Oa, componentSerializer as xa, copyTexture as ka, createMotion as La, debugNet as Na, debugOwner as Ba, decompressGpuTexture as Fa, deepClone as Ua, delay as wa, delayForFrames as Ga, deserializeObject as Wa, destroy as Ha, destroyComponentInstance as Xa, determineMimeTypeFromExtension as za, disposeObjectResources as Va, disposeStream as _a, editorGuidKeyName as ja, enableSpatialConsole as Za, euler as Ka, eventListSerializer as Qa, exportAsGLTF as Ya, findByGuid as $a, findObjectOfType as Ja, findObjectsOfType as qa, findResourceUsers as es, fitCamera as ts, fitObjectIntoVolume as os, foreachComponent as rs, foreachComponentEnumerator as ns, forward as is, generateQRCode as as, generateSeed as ss, getBoundingBox as ls, getCameraController as ds, getComponent as cs, getComponentInChildren as ms, getComponentInParent as ps, getComponents as gs, getComponentsInChildren as us, getComponentsInParent as Ss, getFormattedDate as Cs, getIconElement as ys, getIconTexture as Es, getLoader as Rs, getOrAddComponent as hs, getParam as fs, getParentHierarchyPath as vs, getPath as Ps, getPeerOptions as Ts, getPeerjsInstance as As, getResourceUserCount as bs, getTempColor as Ms, getTempQuaternion as Is, getTempVector as Ds, getUrlParams as Os, getVisibleInCustomShadowRendering as xs, getWorldDirection as ks, getWorldEuler as Ls, getWorldPosition as Ns, getWorldQuaternion as Bs, getWorldRotation as Fs, getWorldScale as Us, hasCommercialLicense as ws, hasIndieLicense as Gs, hasPointerEventComponent as Ws, hasProLicense as Hs, hideDebugConsole as Xs, imageToCanvas as zs, instantiate as Vs, invokeLoadedImportPluginHooks as _s, invokeXRSessionEnd as js, invokeXRSessionStart as Zs, isActiveInHierarchy as Ks, isActiveSelf as Qs, isAndroidDevice as Ys, isAnimationAction as $s, isComponent as Js, isDebugMode as qs, isDesktop as el, isDestroyed as tl, isDevEnvironment as ol, isDisposed as rl, isExporting as nl, isGLTFModel as il, isHostedOnGlitch as al, isHotReloadEnabled as sl, isHotReloading as ll, isIPad as dl, isIconElement as cl, isLocalNetwork as ml, isMacOS as pl, isMobileDevice as gl, isMozillaXR as ul, isQuest as Sl, isResourceTrackingEnabled as Cl, isSafari as yl, isUsingInstancing as El, isiOS as Rl, isiPad as hl, loadPMREM as fl, loadSync as vl, logHierarchy as Pl, lookAtInverse as Tl, lookAtObject as Al, lookAtScreenPoint as bl, makeId as Ml, makeIdFromRandomWords as Il, makeNameSafe as Dl, markAsInstancedRendered as Ol, microphonePermissionsGranted as xl, nameof as kl, nameofFactory as Ll, objectSerializer as Nl, offXRSessionEnd as Bl, offXRSessionStart as Fl, onXRSessionEnd as Ul, onXRSessionStart as wl, parseSync as Gl, placeOnSurface as Wl, postprocessFBXMaterials as Hl, prefix as Xl, pushState as zl, randomNumber as Vl, registerBinaryType as _l, registerComponent as jl, registerComponentExtension as Zl, registerCustomEffectType as Kl, registerExportExtensions as Ql, registerExtensions as Yl, registerHotReloadType as $l, registerLoader as Jl, registerPrefabProvider as ql, registerPrototypeExtensions as ed, registerType as td, relativePathPrefix as od, removeAttributeChangeCallback as rd, removeComponent as nd, removeCustomImportExtensionType as id, removePatch as ad, resolveUrl as sd, sanitizeString as ld, saveImage as dd, screenshot as cd, screenshot2 as md, sendDestroyed as pd, serializable as gd, serializeObject as ud, serializeable as Sd, setActive as Cd, setAllowBalloonMessages as yd, setAllowOverlayMessages as Ed, setAutoFitEnabled as Rd, setCameraController as hd, setDestroyed as fd, setDevEnvironment as vd, setDisposable as Pd, setDontDestroy as Td, setOrAddParamsToUrl as Ad, setParam as bd, setParamWithoutReload as Md, setPeerOptions as Id, setResourceTrackingEnabled as Dd, setState as Od, setVisibleInCustomShadowRendering as xd, setWorldEuler as kd, setWorldPosition as Ld, setWorldPositionXYZ as Nd, setWorldQuaternion as Bd, setWorldQuaternionXYZW as Fd, setWorldRotation as Ud, setWorldRotationXYZ as wd, setWorldScale as Gd, showBalloonError as Wd, showBalloonMessage as Hd, showBalloonWarning as Xd, showDebugConsole as zd, slerp as Vd, syncDestroy as _d, syncField as jd, syncInstantiate as Zd, textureToCanvas as Kd, toSourceId as Qd, tryCastBinary as Yd, tryDetermineMimetypeFromBinary as $d, tryDetermineMimetypeFromURL as Jd, tryFindObject as qd, tryGetGuid as ec, unregisterHotReloadType as tc, unwatchWrite as oc, useForAutoFit as rc, validate as nc, watchWrite as ic } from "./needle-engine.bundle-C4PyE3dQ.js";
|
|
3
3
|
import { NEEDLE_progressive as sc } from "./gltf-progressive-DPunMlEM.js";
|
|
4
4
|
import { THREE as R } from "./three-BCCkyCA5.js";
|
|
5
5
|
const t = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{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 y,Components as E}from"./needle-engine.bundle-BhAUDZcQ.min.js";import{$physicsKey as R,ActionBuilder as h,ActionCollection as v,ActionModel as f,Addressables as P,AlignmentConstraint as A,AmbientMode as T,Animation as b,AnimationCurve as M,AnimationExtension as I,AnimationTrackHandler as D,AnimationUtils as O,Animator as x,AnimatorConditionMode as k,AnimatorController as L,AnimatorControllerParameterType as B,AnimatorStateInfo as F,Antialiasing as N,Application as w,AssetDatabase as U,AssetReference as W,Attractor as G,AudioExtension as H,AudioListener as X,AudioSource as z,AudioTrackHandler as V,Avatar as _,AvatarBlink_Simple as j,AvatarEyeLook_Rotation as K,AvatarLoader as Q,AvatarMarker as Z,AvatarModel as Y,Avatar_Brain_LookAt as J,Avatar_MouthShapes as $,Avatar_MustacheShake as q,Avatar_POI as ee,Axes as ae,AxesHelper as se,BUILD_TIME as te,BaseUIComponent as oe,BasicIKConstraint as re,BehaviorExtension as ne,BehaviorModel as ie,Component$1 as le,BlobStorage as de,BloomEffect as ce,BoxCollider as me,BoxGizmo as pe,BoxHelperComponent as ge,Button as ue,ButtonsFactory as Se,CallDirection as Ce,CallInfo as ye,Camera as Ee,CameraTargetReachedEvent as Re,Canvas as he,CanvasGroup as ve,CapsuleCollider as fe,ChangeMaterialOnClick as Pe,ChangeTransformOnClick as Ae,CharacterController as Te,CharacterControllerInput as be,ChromaticAberration as Me,CircularBuffer as Ie,ClearFlags as De,ClickThrough as Oe,ClipExtrapolation as xe,Collider as ke,Collision as Le,CollisionDetectionMode as Be,ColorAdjustments as Fe,ColorBySpeedModule as Ne,ColorOverLifetimeModule as we,Component$1 as Ue,ComponentLifecycleEvents as We,ConnectionEvents as Ge,ContactPoint as He,ContactShadows as Xe,ContextArgs as ze,ContextEvent as Ve,ContextRegistry as _e,ControlTrackHandler as je,CursorFollow as Ke,CustomBranding as Qe,CustomShader as Ze,DefaultReflectionMode as Ye,Deletable as Je,DeleteBox as $e,DepthOfField as qe,DeviceFlag as ea,DeviceUtilities as aa,DocumentExtension as sa,DragControls as ta,DragMode as oa,DropListener as ra,Duplicatable as na,EffectWrapper as ia,EmissionModule as la,EmphasizeOnClick as da,EngineLoadingView as ca,EnvironmentScene as ma,EventList as pa,EventListEvent as ga,EventSystem as ua,EventTrigger as Sa,FieldWithDefault as Ca,FileReference as ya,FileReferenceSerializer as Ea,FileSpawnModel as Ra,File_Event as ha,FixedJoint as va,Fog as fa,FrameEvent as Pa,GENERATOR as Aa,Gizmos as Ta,GltfExport as ba,GltfExportBox as Ma,Gradient as Ia,Graphic as Da,GraphicRaycaster as Oa,Graphics as xa,GridHelper as ka,GridLayoutGroup as La,GroundProjectedEnv as Ba,GroupActionModel as Fa,HideFlags as Na,HideOnStart as wa,HingeJoint as Ua,HorizontalLayoutGroup as Wa,HostData as Ga,HoverAnimation as Ha,Image as Xa,ImageReference as za,ImageReferenceSerializer as Va,InheritVelocityModule as _a,Input as ja,InputEventQueue as Ka,InputEvents as Qa,InputField as Za,InstanceHandle as Ya,InstancingHandler as Ja,InstancingUtil as $a,InstantiateEvent as qa,InstantiateIdProvider as es,InstantiateOptions as as,Interactable as ss,InternalScreenshotUtils as ts,JoinedRoomResponse as os,KeyEventArgs as rs,Keyframe as ns,LODGroup as is,LODModel as ls,LeftRoomResponse as ds,Light as cs,LightData as ms,LimitVelocityOverLifetimeModule as ps,LoadingElementOptions as gs,LogStats as us,LogType as Ss,LookAt as Cs,LookAtConstraint as ys,MainModule as Es,MarkerTrackHandler as Rs,MarkerType as hs,MaskableGraphic as vs,Mathf as fs,MeshCollider as Ps,MeshRenderer as As,MinMaxCurve as Ts,MinMaxGradient as bs,NEEDLE_ENGINE_FEATURE_FLAGS as Ms,MODULES as Is,NEKeyboardEvent as Ds,NEPointerEvent as Os,NeedleButtonElement as xs,ContextRegistry as ks,NeedleEngineModelLoader as Ls,NeedleEngineWebComponent as Bs,NeedleMenu as Fs,NeedlePatchesKey as Ns,USDZExporter as ws,NeedleXRController as Us,NeedleXRSync as Ws,NeedleXRUtils as Gs,NestedGltf as Hs,NetworkConnection as Xs,NetworkedStreamEvents as zs,NetworkedStreams as Vs,Networking as _s,NewInstanceModel as js,NoiseModule as Ks,ObjectRaycaster as Qs,ObjectUtils as Zs,OffsetConstraint as Ys,OneEuroFilter as Js,OneEuroFilterXYZ as $s,OpenURL as qs,OrbitControls as et,Outline as at,OwnershipEvent as st,OwnershipModel as tt,PUBLIC_KEY as ot,Padding as rt,ParticleBurst as nt,ParticleSubEmitter as it,ParticleSystem as lt,ParticleSystemBaseBehaviour as dt,ParticleSystemRenderer as ct,ParticleSystemShapeType as mt,PeerHandle as pt,PeerNetworking as gt,Physics as ut,PhysicsExtension as St,PhysicsMaterialCombine as Ct,PixelationEffect as yt,PlayAnimationOnClick as Et,PlayAudioOnClick as Rt,PlayableDirector as ht,PlayerColor as vt,PlayerState as ft,PlayerStateEvent as Pt,PlayerSync as At,PlayerView as Tt,PlayerViewManager as bt,PointerEventData as Mt,PointerType as It,PostProcessingEffect as Dt,PostProcessingEffectOrder as Ot,PostProcessingHandler as xt,Volume as kt,PreliminaryAction as Lt,PreliminaryTrigger as Bt,PreviewHelper as Ft,PrimitiveType as Nt,Progress as wt,PromiseAllWithErrors as Ut,PromiseErrorResult as Wt,RGBAColor as Gt,RapierPhysics as Ht,RawImage as Xt,RaycastOptions as zt,Rect as Vt,RectTransform as _t,ReflectionProbe as jt,RegisteredAnimationInfo as Kt,RemoteSkybox as Qt,RenderTexture as Zt,RenderTextureSerializer as Yt,Renderer as Jt,RendererData as $t,RendererLightmap as qt,Rigidbody as eo,RigidbodyConstraints as ao,RoomEvents as so,RotationBySpeedModule as to,RotationOverLifetimeModule as oo,SceneLightSettings as ro,SceneSwitcher as no,ScreenCapture as io,ScreenSpaceAmbientOcclusion as lo,ScreenSpaceAmbientOcclusionN8 as co,ScrollFollow as mo,SeeThrough as po,SendQueue as go,SerializationContext as uo,SetActiveOnClick as So,ShadowCatcher as Co,ShapeModule as yo,ShapeOverlapResult as Eo,SharpeningEffect as Ro,SignalAsset as ho,SignalReceiver as vo,SignalReceiverEvent as fo,SignalTrackHandler as Po,Size as Ao,SizeBySpeedModule as To,SizeOverLifetimeModule as bo,SkinnedMeshRenderer as Mo,SmoothFollow as Io,SpatialGrabRaycaster as Do,SpatialHtml as Oo,SpatialTrigger as xo,SpatialTriggerReceiver as ko,SpectatorCamera as Lo,SphereCollider as Bo,SphereIntersection as Fo,SplineContainer as No,SplineData as wo,SplineUtils as Uo,SplineWalker as Wo,Sprite as Go,SpriteData as Ho,SpriteRenderer as Xo,SpriteSheet as zo,StateMachineBehaviour as Vo,StreamEndedEvent as _o,StreamReceivedEvent as jo,SubEmitterSystem as Ko,SyncedCamera as Qo,SyncedRoom as Zo,SyncedTransform as Yo,TapGestureTrigger as Jo,TeleportTarget as $o,TestRunner as qo,TestSceneUtils as er,TestSimulateUserData as ar,Text as sr,TextBuilder as tr,TextExtension as or,TextureSheetAnimationModule as rr,TiltShiftEffect as nr,Time as ir,ToneMappingEffect as lr,TrackHandler as dr,TrackType as cr,TrailModule as mr,TransformData as pr,TransformGizmo as gr,TriggerBuilder as ur,TriggerModel as Sr,UIRaycastUtils as Cr,UIRootComponent as yr,USDDocument as Er,USDObject as Rr,USDWriter as hr,USDZExporter$1 as vr,USDZText as fr,USDZUIExtension as Pr,UriSerializer as Ar,UsageMarker as Tr,UserJoinedOrLeftRoomModel as br,VariantAction as Mr,VelocityOverLifetimeModule as Ir,VerticalLayoutGroup as Dr,VideoPlayer as Or,ViewBox as xr,ViewDevice as kr,Vignette as Lr,VisibilityAction as Br,Voip as Fr,Volume as Nr,VolumeParameter as wr,VolumeProfile as Ur,WaitForFrames as Wr,WaitForPromise as Gr,WaitForSeconds as Hr,Watch as Xr,WebARCameraBackground as zr,WebARSessionRoot as Vr,WebXR as _r,WebXRButtonFactory as jr,WebXRImageTracking as Kr,WebXRImageTrackingModel as Qr,WebXRPlaneTracking as Zr,WebXRTrackedImage as Yr,XRControllerFollow as Jr,XRControllerModel as $r,XRControllerMovement as qr,XRFlag as en,XRRig as an,XRState as sn,XRStateFlag as tn,__Ignore as on,__internalNotifyObjectDestroyed as rn,activeInHierarchyFieldName as nn,addAttributeChangeCallback as ln,addComponent as dn,addCustomExtensionPlugin as cn,addNewComponent as mn,addPatch as pn,apply as gn,applyHMRChanges as un,applyPrototypeExtensions as Sn,beginListenDestroy as Cn,beginListenInstantiate as yn,binaryIdentifierCasts as En,build_scene_functions as Rn,builtinComponentKeyName as hn,calculateProgress01 as vn,clearMessages as fn,clearMessages as Pn,colorSerializer as An,compareAssociation as Tn,componentSerializer as bn,copyTexture as Mn,createMotion as In,debugNet as Dn,debugOwner as On,decompressGpuTexture as xn,deepClone as kn,delay as Ln,delayForFrames as Bn,deserializeObject as Fn,destroy as Nn,destroyComponentInstance as wn,determineMimeTypeFromExtension as Un,disposeObjectResources as Wn,disposeStream as Gn,editorGuidKeyName as Hn,enableSpatialConsole as Xn,euler as zn,eventListSerializer as Vn,exportAsGLTF as _n,findByGuid as jn,findObjectOfType as Kn,findObjectsOfType as Qn,findResourceUsers as Zn,fitCamera as Yn,fitObjectIntoVolume as Jn,foreachComponent as $n,foreachComponentEnumerator as qn,forward as ei,generateQRCode as ai,generateSeed as si,getBoundingBox as ti,getCameraController as oi,getComponent as ri,getComponentInChildren as ni,getComponentInParent as ii,getComponents as li,getComponentsInChildren as di,getComponentsInParent as ci,getFormattedDate as mi,getIconElement as pi,getIconTexture as gi,getLoader as ui,getOrAddComponent as Si,getParam as Ci,getParentHierarchyPath as yi,getPath as Ei,getPeerOptions as Ri,getPeerjsInstance as hi,getResourceUserCount as vi,getTempColor as fi,getTempQuaternion as Pi,getTempVector as Ai,getUrlParams as Ti,getVisibleInCustomShadowRendering as bi,getWorldDirection as Mi,getWorldEuler as Ii,getWorldPosition as Di,getWorldQuaternion as Oi,getWorldRotation as xi,getWorldScale as ki,hasCommercialLicense as Li,hasIndieLicense as Bi,hasPointerEventComponent as Fi,hasProLicense as Ni,hideDebugConsole as wi,imageToCanvas as Ui,instantiate as Wi,invokeLoadedImportPluginHooks as Gi,invokeXRSessionEnd as Hi,invokeXRSessionStart as Xi,isActiveInHierarchy as zi,isActiveSelf as Vi,isAndroidDevice as _i,isAnimationAction as ji,isComponent as Ki,isDebugMode as Qi,isDesktop as Zi,isDestroyed as Yi,isDevEnvironment as Ji,isDisposed as $i,isExporting as qi,isGLTFModel as el,isHostedOnGlitch as al,isHotReloadEnabled as sl,isHotReloading as tl,isIPad as ol,isIconElement as rl,isLocalNetwork as nl,isMacOS as il,isMobileDevice as ll,isMozillaXR as dl,isQuest as cl,isResourceTrackingEnabled as ml,isSafari as pl,isUsingInstancing as gl,isiOS as ul,isiPad as Sl,loadPMREM as Cl,loadSync as yl,logHierarchy as El,lookAtInverse as Rl,lookAtObject as hl,lookAtScreenPoint as vl,makeId as fl,makeIdFromRandomWords as Pl,makeNameSafe as Al,markAsInstancedRendered as Tl,microphonePermissionsGranted as bl,nameof as Ml,nameofFactory as Il,objectSerializer as Dl,offXRSessionEnd as Ol,offXRSessionStart as xl,onXRSessionEnd as kl,onXRSessionStart as Ll,parseSync as Bl,placeOnSurface as Fl,postprocessFBXMaterials as Nl,prefix as wl,pushState as Ul,randomNumber as Wl,registerBinaryType as Gl,registerComponent as Hl,registerComponentExtension as Xl,registerCustomEffectType as zl,registerExportExtensions as Vl,registerExtensions as _l,registerHotReloadType as jl,registerLoader as Kl,registerPrefabProvider as Ql,registerPrototypeExtensions as Zl,registerType as Yl,relativePathPrefix as Jl,removeAttributeChangeCallback as $l,removeComponent as ql,removeCustomImportExtensionType as ed,removePatch as ad,resolveUrl as sd,sanitizeString as td,saveImage as od,screenshot as rd,screenshot2 as nd,sendDestroyed as id,serializable as ld,serializeObject as dd,serializeable as cd,setActive as md,setAllowBalloonMessages as pd,setAllowOverlayMessages as gd,setAutoFitEnabled as ud,setCameraController as Sd,setDestroyed as Cd,setDevEnvironment as yd,setDisposable as Ed,setDontDestroy as Rd,setOrAddParamsToUrl as hd,setParam as vd,setParamWithoutReload as fd,setPeerOptions as Pd,setResourceTrackingEnabled as Ad,setState as Td,setVisibleInCustomShadowRendering as bd,setWorldEuler as Md,setWorldPosition as Id,setWorldPositionXYZ as Dd,setWorldQuaternion as Od,setWorldQuaternionXYZW as xd,setWorldRotation as kd,setWorldRotationXYZ as Ld,setWorldScale as Bd,showBalloonError as Fd,showBalloonMessage as Nd,showBalloonWarning as wd,showDebugConsole as Ud,slerp as Wd,syncDestroy as Gd,syncField as Hd,syncInstantiate as Xd,textureToCanvas as zd,toSourceId as Vd,tryCastBinary as _d,tryDetermineMimetypeFromBinary as jd,tryDetermineMimetypeFromURL as Kd,tryFindObject as Qd,tryGetGuid as Zd,unregisterHotReloadType as Yd,unwatchWrite as Jd,useForAutoFit as $d,validate as qd,watchWrite as ec}from"./needle-engine.bundle-BhAUDZcQ.min.js";import{NEEDLE_progressive as ac}from"./gltf-progressive-hFPACYio.min.js";import{THREE as sc}from"./three-W7zWTcfP.min.js";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(y),C(E);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=sc;export{R as $physicsKey,h as ActionBuilder,v as ActionCollection,f as ActionModel,P as Addressables,A as AlignmentConstraint,T as AmbientMode,b as Animation,M as AnimationCurve,I as AnimationExtension,D as AnimationTrackHandler,O as AnimationUtils,x as Animator,k as AnimatorConditionMode,L as AnimatorController,B as AnimatorControllerParameterType,F as AnimatorStateInfo,N as Antialiasing,w as Application,U as AssetDatabase,W as AssetReference,G as Attractor,H as AudioExtension,X as AudioListener,z as AudioSource,V as AudioTrackHandler,_ as Avatar,j as AvatarBlink_Simple,K as AvatarEyeLook_Rotation,Q as AvatarLoader,Z as AvatarMarker,Y as AvatarModel,J as Avatar_Brain_LookAt,$ as Avatar_MouthShapes,q as Avatar_MustacheShake,ee as Avatar_POI,ae as Axes,se as AxesHelper,te as BUILD_TIME,oe as BaseUIComponent,re as BasicIKConstraint,ne as BehaviorExtension,ie as BehaviorModel,le as Behaviour,de as BlobStorage,ce as BloomEffect,me as BoxCollider,pe as BoxGizmo,ge as BoxHelperComponent,ue as Button,Se as ButtonsFactory,Ce as CallDirection,ye as CallInfo,Ee as Camera,Re as CameraTargetReachedEvent,he as Canvas,ve as CanvasGroup,fe as CapsuleCollider,Pe as ChangeMaterialOnClick,Ae as ChangeTransformOnClick,Te as CharacterController,be as CharacterControllerInput,Me as ChromaticAberration,Ie as CircularBuffer,De as ClearFlags,Oe as ClickThrough,xe as ClipExtrapolation,ke as Collider,Le as Collision,Be as CollisionDetectionMode,Fe as ColorAdjustments,Ne as ColorBySpeedModule,we as ColorOverLifetimeModule,Ue as Component,We as ComponentLifecycleEvents,Ge as ConnectionEvents,He as ContactPoint,Xe as ContactShadows,u as Context,ze as ContextArgs,Ve as ContextEvent,_e as ContextRegistry,je as ControlTrackHandler,Ke as CursorFollow,Qe as CustomBranding,Ze as CustomShader,Ye as DefaultReflectionMode,Je as Deletable,$e as DeleteBox,qe as DepthOfField,ea as DeviceFlag,aa as DeviceUtilities,sa as DocumentExtension,ta as DragControls,oa as DragMode,ra as DropListener,na as Duplicatable,ia as EffectWrapper,la as EmissionModule,da as EmphasizeOnClick,ca as EngineLoadingView,ma as EnvironmentScene,pa as EventList,ga as EventListEvent,ua as EventSystem,Sa as EventTrigger,Ca as FieldWithDefault,ya as FileReference,Ea as FileReferenceSerializer,Ra as FileSpawnModel,ha as File_Event,va as FixedJoint,fa as Fog,Pa as FrameEvent,Aa as GENERATOR,s as GameObject,Ta as Gizmos,ba as GltfExport,Ma as GltfExportBox,Ia as Gradient,Da as Graphic,Oa as GraphicRaycaster,xa as Graphics,ka as GridHelper,La as GridLayoutGroup,Ba as GroundProjectedEnv,Fa as GroupActionModel,Na as HideFlags,wa as HideOnStart,Ua as HingeJoint,Wa as HorizontalLayoutGroup,Ga as HostData,Ha as HoverAnimation,Xa as Image,za as ImageReference,Va as ImageReferenceSerializer,_a as InheritVelocityModule,ja as Input,Ka as InputEventQueue,Qa as InputEvents,Za as InputField,Ya as InstanceHandle,Ja as InstancingHandler,$a as InstancingUtil,qa as InstantiateEvent,es as InstantiateIdProvider,as as InstantiateOptions,ss as Interactable,ts as InternalScreenshotUtils,os as JoinedRoomResponse,rs as KeyEventArgs,ns as Keyframe,is as LODGroup,ls as LODModel,ds as LeftRoomResponse,cs as Light,ms as LightData,ps as LimitVelocityOverLifetimeModule,gs as LoadingElementOptions,us as LogStats,Ss as LogType,Cs as LookAt,ys as LookAtConstraint,Es as MainModule,Rs as MarkerTrackHandler,hs as MarkerType,vs as MaskableGraphic,fs as Mathf,Ps as MeshCollider,As as MeshRenderer,Ts as MinMaxCurve,bs as MinMaxGradient,Ms as NEEDLE_ENGINE_FEATURE_FLAGS,Is as NEEDLE_ENGINE_MODULES,ac as NEEDLE_progressive,Ds as NEKeyboardEvent,Os as NEPointerEvent,xs as NeedleButtonElement,ks as NeedleEngine,Ls as NeedleEngineModelLoader,Bs as NeedleEngineWebComponent,Fs as NeedleMenu,Ns as NeedlePatchesKey,ws as NeedleUSDZExporter,Us as NeedleXRController,g as NeedleXRSession,Ws as NeedleXRSync,Gs as NeedleXRUtils,Hs as NestedGltf,Xs as NetworkConnection,zs as NetworkedStreamEvents,Vs as NetworkedStreams,_s as Networking,js as NewInstanceModel,Ks as NoiseModule,Qs as ObjectRaycaster,Zs as ObjectUtils,Ys as OffsetConstraint,Js as OneEuroFilter,$s as OneEuroFilterXYZ,qs as OpenURL,et as OrbitControls,at as Outline,st as OwnershipEvent,tt as OwnershipModel,ot as PUBLIC_KEY,rt as Padding,nt as ParticleBurst,it as ParticleSubEmitter,lt as ParticleSystem,dt as ParticleSystemBaseBehaviour,ct as ParticleSystemRenderer,mt as ParticleSystemShapeType,pt as PeerHandle,gt as PeerNetworking,ut as Physics,St as PhysicsExtension,Ct as PhysicsMaterialCombine,yt as PixelationEffect,Et as PlayAnimationOnClick,Rt as PlayAudioOnClick,ht as PlayableDirector,vt as PlayerColor,ft as PlayerState,Pt as PlayerStateEvent,At as PlayerSync,Tt as PlayerView,bt as PlayerViewManager,Mt as PointerEventData,It as PointerType,Dt as PostProcessingEffect,Ot as PostProcessingEffectOrder,xt as PostProcessingHandler,kt as PostProcessingManager,Lt as PreliminaryAction,Bt as PreliminaryTrigger,Ft as PreviewHelper,Nt as PrimitiveType,wt as Progress,Ut as PromiseAllWithErrors,Wt as PromiseErrorResult,Gt as RGBAColor,Ht as RapierPhysics,Xt as RawImage,zt as RaycastOptions,Vt as Rect,_t as RectTransform,jt as ReflectionProbe,Kt as RegisteredAnimationInfo,Qt as RemoteSkybox,Zt as RenderTexture,Yt as RenderTextureSerializer,Jt as Renderer,$t as RendererData,qt as RendererLightmap,eo as Rigidbody,ao as RigidbodyConstraints,so as RoomEvents,to as RotationBySpeedModule,oo as RotationOverLifetimeModule,ro as SceneLightSettings,no as SceneSwitcher,io as ScreenCapture,lo as ScreenSpaceAmbientOcclusion,co as ScreenSpaceAmbientOcclusionN8,mo as ScrollFollow,po as SeeThrough,go as SendQueue,uo as SerializationContext,So as SetActiveOnClick,Co as ShadowCatcher,yo as ShapeModule,Eo as ShapeOverlapResult,Ro as SharpeningEffect,ho as SignalAsset,vo as SignalReceiver,fo as SignalReceiverEvent,Po as SignalTrackHandler,Ao as Size,To as SizeBySpeedModule,bo as SizeOverLifetimeModule,Mo as SkinnedMeshRenderer,Io as SmoothFollow,Do as SpatialGrabRaycaster,Oo as SpatialHtml,xo as SpatialTrigger,ko as SpatialTriggerReceiver,Lo as SpectatorCamera,Bo as SphereCollider,Fo as SphereIntersection,No as SplineContainer,wo as SplineData,Uo as SplineUtils,Wo as SplineWalker,Go as Sprite,Ho as SpriteData,Xo as SpriteRenderer,zo as SpriteSheet,Vo as StateMachineBehaviour,_o as StreamEndedEvent,jo as StreamReceivedEvent,Ko as SubEmitterSystem,Qo as SyncedCamera,Zo as SyncedRoom,Yo as SyncedTransform,Jo as TapGestureTrigger,$o as TeleportTarget,qo as TestRunner,er as TestSceneUtils,ar as TestSimulateUserData,sr as Text,tr as TextBuilder,or as TextExtension,rr as TextureSheetAnimationModule,nr as TiltShiftEffect,ir as Time,lr as ToneMappingEffect,dr as TrackHandler,cr as TrackType,mr as TrailModule,pr as TransformData,gr as TransformGizmo,ur as TriggerBuilder,Sr as TriggerModel,m as TypeStore,Cr as UIRaycastUtils,yr as UIRootComponent,Er as USDDocument,Rr as USDObject,hr as USDWriter,vr as USDZExporter,fr as USDZText,Pr as USDZUIExtension,Ar as UriSerializer,Tr as UsageMarker,br as UserJoinedOrLeftRoomModel,S as VERSION,Mr as VariantAction,Ir as VelocityOverLifetimeModule,Dr as VerticalLayoutGroup,Or as VideoPlayer,xr as ViewBox,kr as ViewDevice,Lr as Vignette,Br as VisibilityAction,Fr as Voip,Nr as Volume,wr as VolumeParameter,Ur as VolumeProfile,Wr as WaitForFrames,Gr as WaitForPromise,Hr as WaitForSeconds,Xr as Watch,zr as WebARCameraBackground,Vr as WebARSessionRoot,_r as WebXR,jr as WebXRButtonFactory,Kr as WebXRImageTracking,Qr as WebXRImageTrackingModel,Zr as WebXRPlaneTracking,Yr as WebXRTrackedImage,Jr as XRControllerFollow,$r as XRControllerModel,qr as XRControllerMovement,en as XRFlag,an as XRRig,sn as XRState,tn as XRStateFlag,on as __Ignore,rn as __internalNotifyObjectDestroyed,nn as activeInHierarchyFieldName,ln as addAttributeChangeCallback,dn as addComponent,cn as addCustomExtensionPlugin,mn as addNewComponent,pn as addPatch,gn as apply,un as applyHMRChanges,Sn as applyPrototypeExtensions,Cn as beginListenDestroy,yn as beginListenInstantiate,En as binaryIdentifierCasts,Rn as build_scene_functions,hn as builtinComponentKeyName,vn as calculateProgress01,fn as clearBalloonMessages,Pn as clearOverlayMessages,An as colorSerializer,Tn as compareAssociation,bn as componentSerializer,Mn as copyTexture,In as createMotion,Dn as debugNet,On as debugOwner,xn as decompressGpuTexture,kn as deepClone,Ln as delay,Bn as delayForFrames,Fn as deserializeObject,Nn as destroy,wn as destroyComponentInstance,Un as determineMimeTypeFromExtension,Wn as disposeObjectResources,Gn as disposeStream,Hn as editorGuidKeyName,Xn as enableSpatialConsole,zn as euler,Vn as eventListSerializer,_n as exportAsGLTF,jn as findByGuid,Kn as findObjectOfType,Qn as findObjectsOfType,Zn as findResourceUsers,Yn as fitCamera,Jn as fitObjectIntoVolume,$n as foreachComponent,qn as foreachComponentEnumerator,ei as forward,ai as generateQRCode,si as generateSeed,ti as getBoundingBox,oi as getCameraController,ri as getComponent,ni as getComponentInChildren,ii as getComponentInParent,li as getComponents,di as getComponentsInChildren,ci as getComponentsInParent,mi as getFormattedDate,pi as getIconElement,gi as getIconTexture,ui as getLoader,Si as getOrAddComponent,Ci as getParam,yi as getParentHierarchyPath,Ei as getPath,Ri as getPeerOptions,hi as getPeerjsInstance,vi as getResourceUserCount,fi as getTempColor,Pi as getTempQuaternion,Ai as getTempVector,Ti as getUrlParams,bi as getVisibleInCustomShadowRendering,Mi as getWorldDirection,Ii as getWorldEuler,Di as getWorldPosition,Oi as getWorldQuaternion,xi as getWorldRotation,ki as getWorldScale,Li as hasCommercialLicense,Bi as hasIndieLicense,Fi as hasPointerEventComponent,Ni as hasProLicense,wi as hideDebugConsole,Ui as imageToCanvas,Wi as instantiate,Gi as invokeLoadedImportPluginHooks,Hi as invokeXRSessionEnd,Xi as invokeXRSessionStart,zi as isActiveInHierarchy,Vi as isActiveSelf,_i as isAndroidDevice,ji as isAnimationAction,Ki as isComponent,Qi as isDebugMode,Zi as isDesktop,Yi as isDestroyed,Ji as isDevEnvironment,$i as isDisposed,qi as isExporting,el as isGLTFModel,al as isHostedOnGlitch,sl as isHotReloadEnabled,tl as isHotReloading,ol as isIPad,rl as isIconElement,nl as isLocalNetwork,il as isMacOS,ll as isMobileDevice,dl as isMozillaXR,cl as isQuest,ml as isResourceTrackingEnabled,pl as isSafari,gl as isUsingInstancing,ul as isiOS,Sl as isiPad,p as loadAsset,Cl as loadPMREM,yl as loadSync,El as logHierarchy,Rl as lookAtInverse,hl as lookAtObject,vl as lookAtScreenPoint,fl as makeId,Pl as makeIdFromRandomWords,Al as makeNameSafeForUSD,Tl as markAsInstancedRendered,bl as microphonePermissionsGranted,Ml as nameof,Il as nameofFactory,Dl as objectSerializer,Ol as offXRSessionEnd,xl as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,kl as onXRSessionEnd,Ll as onXRSessionStart,Bl as parseSync,Fl as placeOnSurface,Nl as postprocessFBXMaterials,wl as prefix,Ul as pushState,Wl as randomNumber,Gl as registerBinaryType,Hl as registerComponent,Xl as registerComponentExtension,zl as registerCustomEffectType,Vl as registerExportExtensions,_l as registerExtensions,jl as registerHotReloadType,Kl as registerLoader,Ql as registerPrefabProvider,Zl as registerPrototypeExtensions,Yl as registerType,Jl as relativePathPrefix,$l as removeAttributeChangeCallback,ql as removeComponent,ed as removeCustomImportExtensionType,ad as removePatch,sd as resolveUrl,td as sanitizeString,od as saveImage,rd as screenshot,nd as screenshot2,id as sendDestroyed,ld as serializable,dd as serializeObject,cd as serializeable,md as setActive,pd as setAllowBalloonMessages,gd as setAllowOverlayMessages,ud as setAutoFitEnabled,Sd as setCameraController,Cd as setDestroyed,yd as setDevEnvironment,Ed as setDisposable,Rd as setDontDestroy,hd as setOrAddParamsToUrl,vd as setParam,fd as setParamWithoutReload,Pd as setPeerOptions,Ad as setResourceTrackingEnabled,Td as setState,bd as setVisibleInCustomShadowRendering,Md as setWorldEuler,Id as setWorldPosition,Dd as setWorldPositionXYZ,Od as setWorldQuaternion,xd as setWorldQuaternionXYZW,kd as setWorldRotation,Ld as setWorldRotationXYZ,Bd as setWorldScale,Fd as showBalloonError,Nd as showBalloonMessage,wd as showBalloonWarning,Ud as showDebugConsole,Wd as slerp,Gd as syncDestroy,Hd as syncField,Xd as syncInstantiate,zd as textureToCanvas,Vd as toSourceId,_d as tryCastBinary,jd as tryDetermineMimetypeFromBinary,Kd as tryDetermineMimetypeFromURL,Qd as tryFindObject,Zd as tryGetGuid,Yd as unregisterHotReloadType,Jd as unwatchWrite,$d as useForAutoFit,qd as validate,ec as watchWrite};
|
|
1
|
+
import{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 y,Components as E}from"./needle-engine.bundle-BPNuWGjI.min.js";import{$physicsKey as R,ActionBuilder as h,ActionCollection as v,ActionModel as f,Addressables as P,AlignmentConstraint as A,AmbientMode as T,Animation as b,AnimationCurve as M,AnimationExtension as I,AnimationTrackHandler as D,AnimationUtils as O,Animator as x,AnimatorConditionMode as k,AnimatorController as L,AnimatorControllerParameterType as B,AnimatorStateInfo as F,Antialiasing as N,Application as w,AssetDatabase as U,AssetReference as W,Attractor as G,AudioExtension as H,AudioListener as X,AudioSource as z,AudioTrackHandler as V,Avatar as _,AvatarBlink_Simple as j,AvatarEyeLook_Rotation as K,AvatarLoader as Q,AvatarMarker as Z,AvatarModel as Y,Avatar_Brain_LookAt as J,Avatar_MouthShapes as $,Avatar_MustacheShake as q,Avatar_POI as ee,Axes as ae,AxesHelper as se,BUILD_TIME as te,BaseUIComponent as oe,BasicIKConstraint as re,BehaviorExtension as ne,BehaviorModel as ie,Component$1 as le,BlobStorage as de,BloomEffect as ce,BoxCollider as me,BoxGizmo as pe,BoxHelperComponent as ge,Button as ue,ButtonsFactory as Se,CallDirection as Ce,CallInfo as ye,Camera as Ee,CameraTargetReachedEvent as Re,Canvas as he,CanvasGroup as ve,CapsuleCollider as fe,ChangeMaterialOnClick as Pe,ChangeTransformOnClick as Ae,CharacterController as Te,CharacterControllerInput as be,ChromaticAberration as Me,CircularBuffer as Ie,ClearFlags as De,ClickThrough as Oe,ClipExtrapolation as xe,Collider as ke,Collision as Le,CollisionDetectionMode as Be,ColorAdjustments as Fe,ColorBySpeedModule as Ne,ColorOverLifetimeModule as we,Component$1 as Ue,ComponentLifecycleEvents as We,ConnectionEvents as Ge,ContactPoint as He,ContactShadows as Xe,ContextArgs as ze,ContextEvent as Ve,ContextRegistry as _e,ControlTrackHandler as je,CursorFollow as Ke,CustomBranding as Qe,CustomShader as Ze,DefaultReflectionMode as Ye,Deletable as Je,DeleteBox as $e,DepthOfField as qe,DeviceFlag as ea,DeviceUtilities as aa,DocumentExtension as sa,DragControls as ta,DragMode as oa,DropListener as ra,Duplicatable as na,EffectWrapper as ia,EmissionModule as la,EmphasizeOnClick as da,EngineLoadingView as ca,EnvironmentScene as ma,EventList as pa,EventListEvent as ga,EventSystem as ua,EventTrigger as Sa,FieldWithDefault as Ca,FileReference as ya,FileReferenceSerializer as Ea,FileSpawnModel as Ra,File_Event as ha,FixedJoint as va,Fog as fa,FrameEvent as Pa,GENERATOR as Aa,Gizmos as Ta,GltfExport as ba,GltfExportBox as Ma,Gradient as Ia,Graphic as Da,GraphicRaycaster as Oa,Graphics as xa,GridHelper as ka,GridLayoutGroup as La,GroundProjectedEnv as Ba,GroupActionModel as Fa,HideFlags as Na,HideOnStart as wa,HingeJoint as Ua,HorizontalLayoutGroup as Wa,HostData as Ga,HoverAnimation as Ha,Image as Xa,ImageReference as za,ImageReferenceSerializer as Va,InheritVelocityModule as _a,Input as ja,InputEventQueue as Ka,InputEvents as Qa,InputField as Za,InstanceHandle as Ya,InstancingHandler as Ja,InstancingUtil as $a,InstantiateEvent as qa,InstantiateIdProvider as es,InstantiateOptions as as,Interactable as ss,InternalScreenshotUtils as ts,JoinedRoomResponse as os,KeyEventArgs as rs,Keyframe as ns,LODGroup as is,LODModel as ls,LeftRoomResponse as ds,Light as cs,LightData as ms,LimitVelocityOverLifetimeModule as ps,LoadingElementOptions as gs,LogStats as us,LogType as Ss,LookAt as Cs,LookAtConstraint as ys,MainModule as Es,MarkerTrackHandler as Rs,MarkerType as hs,MaskableGraphic as vs,Mathf as fs,MeshCollider as Ps,MeshRenderer as As,MinMaxCurve as Ts,MinMaxGradient as bs,NEEDLE_ENGINE_FEATURE_FLAGS as Ms,MODULES as Is,NEKeyboardEvent as Ds,NEPointerEvent as Os,NeedleButtonElement as xs,ContextRegistry as ks,NeedleEngineModelLoader as Ls,NeedleEngineWebComponent as Bs,NeedleMenu as Fs,NeedlePatchesKey as Ns,USDZExporter as ws,NeedleXRController as Us,NeedleXRSync as Ws,NeedleXRUtils as Gs,NestedGltf as Hs,NetworkConnection as Xs,NetworkedStreamEvents as zs,NetworkedStreams as Vs,Networking as _s,NewInstanceModel as js,NoiseModule as Ks,ObjectRaycaster as Qs,ObjectUtils as Zs,OffsetConstraint as Ys,OneEuroFilter as Js,OneEuroFilterXYZ as $s,OpenURL as qs,OrbitControls as et,Outline as at,OwnershipEvent as st,OwnershipModel as tt,PUBLIC_KEY as ot,Padding as rt,ParticleBurst as nt,ParticleSubEmitter as it,ParticleSystem as lt,ParticleSystemBaseBehaviour as dt,ParticleSystemRenderer as ct,ParticleSystemShapeType as mt,PeerHandle as pt,PeerNetworking as gt,Physics as ut,PhysicsExtension as St,PhysicsMaterialCombine as Ct,PixelationEffect as yt,PlayAnimationOnClick as Et,PlayAudioOnClick as Rt,PlayableDirector as ht,PlayerColor as vt,PlayerState as ft,PlayerStateEvent as Pt,PlayerSync as At,PlayerView as Tt,PlayerViewManager as bt,PointerEventData as Mt,PointerType as It,PostProcessingEffect as Dt,PostProcessingEffectOrder as Ot,PostProcessingHandler as xt,Volume as kt,PreliminaryAction as Lt,PreliminaryTrigger as Bt,PreviewHelper as Ft,PrimitiveType as Nt,Progress as wt,PromiseAllWithErrors as Ut,PromiseErrorResult as Wt,RGBAColor as Gt,RapierPhysics as Ht,RawImage as Xt,RaycastOptions as zt,Rect as Vt,RectTransform as _t,ReflectionProbe as jt,RegisteredAnimationInfo as Kt,RemoteSkybox as Qt,RenderTexture as Zt,RenderTextureSerializer as Yt,Renderer as Jt,RendererData as $t,RendererLightmap as qt,Rigidbody as eo,RigidbodyConstraints as ao,RoomEvents as so,RotationBySpeedModule as to,RotationOverLifetimeModule as oo,SceneLightSettings as ro,SceneSwitcher as no,ScreenCapture as io,ScreenSpaceAmbientOcclusion as lo,ScreenSpaceAmbientOcclusionN8 as co,ScrollFollow as mo,SeeThrough as po,SendQueue as go,SerializationContext as uo,SetActiveOnClick as So,ShadowCatcher as Co,ShapeModule as yo,ShapeOverlapResult as Eo,SharpeningEffect as Ro,SignalAsset as ho,SignalReceiver as vo,SignalReceiverEvent as fo,SignalTrackHandler as Po,Size as Ao,SizeBySpeedModule as To,SizeOverLifetimeModule as bo,SkinnedMeshRenderer as Mo,SmoothFollow as Io,SpatialGrabRaycaster as Do,SpatialHtml as Oo,SpatialTrigger as xo,SpatialTriggerReceiver as ko,SpectatorCamera as Lo,SphereCollider as Bo,SphereIntersection as Fo,SplineContainer as No,SplineData as wo,SplineUtils as Uo,SplineWalker as Wo,Sprite as Go,SpriteData as Ho,SpriteRenderer as Xo,SpriteSheet as zo,StateMachineBehaviour as Vo,StreamEndedEvent as _o,StreamReceivedEvent as jo,SubEmitterSystem as Ko,SyncedCamera as Qo,SyncedRoom as Zo,SyncedTransform as Yo,TapGestureTrigger as Jo,TeleportTarget as $o,TestRunner as qo,TestSceneUtils as er,TestSimulateUserData as ar,Text as sr,TextBuilder as tr,TextExtension as or,TextureSheetAnimationModule as rr,TiltShiftEffect as nr,Time as ir,ToneMappingEffect as lr,TrackHandler as dr,TrackType as cr,TrailModule as mr,TransformData as pr,TransformGizmo as gr,TriggerBuilder as ur,TriggerModel as Sr,UIRaycastUtils as Cr,UIRootComponent as yr,USDDocument as Er,USDObject as Rr,USDWriter as hr,USDZExporter$1 as vr,USDZText as fr,USDZUIExtension as Pr,UriSerializer as Ar,UsageMarker as Tr,UserJoinedOrLeftRoomModel as br,VariantAction as Mr,VelocityOverLifetimeModule as Ir,VerticalLayoutGroup as Dr,VideoPlayer as Or,ViewBox as xr,ViewDevice as kr,Vignette as Lr,VisibilityAction as Br,Voip as Fr,Volume as Nr,VolumeParameter as wr,VolumeProfile as Ur,WaitForFrames as Wr,WaitForPromise as Gr,WaitForSeconds as Hr,Watch as Xr,WebARCameraBackground as zr,WebARSessionRoot as Vr,WebXR as _r,WebXRButtonFactory as jr,WebXRImageTracking as Kr,WebXRImageTrackingModel as Qr,WebXRPlaneTracking as Zr,WebXRTrackedImage as Yr,XRControllerFollow as Jr,XRControllerModel as $r,XRControllerMovement as qr,XRFlag as en,XRRig as an,XRState as sn,XRStateFlag as tn,__Ignore as on,__internalNotifyObjectDestroyed as rn,activeInHierarchyFieldName as nn,addAttributeChangeCallback as ln,addComponent as dn,addCustomExtensionPlugin as cn,addNewComponent as mn,addPatch as pn,apply as gn,applyHMRChanges as un,applyPrototypeExtensions as Sn,beginListenDestroy as Cn,beginListenInstantiate as yn,binaryIdentifierCasts as En,build_scene_functions as Rn,builtinComponentKeyName as hn,calculateProgress01 as vn,clearMessages as fn,clearMessages as Pn,colorSerializer as An,compareAssociation as Tn,componentSerializer as bn,copyTexture as Mn,createMotion as In,debugNet as Dn,debugOwner as On,decompressGpuTexture as xn,deepClone as kn,delay as Ln,delayForFrames as Bn,deserializeObject as Fn,destroy as Nn,destroyComponentInstance as wn,determineMimeTypeFromExtension as Un,disposeObjectResources as Wn,disposeStream as Gn,editorGuidKeyName as Hn,enableSpatialConsole as Xn,euler as zn,eventListSerializer as Vn,exportAsGLTF as _n,findByGuid as jn,findObjectOfType as Kn,findObjectsOfType as Qn,findResourceUsers as Zn,fitCamera as Yn,fitObjectIntoVolume as Jn,foreachComponent as $n,foreachComponentEnumerator as qn,forward as ei,generateQRCode as ai,generateSeed as si,getBoundingBox as ti,getCameraController as oi,getComponent as ri,getComponentInChildren as ni,getComponentInParent as ii,getComponents as li,getComponentsInChildren as di,getComponentsInParent as ci,getFormattedDate as mi,getIconElement as pi,getIconTexture as gi,getLoader as ui,getOrAddComponent as Si,getParam as Ci,getParentHierarchyPath as yi,getPath as Ei,getPeerOptions as Ri,getPeerjsInstance as hi,getResourceUserCount as vi,getTempColor as fi,getTempQuaternion as Pi,getTempVector as Ai,getUrlParams as Ti,getVisibleInCustomShadowRendering as bi,getWorldDirection as Mi,getWorldEuler as Ii,getWorldPosition as Di,getWorldQuaternion as Oi,getWorldRotation as xi,getWorldScale as ki,hasCommercialLicense as Li,hasIndieLicense as Bi,hasPointerEventComponent as Fi,hasProLicense as Ni,hideDebugConsole as wi,imageToCanvas as Ui,instantiate as Wi,invokeLoadedImportPluginHooks as Gi,invokeXRSessionEnd as Hi,invokeXRSessionStart as Xi,isActiveInHierarchy as zi,isActiveSelf as Vi,isAndroidDevice as _i,isAnimationAction as ji,isComponent as Ki,isDebugMode as Qi,isDesktop as Zi,isDestroyed as Yi,isDevEnvironment as Ji,isDisposed as $i,isExporting as qi,isGLTFModel as el,isHostedOnGlitch as al,isHotReloadEnabled as sl,isHotReloading as tl,isIPad as ol,isIconElement as rl,isLocalNetwork as nl,isMacOS as il,isMobileDevice as ll,isMozillaXR as dl,isQuest as cl,isResourceTrackingEnabled as ml,isSafari as pl,isUsingInstancing as gl,isiOS as ul,isiPad as Sl,loadPMREM as Cl,loadSync as yl,logHierarchy as El,lookAtInverse as Rl,lookAtObject as hl,lookAtScreenPoint as vl,makeId as fl,makeIdFromRandomWords as Pl,makeNameSafe as Al,markAsInstancedRendered as Tl,microphonePermissionsGranted as bl,nameof as Ml,nameofFactory as Il,objectSerializer as Dl,offXRSessionEnd as Ol,offXRSessionStart as xl,onXRSessionEnd as kl,onXRSessionStart as Ll,parseSync as Bl,placeOnSurface as Fl,postprocessFBXMaterials as Nl,prefix as wl,pushState as Ul,randomNumber as Wl,registerBinaryType as Gl,registerComponent as Hl,registerComponentExtension as Xl,registerCustomEffectType as zl,registerExportExtensions as Vl,registerExtensions as _l,registerHotReloadType as jl,registerLoader as Kl,registerPrefabProvider as Ql,registerPrototypeExtensions as Zl,registerType as Yl,relativePathPrefix as Jl,removeAttributeChangeCallback as $l,removeComponent as ql,removeCustomImportExtensionType as ed,removePatch as ad,resolveUrl as sd,sanitizeString as td,saveImage as od,screenshot as rd,screenshot2 as nd,sendDestroyed as id,serializable as ld,serializeObject as dd,serializeable as cd,setActive as md,setAllowBalloonMessages as pd,setAllowOverlayMessages as gd,setAutoFitEnabled as ud,setCameraController as Sd,setDestroyed as Cd,setDevEnvironment as yd,setDisposable as Ed,setDontDestroy as Rd,setOrAddParamsToUrl as hd,setParam as vd,setParamWithoutReload as fd,setPeerOptions as Pd,setResourceTrackingEnabled as Ad,setState as Td,setVisibleInCustomShadowRendering as bd,setWorldEuler as Md,setWorldPosition as Id,setWorldPositionXYZ as Dd,setWorldQuaternion as Od,setWorldQuaternionXYZW as xd,setWorldRotation as kd,setWorldRotationXYZ as Ld,setWorldScale as Bd,showBalloonError as Fd,showBalloonMessage as Nd,showBalloonWarning as wd,showDebugConsole as Ud,slerp as Wd,syncDestroy as Gd,syncField as Hd,syncInstantiate as Xd,textureToCanvas as zd,toSourceId as Vd,tryCastBinary as _d,tryDetermineMimetypeFromBinary as jd,tryDetermineMimetypeFromURL as Kd,tryFindObject as Qd,tryGetGuid as Zd,unregisterHotReloadType as Yd,unwatchWrite as Jd,useForAutoFit as $d,validate as qd,watchWrite as ec}from"./needle-engine.bundle-BPNuWGjI.min.js";import{NEEDLE_progressive as ac}from"./gltf-progressive-hFPACYio.min.js";import{THREE as sc}from"./three-W7zWTcfP.min.js";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(y),C(E);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=sc;export{R as $physicsKey,h as ActionBuilder,v as ActionCollection,f as ActionModel,P as Addressables,A as AlignmentConstraint,T as AmbientMode,b as Animation,M as AnimationCurve,I as AnimationExtension,D as AnimationTrackHandler,O as AnimationUtils,x as Animator,k as AnimatorConditionMode,L as AnimatorController,B as AnimatorControllerParameterType,F as AnimatorStateInfo,N as Antialiasing,w as Application,U as AssetDatabase,W as AssetReference,G as Attractor,H as AudioExtension,X as AudioListener,z as AudioSource,V as AudioTrackHandler,_ as Avatar,j as AvatarBlink_Simple,K as AvatarEyeLook_Rotation,Q as AvatarLoader,Z as AvatarMarker,Y as AvatarModel,J as Avatar_Brain_LookAt,$ as Avatar_MouthShapes,q as Avatar_MustacheShake,ee as Avatar_POI,ae as Axes,se as AxesHelper,te as BUILD_TIME,oe as BaseUIComponent,re as BasicIKConstraint,ne as BehaviorExtension,ie as BehaviorModel,le as Behaviour,de as BlobStorage,ce as BloomEffect,me as BoxCollider,pe as BoxGizmo,ge as BoxHelperComponent,ue as Button,Se as ButtonsFactory,Ce as CallDirection,ye as CallInfo,Ee as Camera,Re as CameraTargetReachedEvent,he as Canvas,ve as CanvasGroup,fe as CapsuleCollider,Pe as ChangeMaterialOnClick,Ae as ChangeTransformOnClick,Te as CharacterController,be as CharacterControllerInput,Me as ChromaticAberration,Ie as CircularBuffer,De as ClearFlags,Oe as ClickThrough,xe as ClipExtrapolation,ke as Collider,Le as Collision,Be as CollisionDetectionMode,Fe as ColorAdjustments,Ne as ColorBySpeedModule,we as ColorOverLifetimeModule,Ue as Component,We as ComponentLifecycleEvents,Ge as ConnectionEvents,He as ContactPoint,Xe as ContactShadows,u as Context,ze as ContextArgs,Ve as ContextEvent,_e as ContextRegistry,je as ControlTrackHandler,Ke as CursorFollow,Qe as CustomBranding,Ze as CustomShader,Ye as DefaultReflectionMode,Je as Deletable,$e as DeleteBox,qe as DepthOfField,ea as DeviceFlag,aa as DeviceUtilities,sa as DocumentExtension,ta as DragControls,oa as DragMode,ra as DropListener,na as Duplicatable,ia as EffectWrapper,la as EmissionModule,da as EmphasizeOnClick,ca as EngineLoadingView,ma as EnvironmentScene,pa as EventList,ga as EventListEvent,ua as EventSystem,Sa as EventTrigger,Ca as FieldWithDefault,ya as FileReference,Ea as FileReferenceSerializer,Ra as FileSpawnModel,ha as File_Event,va as FixedJoint,fa as Fog,Pa as FrameEvent,Aa as GENERATOR,s as GameObject,Ta as Gizmos,ba as GltfExport,Ma as GltfExportBox,Ia as Gradient,Da as Graphic,Oa as GraphicRaycaster,xa as Graphics,ka as GridHelper,La as GridLayoutGroup,Ba as GroundProjectedEnv,Fa as GroupActionModel,Na as HideFlags,wa as HideOnStart,Ua as HingeJoint,Wa as HorizontalLayoutGroup,Ga as HostData,Ha as HoverAnimation,Xa as Image,za as ImageReference,Va as ImageReferenceSerializer,_a as InheritVelocityModule,ja as Input,Ka as InputEventQueue,Qa as InputEvents,Za as InputField,Ya as InstanceHandle,Ja as InstancingHandler,$a as InstancingUtil,qa as InstantiateEvent,es as InstantiateIdProvider,as as InstantiateOptions,ss as Interactable,ts as InternalScreenshotUtils,os as JoinedRoomResponse,rs as KeyEventArgs,ns as Keyframe,is as LODGroup,ls as LODModel,ds as LeftRoomResponse,cs as Light,ms as LightData,ps as LimitVelocityOverLifetimeModule,gs as LoadingElementOptions,us as LogStats,Ss as LogType,Cs as LookAt,ys as LookAtConstraint,Es as MainModule,Rs as MarkerTrackHandler,hs as MarkerType,vs as MaskableGraphic,fs as Mathf,Ps as MeshCollider,As as MeshRenderer,Ts as MinMaxCurve,bs as MinMaxGradient,Ms as NEEDLE_ENGINE_FEATURE_FLAGS,Is as NEEDLE_ENGINE_MODULES,ac as NEEDLE_progressive,Ds as NEKeyboardEvent,Os as NEPointerEvent,xs as NeedleButtonElement,ks as NeedleEngine,Ls as NeedleEngineModelLoader,Bs as NeedleEngineWebComponent,Fs as NeedleMenu,Ns as NeedlePatchesKey,ws as NeedleUSDZExporter,Us as NeedleXRController,g as NeedleXRSession,Ws as NeedleXRSync,Gs as NeedleXRUtils,Hs as NestedGltf,Xs as NetworkConnection,zs as NetworkedStreamEvents,Vs as NetworkedStreams,_s as Networking,js as NewInstanceModel,Ks as NoiseModule,Qs as ObjectRaycaster,Zs as ObjectUtils,Ys as OffsetConstraint,Js as OneEuroFilter,$s as OneEuroFilterXYZ,qs as OpenURL,et as OrbitControls,at as Outline,st as OwnershipEvent,tt as OwnershipModel,ot as PUBLIC_KEY,rt as Padding,nt as ParticleBurst,it as ParticleSubEmitter,lt as ParticleSystem,dt as ParticleSystemBaseBehaviour,ct as ParticleSystemRenderer,mt as ParticleSystemShapeType,pt as PeerHandle,gt as PeerNetworking,ut as Physics,St as PhysicsExtension,Ct as PhysicsMaterialCombine,yt as PixelationEffect,Et as PlayAnimationOnClick,Rt as PlayAudioOnClick,ht as PlayableDirector,vt as PlayerColor,ft as PlayerState,Pt as PlayerStateEvent,At as PlayerSync,Tt as PlayerView,bt as PlayerViewManager,Mt as PointerEventData,It as PointerType,Dt as PostProcessingEffect,Ot as PostProcessingEffectOrder,xt as PostProcessingHandler,kt as PostProcessingManager,Lt as PreliminaryAction,Bt as PreliminaryTrigger,Ft as PreviewHelper,Nt as PrimitiveType,wt as Progress,Ut as PromiseAllWithErrors,Wt as PromiseErrorResult,Gt as RGBAColor,Ht as RapierPhysics,Xt as RawImage,zt as RaycastOptions,Vt as Rect,_t as RectTransform,jt as ReflectionProbe,Kt as RegisteredAnimationInfo,Qt as RemoteSkybox,Zt as RenderTexture,Yt as RenderTextureSerializer,Jt as Renderer,$t as RendererData,qt as RendererLightmap,eo as Rigidbody,ao as RigidbodyConstraints,so as RoomEvents,to as RotationBySpeedModule,oo as RotationOverLifetimeModule,ro as SceneLightSettings,no as SceneSwitcher,io as ScreenCapture,lo as ScreenSpaceAmbientOcclusion,co as ScreenSpaceAmbientOcclusionN8,mo as ScrollFollow,po as SeeThrough,go as SendQueue,uo as SerializationContext,So as SetActiveOnClick,Co as ShadowCatcher,yo as ShapeModule,Eo as ShapeOverlapResult,Ro as SharpeningEffect,ho as SignalAsset,vo as SignalReceiver,fo as SignalReceiverEvent,Po as SignalTrackHandler,Ao as Size,To as SizeBySpeedModule,bo as SizeOverLifetimeModule,Mo as SkinnedMeshRenderer,Io as SmoothFollow,Do as SpatialGrabRaycaster,Oo as SpatialHtml,xo as SpatialTrigger,ko as SpatialTriggerReceiver,Lo as SpectatorCamera,Bo as SphereCollider,Fo as SphereIntersection,No as SplineContainer,wo as SplineData,Uo as SplineUtils,Wo as SplineWalker,Go as Sprite,Ho as SpriteData,Xo as SpriteRenderer,zo as SpriteSheet,Vo as StateMachineBehaviour,_o as StreamEndedEvent,jo as StreamReceivedEvent,Ko as SubEmitterSystem,Qo as SyncedCamera,Zo as SyncedRoom,Yo as SyncedTransform,Jo as TapGestureTrigger,$o as TeleportTarget,qo as TestRunner,er as TestSceneUtils,ar as TestSimulateUserData,sr as Text,tr as TextBuilder,or as TextExtension,rr as TextureSheetAnimationModule,nr as TiltShiftEffect,ir as Time,lr as ToneMappingEffect,dr as TrackHandler,cr as TrackType,mr as TrailModule,pr as TransformData,gr as TransformGizmo,ur as TriggerBuilder,Sr as TriggerModel,m as TypeStore,Cr as UIRaycastUtils,yr as UIRootComponent,Er as USDDocument,Rr as USDObject,hr as USDWriter,vr as USDZExporter,fr as USDZText,Pr as USDZUIExtension,Ar as UriSerializer,Tr as UsageMarker,br as UserJoinedOrLeftRoomModel,S as VERSION,Mr as VariantAction,Ir as VelocityOverLifetimeModule,Dr as VerticalLayoutGroup,Or as VideoPlayer,xr as ViewBox,kr as ViewDevice,Lr as Vignette,Br as VisibilityAction,Fr as Voip,Nr as Volume,wr as VolumeParameter,Ur as VolumeProfile,Wr as WaitForFrames,Gr as WaitForPromise,Hr as WaitForSeconds,Xr as Watch,zr as WebARCameraBackground,Vr as WebARSessionRoot,_r as WebXR,jr as WebXRButtonFactory,Kr as WebXRImageTracking,Qr as WebXRImageTrackingModel,Zr as WebXRPlaneTracking,Yr as WebXRTrackedImage,Jr as XRControllerFollow,$r as XRControllerModel,qr as XRControllerMovement,en as XRFlag,an as XRRig,sn as XRState,tn as XRStateFlag,on as __Ignore,rn as __internalNotifyObjectDestroyed,nn as activeInHierarchyFieldName,ln as addAttributeChangeCallback,dn as addComponent,cn as addCustomExtensionPlugin,mn as addNewComponent,pn as addPatch,gn as apply,un as applyHMRChanges,Sn as applyPrototypeExtensions,Cn as beginListenDestroy,yn as beginListenInstantiate,En as binaryIdentifierCasts,Rn as build_scene_functions,hn as builtinComponentKeyName,vn as calculateProgress01,fn as clearBalloonMessages,Pn as clearOverlayMessages,An as colorSerializer,Tn as compareAssociation,bn as componentSerializer,Mn as copyTexture,In as createMotion,Dn as debugNet,On as debugOwner,xn as decompressGpuTexture,kn as deepClone,Ln as delay,Bn as delayForFrames,Fn as deserializeObject,Nn as destroy,wn as destroyComponentInstance,Un as determineMimeTypeFromExtension,Wn as disposeObjectResources,Gn as disposeStream,Hn as editorGuidKeyName,Xn as enableSpatialConsole,zn as euler,Vn as eventListSerializer,_n as exportAsGLTF,jn as findByGuid,Kn as findObjectOfType,Qn as findObjectsOfType,Zn as findResourceUsers,Yn as fitCamera,Jn as fitObjectIntoVolume,$n as foreachComponent,qn as foreachComponentEnumerator,ei as forward,ai as generateQRCode,si as generateSeed,ti as getBoundingBox,oi as getCameraController,ri as getComponent,ni as getComponentInChildren,ii as getComponentInParent,li as getComponents,di as getComponentsInChildren,ci as getComponentsInParent,mi as getFormattedDate,pi as getIconElement,gi as getIconTexture,ui as getLoader,Si as getOrAddComponent,Ci as getParam,yi as getParentHierarchyPath,Ei as getPath,Ri as getPeerOptions,hi as getPeerjsInstance,vi as getResourceUserCount,fi as getTempColor,Pi as getTempQuaternion,Ai as getTempVector,Ti as getUrlParams,bi as getVisibleInCustomShadowRendering,Mi as getWorldDirection,Ii as getWorldEuler,Di as getWorldPosition,Oi as getWorldQuaternion,xi as getWorldRotation,ki as getWorldScale,Li as hasCommercialLicense,Bi as hasIndieLicense,Fi as hasPointerEventComponent,Ni as hasProLicense,wi as hideDebugConsole,Ui as imageToCanvas,Wi as instantiate,Gi as invokeLoadedImportPluginHooks,Hi as invokeXRSessionEnd,Xi as invokeXRSessionStart,zi as isActiveInHierarchy,Vi as isActiveSelf,_i as isAndroidDevice,ji as isAnimationAction,Ki as isComponent,Qi as isDebugMode,Zi as isDesktop,Yi as isDestroyed,Ji as isDevEnvironment,$i as isDisposed,qi as isExporting,el as isGLTFModel,al as isHostedOnGlitch,sl as isHotReloadEnabled,tl as isHotReloading,ol as isIPad,rl as isIconElement,nl as isLocalNetwork,il as isMacOS,ll as isMobileDevice,dl as isMozillaXR,cl as isQuest,ml as isResourceTrackingEnabled,pl as isSafari,gl as isUsingInstancing,ul as isiOS,Sl as isiPad,p as loadAsset,Cl as loadPMREM,yl as loadSync,El as logHierarchy,Rl as lookAtInverse,hl as lookAtObject,vl as lookAtScreenPoint,fl as makeId,Pl as makeIdFromRandomWords,Al as makeNameSafeForUSD,Tl as markAsInstancedRendered,bl as microphonePermissionsGranted,Ml as nameof,Il as nameofFactory,Dl as objectSerializer,Ol as offXRSessionEnd,xl as offXRSessionStart,i as onAfterRender,l as onBeforeRender,o as onClear,r as onDestroy,n as onInitialized,c as onStart,d as onUpdate,kl as onXRSessionEnd,Ll as onXRSessionStart,Bl as parseSync,Fl as placeOnSurface,Nl as postprocessFBXMaterials,wl as prefix,Ul as pushState,Wl as randomNumber,Gl as registerBinaryType,Hl as registerComponent,Xl as registerComponentExtension,zl as registerCustomEffectType,Vl as registerExportExtensions,_l as registerExtensions,jl as registerHotReloadType,Kl as registerLoader,Ql as registerPrefabProvider,Zl as registerPrototypeExtensions,Yl as registerType,Jl as relativePathPrefix,$l as removeAttributeChangeCallback,ql as removeComponent,ed as removeCustomImportExtensionType,ad as removePatch,sd as resolveUrl,td as sanitizeString,od as saveImage,rd as screenshot,nd as screenshot2,id as sendDestroyed,ld as serializable,dd as serializeObject,cd as serializeable,md as setActive,pd as setAllowBalloonMessages,gd as setAllowOverlayMessages,ud as setAutoFitEnabled,Sd as setCameraController,Cd as setDestroyed,yd as setDevEnvironment,Ed as setDisposable,Rd as setDontDestroy,hd as setOrAddParamsToUrl,vd as setParam,fd as setParamWithoutReload,Pd as setPeerOptions,Ad as setResourceTrackingEnabled,Td as setState,bd as setVisibleInCustomShadowRendering,Md as setWorldEuler,Id as setWorldPosition,Dd as setWorldPositionXYZ,Od as setWorldQuaternion,xd as setWorldQuaternionXYZW,kd as setWorldRotation,Ld as setWorldRotationXYZ,Bd as setWorldScale,Fd as showBalloonError,Nd as showBalloonMessage,wd as showBalloonWarning,Ud as showDebugConsole,Wd as slerp,Gd as syncDestroy,Hd as syncField,Xd as syncInstantiate,zd as textureToCanvas,Vd as toSourceId,_d as tryCastBinary,jd as tryDetermineMimetypeFromBinary,Kd as tryDetermineMimetypeFromURL,Qd as tryFindObject,Zd as tryGetGuid,Yd as unregisterHotReloadType,Jd as unwatchWrite,$d as useForAutoFit,qd as validate,ec as watchWrite};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-DQdhrcLq.umd.cjs"),i=require("./gltf-progressive-Bfpfaz84.umd.cjs"),a=require("./three-Bf2NBxAw.umd.cjs"),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=a.THREE;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.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;Object.defineProperty(exports,"NEEDLE_ENGINE_FEATURE_FLAGS",{enumerable:!0,get:()=>e.NEEDLE_ENGINE_FEATURE_FLAGS});Object.defineProperty(exports,"NEEDLE_ENGINE_MODULES",{enumerable:!0,get:()=>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.TestSceneUtils=e.TestSceneUtils;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=i.NEEDLE_progressive;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-BV9DUnnS.umd.cjs"),i=require("./gltf-progressive-Bfpfaz84.umd.cjs"),a=require("./three-Bf2NBxAw.umd.cjs"),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=a.THREE;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.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;Object.defineProperty(exports,"NEEDLE_ENGINE_FEATURE_FLAGS",{enumerable:!0,get:()=>e.NEEDLE_ENGINE_FEATURE_FLAGS});Object.defineProperty(exports,"NEEDLE_ENGINE_MODULES",{enumerable:!0,get:()=>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.TestSceneUtils=e.TestSceneUtils;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=i.NEEDLE_progressive;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-tools/engine",
|
|
3
|
-
"version": "4.12.
|
|
3
|
+
"version": "4.12.1",
|
|
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": {
|