@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
|
@@ -140,7 +140,7 @@ void main(){
|
|
|
140
140
|
#__vconsole .vc-mask {
|
|
141
141
|
overflow: hidden;
|
|
142
142
|
}
|
|
143
|
-
`,Mr?.prepend(i),o===!0&&bv()<=0&&Xv(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Uc=!1,wi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function oM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),wi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}const ff="padding: 10px; font-family: monospace;",Yv="margin-bottom: 10px;",Tr="margin-bottom: 10px; margin-top: 15px;",sM="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Kv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",rM=Kv,aM=Kv+" word-break: break-all;";function io(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${sM}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${rM}'>${i.label}</td><td style='${aM}'>${n}</td></tr>`}return t+="</tbody></table>",t}function Zv(){try{if(bu())return"\u2705"}catch{}return"\u274C"}function lM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("device-utilities","\u{1F4F1} Device Info");return o.on("renderTab",function(e){let t=`<div style='${ff}'>`;const i=bM();t+=`<h3 style='${Yv}'>Device: ${i}</h3>`,t+=io([{label:"\u{1F4BB} Desktop",value:I.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:I.isMobileDevice()},{label:"\u{1F34E} iOS",value:I.isiOS()},{label:"\u{1F4F1} iPad",value:I.isiPad()},{label:"\u{1F916} Android",value:I.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:I.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:I.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:I.isMacOS()},{label:"\u{1F453} VisionOS",value:I.isVisionOS()},{label:"\u{1F9ED} Safari",value:I.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:I.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:I.supportsQuickLookAR()}],!0);const n=[],s=I.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=I.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=I.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=io(n,!1)),t+="</div>",t+=`<div style='${ff} margin-top: 20px;'>`,t+=`<h3 style='${Yv}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"\u2705":"\u274C"},{label:"WebGPU",value:"gpu"in navigator?"\u2705":"\u274C"},{label:"WebGL 2",value:Zv()}];t+=io(l,!1),t+="</div>",e(t)}),o}function cM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("graphics-info","\u{1F3A8} Graphics Info");return o.on("renderTab",async function(e){let t=`<div style='${ff}'>`;const i=hM();i.length>0&&(t+=`<h3 style='${Tr}'>General GPU Info</h3>`,t+=io(i,!1));const n=uM();n.length>0&&(t+=`<h3 style='${Tr}'>WebGL</h3>`,t+=io(n,!1));const s=pM();s.length>0&&(t+=`<h3 style='${Tr}'>WebGL 2 Features</h3>`,t+=io(s,!1));const r=mM();r.length>0&&(t+=`<h3 style='${Tr}'>WebGL Limits</h3>`,t+=io(r,!1));const a=gM();a.length>0&&(t+=`<h3 style='${Tr}'>Texture Formats</h3>`,t+=io(a,!1));const l=await fM();if(l.length>0&&(t+=`<h3 style='${Tr}'>WebGPU</h3>`,t+=io(l,!1)),I.isSafari()){const c=yM();c.length>0&&(t+=`<h3 style='${Tr}'>Safari GPU Info</h3>`,t+=io(c,!1))}t+="</div>",e(t)}),o}function hM(){const o=[],e=window.devicePixelRatio;o.push({label:"Device Pixel Ratio",value:e.toString()}),o.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),o.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const t=I.isMobileDevice()?150:96,i=screen.width/t,n=screen.height/t,s=i*2.54,r=n*2.54;o.push({label:"Estimated Width (cm)",value:s.toFixed(1)}),o.push({label:"Estimated Height (cm)",value:r.toFixed(1)});const a=Jv();if(a){o.push({label:"GPU",value:a.renderer}),o.push({label:"Driver",value:a.vendor}),o.push({label:"ANGLE",value:a.angle||"Not detected"});const l=dM(a.renderer);l&&(l.manufacturer&&o.push({label:"Manufacturer",value:l.manufacturer}),l.cardVersion&&o.push({label:"Card Version",value:l.cardVersion}),l.brand&&o.push({label:"Brand",value:l.brand}),o.push({label:"Integrated",value:l.integrated?"Yes":"No"}),l.layer&&o.push({label:"WebGL Layer",value:l.layer}))}return o}function dM(o){if(!o)return null;const e=(l,c)=>{const h=c.match(l);return h&&h[0]},t=e(/(ANGLE)/g,o)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,o)||o,n=i.split(" ");n.shift();const s=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:s,cardVersion:r,brand:a,integrated:s==="Intel",layer:t,card:i}}function uM(){const o=[],e=Jv();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:Zv()})),o}function pM(){const o=[];try{const e=bu();if(!e)return o;o.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"\u2705":"\u274C"}),o.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"\u2705":"\u274C"}),o.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"\u2705":"\u274C"}),o.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"\u2705":"\u274C"}),o.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"\u2705":"\u274C"}),o.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"\u2705":"\u274C"})}catch{}return o}function mM(){const o=[];try{const e=qv();if(!e)return o;const t=e instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(o.push({label:"\u26A1 Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function gM(){const o=[];try{yu()&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=bu();e&&(o.push({label:"WebGL 2 RGBA32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 RGB32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 R11F_G11F_B10F",value:"\u2705"}),o.push({label:"WebGL 2 RGB565",value:"\u2705"}),o.push({label:"WebGL 2 RGB5_A1",value:"\u2705"}),o.push({label:"WebGL 2 RGBA4444",value:"\u2705"}))}catch{}return o}async function fM(){const o=[];if(!("gpu"in navigator))return o.push({label:"\u{1F680} WebGPU Support",value:"\u274C Not supported"}),o;o.push({label:"\u{1F680} WebGPU Support",value:"\u2705 Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return o.push({label:"\u{1F3AF} Adapter",value:"No adapter available"}),o;o.push({label:"\u{1F3AF} Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();o.push({label:"\u{1F527} Device",value:t.label||"WebGPU Device"}),o.push({label:"\u{1F4CF} Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),o.push({label:"\u{1F4D0} Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),o.push({label:"\u{1F4CA} Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),o.push({label:"\u{1F4BE} Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),o.push({label:"\u{1F517} Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){o.push({label:"\u274C Error",value:e.message})}return o}function Jv(){try{const o=qv();if(!o)return null;const e=o.getExtension("WEBGL_debug_renderer_info"),t=e?o.getParameter(e.UNMASKED_RENDERER_WEBGL):o.getParameter(o.RENDERER),i=e?o.getParameter(e.UNMASKED_VENDOR_WEBGL):o.getParameter(o.VENDOR),n=o.getParameter(o.VERSION);let s;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(s=r[1])}return{renderer:t,vendor:i,version:n,angle:s}}catch{return null}}function yM(){const o=[];try{const e=yu();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&o.push({label:"\u{1F34E} Apple GPU",value:i})}}}catch{}try{const e=yu();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function bM(){return I.isQuest()?"Meta Quest":I.isVisionOS()?"Vision Pro":I.isiOS()?I.isiPad()?"iPad":"iPhone/iPod":I.isAndroidDevice()?"Android Device":I.isMozillaXR()?"Mozilla XR Browser":I.isNeedleAppClip()?"Needle App Clip":I.isMacOS()?"Mac":I.isDesktop()?"Desktop PC":"Unknown Device"}function _M(){return document.querySelector("#__vconsole .vc-switch")||null}function vM(){return document.querySelector("#__vconsole")||null}const _u=x("debugtypes");class wM{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){_u&&console.warn("TypeStore: Created",this)}add(e,t){_u&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?_u&&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){_u&&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 xM=Symbol("BuiltInType"),k=new wM,yf=function(o){k.get(o.name)||k.add(o.name,o)};class SM{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)}}var oi;(o=>{function e(h,d){const p=h.getRoot();return p&&(p.userData.static||p.matrixAutoUpdate===!1||p.matrixWorldAutoUpdate===!1)?((d===!0||d===void 0&&M())&&console.warn(`AnimationUtils: The root object (${p.name||p.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:p.userData.static,name:p.userData.name,tag:p.userData.tag,matrixAutoUpdate:p.matrixAutoUpdate,matrixWorldAutoUpdate:p.matrixWorldAutoUpdate}),!1):!0}o.testIfRootCanAnimate=e;function t(h){return h._actions||null}o.tryGetActionsFromMixer=t;function i(h,d){if(d||(d=new Array),h)h.animations&&d.push(...h.animations);else return d;if(h.children)for(const p of h.children)i(p,d);return d}o.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function s(h,d,p){if(!h)return;if(h[n]===void 0){if(!p)return;h[n]=new Set}const m=h[n];p?m.add(d):m.has(d)&&m.delete(d)}o.setObjectAnimated=s;function r(h){if(!h)return!1;const d=h[n];return d!==void 0&&d.size>0}o.getObjectAnimated=r;function a(h){if(!h||!h.animations)return console.debug("No animations found in file"),null;const d="scene"in h?h.scene:h,p=new Array;for(let g=0;g<h.animations.length;g++){const y=h.animations[g];if(!y.tracks||y.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const b in y.tracks){const f=y.tracks[b],_=Na.parseTrackName(f.name);let w=Na.findNode(d,_.nodeName);if(!w){const O=f.__objectName??f.name.substring(0,f.name.indexOf("."));if(w=d.getObjectByProperty("uuid",O),!w)continue}let S=m(w)||m(d);if(!S){const O=k.get("Animation");if(S=d.addComponent(O),!S){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}p.push(S),S.addClip&&S.addClip(y)}}return p;function m(g){if(!g)return null;const y=g.userData?.components;if(y&&y.length>0)for(let b=0;b<y.length;b++){const f=y[b];if(f.isAnimationComponent===!0)return f}return m(g.parent)}}o.autoplayAnimations=a;function l(){return new Gt("empty",0,[])}o.emptyClip=l;function c(h){const d=h?.duration??.3;let p={x:1,y:1,z:1};h?.scale!==void 0&&(typeof h.scale=="number"?p={x:h.scale,y:h.scale,z:h.scale}:p=h.scale);const m=h?.type??"linear",g=h?.scaleFactor??1.2,y=new Array,b=new Array;switch(m){case"linear":y.push(0,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g);break;case"spring":y.push(0,d*.3,d*.5,d*.7,d*.9,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g,p.x*.9,p.y*.9,p.z*.9,p.x*1.05,p.y*1.05,p.z*1.05,p.x*.98,p.y*.98,p.z*.98,p.x,p.y,p.z);break}const f=new nk(".scale",y,b);return new Gt("scale",y[y.length-1],[f])}o.createScaleClip=c})(oi||(oi={}));const Ze=function(o){return u(o)},u=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=ew(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=ew(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function ew(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const tw=x("debugcomponentevents");class vu{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),tw&&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(tw&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const iw=x("debugdefines");As('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),As('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),As('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),As('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),As('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.7";'),As('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),As('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 17 2026 12:05:24 GMT+0000 (Coordinated Universal Time)";'),As('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const si="5.1.7",Ya="undefined",Nc="Fri Jul 17 2026 12:05:24 GMT+0000 (Coordinated Universal Time)";iw&&console.log(`Engine version: ${si} (generator: ${Ya})
|
|
143
|
+
`,Mr?.prepend(i),o===!0&&bv()<=0&&Xv(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),Uc=!1,wi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function oM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),wi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}const ff="padding: 10px; font-family: monospace;",Yv="margin-bottom: 10px;",Tr="margin-bottom: 10px; margin-top: 15px;",sM="width: 100%; border-collapse: collapse; border: 1px solid rgba(0,0,0,0.1); table-layout: fixed;",Kv="border: 1px solid rgba(0,0,0,0.1); padding: 5px;",rM=Kv,aM=Kv+" word-break: break-all;";function io(o,e=!1){e&&o.sort((i,n)=>(n.value?1:0)-(i.value?1:0));let t=`<table style='${sM}'>`;t+="<tbody>";for(const i of o){const n=typeof i.value=="boolean"?i.value?"\u2705":"\u274C":i.value;t+=`<tr><td style='${rM}'>${i.label}</td><td style='${aM}'>${n}</td></tr>`}return t+="</tbody></table>",t}function Zv(){try{if(bu())return"\u2705"}catch{}return"\u274C"}function lM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("device-utilities","\u{1F4F1} Device Info");return o.on("renderTab",function(e){let t=`<div style='${ff}'>`;const i=bM();t+=`<h3 style='${Yv}'>Device: ${i}</h3>`,t+=io([{label:"\u{1F4BB} Desktop",value:I.isDesktop()},{label:"\u{1F4F1} Mobile Device",value:I.isMobileDevice()},{label:"\u{1F34E} iOS",value:I.isiOS()},{label:"\u{1F4F1} iPad",value:I.isiPad()},{label:"\u{1F916} Android",value:I.isAndroidDevice()},{label:"\u{1F98A} Mozilla XR",value:I.isMozillaXR()},{label:"\u{1F335} Needle App Clip",value:I.isNeedleAppClip()},{label:"\u{1F34F} macOS",value:I.isMacOS()},{label:"\u{1F453} VisionOS",value:I.isVisionOS()},{label:"\u{1F9ED} Safari",value:I.isSafari()},{label:"\u{1F576}\uFE0F Meta Quest",value:I.isQuest()},{label:"\u{1F517} QuickLook AR Support",value:I.supportsQuickLookAR()}],!0);const n=[],s=I.getiOSVersion();s&&n.push({label:"\u{1F34E} iOS Version",value:s});const r=I.getChromeVersion();r&&n.push({label:"\u{1F310} Chrome Version",value:r});const a=I.getSafariVersion();a&&n.push({label:"\u{1F9ED} Safari Version",value:a}),n.length>0&&(t+=io(n,!1)),t+="</div>",t+=`<div style='${ff} margin-top: 20px;'>`,t+=`<h3 style='${Yv}'>User Agent Info</h3>`;const l=[{label:"User Agent",value:navigator.userAgent},{label:"Platform",value:navigator.platform},{label:"App Version",value:navigator.appVersion},{label:"User Agent Data",value:navigator.userAgentData?`Platform: ${navigator.userAgentData.platform}, Mobile: ${navigator.userAgentData.mobile}`:"Not supported"},{label:"WebXR",value:"xr"in navigator?"\u2705":"\u274C"},{label:"WebGPU",value:"gpu"in navigator?"\u2705":"\u274C"},{label:"WebGL 2",value:Zv()}];t+=io(l,!1),t+="</div>",e(t)}),o}function cM(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("graphics-info","\u{1F3A8} Graphics Info");return o.on("renderTab",async function(e){let t=`<div style='${ff}'>`;const i=hM();i.length>0&&(t+=`<h3 style='${Tr}'>General GPU Info</h3>`,t+=io(i,!1));const n=uM();n.length>0&&(t+=`<h3 style='${Tr}'>WebGL</h3>`,t+=io(n,!1));const s=pM();s.length>0&&(t+=`<h3 style='${Tr}'>WebGL 2 Features</h3>`,t+=io(s,!1));const r=mM();r.length>0&&(t+=`<h3 style='${Tr}'>WebGL Limits</h3>`,t+=io(r,!1));const a=gM();a.length>0&&(t+=`<h3 style='${Tr}'>Texture Formats</h3>`,t+=io(a,!1));const l=await fM();if(l.length>0&&(t+=`<h3 style='${Tr}'>WebGPU</h3>`,t+=io(l,!1)),I.isSafari()){const c=yM();c.length>0&&(t+=`<h3 style='${Tr}'>Safari GPU Info</h3>`,t+=io(c,!1))}t+="</div>",e(t)}),o}function hM(){const o=[],e=window.devicePixelRatio;o.push({label:"Device Pixel Ratio",value:e.toString()}),o.push({label:"Width (px)",value:(window.innerWidth*e).toString()}),o.push({label:"Height (px)",value:(window.innerHeight*e).toString()});const t=I.isMobileDevice()?150:96,i=screen.width/t,n=screen.height/t,s=i*2.54,r=n*2.54;o.push({label:"Estimated Width (cm)",value:s.toFixed(1)}),o.push({label:"Estimated Height (cm)",value:r.toFixed(1)});const a=Jv();if(a){o.push({label:"GPU",value:a.renderer}),o.push({label:"Driver",value:a.vendor}),o.push({label:"ANGLE",value:a.angle||"Not detected"});const l=dM(a.renderer);l&&(l.manufacturer&&o.push({label:"Manufacturer",value:l.manufacturer}),l.cardVersion&&o.push({label:"Card Version",value:l.cardVersion}),l.brand&&o.push({label:"Brand",value:l.brand}),o.push({label:"Integrated",value:l.integrated?"Yes":"No"}),l.layer&&o.push({label:"WebGL Layer",value:l.layer}))}return o}function dM(o){if(!o)return null;const e=(l,c)=>{const h=c.match(l);return h&&h[0]},t=e(/(ANGLE)/g,o)||void 0,i=e(/((NVIDIA|AMD|Intel)[^\d]*[^\s]+)/,o)||o,n=i.split(" ");n.shift();const s=e(/(NVIDIA|AMD|Intel)/g,i)||void 0,r=n.length>0?n.pop():void 0,a=n.length>0?n.join(" "):void 0;return{manufacturer:s,cardVersion:r,brand:a,integrated:s==="Intel",layer:t,card:i}}function uM(){const o=[],e=Jv();return e&&(o.push({label:"\u{1F4CA} WebGL Version",value:e.version}),o.push({label:"\u{1F3AE} WebGL 2 Available",value:Zv()})),o}function pM(){const o=[];try{const e=bu();if(!e)return o;o.push({label:"Float Color Buffer",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"Anisotropic Filtering",value:e.getExtension("EXT_texture_filter_anisotropic")?"\u2705":"\u274C"}),o.push({label:"Float Texture Linear",value:e.getExtension("OES_texture_float_linear")?"\u2705":"\u274C"}),o.push({label:"S3TC Compression",value:e.getExtension("WEBGL_compressed_texture_s3tc")?"\u2705":"\u274C"}),o.push({label:"ETC Compression",value:e.getExtension("WEBGL_compressed_texture_etc")?"\u2705":"\u274C"}),o.push({label:"PVRTC Compression",value:e.getExtension("WEBGL_compressed_texture_pvrtc")?"\u2705":"\u274C"}),o.push({label:"ASTC Compression",value:e.getExtension("WEBGL_compressed_texture_astc")?"\u2705":"\u274C"})}catch{}return o}function mM(){const o=[];try{const e=qv();if(!e)return o;const t=e instanceof WebGL2RenderingContext;o.push({label:"\u{1F4CF} Max Texture Size",value:e.getParameter(e.MAX_TEXTURE_SIZE).toString()}),o.push({label:"\u{1F3A8} Max Renderbuffer Size",value:e.getParameter(e.MAX_RENDERBUFFER_SIZE).toString()}),o.push({label:"\u{1F517} Max Vertex Attribs",value:e.getParameter(e.MAX_VERTEX_ATTRIBS).toString()}),o.push({label:"\u{1F3AF} Max Texture Units",value:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS).toString()}),t&&(o.push({label:"\u26A1 Max Samples",value:e.getParameter(e.MAX_SAMPLES).toString()}),o.push({label:"\u{1F504} Max Uniform Buffer Bindings",value:e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS).toString()}),o.push({label:"\u{1F4D0} Max 3D Texture Size",value:e.getParameter(e.MAX_3D_TEXTURE_SIZE).toString()}))}catch{}return o}function gM(){const o=[];try{yu()&&(o.push({label:"WebGL 1 RGBA",value:"\u2705"}),o.push({label:"WebGL 1 RGB",value:"\u2705"}));const e=bu();e&&(o.push({label:"WebGL 2 RGBA32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 RGB32F",value:e.getExtension("EXT_color_buffer_float")?"\u2705":"\u274C"}),o.push({label:"WebGL 2 R11F_G11F_B10F",value:"\u2705"}),o.push({label:"WebGL 2 RGB565",value:"\u2705"}),o.push({label:"WebGL 2 RGB5_A1",value:"\u2705"}),o.push({label:"WebGL 2 RGBA4444",value:"\u2705"}))}catch{}return o}async function fM(){const o=[];if(!("gpu"in navigator))return o.push({label:"\u{1F680} WebGPU Support",value:"\u274C Not supported"}),o;o.push({label:"\u{1F680} WebGPU Support",value:"\u2705 Supported"});try{const e=await navigator.gpu.requestAdapter();if(!e)return o.push({label:"\u{1F3AF} Adapter",value:"No adapter available"}),o;o.push({label:"\u{1F3AF} Adapter",value:e.name||"Unknown Adapter"});const t=await e.requestDevice();o.push({label:"\u{1F527} Device",value:t.label||"WebGPU Device"}),o.push({label:"\u{1F4CF} Max Texture 2D",value:t.limits.maxTextureDimension2D.toString()}),o.push({label:"\u{1F4D0} Max Texture 3D",value:t.limits.maxTextureDimension3D.toString()}),o.push({label:"\u{1F4CA} Max Texture Array Layers",value:t.limits.maxTextureArrayLayers.toString()}),o.push({label:"\u{1F4BE} Max Buffer Size",value:`${(t.limits.maxBufferSize/1024/1024).toFixed(1)}MB`}),o.push({label:"\u{1F517} Max Bind Groups",value:t.limits.maxBindGroups.toString()})}catch(e){o.push({label:"\u274C Error",value:e.message})}return o}function Jv(){try{const o=qv();if(!o)return null;const e=o.getExtension("WEBGL_debug_renderer_info"),t=e?o.getParameter(e.UNMASKED_RENDERER_WEBGL):o.getParameter(o.RENDERER),i=e?o.getParameter(e.UNMASKED_VENDOR_WEBGL):o.getParameter(o.VENDOR),n=o.getParameter(o.VERSION);let s;if(t&&t.includes("ANGLE")){const r=t.match(/ANGLE \(([^)]+)\)/);r&&(s=r[1])}return{renderer:t,vendor:i,version:n,angle:s}}catch{return null}}function yM(){const o=[];try{const e=yu();if(e){const t=e.getExtension("WEBGL_debug_renderer_info");if(t){const i=e.getParameter(t.UNMASKED_RENDERER_WEBGL);i&&i.includes("Apple")&&o.push({label:"\u{1F34E} Apple GPU",value:i})}}}catch{}try{const e=yu();e&&(e.getSupportedExtensions()||[]).includes("WEBGL_compressed_texture_pvrtc")&&o.push({label:"\u{1F5DC}\uFE0F PVRTC Support",value:"\u2705"})}catch{}return o}function bM(){return I.isQuest()?"Meta Quest":I.isVisionOS()?"Vision Pro":I.isiOS()?I.isiPad()?"iPad":"iPhone/iPod":I.isAndroidDevice()?"Android Device":I.isMozillaXR()?"Mozilla XR Browser":I.isNeedleAppClip()?"Needle App Clip":I.isMacOS()?"Mac":I.isDesktop()?"Desktop PC":"Unknown Device"}function _M(){return document.querySelector("#__vconsole .vc-switch")||null}function vM(){return document.querySelector("#__vconsole")||null}const _u=x("debugtypes");class wM{_types=new Map;_reverseTypes=new Map;_lazyLoaders=new Map;constructor(){_u&&console.warn("TypeStore: Created",this)}add(e,t){_u&&console.warn("ADD TYPE",e);const i=this._types.get(e);i?_u&&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){_u&&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 xM=Symbol("BuiltInType"),k=new wM,yf=function(o){k.get(o.name)||k.add(o.name,o)};class SM{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)}}var oi;(o=>{function e(h,d){const p=h.getRoot();return p&&(p.userData.static||p.matrixAutoUpdate===!1||p.matrixWorldAutoUpdate===!1)?((d===!0||d===void 0&&M())&&console.warn(`AnimationUtils: The root object (${p.name||p.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:p.userData.static,name:p.userData.name,tag:p.userData.tag,matrixAutoUpdate:p.matrixAutoUpdate,matrixWorldAutoUpdate:p.matrixWorldAutoUpdate}),!1):!0}o.testIfRootCanAnimate=e;function t(h){return h._actions||null}o.tryGetActionsFromMixer=t;function i(h,d){if(d||(d=new Array),h)h.animations&&d.push(...h.animations);else return d;if(h.children)for(const p of h.children)i(p,d);return d}o.tryGetAnimationClipsFromObjectHierarchy=i;const n=Symbol("objectIsAnimatedData");function s(h,d,p){if(!h)return;if(h[n]===void 0){if(!p)return;h[n]=new Set}const m=h[n];p?m.add(d):m.has(d)&&m.delete(d)}o.setObjectAnimated=s;function r(h){if(!h)return!1;const d=h[n];return d!==void 0&&d.size>0}o.getObjectAnimated=r;function a(h){if(!h||!h.animations)return console.debug("No animations found in file"),null;const d="scene"in h?h.scene:h,p=new Array;for(let g=0;g<h.animations.length;g++){const y=h.animations[g];if(!y.tracks||y.tracks.length<=0){console.warn("Animation has no tracks");continue}for(const b in y.tracks){const f=y.tracks[b],_=Na.parseTrackName(f.name);let w=Na.findNode(d,_.nodeName);if(!w){const O=f.__objectName??f.name.substring(0,f.name.indexOf("."));if(w=d.getObjectByProperty("uuid",O),!w)continue}let S=m(w)||m(d);if(!S){const O=k.get("Animation");if(S=d.addComponent(O),!S){console.error("Failed creating Animation component: No 'Animation' component found in TypeStore");break}}p.push(S),S.addClip&&S.addClip(y)}}return p;function m(g){if(!g)return null;const y=g.userData?.components;if(y&&y.length>0)for(let b=0;b<y.length;b++){const f=y[b];if(f.isAnimationComponent===!0)return f}return m(g.parent)}}o.autoplayAnimations=a;function l(){return new Gt("empty",0,[])}o.emptyClip=l;function c(h){const d=h?.duration??.3;let p={x:1,y:1,z:1};h?.scale!==void 0&&(typeof h.scale=="number"?p={x:h.scale,y:h.scale,z:h.scale}:p=h.scale);const m=h?.type??"linear",g=h?.scaleFactor??1.2,y=new Array,b=new Array;switch(m){case"linear":y.push(0,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g);break;case"spring":y.push(0,d*.3,d*.5,d*.7,d*.9,d),b.push(p.x,p.y,p.z,p.x*g,p.y*g,p.z*g,p.x*.9,p.y*.9,p.z*.9,p.x*1.05,p.y*1.05,p.z*1.05,p.x*.98,p.y*.98,p.z*.98,p.x,p.y,p.z);break}const f=new nk(".scale",y,b);return new Gt("scale",y[y.length-1],[f])}o.createScaleClip=c})(oi||(oi={}));const Ze=function(o){return u(o)},u=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=ew(o);else for(let e=0;e<o.length;e++){const t=o[e];o[e]=ew(t)}return function(e,t){if(!e){const n=typeof t=="string"?t:t.name;console.warn(`@serializable without a target at '${n}'.`);return}typeof t!="string"&&(t=t.name),Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});const i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function ew(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}const tw=x("debugcomponentevents");class vu{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),tw&&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(tw&&console.log("Dispatching event "+e,i),!!i)for(const n of i)n(t)}}const iw=x("debugdefines");As('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),As('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),As('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),As('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),As('globalThis["__NEEDLE_ENGINE_VERSION__"] = "5.1.8";'),As('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),As('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";'),As('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const si="5.1.8",Ya="undefined",Nc="Thu Jul 23 2026 13:06:37 GMT+0000 (Coordinated Universal Time)";iw&&console.log(`Engine version: ${si} (generator: ${Ya})
|
|
144
144
|
Project built at ${Nc}`);const Rs=NEEDLE_PUBLIC_KEY,no="needle_isActiveInHierarchy",Rr="builtin_components",Wc="needle_editor_guid";function As(o){try{(0,eval)(o)}catch(e){iw&&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 bf={experimentalSmartHierarchyUpdate:!1},Ui=Symbol("shadowDomOwner"),CM=x("debugpatch");function wu(o,e,t,i){const n=CM===e;if(!t&&!i)return;const s=e+"___needle";kM(o,e,t,i);const r=Object.getOwnPropertyDescriptor(o,e),a=o[e];n&&console.log("Patch",o.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",o.constructor.name,e,r),typeof r.value=="function"&&(o[e]=ow(r.value,o,e))):(n&&console.log("Create patch with new property",o.constructor.name,e,r),Object.defineProperty(o,e,{set:function(l){if(typeof l=="function")this[s]=ow(l,o,e);else{const c=this[s];sw(o,e,this,c,l),this[s]=l,rw(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function PM(o,e,t){const i=vf(o,e);if(i)for(let n=i.length-1;n>=0;n--){const s=i[n];s.prefix===t&&(s.prefix=null),s.postfix===t&&(s.postfix=null),!s.prefix&&!s.postfix&&i.splice(n,1)}}const nw=Symbol("Needle:Patches:WrappedFunction");function ow(o,e,t){if(o[nw])return o;const i=function(...n){sw(e,t,this,...n);const s=o.apply(this,n);return rw(e,t,this,s,...n),s};return i[nw]=!0,i}const xu="Needle:Patches";function _f(){return globalThis[xu]||(globalThis[xu]=new WeakMap),globalThis[xu]}function vf(o,e){const t=_f().get(o);return t?t.get(e):null}function kM(o,e,t,i){let n=_f().get(o);n||(n=new Map,_f().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function sw(o,e,t,...i){if(!t)return;const n=vf(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function rw(o,e,t,i,...n){if(!t)return;const s=vf(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}function OM(o,e){if(typeof window!==void 0&&window.SPECTOR){console.log(window.SPECTOR);const t=new URLSearchParams(window.location.search);if(t.has("spector")){let i=function(){if(n>o.time.frame)return window.requestAnimationFrame(()=>i());const r=s.captureCanvas(e);r&&r instanceof Promise?r.then(()=>s.displayUI()):s.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const s=new window.SPECTOR.Spector;s.spyCanvases=!0,i();return}else M()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}function aw(o){const e=o;return!!(e.parser&&e.parser.json)}var Su=(o=>(o[o.None=0]="None",o[o.DontExport=1]="DontExport",o))(Su||{});const Cu=Symbol("component-name");function Pu(o){return o&&typeof o=="object"&&o.isComponent}const EM=Symbol("object"),wf=new Bi(()=>new v,20);class lw{_point;_normal;_tangentVelocity;distance;impulse;friction;get point(){return wf.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return wf.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return wf.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}constructor(e,t,i,n,s,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=s,this._tangentVelocity=r}}class cw{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 hw{object;collider;constructor(e,t){this.object=e,this.collider=t}}class pg{constructor(e){this.context=e,this.root.style.cssText=`
|
|
145
145
|
position: absolute;
|
|
146
146
|
width: 1px; height: 1px;
|
|
@@ -1749,4 +1749,4 @@ Needle Engine: finished loading `+i+`
|
|
|
1749
1749
|
---------------------------------
|
|
1750
1750
|
\u2022 `+r.passes.map(d=>d.name||d.constructor.name+"*").join(`
|
|
1751
1751
|
\u2022 `)+`
|
|
1752
|
-
`),Ri&&this._onCreateEffectsDebug(this._composer,s)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const s=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);s.name=e.map(r=>r.name).join(", "),s.mainScene=n,s.enabled=!0,s.renderToScreen=!1,t.addPass(s),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(Ri==="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) \u2192",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const s=this.context.menu;if(s&&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 c=document.createElement("option");c.innerText=l.name,c.value=`${e.passes.indexOf(l)}`,c.title=l.name,r.appendChild(c)}s.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(c=>parseInt(c.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const vB=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:Pc},Symbol.toStringTag,{value:"Module"}));class _g{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new St(t??Date.now())}static create(e,t){return new _g(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.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 Pe.Animation:{let n;if(e instanceof Gt)n=e;else{const h=Array.isArray(e)?e:[e],d=i.outputs[0],p=d instanceof E?d:d!=null&&"gameObject"in d?d.gameObject:void 0;n=yh(h,p)}const s=t??{},r=s.duration??n.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:s.clipIn??0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:s.preExtrapolation??st.None,postExtrapolationMode:s.postExtrapolation??st.None,reversed:s.reversed,asset:{clip:n,loop:s.loop??!1,duration:n.duration,removeStartOffset:s.removeStartOffset??!1}};i.clips.push(c),i.cursor=l;break}case Pe.Audio:{const n=e,s=t??{},r=s.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{clip:n,loop:s.loop??!1,volume:s.volume??1}};i.clips.push(c),i.cursor=l;break}case Pe.Activation:{const n=e,s=n.start??i.cursor,r=s+n.duration,a={start:s,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{}};i.clips.push(a),i.cursor=r;break}case Pe.Control:{const n=e,s=t??{},r=s.start??i.cursor,a=s.duration,l=r+a,c={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{sourceObject:n,controlActivation:s.controlActivation??!0,updateDirector:s.updateDirector??!0}};i.clips.push(c),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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:Oh.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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),s=this._tracks.indexOf(this._currentTrack),r={type:Oh.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:s,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!==Pe.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(Fy(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=P.getComponent(i,Yr);n||(n=P.addComponent(i,Yr)),n.events||(n.events=[]);for(const s of this._pendingSignals){const r=new kh;r.guid=s.guid;const a=new Sl;a.signal=r,a.reaction=new se([s.callback]),n.events.push(a);const l=t.tracks[s.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 E?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=yh(e.inlineTracks,i),s=e.cursor,r=n.duration,a={start:s,end:s+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=s+r,e.inlineTracks=[]}}class FP{}const wB=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ye,ActionCollection:fC,ActionModel:Ai,AlignmentConstraint:Ih,Animation:Xt,AnimationBuilder:fg,AnimationCurve:id,AnimationExtension:pm,Animator:Ot,AnimatorController:lo,Antialiasing:rd,Attractor:oc,AudioExtension:Ia,AudioListener:Yo,AudioSource:Gi,Avatar:Ks,AvatarMarker:gt,AxesHelper:Pl,AxisRotationConstraint:u0,BaseUIComponent:xn,BasicIKConstraint:o0,BehaviorExtension:sb,BehaviorModel:$t,BloomEffect:Nm,BoxCollider:Lp,BoxGizmo:ua,BoxHelperComponent:Vt,Button:us,CallInfo:Ns,Camera:ci,CameraTargetReachedEvent:Ph,Canvas:Yl,CanvasGroup:nr,CapsuleCollider:Ko,ChangeMaterialOnClick:X0,ChangeTransformOnClick:la,CharacterController:Jr,CharacterControllerInput:Jo,ChromaticAberration:ad,ClickThrough:ig,ColorAdjustments:lr,ColorBySpeedModule:ic,ColorOverLifetimeModule:Lm,ContactShadows:Lh,CursorFollow:ka,CustomBranding:da,Deletable:c0,DeleteBox:_r,DepthOfField:Hn,DeviceFlag:Dp,DocumentExtension:BP,DragControls:na,DragProfile:Up,DropListener:is,Duplicatable:A0,EffectWrapper:cd,EmissionModule:cs,EmphasizeOnClick:Nl,EnvironmentScene:kp,EventList:se,EventListEvent:zy,EventSystem:bi,EventTrigger:nm,FieldWithDefault:NS,FixedJoint:Sb,FixedRotationAxesConstraint:yS,Fog:Kl,GltfExport:B0,GltfExportBox:D0,GrabPointPlaneConstraint:jh,Gradient:ma,Graphic:Zh,GraphicRaycaster:bp,GridHelper:Zl,GridLayoutGroup:mb,GridSnapConstraint:jp,GroundProjectedEnv:ho,GroupActionModel:aa,HideOnStart:Pn,HingeJoint:td,HorizontalLayoutGroup:pb,get HoverAnimation(){return Eo},Image:cc,InheritVelocityModule:Rb,InputField:i_,InstanceHandle:Fa,InstancingHandler:La,Interactable:l0,KeepRotationConstraint:Bp,KeepScaleConstraint:gS,Keyframe:Mi,LODGroup:Om,LODModel:ec,Light:Ft,LimitVelocityOverLifetimeModule:_t,LogStats:a0,LookAt:n_,LookAtConstraint:qr,MainModule:Jt,MaskableGraphic:Jh,MeshCollider:qs,MeshRenderer:Fh,MinMaxCurve:Z,MinMaxGradient:ga,NeedleMenu:_o,NestedGltf:tc,Networking:Eb,NoiseModule:ve,ObjectRaycaster:dn,OffsetConstraint:pa,OpenURL:hc,OrbitControls:ge,Outline:Xl,Padding:ha,ParticleBurst:Im,ParticleSubEmitter:Ab,ParticleSystem:sd,ParticleSystemRenderer:yn,PhysicsExtension:rb,PixelationEffect:hd,PlaneHeightLockConstraint:p0,PlayAnimationOnClick:Nh,PlayAudioOnClick:Ys,PlayableDirector:Cl,PlayerColor:xc,PointerEventData:Nd,PostProcessingHandler:Pc,PreliminaryAction:Wl,PreliminaryTrigger:Wh,RawImage:Jm,Rect:TC,RectTransform:$n,ReflectionProbe:es,RegisteredAnimationInfo:vr,RemoteSkybox:i0,Renderer:di,RendererLightmap:M0,Rigidbody:it,RotationBySpeedModule:fn,RotationOverLifetimeModule:Vn,ScaleLimitConstraint:h0,SceneSwitcher:nt,ScreenCapture:cr,ScreenSpaceAmbientOcclusion:hs,ScreenSpaceAmbientOcclusionN8:Gn,ScrollFollow:Mo,SeeThrough:Qb,SetActiveOnClick:Q0,ShadowCatcher:gd,ShapeModule:Tb,SharpeningEffect:ud,SignalAsset:kh,SignalReceiver:Yr,SignalReceiverEvent:Sl,SignalTrackHandler:Mh,Size:MC,SizeBySpeedModule:Ti,SizeOverLifetimeModule:fa,SkinnedMeshRenderer:T0,SmoothFollow:qm,SnapToSurfaceConstraint:zp,SpatialGrabRaycaster:Aa,SpatialHtml:vd,SpatialTrigger:Xm,SpatialTriggerReceiver:ko,SpectatorCamera:Qm,SphereCollider:kl,SplineContainer:Sa,SplineData:Oo,SplineWalker:vn,Sprite:os,SpriteData:Vl,SpriteRenderer:ki,SpriteSheet:$l,SubEmitterSystem:Fm,SyncedCamera:Yb,SyncedRoom:qn,SyncedTransform:Fn,TapGestureTrigger:K0,TeleportTarget:vm,TestRunner:Jb,TestSimulateUserData:e_,Text:Zt,TextBuilder:db,TextExtension:Pm,TextureSheetAnimationModule:ei,TiltShiftEffect:Co,TimelineActivationTrack:Sp,TimelineAnimationTrack:Eh,TimelineAudioTrack:Ss,TimelineBuilder:_g,TimelineControlTrack:Cp,TimelineMarkerTrack:xp,ToneMappingEffect:ba,TrailModule:We,TransformData:qe,TransformGizmo:Ca,TriggerBuilder:Yt,TriggerModel:gr,UIRaycastUtils:Hy,UIRootComponent:Qh,USDZExporter:xo,USDZText:Ql,USDZUIExtension:yb,UsageMarker:Dh,VariantAction:G0,VelocityOverLifetimeModule:Ke,VerticalLayoutGroup:ub,VideoPlayer:wt,get ViewBox(){return pt},Vignette:wa,VisibilityAction:$h,Voip:ds,Volume:pd,VolumeParameter:W,VolumeProfile:zm,WebARCameraBackground:Cd,WebARSessionRoot:kn,WebXR:wm,WebXRImageTracking:pc,WebXRImageTrackingModel:fs,WebXRPlaneTracking:ys,WebXRTrackedImage:Sc,XRControllerFollow:ms,XRControllerModel:ss,XRControllerMovement:Yi,XRFlag:Nn,XRRig:rg,XRState:yi,__Ignore:FP},Symbol.toStringTag,{value:"Module"}));var w_;(o=>{function e(t,i=!1,n=.75){const s=new Sa,r=1-j.clamp(n,0,1);return t.forEach((a,l)=>{const c=new v;l<t.length-1?c.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&c.subVectors(t[0],a).normalize().multiplyScalar(r);const h=new Oo;h.position.copy(a),h.tangentIn.copy(c),h.tangentOut.copy(c),s.addKnot(h)}),s.closed=i,s}o.createFromPoints=e})(w_||(w_={}));class xB extends $O{constructor(){super(new Worker(URL.createObjectURL(new Blob([`import '${new URL("./generateMeshBVH.worker-DiCnZlf3.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,s)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=c=>{s(new Error(`[GenerateMeshBVHWorker] ${c.message||"Could not load worker."}`))},e.onmessage=c=>{const{data:h}=c;if(h.error)s(new Error(h.error)),e.onmessage=null;else if(h.serialized){const{serialized:d,position:p}=h,m=VO.deserialize(d,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,d.index)if(t.index)t.index.array=d.index;else{const y=new ot(d.index,1,!1);t.setIndex(y)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new ii)),i.onProgress&&i.onProgress(h.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(h.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(c=>c.buffer).filter(c=>typeof SharedArrayBuffer>"u"||!(c instanceof SharedArrayBuffer)))})}}const SB=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:xB},Symbol.toStringTag,{value:"Module"}));export{Cu as $componentName,EM as $physicsKey,ye as ActionBuilder,fC as ActionCollection,Ai as ActionModel,Uw as Addressables,Ih as AlignmentConstraint,al as AmbientMode,Xt as Animation,fg as AnimationBuilder,id as AnimationCurve,pm as AnimationExtension,oi as AnimationUtils,Ot as Animator,Ci as AnimatorConditionMode,lo as AnimatorController,yg as AnimatorControllerBuilder,Gr as AnimatorControllerParameterType,fh as AnimatorStateInfo,rd as Antialiasing,Qn as Application,Gx as AssetDatabase,ie as AssetReference,oc as Attractor,Uy as AudioClip,Ia as AudioExtension,Yo as AudioListener,X1 as AudioRolloffMode,Gi as AudioSource,Ks as Avatar,gt as AvatarMarker,wl as Axes,Pl as AxesHelper,u0 as AxisRotationConstraint,Nc as BUILD_TIME,xn as BaseUIComponent,o0 as BasicIKConstraint,sb as BehaviorExtension,$t as BehaviorModel,Ar as BlobStorage,Nm as BloomEffect,Lp as BoxCollider,ua as BoxGizmo,Vt as BoxHelperComponent,us as Button,Sn as ButtonsFactory,ZC as CallDirection,Ns as CallInfo,ci as Camera,Ph as CameraTargetReachedEvent,Yl as Canvas,nr as CanvasGroup,Ko as CapsuleCollider,X0 as ChangeMaterialOnClick,la as ChangeTransformOnClick,Jr as CharacterController,Jo as CharacterControllerInput,ad as ChromaticAberration,Bi as CircularBuffer,Qr as ClearFlags,ig as ClickThrough,st as ClipExtrapolation,qi as Collider,cw as Collision,fp as CollisionDetectionMode,lr as ColorAdjustments,ic as ColorBySpeedModule,Lm as ColorOverLifetimeModule,oA as Component,T as Component$1,vu as ComponentLifecycleEvents,wB as Components,nx as ConnectionEvents,lw as ContactPoint,Lh as ContactShadows,U as Context,fR as ContextArgs,de as ContextEvent,he as ContextRegistry,ka as CursorFollow,da as CustomBranding,je as CustomShader,$u as DefaultReflectionMode,c0 as Deletable,_r as DeleteBox,Hn as DepthOfField,Dp as DeviceFlag,I as DeviceUtilities,Y1 as DirectorWrapMode,dp as DisposableStore,BP as DocumentExtension,na as DragControls,g0 as DragMode,Up as DragProfile,is as DropListener,A0 as Duplicatable,cd as EffectWrapper,cs as EmissionModule,Nl as EmphasizeOnClick,Hd as EngineLoadingView,kp as EnvironmentScene,Wf as EventBus,se as EventList,zy as EventListEvent,bi as EventSystem,nm as EventTrigger,NS as FieldWithDefault,Ba as FileReference,Ww as FileReferenceSerializer,lI as FileSpawnModel,xS as File_Event,Sb as FixedJoint,yS as FixedRotationAxesConstraint,Kl as Fog,Cm as FontStyle,Oe as FrameEvent,Ya as GENERATOR,P as GameObject,B as Gizmos,B0 as GltfExport,D0 as GltfExportBox,jh as GrabPointPlaneConstraint,ma as Gradient,Zh as Graphic,bp as GraphicRaycaster,yr as Graphics,Zl as GridHelper,mb as GridLayoutGroup,jp as GridSnapConstraint,ho as GroundProjectedEnv,aa as GroupActionModel,Su as HideFlags,Pn as HideOnStart,td as HingeJoint,pb as HorizontalLayoutGroup,LC as HorizontalWrapMode,YM as HostData,Eo as HoverAnimation,cc as Image,ja as ImageReference,Nw as ImageReferenceSerializer,Rb as InheritVelocityModule,qw as Input,xi as InputEventQueue,ke as InputEvents,i_ as InputField,Fa as InstanceHandle,La as InstancingHandler,Cn as InstancingUtil,Pw as InstantiateEvent,St as InstantiateIdProvider,Ao as InstantiateOptions,l0 as Interactable,Sd as InternalScreenshotUtils,ET as JoinedRoomResponse,Bp as KeepRotationConstraint,gS as KeepScaleConstraint,vT as KeyEventArgs,Mi as Keyframe,Om as LODGroup,ec as LODModel,Yw as LODsManager,MT as LeftRoomResponse,Ft as Light,mx as LightData,_t as LimitVelocityOverLifetimeModule,rB as LoadingElementOptions,a0 as LogStats,Fi as LogType,n_ as LookAt,qr as LookAtConstraint,A as MODULES,Jt as MainModule,Oh as MarkerType,Jh as MaskableGraphic,xs as MaterialPropertyBlock,Yp as MaterialX,j as Mathf,qs as MeshCollider,Fh as MeshRenderer,Z as MinMaxCurve,ga as MinMaxGradient,bf as NEEDLE_ENGINE_FEATURE_FLAGS,Yc as NEKeyboardEvent,Ho as NEPointerEvent,EP as NeedleButtonElement,b0 as NeedleEngineModelLoader,b_ as NeedleEngineWebComponent,_o as NeedleMenu,xu as NeedlePatchesKey,Jf as NeedleXRController,X as NeedleXRSession,Sx as NeedleXRSync,Ux as NeedleXRUtils,tc as NestedGltf,$d as NetworkConnection,Po as NetworkedStreamEvents,Wd as NetworkedStreams,Eb as Networking,Ow as NewInstanceModel,ve as NoiseModule,dn as ObjectRaycaster,Ds as ObjectUtils,pa as OffsetConstraint,lu as OneEuroFilter,of as OneEuroFilterXYZ,hc as OpenURL,ge as OrbitControls,Xl as Outline,ox as OwnershipEvent,sx as OwnershipModel,Rs as PUBLIC_KEY,ha as Padding,Im as ParticleBurst,Ab as ParticleSubEmitter,sd as ParticleSystem,ar as ParticleSystemBaseBehaviour,yn as ParticleSystemRenderer,Am as ParticleSystemShapeType,Cs as PeerHandle,tx as PeerNetworking,vc as Physics,rb as PhysicsExtension,Et as PhysicsMaterialCombine,hd as PixelationEffect,p0 as PlaneHeightLockConstraint,Nh as PlayAnimationOnClick,Ys as PlayAudioOnClick,Cl as PlayableDirector,xc as PlayerColor,Oi as PlayerState,vC as PlayerStateEvent,eb as PlayerSync,rx as PlayerView,ax as PlayerViewManager,Nd as PointerEventData,Bu as PointerType,vx as PostProcessing,ht as PostProcessingEffect,vt as PostProcessingEffectOrder,Pc as PostProcessingHandler,Ja as Prefabs,Wl as PreliminaryAction,Wh as PreliminaryTrigger,Ml as PreviewHelper,il as PrimitiveType,ue as Progress,Yg as PromiseAllWithErrors,Qg as PromiseErrorResult,ce as RGBAColor,Cc as RapierPhysics,Jm as RawImage,jr as RaycastOptions,TC as Rect,$n as RectTransform,es as ReflectionProbe,US as ReflectionProbeUsage,vr as RegisteredAnimationInfo,i0 as RemoteSkybox,Do as RenderTexture,L1 as RenderTextureSerializer,di as Renderer,px as RendererData,M0 as RendererLightmap,it as Rigidbody,tt as RigidbodyConstraints,oe as RoomEvents,fn as RotationBySpeedModule,Vn as RotationOverLifetimeModule,h0 as ScaleLimitConstraint,Qp as SceneLightSettings,nt as SceneSwitcher,cr as ScreenCapture,hs as ScreenSpaceAmbientOcclusion,Gn as ScreenSpaceAmbientOcclusionN8,Mo as ScrollFollow,Qb as SeeThrough,In as SendQueue,Bf as SerializationContext,Q0 as SetActiveOnClick,em as ShadowCastingMode,gd as ShadowCatcher,Tb as ShapeModule,hw as ShapeOverlapResult,ud as SharpeningEffect,kh as SignalAsset,Yr as SignalReceiver,Sl as SignalReceiverEvent,Mh as SignalTrackHandler,MC as Size,Ti as SizeBySpeedModule,fa as SizeOverLifetimeModule,T0 as SkinnedMeshRenderer,qm as SmoothFollow,zp as SnapToSurfaceConstraint,Aa as SpatialGrabRaycaster,vd as SpatialHtml,Xm as SpatialTrigger,ko as SpatialTriggerReceiver,Qm as SpectatorCamera,kl as SphereCollider,gy as SphereIntersection,Sa as SplineContainer,Oo as SplineData,w_ as SplineUtils,vn as SplineWalker,os as Sprite,Vl as SpriteData,ki as SpriteRenderer,$l as SpriteSheet,cA as StateMachineBehaviour,Xb as StreamEndedEvent,KC as StreamReceivedEvent,Fm as SubEmitterSystem,Yb as SyncedCamera,qn as SyncedRoom,Fn as SyncedTransform,K0 as TapGestureTrigger,vm as TeleportTarget,Jb as TestRunner,e_ as TestSimulateUserData,Zt as Text,at as TextAnchor,db as TextBuilder,Pm as TextExtension,ei as TextureSheetAnimationModule,Co as TiltShiftEffect,fx as Time,Sp as TimelineActivationTrack,Eh as TimelineAnimationTrack,Ss as TimelineAudioTrack,_g as TimelineBuilder,Cp as TimelineControlTrack,xp as TimelineMarkerTrack,Kr as TimelineTrackHandler,ba as ToneMappingEffect,Pe as TrackType,We as TrailModule,qe as TransformData,Ca as TransformGizmo,Yt as TriggerBuilder,gr as TriggerModel,k as TypeStore,Hy as UIRaycastUtils,Qh as UIRootComponent,F0 as USDDocument,mt as USDObject,JS as USDWriter,tC as USDZExporter,xo as USDZExporter$1,Ql as USDZText,yb as USDZUIExtension,D1 as UriSerializer,Dh as UsageMarker,TT as UserJoinedOrLeftRoomModel,si as VERSION,G0 as VariantAction,Ke as VelocityOverLifetimeModule,ub as VerticalLayoutGroup,IC as VerticalWrapMode,wt as VideoPlayer,pt as ViewBox,qo as ViewDevice,wa as Vignette,$h as VisibilityAction,ds as Voip,pd as Volume,W as VolumeParameter,zm as VolumeProfile,fT as WaitForFrames,Vw as WaitForPromise,$f as WaitForSeconds,ws as Watch,Cd as WebARCameraBackground,kn as WebARSessionRoot,wm as WebXR,fr as WebXRButtonFactory,pc as WebXRImageTracking,fs as WebXRImageTrackingModel,ys as WebXRPlaneTracking,Sc as WebXRTrackedImage,ms as XRControllerFollow,ss as XRControllerModel,Yi as XRControllerMovement,Nn as XRFlag,rg as XRRig,yi as XRState,vo as XRStateFlag,Vc as _$lAjTeY,rn as _ERXbX,FP as __Ignore,PR as __internalNotifyObjectDestroyed,Vo as _owM,no as activeInHierarchyFieldName,ru as addAttributeChangeCallback,ao as addComponent,AI as addCustomExtensionPlugin,Vr as addNewComponent,wu as addPatch,ip as apply,tA as applyHMRChanges,i1 as applyPrototypeExtensions,kw as beginListenDestroy,Tw as beginListenInstantiate,qf as binaryIdentifierCasts,gR as build_scene_functions,Rr as builtinComponentKeyName,y_ as calculateProgress01,wE as clearMessages,j1 as colorSerializer,Iw as compareAssociation,bh as componentSerializer,Uv as copyTexture,C1 as createMotion,Si as debugNet,sl as debugOwner,rC as decompressGpuTexture,Lc as deepClone,No as delay,nu as delayForFrames,Du as deserializeObject,Vi as destroy,f1 as destroyComponentInstance,SS as determineMimeTypeFromExtension,Ie as disposeObjectResources,_n as disposeStream,Wc as editorGuidKeyName,Qa as enableSpatialConsole,B1 as eventListSerializer,yB as exportAsGLTF,Cy as findByGuid,vl as findObjectOfType,_1 as findObjectsOfType,fy as findResourceUsers,$1 as fitCamera,Wv as fitObjectIntoVolume,Wr as foreachComponent,Oy as foreachComponentEnumerator,UE as forward,Lx as generateQRCode,Mw as generateSeed,vi as getBoundingBox,Ov as getCameraController,Fs as getComponent,uh as getComponentInChildren,ph as getComponentInParent,bl as getComponents,_l as getComponentsInChildren,hp as getComponentsInParent,QS as getFormattedDate,kt as getIconElement,ry as getIconTexture,Wo as getLoader,dh as getOrAddComponent,x as getParam,$E as getParentHierarchyPath,JO as getPath,ST as getPeerOptions,Jw as getPeerjsInstance,OR as getResourceUserCount,hx as getSceneData,Rv as getTempColor,_i as getTempQuaternion,z as getTempVector,Rc as getUrlParams,Nv as getVisibleInCustomShadowRendering,Dv as getWorldDirection,df as getWorldEuler,le as getWorldPosition,Se as getWorldQuaternion,uu as getWorldRotation,Qe as getWorldScale,yp as hasPointerEventComponent,Xv as hideDebugConsole,aC as imageToCanvas,$w as initAddressableSerializers,F1 as initBuiltinSerializers,mB as initEngine,PP as initPhysics,tS as initVolumeParameterSerializer,$r as instantiate,DS as invokeLoadedImportPluginHooks,Ix as invokeXRSessionEnd,Ax as invokeXRSessionStart,o1 as isActiveInHierarchy,fl as isActiveSelf,sE as isAndroidDevice,zv as isAnimationAction,Pu as isComponent,XO as isDebugMode,tE as isDesktop,Nr as isDestroyed,M as isDevEnvironment,iA as isDisposable,CR as isDisposed,gB as isExporting,aw as isGLTFModel,lv as isHostedOnGlitch,By as isHotReloadEnabled,JR as isHotReloading,nE as isIPad,Dx as isIconElement,ji as isLocalNetwork,aE as isMacOS,iE as isMobileDevice,rE as isMozillaXR,hE as isQuest,Xx as isResourceTrackingEnabled,cE as isSafari,g2 as isTrackModel,op as isUsingInstancing,lE as isiOS,oE as isiPad,Y3 as loadAsset,Mp as loadPMREM,p_ as loadSync,pu as logHierarchy,AE as lookAtInverse,Dc as lookAtObject,IE as lookAtScreenPoint,YO as makeId,pv as makeIdFromRandomWords,Qi as makeNameSafe,s1 as markAsInstancedRendered,dE as microphonePermissionsGranted,qO as nameof,cv as nameofFactory,AT as needle,Ny as objectSerializer,Rx as offBeforeXRSession,Tx as offXRSessionEnd,Mx as offXRSessionStart,nA as on,LM as onAfterRender,IM as onBeforeRender,rR as onBeforeXRSession,RM as onClear,AM as onDestroy,Cf as onInitialized,Eu as onStart,QM as onSyncDestroy,Ew as onSyncInstantiate,bw as onUpdate,oy as onXRSessionEnd,Gu as onXRSessionStart,xP as parseSync,$v as placeOnSurface,mf as postprocessFBXMaterials,QA as prefix,hv as pushState,KO as randomNumber,Xf as registerBinaryType,Ku as registerComponent,P0 as registerComponentExtension,bn as registerCustomEffectType,k0 as registerExportExtensions,Zp as registerExtensions,v1 as registerHotReloadType,pw as registerLoader,Rw as registerPrefabProvider,Sy as registerPrototypeExtensions,yf as registerType,gv as relativePathPrefix,yv as removeAttributeChangeCallback,jy as removeComponent,II as removeCustomImportExtensionType,PM as removePatch,eo as resolveUrl,mv as sanitizeString,gP as saveImage,M3 as screenshot,h_ as screenshot2,Rf as sendDestroyed,u as serializable,Bw as serializeObject,Ze as serializeable,lh as setActive,vv as setAllowBalloonMessages,yE as setAllowOverlayMessages,hu as setAutoFitEnabled,sf as setCameraController,a1 as setDestroyed,kE as setDevEnvironment,Yx as setDisposable,yl as setDontDestroy,Gg as setOrAddParamsToUrl,QO as setParam,Ac as setParamWithoutReload,CT as setPeerOptions,SR as setResourceTrackingEnabled,qg as setState,pf as setVisibleInCustomShadowRendering,uf as setWorldEuler,zi as setWorldPosition,kr as setWorldPositionXYZ,An as setWorldQuaternion,hf as setWorldQuaternionXYZW,Fv as setWorldRotation,jc as setWorldRotationXYZ,Xa as setWorldScale,zc as showBalloonError,Ae as showBalloonMessage,fe as showBalloonWarning,gf as showDebugConsole,Mv as slerp,qc as syncDestroy,e0 as syncField,Af as syncInstantiate,VE as textureToCanvas,fv as toSourceId,Kw as tryCastBinary,PS as tryDetermineMimetypeFromBinary,CS as tryDetermineMimetypeFromURL,Ic as tryFindObject,Zw as tryGetGuid,w1 as unregisterHotReloadType,ZM as unregisterPrefabProvider,Xg as unwatchWrite,Ev as useForAutoFit,Fe as validate,su as watchWrite};
|
|
1752
|
+
`),Ri&&this._onCreateEffectsDebug(this._composer,s)}createPassForMergeableEffects(e,t,i,n){if(e.length>0){const s=new A.POSTPROCESSING.MODULE.EffectPass(i,...e);s.name=e.map(r=>r.name).join(", "),s.mainScene=n,s.enabled=!0,s.renderToScreen=!1,t.addPass(s),e.length=0}}handleDevicePixelRatio(){typeof this.context.devicePixelRatio=="number"&&this.context.requestSizeUpdate()}_menuEntry=null;_passIndices=null;_onCreateEffectsDebug(e,t){if(Ri==="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) \u2192",r),e.passes.length=0;for(const a of r)a.enabled=!0,a.renderToScreen=!1,e.addPass(a)}const s=this.context.menu;if(s&&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 c=document.createElement("option");c.innerText=l.name,c.value=`${e.passes.indexOf(l)}`,c.title=l.name,r.appendChild(c)}s.appendChild(r),this._menuEntry=r,r.addEventListener("change",()=>{const l=Array.from(r.selectedOptions).map(c=>parseInt(c.value));l.length===1&&l[0]===-1?this._passIndices=null:this._passIndices=l,this.applyEffects(this.context)})}}}}const vB=Object.freeze(Object.defineProperty({__proto__:null,PostProcessingHandler:Pc},Symbol.toStringTag,{value:"Module"}));class _g{_name;_tracks=[];_currentTrack=null;_pendingSignals=[];_idProvider;constructor(e,t){this._name=e,this._idProvider=new St(t??Date.now())}static create(e,t){return new _g(e??"Timeline",t)}animationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Animation,t??null),this}audioTrack(e,t,i){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Audio,t??null),this._currentTrack.volume=i,this}activationTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Activation,t??null),this}controlTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Control,null),this}signalTrack(e,t){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.Signal,t??null),this}markerTrack(e){return this.commitInlineTracks(),this._currentTrack=this.pushTrack(e,Pe.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 Pe.Animation:{let n;if(e instanceof Gt)n=e;else{const h=Array.isArray(e)?e:[e],d=i.outputs[0],p=d instanceof E?d:d!=null&&"gameObject"in d?d.gameObject:void 0;n=yh(h,p)}const s=t??{},r=s.duration??n.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:s.clipIn??0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:s.preExtrapolation??st.None,postExtrapolationMode:s.postExtrapolation??st.None,reversed:s.reversed,asset:{clip:n,loop:s.loop??!1,duration:n.duration,removeStartOffset:s.removeStartOffset??!1}};i.clips.push(c),i.cursor=l;break}case Pe.Audio:{const n=e,s=t??{},r=s.duration,a=s.start??i.cursor,l=a+r,c={start:a,end:l,duration:r,timeScale:s.speed??1,clipIn:0,easeInDuration:s.easeIn??0,easeOutDuration:s.easeOut??0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{clip:n,loop:s.loop??!1,volume:s.volume??1}};i.clips.push(c),i.cursor=l;break}case Pe.Activation:{const n=e,s=n.start??i.cursor,r=s+n.duration,a={start:s,end:r,duration:n.duration,timeScale:1,clipIn:0,easeInDuration:n.easeIn??0,easeOutDuration:n.easeOut??0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{}};i.clips.push(a),i.cursor=r;break}case Pe.Control:{const n=e,s=t??{},r=s.start??i.cursor,a=s.duration,l=r+a,c={start:r,end:l,duration:a,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{sourceObject:n,controlActivation:s.controlActivation??!0,updateDirector:s.updateDirector??!0}};i.clips.push(c),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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .marker() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n={type:Oh.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!==Pe.Signal&&this._currentTrack.type!==Pe.Marker)throw new Error(`TimelineBuilder: .signal() is only supported on signal and marker tracks, not "${this._currentTrack.type}"`);const n=this._idProvider.generateUUID(),s=this._tracks.indexOf(this._currentTrack),r={type:Oh.Signal,time:e,retroActive:i?.retroActive??!1,emitOnce:i?.emitOnce??!1,asset:n};return this._currentTrack.markers.push(r),this._pendingSignals.push({trackIndex:s,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!==Pe.Animation)throw new Error("TimelineBuilder: .track() is only supported on animation tracks");return this._currentTrack.inlineTracks.push(Fy(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=P.getComponent(i,Yr);n||(n=P.addComponent(i,Yr)),n.events||(n.events=[]);for(const s of this._pendingSignals){const r=new kh;r.guid=s.guid;const a=new Sl;a.signal=r,a.reaction=new se([s.callback]),n.events.push(a);const l=t.tracks[s.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 E?t:t!=null&&"gameObject"in t?t.gameObject:void 0,n=yh(e.inlineTracks,i),s=e.cursor,r=n.duration,a={start:s,end:s+r,duration:r,timeScale:1,clipIn:0,easeInDuration:0,easeOutDuration:0,preExtrapolationMode:st.None,postExtrapolationMode:st.None,asset:{clip:n,loop:!1,duration:n.duration,removeStartOffset:!1}};e.clips.push(a),e.cursor=s+r,e.inlineTracks=[]}}class FP{}const wB=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:ye,ActionCollection:fC,ActionModel:Ai,AlignmentConstraint:Ih,Animation:Xt,AnimationBuilder:fg,AnimationCurve:id,AnimationExtension:pm,Animator:Ot,AnimatorController:lo,Antialiasing:rd,Attractor:oc,AudioExtension:Ia,AudioListener:Yo,AudioSource:Gi,Avatar:Ks,AvatarMarker:gt,AxesHelper:Pl,AxisRotationConstraint:u0,BaseUIComponent:xn,BasicIKConstraint:o0,BehaviorExtension:sb,BehaviorModel:$t,BloomEffect:Nm,BoxCollider:Lp,BoxGizmo:ua,BoxHelperComponent:Vt,Button:us,CallInfo:Ns,Camera:ci,CameraTargetReachedEvent:Ph,Canvas:Yl,CanvasGroup:nr,CapsuleCollider:Ko,ChangeMaterialOnClick:X0,ChangeTransformOnClick:la,CharacterController:Jr,CharacterControllerInput:Jo,ChromaticAberration:ad,ClickThrough:ig,ColorAdjustments:lr,ColorBySpeedModule:ic,ColorOverLifetimeModule:Lm,ContactShadows:Lh,CursorFollow:ka,CustomBranding:da,Deletable:c0,DeleteBox:_r,DepthOfField:Hn,DeviceFlag:Dp,DocumentExtension:BP,DragControls:na,DragProfile:Up,DropListener:is,Duplicatable:A0,EffectWrapper:cd,EmissionModule:cs,EmphasizeOnClick:Nl,EnvironmentScene:kp,EventList:se,EventListEvent:zy,EventSystem:bi,EventTrigger:nm,FieldWithDefault:NS,FixedJoint:Sb,FixedRotationAxesConstraint:yS,Fog:Kl,GltfExport:B0,GltfExportBox:D0,GrabPointPlaneConstraint:jh,Gradient:ma,Graphic:Zh,GraphicRaycaster:bp,GridHelper:Zl,GridLayoutGroup:mb,GridSnapConstraint:jp,GroundProjectedEnv:ho,GroupActionModel:aa,HideOnStart:Pn,HingeJoint:td,HorizontalLayoutGroup:pb,get HoverAnimation(){return Eo},Image:cc,InheritVelocityModule:Rb,InputField:i_,InstanceHandle:Fa,InstancingHandler:La,Interactable:l0,KeepRotationConstraint:Bp,KeepScaleConstraint:gS,Keyframe:Mi,LODGroup:Om,LODModel:ec,Light:Ft,LimitVelocityOverLifetimeModule:_t,LogStats:a0,LookAt:n_,LookAtConstraint:qr,MainModule:Jt,MaskableGraphic:Jh,MeshCollider:qs,MeshRenderer:Fh,MinMaxCurve:Z,MinMaxGradient:ga,NeedleMenu:_o,NestedGltf:tc,Networking:Eb,NoiseModule:ve,ObjectRaycaster:dn,OffsetConstraint:pa,OpenURL:hc,OrbitControls:ge,Outline:Xl,Padding:ha,ParticleBurst:Im,ParticleSubEmitter:Ab,ParticleSystem:sd,ParticleSystemRenderer:yn,PhysicsExtension:rb,PixelationEffect:hd,PlaneHeightLockConstraint:p0,PlayAnimationOnClick:Nh,PlayAudioOnClick:Ys,PlayableDirector:Cl,PlayerColor:xc,PointerEventData:Nd,PostProcessingHandler:Pc,PreliminaryAction:Wl,PreliminaryTrigger:Wh,RawImage:Jm,Rect:TC,RectTransform:$n,ReflectionProbe:es,RegisteredAnimationInfo:vr,RemoteSkybox:i0,Renderer:di,RendererLightmap:M0,Rigidbody:it,RotationBySpeedModule:fn,RotationOverLifetimeModule:Vn,ScaleLimitConstraint:h0,SceneSwitcher:nt,ScreenCapture:cr,ScreenSpaceAmbientOcclusion:hs,ScreenSpaceAmbientOcclusionN8:Gn,ScrollFollow:Mo,SeeThrough:Qb,SetActiveOnClick:Q0,ShadowCatcher:gd,ShapeModule:Tb,SharpeningEffect:ud,SignalAsset:kh,SignalReceiver:Yr,SignalReceiverEvent:Sl,SignalTrackHandler:Mh,Size:MC,SizeBySpeedModule:Ti,SizeOverLifetimeModule:fa,SkinnedMeshRenderer:T0,SmoothFollow:qm,SnapToSurfaceConstraint:zp,SpatialGrabRaycaster:Aa,SpatialHtml:vd,SpatialTrigger:Xm,SpatialTriggerReceiver:ko,SpectatorCamera:Qm,SphereCollider:kl,SplineContainer:Sa,SplineData:Oo,SplineWalker:vn,Sprite:os,SpriteData:Vl,SpriteRenderer:ki,SpriteSheet:$l,SubEmitterSystem:Fm,SyncedCamera:Yb,SyncedRoom:qn,SyncedTransform:Fn,TapGestureTrigger:K0,TeleportTarget:vm,TestRunner:Jb,TestSimulateUserData:e_,Text:Zt,TextBuilder:db,TextExtension:Pm,TextureSheetAnimationModule:ei,TiltShiftEffect:Co,TimelineActivationTrack:Sp,TimelineAnimationTrack:Eh,TimelineAudioTrack:Ss,TimelineBuilder:_g,TimelineControlTrack:Cp,TimelineMarkerTrack:xp,ToneMappingEffect:ba,TrailModule:We,TransformData:qe,TransformGizmo:Ca,TriggerBuilder:Yt,TriggerModel:gr,UIRaycastUtils:Hy,UIRootComponent:Qh,USDZExporter:xo,USDZText:Ql,USDZUIExtension:yb,UsageMarker:Dh,VariantAction:G0,VelocityOverLifetimeModule:Ke,VerticalLayoutGroup:ub,VideoPlayer:wt,get ViewBox(){return pt},Vignette:wa,VisibilityAction:$h,Voip:ds,Volume:pd,VolumeParameter:W,VolumeProfile:zm,WebARCameraBackground:Cd,WebARSessionRoot:kn,WebXR:wm,WebXRImageTracking:pc,WebXRImageTrackingModel:fs,WebXRPlaneTracking:ys,WebXRTrackedImage:Sc,XRControllerFollow:ms,XRControllerModel:ss,XRControllerMovement:Yi,XRFlag:Nn,XRRig:rg,XRState:yi,__Ignore:FP},Symbol.toStringTag,{value:"Module"}));var w_;(o=>{function e(t,i=!1,n=.75){const s=new Sa,r=1-j.clamp(n,0,1);return t.forEach((a,l)=>{const c=new v;l<t.length-1?c.subVectors(t[l+1],a).normalize().multiplyScalar(r):i&&t.length>1&&c.subVectors(t[0],a).normalize().multiplyScalar(r);const h=new Oo;h.position.copy(a),h.tangentIn.copy(c),h.tangentOut.copy(c),s.addKnot(h)}),s.closed=i,s}o.createFromPoints=e})(w_||(w_={}));class xB extends $O{constructor(){super(new Worker(URL.createObjectURL(new Blob([`import '${new URL("./generateMeshBVH.worker-DiCnZlf3.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((n,s)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=c=>{s(new Error(`[GenerateMeshBVHWorker] ${c.message||"Could not load worker."}`))},e.onmessage=c=>{const{data:h}=c;if(h.error)s(new Error(h.error)),e.onmessage=null;else if(h.serialized){const{serialized:d,position:p}=h,m=VO.deserialize(d,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=p,d.index)if(t.index)t.index.array=d.index;else{const y=new ot(d.index,1,!1);t.setIndex(y)}g.setBoundingBox&&(t.boundingBox=m.getBoundingBox(new ii)),i.onProgress&&i.onProgress(h.progress),n(m),e.onmessage=null}else i.onProgress&&i.onProgress(h.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(c=>c.buffer).filter(c=>typeof SharedArrayBuffer>"u"||!(c instanceof SharedArrayBuffer)))})}}const SB=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:xB},Symbol.toStringTag,{value:"Module"}));export{Cu as $componentName,EM as $physicsKey,ye as ActionBuilder,fC as ActionCollection,Ai as ActionModel,Uw as Addressables,Ih as AlignmentConstraint,al as AmbientMode,Xt as Animation,fg as AnimationBuilder,id as AnimationCurve,pm as AnimationExtension,oi as AnimationUtils,Ot as Animator,Ci as AnimatorConditionMode,lo as AnimatorController,yg as AnimatorControllerBuilder,Gr as AnimatorControllerParameterType,fh as AnimatorStateInfo,rd as Antialiasing,Qn as Application,Gx as AssetDatabase,ie as AssetReference,oc as Attractor,Uy as AudioClip,Ia as AudioExtension,Yo as AudioListener,X1 as AudioRolloffMode,Gi as AudioSource,Ks as Avatar,gt as AvatarMarker,wl as Axes,Pl as AxesHelper,u0 as AxisRotationConstraint,Nc as BUILD_TIME,xn as BaseUIComponent,o0 as BasicIKConstraint,sb as BehaviorExtension,$t as BehaviorModel,Ar as BlobStorage,Nm as BloomEffect,Lp as BoxCollider,ua as BoxGizmo,Vt as BoxHelperComponent,us as Button,Sn as ButtonsFactory,ZC as CallDirection,Ns as CallInfo,ci as Camera,Ph as CameraTargetReachedEvent,Yl as Canvas,nr as CanvasGroup,Ko as CapsuleCollider,X0 as ChangeMaterialOnClick,la as ChangeTransformOnClick,Jr as CharacterController,Jo as CharacterControllerInput,ad as ChromaticAberration,Bi as CircularBuffer,Qr as ClearFlags,ig as ClickThrough,st as ClipExtrapolation,qi as Collider,cw as Collision,fp as CollisionDetectionMode,lr as ColorAdjustments,ic as ColorBySpeedModule,Lm as ColorOverLifetimeModule,oA as Component,T as Component$1,vu as ComponentLifecycleEvents,wB as Components,nx as ConnectionEvents,lw as ContactPoint,Lh as ContactShadows,U as Context,fR as ContextArgs,de as ContextEvent,he as ContextRegistry,ka as CursorFollow,da as CustomBranding,je as CustomShader,$u as DefaultReflectionMode,c0 as Deletable,_r as DeleteBox,Hn as DepthOfField,Dp as DeviceFlag,I as DeviceUtilities,Y1 as DirectorWrapMode,dp as DisposableStore,BP as DocumentExtension,na as DragControls,g0 as DragMode,Up as DragProfile,is as DropListener,A0 as Duplicatable,cd as EffectWrapper,cs as EmissionModule,Nl as EmphasizeOnClick,Hd as EngineLoadingView,kp as EnvironmentScene,Wf as EventBus,se as EventList,zy as EventListEvent,bi as EventSystem,nm as EventTrigger,NS as FieldWithDefault,Ba as FileReference,Ww as FileReferenceSerializer,lI as FileSpawnModel,xS as File_Event,Sb as FixedJoint,yS as FixedRotationAxesConstraint,Kl as Fog,Cm as FontStyle,Oe as FrameEvent,Ya as GENERATOR,P as GameObject,B as Gizmos,B0 as GltfExport,D0 as GltfExportBox,jh as GrabPointPlaneConstraint,ma as Gradient,Zh as Graphic,bp as GraphicRaycaster,yr as Graphics,Zl as GridHelper,mb as GridLayoutGroup,jp as GridSnapConstraint,ho as GroundProjectedEnv,aa as GroupActionModel,Su as HideFlags,Pn as HideOnStart,td as HingeJoint,pb as HorizontalLayoutGroup,LC as HorizontalWrapMode,YM as HostData,Eo as HoverAnimation,cc as Image,ja as ImageReference,Nw as ImageReferenceSerializer,Rb as InheritVelocityModule,qw as Input,xi as InputEventQueue,ke as InputEvents,i_ as InputField,Fa as InstanceHandle,La as InstancingHandler,Cn as InstancingUtil,Pw as InstantiateEvent,St as InstantiateIdProvider,Ao as InstantiateOptions,l0 as Interactable,Sd as InternalScreenshotUtils,ET as JoinedRoomResponse,Bp as KeepRotationConstraint,gS as KeepScaleConstraint,vT as KeyEventArgs,Mi as Keyframe,Om as LODGroup,ec as LODModel,Yw as LODsManager,MT as LeftRoomResponse,Ft as Light,mx as LightData,_t as LimitVelocityOverLifetimeModule,rB as LoadingElementOptions,a0 as LogStats,Fi as LogType,n_ as LookAt,qr as LookAtConstraint,Vo as LuMYUbW,A as MODULES,Jt as MainModule,Oh as MarkerType,Jh as MaskableGraphic,xs as MaterialPropertyBlock,Yp as MaterialX,j as Mathf,qs as MeshCollider,Fh as MeshRenderer,Z as MinMaxCurve,ga as MinMaxGradient,bf as NEEDLE_ENGINE_FEATURE_FLAGS,Yc as NEKeyboardEvent,Ho as NEPointerEvent,EP as NeedleButtonElement,b0 as NeedleEngineModelLoader,b_ as NeedleEngineWebComponent,_o as NeedleMenu,xu as NeedlePatchesKey,Jf as NeedleXRController,X as NeedleXRSession,Sx as NeedleXRSync,Ux as NeedleXRUtils,tc as NestedGltf,$d as NetworkConnection,Po as NetworkedStreamEvents,Wd as NetworkedStreams,Eb as Networking,Ow as NewInstanceModel,ve as NoiseModule,dn as ObjectRaycaster,Ds as ObjectUtils,pa as OffsetConstraint,lu as OneEuroFilter,of as OneEuroFilterXYZ,hc as OpenURL,ge as OrbitControls,Xl as Outline,ox as OwnershipEvent,sx as OwnershipModel,Rs as PUBLIC_KEY,ha as Padding,Im as ParticleBurst,Ab as ParticleSubEmitter,sd as ParticleSystem,ar as ParticleSystemBaseBehaviour,yn as ParticleSystemRenderer,Am as ParticleSystemShapeType,Cs as PeerHandle,tx as PeerNetworking,vc as Physics,rb as PhysicsExtension,Et as PhysicsMaterialCombine,hd as PixelationEffect,p0 as PlaneHeightLockConstraint,Nh as PlayAnimationOnClick,Ys as PlayAudioOnClick,Cl as PlayableDirector,xc as PlayerColor,Oi as PlayerState,vC as PlayerStateEvent,eb as PlayerSync,rx as PlayerView,ax as PlayerViewManager,Nd as PointerEventData,Bu as PointerType,vx as PostProcessing,ht as PostProcessingEffect,vt as PostProcessingEffectOrder,Pc as PostProcessingHandler,Ja as Prefabs,Wl as PreliminaryAction,Wh as PreliminaryTrigger,Ml as PreviewHelper,il as PrimitiveType,ue as Progress,Yg as PromiseAllWithErrors,Qg as PromiseErrorResult,ce as RGBAColor,Cc as RapierPhysics,Jm as RawImage,jr as RaycastOptions,TC as Rect,$n as RectTransform,es as ReflectionProbe,US as ReflectionProbeUsage,vr as RegisteredAnimationInfo,i0 as RemoteSkybox,Do as RenderTexture,L1 as RenderTextureSerializer,di as Renderer,px as RendererData,M0 as RendererLightmap,it as Rigidbody,tt as RigidbodyConstraints,oe as RoomEvents,fn as RotationBySpeedModule,Vn as RotationOverLifetimeModule,h0 as ScaleLimitConstraint,Qp as SceneLightSettings,nt as SceneSwitcher,cr as ScreenCapture,hs as ScreenSpaceAmbientOcclusion,Gn as ScreenSpaceAmbientOcclusionN8,Mo as ScrollFollow,Qb as SeeThrough,In as SendQueue,Bf as SerializationContext,Q0 as SetActiveOnClick,em as ShadowCastingMode,gd as ShadowCatcher,Tb as ShapeModule,hw as ShapeOverlapResult,ud as SharpeningEffect,kh as SignalAsset,Yr as SignalReceiver,Sl as SignalReceiverEvent,Mh as SignalTrackHandler,MC as Size,Ti as SizeBySpeedModule,fa as SizeOverLifetimeModule,T0 as SkinnedMeshRenderer,qm as SmoothFollow,zp as SnapToSurfaceConstraint,Aa as SpatialGrabRaycaster,vd as SpatialHtml,Xm as SpatialTrigger,ko as SpatialTriggerReceiver,Qm as SpectatorCamera,kl as SphereCollider,gy as SphereIntersection,Sa as SplineContainer,Oo as SplineData,w_ as SplineUtils,vn as SplineWalker,os as Sprite,Vl as SpriteData,ki as SpriteRenderer,$l as SpriteSheet,cA as StateMachineBehaviour,Xb as StreamEndedEvent,KC as StreamReceivedEvent,Fm as SubEmitterSystem,Yb as SyncedCamera,qn as SyncedRoom,Fn as SyncedTransform,K0 as TapGestureTrigger,vm as TeleportTarget,Jb as TestRunner,e_ as TestSimulateUserData,Zt as Text,at as TextAnchor,db as TextBuilder,Pm as TextExtension,ei as TextureSheetAnimationModule,Co as TiltShiftEffect,fx as Time,Sp as TimelineActivationTrack,Eh as TimelineAnimationTrack,Ss as TimelineAudioTrack,_g as TimelineBuilder,Cp as TimelineControlTrack,xp as TimelineMarkerTrack,Kr as TimelineTrackHandler,ba as ToneMappingEffect,Pe as TrackType,We as TrailModule,qe as TransformData,Ca as TransformGizmo,Yt as TriggerBuilder,gr as TriggerModel,k as TypeStore,Hy as UIRaycastUtils,Qh as UIRootComponent,F0 as USDDocument,mt as USDObject,JS as USDWriter,tC as USDZExporter,xo as USDZExporter$1,Ql as USDZText,yb as USDZUIExtension,D1 as UriSerializer,Dh as UsageMarker,TT as UserJoinedOrLeftRoomModel,si as VERSION,G0 as VariantAction,Ke as VelocityOverLifetimeModule,ub as VerticalLayoutGroup,IC as VerticalWrapMode,wt as VideoPlayer,pt as ViewBox,qo as ViewDevice,wa as Vignette,$h as VisibilityAction,ds as Voip,pd as Volume,W as VolumeParameter,zm as VolumeProfile,fT as WaitForFrames,Vw as WaitForPromise,$f as WaitForSeconds,ws as Watch,Cd as WebARCameraBackground,kn as WebARSessionRoot,wm as WebXR,fr as WebXRButtonFactory,pc as WebXRImageTracking,fs as WebXRImageTrackingModel,ys as WebXRPlaneTracking,Sc as WebXRTrackedImage,ms as XRControllerFollow,ss as XRControllerModel,Yi as XRControllerMovement,Nn as XRFlag,rg as XRRig,yi as XRState,vo as XRStateFlag,Vc as _VIq,FP as __Ignore,PR as __internalNotifyObjectDestroyed,rn as __sKHtRdk,no as activeInHierarchyFieldName,ru as addAttributeChangeCallback,ao as addComponent,AI as addCustomExtensionPlugin,Vr as addNewComponent,wu as addPatch,ip as apply,tA as applyHMRChanges,i1 as applyPrototypeExtensions,kw as beginListenDestroy,Tw as beginListenInstantiate,qf as binaryIdentifierCasts,gR as build_scene_functions,Rr as builtinComponentKeyName,y_ as calculateProgress01,wE as clearMessages,j1 as colorSerializer,Iw as compareAssociation,bh as componentSerializer,Uv as copyTexture,C1 as createMotion,Si as debugNet,sl as debugOwner,rC as decompressGpuTexture,Lc as deepClone,No as delay,nu as delayForFrames,Du as deserializeObject,Vi as destroy,f1 as destroyComponentInstance,SS as determineMimeTypeFromExtension,Ie as disposeObjectResources,_n as disposeStream,Wc as editorGuidKeyName,Qa as enableSpatialConsole,B1 as eventListSerializer,yB as exportAsGLTF,Cy as findByGuid,vl as findObjectOfType,_1 as findObjectsOfType,fy as findResourceUsers,$1 as fitCamera,Wv as fitObjectIntoVolume,Wr as foreachComponent,Oy as foreachComponentEnumerator,UE as forward,Lx as generateQRCode,Mw as generateSeed,vi as getBoundingBox,Ov as getCameraController,Fs as getComponent,uh as getComponentInChildren,ph as getComponentInParent,bl as getComponents,_l as getComponentsInChildren,hp as getComponentsInParent,QS as getFormattedDate,kt as getIconElement,ry as getIconTexture,Wo as getLoader,dh as getOrAddComponent,x as getParam,$E as getParentHierarchyPath,JO as getPath,ST as getPeerOptions,Jw as getPeerjsInstance,OR as getResourceUserCount,hx as getSceneData,Rv as getTempColor,_i as getTempQuaternion,z as getTempVector,Rc as getUrlParams,Nv as getVisibleInCustomShadowRendering,Dv as getWorldDirection,df as getWorldEuler,le as getWorldPosition,Se as getWorldQuaternion,uu as getWorldRotation,Qe as getWorldScale,yp as hasPointerEventComponent,Xv as hideDebugConsole,aC as imageToCanvas,$w as initAddressableSerializers,F1 as initBuiltinSerializers,mB as initEngine,PP as initPhysics,tS as initVolumeParameterSerializer,$r as instantiate,DS as invokeLoadedImportPluginHooks,Ix as invokeXRSessionEnd,Ax as invokeXRSessionStart,o1 as isActiveInHierarchy,fl as isActiveSelf,sE as isAndroidDevice,zv as isAnimationAction,Pu as isComponent,XO as isDebugMode,tE as isDesktop,Nr as isDestroyed,M as isDevEnvironment,iA as isDisposable,CR as isDisposed,gB as isExporting,aw as isGLTFModel,lv as isHostedOnGlitch,By as isHotReloadEnabled,JR as isHotReloading,nE as isIPad,Dx as isIconElement,ji as isLocalNetwork,aE as isMacOS,iE as isMobileDevice,rE as isMozillaXR,hE as isQuest,Xx as isResourceTrackingEnabled,cE as isSafari,g2 as isTrackModel,op as isUsingInstancing,lE as isiOS,oE as isiPad,Y3 as loadAsset,Mp as loadPMREM,p_ as loadSync,pu as logHierarchy,AE as lookAtInverse,Dc as lookAtObject,IE as lookAtScreenPoint,YO as makeId,pv as makeIdFromRandomWords,Qi as makeNameSafe,s1 as markAsInstancedRendered,dE as microphonePermissionsGranted,qO as nameof,cv as nameofFactory,AT as needle,Ny as objectSerializer,Rx as offBeforeXRSession,Tx as offXRSessionEnd,Mx as offXRSessionStart,nA as on,LM as onAfterRender,IM as onBeforeRender,rR as onBeforeXRSession,RM as onClear,AM as onDestroy,Cf as onInitialized,Eu as onStart,QM as onSyncDestroy,Ew as onSyncInstantiate,bw as onUpdate,oy as onXRSessionEnd,Gu as onXRSessionStart,xP as parseSync,$v as placeOnSurface,mf as postprocessFBXMaterials,QA as prefix,hv as pushState,KO as randomNumber,Xf as registerBinaryType,Ku as registerComponent,P0 as registerComponentExtension,bn as registerCustomEffectType,k0 as registerExportExtensions,Zp as registerExtensions,v1 as registerHotReloadType,pw as registerLoader,Rw as registerPrefabProvider,Sy as registerPrototypeExtensions,yf as registerType,gv as relativePathPrefix,yv as removeAttributeChangeCallback,jy as removeComponent,II as removeCustomImportExtensionType,PM as removePatch,eo as resolveUrl,mv as sanitizeString,gP as saveImage,M3 as screenshot,h_ as screenshot2,Rf as sendDestroyed,u as serializable,Bw as serializeObject,Ze as serializeable,lh as setActive,vv as setAllowBalloonMessages,yE as setAllowOverlayMessages,hu as setAutoFitEnabled,sf as setCameraController,a1 as setDestroyed,kE as setDevEnvironment,Yx as setDisposable,yl as setDontDestroy,Gg as setOrAddParamsToUrl,QO as setParam,Ac as setParamWithoutReload,CT as setPeerOptions,SR as setResourceTrackingEnabled,qg as setState,pf as setVisibleInCustomShadowRendering,uf as setWorldEuler,zi as setWorldPosition,kr as setWorldPositionXYZ,An as setWorldQuaternion,hf as setWorldQuaternionXYZW,Fv as setWorldRotation,jc as setWorldRotationXYZ,Xa as setWorldScale,zc as showBalloonError,Ae as showBalloonMessage,fe as showBalloonWarning,gf as showDebugConsole,Mv as slerp,qc as syncDestroy,e0 as syncField,Af as syncInstantiate,VE as textureToCanvas,fv as toSourceId,Kw as tryCastBinary,PS as tryDetermineMimetypeFromBinary,CS as tryDetermineMimetypeFromURL,Ic as tryFindObject,Zw as tryGetGuid,w1 as unregisterHotReloadType,ZM as unregisterPrefabProvider,Xg as unwatchWrite,Ev as useForAutoFit,Fe as validate,su as watchWrite};
|
package/dist/needle-engine.d.ts
CHANGED
|
@@ -116,8 +116,6 @@ import { XRHandSpace } from 'three';
|
|
|
116
116
|
|
|
117
117
|
export declare const $componentName: unique symbol;
|
|
118
118
|
|
|
119
|
-
/* Excluded from this release type: _$lAjTeY */
|
|
120
|
-
|
|
121
119
|
export declare const $physicsKey: unique symbol;
|
|
122
120
|
|
|
123
121
|
export declare class __Ignore {
|
|
@@ -125,6 +123,8 @@ export declare class __Ignore {
|
|
|
125
123
|
|
|
126
124
|
export declare function __internalNotifyObjectDestroyed(obj: Object3D): void;
|
|
127
125
|
|
|
126
|
+
/* Excluded from this release type: __sKHtRdk */
|
|
127
|
+
|
|
128
128
|
/** Data describing the accessible semantics for a 3D object or component. */
|
|
129
129
|
declare type AccessibilityData = {
|
|
130
130
|
/** ARIA role (e.g. `"button"`, `"img"`, `"region"`). */
|
|
@@ -6376,8 +6376,6 @@ export declare class EnvironmentScene extends Scene {
|
|
|
6376
6376
|
createAreaLightMaterial(intensity: number): MeshBasicMaterial;
|
|
6377
6377
|
}
|
|
6378
6378
|
|
|
6379
|
-
/* Excluded from this release type: _ERXbX */
|
|
6380
|
-
|
|
6381
6379
|
/** An Euler value, either as a Three.js Euler or as a `[x, y, z]` tuple (radians) */
|
|
6382
6380
|
declare type EulerValue = Euler | [number, number, number];
|
|
6383
6381
|
|
|
@@ -11157,6 +11155,8 @@ declare class LowPassFilter {
|
|
|
11157
11155
|
reset(value?: number): void;
|
|
11158
11156
|
}
|
|
11159
11157
|
|
|
11158
|
+
/* Excluded from this release type: LuMYUbW */
|
|
11159
|
+
|
|
11160
11160
|
declare type MagicSkyboxName = "studio" | "blurred-skybox" | "quicklook-ar" | "quicklook";
|
|
11161
11161
|
|
|
11162
11162
|
export declare class MainModule {
|
|
@@ -14747,8 +14747,6 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
14747
14747
|
effectDistance?: Vector2;
|
|
14748
14748
|
}
|
|
14749
14749
|
|
|
14750
|
-
/* Excluded from this release type: _owM */
|
|
14751
|
-
|
|
14752
14750
|
/** The Needle Engine networking server supports the concept of ownership that can be requested.
|
|
14753
14751
|
* This enum contains possible outgoing (Request*) and incoming (Response*) events for communicating ownership.
|
|
14754
14752
|
*
|
|
@@ -21477,23 +21475,36 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
21477
21475
|
* Marks a GameObject as a valid teleportation target for VR locomotion.
|
|
21478
21476
|
* Add this component to objects or surfaces where users should be able to teleport.
|
|
21479
21477
|
*
|
|
21480
|
-
* **
|
|
21481
|
-
*
|
|
21482
|
-
*
|
|
21483
|
-
*
|
|
21478
|
+
* **How targeting works (important):**
|
|
21479
|
+
* The teleport ray uses a **visual raycast against rendered meshes** — NOT physics colliders.
|
|
21480
|
+
* When {@link XRControllerMovement.useTeleportTarget} is enabled, the controller ray is cast
|
|
21481
|
+
* against the rendered scene and the hit object (or any of its parents) is checked for a
|
|
21482
|
+
* `TeleportTarget` component. You can only teleport onto an object if that object, or one of
|
|
21483
|
+
* its ancestors, has this component.
|
|
21484
|
+
*
|
|
21485
|
+
* **Requirements for a target to be hittable:**
|
|
21486
|
+
* - It MUST have a visible, rendered mesh (a `MeshRenderer` / geometry). The ray hits the
|
|
21487
|
+
* rendered geometry directly.
|
|
21488
|
+
* - **A collider is NOT required.** Teleport does not use physics colliders — adding a
|
|
21489
|
+
* `BoxCollider` (or any collider) has no effect on whether the target can be teleported to.
|
|
21490
|
+
* - It must NOT be on the IgnoreRaycast layer (three.js layer 2) and must not have
|
|
21491
|
+
* `raycastAllowed` / `visible` set to false, otherwise the ray skips it.
|
|
21492
|
+
* - The `TeleportTarget` component may be on the hit mesh itself or on any parent
|
|
21493
|
+
* (resolved via `getComponentInParent`).
|
|
21484
21494
|
*
|
|
21485
21495
|
* **Setup:**
|
|
21486
|
-
* 1. Add this component to GameObjects that should be teleport destinations
|
|
21487
|
-
* 2.
|
|
21496
|
+
* 1. Add this component to GameObjects (with a visible mesh) that should be teleport destinations
|
|
21497
|
+
* 2. Enable "Use Teleport Target" on the {@link XRControllerMovement} component so teleporting
|
|
21498
|
+
* is restricted to objects carrying this component
|
|
21488
21499
|
* 3. Test teleportation in VR mode
|
|
21489
21500
|
*
|
|
21490
21501
|
* @example
|
|
21491
21502
|
* ```ts
|
|
21492
|
-
* // Make a platform teleportable
|
|
21503
|
+
* // Make a platform teleportable (the platform already has a visible mesh)
|
|
21493
21504
|
* const platform = myPlatform.addComponent(TeleportTarget);
|
|
21494
21505
|
* ```
|
|
21495
21506
|
*
|
|
21496
|
-
* @summary Marker component for valid VR teleportation destinations
|
|
21507
|
+
* @summary Marker component for valid VR teleportation destinations (mesh hit-test, no collider needed)
|
|
21497
21508
|
* @category XR
|
|
21498
21509
|
* @group Components
|
|
21499
21510
|
* @see {@link XRControllerMovement} for VR locomotion and teleport configuration
|
|
@@ -23540,6 +23551,8 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
23540
23551
|
private updateDarkness;
|
|
23541
23552
|
}
|
|
23542
23553
|
|
|
23554
|
+
/* Excluded from this release type: _VIq */
|
|
23555
|
+
|
|
23543
23556
|
/**
|
|
23544
23557
|
* Action to show or hide an object.
|
|
23545
23558
|
* Use together with a {@link TapGestureTrigger} to show or hide objects when tapped or clicked.
|
|
@@ -24940,6 +24953,15 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
24940
24953
|
* Additionally it supports teleporting using the right controller's thumbstick or by pinching the index finger tip in front of the hand (if hand tracking is enabled).
|
|
24941
24954
|
* It also visualizes controller rays and hit points in the scene.
|
|
24942
24955
|
*
|
|
24956
|
+
* The component operates on the active XR rig and controllers from the {@link NeedleXRSession} (`args.xr.rig`,
|
|
24957
|
+
* `args.xr.leftController` / `rightController`) and receives `onUpdateXR` regardless of where it sits in the hierarchy.
|
|
24958
|
+
* It does NOT need to be on the same GameObject as {@link WebXR}, and does not read {@link WebXR} from its parents.
|
|
24959
|
+
*
|
|
24960
|
+
* **Duplicate-handler gotcha:** {@link WebXR.setDefaultMovementEnabled} (called when `WebXR.useDefaultControls` is enabled,
|
|
24961
|
+
* the default) adds an `XRControllerMovement` to the WebXR GameObject only if that object has none. If you place your own
|
|
24962
|
+
* `XRControllerMovement` on a different object, WebXR still adds a second, default one at runtime — two handlers then run
|
|
24963
|
+
* simultaneously (doubled movement, and your teleport settings such as {@link XRControllerMovement.useTeleportTarget} are
|
|
24964
|
+
* bypassed by the default handler). Put your component on the WebXR GameObject, or disable `WebXR.useDefaultControls`.
|
|
24943
24965
|
*
|
|
24944
24966
|
* @summary Move the XR rig using controller input
|
|
24945
24967
|
* @category XR
|
|
@@ -24963,7 +24985,15 @@ export declare class OrbitControls extends Component implements ICameraControlle
|
|
|
24963
24985
|
* @default true
|
|
24964
24986
|
*/
|
|
24965
24987
|
usePinchToTeleport: boolean;
|
|
24966
|
-
/** Enable to only allow teleporting on objects with a
|
|
24988
|
+
/** Enable to only allow teleporting on objects with a {@link TeleportTarget} component.
|
|
24989
|
+
*
|
|
24990
|
+
* The teleport ray is a **visual raycast against rendered meshes** (not physics colliders):
|
|
24991
|
+
* it hits the rendered geometry and then looks for a {@link TeleportTarget} on the hit object
|
|
24992
|
+
* or any of its parents. A collider is NOT required on the target — only a visible mesh that
|
|
24993
|
+
* is not on the IgnoreRaycast layer.
|
|
24994
|
+
*
|
|
24995
|
+
* When enabled, teleporting is rejected if the ray does not hit a `TeleportTarget` (the
|
|
24996
|
+
* ground-plane fallback used in free teleport mode is also disabled).
|
|
24967
24997
|
* @default false
|
|
24968
24998
|
*/
|
|
24969
24999
|
useTeleportTarget: boolean;
|