@needle-tools/engine 5.1.7 → 5.1.8
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 +3 -0
- package/components.needle.json +1 -1
- package/dist/{needle-engine.bundle-DT6F1AXh.js → needle-engine.bundle-CaD5rOJ0.js} +10 -10
- package/dist/{needle-engine.bundle-1QN--joB.umd.cjs → needle-engine.bundle-D8gP8Nd0.umd.cjs} +3 -3
- package/dist/{needle-engine.bundle-DlX4Rcl_.min.js → needle-engine.bundle-X7Y4A-EO.min.js} +2 -2
- package/dist/needle-engine.d.ts +45 -15
- package/dist/needle-engine.js +277 -277
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/lib/engine/api.d.ts +1 -1
- package/lib/engine/api.js +1 -1
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_init.js +2 -2
- package/lib/engine/engine_init.js.map +1 -1
- package/lib/engine/engine_license.d.ts +7 -7
- package/lib/engine/engine_license.js +71 -71
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_networking_blob.js +3 -3
- package/lib/engine/engine_networking_blob.js.map +1 -1
- package/lib/engine/engine_utils_qrcode.js +2 -2
- package/lib/engine/engine_utils_qrcode.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.js +2 -2
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
- package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
- package/lib/engine/xr/TempXRContext.js +2 -2
- package/lib/engine/xr/TempXRContext.js.map +1 -1
- package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
- package/lib/engine-components/webxr/TeleportTarget.d.ts +21 -8
- package/lib/engine-components/webxr/TeleportTarget.js +21 -8
- package/lib/engine-components/webxr/TeleportTarget.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +18 -1
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +18 -1
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js.map +1 -1
- package/package.json +1 -1
- package/plugins/common/license.js +4 -4
- package/plugins/vite/license.js +4 -4
- package/src/engine/api.ts +1 -1
- package/src/engine/engine_init.ts +2 -2
- package/src/engine/engine_license.ts +68 -68
- package/src/engine/engine_networking_blob.ts +3 -3
- package/src/engine/engine_utils_qrcode.ts +2 -2
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
- package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
- package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
- package/src/engine/webcomponents/needle-engine.ts +2 -2
- package/src/engine/xr/TempXRContext.ts +2 -2
- package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
- package/src/engine-components/webxr/TeleportTarget.ts +23 -10
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +20 -3
|
@@ -2316,11 +2316,11 @@ No('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"]
|
|
|
2316
2316
|
No('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');
|
|
2317
2317
|
No('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');
|
|
2318
2318
|
No('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');
|
|
2319
|
-
No('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.
|
|
2319
|
+
No('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.8";');
|
|
2320
2320
|
No('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');
|
|
2321
|
-
No('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "
|
|
2321
|
+
No('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";');
|
|
2322
2322
|
No('globalThis["__NEEDLE_PUBLIC_KEY__"] = "' + NEEDLE_PUBLIC_KEY + '";');
|
|
2323
|
-
const gi = "5.1.
|
|
2323
|
+
const gi = "5.1.8", Qc = "undefined", Ou = "Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";
|
|
2324
2324
|
Fw && console.log(`Engine version: ${gi} (generator: ${Qc})
|
|
2325
2325
|
Project built at ${Ou}`);
|
|
2326
2326
|
const Sr = NEEDLE_PUBLIC_KEY, Rs = "needle_isActiveInHierarchy", va = "builtin_components", qd = "needle_editor_guid";
|
|
@@ -47032,7 +47032,7 @@ class Ju {
|
|
|
47032
47032
|
}
|
|
47033
47033
|
// private async handleRuntimeLicense(loadingElement: HTMLElement) {
|
|
47034
47034
|
// // First check if we have a commercial license
|
|
47035
|
-
// let commercialLicense =
|
|
47035
|
+
// let commercialLicense = __sKHtRdk();
|
|
47036
47036
|
// // if it's the case then we don't need to perform a runtime check
|
|
47037
47037
|
// if (commercialLicense) return;
|
|
47038
47038
|
// // If we don't have a commercial license, then we need to display our message
|
|
@@ -47050,10 +47050,10 @@ class Ju {
|
|
|
47050
47050
|
// nonCommercialContainer.style.opacity = "0";
|
|
47051
47051
|
// loadingElement.appendChild(nonCommercialContainer);
|
|
47052
47052
|
// // Use the runtime license check
|
|
47053
|
-
// if (!isDevEnvironment() &&
|
|
47053
|
+
// if (!isDevEnvironment() && __pRlh) {
|
|
47054
47054
|
// if (debugLicense) console.log("Waiting for runtime license check");
|
|
47055
|
-
// await
|
|
47056
|
-
// commercialLicense =
|
|
47055
|
+
// await __pRlh;
|
|
47056
|
+
// commercialLicense = __sKHtRdk();
|
|
47057
47057
|
// }
|
|
47058
47058
|
// if (commercialLicense) return;
|
|
47059
47059
|
// nonCommercialContainer.style.transition = "opacity .5s ease-in-out";
|
|
@@ -48928,6 +48928,7 @@ export {
|
|
|
48928
48928
|
nn as LogType,
|
|
48929
48929
|
EC as LookAt,
|
|
48930
48930
|
fl as LookAtConstraint,
|
|
48931
|
+
To as LuMYUbW,
|
|
48931
48932
|
L as MODULES,
|
|
48932
48933
|
di as MainModule,
|
|
48933
48934
|
$u as MarkerType,
|
|
@@ -49145,11 +49146,10 @@ export {
|
|
|
49145
49146
|
Q_ as XRRig,
|
|
49146
49147
|
mi as XRState,
|
|
49147
49148
|
Ms as XRStateFlag,
|
|
49148
|
-
mf as
|
|
49149
|
-
Mn as _ERXbX,
|
|
49149
|
+
mf as _VIq,
|
|
49150
49150
|
lB as __Ignore,
|
|
49151
49151
|
dj as __internalNotifyObjectDestroyed,
|
|
49152
|
-
|
|
49152
|
+
Mn as __sKHtRdk,
|
|
49153
49153
|
Rs as activeInHierarchyFieldName,
|
|
49154
49154
|
jm as addAttributeChangeCallback,
|
|
49155
49155
|
Fs as addComponent,
|
package/dist/{needle-engine.bundle-1QN--joB.umd.cjs → needle-engine.bundle-D8gP8Nd0.umd.cjs}
RENAMED
|
@@ -140,7 +140,7 @@ void main(){
|
|
|
140
140
|
#__vconsole .vc-mask {
|
|
141
141
|
overflow: hidden;
|
|
142
142
|
}
|
|
143
|
-
`,jo?.prepend(i),s===!0&&E0()<=0&&Q0(),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.":"")),Ll=!1,ni=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function $1(){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"),ni?.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 Tm="padding: 10px; font-family: monospace;",ab="margin-bottom: 10px;",Fo="margin-bottom: 10px; margin-top: 15px;",V1="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Y0="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",W1=Y0,G1=Y0+" word-break: break-all;";function In(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${V1}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${W1}'>${i.label}</td><td style='${G1}'>${n}</td></tr>`}return t+="</tbody></table>",t}function K0(){try{if(Yu())return"✅"}catch{}return"❌"}function H1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Tm}'>`;const i=iP();t+=`<h3 style='${ab}'>Device: ${i}</h3>`,t+=In([{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+=In(n,!1)),t+="</div>",t+=`<div style='${Tm} margin-top: 20px;'>`,t+=`<h3 style='${ab}'>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:K0()}];t+=In(l,!1),t+="</div>",e(t)}),s}function q1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Tm}'>`;const i=X1();i.length>0&&(t+=`<h3 style='${Fo}'>General GPU Info</h3>`,t+=In(i,!1));const n=Y1();n.length>0&&(t+=`<h3 style='${Fo}'>WebGL</h3>`,t+=In(n,!1));const o=K1();o.length>0&&(t+=`<h3 style='${Fo}'>WebGL 2 Features</h3>`,t+=In(o,!1));const r=Z1();r.length>0&&(t+=`<h3 style='${Fo}'>WebGL Limits</h3>`,t+=In(r,!1));const a=J1();a.length>0&&(t+=`<h3 style='${Fo}'>Texture Formats</h3>`,t+=In(a,!1));const l=await eP();if(l.length>0&&(t+=`<h3 style='${Fo}'>WebGPU</h3>`,t+=In(l,!1)),exports.DeviceUtilities.isSafari()){const h=tP();h.length>0&&(t+=`<h3 style='${Fo}'>Safari GPU Info</h3>`,t+=In(h,!1))}t+="</div>",e(t)}),s}function X1(){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=Z0();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=Q1(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 Q1(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 Y1(){const s=[],e=Z0();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:K0()})),s}function K1(){const s=[];try{const e=Yu();if(!e)return s;s.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function Z1(){const s=[];try{const e=X0();if(!e)return s;const t=e instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(s.push({label:"⚡ Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function J1(){const s=[];try{_u()&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const t=Yu();t&&(s.push({label:"WebGL 2 RGBA32F",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:t.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 eP(){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 Z0(){try{const s=X0();if(!s)return null;const e=s.getExtension("WEBGL_debug_renderer_info"),t=e?s.getParameter(e.UNMASKED_RENDERER_WEBGL):s.getParameter(s.RENDERER),i=e?s.getParameter(e.UNMASKED_VENDOR_WEBGL):s.getParameter(s.VENDOR),n=s.getParameter(s.VERSION);let o;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(o=r[1])}return{renderer:t,vendor:i,version:n,angle:o}}catch{return null}}function tP(){const s=[];try{const e=_u();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:i})}}}catch{}try{const e=_u();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function iP(){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 nP(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function sP(){const s=document.querySelector("#__vconsole");return s||null}const Kh=x("debugtypes");class oP{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){Kh&&console.warn("TypeStore: Created",this)}add(e,t){Kh&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?Kh&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){Kh&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const rP=Symbol("BuiltInType"),O=new oP,Gg=function(s){O.get(s.name)||O.add(s.name,s)};class aP{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}exports.AnimationUtils=void 0;(s=>{function e(d,u){const f=d.getRoot();return f&&(f.userData.static||f.matrixAutoUpdate===!1||f.matrixWorldAutoUpdate===!1)?((u===!0||u===void 0&&E())&&console.warn(`AnimationUtils: The root object (${f.name||f.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:f.userData.static,name:f.userData.name,tag:f.userData.tag,matrixAutoUpdate:f.matrixAutoUpdate,matrixWorldAutoUpdate:f.matrixWorldAutoUpdate}),!1):!0}s.testIfRootCanAnimate=e;function t(d){const u=d._actions;return u||null}s.tryGetActionsFromMixer=t;function i(d,u){if(u||(u=new Array),d)d.animations&&u.push(...d.animations);else return u;if(d.children)for(const f of d.children)i(f,u);return u}s.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function o(d,u,f){if(!d)return;if(d[n]===void 0){if(!f)return;d[n]=new Set}const m=d[n];f?m.add(u):m.has(u)&&m.delete(u)}s.setObjectAnimated=o;function r(d){if(!d)return!1;const u=d[n];return u!==void 0&&u.size>0}s.getObjectAnimated=r;function a(d){if(!d||!d.animations)return console.debug("No animations found in file"),null;const u="scene"in d?d.scene:d,f=new Array;for(let g=0;g<d.animations.length;g++){const v=d.animations[g];if(!v.tracks||v.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const y in v.tracks){const _=v.tracks[y],b=c.PropertyBinding.parseTrackName(_.name);let w=c.PropertyBinding.findNode(u,b.nodeName);if(!w){const k=_.__objectName??_.name.substring(0,_.name.indexOf("."));if(w=u.getObjectByProperty("uuid",k),!w)continue}let P=m(w)||m(u);if(!P){const k=O.get("Animation");if(P=u.addComponent(k),!P){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}f.push(P),P.addClip&&P.addClip(v)}}return f;function m(g){if(!g)return null;const v=g.userData?.components;if(v&&v.length>0)for(let y=0;y<v.length;y++){const _=v[y];if(_.isAnimationComponent===!0)return _}return m(g.parent)}}s.autoplayAnimations=a;function l(){return new c.AnimationClip("empty",0,[])}s.emptyClip=l;function h(d){const u=d?.duration??.3;let f={x:1,y:1,z:1};d?.scale!==void 0&&(typeof d.scale=="number"?f={x:d.scale,y:d.scale,z:d.scale}:f=d.scale);const m=d?.type??"linear",g=d?.scaleFactor??1.2,v=new Array,y=new Array;switch(m){case"linear":v.push(0,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g);break;case"spring":v.push(0,u*.3,u*.5,u*.7,u*.9,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g,f.x*.9,f.y*.9,f.z*.9,f.x*1.05,f.y*1.05,f.z*1.05,f.x*.98,f.y*.98,f.z*.98,f.x,f.y,f.z);break}const _=new c.KeyframeTrack(".scale",v,y);return new c.AnimationClip("scale",v[v.length-1],[_])}s.createScaleClip=h})(exports.AnimationUtils||(exports.AnimationUtils={}));const Ge=function(s){return p(s)},p=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=lb(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=lb(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function lb(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const cb=x("debugcomponentevents");class Ku{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),cb&&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(cb&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const J0=x("debugdefines");xo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');xo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');xo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');xo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');xo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.7";');xo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');xo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 17 2026 12:05:24 GMT+0000 (Coordinated Universal Time)";');xo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Qt="5.1.7",Na="undefined",Dc="Fri Jul 17 2026 12:05:24 GMT+0000 (Coordinated Universal Time)";J0&&console.log(`Engine version: ${Qt} (generator: ${Na})
|
|
143
|
+
`,jo?.prepend(i),s===!0&&E0()<=0&&Q0(),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.":"")),Ll=!1,ni=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function $1(){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"),ni?.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 Tm="padding: 10px; font-family: monospace;",ab="margin-bottom: 10px;",Fo="margin-bottom: 10px; margin-top: 15px;",V1="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Y0="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",W1=Y0,G1=Y0+" word-break: break-all;";function In(s,e=!1){e&&s.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${V1}'>`;t+="<tbody>";for(const i of s){const n=typeof i.value=="boolean"?i.value?"✅":"❌":i.value;t+=`<tr><td style='${W1}'>${i.label}</td><td style='${G1}'>${n}</td></tr>`}return t+="</tbody></table>",t}function K0(){try{if(Yu())return"✅"}catch{}return"❌"}function H1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("device-utilities","📱 Device Info");return s.on("renderTab",function(e){let t=`<div style='${Tm}'>`;const i=iP();t+=`<h3 style='${ab}'>Device: ${i}</h3>`,t+=In([{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+=In(n,!1)),t+="</div>",t+=`<div style='${Tm} margin-top: 20px;'>`,t+=`<h3 style='${ab}'>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:K0()}];t+=In(l,!1),t+="</div>",e(t)}),s}function q1(){if(!globalThis.VConsole)return;const s=new VConsole.VConsolePlugin("graphics-info","🎨 Graphics Info");return s.on("renderTab",async function(e){let t=`<div style='${Tm}'>`;const i=X1();i.length>0&&(t+=`<h3 style='${Fo}'>General GPU Info</h3>`,t+=In(i,!1));const n=Y1();n.length>0&&(t+=`<h3 style='${Fo}'>WebGL</h3>`,t+=In(n,!1));const o=K1();o.length>0&&(t+=`<h3 style='${Fo}'>WebGL 2 Features</h3>`,t+=In(o,!1));const r=Z1();r.length>0&&(t+=`<h3 style='${Fo}'>WebGL Limits</h3>`,t+=In(r,!1));const a=J1();a.length>0&&(t+=`<h3 style='${Fo}'>Texture Formats</h3>`,t+=In(a,!1));const l=await eP();if(l.length>0&&(t+=`<h3 style='${Fo}'>WebGPU</h3>`,t+=In(l,!1)),exports.DeviceUtilities.isSafari()){const h=tP();h.length>0&&(t+=`<h3 style='${Fo}'>Safari GPU Info</h3>`,t+=In(h,!1))}t+="</div>",e(t)}),s}function X1(){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=Z0();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=Q1(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 Q1(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 Y1(){const s=[],e=Z0();return e&&(s.push({label:"📊 WebGL Version",value:e.version}),s.push({label:"🎮 WebGL 2 Available",value:K0()})),s}function K1(){const s=[];try{const e=Yu();if(!e)return s;s.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"✅":"❌"}),s.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"✅":"❌"}),s.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"✅":"❌"}),s.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"✅":"❌"}),s.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"✅":"❌"}),s.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"✅":"❌"})}catch{}return s}function Z1(){const s=[];try{const e=X0();if(!e)return s;const t=e instanceof WebGL2RenderingContext;s.push({label:"📏 Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),s.push({label:"🎨 Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),s.push({label:"🔗 Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),s.push({label:"🎯 Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(s.push({label:"⚡ Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),s.push({label:"🔄 Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),s.push({label:"📐 Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return s}function J1(){const s=[];try{_u()&&(s.push({label:"WebGL 1 RGBA",value:"✅"}),s.push({label:"WebGL 1 RGB",value:"✅"}));const t=Yu();t&&(s.push({label:"WebGL 2 RGBA32F",value:t.getExtension("EXT_color_buffer_float")?"✅":"❌"}),s.push({label:"WebGL 2 RGB32F",value:t.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 eP(){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 Z0(){try{const s=X0();if(!s)return null;const e=s.getExtension("WEBGL_debug_renderer_info"),t=e?s.getParameter(e.UNMASKED_RENDERER_WEBGL):s.getParameter(s.RENDERER),i=e?s.getParameter(e.UNMASKED_VENDOR_WEBGL):s.getParameter(s.VENDOR),n=s.getParameter(s.VERSION);let o;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(o=r[1])}return{renderer:t,vendor:i,version:n,angle:o}}catch{return null}}function tP(){const s=[];try{const e=_u();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&s.push({label:"🍎 Apple GPU",value:i})}}}catch{}try{const e=_u();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&s.push({label:"🗜️ PVRTC Support",value:"✅"})}catch{}return s}function iP(){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 nP(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function sP(){const s=document.querySelector("#__vconsole");return s||null}const Kh=x("debugtypes");class oP{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){Kh&&console.warn("TypeStore: Created",this)}add(e,t){Kh&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?Kh&&i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e):(this._types.set(e,t),this._reverseTypes.set(t,e))}addLazy(e,t){this._types.has(e)||this._lazyLoaders.set(e,t)}get(e){return this._types.get(e)||null}async getAsync(e){const t=this._types.get(e);if(t)return t;const i=this._lazyLoaders.get(e);if(i){Kh&&console.warn("LAZY LOAD TYPE",e);const n=await i();return this.add(e,n),this._lazyLoaders.delete(e),n}return null}getKey(e){return this._reverseTypes.get(e)||null}}const rP=Symbol("BuiltInType"),O=new oP,Gg=function(s){O.get(s.name)||O.add(s.name,s)};class aP{context;mixers=[];constructor(e){this.context=e}onDestroy(){this.mixers.forEach(e=>e.stopAllAction()),this.mixers.length=0}registerAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.registerAnimationMixer called with null or undefined mixer");return}this.mixers.includes(e)||this.mixers.push(e)}unregisterAnimationMixer(e){if(!e){console.warn("AnimationsRegistry.unregisterAnimationMixer called with null or undefined mixer");return}const t=this.mixers.indexOf(e);t!==-1&&this.mixers.splice(t,1)}}exports.AnimationUtils=void 0;(s=>{function e(d,u){const f=d.getRoot();return f&&(f.userData.static||f.matrixAutoUpdate===!1||f.matrixWorldAutoUpdate===!1)?((u===!0||u===void 0&&E())&&console.warn(`AnimationUtils: The root object (${f.name||f.type}) of this AnimationAction has matrixAutoUpdate or matrixWorldAutoUpdate set to false. This may prevent the animation from working correctly. If the object is marked as static, try to change it to dynamic.`,{static:f.userData.static,name:f.userData.name,tag:f.userData.tag,matrixAutoUpdate:f.matrixAutoUpdate,matrixWorldAutoUpdate:f.matrixWorldAutoUpdate}),!1):!0}s.testIfRootCanAnimate=e;function t(d){const u=d._actions;return u||null}s.tryGetActionsFromMixer=t;function i(d,u){if(u||(u=new Array),d)d.animations&&u.push(...d.animations);else return u;if(d.children)for(const f of d.children)i(f,u);return u}s.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function o(d,u,f){if(!d)return;if(d[n]===void 0){if(!f)return;d[n]=new Set}const m=d[n];f?m.add(u):m.has(u)&&m.delete(u)}s.setObjectAnimated=o;function r(d){if(!d)return!1;const u=d[n];return u!==void 0&&u.size>0}s.getObjectAnimated=r;function a(d){if(!d||!d.animations)return console.debug("No animations found in file"),null;const u="scene"in d?d.scene:d,f=new Array;for(let g=0;g<d.animations.length;g++){const v=d.animations[g];if(!v.tracks||v.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const y in v.tracks){const _=v.tracks[y],b=c.PropertyBinding.parseTrackName(_.name);let w=c.PropertyBinding.findNode(u,b.nodeName);if(!w){const k=_.__objectName??_.name.substring(0,_.name.indexOf("."));if(w=u.getObjectByProperty("uuid",k),!w)continue}let P=m(w)||m(u);if(!P){const k=O.get("Animation");if(P=u.addComponent(k),!P){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}f.push(P),P.addClip&&P.addClip(v)}}return f;function m(g){if(!g)return null;const v=g.userData?.components;if(v&&v.length>0)for(let y=0;y<v.length;y++){const _=v[y];if(_.isAnimationComponent===!0)return _}return m(g.parent)}}s.autoplayAnimations=a;function l(){return new c.AnimationClip("empty",0,[])}s.emptyClip=l;function h(d){const u=d?.duration??.3;let f={x:1,y:1,z:1};d?.scale!==void 0&&(typeof d.scale=="number"?f={x:d.scale,y:d.scale,z:d.scale}:f=d.scale);const m=d?.type??"linear",g=d?.scaleFactor??1.2,v=new Array,y=new Array;switch(m){case"linear":v.push(0,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g);break;case"spring":v.push(0,u*.3,u*.5,u*.7,u*.9,u),y.push(f.x,f.y,f.z,f.x*g,f.y*g,f.z*g,f.x*.9,f.y*.9,f.z*.9,f.x*1.05,f.y*1.05,f.z*1.05,f.x*.98,f.y*.98,f.z*.98,f.x,f.y,f.z);break}const _=new c.KeyframeTrack(".scale",v,y);return new c.AnimationClip("scale",v[v.length-1],[_])}s.createScaleClip=h})(exports.AnimationUtils||(exports.AnimationUtils={}));const Ge=function(s){return p(s)},p=function(s){if(s===void 0&&(s=null),!Array.isArray(s))s=lb(s);else for(let e=0;e<s.length;e++){const t=s[e];s[e]=lb(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=s}};function lb(s){switch(s?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return s}const cb=x("debugcomponentevents");class Ku{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),cb&&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(cb&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const J0=x("debugdefines");xo('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');xo('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');xo('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');xo('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');xo('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.8";');xo('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');xo('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";');xo('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const Qt="5.1.8",Na="undefined",Dc="Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";J0&&console.log(`Engine version: ${Qt} (generator: ${Na})
|
|
144
144
|
Project built at ${Dc}`);const lo=NEEDLE_PUBLIC_KEY,Vn="needle_isActiveInHierarchy",Yo="builtin_components",mc="needle_editor_guid";function xo(s){try{(0,eval)(s)}catch(e){J0&&console.error(e)}}globalThis.NEEDLE_USE_RAPIER=globalThis.NEEDLE_USE_RAPIER!==void 0?globalThis.NEEDLE_USE_RAPIER:!0;globalThis.NEEDLE_USE_POSTPROCESSING=globalThis.NEEDLE_USE_POSTPROCESSING!==void 0?globalThis.NEEDLE_USE_POSTPROCESSING:!0;const Hg={experimentalSmartHierarchyUpdate:!1},yi=Symbol("shadowDomOwner"),lP=x("debugpatch");function Zu(s,e,t,i){const n=lP===e;if(!t&&!i)return;const o=e+"___needle";hP(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]=db(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]=db(l,s,e);else{const h=this[o];ew(s,e,this,h,l),this[o]=l,tw(s,e,this,h,l)}},get:function(){const l=this[o];return typeof l=="function"&&l[o]?l[o]:l}}))}function cP(s,e,t){const i=qg(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 hb=Symbol("Needle:Patches:WrappedFunction");function db(s,e,t){if(s[hb])return s;const i=function(...n){ew(e,t,this,...n);const o=s.apply(this,n);return tw(e,t,this,o,...n),o};return i[hb]=!0,i}const Wd="Needle:Patches";function Rm(){return globalThis[Wd]||(globalThis[Wd]=new WeakMap),globalThis[Wd]}function qg(s,e){const t=Rm().get(s);return t?t.get(e):null}function hP(s,e,t,i){let n=Rm().get(s);n||(n=new Map,Rm().set(s,n));let o=n.get(e);o||(o=[],n.set(e,o)),o.push({prefix:t,postfix:i})}function ew(s,e,t,...i){if(!t)return;const n=qg(s,e);if(n)for(const o of n)o.prefix?.call(t,...i)}function tw(s,e,t,i,...n){if(!t)return;const o=qg(s,e);if(o)for(const r of o)r.postfix?.call(t,i,...n)}function dP(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 E()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function iw(s){const e=s;return!!(e.parser&&e.parser.json)}var Ju=(s=>(s[s.None=0]="None",s[s.DontExport=1]="DontExport",s))(Ju||{});const bu=Symbol("component-name");function ef(s){return s&&typeof s=="object"&&s.isComponent}const uP=Symbol("object"),_p=new xi(()=>new c.Vector3,20);class nw{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return _p.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return _p.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return _p.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,o,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=o,this._tangentVelocity=r}}class sw{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}}class ow{object;collider;constructor(e,t){this.object=e,this.collider=t}}class vu{constructor(e){this.context=e,this.root.style.cssText=`
|
|
145
145
|
position: absolute;
|
|
146
146
|
width: 1px; height: 1px;
|
|
@@ -880,7 +880,7 @@ Possible solutions:
|
|
|
880
880
|
Render:`,{shaders:this.renderer.info.programs?.length,...this.renderer.info.render},`
|
|
881
881
|
Memory:`,{usedMemory:t,...this.renderer.info.memory},`
|
|
882
882
|
Renderer:`,{dpr:this.renderer.getPixelRatio(),windowDpr:window.devicePixelRatio,antialias:i.getContextAttributes()?.antialias,samples:i.getParameter(i.SAMPLES),resolution:`${this.renderer.domElement.width}x${this.renderer.domElement.height}`},`
|
|
883
|
-
Target Framerate: `+this.targetFrameRate)}}this._dispatchReadyAfterFrame&&(this._dispatchReadyAfterFrame=!1,this.domElement.dispatchEvent(new CustomEvent("ready")),se.dispatchCallback(re.ContextFirstFrameRendered,this))}_tempClearColor=new c.Color;_tempClearColor2=new c.Color;renderNow(e){if(!e&&(e=this.mainCamera,!e))return!1;if(this.handleRendererContextLost(),this._isRendering=!0,this.renderRequiredTextures(),this.renderer.toneMapping!==c.NoToneMapping&&Hw(),this.postprocessing.update(),this.composer&&!this.isInXR){e&&"setMainCamera"in this.composer&&this.composer.passes[0]?.mainCamera!=e&&this.composer.setMainCamera(e);const t=this.renderer.getClearColor(this._tempClearColor),i=this.renderer.getClearAlpha();this._tempClearColor2.copy(t),this.renderer.setClearColor(t.convertSRGBToLinear(),this.renderer.getClearAlpha()),this.composer.render(this.time.deltaTime),this.renderer.setClearColor(this._tempClearColor2,i)}else e&&(this.isInXR&&exports.DeviceUtilities.isMacOS()&&this.renderer.clearDepth(),this.renderer.render(this.scene,e));return this._isRendering=!1,!0}_contextRestoreTries=0;handleRendererContextLost(){this.time.frame%10&&this.renderer.getContext().isContextLost()&&this._contextRestoreTries++<100&&(console.warn("Attempting to recover WebGL context..."),this.renderer.forceContextRestore())}_wasPaused=!1;onHandlePaused(){const e=this.evaluatePaused();if(this._wasPaused!==e){Yk&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){const i=this.scripts_pausedChanged[t];i.activeAndEnabled&&i.onPausedChanged!==void 0&&(z.Current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new c.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){const i=new c.DepthTexture(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new c.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=c.NearestFilter,this._renderTarget.texture.magFilter=c.NearestFilter,this._renderTarget.texture.format=c.RGBAFormat)}const e=this._renderTarget;e.texture&&(e.texture.colorSpace=this.renderer.outputColorSpace);const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){const i=this.coroutines[e];for(let n=0;n<i.length;n++)try{const o=i[n];if(!o.comp||o.comp.destroyed||!o.main||o.comp.enabled===!1){Zk&&console.log("Removing coroutine",o.comp,o.comp.enabled),i.splice(n,1),--n;continue}const a=o.chained;if(a&&a.length>0){const u=a[a.length-1].next();if(u.done&&a.pop(),t(u)&&(o.chained||(o.chained=[]),o.chained.push(u.value)),!u.done)continue}const l=o.main.next();if(l.done===!0){i.splice(n,1),--n;continue}const h=l.value;if(t(h)){if(h.next().done)continue;o.chained||(o.chained=[]),o.chained.push(h)}else if(h instanceof Promise){const d=h;o.chained||(o.chained=[]);const u=Ew(d);o.chained?.push(u);continue}}catch(o){console.error(o)}}function t(i){return!!(i&&i.next&&i.return)}}}const Rp=x("debugwebxr");class ax{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Rp&&console.log("FOUND AVATAR HEAD",e.name),i.head=new J("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Rp&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new J("",t,e)),!i.rightHand&&n.includes("right")&&(Rp&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new J("",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 ne 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 ne(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 ne(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 ne(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ne(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 ne(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ne(e[0],e[1],e[2],e[3]);if(e.length===3)return new ne(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ne(e)}}const At=new c.Vector3,zb=new c.Vector3,Nb=new c.Quaternion,tO=x("debuggizmos"),ln=8947848,Ap=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[Hm]!==void 0}static setVisible(e){for(const t of Bi.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=ln);const l=V.active?.rigScale??1,h=Bi.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=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),At.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawDirection(e,t,i=ln,n=0,o=!0,r=1){if(!B.enabled)return;const a=Bi.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(At.set(0,0,-r),Nb.set(t.x,t.y,t.z,t.w),At.applyQuaternion(Nb)):(At.set(t.x,t.y,t.z),At.multiplyScalar(r)),l.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,dn(a.material,i)}static DrawLine(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.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,dn(r.material,i)}static DrawCircle(e,t,i,n=ln,o=0,r=!0){if(!B.enabled)return;const a=Bi.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,At.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,dn(a.material,n)}static DrawWireSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.getSphere(t,n,!0);mr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.getSphere(t,n,!1);mr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,dn(r.material,i)}static DrawWireBox(e,t,i=ln,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Bi.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,dn(a.material,i)}static DrawWireBox3(e,t=ln,i=0,n=!0){if(!B.enabled)return;const o=Bi.getBox(i);o.position.copy(e.getCenter(At)),o.scale.copy(e.getSize(At)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,dn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=ln,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Bi.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),At.set(t.x,t.y,t.z).sub(zb.set(e.x,e.y,e.z)).normalize());const h=At.set(t.x,t.y,t.z).sub(zb.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,dn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Bi.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,dn(t.material,e.color??ln)}}const iO=new c.BoxGeometry(1,1,1);function dy(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(iO);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function dn(s,e){if(Array.isArray(s)){for(const i of s)dn(i,e);return}const t=e instanceof ne?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Hm=Symbol("GizmoCache");class Bi{static familyName="needle-gizmos";static ensureFont(){let e=ae.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ae.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ae.__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),tO&&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 ae.__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(z.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(z.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(z.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(Ap*3),3),t.geometry.setAttribute("position",i);const n=j(0,1,0),o=j(0,0,1),r=j(o);r.cross(n).normalize();const a=j(r),l=Math.PI*2/(Ap-1);for(let h=0;h<Ap+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(z.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(z.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(z.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(z.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[Hm]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(z.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,ae.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ae.__webpack_exports__default.MeshUIBaseElement){if(yr(n))continue;const o=e.isInVR,r=!1,a=!o;nh(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(),yr(r)!=!0&&r[Hm].push(r))}}}const qt=x("debugphysics"),nO=x("debugworker"),$b=new c.Layers;class Pr{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){$b.set(e),this.layerMask=$b}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class uy{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Xa{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 Pr;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){qt&&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 qt&&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)),qt&&console.time("raycast"),o.length=0,Xa._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))),Xa._raycasting--,qt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&Vb(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 K.GroundedSkybox&&(u=!1),d==="lod"){const f=oe.getRaycastMesh(o);f&&(a.geometry=f)}if(!u&&oO(a,e,i)||(n.useAcceleratedRaycast!==!1?Mu.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,qt&&i.length!=h){const f=i[i.length-1];B.DrawWireSphere(f.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof K.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const f=l(e);if(f===!1)return;f==="continue in children"&&(h=!1)}if(u&&Vb(u)||(h=!1),h){if(a){const f=this.sphere;f.center.copy(t),f.radius=i;const m=o.length;if(Mu.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const f=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(f)){const g=te(e),v=g.distanceTo(m.center),y=new uy(e,v,g);if(o.push(y),!r)return}}}if(e.children)for(const f of e.children){const m=o.length;if(this.intersectSphere(f,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function Vb(s){return!(s.index&&s.index.array.length<3)}const zo=new c.Sphere,ld=new c.Plane,sO=new c.Matrix3;function oO(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 K.GroundedSkybox){ld.setFromNormalAndCoplanarPoint(j(0,1,0),j(0,-l.position.y,0)),ld.applyMatrix4(l.matrixWorld,sO);const u=o.ray.intersectPlane(ld,j());if(u){zo.copy(h),zo.applyMatrix4(l.matrixWorld);const m=j(u).sub(o.ray.origin).length(),g=zo.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:ld.normal.clone()})}return}zo.copy(h),zo.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(zo,j());if(d){const u=j(d).sub(o.ray.origin),f=u.length();if(f>zo.radius){const m=u.clone().normalize();r.push({distance:f,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Mu;(s=>{let e=0;function t(b,w,P,k,M){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const I=w,F=I.bvhNeedsUpdate;if(!I.staticGenerator)l(),r&&(I.staticGenerator=new r(w),I.staticGenerator.applyWorldTransforms=!1,I.staticGeometry=I.staticGenerator.generate(),D.boundsTree=a?.call(I.staticGeometry),I.staticGeometryLastUpdate=performance.now()+Math.random()*200,I.bvhNeedsUpdate=!0);else if(D.boundsTree&&(I.autoUpdateMeshBvhInterval!==void 0&&I.autoUpdateMeshBvhInterval>=0||F===!0)){const $=performance.now(),W=$-I.staticGeometryLastUpdate,T=I.autoUpdateMeshBvhInterval??100;(F||W>T)&&(qt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),I.bvhNeedsUpdate=!1,I.staticGeometryLastUpdate=$,I.staticGenerator?.generate(I.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||_();let I=!0;if((k.xr||D[g]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(I=!1),I&&f){if(D[m]===void 0){let F=null;if(y.length>0){const $=y.shift();$&&!$.running&&(F=$)}if(!F&&v.length<3)try{nO&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ea&&Ea.tagName.toUpperCase()==="SCRIPT"&&Ea.src||new URL("needle-engine.bundle-1QN--joB.umd.cjs",document.baseURI).href),F=new f,v.push(F)}catch($){$ instanceof DOMException&&$.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($),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log($)),e++}if(F!=null&&!F.running){const $=w.name;qt&&console.log("<<<< worker start",$,F),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{F.generate(W).then(T=>{D[m]="done",D.boundsTree=T}).catch(T=>{D[m]="failed - "+T?.message,D[g]=!1,qt&&console.error("Failed to generate mesh bvh on worker",T)}).finally(()=>{qt&&console.log(">>>>> worker done",$,{hasBoundsTre:D.boundsTree!=null}),y.push(F),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(T){console.error("Failed to generate mesh bvh on worker",T)}}else qt&&console.warn("No worker available")}}else(!u||!I)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const I=b,F=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),qt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(qt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return qt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const $=I.firstHitOnly;return I.firstHitOnly=!1,I.intersectObject(w,!1,P),I.firstHitOnly=$,w.raycast=F,!0}else if(b instanceof c.Sphere){const I=D.boundsTree;if(I){const F=b;if(h.copy(w.matrixWorld).invert(),F.applyMatrix4(h),I.intersectsSphere(F)){const W=te(w),T=W.distanceTo(F.center),U=new uy(w,T,W);P.push(U)}}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-DE_m5MvL.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(qt||E())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,f=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),v=[],y=[];function _(){d=!0,u=!0,Promise.resolve().then(()=>aL).then(b=>{f=b.GenerateMeshBVHWorker}).catch(b=>{qt||E()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Mu||(Mu={}));const Wb=Symbol("gltf-loader-internal-usage-tracker"),rO=x("debugusers");class La{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return La._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(){La._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[Wb]=e._loadingId),r)),o},null}afterRoot(e){La._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[Wb],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{rO&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class lx{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:
|
|
883
|
+
Target Framerate: `+this.targetFrameRate)}}this._dispatchReadyAfterFrame&&(this._dispatchReadyAfterFrame=!1,this.domElement.dispatchEvent(new CustomEvent("ready")),se.dispatchCallback(re.ContextFirstFrameRendered,this))}_tempClearColor=new c.Color;_tempClearColor2=new c.Color;renderNow(e){if(!e&&(e=this.mainCamera,!e))return!1;if(this.handleRendererContextLost(),this._isRendering=!0,this.renderRequiredTextures(),this.renderer.toneMapping!==c.NoToneMapping&&Hw(),this.postprocessing.update(),this.composer&&!this.isInXR){e&&"setMainCamera"in this.composer&&this.composer.passes[0]?.mainCamera!=e&&this.composer.setMainCamera(e);const t=this.renderer.getClearColor(this._tempClearColor),i=this.renderer.getClearAlpha();this._tempClearColor2.copy(t),this.renderer.setClearColor(t.convertSRGBToLinear(),this.renderer.getClearAlpha()),this.composer.render(this.time.deltaTime),this.renderer.setClearColor(this._tempClearColor2,i)}else e&&(this.isInXR&&exports.DeviceUtilities.isMacOS()&&this.renderer.clearDepth(),this.renderer.render(this.scene,e));return this._isRendering=!1,!0}_contextRestoreTries=0;handleRendererContextLost(){this.time.frame%10&&this.renderer.getContext().isContextLost()&&this._contextRestoreTries++<100&&(console.warn("Attempting to recover WebGL context..."),this.renderer.forceContextRestore())}_wasPaused=!1;onHandlePaused(){const e=this.evaluatePaused();if(this._wasPaused!==e){Yk&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){const i=this.scripts_pausedChanged[t];i.activeAndEnabled&&i.onPausedChanged!==void 0&&(z.Current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new c.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){const i=new c.DepthTexture(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new c.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=c.NearestFilter,this._renderTarget.texture.magFilter=c.NearestFilter,this._renderTarget.texture.format=c.RGBAFormat)}const e=this._renderTarget;e.texture&&(e.texture.colorSpace=this.renderer.outputColorSpace);const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){const i=this.coroutines[e];for(let n=0;n<i.length;n++)try{const o=i[n];if(!o.comp||o.comp.destroyed||!o.main||o.comp.enabled===!1){Zk&&console.log("Removing coroutine",o.comp,o.comp.enabled),i.splice(n,1),--n;continue}const a=o.chained;if(a&&a.length>0){const u=a[a.length-1].next();if(u.done&&a.pop(),t(u)&&(o.chained||(o.chained=[]),o.chained.push(u.value)),!u.done)continue}const l=o.main.next();if(l.done===!0){i.splice(n,1),--n;continue}const h=l.value;if(t(h)){if(h.next().done)continue;o.chained||(o.chained=[]),o.chained.push(h)}else if(h instanceof Promise){const d=h;o.chained||(o.chained=[]);const u=Ew(d);o.chained?.push(u);continue}}catch(o){console.error(o)}}function t(i){return!!(i&&i.next&&i.return)}}}const Rp=x("debugwebxr");class ax{static tryFindAvatarObjects(e,t,i){if(i.head&&i.leftHand&&i.rightHand)return;const n=e.name.toLocaleLowerCase();!i.head&&n.includes("head")&&(Rp&&console.log("FOUND AVATAR HEAD",e.name),i.head=new J("",t,e)),n.includes("hand")&&(!i.leftHand&&n.includes("left")&&(Rp&&console.log("FOUND AVATAR LEFT HAND",e.name),i.leftHand=new J("",t,e)),!i.rightHand&&n.includes("right")&&(Rp&&console.log("FOUND AVATAR RIGHT HAND",e.name),i.rightHand=new J("",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 ne 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 ne(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 ne(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 ne(i/255,n/255,o/255,1)}else if(e.startsWith("rgba")){const t=e.slice(5,-1).split(",").map(Number);return new ne(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 ne(t[0]/255,t[1]/255,t[2]/255,1)}}else if(Array.isArray(e)){if(e.length===4)return new ne(e[0],e[1],e[2],e[3]);if(e.length===3)return new ne(e[0],e[1],e[2],1);console.error("Invalid color array length. Expected 3 or 4, got "+e.length)}return new ne(e)}}const At=new c.Vector3,zb=new c.Vector3,Nb=new c.Quaternion,tO=x("debuggizmos"),ln=8947848,Ap=32;class B{constructor(){}static enabled=!0;static isGizmo(e){return e[Hm]!==void 0}static setVisible(e){for(const t of Bi.timedObjectsBuffer)t.visible=e}static DrawLabel(e,t,i=.05,n=0,o,r,a){if(!B.enabled)return null;o||(o=ln);const l=V.active?.rigScale??1,h=Bi.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=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.getLine(n),a=r.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),At.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),a.needsUpdate=!0,r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawDirection(e,t,i=ln,n=0,o=!0,r=1){if(!B.enabled)return;const a=Bi.getLine(n),l=a.geometry.getAttribute("position");l.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(At.set(0,0,-r),Nb.set(t.x,t.y,t.z,t.w),At.applyQuaternion(Nb)):(At.set(t.x,t.y,t.z),At.multiplyScalar(r)),l.setXYZ(1,e.x+At.x,e.y+At.y,e.z+At.z),l.needsUpdate=!0,a.material.depthTest=o,a.material.depthWrite=!1,dn(a.material,i)}static DrawLine(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.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,dn(r.material,i)}static DrawCircle(e,t,i,n=ln,o=0,r=!0){if(!B.enabled)return;const a=Bi.getCircle(o);a.position.set(e.x,e.y,e.z),a.scale.set(i,i,i),a.quaternion.setFromUnitVectors(this._up,At.set(t.x,t.y,t.z).normalize()),a.material.depthTest=r,a.material.depthWrite=!1,a.material.fog=!1,dn(a.material,n)}static DrawWireSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.getSphere(t,n,!0);mr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,r.material.fog=!1,dn(r.material,i)}static DrawSphere(e,t,i=ln,n=0,o=!0){if(!B.enabled)return;const r=Bi.getSphere(t,n,!1);mr(r,e.x,e.y,e.z),r.material.depthTest=o,r.material.depthWrite=!1,dn(r.material,i)}static DrawWireBox(e,t,i=ln,n=0,o=!0,r=void 0){if(!B.enabled)return;const a=Bi.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,dn(a.material,i)}static DrawWireBox3(e,t=ln,i=0,n=!0){if(!B.enabled)return;const o=Bi.getBox(i);o.position.copy(e.getCenter(At)),o.scale.copy(e.getSize(At)),o.material.depthTest=n,o.material.wireframe=!0,o.material.depthWrite=!1,o.material.fog=!1,dn(o.material,t)}static _up=new c.Vector3(0,1,0);static DrawArrow(e,t,i=ln,n=0,o=!0,r=!1){if(!B.enabled)return;const a=Bi.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),At.set(t.x,t.y,t.z).sub(zb.set(e.x,e.y,e.z)).normalize());const h=At.set(t.x,t.y,t.z).sub(zb.set(e.x,e.y,e.z)).length()*.1;a.scale.set(h,h,h),a.material.depthTest=o,a.material.wireframe=r,dn(a.material,i),this.DrawLine(e,t,i,n,o)}static DrawWireMesh(e){const t=Bi.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,dn(t.material,e.color??ln)}}const iO=new c.BoxGeometry(1,1,1);function dy(s=null){const e=new c.Color(s??14540253),t=new c.EdgesGeometry(iO);return new c.LineSegments(t,new c.LineBasicMaterial({color:e}))}function dn(s,e){if(Array.isArray(s)){for(const i of s)dn(i,e);return}const t=e instanceof ne?e.a:1;s.color.set(e),s.opacity=t,s.transparent=t<1}const Hm=Symbol("GizmoCache");class Bi{static familyName="needle-gizmos";static ensureFont(){let e=ae.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);e||(e=ae.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName),e.addVariant("normal","normal","https://cdn.needle.tools/static/fonts/msdf/arial/arial-msdf.json","https://cdn.needle.tools/static/fonts/msdf/arial/arial.png")?.addEventListener("ready",()=>{ae.__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),tO&&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 ae.__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(z.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(z.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(z.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(Ap*3),3),t.geometry.setAttribute("position",i);const n=j(0,1,0),o=j(0,0,1),r=j(o);r.cross(n).normalize();const a=j(r),l=Math.PI*2/(Ap-1);for(let h=0;h<Ap+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(z.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(z.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(z.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(z.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[Hm]=n,t.castShadow=!1,t.receiveShadow=!1,t.isGizmo=!0,this.timedObjectsBuffer.push(t),this.timesBuffer.push(z.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,ae.__webpack_exports__default.update());for(let i=0;i<t.length;i++){const n=t[i];if(e.mainCamera&&n instanceof ae.__webpack_exports__default.MeshUIBaseElement){if(yr(n))continue;const o=e.isInVR,r=!1,a=!o;nh(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(),yr(r)!=!0&&r[Hm].push(r))}}}const qt=x("debugphysics"),nO=x("debugworker"),$b=new c.Layers;class Pr{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){$b.set(e),this.layerMask=$b}setMask(e){this.layerMask||(this.layerMask=new c.Layers);const t=this.layerMask;t?t.mask=e:this.layerMask=e}}class uy{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}}class Xa{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 Pr;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){qt&&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 qt&&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)),qt&&console.time("raycast"),o.length=0,Xa._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))),Xa._raycasting--,qt&&(console.timeEnd("raycast"),console.warn("#"+this.context.time.frame+", hits:",o?.length?[...o]:"nothing"),performance.mark("raycast.end"),performance.measure("raycast","raycast.start","raycast.end")),o}intersect(e,t,i,n){for(const o of t){if(!o||o.visible===!1||B.isGizmo(o)||n.lineThreshold!==void 0&&n.lineThreshold<0&&o instanceof c.Line)continue;let r=!0;const a=o,l=a.geometry;if(o.raycastAllowed===!1&&(r=!1),r&&n.testObject){const h=n.testObject?.(o);if(h===!1)continue;h==="continue in children"&&(r=!1)}else r&&(l&&Vb(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 K.GroundedSkybox&&(u=!1),d==="lod"){const f=oe.getRaycastMesh(o);f&&(a.geometry=f)}if(!u&&oO(a,e,i)||(n.useAcceleratedRaycast!==!1?Mu.runMeshBVHRaycast(e,a,i,this.context,n):e.intersectObject(a,!1,i)),a.geometry=l,qt&&i.length!=h){const f=i[i.length-1];B.DrawWireSphere(f.point,.1,7798784,1,!1),B.DrawWireMesh({mesh:o,depthTest:!1,duration:.2,color:7798784})}}n.recursive!==!1&&this.intersect(e,o.children,i,n)}return i}tempBoundingBox=new c.Box3;intersectSphere(e,t,i,n,o,r,a,l){let h=e&&e.isMesh&&e.layers.test(n)&&!B.isGizmo(e);h&&=e.visible,h&&=!(e instanceof c.Line),h&&=!(e instanceof K.GroundedSkybox);const d=e,u=d.geometry;if(h&&l){const f=l(e);if(f===!1)return;f==="continue in children"&&(h=!1)}if(u&&Vb(u)||(h=!1),h){if(a){const f=this.sphere;f.center.copy(t),f.radius=i;const m=o.length;if(Mu.runMeshBVHRaycast(this.sphere,d,o,this.context,{}),m!=o.length&&!r)return}else if(u.boundingBox||u.computeBoundingBox(),u.boundingBox){d.matrixWorldNeedsUpdate&&d.updateWorldMatrix(!1,!1);const f=this.tempBoundingBox.copy(u.boundingBox).applyMatrix4(d.matrixWorld),m=this.sphere;if(m.center.copy(t),m.radius=i,m.intersectsBox(f)){const g=te(e),v=g.distanceTo(m.center),y=new uy(e,v,g);if(o.push(y),!r)return}}}if(e.children)for(const f of e.children){const m=o.length;if(this.intersectSphere(f,t,i,n,o,r,a,l),m!=o.length&&!r)return}}}function Vb(s){return!(s.index&&s.index.array.length<3)}const zo=new c.Sphere,ld=new c.Plane,sO=new c.Matrix3;function oO(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 K.GroundedSkybox){ld.setFromNormalAndCoplanarPoint(j(0,1,0),j(0,-l.position.y,0)),ld.applyMatrix4(l.matrixWorld,sO);const u=o.ray.intersectPlane(ld,j());if(u){zo.copy(h),zo.applyMatrix4(l.matrixWorld);const m=j(u).sub(o.ray.origin).length(),g=zo.radius*.5;m<g&&r.push({distance:m,point:u,object:l,normal:ld.normal.clone()})}return}zo.copy(h),zo.applyMatrix4(l.matrixWorld);const d=o.ray.intersectSphere(zo,j());if(d){const u=j(d).sub(o.ray.origin),f=u.length();if(f>zo.radius){const m=u.clone().normalize();r.push({distance:f,point:d,object:l,normal:m})}}}}),s._computeIntersections=n,e.intersectObject(s,!1,t),s._computeIntersections=i,!0}var Mu;(s=>{let e=0;function t(b,w,P,k,M){if(!w.geometry||!w.geometry.hasAttribute("position"))return!1;const D=w.geometry;if(w?.isSkinnedMesh){const I=w,F=I.bvhNeedsUpdate;if(!I.staticGenerator)l(),r&&(I.staticGenerator=new r(w),I.staticGenerator.applyWorldTransforms=!1,I.staticGeometry=I.staticGenerator.generate(),D.boundsTree=a?.call(I.staticGeometry),I.staticGeometryLastUpdate=performance.now()+Math.random()*200,I.bvhNeedsUpdate=!0);else if(D.boundsTree&&(I.autoUpdateMeshBvhInterval!==void 0&&I.autoUpdateMeshBvhInterval>=0||F===!0)){const $=performance.now(),W=$-I.staticGeometryLastUpdate,T=I.autoUpdateMeshBvhInterval??100;(F||W>T)&&(qt&&console.warn(`Physics: updating skinned mesh bvh for ${w.name} after ${W.toFixed(2)}ms`),I.bvhNeedsUpdate=!1,I.staticGeometryLastUpdate=$,I.staticGenerator?.generate(I.staticGeometry),D.boundsTree.refit())}}else if(!D.boundsTree){d||_();let I=!0;if((k.xr||D[g]===!1||D.getAttribute("position")?.isInterleavedBufferAttribute||D.index&&D.index?.isInterleavedBufferAttribute||e>10)&&(I=!1),I&&f){if(D[m]===void 0){let F=null;if(y.length>0){const $=y.shift();$&&!$.running&&(F=$)}if(!F&&v.length<3)try{nO&&console.warn("[GenerateMeshBVHWorker] Creating worker with import.meta.url:",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ea&&Ea.tagName.toUpperCase()==="SCRIPT"&&Ea.src||new URL("needle-engine.bundle-D8gP8Nd0.umd.cjs",document.baseURI).href),F=new f,v.push(F)}catch($){$ instanceof DOMException&&$.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($),e+=10):(console.error("Failed to create MeshBVH worker. Please see below for more details:"),console.log($)),e++}if(F!=null&&!F.running){const $=w.name;qt&&console.log("<<<< worker start",$,F),D[m]="queued",performance.mark("bvh.create.start");const W=D.clone();try{F.generate(W).then(T=>{D[m]="done",D.boundsTree=T}).catch(T=>{D[m]="failed - "+T?.message,D[g]=!1,qt&&console.error("Failed to generate mesh bvh on worker",T)}).finally(()=>{qt&&console.log(">>>>> worker done",$,{hasBoundsTre:D.boundsTree!=null}),y.push(F),W.dispose(),performance.mark("bvh.create.end"),performance.measure("bvh.create (worker)","bvh.create.start","bvh.create.end")})}catch(T){console.error("Failed to generate mesh bvh on worker",T)}}else qt&&console.warn("No worker available")}}else(!u||!I)&&(l(),o&&(performance.mark("bvh.create.start"),D.boundsTree=new o(D),performance.mark("bvh.create.end"),performance.measure("bvh.create","bvh.create.start","bvh.create.end")))}if(b instanceof c.Raycaster){const I=b,F=w.raycast;if(D.boundsTree)l(),n&&(w.acceleratedRaycast||(w.acceleratedRaycast=n.bind(w),qt&&console.debug(`Physics: bind acceleratedRaycast fn to "${w.name}"`)),w.raycast=w.acceleratedRaycast);else if(qt&&console.warn("No bounds tree found for mesh",w.name,{workerTask:D[m],hasAcceleratedRaycast:n!=null}),M.allowSlowRaycastFallback===!1&&(D.getAttribute("position")?.array?.length??0)>2e3)return qt&&console.warn("Skipping raycast because no bounds tree is available and allowSlowRaycastFallback is false"),!1;const $=I.firstHitOnly;return I.firstHitOnly=!1,I.intersectObject(w,!1,P),I.firstHitOnly=$,w.raycast=F,!0}else if(b instanceof c.Sphere){const I=D.boundsTree;if(I){const F=b;if(h.copy(w.matrixWorld).invert(),F.applyMatrix4(h),I.intersectsSphere(F)){const W=te(w),T=W.distanceTo(F.center),U=new uy(w,T,W);P.push(U)}}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-DE_m5MvL.umd.cjs")).then(b=>b.index$1).then(b=>{n=b.acceleratedRaycast,o=b.MeshBVH,r=b.StaticGeometryGenerator,a=b.computeBoundsTree}).catch(b=>{(qt||E())&&console.error("Failed to load BVH library...",b.message)}))}const h=new c.Matrix4;let d=!1,u=!1,f=null;const m=Symbol("Needle:MeshBVH-Worker"),g=Symbol("Needle:MeshBVH-CanUseWorker"),v=[],y=[];function _(){d=!0,u=!0,Promise.resolve().then(()=>aL).then(b=>{f=b.GenerateMeshBVHWorker}).catch(b=>{qt||E()?console.warn("Failed to setup mesh bvh worker"):console.debug("Failed to setup mesh bvh worker",b)}).finally(()=>{u=!1})}})(Mu||(Mu={}));const Wb=Symbol("gltf-loader-internal-usage-tracker"),rO=x("debugusers");class La{get name(){return"NEEDLE_internal_usage_tracker"}static isLoading(e){return La._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(){La._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[Wb]=e._loadingId),r)),o},null}afterRoot(e){La._loadingProcesses--,this.parser.getDependency=this._getDependency;for(const t of this._loadedObjects)delete t[Wb],t instanceof c.Object3D&&(t.parent||t instanceof c.Mesh&&setTimeout(()=>{rO&&console.warn("> GLTF LOADER: Mesh not used in scene!",t),t.material=null,t.geometry=null},1e3));return null}}class lx{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:
|
|
884
884
|
`+i.src),e.preventDefault())}})}}const cf=x("trackresources");function cx(){return cf==="dispose"}let kr=!0;cf===0&&(kr=!1);function aO(s){kr=s}function hx(){return kr}const dx=Symbol("disposable");function ux(s,e){s&&(s[dx]=e,lr&&console.warn("Set disposable",e,s))}const fx=Symbol("disposed");function lO(s){return s[fx]===!0}function Ce(s){if(s){if(s[dx]===!1){lr&&console.warn("Object is marked as not disposable",s);return}if(typeof s=="object"&&(s[fx]=!0),s instanceof c.Scene)Ce(s.environment),Ce(s.background),Ce(s.customDepthMaterial),Ce(s.customDistanceMaterial);else if(s instanceof c.SkinnedMesh)Ce(s.geometry),Ce(s.material),Ce(s.skeleton),Ce(s.bindMatrix),Ce(s.bindMatrixInverse),Ce(s.customDepthMaterial),Ce(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Mesh)Ce(s.geometry),Ce(s.material),Ce(s.customDepthMaterial),Ce(s.customDistanceMaterial),s.visible=!1;else if(s instanceof c.Object3D)s.visible=!1;else if(s instanceof c.BufferGeometry){ta(s);for(const e of Object.keys(s.attributes)){const t=s.attributes[e];Ce(t)}}else if(s instanceof c.BufferAttribute||s instanceof c.InterleavedBufferAttribute)lr&&console.warn("BufferAttribute dispose not supported",s.count);else if(s instanceof Array)for(const e of s)e instanceof c.Material&&Ce(e);else if(s instanceof c.Material){ta(s);for(const t of Object.keys(s)){const i=s[t];i instanceof c.Texture&&Ce(i)}const e=s.uniforms;if(e)for(const t of Object.keys(e)){const i=e[t];i instanceof c.Texture?Ce(i):i instanceof c.Uniform$1&&Ce(i.value)}}else s instanceof c.Texture?(ta(s),ta(s.source),s.source?.data instanceof ImageBitmap&&ta(s.source.data)):s instanceof c.Skeleton?(ta(s.boneTexture),s.boneTexture=null):s instanceof c.Bone||!(s instanceof c.Object3D)&&lr&&console.warn("Unknown object type",s)}}function ta(s){s&&((lr||cx()||cf)&&console.warn("🧨 FREE",s),s instanceof ImageBitmap||"dispose"in s&&typeof s.dispose=="function"&&s.dispose())}function cO(s){}const hO=new Set;function fy(s,e,t=null,i){if(i||(i=hO,i.clear()),!s)return i;const n=s[Uc];if(n)for(const o of n)i.has(o)||t?.call(null,o)!==!1&&(i.add(o),e&&fy(o,!0,t,i));return i}function dO(s){return s[ic]}const lr=x("debugresourceusers")||x("debugmemory"),Uc=Symbol("needle-resource-users"),ic=Symbol("needle-resource-users-count");function Nt(s,e){Zu(s,e,function(t,i){kr&&!Xa.raycasting&&(Eu(Uc,this,t,!1),Eu(Uc,this,i,!0))})}kr&&(Nt(c.Mesh.prototype,"material"),Nt(c.Mesh.prototype,"geometry"),Nt(c.Material.prototype,"map"),Nt(c.Material.prototype,"bumpMap"),Nt(c.Material.prototype,"alphaMap"),Nt(c.Material.prototype,"normalMap"),Nt(c.Material.prototype,"displacementMap"),Nt(c.Material.prototype,"roughnessMap"),Nt(c.Material.prototype,"metalnessMap"),Nt(c.Material.prototype,"emissiveMap"),Nt(c.Material.prototype,"specularMap"),Nt(c.Material.prototype,"envMap"),Nt(c.Material.prototype,"lightMap"),Nt(c.Material.prototype,"aoMap"),Nt(c.Material.prototype,"gradientMap"));function uO(s){if(kr===!1)return;const e=s[Uc];if(e)for(const t of e)Eu(Uc,t,s,!1)}kr&&Zu(c.Material.prototype,"dispose",function(){uO(this)});let qm=0;function Eu(s,e,t,i){if(qm>0)return;if(Array.isArray(t)){for(const o of t)Eu(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[ic]||0;o+=1,t[ic]=o,lr&&console.warn(`🟢 Added user of "${t.type}"`,e,t,o,"users:",n)}}else if(e&&n.has(e)){n.delete(e);let o=t[ic]||0;o>0&&(o-=1,t[ic]=o),lr&&console.warn(`🔴 Removed user of "${t.type}"`,e,t,o,"users:",n),o<=0&&(La.isLoading(t)||(cf&&console.warn(`🔴 Removed all user of "${t.type}"`,t),cx()&&Ce(t)))}t[s]=n}try{Zu(c.WebGLRenderer.prototype,"render",function(){qm++},function(){qm--})}catch(s){console.warn("Could not wrap WebGLRenderer.render",s)}const zc=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),px=Symbol("isUsingInstancing"),mx=Symbol("instancingRenderer"),nc=Symbol("instancingAutoUpdateBounds");class Xi{static isUsingInstancing(e){return e[px]===!0}static getRenderer(e){return e[mx]||null}setAutoUpdateBounds(e,t){const i=Xi.getRenderer(e);i&&(i[nc]=t)}static markDirty(e,t=!0){if(e&&(this.isUsingInstancing(e)&&(e[zc]=!0,e.matrixWorldNeedsUpdate=!0),t))for(const i of e.children)Xi.markDirty(i,!0)}}const uo=x("debuginstantiate"),ia=new Map,Xm=Symbol("original-component-name");function Qm(s,e,t){if(e===null||!s)return;const i=s.guid,n=s.guid;n?.length&&(ia.has(n)||(uo&&console.log('Creating InstanceIdProvider with key "'+n+'" for object '+s.name),ia.set(n,new at(n))));const o=n&&ia.get(n)||e;if(s.guid=o.generateUUID(),i&&i!=="invalid"&&(t[i]=s.guid),s&&s.userData&&s.userData.components)for(const r of s.userData.components){if(r===null)continue;const a=r.guid;a?ia.has(a)||(uo&&console.log('Creating InstanceIdProvider with key "'+a+'" for component '+r[Xm]),ia.set(a,new at(a))):uo&&console.warn("Can not create IdProvider: component "+r[Xm]+" has no guid",r.guid);const l=ia.get(a)||e,h=r.guid;r.guid=l.generateUUID(),h&&h!=="invalid"&&(t[h]=r.guid)}if(s.children)for(const r of s.children)Qm(r,e,t)}function fO(s){for(const e in s){const i=s[e].clone;if(!(!i?.isObject3D||!i?.userData?.components))for(let n=0;n<i.userData.components.length;n++){const o=i.userData.components[n],r=Object.entries(o);for(const[a,l]of r){if(l==null||typeof l!="object"&&typeof l!="string")continue;const h=gr(a,l,s);h!==void 0&&(o[a]=h)}}}}let gi=null;function Gb(s,e){if(!uo){Ym(s,e);return}gi={objects:0,components:0,props:0,remapped:0};const t=typeof performance<"u"?performance.now():Date.now();Ym(s,e);const i=(typeof performance<"u"?performance.now():Date.now())-t,n=gi;gi=null,console.log(`[resolveStringGuids] root="${s.name}" objects=${n.objects} components=${n.components} propsVisited=${n.props} remapped=${n.remapped} mapSize=${Object.keys(e).length} in ${i.toFixed(2)}ms`)}function Ym(s,e){if(gi&&gi.objects++,s.userData?.components)for(const t of s.userData.components)t!==null&&(gi&&gi.components++,Km(t,e));if(s.children)for(const t of s.children)Ym(t,e)}function Km(s,e,t){if(t||(t=new WeakSet),!t.has(s)){t.add(s);for(const i of Object.keys(s)){gi&&gi.props++;const n=s[i];if(n!=null)if(typeof n=="string"){const o=e[n];o&&(s[i]=o,gi&&gi.remapped++)}else if(Array.isArray(n))for(let o=0;o<n.length;o++){const r=n[o];if(typeof r=="string"){const a=e[r];a&&(n[o]=a,gi&&gi.remapped++)}else(Array.isArray(r)||Zm(r))&&Km(r,e,t)}else Zm(n)&&Km(n,e,t)}}}function gr(s,e,t){if(e!==void 0){if(e===null)return null;if(typeof e=="string"){const i=t[e];return i?i.clone:void 0}if(typeof e=="object"){if(ef(e))return pO(e,t);if(e.isObject3D===!0){if(s==="gameObject")return;const i=e.uuid,n=t[i]?.clone;return n?(uo&&console.log(s,"old",e,"new",n),n):void 0}if(vO(e))return e.clone();if(Array.isArray(e))return mO(s,e,t);if(e instanceof Map)return gO(e,t);if(e instanceof Set)return yO(e,t);if(!(e instanceof WeakMap||e instanceof WeakSet)){if(GP(e)&&e.$serializedTypes)return _O(e,t);if(Zm(e))return bO(s,e,t)}}}}function pO(s,e){const t=s.gameObject;if(!t)return;const i=t.uuid,n=e[i]?.clone;if(!n){uo&&console.log("Component reference did not change (external)",s);return}const o=t.userData.components.indexOf(s);if(o>=0&&n.isObject3D)return uo&&console.log("Resolved component",i,"at index",o),n.userData.components[o];console.warn("Could not find component at expected index",s)}function mO(s,e,t){const i=[];for(let n=0;n<e.length;n++){const o=e[n];if(o==null){i.push(o);continue}if(typeof o!="object"&&typeof o!="string"){i.push(o);continue}const r=gr(s,o,t);i.push(r!==void 0?r:o)}return i}function gO(s,e){const t=new Map;let i=!1;for(const[n,o]of s){let r=n,a=o;if(typeof n=="object"&&n!==null){const l=gr("",n,e);l!==void 0&&(r=l,i=!0)}if(typeof o=="object"&&o!==null){const l=gr("",o,e);l!==void 0&&(a=l,i=!0)}t.set(r,a)}return t}function yO(s,e){const t=new Set;for(const i of s)if(typeof i=="object"&&i!==null){const n=gr("",i,e);t.add(n!==void 0?n:i)}else t.add(i);return t}function _O(s,e){const t=Object.assign(Object.create(Object.getPrototypeOf(s)),s);let i=!1;for(const n in t.$serializedTypes){const o=t[n];if(o!=null&&typeof o=="object"){uo&&console.log("Recursively resolve references for",n,o);const r=gr(n,o,e);r!==void 0&&(t[n]=r,i=!0)}}return i?t:void 0}function bO(s,e,t){let i=!1;const n={...e};for(const o of Object.keys(n)){const r=n[o];if(r==null||typeof r!="object"&&typeof r!="string")continue;const a=gr(o,r,t);a!==void 0&&(n[o]=a,i=!0)}return i?n:void 0}function Zm(s){if(typeof s!="object"||s===null)return!1;const e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}function vO(s){return s.isVector2===!0||s.isVector3===!0||s.isVector4===!0||s.isQuaternion===!0||s.isEuler===!0||s.isColor===!0||s.isMatrix2===!0||s.isMatrix3===!0||s.isMatrix4===!0}const gx=new Map;function yx(s,e){if(!s)return;if(!e){console.warn("No prototype found",s,s.prototype,s.constructor);return}const t=gx.get(e);t&&t.apply(s)}function py(s){const e=wO(s.prototype);gx.set(s,e)}function wO(s){return new xO(s)}class xO{$symbol;extensions;descriptors;constructor(e){this.$symbol=Symbol("prototype-extension"),this.extensions=Object.keys(e),this.descriptors=new Array;for(let t=0;t<this.extensions.length;t++){const i=this.extensions[t],n=Object.getOwnPropertyDescriptor(e,i);n&&this.descriptors.push(n)}}apply(e){if(!e[this.$symbol]){e[this.$symbol]=!0;for(let t=0;t<this.extensions.length;t++){const i=this.extensions[t],n=this.descriptors[t];n&&Object.defineProperty(e,i,n)}}}}function hf(s){s&&s.isObject3D===!0&&yx(s,c.Object3D)}let Hb=!1;function SO(){if(Hb)return;if(Hb=!0,Hg.experimentalSmartHierarchyUpdate){const i=c.Object3D.prototype.add;c.Object3D.prototype.add=function(...r){return Ip(),i.apply(this,r)};const n=c.Object3D.prototype.attach;c.Object3D.prototype.attach=function(...r){return Ip(),n.apply(this,r)};const o=c.Object3D.prototype.remove;c.Object3D.prototype.remove=function(...r){return Ip(),o.apply(this,r)}}c.Object3D.prototype.SetActive=function(i){this.visible=i},c.Object3D.prototype.setActive=function(i){this.visible=i},c.Object3D.prototype.destroy=function(){Ci(this)},c.Object3D.prototype.addComponent=function(i,n){return Qn(this,i,n)},c.Object3D.prototype.addNewComponent=function(i,n){return Qn(this,i,n)},c.Object3D.prototype.removeComponent=function(i){return _y(this,i)},c.Object3D.prototype.getOrAddComponent=function(i,n){return hh(this,i,n)},c.Object3D.prototype.getComponent=function(i){return Po(this,i)},c.Object3D.prototype.getComponents=function(i,n){return nl(this,i,n)},c.Object3D.prototype.getComponentInChildren=function(i,n=!1){return dh(this,i,n)},c.Object3D.prototype.getComponentsInChildren=function(i,n){return sl(this,i,n)},c.Object3D.prototype.getComponentInParent=function(i,n=!1){return Nc(this,i,n)},c.Object3D.prototype.getComponentsInParent=function(i,n){return uf(this,i,n)},Object.getOwnPropertyDescriptor(c.Object3D.prototype,"activeSelf")||Object.defineProperty(c.Object3D.prototype,"activeSelf",{get:function(){return il(this)},set:function(i){vc(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"raycastAllowed")||Object.defineProperty(c.Object3D.prototype,"raycastAllowed",{get:function(){return this.userData&&this.userData.raycastAllowed!==!1},set:function(i){const n=this;n.userData||(n.userData={}),n.userData.raycastAllowed=i}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldPosition")||Object.defineProperty(c.Object3D.prototype,"worldPosition",{get:function(){return this instanceof K.TransformControlsGizmo?te(this.object):te(this)},set:function(i){Si(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldQuaternion")||Object.defineProperty(c.Object3D.prototype,"worldQuaternion",{get:function(){return this instanceof K.TransformControlsGizmo?_e(this.object):_e(this)},set:function(i){gn(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldRotation")||Object.defineProperty(c.Object3D.prototype,"worldRotation",{get:function(){return Qu(this)},set:function(i){z0(this,i)}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldScale")||Object.defineProperty(c.Object3D.prototype,"worldScale",{get:function(){return Ue(this)},set:function(i){za(this,i)}});const s=new c.Matrix4,e=new c.Vector3(0,0,0),t=new c.Vector3(0,1,0);Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldForward")||Object.defineProperty(c.Object3D.prototype,"worldForward",{get:function(){return j().set(0,0,1).applyQuaternion(_e(this))},set:function(i){const n=oi().setFromRotationMatrix(s.lookAt(e.set(0,0,0),i,t.set(0,1,0)));this.worldQuaternion=n}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldRight")||Object.defineProperty(c.Object3D.prototype,"worldRight",{get:function(){return j().set(1,0,0).applyQuaternion(_e(this))}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"worldUp")||Object.defineProperty(c.Object3D.prototype,"worldUp",{get:function(){return j().set(0,1,0).applyQuaternion(_e(this))}}),Object.getOwnPropertyDescriptor(c.Object3D.prototype,"contains")||Object.defineProperty(c.Object3D.prototype,"contains",{value:function(i){if(!i)return!1;if(this===i)return!0;for(const n of this.children)if(n.contains(i))return!0;return!1}}),py(c.Object3D)}const Qd=x("debuggetcomponent"),CO=x("debuginstantiate");class es{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context;components;clone(){const e=new es;return e.idProvider=this.idProvider,e.parent=this.parent,e.keepWorldPosition=this.keepWorldPosition,e.position=Array.isArray(this.position)?[...this.position]:this.position?.clone(),e.rotation=Array.isArray(this.rotation)?[...this.rotation]:this.rotation?.clone(),e.scale=Array.isArray(this.scale)?[...this.scale]:this.scale?.clone(),e.visible=this.visible,e.context=this.context,e.components=this.components,e}cloneAssign(e){this.idProvider=e.idProvider,this.parent=e.parent,this.keepWorldPosition=e.keepWorldPosition,this.position=Array.isArray(e.position)?[...e.position]:e.position?.clone(),this.rotation=Array.isArray(e.rotation)?[...e.rotation]:e.rotation?.clone(),this.scale=Array.isArray(e.scale)?[...e.scale]:e.scale?.clone(),this.visible=e.visible,this.context=e.context,this.components=e.components}}function il(s){return s.visible}function vc(s,e){return typeof e=="number"&&(e=e>.5),s.visible=e,s.visible}function _x(s){return s[Vn]||df(s)}function bx(s,e){s[px]=e}function df(s){return Xi.isUsingInstancing(s)}function my(s,e){return Ac(s,e,!0,!0)}const vx=Symbol("isDestroyed");function yr(s){return s[vx]}function wx(s,e){s[vx]=e}const Jm=Symbol("isDontDestroy");function fa(s,e=!0){s[Jm]=e}const Yd=[],Kd=[];function Ci(s,e=!0,t=!1){Yd.length=0,Kd.length=0,eg(s,e,!0);for(const i of Yd)i.gameObject=null,i.context=null;for(const i of Kd)wx(i,!0),t&&Ce(i);Kd.length=0,Yd.length=0}function eg(s,e=!0,t=!0){if(s==null)return;const i=s;if(i.isComponent){if(i[Jm])return;Yd.push(i);const r=i.gameObject;i.__internalDisable?.(),i.__internalDestroy?.(),i.gameObject=r;return}if(s[Jm])return;const n=s;Qd&&console.log(n),Kd.push(n);const o=n.userData?.components;if(o!=null&&Array.isArray(o)){let r=o.length;for(let a=0;a<o.length;a++){const l=o[a];eg(l,e,!1),o.length<r&&(r=o.length,a--)}}if(e&&n.children)for(const r of n.children)eg(r,e,!1);t&&n.removeFromParent()}function _r(s,e,t=!0){return xx(s,e,t)}function*gy(s,e,t=!1,i=999,n=0){if(s?.userData.components&&!(n>i)){for(const o of s.userData.components)e&&o?.isComponent===!0&&o instanceof e?yield o:yield o;if(t===!0)for(const o of s.children)yield*gy(o,e,!0,i,n+1)}}function xx(s,e,t,i=0){if(s){if(s.isObject3D,i>1e3){console.warn("Failed to iterate components: too many levels");return}if(s.userData?.components)for(let n=0;n<s.userData.components.length;n++){const o=s.userData.components[n];if(o?.isComponent===!0){const r=e(o);if(r!==void 0)return r}}if(t&&s.children){const n=i+1;for(let o=0;o<s.children.length;o++){const r=s.children[o];if(!r)continue;const a=xx(r,e,t,n);if(a!==void 0)return a}}}}function _o(s,e){if("isAssetReference"in s)return s.instantiate(e??void 0);let t=null;e!=null&&(e.x!==void 0?(t=new es,t.position=e):t=e);let i=z.Current;t?.context&&(i=t.context),Qd&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new at(Date.now()));const n=[],o={},r={},a=Sx(i,s,t,n,o,r);a&&(fO(o),kO(r,o)),Qd&&(gu(s,!0),gu(a,!0));const l={};for(const h in o){const d=o[h],u=d.original,f=d.clone;u instanceof c.Object3D&&f instanceof c.Object3D&&(l[u.guid||u.uuid]=f.guid||f.uuid)}if(t?.components!==!1){for(const h in n){const d=n[h],u=d.guid;t&&t.idProvider&&(d.guid=t.idProvider.generateUUID(),l[u]=d.guid,Qd&&console.log(d.name,d.guid)),lf(d,i),d.__internalNewInstanceCreated&&d.__internalNewInstanceCreated()}for(const h in n){const d=n[h];d.enabled!==!1&&(d.enabled=!0)}Tu(i)}return a}function Sx(s,e,t,i,n,o){if(!e||e[yi]||e instanceof c.Audio||e instanceof c.AudioListener)return null;const r=e.userData;e.userData={};const a=e.children;e.children=[];const l=e.clone(!1);hf(l),e.userData=r,e.children=a;const h={original:e,clone:l};if(n[e.uuid]=h,e.guid&&e.guid!==e.uuid&&(n[e.guid]=h),CO&&console.log("ADD",e,l),e.type==="SkinnedMesh"&&(o[e.uuid]={original:e,clone:l}),t?.visible!==void 0&&(l.visible=t.visible),t?.idProvider){l.uuid=t.idProvider.generateUUID();const u=l;u&&(u.guid=l.uuid)}e.animations&&e.animations.length>0&&(l.animations=[...e.animations]);const d=e.parent;if(d&&d.add(l),t?.position)if(Array.isArray(t.position)){const u=new c.Vector3;u.fromArray(t.position),l.worldPosition=u}else l.worldPosition=t.position;else l.position.copy(e.position);if(t?.rotation){if(t.rotation instanceof c.Quaternion)l.worldQuaternion=t.rotation;else if(t.rotation instanceof c.Euler)l.worldQuaternion=oi().setFromEuler(t.rotation);else if(Array.isArray(t.rotation)){const u=new c.Euler;u.fromArray(t.rotation),l.worldQuaternion=oi().setFromEuler(u)}}else l.quaternion.copy(e.quaternion);if(t?.scale)if(Array.isArray(t.scale)){const u=new c.Vector3;u.fromArray(t.scale),t.scale=u}else l.scale.copy(t.scale);else l.scale.copy(e.scale);if(t?.parent&&t.parent!=="scene"){let u=null;if(typeof t.parent=="string"?u=Ac(t.parent,s.scene,!0):u=t.parent,u){const f=t.keepWorldPosition===!0?u.attach:u.add;f?f.call(u,l):console.error("Invalid parent object",u,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(const[u,f]of Object.entries(e.userData))u!=="components"&&(l.userData[u]=f);if(e.userData?.components){const u=e.userData.components,f=[];l.userData.components=f;for(let m=0;m<u.length;m++){const g=u[m],v=new g.constructor;PO(g,v),g[mc]!==void 0&&(v[mc]=g[mc]),f.push(v),v.gameObject=l,i.push(v),n[g.guid]={original:g,clone:v},Ku.dispatchComponentLifecycleEvent("component-added",v)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0,t.visible=void 0);for(const u in e.children){const f=e.children[u],m=Sx(s,f,t,i,n,o);m&&(n[m.uuid]={original:f,clone:m},l.add(m))}return l}function PO(s,e,t){Va(e,s,void 0,{})}function kO(s,e){for(const t in s){const i=s[t],n=i.original,o=n.skeleton,r=i.clone;if(!o){console.warn("Skinned mesh has no skeleton?",i);continue}const a=o.bones,l=r.skeleton.clone();r.skeleton=l,r.bindMatrix.clone().copy(n.bindMatrix),r.bindMatrixInverse.copy(n.bindMatrixInverse);const h=[];l.bones=h;for(let d=0;d<a.length;d++){const u=a[d],m=e[u.uuid].clone;h.push(m)}}for(const t in s){const i=s[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function wc(s,e){try{e||s()}catch(t){return console.error(t),!1}return!0}const tg=x("debugnewscripts"),OO=x("debughierarchy"),Oe=[];function MO(){return Oe.length>0}function Tu(s){if(tg&&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)){Oe.length=0,s.new_scripts.length>0&&Oe.push(...s.new_scripts),s.new_scripts.length=0;for(let e=0;e<Oe.length;e++)try{const t=Oe[e];if(t.isComponent!==!0){(E()||tg)&&console.error(`Registered script is not a Needle Engine component.
|
|
885
885
|
The script will be ignored. Please make sure your component extends "Behaviour" imported from "@needle-tools/engine"
|
|
886
886
|
`,t),Oe.splice(e,1),e--;continue}if(t.destroyed)continue;if(!t.gameObject){console.warn(`Component can not be initialized: no GameObject assigned.
|
|
@@ -1749,4 +1749,4 @@ Needle Engine: finished loading `+i+`
|
|
|
1749
1749
|
---------------------------------
|
|
1750
1750
|
• `+r.passes.map(u=>u.name||u.constructor.name+"*").join(`
|
|
1751
1751
|
• `)+`
|
|
1752
|
-
`),ti&&this._onCreateEffectsDebug(this._composer,o)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const o=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);o.name=e.map(r=>r.name).join(", "),o.mainScene=n,o.enabled=!0,o.renderToScreen=!1,t.addPass(o),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(ti==="passes"){const i=new A.POSTPROCESSING.MODULE.DepthEffect({blendFunction:A.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});i.name="Depth Effect";const n=new A.POSTPROCESSING.MODULE.EffectPass(t,i);if(n.name="Depth Effect Pass",n.enabled=!1,e.passes.push(n),this._passIndices!==null){const r=[e.passes[0]];this._passIndices.length>0&&r.push(...this._passIndices.filter(a=>a!==0).map(a=>e.passes[a]).filter(a=>a)),r.length>0&&console.log("[PostProcessing] Passes (selected) →",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const o=this.context.menu;if(o&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();const r=document.createElement("select");r.multiple=!0;const a=document.createElement("option");a.innerText="Final Output",a.value="-1",r.appendChild(a);for(const l of e.passes){const h=document.createElement("option");h.innerText=l.name,h.value=`${e.passes.indexOf(l)}`,h.title=l.name,r.appendChild(h)}o.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(h=>parseInt(h.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const sL=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:el},Symbol.toStringTag,{value:"Module"}));class hp{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new at(t??Date.now())}static create(e,t){return new hp(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Marker,null),this}clip(e,t){if(!this._currentTrack)throw new Error("TimelineBuilder: .clip() must be called after a track method (e.g. .animationTrack())");this.commitInlineTracks();const i=this._currentTrack;switch(i.type){case ge.Animation:{let n;if(e instanceof c.AnimationClip)n=e;else{const d=Array.isArray(e)?e:[e],u=i.outputs[0],f=u instanceof c.Object3D?u:u!=null&&"gameObject"in u?u.gameObject:void 0;n=Vc(d,f)}const o=t??{},r=o.duration??n.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:o.clipIn??0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:o.preExtrapolation??Ye.None,postExtrapolationMode:o.postExtrapolation??Ye.None,reversed:o.reversed,asset:{clip:n,loop:o.loop??!1,duration:n.duration,removeStartOffset:o.removeStartOffset??!1}};i.clips.push(h),i.cursor=l;break}case ge.Audio:{const n=e,o=t??{},r=o.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:o.loop??!1,volume:o.volume??1}};i.clips.push(h),i.cursor=l;break}case ge.Activation:{const n=e,o=n.start??i.cursor,r=o+n.duration,a={start:o,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{}};i.clips.push(a),i.cursor=r;break}case ge.Control:{const n=e,o=t??{},r=o.start??i.cursor,a=o.duration,l=r+a,h={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{sourceObject:n,controlActivation:o.controlActivation??!0,updateDirector:o.updateDirector??!0}};i.clips.push(h),i.cursor=l;break}default:throw new Error(`TimelineBuilder: .clip() is not supported on track type "${i.type}"`)}return this}marker(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .marker() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:qc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:t};return this._currentTrack.markers.push(n),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}signal(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .signal() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),o=this._tracks.indexOf(this._currentTrack),r={type:qc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:o,guid:n,callback:t}),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}muted(e=!0){if(!this._currentTrack)throw new Error("TimelineBuilder: .muted() must be called after a track method");return this._currentTrack.muted=e,this}track(e,t,i,n){if(!this._currentTrack)throw new Error("TimelineBuilder: .track() must be called after .animationTrack()");if(this._currentTrack.type!==ge.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(by(e,t,i,n)),this}build(){this.commitInlineTracks();const e=this._tracks.map(t=>{const i={name:t.name,type:t.type,muted:t.muted,outputs:t.outputs};return t.clips.length>0&&(i.clips=t.clips),t.markers.length>0&&(i.markers=t.markers),t.volume!==void 0&&(i.volume=t.volume),t.trackOffset!==void 0&&(i.trackOffset=t.trackOffset),i});return{name:this._name,tracks:e}}install(e){const t=this.build();if(this._pendingSignals.length>0){const i=e.gameObject;let n=C.getComponent(i,vr);n||(n=C.addComponent(i,vr)),n.events||(n.events=[]);for(const o of this._pendingSignals){const r=new ph;r.guid=o.guid;const a=new rl;a.signal=r,a.reaction=new Z([o.callback]),n.events.push(a);const l=t.tracks[o.trackIndex];l&&!l.outputs.includes(n)&&l.outputs.push(n)}}return e.playableAsset=t,t}pushTrack(e,t,i){const n={name:e,type:t,muted:!1,outputs:i?[i]:[],clips:[],markers:[],cursor:0,inlineTracks:[]};return this._tracks.push(n),n}commitInlineTracks(){if(!this._currentTrack||this._currentTrack.inlineTracks.length===0)return;const e=this._currentTrack,t=e.outputs[0],i=t instanceof c.Object3D?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=Vc(e.inlineTracks,i),o=e.cursor,r=n.duration,a={start:o,end:o+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=o+r,e.inlineTracks=[]}}class TC{}const oL=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:pe,ActionCollection:AS,ActionModel:si,AlignmentConstraint:gh,Animation:Lt,AnimationBuilder:ff,AnimationCurve:Th,AnimationExtension:If,Animator:gt,AnimatorController:Wn,Antialiasing:Ah,Attractor:wl,AudioExtension:Ar,AudioListener:_s,AudioSource:Pi,Avatar:vo,AvatarMarker:Ze,AxesHelper:al,AxisRotationConstraint:Ly,BaseUIComponent:Yi,BasicIKConstraint:Ey,BehaviorExtension:r_,BehaviorModel:Et,BloomEffect:Qf,BoxCollider:Pf,BoxGizmo:Br,BoxHelperComponent:Mt,Button:zs,CallInfo:Gn,Camera:Yt,CameraTargetReachedEvent:Hc,Canvas:Ka,CanvasGroup:wo,CapsuleCollider:Os,ChangeMaterialOnClick:Jy,ChangeTransformOnClick:Dr,CharacterController:Tr,CharacterControllerInput:Rs,ChromaticAberration:Dh,ClickThrough:rp,ColorAdjustments:Ao,ColorBySpeedModule:vl,ColorOverLifetimeModule:Hf,ContactShadows:yh,CursorFollow:Xr,CustomBranding:Lr,Deletable:Dy,DeleteBox:po,DepthOfField:xn,DeviceFlag:kf,DocumentExtension:EC,DragControls:ir,DragProfile:Iu,DropListener:Ds,Duplicatable:Wy,EffectWrapper:Jc,EmissionModule:js,EmphasizeOnClick:dl,EnvironmentScene:Sf,EventList:Z,EventListEvent:vy,EventSystem:Kt,EventTrigger:Af,FieldWithDefault:hS,FixedJoint:v_,FixedRotationAxesConstraint:Jx,Fog:gl,GltfExport:Qy,GltfExportBox:qy,GrabPointPlaneConstraint:bh,Gradient:Fr,Graphic:Oh,GraphicRaycaster:yf,GridHelper:yl,GridLayoutGroup:u_,GridSnapConstraint:Of,GroundProjectedEnv:ts,GroupActionModel:nr,HideOnStart:$i,HingeJoint:Eh,HorizontalLayoutGroup:d_,get HoverAnimation(){return exports.HoverAnimation},Image:kl,InheritVelocityModule:P_,InputField:j_,InstanceHandle:fr,InstancingHandler:Sr,Interactable:Ay,KeepRotationConstraint:Mf,KeepScaleConstraint:Zx,Keyframe:ci,LODGroup:Vf,LODModel:_l,Light:Rt,LimitVelocityOverLifetimeModule:ht,LogStats:Ry,LookAt:F_,LookAtConstraint:Mr,MainModule:Ft,MaskableGraphic:Mh,MeshCollider:ko,MeshRenderer:wh,MinMaxCurve:X,MinMaxGradient:Ur,NeedleMenu:ns,NestedGltf:bl,Networking:S_,NoiseModule:me,ObjectRaycaster:Qi,OffsetConstraint:jr,OpenURL:Ol,OrbitControls:he,Outline:ml,Padding:Ir,ParticleBurst:Vu,ParticleSubEmitter:k_,ParticleSystem:Zc,ParticleSystemRenderer:tn,PhysicsExtension:a_,PixelationEffect:Ih,PlaneHeightLockConstraint:By,PlayAnimationOnClick:Yc,PlayAudioOnClick:bo,PlayableDirector:Qa,PlayerColor:Za,PointerEventData:fh,PostProcessingHandler:el,PreliminaryAction:ul,PreliminaryTrigger:Sh,RawImage:np,Rect:NS,RectTransform:bn,ReflectionProbe:ms,RegisteredAnimationInfo:ho,RemoteSkybox:Oy,Renderer:Zt,RendererLightmap:Ny,Rigidbody:We,RotationBySpeedModule:en,RotationOverLifetimeModule:wn,ScaleLimitConstraint:Iy,SceneSwitcher:He,ScreenCapture:Do,ScreenSpaceAmbientOcclusion:Fs,ScreenSpaceAmbientOcclusionN8:Sn,ScrollFollow:rs,SeeThrough:A_,SetActiveOnClick:e_,ShadowCatcher:zh,ShapeModule:C_,SharpeningEffect:Bh,SignalAsset:ph,SignalReceiver:vr,SignalReceiverEvent:rl,SignalTrackHandler:Qc,Size:zS,SizeBySpeedModule:pi,SizeOverLifetimeModule:zr,SkinnedMeshRenderer:$y,SmoothFollow:Zf,SnapToSurfaceConstraint:Ef,SpatialGrabRaycaster:br,SpatialHtml:Wh,SpatialTrigger:Jf,SpatialTriggerReceiver:Kn,SpectatorCamera:ep,SphereCollider:ll,SplineContainer:Hr,SplineData:Zn,SplineWalker:sn,Sprite:Is,SpriteData:Fa,SpriteRenderer:ui,SpriteSheet:Ya,SubEmitterSystem:Wu,SyncedCamera:D_,SyncedRoom:Cn,SyncedTransform:_n,TapGestureTrigger:i_,TeleportTarget:Uf,TestRunner:I_,TestSimulateUserData:L_,Text:jt,TextBuilder:c_,TextExtension:Nf,TextureSheetAnimationModule:Ut,TiltShiftEffect:os,TimelineActivationTrack:vf,TimelineAnimationTrack:Xc,TimelineAudioTrack:bs,TimelineBuilder:hp,TimelineControlTrack:wf,TimelineMarkerTrack:bf,ToneMappingEffect:Nr,TrailModule:Be,TransformData:De,TransformGizmo:qr,TriggerBuilder:It,TriggerModel:mo,UIRaycastUtils:xy,UIRootComponent:Ph,USDZExporter:Yn,USDZText:Oa,USDZUIExtension:p_,UsageMarker:_h,VariantAction:Zy,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:h_,VideoPlayer:lt,get ViewBox(){return exports.ViewBox},Vignette:Wr,VisibilityAction:Ch,Voip:Us,Volume:jh,VolumeParameter:N,VolumeProfile:qf,WebARCameraBackground:Hh,WebARSessionRoot:Hi,WebXR:zf,WebXRImageTracking:Tl,WebXRImageTrackingModel:Vs,WebXRPlaneTracking:Ws,WebXRTrackedImage:Ja,XRControllerFollow:Ns,XRControllerModel:Ms,XRControllerMovement:Oi,XRFlag:pn,XRRig:cp,XRState:Xt,__Ignore:TC},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new Hr,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 Zn;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 rL extends ue.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ea&&Ea.tagName.toUpperCase()==="SCRIPT"&&Ea.src||new URL("needle-engine.bundle-1QN--joB.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||"Could not load worker."}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:f}=d,m=ue.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=f,u.index)if(t.index)t.index.array=u.index;else{const v=new c.BufferAttribute(u.index,1,!1);t.setIndex(v)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const aL=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:rL},Symbol.toStringTag,{value:"Module"}));exports.$componentName=bu;exports.$physicsKey=uP;exports.ActionBuilder=pe;exports.ActionCollection=AS;exports.ActionModel=si;exports.Addressables=Pw;exports.AlignmentConstraint=gh;exports.AmbientMode=Da;exports.Animation=Lt;exports.AnimationBuilder=ff;exports.AnimationCurve=Th;exports.AnimationExtension=If;exports.Animator=gt;exports.AnimatorConditionMode=ai;exports.AnimatorController=Wn;exports.AnimatorControllerBuilder=pf;exports.AnimatorControllerParameterType=tr;exports.AnimatorStateInfo=sc;exports.Antialiasing=Ah;exports.Application=yn;exports.AssetDatabase=lx;exports.AssetReference=J;exports.Attractor=wl;exports.AudioClip=lg;exports.AudioExtension=Ar;exports.AudioListener=_s;exports.AudioRolloffMode=Vx;exports.AudioSource=Pi;exports.Avatar=vo;exports.AvatarMarker=Ze;exports.Axes=Ca;exports.AxesHelper=al;exports.AxisRotationConstraint=Ly;exports.BUILD_TIME=Dc;exports.BaseUIComponent=Yi;exports.BasicIKConstraint=Ey;exports.BehaviorExtension=r_;exports.BehaviorModel=Et;exports.BloomEffect=Qf;exports.BoxCollider=Pf;exports.BoxGizmo=Br;exports.BoxHelperComponent=Mt;exports.Button=zs;exports.ButtonsFactory=Gi;exports.CallDirection=nC;exports.CallInfo=Gn;exports.Camera=Yt;exports.CameraTargetReachedEvent=Hc;exports.Canvas=Ka;exports.CanvasGroup=wo;exports.CapsuleCollider=Os;exports.ChangeMaterialOnClick=Jy;exports.ChangeTransformOnClick=Dr;exports.CharacterController=Tr;exports.CharacterControllerInput=Rs;exports.ChromaticAberration=Dh;exports.CircularBuffer=xi;exports.ClearFlags=dr;exports.ClickThrough=rp;exports.ClipExtrapolation=Ye;exports.Collider=Ti;exports.Collision=sw;exports.CollisionDetectionMode=gf;exports.ColorAdjustments=Ao;exports.ColorBySpeedModule=vl;exports.ColorOverLifetimeModule=Hf;exports.Component=$O;exports.Component$1=R;exports.ComponentLifecycleEvents=Ku;exports.Components=oL;exports.ConnectionEvents=Bw;exports.ContactPoint=nw;exports.ContactShadows=yh;exports.Context=z;exports.ContextArgs=eO;exports.ContextEvent=re;exports.ContextRegistry=se;exports.CursorFollow=Xr;exports.CustomBranding=Lr;exports.CustomShader=Se;exports.DefaultReflectionMode=ku;exports.Deletable=Dy;exports.DeleteBox=po;exports.DepthOfField=xn;exports.DeviceFlag=kf;exports.DirectorWrapMode=Gx;exports.DisposableStore=eu;exports.DocumentExtension=EC;exports.DragControls=ir;exports.DragMode=jy;exports.DragProfile=Iu;exports.DropListener=Ds;exports.Duplicatable=Wy;exports.EffectWrapper=Jc;exports.EmissionModule=js;exports.EmphasizeOnClick=dl;exports.EngineLoadingView=eh;exports.EnvironmentScene=Sf;exports.EventBus=Nm;exports.EventList=Z;exports.EventListEvent=vy;exports.EventSystem=Kt;exports.EventTrigger=Af;exports.FieldWithDefault=hS;exports.FileReference=ar;exports.FileReferenceSerializer=Ow;exports.FileSpawnModel=HE;exports.File_Event=tS;exports.FixedJoint=v_;exports.FixedRotationAxesConstraint=Jx;exports.Fog=gl;exports.FontStyle=Nu;exports.FrameEvent=ve;exports.GENERATOR=Na;exports.GameObject=C;exports.Gizmos=B;exports.GltfExport=Qy;exports.GltfExportBox=qy;exports.GrabPointPlaneConstraint=bh;exports.Gradient=Fr;exports.Graphic=Oh;exports.GraphicRaycaster=yf;exports.Graphics=yo;exports.GridHelper=yl;exports.GridLayoutGroup=u_;exports.GridSnapConstraint=Of;exports.GroundProjectedEnv=ts;exports.GroupActionModel=nr;exports.HideFlags=Ju;exports.HideOnStart=$i;exports.HingeJoint=Eh;exports.HorizontalLayoutGroup=d_;exports.HorizontalWrapMode=HS;exports.HostData=IP;exports.Image=kl;exports.ImageReference=rr;exports.ImageReferenceSerializer=kw;exports.InheritVelocityModule=P_;exports.Input=Tw;exports.InputEventQueue=ri;exports.InputEvents=be;exports.InputField=j_;exports.InstanceHandle=fr;exports.InstancingHandler=Sr;exports.InstancingUtil=Xi;exports.InstantiateEvent=fw;exports.InstantiateIdProvider=at;exports.InstantiateOptions=es;exports.Interactable=Ay;exports.JoinedRoomResponse=uk;exports.KeepRotationConstraint=Mf;exports.KeepScaleConstraint=Zx;exports.KeyEventArgs=sk;exports.Keyframe=ci;exports.LODGroup=Vf;exports.LODModel=_l;exports.LODsManager=Rw;exports.LeftRoomResponse=fk;exports.Light=Rt;exports.LightData=Ww;exports.LimitVelocityOverLifetimeModule=ht;exports.LoadingElementOptions=WI;exports.LogStats=Ry;exports.LogType=bi;exports.LookAt=F_;exports.LookAtConstraint=Mr;exports.MODULES=A;exports.MainModule=Ft;exports.MarkerType=qc;exports.MaskableGraphic=Mh;exports.MaterialPropertyBlock=Cs;exports.Mathf=L;exports.MeshCollider=ko;exports.MeshRenderer=wh;exports.MinMaxCurve=X;exports.MinMaxGradient=Ur;exports.NEEDLE_ENGINE_FEATURE_FLAGS=Hg;exports.NEKeyboardEvent=tc;exports.NEPointerEvent=ps;exports.NeedleButtonElement=PC;exports.NeedleEngineWebComponent=W_;exports.NeedleMenu=ns;exports.NeedlePatchesKey=Wd;exports.NeedleXRController=ay;exports.NeedleXRSession=V;exports.NeedleXRSync=Qw;exports.NeedleXRUtils=ax;exports.NestedGltf=bl;exports.NetworkConnection=Lc;exports.NetworkedStreamEvents=Xn;exports.NetworkedStreams=Fh;exports.Networking=S_;exports.NewInstanceModel=mw;exports.NoiseModule=me;exports.ObjectRaycaster=Qi;exports.ObjectUtils=Co;exports.OffsetConstraint=jr;exports.OneEuroFilter=$d;exports.OneEuroFilterXYZ=jg;exports.OpenURL=Ol;exports.OrbitControls=he;exports.Outline=ml;exports.OwnershipEvent=jw;exports.OwnershipModel=Fw;exports.PUBLIC_KEY=lo;exports.Padding=Ir;exports.ParticleBurst=Vu;exports.ParticleSubEmitter=k_;exports.ParticleSystem=Zc;exports.ParticleSystemBaseBehaviour=Ro;exports.ParticleSystemRenderer=tn;exports.ParticleSystemShapeType=$u;exports.PeerHandle=vs;exports.PeerNetworking=Lw;exports.Physics=Xa;exports.PhysicsExtension=a_;exports.PhysicsMaterialCombine=dt;exports.PixelationEffect=Ih;exports.PlaneHeightLockConstraint=By;exports.PlayAnimationOnClick=Yc;exports.PlayAudioOnClick=bo;exports.PlayableDirector=Qa;exports.PlayerColor=Za;exports.PlayerState=li;exports.PlayerStateEvent=LS;exports.PlayerSync=s_;exports.PlayerView=Uw;exports.PlayerViewManager=zw;exports.PointerEventData=fh;exports.PointerType=sf;exports.PostProcessing=Xw;exports.PostProcessingEffect=et;exports.PostProcessingEffectOrder=ot;exports.PostProcessingHandler=el;exports.Prefabs=$a;exports.PreliminaryAction=ul;exports.PreliminaryTrigger=Sh;exports.PrimitiveType=tl;exports.Progress=ce;exports.PromiseAllWithErrors=Lg;exports.PromiseErrorResult=Pm;exports.RGBAColor=ne;exports.RapierPhysics=Ua;exports.RawImage=np;exports.RaycastOptions=Pr;exports.Rect=NS;exports.RectTransform=bn;exports.ReflectionProbe=ms;exports.ReflectionProbeUsage=cS;exports.RegisteredAnimationInfo=ho;exports.RemoteSkybox=Oy;exports.RenderTexture=Hn;exports.RenderTextureSerializer=Bx;exports.Renderer=Zt;exports.RendererData=Vw;exports.RendererLightmap=Ny;exports.Rigidbody=We;exports.RigidbodyConstraints=Ve;exports.RoomEvents=ee;exports.RotationBySpeedModule=en;exports.RotationOverLifetimeModule=wn;exports.ScaleLimitConstraint=Iy;exports.SceneLightSettings=Lu;exports.SceneSwitcher=He;exports.ScreenCapture=Do;exports.ScreenSpaceAmbientOcclusion=Fs;exports.ScreenSpaceAmbientOcclusionN8=Sn;exports.ScrollFollow=rs;exports.SeeThrough=A_;exports.SendQueue=fn;exports.SerializationContext=ty;exports.SetActiveOnClick=e_;exports.ShadowCastingMode=Fu;exports.ShadowCatcher=zh;exports.ShapeModule=C_;exports.ShapeOverlapResult=ow;exports.SharpeningEffect=Bh;exports.SignalAsset=ph;exports.SignalReceiver=vr;exports.SignalReceiverEvent=rl;exports.SignalTrackHandler=Qc;exports.Size=zS;exports.SizeBySpeedModule=pi;exports.SizeOverLifetimeModule=zr;exports.SkinnedMeshRenderer=$y;exports.SmoothFollow=Zf;exports.SnapToSurfaceConstraint=Ef;exports.SpatialGrabRaycaster=br;exports.SpatialHtml=Wh;exports.SpatialTrigger=Jf;exports.SpatialTriggerReceiver=Kn;exports.SpectatorCamera=ep;exports.SphereCollider=ll;exports.SphereIntersection=uy;exports.SplineContainer=Hr;exports.SplineData=Zn;exports.SplineWalker=sn;exports.Sprite=Is;exports.SpriteData=Fa;exports.SpriteRenderer=ui;exports.SpriteSheet=Ya;exports.StateMachineBehaviour=qO;exports.StreamEndedEvent=R_;exports.StreamReceivedEvent=iC;exports.SubEmitterSystem=Wu;exports.SyncedCamera=D_;exports.SyncedRoom=Cn;exports.SyncedTransform=_n;exports.TapGestureTrigger=i_;exports.TeleportTarget=Uf;exports.TestRunner=I_;exports.TestSimulateUserData=L_;exports.Text=jt;exports.TextAnchor=Qe;exports.TextBuilder=c_;exports.TextExtension=Nf;exports.TextureSheetAnimationModule=Ut;exports.TiltShiftEffect=os;exports.Time=Gw;exports.TimelineActivationTrack=vf;exports.TimelineAnimationTrack=Xc;exports.TimelineAudioTrack=bs;exports.TimelineBuilder=hp;exports.TimelineControlTrack=wf;exports.TimelineMarkerTrack=bf;exports.TimelineTrackHandler=Er;exports.ToneMappingEffect=Nr;exports.TrackType=ge;exports.TrailModule=Be;exports.TransformData=De;exports.TransformGizmo=qr;exports.TriggerBuilder=It;exports.TriggerModel=mo;exports.TypeStore=O;exports.UIRaycastUtils=xy;exports.UIRootComponent=Ph;exports.USDDocument=Yy;exports.USDObject=Je;exports.USDWriter=SS;exports.USDZExporter=CS;exports.USDZExporter$1=Yn;exports.USDZText=Oa;exports.USDZUIExtension=p_;exports.UriSerializer=jx;exports.UsageMarker=_h;exports.UserJoinedOrLeftRoomModel=pk;exports.VERSION=Qt;exports.VariantAction=Zy;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=h_;exports.VerticalWrapMode=GS;exports.VideoPlayer=lt;exports.ViewDevice=Ss;exports.Vignette=Wr;exports.VisibilityAction=Ch;exports.Voip=Us;exports.Volume=jh;exports.VolumeParameter=N;exports.VolumeProfile=qf;exports.WaitForFrames=ek;exports.WaitForPromise=Ew;exports.WaitForSeconds=iy;exports.Watch=ws;exports.WebARCameraBackground=Hh;exports.WebARSessionRoot=Hi;exports.WebXR=zf;exports.WebXRButtonFactory=go;exports.WebXRImageTracking=Tl;exports.WebXRImageTrackingModel=Vs;exports.WebXRPlaneTracking=Ws;exports.WebXRTrackedImage=Ja;exports.XRControllerFollow=Ns;exports.XRControllerModel=Ms;exports.XRControllerMovement=Oi;exports.XRFlag=pn;exports.XRRig=cp;exports.XRState=Xt;exports.XRStateFlag=Nn;exports._$lAjTeY=rh;exports._ERXbX=qi;exports.__Ignore=TC;exports.__internalNotifyObjectDestroyed=cO;exports._owM=xs;exports.activeInHierarchyFieldName=Vn;exports.addAttributeChangeCallback=uu;exports.addComponent=Qn;exports.addCustomExtensionPlugin=gT;exports.addNewComponent=cr;exports.addPatch=Zu;exports.apply=hf;exports.applyHMRChanges=UO;exports.applyPrototypeExtensions=yx;exports.beginListenDestroy=pw;exports.beginListenInstantiate=_w;exports.binaryIdentifierCasts=ny;exports.build_scene_functions=Jk;exports.builtinComponentKeyName=Yo;exports.calculateProgress01=V_;exports.clearMessages=o1;exports.compareAssociation=ww;exports.copyTexture=$0;exports.createMotion=Dx;exports.debugNet=ii;exports.debugOwner=ua;exports.decompressGpuTexture=MS;exports.deepClone=ih;exports.delay=Ps;exports.delayForFrames=qu;exports.deserializeObject=Cu;exports.destroy=Ci;exports.destroyComponentInstance=Ox;exports.determineMimeTypeFromExtension=iS;exports.disposeObjectResources=Ce;exports.disposeStream=Vi;exports.editorGuidKeyName=mc;exports.enableSpatialConsole=Ta;exports.exportAsGLTF=tL;exports.findByGuid=my;exports.findObjectOfType=ol;exports.findObjectsOfType=Ex;exports.findResourceUsers=fy;exports.fitCamera=zx;exports.fitObjectIntoVolume=W0;exports.foreachComponent=_r;exports.foreachComponentEnumerator=gy;exports.forward=C1;exports.generateQRCode=nx;exports.generateSeed=yw;exports.getBoundingBox=hi;exports.getCameraController=I0;exports.getComponent=Po;exports.getComponentInChildren=dh;exports.getComponentInParent=Nc;exports.getComponents=nl;exports.getComponentsInChildren=sl;exports.getComponentsInParent=uf;exports.getFormattedDate=bS;exports.getIconElement=mt;exports.getIconTexture=Wm;exports.getLoader=ks;exports.getOrAddComponent=hh;exports.getParam=x;exports.getParentHierarchyPath=O1;exports.getPath=jC;exports.getPeerOptions=ak;exports.getPeerjsInstance=Iw;exports.getResourceUserCount=dO;exports.getSceneData=$w;exports.getTempColor=F0;exports.getTempQuaternion=oi;exports.getTempVector=j;exports.getUrlParams=th;exports.getVisibleInCustomShadowRendering=V0;exports.getWorldDirection=U0;exports.getWorldEuler=zg;exports.getWorldPosition=te;exports.getWorldQuaternion=_e;exports.getWorldRotation=Qu;exports.getWorldScale=Ue;exports.hasPointerEventComponent=Au;exports.hideDebugConsole=Q0;exports.imageToCanvas=ES;exports.initAddressableSerializers=Mw;exports.initBuiltinSerializers=Fx;exports.initEngine=ZI;exports.initPhysics=CC;exports.initVolumeParameterSerializer=qx;exports.instantiate=_o;exports.invokeLoadedImportPluginHooks=lS;exports.invokeXRSessionEnd=ix;exports.invokeXRSessionStart=tx;exports.isActiveInHierarchy=_x;exports.isActiveSelf=il;exports.isAndroidDevice=VC;exports.isAnimationAction=N0;exports.isComponent=ef;exports.isDebugMode=AC;exports.isDesktop=UC;exports.isDestroyed=yr;exports.isDevEnvironment=E;exports.isDisposable=zO;exports.isDisposed=lO;exports.isExporting=JI;exports.isGLTFModel=iw;exports.isHostedOnGlitch=w0;exports.isHotReloadEnabled=rg;exports.isHotReloading=jO;exports.isIPad=NC;exports.isIconElement=sx;exports.isLocalNetwork=wi;exports.isMacOS=GC;exports.isMobileDevice=zC;exports.isMozillaXR=WC;exports.isQuest=XC;exports.isResourceTrackingEnabled=hx;exports.isSafari=qC;exports.isTrackModel=JM;exports.isUsingInstancing=df;exports.isiOS=HC;exports.isiPad=$C;exports.loadAsset=II;exports.loadPMREM=Cf;exports.loadSync=$_;exports.logHierarchy=gu;exports.lookAtInverse=g1;exports.lookAtObject=nh;exports.lookAtScreenPoint=y1;exports.makeId=IC;exports.makeIdFromRandomWords=C0;exports.makeNameSafe=ki;exports.markAsInstancedRendered=bx;exports.microphonePermissionsGranted=QC;exports.nameof=RC;exports.nameofFactory=x0;exports.needle=gk;exports.offBeforeXRSession=ex;exports.offXRSessionEnd=Jw;exports.offXRSessionStart=Zw;exports.on=NO;exports.onAfterRender=_P;exports.onBeforeRender=yP;exports.onBeforeXRSession=Wk;exports.onClear=mP;exports.onDestroy=gP;exports.onInitialized=Qg;exports.onStart=nf;exports.onSyncDestroy=DP;exports.onSyncInstantiate=gw;exports.onUpdate=cw;exports.onXRSessionEnd=cy;exports.onXRSessionStart=rf;exports.parseSync=xC;exports.placeOnSurface=G0;exports.postprocessFBXMaterials=Vg;exports.prefix=DM;exports.pushState=S0;exports.randomNumber=LC;exports.registerBinaryType=sy;exports.registerComponent=lf;exports.registerComponentExtension=Uy;exports.registerCustomEffectType=nn;exports.registerExportExtensions=zy;exports.registerExtensions=ju;exports.registerHotReloadType=Tx;exports.registerLoader=aw;exports.registerPrefabProvider=bw;exports.registerPrototypeExtensions=py;exports.registerType=Gg;exports.relativePathPrefix=k0;exports.removeAttributeChangeCallback=M0;exports.removeComponent=_y;exports.removeCustomImportExtensionType=yT;exports.removePatch=cP;exports.resolveUrl=Jn;exports.sanitizeString=P0;exports.saveImage=_C;exports.screenshot=fI;exports.screenshot2=N_;exports.sendDestroyed=Kg;exports.serializable=p;exports.serializeObject=Sw;exports.serializeable=Ge;exports.setActive=vc;exports.setAllowBalloonMessages=R0;exports.setAllowOverlayMessages=t1;exports.setAutoFitEnabled=pu;exports.setCameraController=Mm;exports.setDestroyed=wx;exports.setDevEnvironment=h1;exports.setDisposable=ux;exports.setDontDestroy=fa;exports.setOrAddParamsToUrl=Cm;exports.setParam=DC;exports.setParamWithoutReload=Rc;exports.setPeerOptions=lk;exports.setResourceTrackingEnabled=aO;exports.setState=Dg;exports.setVisibleInCustomShadowRendering=$g;exports.setWorldEuler=Ng;exports.setWorldPosition=Si;exports.setWorldPositionXYZ=mr;exports.setWorldQuaternion=gn;exports.setWorldQuaternionXYZW=Ug;exports.setWorldRotation=z0;exports.setWorldRotationXYZ=sh;exports.setWorldScale=za;exports.showBalloonError=oh;exports.showBalloonMessage=ke;exports.showBalloonWarning=fe;exports.showDebugConsole=Wg;exports.slerp=B0;exports.syncDestroy=ah;exports.syncField=ky;exports.syncInstantiate=Zg;exports.textureToCanvas=M1;exports.toSourceId=O0;exports.tryCastBinary=Aw;exports.tryDetermineMimetypeFromBinary=sS;exports.tryDetermineMimetypeFromURL=nS;exports.tryFindObject=Ac;exports.tryGetGuid=Dw;exports.unregisterHotReloadType=Rx;exports.unregisterPrefabProvider=BP;exports.unwatchWrite=Ig;exports.useForAutoFit=L0;exports.validate=Ie;exports.watchWrite=Xu;
|
|
1752
|
+
`),ti&&this._onCreateEffectsDebug(this._composer,o)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const o=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);o.name=e.map(r=>r.name).join(", "),o.mainScene=n,o.enabled=!0,o.renderToScreen=!1,t.addPass(o),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(ti==="passes"){const i=new A.POSTPROCESSING.MODULE.DepthEffect({blendFunction:A.POSTPROCESSING.MODULE.BlendFunction.NORMAL,inverted:!0});i.name="Depth Effect";const n=new A.POSTPROCESSING.MODULE.EffectPass(t,i);if(n.name="Depth Effect Pass",n.enabled=!1,e.passes.push(n),this._passIndices!==null){const r=[e.passes[0]];this._passIndices.length>0&&r.push(...this._passIndices.filter(a=>a!==0).map(a=>e.passes[a]).filter(a=>a)),r.length>0&&console.log("[PostProcessing] Passes (selected) →",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const o=this.context.menu;if(o&&this._passIndices===null){this._menuEntry&&this._menuEntry.remove();const r=document.createElement("select");r.multiple=!0;const a=document.createElement("option");a.innerText="Final Output",a.value="-1",r.appendChild(a);for(const l of e.passes){const h=document.createElement("option");h.innerText=l.name,h.value=`${e.passes.indexOf(l)}`,h.title=l.name,r.appendChild(h)}o.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(h=>parseInt(h.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const sL=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:el},Symbol.toStringTag,{value:"Module"}));class hp{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new at(t??Date.now())}static create(e,t){return new hp(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,ge.Marker,null),this}clip(e,t){if(!this._currentTrack)throw new Error("TimelineBuilder: .clip() must be called after a track method (e.g. .animationTrack())");this.commitInlineTracks();const i=this._currentTrack;switch(i.type){case ge.Animation:{let n;if(e instanceof c.AnimationClip)n=e;else{const d=Array.isArray(e)?e:[e],u=i.outputs[0],f=u instanceof c.Object3D?u:u!=null&&"gameObject"in u?u.gameObject:void 0;n=Vc(d,f)}const o=t??{},r=o.duration??n.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:o.clipIn??0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:o.preExtrapolation??Ye.None,postExtrapolationMode:o.postExtrapolation??Ye.None,reversed:o.reversed,asset:{clip:n,loop:o.loop??!1,duration:n.duration,removeStartOffset:o.removeStartOffset??!1}};i.clips.push(h),i.cursor=l;break}case ge.Audio:{const n=e,o=t??{},r=o.duration,a=o.start??i.cursor,l=a+r,h={start:a,end:l,duration:r,timeScale:o.speed??1,clipIn:0,easeInDuration:o.easeIn??0,easeOutDuration:o.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:o.loop??!1,volume:o.volume??1}};i.clips.push(h),i.cursor=l;break}case ge.Activation:{const n=e,o=n.start??i.cursor,r=o+n.duration,a={start:o,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{}};i.clips.push(a),i.cursor=r;break}case ge.Control:{const n=e,o=t??{},r=o.start??i.cursor,a=o.duration,l=r+a,h={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{sourceObject:n,controlActivation:o.controlActivation??!0,updateDirector:o.updateDirector??!0}};i.clips.push(h),i.cursor=l;break}default:throw new Error(`TimelineBuilder: .clip() is not supported on track type "${i.type}"`)}return this}marker(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .marker() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:qc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:t};return this._currentTrack.markers.push(n),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}signal(e,t,i){if(!this._currentTrack)throw new Error("TimelineBuilder: .signal() must be called after a track method");if(this._currentTrack.type!==ge.Signal&&this._currentTrack.type!==ge.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),o=this._tracks.indexOf(this._currentTrack),r={type:qc.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:o,guid:n,callback:t}),e>this._currentTrack.cursor&&(this._currentTrack.cursor=e),this}muted(e=!0){if(!this._currentTrack)throw new Error("TimelineBuilder: .muted() must be called after a track method");return this._currentTrack.muted=e,this}track(e,t,i,n){if(!this._currentTrack)throw new Error("TimelineBuilder: .track() must be called after .animationTrack()");if(this._currentTrack.type!==ge.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(by(e,t,i,n)),this}build(){this.commitInlineTracks();const e=this._tracks.map(t=>{const i={name:t.name,type:t.type,muted:t.muted,outputs:t.outputs};return t.clips.length>0&&(i.clips=t.clips),t.markers.length>0&&(i.markers=t.markers),t.volume!==void 0&&(i.volume=t.volume),t.trackOffset!==void 0&&(i.trackOffset=t.trackOffset),i});return{name:this._name,tracks:e}}install(e){const t=this.build();if(this._pendingSignals.length>0){const i=e.gameObject;let n=C.getComponent(i,vr);n||(n=C.addComponent(i,vr)),n.events||(n.events=[]);for(const o of this._pendingSignals){const r=new ph;r.guid=o.guid;const a=new rl;a.signal=r,a.reaction=new Z([o.callback]),n.events.push(a);const l=t.tracks[o.trackIndex];l&&!l.outputs.includes(n)&&l.outputs.push(n)}}return e.playableAsset=t,t}pushTrack(e,t,i){const n={name:e,type:t,muted:!1,outputs:i?[i]:[],clips:[],markers:[],cursor:0,inlineTracks:[]};return this._tracks.push(n),n}commitInlineTracks(){if(!this._currentTrack||this._currentTrack.inlineTracks.length===0)return;const e=this._currentTrack,t=e.outputs[0],i=t instanceof c.Object3D?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=Vc(e.inlineTracks,i),o=e.cursor,r=n.duration,a={start:o,end:o+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:Ye.None,postExtrapolationMode:Ye.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=o+r,e.inlineTracks=[]}}class TC{}const oL=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:pe,ActionCollection:AS,ActionModel:si,AlignmentConstraint:gh,Animation:Lt,AnimationBuilder:ff,AnimationCurve:Th,AnimationExtension:If,Animator:gt,AnimatorController:Wn,Antialiasing:Ah,Attractor:wl,AudioExtension:Ar,AudioListener:_s,AudioSource:Pi,Avatar:vo,AvatarMarker:Ze,AxesHelper:al,AxisRotationConstraint:Ly,BaseUIComponent:Yi,BasicIKConstraint:Ey,BehaviorExtension:r_,BehaviorModel:Et,BloomEffect:Qf,BoxCollider:Pf,BoxGizmo:Br,BoxHelperComponent:Mt,Button:zs,CallInfo:Gn,Camera:Yt,CameraTargetReachedEvent:Hc,Canvas:Ka,CanvasGroup:wo,CapsuleCollider:Os,ChangeMaterialOnClick:Jy,ChangeTransformOnClick:Dr,CharacterController:Tr,CharacterControllerInput:Rs,ChromaticAberration:Dh,ClickThrough:rp,ColorAdjustments:Ao,ColorBySpeedModule:vl,ColorOverLifetimeModule:Hf,ContactShadows:yh,CursorFollow:Xr,CustomBranding:Lr,Deletable:Dy,DeleteBox:po,DepthOfField:xn,DeviceFlag:kf,DocumentExtension:EC,DragControls:ir,DragProfile:Iu,DropListener:Ds,Duplicatable:Wy,EffectWrapper:Jc,EmissionModule:js,EmphasizeOnClick:dl,EnvironmentScene:Sf,EventList:Z,EventListEvent:vy,EventSystem:Kt,EventTrigger:Af,FieldWithDefault:hS,FixedJoint:v_,FixedRotationAxesConstraint:Jx,Fog:gl,GltfExport:Qy,GltfExportBox:qy,GrabPointPlaneConstraint:bh,Gradient:Fr,Graphic:Oh,GraphicRaycaster:yf,GridHelper:yl,GridLayoutGroup:u_,GridSnapConstraint:Of,GroundProjectedEnv:ts,GroupActionModel:nr,HideOnStart:$i,HingeJoint:Eh,HorizontalLayoutGroup:d_,get HoverAnimation(){return exports.HoverAnimation},Image:kl,InheritVelocityModule:P_,InputField:j_,InstanceHandle:fr,InstancingHandler:Sr,Interactable:Ay,KeepRotationConstraint:Mf,KeepScaleConstraint:Zx,Keyframe:ci,LODGroup:Vf,LODModel:_l,Light:Rt,LimitVelocityOverLifetimeModule:ht,LogStats:Ry,LookAt:F_,LookAtConstraint:Mr,MainModule:Ft,MaskableGraphic:Mh,MeshCollider:ko,MeshRenderer:wh,MinMaxCurve:X,MinMaxGradient:Ur,NeedleMenu:ns,NestedGltf:bl,Networking:S_,NoiseModule:me,ObjectRaycaster:Qi,OffsetConstraint:jr,OpenURL:Ol,OrbitControls:he,Outline:ml,Padding:Ir,ParticleBurst:Vu,ParticleSubEmitter:k_,ParticleSystem:Zc,ParticleSystemRenderer:tn,PhysicsExtension:a_,PixelationEffect:Ih,PlaneHeightLockConstraint:By,PlayAnimationOnClick:Yc,PlayAudioOnClick:bo,PlayableDirector:Qa,PlayerColor:Za,PointerEventData:fh,PostProcessingHandler:el,PreliminaryAction:ul,PreliminaryTrigger:Sh,RawImage:np,Rect:NS,RectTransform:bn,ReflectionProbe:ms,RegisteredAnimationInfo:ho,RemoteSkybox:Oy,Renderer:Zt,RendererLightmap:Ny,Rigidbody:We,RotationBySpeedModule:en,RotationOverLifetimeModule:wn,ScaleLimitConstraint:Iy,SceneSwitcher:He,ScreenCapture:Do,ScreenSpaceAmbientOcclusion:Fs,ScreenSpaceAmbientOcclusionN8:Sn,ScrollFollow:rs,SeeThrough:A_,SetActiveOnClick:e_,ShadowCatcher:zh,ShapeModule:C_,SharpeningEffect:Bh,SignalAsset:ph,SignalReceiver:vr,SignalReceiverEvent:rl,SignalTrackHandler:Qc,Size:zS,SizeBySpeedModule:pi,SizeOverLifetimeModule:zr,SkinnedMeshRenderer:$y,SmoothFollow:Zf,SnapToSurfaceConstraint:Ef,SpatialGrabRaycaster:br,SpatialHtml:Wh,SpatialTrigger:Jf,SpatialTriggerReceiver:Kn,SpectatorCamera:ep,SphereCollider:ll,SplineContainer:Hr,SplineData:Zn,SplineWalker:sn,Sprite:Is,SpriteData:Fa,SpriteRenderer:ui,SpriteSheet:Ya,SubEmitterSystem:Wu,SyncedCamera:D_,SyncedRoom:Cn,SyncedTransform:_n,TapGestureTrigger:i_,TeleportTarget:Uf,TestRunner:I_,TestSimulateUserData:L_,Text:jt,TextBuilder:c_,TextExtension:Nf,TextureSheetAnimationModule:Ut,TiltShiftEffect:os,TimelineActivationTrack:vf,TimelineAnimationTrack:Xc,TimelineAudioTrack:bs,TimelineBuilder:hp,TimelineControlTrack:wf,TimelineMarkerTrack:bf,ToneMappingEffect:Nr,TrailModule:Be,TransformData:De,TransformGizmo:qr,TriggerBuilder:It,TriggerModel:mo,UIRaycastUtils:xy,UIRootComponent:Ph,USDZExporter:Yn,USDZText:Oa,USDZUIExtension:p_,UsageMarker:_h,VariantAction:Zy,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:h_,VideoPlayer:lt,get ViewBox(){return exports.ViewBox},Vignette:Wr,VisibilityAction:Ch,Voip:Us,Volume:jh,VolumeParameter:N,VolumeProfile:qf,WebARCameraBackground:Hh,WebARSessionRoot:Hi,WebXR:zf,WebXRImageTracking:Tl,WebXRImageTrackingModel:Vs,WebXRPlaneTracking:Ws,WebXRTrackedImage:Ja,XRControllerFollow:Ns,XRControllerModel:Ms,XRControllerMovement:Oi,XRFlag:pn,XRRig:cp,XRState:Xt,__Ignore:TC},Symbol.toStringTag,{value:"Module"}));exports.SplineUtils=void 0;(s=>{function e(t,i=!1,n=.75){const o=new Hr,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 Zn;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 rL extends ue.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-DiCnZlf3.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ea&&Ea.tagName.toUpperCase()==="SCRIPT"&&Ea.src||new URL("needle-engine.bundle-D8gP8Nd0.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||"Could not load worker."}`))},e.onmessage=h=>{const{data:d}=h;if(d.error)o(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:u,position:f}=d,m=ue.MeshBVH.deserialize(u,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=f,u.index)if(t.index)t.index.array=u.index;else{const v=new c.BufferAttribute(u.index,1,!1);t.setIndex(v)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new c.Box3)),i.onProgress&&i.onProgress(d.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const r=t.index?t.index.array:null,a=t.attributes.position.array,l=[a];r&&l.push(r),e.postMessage({index:r,position:a,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},l.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const aL=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:rL},Symbol.toStringTag,{value:"Module"}));exports.$componentName=bu;exports.$physicsKey=uP;exports.ActionBuilder=pe;exports.ActionCollection=AS;exports.ActionModel=si;exports.Addressables=Pw;exports.AlignmentConstraint=gh;exports.AmbientMode=Da;exports.Animation=Lt;exports.AnimationBuilder=ff;exports.AnimationCurve=Th;exports.AnimationExtension=If;exports.Animator=gt;exports.AnimatorConditionMode=ai;exports.AnimatorController=Wn;exports.AnimatorControllerBuilder=pf;exports.AnimatorControllerParameterType=tr;exports.AnimatorStateInfo=sc;exports.Antialiasing=Ah;exports.Application=yn;exports.AssetDatabase=lx;exports.AssetReference=J;exports.Attractor=wl;exports.AudioClip=lg;exports.AudioExtension=Ar;exports.AudioListener=_s;exports.AudioRolloffMode=Vx;exports.AudioSource=Pi;exports.Avatar=vo;exports.AvatarMarker=Ze;exports.Axes=Ca;exports.AxesHelper=al;exports.AxisRotationConstraint=Ly;exports.BUILD_TIME=Dc;exports.BaseUIComponent=Yi;exports.BasicIKConstraint=Ey;exports.BehaviorExtension=r_;exports.BehaviorModel=Et;exports.BloomEffect=Qf;exports.BoxCollider=Pf;exports.BoxGizmo=Br;exports.BoxHelperComponent=Mt;exports.Button=zs;exports.ButtonsFactory=Gi;exports.CallDirection=nC;exports.CallInfo=Gn;exports.Camera=Yt;exports.CameraTargetReachedEvent=Hc;exports.Canvas=Ka;exports.CanvasGroup=wo;exports.CapsuleCollider=Os;exports.ChangeMaterialOnClick=Jy;exports.ChangeTransformOnClick=Dr;exports.CharacterController=Tr;exports.CharacterControllerInput=Rs;exports.ChromaticAberration=Dh;exports.CircularBuffer=xi;exports.ClearFlags=dr;exports.ClickThrough=rp;exports.ClipExtrapolation=Ye;exports.Collider=Ti;exports.Collision=sw;exports.CollisionDetectionMode=gf;exports.ColorAdjustments=Ao;exports.ColorBySpeedModule=vl;exports.ColorOverLifetimeModule=Hf;exports.Component=$O;exports.Component$1=R;exports.ComponentLifecycleEvents=Ku;exports.Components=oL;exports.ConnectionEvents=Bw;exports.ContactPoint=nw;exports.ContactShadows=yh;exports.Context=z;exports.ContextArgs=eO;exports.ContextEvent=re;exports.ContextRegistry=se;exports.CursorFollow=Xr;exports.CustomBranding=Lr;exports.CustomShader=Se;exports.DefaultReflectionMode=ku;exports.Deletable=Dy;exports.DeleteBox=po;exports.DepthOfField=xn;exports.DeviceFlag=kf;exports.DirectorWrapMode=Gx;exports.DisposableStore=eu;exports.DocumentExtension=EC;exports.DragControls=ir;exports.DragMode=jy;exports.DragProfile=Iu;exports.DropListener=Ds;exports.Duplicatable=Wy;exports.EffectWrapper=Jc;exports.EmissionModule=js;exports.EmphasizeOnClick=dl;exports.EngineLoadingView=eh;exports.EnvironmentScene=Sf;exports.EventBus=Nm;exports.EventList=Z;exports.EventListEvent=vy;exports.EventSystem=Kt;exports.EventTrigger=Af;exports.FieldWithDefault=hS;exports.FileReference=ar;exports.FileReferenceSerializer=Ow;exports.FileSpawnModel=HE;exports.File_Event=tS;exports.FixedJoint=v_;exports.FixedRotationAxesConstraint=Jx;exports.Fog=gl;exports.FontStyle=Nu;exports.FrameEvent=ve;exports.GENERATOR=Na;exports.GameObject=C;exports.Gizmos=B;exports.GltfExport=Qy;exports.GltfExportBox=qy;exports.GrabPointPlaneConstraint=bh;exports.Gradient=Fr;exports.Graphic=Oh;exports.GraphicRaycaster=yf;exports.Graphics=yo;exports.GridHelper=yl;exports.GridLayoutGroup=u_;exports.GridSnapConstraint=Of;exports.GroundProjectedEnv=ts;exports.GroupActionModel=nr;exports.HideFlags=Ju;exports.HideOnStart=$i;exports.HingeJoint=Eh;exports.HorizontalLayoutGroup=d_;exports.HorizontalWrapMode=HS;exports.HostData=IP;exports.Image=kl;exports.ImageReference=rr;exports.ImageReferenceSerializer=kw;exports.InheritVelocityModule=P_;exports.Input=Tw;exports.InputEventQueue=ri;exports.InputEvents=be;exports.InputField=j_;exports.InstanceHandle=fr;exports.InstancingHandler=Sr;exports.InstancingUtil=Xi;exports.InstantiateEvent=fw;exports.InstantiateIdProvider=at;exports.InstantiateOptions=es;exports.Interactable=Ay;exports.JoinedRoomResponse=uk;exports.KeepRotationConstraint=Mf;exports.KeepScaleConstraint=Zx;exports.KeyEventArgs=sk;exports.Keyframe=ci;exports.LODGroup=Vf;exports.LODModel=_l;exports.LODsManager=Rw;exports.LeftRoomResponse=fk;exports.Light=Rt;exports.LightData=Ww;exports.LimitVelocityOverLifetimeModule=ht;exports.LoadingElementOptions=WI;exports.LogStats=Ry;exports.LogType=bi;exports.LookAt=F_;exports.LookAtConstraint=Mr;exports.LuMYUbW=xs;exports.MODULES=A;exports.MainModule=Ft;exports.MarkerType=qc;exports.MaskableGraphic=Mh;exports.MaterialPropertyBlock=Cs;exports.Mathf=L;exports.MeshCollider=ko;exports.MeshRenderer=wh;exports.MinMaxCurve=X;exports.MinMaxGradient=Ur;exports.NEEDLE_ENGINE_FEATURE_FLAGS=Hg;exports.NEKeyboardEvent=tc;exports.NEPointerEvent=ps;exports.NeedleButtonElement=PC;exports.NeedleEngineWebComponent=W_;exports.NeedleMenu=ns;exports.NeedlePatchesKey=Wd;exports.NeedleXRController=ay;exports.NeedleXRSession=V;exports.NeedleXRSync=Qw;exports.NeedleXRUtils=ax;exports.NestedGltf=bl;exports.NetworkConnection=Lc;exports.NetworkedStreamEvents=Xn;exports.NetworkedStreams=Fh;exports.Networking=S_;exports.NewInstanceModel=mw;exports.NoiseModule=me;exports.ObjectRaycaster=Qi;exports.ObjectUtils=Co;exports.OffsetConstraint=jr;exports.OneEuroFilter=$d;exports.OneEuroFilterXYZ=jg;exports.OpenURL=Ol;exports.OrbitControls=he;exports.Outline=ml;exports.OwnershipEvent=jw;exports.OwnershipModel=Fw;exports.PUBLIC_KEY=lo;exports.Padding=Ir;exports.ParticleBurst=Vu;exports.ParticleSubEmitter=k_;exports.ParticleSystem=Zc;exports.ParticleSystemBaseBehaviour=Ro;exports.ParticleSystemRenderer=tn;exports.ParticleSystemShapeType=$u;exports.PeerHandle=vs;exports.PeerNetworking=Lw;exports.Physics=Xa;exports.PhysicsExtension=a_;exports.PhysicsMaterialCombine=dt;exports.PixelationEffect=Ih;exports.PlaneHeightLockConstraint=By;exports.PlayAnimationOnClick=Yc;exports.PlayAudioOnClick=bo;exports.PlayableDirector=Qa;exports.PlayerColor=Za;exports.PlayerState=li;exports.PlayerStateEvent=LS;exports.PlayerSync=s_;exports.PlayerView=Uw;exports.PlayerViewManager=zw;exports.PointerEventData=fh;exports.PointerType=sf;exports.PostProcessing=Xw;exports.PostProcessingEffect=et;exports.PostProcessingEffectOrder=ot;exports.PostProcessingHandler=el;exports.Prefabs=$a;exports.PreliminaryAction=ul;exports.PreliminaryTrigger=Sh;exports.PrimitiveType=tl;exports.Progress=ce;exports.PromiseAllWithErrors=Lg;exports.PromiseErrorResult=Pm;exports.RGBAColor=ne;exports.RapierPhysics=Ua;exports.RawImage=np;exports.RaycastOptions=Pr;exports.Rect=NS;exports.RectTransform=bn;exports.ReflectionProbe=ms;exports.ReflectionProbeUsage=cS;exports.RegisteredAnimationInfo=ho;exports.RemoteSkybox=Oy;exports.RenderTexture=Hn;exports.RenderTextureSerializer=Bx;exports.Renderer=Zt;exports.RendererData=Vw;exports.RendererLightmap=Ny;exports.Rigidbody=We;exports.RigidbodyConstraints=Ve;exports.RoomEvents=ee;exports.RotationBySpeedModule=en;exports.RotationOverLifetimeModule=wn;exports.ScaleLimitConstraint=Iy;exports.SceneLightSettings=Lu;exports.SceneSwitcher=He;exports.ScreenCapture=Do;exports.ScreenSpaceAmbientOcclusion=Fs;exports.ScreenSpaceAmbientOcclusionN8=Sn;exports.ScrollFollow=rs;exports.SeeThrough=A_;exports.SendQueue=fn;exports.SerializationContext=ty;exports.SetActiveOnClick=e_;exports.ShadowCastingMode=Fu;exports.ShadowCatcher=zh;exports.ShapeModule=C_;exports.ShapeOverlapResult=ow;exports.SharpeningEffect=Bh;exports.SignalAsset=ph;exports.SignalReceiver=vr;exports.SignalReceiverEvent=rl;exports.SignalTrackHandler=Qc;exports.Size=zS;exports.SizeBySpeedModule=pi;exports.SizeOverLifetimeModule=zr;exports.SkinnedMeshRenderer=$y;exports.SmoothFollow=Zf;exports.SnapToSurfaceConstraint=Ef;exports.SpatialGrabRaycaster=br;exports.SpatialHtml=Wh;exports.SpatialTrigger=Jf;exports.SpatialTriggerReceiver=Kn;exports.SpectatorCamera=ep;exports.SphereCollider=ll;exports.SphereIntersection=uy;exports.SplineContainer=Hr;exports.SplineData=Zn;exports.SplineWalker=sn;exports.Sprite=Is;exports.SpriteData=Fa;exports.SpriteRenderer=ui;exports.SpriteSheet=Ya;exports.StateMachineBehaviour=qO;exports.StreamEndedEvent=R_;exports.StreamReceivedEvent=iC;exports.SubEmitterSystem=Wu;exports.SyncedCamera=D_;exports.SyncedRoom=Cn;exports.SyncedTransform=_n;exports.TapGestureTrigger=i_;exports.TeleportTarget=Uf;exports.TestRunner=I_;exports.TestSimulateUserData=L_;exports.Text=jt;exports.TextAnchor=Qe;exports.TextBuilder=c_;exports.TextExtension=Nf;exports.TextureSheetAnimationModule=Ut;exports.TiltShiftEffect=os;exports.Time=Gw;exports.TimelineActivationTrack=vf;exports.TimelineAnimationTrack=Xc;exports.TimelineAudioTrack=bs;exports.TimelineBuilder=hp;exports.TimelineControlTrack=wf;exports.TimelineMarkerTrack=bf;exports.TimelineTrackHandler=Er;exports.ToneMappingEffect=Nr;exports.TrackType=ge;exports.TrailModule=Be;exports.TransformData=De;exports.TransformGizmo=qr;exports.TriggerBuilder=It;exports.TriggerModel=mo;exports.TypeStore=O;exports.UIRaycastUtils=xy;exports.UIRootComponent=Ph;exports.USDDocument=Yy;exports.USDObject=Je;exports.USDWriter=SS;exports.USDZExporter=CS;exports.USDZExporter$1=Yn;exports.USDZText=Oa;exports.USDZUIExtension=p_;exports.UriSerializer=jx;exports.UsageMarker=_h;exports.UserJoinedOrLeftRoomModel=pk;exports.VERSION=Qt;exports.VariantAction=Zy;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=h_;exports.VerticalWrapMode=GS;exports.VideoPlayer=lt;exports.ViewDevice=Ss;exports.Vignette=Wr;exports.VisibilityAction=Ch;exports.Voip=Us;exports.Volume=jh;exports.VolumeParameter=N;exports.VolumeProfile=qf;exports.WaitForFrames=ek;exports.WaitForPromise=Ew;exports.WaitForSeconds=iy;exports.Watch=ws;exports.WebARCameraBackground=Hh;exports.WebARSessionRoot=Hi;exports.WebXR=zf;exports.WebXRButtonFactory=go;exports.WebXRImageTracking=Tl;exports.WebXRImageTrackingModel=Vs;exports.WebXRPlaneTracking=Ws;exports.WebXRTrackedImage=Ja;exports.XRControllerFollow=Ns;exports.XRControllerModel=Ms;exports.XRControllerMovement=Oi;exports.XRFlag=pn;exports.XRRig=cp;exports.XRState=Xt;exports.XRStateFlag=Nn;exports._VIq=rh;exports.__Ignore=TC;exports.__internalNotifyObjectDestroyed=cO;exports.__sKHtRdk=qi;exports.activeInHierarchyFieldName=Vn;exports.addAttributeChangeCallback=uu;exports.addComponent=Qn;exports.addCustomExtensionPlugin=gT;exports.addNewComponent=cr;exports.addPatch=Zu;exports.apply=hf;exports.applyHMRChanges=UO;exports.applyPrototypeExtensions=yx;exports.beginListenDestroy=pw;exports.beginListenInstantiate=_w;exports.binaryIdentifierCasts=ny;exports.build_scene_functions=Jk;exports.builtinComponentKeyName=Yo;exports.calculateProgress01=V_;exports.clearMessages=o1;exports.compareAssociation=ww;exports.copyTexture=$0;exports.createMotion=Dx;exports.debugNet=ii;exports.debugOwner=ua;exports.decompressGpuTexture=MS;exports.deepClone=ih;exports.delay=Ps;exports.delayForFrames=qu;exports.deserializeObject=Cu;exports.destroy=Ci;exports.destroyComponentInstance=Ox;exports.determineMimeTypeFromExtension=iS;exports.disposeObjectResources=Ce;exports.disposeStream=Vi;exports.editorGuidKeyName=mc;exports.enableSpatialConsole=Ta;exports.exportAsGLTF=tL;exports.findByGuid=my;exports.findObjectOfType=ol;exports.findObjectsOfType=Ex;exports.findResourceUsers=fy;exports.fitCamera=zx;exports.fitObjectIntoVolume=W0;exports.foreachComponent=_r;exports.foreachComponentEnumerator=gy;exports.forward=C1;exports.generateQRCode=nx;exports.generateSeed=yw;exports.getBoundingBox=hi;exports.getCameraController=I0;exports.getComponent=Po;exports.getComponentInChildren=dh;exports.getComponentInParent=Nc;exports.getComponents=nl;exports.getComponentsInChildren=sl;exports.getComponentsInParent=uf;exports.getFormattedDate=bS;exports.getIconElement=mt;exports.getIconTexture=Wm;exports.getLoader=ks;exports.getOrAddComponent=hh;exports.getParam=x;exports.getParentHierarchyPath=O1;exports.getPath=jC;exports.getPeerOptions=ak;exports.getPeerjsInstance=Iw;exports.getResourceUserCount=dO;exports.getSceneData=$w;exports.getTempColor=F0;exports.getTempQuaternion=oi;exports.getTempVector=j;exports.getUrlParams=th;exports.getVisibleInCustomShadowRendering=V0;exports.getWorldDirection=U0;exports.getWorldEuler=zg;exports.getWorldPosition=te;exports.getWorldQuaternion=_e;exports.getWorldRotation=Qu;exports.getWorldScale=Ue;exports.hasPointerEventComponent=Au;exports.hideDebugConsole=Q0;exports.imageToCanvas=ES;exports.initAddressableSerializers=Mw;exports.initBuiltinSerializers=Fx;exports.initEngine=ZI;exports.initPhysics=CC;exports.initVolumeParameterSerializer=qx;exports.instantiate=_o;exports.invokeLoadedImportPluginHooks=lS;exports.invokeXRSessionEnd=ix;exports.invokeXRSessionStart=tx;exports.isActiveInHierarchy=_x;exports.isActiveSelf=il;exports.isAndroidDevice=VC;exports.isAnimationAction=N0;exports.isComponent=ef;exports.isDebugMode=AC;exports.isDesktop=UC;exports.isDestroyed=yr;exports.isDevEnvironment=E;exports.isDisposable=zO;exports.isDisposed=lO;exports.isExporting=JI;exports.isGLTFModel=iw;exports.isHostedOnGlitch=w0;exports.isHotReloadEnabled=rg;exports.isHotReloading=jO;exports.isIPad=NC;exports.isIconElement=sx;exports.isLocalNetwork=wi;exports.isMacOS=GC;exports.isMobileDevice=zC;exports.isMozillaXR=WC;exports.isQuest=XC;exports.isResourceTrackingEnabled=hx;exports.isSafari=qC;exports.isTrackModel=JM;exports.isUsingInstancing=df;exports.isiOS=HC;exports.isiPad=$C;exports.loadAsset=II;exports.loadPMREM=Cf;exports.loadSync=$_;exports.logHierarchy=gu;exports.lookAtInverse=g1;exports.lookAtObject=nh;exports.lookAtScreenPoint=y1;exports.makeId=IC;exports.makeIdFromRandomWords=C0;exports.makeNameSafe=ki;exports.markAsInstancedRendered=bx;exports.microphonePermissionsGranted=QC;exports.nameof=RC;exports.nameofFactory=x0;exports.needle=gk;exports.offBeforeXRSession=ex;exports.offXRSessionEnd=Jw;exports.offXRSessionStart=Zw;exports.on=NO;exports.onAfterRender=_P;exports.onBeforeRender=yP;exports.onBeforeXRSession=Wk;exports.onClear=mP;exports.onDestroy=gP;exports.onInitialized=Qg;exports.onStart=nf;exports.onSyncDestroy=DP;exports.onSyncInstantiate=gw;exports.onUpdate=cw;exports.onXRSessionEnd=cy;exports.onXRSessionStart=rf;exports.parseSync=xC;exports.placeOnSurface=G0;exports.postprocessFBXMaterials=Vg;exports.prefix=DM;exports.pushState=S0;exports.randomNumber=LC;exports.registerBinaryType=sy;exports.registerComponent=lf;exports.registerComponentExtension=Uy;exports.registerCustomEffectType=nn;exports.registerExportExtensions=zy;exports.registerExtensions=ju;exports.registerHotReloadType=Tx;exports.registerLoader=aw;exports.registerPrefabProvider=bw;exports.registerPrototypeExtensions=py;exports.registerType=Gg;exports.relativePathPrefix=k0;exports.removeAttributeChangeCallback=M0;exports.removeComponent=_y;exports.removeCustomImportExtensionType=yT;exports.removePatch=cP;exports.resolveUrl=Jn;exports.sanitizeString=P0;exports.saveImage=_C;exports.screenshot=fI;exports.screenshot2=N_;exports.sendDestroyed=Kg;exports.serializable=p;exports.serializeObject=Sw;exports.serializeable=Ge;exports.setActive=vc;exports.setAllowBalloonMessages=R0;exports.setAllowOverlayMessages=t1;exports.setAutoFitEnabled=pu;exports.setCameraController=Mm;exports.setDestroyed=wx;exports.setDevEnvironment=h1;exports.setDisposable=ux;exports.setDontDestroy=fa;exports.setOrAddParamsToUrl=Cm;exports.setParam=DC;exports.setParamWithoutReload=Rc;exports.setPeerOptions=lk;exports.setResourceTrackingEnabled=aO;exports.setState=Dg;exports.setVisibleInCustomShadowRendering=$g;exports.setWorldEuler=Ng;exports.setWorldPosition=Si;exports.setWorldPositionXYZ=mr;exports.setWorldQuaternion=gn;exports.setWorldQuaternionXYZW=Ug;exports.setWorldRotation=z0;exports.setWorldRotationXYZ=sh;exports.setWorldScale=za;exports.showBalloonError=oh;exports.showBalloonMessage=ke;exports.showBalloonWarning=fe;exports.showDebugConsole=Wg;exports.slerp=B0;exports.syncDestroy=ah;exports.syncField=ky;exports.syncInstantiate=Zg;exports.textureToCanvas=M1;exports.toSourceId=O0;exports.tryCastBinary=Aw;exports.tryDetermineMimetypeFromBinary=sS;exports.tryDetermineMimetypeFromURL=nS;exports.tryFindObject=Ac;exports.tryGetGuid=Dw;exports.unregisterHotReloadType=Rx;exports.unregisterPrefabProvider=BP;exports.unwatchWrite=Ig;exports.useForAutoFit=L0;exports.validate=Ie;exports.watchWrite=Xu;
|