@needle-tools/engine 4.7.0-next.a507c47 → 4.7.0-next.b344106
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{needle-engine.bundle-CPBkAx_i.min.js → needle-engine.bundle-BJvGtkRN.min.js} +5 -5
- package/dist/{needle-engine.bundle-BRRl7L9U.umd.cjs → needle-engine.bundle-BPvX8tv9.umd.cjs} +5 -5
- package/dist/{needle-engine.bundle-8HzDjpUw.js → needle-engine.bundle-CJYsymRO.js} +15 -15
- package/dist/needle-engine.js +2 -2
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/lib/engine/engine_context.js +1 -1
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_three_utils.js +4 -0
- package/lib/engine/engine_three_utils.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +1 -1
- package/lib/engine-components/Camera.js +1 -1
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CameraUtils.js +5 -3
- package/lib/engine-components/CameraUtils.js.map +1 -1
- package/lib/engine-components/Skybox.js +4 -4
- package/lib/engine-components/Skybox.js.map +1 -1
- package/package.json +1 -1
- package/plugins/common/logger.js +232 -0
- package/plugins/types/userconfig.d.ts +1 -1
- package/plugins/vite/alias.js +7 -2
- package/plugins/vite/imports-logger.js +1 -1
- package/plugins/vite/index.js +2 -0
- package/plugins/vite/logger.client.js +218 -0
- package/plugins/vite/logger.js +85 -0
- package/plugins/vite/materialx.js +6 -4
- package/src/engine/engine_context.ts +1 -1
- package/src/engine/engine_three_utils.ts +3 -0
- package/src/engine/webcomponents/needle-engine.attributes.ts +1 -1
- package/src/engine-components/Camera.ts +1 -1
- package/src/engine-components/CameraUtils.ts +5 -3
- package/src/engine-components/Skybox.ts +5 -5
package/dist/{needle-engine.bundle-BRRl7L9U.umd.cjs → needle-engine.bundle-BPvX8tv9.umd.cjs}
RENAMED
|
@@ -79,7 +79,7 @@ varying vec2 vUv;
|
|
|
79
79
|
void main(){
|
|
80
80
|
vUv = uv;
|
|
81
81
|
gl_Position = vec4(position.xy, 0., 1.0);
|
|
82
|
-
}`);let Xd=Ou;const hn=class hn{static copyTexture(t,e){e||(e=this.blitMaterial),this.blitMaterial.reset();const i=e||this.blitMaterial;i.uniforms.map.value=t,i.needsUpdate=!0,i.uniformsNeedUpdate=!0;const n=i.vertexShader;i.vertexShader=Xd.vertex;const s=this.mesh;s.material=i,s.frustumCulled=!1,this.scene.children.length=0,this.scene.add(s),this.renderer.setSize(t.image.width,t.image.height),this.renderer.clear(),this.renderer.render(this.scene,this.perspectiveCam);const a=new d.Texture(this.renderer.domElement);return a.name="Copy",a.needsUpdate=!0,i.vertexShader=n,a}static blit(t,e,i){const{renderer:n=this.renderer,blitMaterial:s=this.blitMaterial,flipY:a=!1,depthTexture:l=null,depthTest:c=!0,depthWrite:h=!0}=i||{};this.blitMaterial.reset(),s.uniforms.map&&(s.uniforms.map.value=t),s.uniforms.flipY&&(s.uniforms.flipY.value=a),l?(s.uniforms.writeDepth=new d.Uniform$1(!0),s.uniforms.depthTexture.value=l):(s.uniforms.writeDepth=new d.Uniform$1(!1),s.uniforms.depthTexture.value=null),s.needsUpdate=!0,s.uniformsNeedUpdate=!0;const u=this.mesh;u.material=s,u.frustumCulled=!1,this.scene.children.length=0,this.scene.add(u);const f=n.getRenderTarget(),p=n.getContext(),g=p.getParameter(p.DEPTH_TEST),y=p.getParameter(p.DEPTH_WRITEMASK),b=p.getParameter(p.DEPTH_FUNC);c?n.getContext().enable(n.getContext().DEPTH_TEST):n.getContext().disable(n.getContext().DEPTH_TEST),n.state.buffers.depth.setMask(h),n.setClearColor(new d.Color(0,0,0),0),n.setPixelRatio(window.devicePixelRatio),n.setRenderTarget(e),n.clear(),n.render(this.scene,this.perspectiveCam),n.setRenderTarget(f);const _=n.state.buffers.depth;_.setTest(g),_.setMask(y),_.setFunc(b)}static textureToCanvas(t,e=!1){if(!t)return null;(e===!0||t.isCompressedTexture===!0)&&(t=M0(t));const i=t.image;if(QS(i)){const n=document.createElement("canvas");n.width=i.width,n.height=i.height;const s=n.getContext("2d");return s?(s.drawImage(i,0,0,i.width,i.height,0,0,n.width,n.height),n):(console.error("Failed getting canvas 2d context"),null)}return null}};r(hn,"planeGeometry",new d.PlaneGeometry(2,2,1,1)),r(hn,"renderer",new d.WebGLRenderer({antialias:!1,alpha:!0})),r(hn,"perspectiveCam",new d.PerspectiveCamera),r(hn,"orthographicCam",new d.OrthographicCamera),r(hn,"scene",new d.Scene),r(hn,"blitMaterial",new Xd),r(hn,"mesh",new d.Mesh(hn.planeGeometry,hn.blitMaterial));let Mr=hn;function M0(o){return Mr.copyTexture(o)}function XS(o,t=!1){return Mr.textureToCanvas(o,t)}function QS(o){return typeof HTMLImageElement<"u"&&o instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&o instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&o instanceof OffscreenCanvas||typeof ImageBitmap<"u"&&o instanceof ImageBitmap}function YS(o){const t=o.type;return t==="Mesh"||t==="SkinnedMesh"}function Km(o,t){t?o["needle:rendercustomshadow"]=!0:o["needle:rendercustomshadow"]=!1}function O0(o){if(o){if(o["needle:rendercustomshadow"]===!0)return!0;if(o["needle:rendercustomshadow"]==null)return!0}return!1}function li(o,t=void 0,e=void 0,i=void 0){const n=i||new d.Box3;n.makeEmpty();const s=[];function a(c){let h=!0;if(c.visible&&v0(c)!==!1&&!(c.type==="TransformControlsGizmo"||c.type==="TransformControlsPlane")){if(c instanceof d.Box3Helper&&(h=!1),c instanceof d.GridHelper&&(h=!1),c instanceof G.GroundedSkybox&&(h=!1),c.isGizmo===!0&&(h=!1),c.material instanceof d.ShadowMaterial&&(h=!1),YS(c)||(h=!1),e&&c.layers.test(e)===!1&&(h=!1),h){if(t&&Array.isArray(t)&&(t!=null&&t.includes(c)))return;if(typeof t=="function"&&t(c)===!0)return}if(c.isUI!==!0){if(h){const u=c.children;c.children=s;const f=c.position,p=c.scale;if(Number.isNaN(f.x)||Number.isNaN(f.y)||Number.isNaN(f.z)){console.warn(`Object "${c.name}" has NaN values in position or scale.... will ignore it`,f,p);return}n.expandByObject(c,!0),c.children=u}for(const u of c.children)a(u)}}}let l=!1;Array.isArray(o)||(o=[o]);for(const c of o)c&&(l=!0,c.updateMatrixWorld(),a(c));return l||console.warn("No objects to fit camera to..."),n}function k0(o,t,e){const i=li([o],e==null?void 0:e.ignore),n=new d.Vector3;i.getSize(n);const s=new d.Vector3;i.getCenter(s);const a=new d.Vector3;t.getSize(a);const l=new d.Vector3;t.getCenter(l);const c=new d.Vector3;c.set(a.x/n.x,a.y/n.y,a.z/n.z);const h=Math.min(c.x,c.y,c.z),u=(e==null?void 0:e.scale)!==!1;if(u&&za(o,Ue(o).multiplyScalar(h)),(e==null?void 0:e.position)!==!1){const f=new d.Vector3;i.getCenter(f),f.y=i.min.y;const p=new d.Vector3;t.getCenter(p),p.y=t.min.y;const g=p.clone().sub(f);u&&g.multiplyScalar(h),st(o,Q(o).add(g))}return{boundsBefore:i,scale:c}}function R0(o,t){const e=li([o]),i=new d.Vector3;e.getCenter(i),i.y=e.min.y;const n=t.clone().sub(i),s=Q(o);return st(o,s.add(n)),{offset:n,bounds:e}}function Zm(o,t,e,i){if(Array.isArray(t)){let a=!0;for(let l=0;l<t.length;l++)Zm(o,t[l],l,t)||(a=!1);return a}if(t.type==="MeshStandardMaterial"||t.type==="MeshBasicMaterial")return!1;if(t["material:fbx"]!=null)return!0;const n=new d.MeshStandardMaterial;n["material:fbx"]=t;const s=t;return s&&(s.map?n.color.set(1,1,1):n.color.copyLinearToSRGB(s.color),n.emissive.copyLinearToSRGB(s.emissive),n.emissiveIntensity=s.emissiveIntensity,n.opacity=s.opacity,n.displacementScale=s.displacementScale,n.transparent=s.transparent,n.bumpMap=s.bumpMap,n.aoMap=s.aoMap,n.map=s.map,n.displacementMap=s.displacementMap,n.emissiveMap=s.emissiveMap,n.normalMap=s.normalMap,n.envMap=s.envMap,n.alphaMap=s.alphaMap,n.metalness=s.reflectivity,n.vertexColors=s.vertexColors,s.shininess&&(n.roughness=1-Math.sqrt(s.shininess)/10),n.needsUpdate=!0),e===void 0?o.material=n:i[e]=n,!0}let Kh=!1;SS((...o)=>{var t;j()&&((t=re.Current)!=null&&t.isInXR)&&(br(!0),E0("error",...o))});function br(o){if(o){if(Kh)return;Kh=!0,ZS()}else{if(!Kh)return;Kh=!1,JS()}}const ac={log:void 0,warn:void 0,error:void 0};class KS{constructor(){r(this,"familyName","needle-xr");r(this,"root",null);r(this,"context",null);r(this,"defaultFontSize",.06);r(this,"targetObject",new d.Object3D);r(this,"userForwardViewPoint",new d.Vector3);r(this,"oneEuroFilter",new Gm(90,.8));r(this,"_lastElementRemoveTime",0);r(this,"onBeforeRender",()=>{var e,i;const t=(e=this.context)==null?void 0:e.mainCamera;if(this.context&&t instanceof d.PerspectiveCamera){const n=this.getRoot();Number.isNaN(n.position.x)&&n.position.set(0,0,0),Number.isNaN(n.quaternion.x)&&n.quaternion.set(0,0,0,1),this.context.scene.add(this.targetObject);const s=((i=this.context.xr)==null?void 0:i.rigScale)??1,a=3.5*s,l=t.worldForward;l.y=0,l.normalize().multiplyScalar(a),this.userForwardViewPoint.copy(t.worldPosition).sub(l),this.targetObject.position.distanceTo(this.userForwardViewPoint)>2*s&&(this.targetObject.position.copy(this.userForwardViewPoint),eh(this.targetObject,t,!0,!0),this.targetObject.rotateY(Math.PI)),this.oneEuroFilter.filter(this.targetObject.position,n.position,this.context.time.time);const h=this.context.time.deltaTime;if(n.quaternion.slerp(this.targetObject.quaternion,h*5),n.scale.setScalar(s),this.targetObject.removeFromParent(),this.context.scene.add(n),this.context.time.time-this._lastElementRemoveTime>.1){this._lastElementRemoveTime=this.context.time.time;const u=Date.now();for(let f=0;f<this._activeTexts.length;f++){const p=this._activeTexts[f];if(p instanceof ne.__webpack_exports__default.Text&&u-p._activatedTime>2e4){p.removeFromParent(),this._textBuffer.push(p),this._activeTexts.splice(f,1);break}}}}});r(this,"textOptions",{fontSize:this.defaultFontSize,fontFamily:this.familyName,padding:.03,margin:.005,color:0,backgroundColor:16777215,backgroundOpacity:.4,borderRadius:.03,offset:.025});r(this,"_textBuffer",[]);r(this,"_activeTexts",[]);this.ensureFont()}onEnable(){this.context=re.Current||re.All[0],this.context.pre_render_callbacks.push(this.onBeforeRender)}onDisable(){var t,e,i;(e=this.context)==null||e.pre_render_callbacks.splice((t=this.context)==null?void 0:t.pre_render_callbacks.indexOf(this.onBeforeRender),1),(i=this.root)==null||i.removeFromParent()}addLog(t,e){const i=this.getRoot(),n=this.getText();let s=16777215,a=0;switch(t){case"log":s=16777215,a=0;break;case"warn":s=16772761,a=4465152;break;case"error":s=16755370,a=7798784;break}e.length>1e3&&(e=e.substring(0,1e3)+"...");const l=new Date().toISOString().split("T")[1].split(".")[0];n.textContent="["+l+"] "+e,n.visible=!0,n._activatedTime=Date.now(),i.add(n),this._activeTexts.push(n),this.context&&this.context.scene.add(i),n.set({backgroundColor:s,color:a}),ne.__webpack_exports__default.update()}ensureFont(){let t=ne.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);if(!t){t=ne.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName);const e=t.addVariant("normal","normal","./include/needle/arial-msdf.json","./include/needle/arial.png");e==null||e.addEventListener("ready",()=>{ne.__webpack_exports__default.update()})}}getText(){const t=this.getRoot();if(this._textBuffer.length>0){const i=this._textBuffer.pop();return i.visible=!0,setTimeout(()=>this.disableDepthTestRecursive(i),100),i}if(t.children.length>20&&this._activeTexts.length>0)return this._activeTexts.shift();const e=new ne.__webpack_exports__default.Text(this.textOptions);return setTimeout(()=>this.disableDepthTestRecursive(e),500),setTimeout(()=>this.disableDepthTestRecursive(e),1500),e}disableDepthTestRecursive(t,e=0){for(let n=0;n<t.children.length;n++){const s=t.children[n];s instanceof d.Object3D&&this.disableDepthTestRecursive(s,e+1)}t.renderOrder=10*e,t.layers.set(2);const i=t.material;i&&(i.depthWrite=!1,i.depthTest=!1,i.transparent=!0),e===0&&ne.__webpack_exports__default.update()}getRoot(){if(this.root)return this.root;const t=this.defaultFontSize,e={boxSizing:"border-box",fontFamily:this.familyName,width:"2.6",fontSize:t,color:0,lineHeight:1,backgroundColor:16777215,backgroundOpacity:0,whiteSpace:"pre-wrap",flexDirection:"column-reverse"};return this.root=new ne.__webpack_exports__default.Block(e),this.root}}let Ht=null;function ZS(){Ht||(Ht=new KS),Ht.onEnable();for(const o in ac){ac[o]=console[o];let t=!1;console[o]=function(){var e;if((e=ac[o])==null||e.apply(console,arguments),!t)try{t=!0,E0(o,...arguments)}finally{t=!1}}}}function JS(){Ht==null||Ht.onDisable();for(const o in ac)console[o]=ac[o]}const Ol=new Map;function E0(o,...t){try{switch(Ol.clear(),o){case"log":Ht==null||Ht.addLog("log",e());break;case"warn":Ht==null||Ht.addLog("warn",e());break;case"error":Ht==null||Ht.addLog("error",e());break}}catch(s){console.error("Error in spatial console",s)}finally{Ol.clear()}function e(){let s="";for(let a=0;a<t.length;a++){const l=t[a];s+=i(l),a<t.length-1&&(s+=", ")}return s}function i(s,a=0){if(typeof s=="string")return'"'+s+'"';if(typeof s=="number"){if(s%1!==0){const c=s.toFixed(5),h=c.indexOf(".");let u=c.length-1;for(;u>h&&c[u]==="0";)u--;return c.substring(0,u+1)}return s.toString()}else if(Array.isArray(s)){let l="[";for(let c=0;c<s.length;c++){const h=s[c];l+=i(h,a+1),c<s.length-1&&(l+=", ")}return l+="]",l}else{if(s===null)return"null";if(s===void 0)return"undefined";if(typeof s=="function")return s.name+"()"}if(s instanceof d.Vector2)return`(${i(s.x)}, ${i(s.y)})`;if(s instanceof d.Vector3)return`(${i(s.x)}, ${i(s.y)}, ${i(s.z)})`;if(s instanceof d.Vector4)return`(${i(s.x)}, ${i(s.y)}, ${i(s.z)}, ${i(s.w)})`;if(s instanceof d.Quaternion)return`(${i(s.x)}, ${i(s.y)}, ${i(s.z)}, ${i(s.w)})`;if(s instanceof d.Material||s instanceof d.Texture)return s.name;if(s instanceof d.Matrix3)return`[${s.elements.join(", ")}]`;if(s instanceof d.Matrix4)return`[${s.elements.join(", ")}]`;if(s instanceof d.Layers)return s.mask.toString();if(typeof s=="object"){if(Ol.has(s))return"*";let l=`{
|
|
82
|
+
}`);let Xd=Ou;const hn=class hn{static copyTexture(t,e){e||(e=this.blitMaterial),this.blitMaterial.reset();const i=e||this.blitMaterial;i.uniforms.map.value=t,i.needsUpdate=!0,i.uniformsNeedUpdate=!0;const n=i.vertexShader;i.vertexShader=Xd.vertex;const s=this.mesh;s.material=i,s.frustumCulled=!1,this.scene.children.length=0,this.scene.add(s),this.renderer.setSize(t.image.width,t.image.height),this.renderer.clear(),this.renderer.render(this.scene,this.perspectiveCam);const a=new d.Texture(this.renderer.domElement);return a.name="Copy",a.needsUpdate=!0,i.vertexShader=n,a}static blit(t,e,i){const{renderer:n=this.renderer,blitMaterial:s=this.blitMaterial,flipY:a=!1,depthTexture:l=null,depthTest:c=!0,depthWrite:h=!0}=i||{};this.blitMaterial.reset(),s.uniforms.map&&(s.uniforms.map.value=t),s.uniforms.flipY&&(s.uniforms.flipY.value=a),l?(s.uniforms.writeDepth=new d.Uniform$1(!0),s.uniforms.depthTexture.value=l):(s.uniforms.writeDepth=new d.Uniform$1(!1),s.uniforms.depthTexture.value=null),s.needsUpdate=!0,s.uniformsNeedUpdate=!0;const u=this.mesh;u.material=s,u.frustumCulled=!1,this.scene.children.length=0,this.scene.add(u);const f=n.getRenderTarget(),p=n.getContext(),g=p.getParameter(p.DEPTH_TEST),y=p.getParameter(p.DEPTH_WRITEMASK),b=p.getParameter(p.DEPTH_FUNC);c?n.getContext().enable(n.getContext().DEPTH_TEST):n.getContext().disable(n.getContext().DEPTH_TEST),n.state.buffers.depth.setMask(h),n.setClearColor(new d.Color(0,0,0),0),n.setPixelRatio(window.devicePixelRatio),n.setRenderTarget(e),n.clear(),n.render(this.scene,this.perspectiveCam),n.setRenderTarget(f);const _=n.state.buffers.depth;_.setTest(g),_.setMask(y),_.setFunc(b)}static textureToCanvas(t,e=!1){if(!t)return null;(e===!0||t.isCompressedTexture===!0)&&(t=M0(t));const i=t.image;if(QS(i)){const n=document.createElement("canvas");n.width=i.width,n.height=i.height;const s=n.getContext("2d");return s?(s.drawImage(i,0,0,i.width,i.height,0,0,n.width,n.height),n):(console.error("Failed getting canvas 2d context"),null)}return null}};r(hn,"planeGeometry",new d.PlaneGeometry(2,2,1,1)),r(hn,"renderer",new d.WebGLRenderer({antialias:!1,alpha:!0})),r(hn,"perspectiveCam",new d.PerspectiveCamera),r(hn,"orthographicCam",new d.OrthographicCamera),r(hn,"scene",new d.Scene),r(hn,"blitMaterial",new Xd),r(hn,"mesh",new d.Mesh(hn.planeGeometry,hn.blitMaterial));let Mr=hn;function M0(o){return Mr.copyTexture(o)}function XS(o,t=!1){return Mr.textureToCanvas(o,t)}function QS(o){return typeof HTMLImageElement<"u"&&o instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&o instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&o instanceof OffscreenCanvas||typeof ImageBitmap<"u"&&o instanceof ImageBitmap}function YS(o){const t=o.type;return t==="Mesh"||t==="SkinnedMesh"}function Km(o,t){t?o["needle:rendercustomshadow"]=!0:o["needle:rendercustomshadow"]=!1}function O0(o){if(o){if(o["needle:rendercustomshadow"]===!0)return!0;if(o["needle:rendercustomshadow"]==null)return!0}return!1}function li(o,t=void 0,e=void 0,i=void 0){const n=i||new d.Box3;n.makeEmpty();const s=[];function a(c){let h=!0;if(c.visible&&v0(c)!==!1&&!(c.type==="TransformControlsGizmo"||c.type==="TransformControlsPlane")){if(c instanceof d.Box3Helper&&(h=!1),c instanceof d.GridHelper&&(h=!1),c instanceof G.GroundedSkybox&&(h=!1),c.isGizmo===!0&&(h=!1),c.material instanceof d.ShadowMaterial&&(h=!1),YS(c)||(h=!1),e&&c.layers.test(e)===!1&&(h=!1),h){if(t&&Array.isArray(t)&&(t!=null&&t.includes(c)))return;if(typeof t=="function"&&t(c)===!0)return}if(c.isUI!==!0){if(h){const u=c.children;c.children=s;const f=c.position,p=c.scale;if(Number.isNaN(f.x)||Number.isNaN(f.y)||Number.isNaN(f.z)){console.warn(`Object "${c.name}" has NaN values in position or scale.... will ignore it`,f,p);return}c.geometry===null&&(c.geometry=void 0),n.expandByObject(c,!0),c.children=u}for(const u of c.children)a(u)}}}let l=!1;Array.isArray(o)||(o=[o]);for(const c of o)c&&(l=!0,c.updateMatrixWorld(),a(c));return l||console.warn("No objects to fit camera to..."),n}function k0(o,t,e){const i=li([o],e==null?void 0:e.ignore),n=new d.Vector3;i.getSize(n);const s=new d.Vector3;i.getCenter(s);const a=new d.Vector3;t.getSize(a);const l=new d.Vector3;t.getCenter(l);const c=new d.Vector3;c.set(a.x/n.x,a.y/n.y,a.z/n.z);const h=Math.min(c.x,c.y,c.z),u=(e==null?void 0:e.scale)!==!1;if(u&&za(o,Ue(o).multiplyScalar(h)),(e==null?void 0:e.position)!==!1){const f=new d.Vector3;i.getCenter(f),f.y=i.min.y;const p=new d.Vector3;t.getCenter(p),p.y=t.min.y;const g=p.clone().sub(f);u&&g.multiplyScalar(h),st(o,Q(o).add(g))}return{boundsBefore:i,scale:c}}function R0(o,t){const e=li([o]),i=new d.Vector3;e.getCenter(i),i.y=e.min.y;const n=t.clone().sub(i),s=Q(o);return st(o,s.add(n)),{offset:n,bounds:e}}function Zm(o,t,e,i){if(Array.isArray(t)){let a=!0;for(let l=0;l<t.length;l++)Zm(o,t[l],l,t)||(a=!1);return a}if(t.type==="MeshStandardMaterial"||t.type==="MeshBasicMaterial")return!1;if(t["material:fbx"]!=null)return!0;const n=new d.MeshStandardMaterial;n["material:fbx"]=t;const s=t;return s&&(s.map?n.color.set(1,1,1):n.color.copyLinearToSRGB(s.color),n.emissive.copyLinearToSRGB(s.emissive),n.emissiveIntensity=s.emissiveIntensity,n.opacity=s.opacity,n.displacementScale=s.displacementScale,n.transparent=s.transparent,n.bumpMap=s.bumpMap,n.aoMap=s.aoMap,n.map=s.map,n.displacementMap=s.displacementMap,n.emissiveMap=s.emissiveMap,n.normalMap=s.normalMap,n.envMap=s.envMap,n.alphaMap=s.alphaMap,n.metalness=s.reflectivity,n.vertexColors=s.vertexColors,s.shininess&&(n.roughness=1-Math.sqrt(s.shininess)/10),n.needsUpdate=!0),e===void 0?o.material=n:i[e]=n,!0}let Kh=!1;SS((...o)=>{var t;j()&&((t=re.Current)!=null&&t.isInXR)&&(br(!0),E0("error",...o))});function br(o){if(o){if(Kh)return;Kh=!0,ZS()}else{if(!Kh)return;Kh=!1,JS()}}const ac={log:void 0,warn:void 0,error:void 0};class KS{constructor(){r(this,"familyName","needle-xr");r(this,"root",null);r(this,"context",null);r(this,"defaultFontSize",.06);r(this,"targetObject",new d.Object3D);r(this,"userForwardViewPoint",new d.Vector3);r(this,"oneEuroFilter",new Gm(90,.8));r(this,"_lastElementRemoveTime",0);r(this,"onBeforeRender",()=>{var e,i;const t=(e=this.context)==null?void 0:e.mainCamera;if(this.context&&t instanceof d.PerspectiveCamera){const n=this.getRoot();Number.isNaN(n.position.x)&&n.position.set(0,0,0),Number.isNaN(n.quaternion.x)&&n.quaternion.set(0,0,0,1),this.context.scene.add(this.targetObject);const s=((i=this.context.xr)==null?void 0:i.rigScale)??1,a=3.5*s,l=t.worldForward;l.y=0,l.normalize().multiplyScalar(a),this.userForwardViewPoint.copy(t.worldPosition).sub(l),this.targetObject.position.distanceTo(this.userForwardViewPoint)>2*s&&(this.targetObject.position.copy(this.userForwardViewPoint),eh(this.targetObject,t,!0,!0),this.targetObject.rotateY(Math.PI)),this.oneEuroFilter.filter(this.targetObject.position,n.position,this.context.time.time);const h=this.context.time.deltaTime;if(n.quaternion.slerp(this.targetObject.quaternion,h*5),n.scale.setScalar(s),this.targetObject.removeFromParent(),this.context.scene.add(n),this.context.time.time-this._lastElementRemoveTime>.1){this._lastElementRemoveTime=this.context.time.time;const u=Date.now();for(let f=0;f<this._activeTexts.length;f++){const p=this._activeTexts[f];if(p instanceof ne.__webpack_exports__default.Text&&u-p._activatedTime>2e4){p.removeFromParent(),this._textBuffer.push(p),this._activeTexts.splice(f,1);break}}}}});r(this,"textOptions",{fontSize:this.defaultFontSize,fontFamily:this.familyName,padding:.03,margin:.005,color:0,backgroundColor:16777215,backgroundOpacity:.4,borderRadius:.03,offset:.025});r(this,"_textBuffer",[]);r(this,"_activeTexts",[]);this.ensureFont()}onEnable(){this.context=re.Current||re.All[0],this.context.pre_render_callbacks.push(this.onBeforeRender)}onDisable(){var t,e,i;(e=this.context)==null||e.pre_render_callbacks.splice((t=this.context)==null?void 0:t.pre_render_callbacks.indexOf(this.onBeforeRender),1),(i=this.root)==null||i.removeFromParent()}addLog(t,e){const i=this.getRoot(),n=this.getText();let s=16777215,a=0;switch(t){case"log":s=16777215,a=0;break;case"warn":s=16772761,a=4465152;break;case"error":s=16755370,a=7798784;break}e.length>1e3&&(e=e.substring(0,1e3)+"...");const l=new Date().toISOString().split("T")[1].split(".")[0];n.textContent="["+l+"] "+e,n.visible=!0,n._activatedTime=Date.now(),i.add(n),this._activeTexts.push(n),this.context&&this.context.scene.add(i),n.set({backgroundColor:s,color:a}),ne.__webpack_exports__default.update()}ensureFont(){let t=ne.__webpack_exports__default.FontLibrary.getFontFamily(this.familyName);if(!t){t=ne.__webpack_exports__default.FontLibrary.addFontFamily(this.familyName);const e=t.addVariant("normal","normal","./include/needle/arial-msdf.json","./include/needle/arial.png");e==null||e.addEventListener("ready",()=>{ne.__webpack_exports__default.update()})}}getText(){const t=this.getRoot();if(this._textBuffer.length>0){const i=this._textBuffer.pop();return i.visible=!0,setTimeout(()=>this.disableDepthTestRecursive(i),100),i}if(t.children.length>20&&this._activeTexts.length>0)return this._activeTexts.shift();const e=new ne.__webpack_exports__default.Text(this.textOptions);return setTimeout(()=>this.disableDepthTestRecursive(e),500),setTimeout(()=>this.disableDepthTestRecursive(e),1500),e}disableDepthTestRecursive(t,e=0){for(let n=0;n<t.children.length;n++){const s=t.children[n];s instanceof d.Object3D&&this.disableDepthTestRecursive(s,e+1)}t.renderOrder=10*e,t.layers.set(2);const i=t.material;i&&(i.depthWrite=!1,i.depthTest=!1,i.transparent=!0),e===0&&ne.__webpack_exports__default.update()}getRoot(){if(this.root)return this.root;const t=this.defaultFontSize,e={boxSizing:"border-box",fontFamily:this.familyName,width:"2.6",fontSize:t,color:0,lineHeight:1,backgroundColor:16777215,backgroundOpacity:0,whiteSpace:"pre-wrap",flexDirection:"column-reverse"};return this.root=new ne.__webpack_exports__default.Block(e),this.root}}let Ht=null;function ZS(){Ht||(Ht=new KS),Ht.onEnable();for(const o in ac){ac[o]=console[o];let t=!1;console[o]=function(){var e;if((e=ac[o])==null||e.apply(console,arguments),!t)try{t=!0,E0(o,...arguments)}finally{t=!1}}}}function JS(){Ht==null||Ht.onDisable();for(const o in ac)console[o]=ac[o]}const Ol=new Map;function E0(o,...t){try{switch(Ol.clear(),o){case"log":Ht==null||Ht.addLog("log",e());break;case"warn":Ht==null||Ht.addLog("warn",e());break;case"error":Ht==null||Ht.addLog("error",e());break}}catch(s){console.error("Error in spatial console",s)}finally{Ol.clear()}function e(){let s="";for(let a=0;a<t.length;a++){const l=t[a];s+=i(l),a<t.length-1&&(s+=", ")}return s}function i(s,a=0){if(typeof s=="string")return'"'+s+'"';if(typeof s=="number"){if(s%1!==0){const c=s.toFixed(5),h=c.indexOf(".");let u=c.length-1;for(;u>h&&c[u]==="0";)u--;return c.substring(0,u+1)}return s.toString()}else if(Array.isArray(s)){let l="[";for(let c=0;c<s.length;c++){const h=s[c];l+=i(h,a+1),c<s.length-1&&(l+=", ")}return l+="]",l}else{if(s===null)return"null";if(s===void 0)return"undefined";if(typeof s=="function")return s.name+"()"}if(s instanceof d.Vector2)return`(${i(s.x)}, ${i(s.y)})`;if(s instanceof d.Vector3)return`(${i(s.x)}, ${i(s.y)}, ${i(s.z)})`;if(s instanceof d.Vector4)return`(${i(s.x)}, ${i(s.y)}, ${i(s.z)}, ${i(s.w)})`;if(s instanceof d.Quaternion)return`(${i(s.x)}, ${i(s.y)}, ${i(s.z)}, ${i(s.w)})`;if(s instanceof d.Material||s instanceof d.Texture)return s.name;if(s instanceof d.Matrix3)return`[${s.elements.join(", ")}]`;if(s instanceof d.Matrix4)return`[${s.elements.join(", ")}]`;if(s instanceof d.Layers)return s.mask.toString();if(typeof s=="object"){if(Ol.has(s))return"*";let l=`{
|
|
83
83
|
`;l+=n(a);const c=Object.keys(s);let h="";for(let u=0;u<c.length;u++){const f=c[u],p=s[f];if(Ol.has(p)){h+="";continue}Ol.set(p,!0),h+=f+":"+i(p,a+1),u<c.length-1&&(h+=", "),h.length>=60&&(h+=`
|
|
84
84
|
`,h+=n(a),l+=h,h="")}return l+=h,l+=`
|
|
85
85
|
}`,l}return s}function n(s){let a="";for(let l=0;l<s;l++)a+=" ";return a}}const eC=S("nodevlogs");function Ee(o,t=Mi.Log){Fn(t,o)}function me(o){Ee(o,Mi.Warn)}function ih(o){Ee(o,Mi.Error)}let Jp,Gf;function j(){if(eC)return!1;if(Jp!==void 0)return Jp;if(Gf!==void 0)return Gf;let o=Yt();return o||(o=window.location.hostname.endsWith(".local-credentialless.webcontainer.io")),Gf=o,o}function tC(o){Jp=o}let qt,vi=null,Un=null,kl=!1,d_=null;const T0="terminal",Gl=S("console"),iC=S("noerrors")||S("noconsole")||window.crossOriginIsolated;Gl&&Jm();if(!iC&&(Gl||Yt())){if(Yt()&&!Gl){const t=new URL(window.location.href);t.searchParams.set("console","1"),console.log('🌵 Tip: You can add the "?console" query parameter to the url to show the debug console (on mobile it will automatically open in the bottom right corner when your get errors during development. In VR a spatial console will appear.)',`
|
|
@@ -142,7 +142,7 @@ Open this page to get the console: `+t.toString())}const o=exports.DeviceUtiliti
|
|
|
142
142
|
#__vconsole .vc-mask {
|
|
143
143
|
overflow: hidden;
|
|
144
144
|
}
|
|
145
|
-
`,vi==null||vi.prepend(i),o===!0&&Hm()<=0&&A0(),console.log("🌵 Debug console has loaded")}},t.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),kl=!1,qt=null},t.src="https://cdn.jsdelivr.net/npm/vconsole@3.9.1/dist/vconsole.min.js",document.body.appendChild(t)}function aC(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),t=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(e){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 l=location.protocol+"//"+location.host+location.pathname+"/"+n,c=encodeURIComponent(l);o.fullUrl="https://viewer.needle.tools?inspect&file="+c;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';e(h)}),o.on("show",function(){const e=t();e&&e.src!==o.fullUrl&&(e.src=o.fullUrl)}),o.on("hide",function(){const e=t();e&&(e.src="")}),o.on("addTopBar",function(e){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(o.fullUrl,"_blank"),qt==null||qt.hide()}}),i.push({name:"Reload",onClick:function(n){const s=t();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=t();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),e(i)}),o}function lC(){const o=document.querySelector("#__vconsole .vc-switch");return o||null}function cC(){const o=document.querySelector("#__vconsole");return o||null}const I0=S("debugdefines");Ao('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ao('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ao('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ao('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ao('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.7.0-alpha";');Ao('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ao('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 25 2025
|
|
145
|
+
`,vi==null||vi.prepend(i),o===!0&&Hm()<=0&&A0(),console.log("🌵 Debug console has loaded")}},t.onerror=()=>{console.warn("🌵 Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),kl=!1,qt=null},t.src="https://cdn.jsdelivr.net/npm/vconsole@3.9.1/dist/vconsole.min.js",document.body.appendChild(t)}function aC(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),t=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(e){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 l=location.protocol+"//"+location.host+location.pathname+"/"+n,c=encodeURIComponent(l);o.fullUrl="https://viewer.needle.tools?inspect&file="+c;var h='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';e(h)}),o.on("show",function(){const e=t();e&&e.src!==o.fullUrl&&(e.src=o.fullUrl)}),o.on("hide",function(){const e=t();e&&(e.src="")}),o.on("addTopBar",function(e){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(o.fullUrl,"_blank"),qt==null||qt.hide()}}),i.push({name:"Reload",onClick:function(n){const s=t();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=t();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),e(i)}),o}function lC(){const o=document.querySelector("#__vconsole .vc-switch");return o||null}function cC(){const o=document.querySelector("#__vconsole");return o||null}const I0=S("debugdefines");Ao('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";');Ao('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";');Ao('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";');Ao('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";');Ao('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.7.0-alpha";');Ao('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ao('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 25 2025 22:42:38 GMT+0000 (Coordinated Universal Time)";');Ao('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const _n="4.7.0-alpha",Bu="undefined",eg="Fri Jul 25 2025 22:42:38 GMT+0000 (Coordinated Universal Time)";I0&&console.log(`Engine version: ${_n} (generator: ${Bu})
|
|
146
146
|
Project built at ${eg}`);const _a=NEEDLE_PUBLIC_KEY,Es="needle_isActiveInHierarchy",tr="builtin_components",lc="needle_editor_guid";function Ao(o){try{(0,eval)(o)}catch(t){I0&&console.error(t)}}let j0,f_=null;function vn(){return j0}function tg(o){if(o==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}f_!==o&&(f_=o,j0=new o)}const Si=Symbol("shadowDomOwner"),hC=S("debugpatch");function Fu(o,t,e,i){const n=hC===t;if(!e&&!i)return;const s=t+"___needle";uC(o,t,e,i);const a=Object.getOwnPropertyDescriptor(o,t),l=o[t];n&&console.log("Patch",o.constructor.name,t,a,l),a?(n&&console.log("Apply patch with existing descriptor",o.constructor.name,t,a),typeof a.value=="function"&&(o[t]=m_(a.value,o,t))):(n&&console.log("Create patch with new property",o.constructor.name,t,a),Object.defineProperty(o,t,{set:function(c){if(typeof c=="function")this[s]=m_(c,o,t);else{const h=this[s];B0(o,t,this,h,c),this[s]=c,F0(o,t,this,h,c)}},get:function(){const c=this[s];return typeof c=="function"&&c[s]?c[s]:c}}))}function dC(o,t,e){const i=ig(o,t);if(i)for(let n=i.length-1;n>=0;n--){const s=i[n];s.prefix===e&&(s.prefix=null),s.postfix===e&&(s.postfix=null),!s.prefix&&!s.postfix&&i.splice(n,1)}}const p_=Symbol("Needle:Patches:WrappedFunction");function m_(o,t,e){if(o[p_])return o;const i=function(...n){B0(t,e,this,...n);const s=o.apply(this,n);return F0(t,e,this,s,...n),s};return i[p_]=!0,i}const kd="Needle:Patches";function tm(){return globalThis[kd]||(globalThis[kd]=new WeakMap),globalThis[kd]}function ig(o,t){const e=tm().get(o);return e?e.get(t):null}function uC(o,t,e,i){let n=tm().get(o);n||(n=new Map,tm().set(o,n));let s=n.get(t);s||(s=[],n.set(t,s)),s.push({prefix:e,postfix:i})}function B0(o,t,e,...i){var s;if(!e)return;const n=ig(o,t);if(n)for(const a of n)(s=a.prefix)==null||s.call(e,...i)}function F0(o,t,e,i,...n){var a;if(!e)return;const s=ig(o,t);if(s)for(const l of s)(a=l.postfix)==null||a.call(e,i,...n)}const Na=[];function Uu(o){Na.indexOf(o)===-1&&Na.push(o)}function fC(o){const t=Na.indexOf(o);t!==-1&&Na.splice(t,1)}const Va=[];function ng(o){Va.indexOf(o)===-1&&Va.push(o)}function pC(o){const t=Va.indexOf(o);t!==-1&&Va.splice(t,1)}function U0(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:o}));for(let t=0;t<Na.length;t++)Na[t](o)}function z0(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:o}));for(let t=0;t<Va.length;t++)Va[t](o)}const et=S("debuginput");var zu=(o=>(o.Mouse="mouse",o.Touch="touch",o.Controller="controller",o.Hand="hand",o))(zu||{}),Re=(o=>(o.PointerDown="pointerdown",o.PointerUp="pointerup",o.PointerMove="pointermove",o.KeyDown="keydown",o.KeyUp="keyup",o.KeyPressed="keypress",o))(Re||{});class ys extends PointerEvent{constructor(e,i,n){super(e,n);r(this,"clientZ");r(this,"deviceIndex");r(this,"origin");r(this,"source");r(this,"mode");r(this,"_ray");r(this,"space");r(this,"isClick",!1);r(this,"isDoubleClick",!1);r(this,"_used",!1);r(this,"_pointerid");r(this,"_pointerType");r(this,"_type");r(this,"metadata",{});r(this,"intersections",new Array);r(this,"_immediatePropagationStopped",!1);r(this,"_propagationStopped",!1);this.clientZ=n.clientZ,this._pointerid=n.pointerId,this._pointerType=n.pointerType,this._type=e,this.deviceIndex=n.deviceIndex,this.origin=n.origin,this.source=i,this.mode=n.mode,this._ray=n.ray,this.space=n.device}get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new d.Ray(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}get used(){return this._used}use(){this._used=!0}get pointerId(){return this._pointerid}get pointerType(){return this._pointerType}get type(){return this._type}get immediatePropagationStopped(){return this._immediatePropagationStopped}get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){var e;this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),(e=this.source)==null||e.stopImmediatePropagation()}stopPropagation(){var e;this._propagationStopped=!0,super.stopPropagation(),(e=this.source)==null||e.stopPropagation(),et&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class ql extends KeyboardEvent{constructor(e,i,n){super(e,n);r(this,"source");this.source=i}stopImmediatePropagation(){var e;super.stopImmediatePropagation(),(e=this.source)==null||e.stopImmediatePropagation()}}class mC{constructor(t){r(this,"key");r(this,"keyType");r(this,"source");this.key=t.key,this.keyType=t.type,this.source=t}}var oi=(o=>(o[o.Early=-100]="Early",o[o.Default=0]="Default",o[o.Late=100]="Late",o))(oi||{});class N0{constructor(t){r(this,"_eventListeners",{});r(this,"_doubleClickTimeThreshold",.2);r(this,"_longPressTimeThreshold",1);r(this,"_setCursorTypes",[]);r(this,"context");r(this,"_pointerDown",[!1]);r(this,"_pointerUp",[!1]);r(this,"_pointerClick",[!1]);r(this,"_pointerDoubleClick",[!1]);r(this,"_pointerPressed",[!1]);r(this,"_pointerPositions",[new d.Vector2]);r(this,"_pointerPositionsLastFrame",[new d.Vector2]);r(this,"_pointerPositionsDelta",[new d.Vector2]);r(this,"_pointerPositionsRC",[new d.Vector2]);r(this,"_pointerPositionDown",[new d.Vector3]);r(this,"_pointerDownTime",[]);r(this,"_pointerUpTime",[]);r(this,"_pointerUpTimestamp",[]);r(this,"_pointerIds",[]);r(this,"_pointerTypes",[""]);r(this,"_mouseWheelChanged",[!1]);r(this,"_mouseWheelDeltaY",[0]);r(this,"_pointerEvent",[]);r(this,"_pointerEventsPressed",[]);r(this,"_pointerSpace",[]);r(this,"_pressedStack",new Map);r(this,"_htmlEventSource");r(this,"onLostFocus",()=>{for(const t in this.keysPressed)this.keysPressed[t].pressed=!1});r(this,"_receivedPointerMoveEventsThisFrame",new Array);r(this,"onEndOfFrame",()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let t=0;t<this._pointerUp.length;t++)this._pointerUp[t]=!1;for(let t=0;t<this._pointerDown.length;t++)this._pointerDown[t]=!1;for(let t=0;t<this._pointerClick.length;t++)this._pointerClick[t]=!1;for(let t=0;t<this._pointerDoubleClick.length;t++)this._pointerDoubleClick[t]=!1;for(const t of this._pointerPositionsDelta)t.set(0,0);for(let t=0;t<this._mouseWheelChanged.length;t++)this._mouseWheelChanged[t]=!1;for(let t=0;t<this._mouseWheelDeltaY.length;t++)this._mouseWheelDeltaY[t]=0});r(this,"onContextMenu",t=>{this.canReceiveInput(t)!==!1&&t instanceof PointerEvent&&t.pointerType});r(this,"keysPressed",{});r(this,"onKeyDown",t=>{if(et&&console.log(`key down ${t.code}, ${this.context.application.hasFocus}`,t),!this.context.application.hasFocus)return;const e=this.keysPressed[t.code];if(e&&e.pressed)return;this.keysPressed[t.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:t.key,code:t.code};const i=new ql("keydown",t,t);this.onDispatchEvent(i)});r(this,"onKeyPressed",t=>{if(!this.context.application.hasFocus)return;const e=this.keysPressed[t.code];if(!e)return;e.pressed=!0,e.frame=this.context.time.frameCount+1;const i=new ql("keypress",t,t);this.onDispatchEvent(i)});r(this,"onKeyUp",t=>{if(!this.context.application.hasFocus)return;const e=this.keysPressed[t.code];if(!e)return;e.pressed=!1,e.frame=this.context.time.frameCount+1;const i=new ql("keyup",t,t);this.onDispatchEvent(i)});r(this,"onWheelWindow",t=>{document.pointerLockElement&&this.onMouseWheel(t)});r(this,"onMouseWheel",t=>{if(this.canReceiveInput(t)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const e=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=e+t.deltaY});r(this,"onPointerDown",t=>{if(this.context.isInAR||this.canReceiveInput(t)===!1)return;t.target instanceof HTMLElement&&t.target.setPointerCapture(t.pointerId);const e=this.getPointerId(t);et&&Ee(`pointer down #${e}, identifier:${t.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(e,t.clientX,t.clientY),n=new ys("pointerdown",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:e,button:t.button,clientX:t.clientX,clientY:t.clientY,pointerType:t.pointerType,buttonName:this.getButtonName(t),device:i,pressure:t.pressure});this.onDown(n)});r(this,"onPointerMove",t=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(t.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(t.pointerId);let e=t.button;t.pointerType==="mouse"&&(e=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(t,e);e===-1&&(e=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,t.clientX,t.clientY),s=new ys("pointermove",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:e,clientX:t.clientX,clientY:t.clientY,pointerType:t.pointerType,buttonName:this.getButtonName(t),device:n,pressure:t.pressure});this.onMove(s)});r(this,"onPointerCancel",t=>{this.context.isInAR||(et&&console.log("Pointer cancel",t),this.onPointerUp(t))});r(this,"onPointerUp",t=>{if(this.context.isInAR)return;t.target instanceof HTMLElement&&t.target.releasePointerCapture(t.pointerId);const e=this.getPointerId(t),i=new ys("pointerup",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:e,button:t.button,clientX:t.clientX,clientY:t.clientY,pointerType:t.pointerType,buttonName:this.getButtonName(t),device:this.getAndUpdateSpatialObjectForScreenPosition(e,t.clientX,t.clientY),pressure:t.pressure});this.onUp(i),this._pointerIds[e]=-1,et&&console.log("ID="+e,"PointerId="+t.pointerId,"ALL:",[...this._pointerIds])});r(this,"onTouchStart",t=>{if(this.context.isInAR)for(let e=0;e<t.changedTouches.length;e++){const i=t.changedTouches[e],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),a=new ys("pointerdown",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onDown(a)}});r(this,"onTouchMove",t=>{if(this.context.isInAR)for(let e=0;e<t.changedTouches.length;e++){const i=t.changedTouches[e],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),a=new ys("pointermove",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onMove(a)}});r(this,"onTouchEnd",t=>{if(this.context.isInAR)for(let e=0;e<t.changedTouches.length;e++){const i=t.changedTouches[e],n=this.getPointerIndex(i.identifier),s=new ys("pointerup",t,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(s),this._pointerIds[n]=-1}});r(this,"tempNearPlaneVector",new d.Vector3);r(this,"tempFarPlaneVector",new d.Vector3);r(this,"tempLookMatrix",new d.Matrix4);this.context=t,this.context.post_render_callbacks.push(this.onEndOfFrame)}addEventListener(t,e,i){if(this._eventListeners[t]||(this._eventListeners[t]=[]),!e||typeof e!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;(i==null?void 0:i.queue)!=null&&(n=i.queue);const s=this._eventListeners[t],a=s.find(l=>l.priority===n);a?a.listeners.push({callback:e,options:i}):(s.push({priority:n,listeners:[{callback:e,options:i}]}),s.sort((l,c)=>l.priority-c.priority))}removeEventListener(t,e,i){if(!this._eventListeners[t]||!e)return;const n=this._eventListeners[t];if((i==null?void 0:i.queue)!=null){const s=n.find(l=>l.priority===i.queue);if(!s)return;const a=s.listeners.findIndex(l=>l.callback===e);a>=0&&s.listeners.splice(a,1)}else for(const s of n){const a=s.listeners.findIndex(l=>l.callback===e);a>=0&&s.listeners.splice(a,1)}}dispatchEvent(t){var i,n,s,a;let e=!1;if(t instanceof ql){const l=this._eventListeners[t.type];if(l)for(const c of l)for(let h=0;h<c.listeners.length;h++){const u=c.listeners[h];if((n=(i=u.options)==null?void 0:i.signal)!=null&&n.aborted){c.listeners.splice(h,1),h--;continue}u.options.once&&(c.listeners.splice(h,1),h--),u.callback(t)}}if(t instanceof ys){const l=this._eventListeners[t.type];if(l)for(const c of l){if(e)break;for(let h=0;h<c.listeners.length;h++){const u=c.listeners[h];if((a=(s=u.options)==null?void 0:s.signal)!=null&&a.aborted){c.listeners.splice(h,1),h--;continue}if(t.immediatePropagationStopped){e=!0,et&&console.log("immediatePropagationStopped",t.type);break}else t.propagationStopped&&(e=!0,et&&console.log("propagationStopped",t.type));u.options.once&&(c.listeners.splice(h,1),h--),u.callback(t)}}}}get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(t=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[t]||null}setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(t){this._setCursorTypes.push(t),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(t){for(let e=this._setCursorTypes.length-1;e>=0;e--)if(this._setCursorTypes[e]===t){this._setCursorTypes.splice(e,1),this.updateCursor();break}}updateCursor(){var t;((t=this._setCursorTypes)==null?void 0:t.length)==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(t){for(const e of this._pointerEventsPressed)if(e.pointerId===t&&e.used)return!0;return!1}getPointerPressedCount(){let t=0;for(let e=0;e<this._pointerPressed.length;e++)this._pointerPressed[e]&&t++;return t}getPointerPosition(t){return t>=this._pointerPositions.length?null:this._pointerPositions[t]}getPointerPositionLastFrame(t){return t>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[t]}getPointerPositionDelta(t){return t>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[t]}getPointerPositionRC(t){return t>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[t]}getPointerDown(t){return t>=this._pointerDown.length?!1:this._pointerDown[t]}getPointerUp(t){return t>=this._pointerUp.length?!1:this._pointerUp[t]}getPointerPressed(t){return t>=this._pointerPressed.length?!1:this._pointerPressed[t]}getPointerClicked(t){return t>=this._pointerClick.length?!1:this._pointerClick[t]}getPointerDoubleClicked(t){return t>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[t]}getPointerDownTime(t){return t>=this._pointerDownTime.length?-1:this._pointerDownTime[t]}getPointerUpTime(t){return t>=this._pointerUpTime.length?-1:this._pointerUpTime[t]}getPointerLongPress(t){return t>=this._pointerDownTime.length?!1:this.getPointerPressed(t)&&this.context.time.time-this._pointerDownTime[t]>this._longPressTimeThreshold}getIsMouse(t){return t<0||t>=this._pointerTypes.length?!1:this._pointerTypes[t]==="mouse"}getIsTouch(t){return t<0||t>=this._pointerTypes.length?!1:this._pointerTypes[t]==="touch"}getTouchesPressedCount(){let t=0;for(let e=0;e<this._pointerPressed.length;e++)this._pointerPressed[e]&&this.getIsTouch(e)&&t++;return t}getMouseWheelChanged(t=0){return t>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[t]}getMouseWheelDeltaY(t=0){return t>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[t]}getPointerEvent(t){if(!(t>=this._pointerEvent.length))return this._pointerEvent[t]??void 0}*foreachPointerId(t){for(let e=0;e<this._pointerTypes.length;e++)if(this._pointerIsActive(e)){if(t!==void 0){const i=this._pointerTypes[e];if(Array.isArray(t)){let n=!1;for(const s of t)if(i===s){n=!0;break}if(!n)continue}else if(t!==i)continue}yield e}}*foreachTouchId(){for(let t=0;t<this._pointerTypes.length;t++)this._pointerTypes[t]==="touch"&&this._pointerIsActive[t]&&(yield t)}_pointerIsActive(t){return t<0?!1:this._pointerPressed[t]||this._pointerDown[t]||this._pointerUp[t]}onDownButton(t,e){let i=this._pressedStack.get(t);i||(i=[],this._pressedStack.set(t,i)),i.push(e)}onReleaseButton(t,e){const i=this._pressedStack.get(t);if(!i)return;const n=i.indexOf(e);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(t){const e=this._pressedStack.get(t);if(e)return e[0]}getLatestPressedButtonForPointer(t){const e=this._pressedStack.get(t);if(e)return e[e.length-1]}getKeyDown(t){if(t!==void 0)return this.isKeyDown(t);for(const e in this.keysPressed){const i=this.keysPressed[e];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(t){if(t!==void 0)return this.isKeyPressed(t);for(const e in this.keysPressed){const i=this.keysPressed[e];if(i.pressed)return i.key}return null}getKeyUp(t){if(t!==void 0)return this.isKeyUp(t);for(const e in this.keysPressed){const i=this.keysPressed[e];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(t){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const e=this.getCodeForCommonKeyName(t);if(e!==null){for(const n of e)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[t];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(t){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const e=this.getCodeForCommonKeyName(t);if(e!==null){for(const n of e)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[t];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(t){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const e=this.getCodeForCommonKeyName(t);if(e!==null){for(const n of e)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[t];return i&&i.pressed||!1}getCodeForCommonKeyName(t){if(t.length===1){if(t>="0"&&t<="9")return["Digit"+t];if(t>="a"&&t<="z")return["Key"+t.toUpperCase()];if(t==" ")return["Space"]}switch(t){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(t){switch(t.type){case"pointerdown":et&&Ee("Create Pointer down"),this.onDownButton(t.deviceIndex,t.button),this.onDown(t);break;case"pointermove":et&&Ee("Create Pointer move"),this.onMove(t);break;case"pointerup":et&&Ee("Create Pointer up"),this.onUp(t),this.onReleaseButton(t.deviceIndex,t.button);break}}convertScreenspaceToRaycastSpace(t){return t.x=(t.x-this.context.domX)/this.context.domWidth*2-1,t.y=-((t.y-this.context.domY)/this.context.domHeight)*2+1,t}bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){var t,e;window.removeEventListener("contextmenu",this.onContextMenu),(t=this._htmlEventSource)==null||t.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),(e=this._htmlEventSource)==null||e.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const t=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);t>=0&&this.context.post_render_callbacks.splice(t,1),this.unbindEvents()}canReceiveInput(t){var e;return t.target===((e=this.context.renderer)==null?void 0:e.domElement)||t.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&t.target===document.body&&exports.DeviceUtilities.isMozillaXR()?!0:(et&&console.warn("CanReceiveInput:False for",t.target),!1)}getPointerId(t,e){return t.pointerType==="mouse"?0+(e??t.button):this.getPointerIndex(t.pointerId)}getButtonName(t){const e=t.button;if(t.pointerType==="mouse")switch(e){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}getAndUpdateSpatialObjectForScreenPosition(t,e,i){let n=this._pointerSpace[t];n||(n=new d.Object3D,this._pointerSpace[t]=n),this._pointerSpace[t]=n;const s=this.context.mainCamera;if(s){const a=this.tempNearPlaneVector.set(e,i,-1);this.convertScreenspaceToRaycastSpace(a);const l=this.tempFarPlaneVector.set(a.x,a.y,1);a.unproject(s),l.unproject(s);const c=s.worldUp||$(0,1,0).applyQuaternion(_e(s));this.tempLookMatrix.lookAt(l,a,c),n.position.set(a.x,a.y,a.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(t){if(this.context.isInXR)return!0;const e=this.context.domElement.getBoundingClientRect(),i=t.clientX,n=t.clientY,s=i>=e.x&&i<=e.right&&n>=e.y&&n<=e.bottom;return et&&!s&&console.log("Not in rect",e,i,n),s}onDown(t){const e=t.pointerId;if(this.getPointerPressed(e)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${e}`,et?t:""),et&&console.log(t.pointerType,"DOWN",e),!!this.isInRect(t)){for(this.setPointerState(e,this._pointerPressed,!0),this.setPointerState(e,this._pointerDown,!0),this.setPointerStateT(e,this._pointerEvent,t.source);e>=this._pointerTypes.length;)this._pointerTypes.push(t.pointerType);for(this._pointerTypes[e]=t.pointerType;e>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new d.Vector3);for(this._pointerPositionDown[e].set(t.clientX,t.clientY,t.clientZ??0);e>=this._pointerPositions.length;)this._pointerPositions.push(new d.Vector2);this._pointerPositions[e].set(t.clientX,t.clientY),e>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[e]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(t),this._pointerEventsPressed.push(t),this.onDispatchEvent(t)}}onMove(t){const e=t.pointerId,i=this.getPointerPressed(e);i===!1&&!this.isInRect(t)||t.pointerType==="touch"&&!i||(this.updatePointerPosition(t),this.setPointerStateT(e,this._pointerEvent,t.source),this.onDispatchEvent(t))}onUp(t){const e=t.pointerId;if(!this.getPointerPressed(e)){et&&console.log(t.pointerType,"UP",e,"was not down");return}et&&console.log(t.pointerType,"UP",e),this.setPointerState(e,this._pointerPressed,!1),this.setPointerStateT(e,this._pointerEvent,t.source),this.setPointerState(e,this._pointerUp,!0),this.updatePointerPosition(t);for(let c=this._pointerEventsPressed.length-1;c>=0;c--)if(this._pointerEventsPressed[c].pointerId===e){this._pointerEventsPressed.splice(c,1);break}if(!this._pointerPositionDown[e]){et&&me("Received pointer up event without matching down event for button: "+e),console.warn("Received pointer up event without matching down event for button: "+e);return}const n=this._pointerUpTime[e],s=this._pointerDownTime[e],a=this.context.time.realtimeSinceStartup,l=a-s;if(e>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[e]=a,l<1){let c=t.clientX-this._pointerPositionDown[e].x,h=t.clientY-this._pointerPositionDown[e].y,u=0;if(t.isSpatial&&t.clientZ!=null&&(u=t.clientZ-this._pointerPositionDown[e].z,c*=200,h*=200,u*=200),Math.abs(c)<5&&Math.abs(h)<5&&Math.abs(u)<5){this.setPointerState(e,this._pointerClick,!0),t.isClick=!0;const f=a-n;et&&console.log("CLICK",e,c,h,u,f),f<this._doubleClickTimeThreshold&&f>0&&(this.setPointerState(e,this._pointerDoubleClick,!0),t.isDoubleClick=!0)}}this.onDispatchEvent(t)}updatePointerPosition(t){const e=t.pointerId;for(;e>=this._pointerPositions.length;)this._pointerPositions.push(new d.Vector2);for(;e>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new d.Vector2);for(;e>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new d.Vector2);const i=this._pointerPositionsLastFrame[e];i.copy(this._pointerPositions[e]);const n=this._pointerPositionsDelta[e];let s=t.clientX-i.x,a=t.clientY-i.y;if(t.source instanceof MouseEvent||t.source instanceof TouchEvent){const u=t.source;s===0&&u.movementX!==0&&(s=u.movementX||0),a===0&&u.movementY!==0&&(a=u.movementY||0)}n.x+=s,n.y+=a,this._pointerPositions[e].x=t.clientX,this._pointerPositions[e].y=t.clientY;const l=t.clientX,c=t.clientY;for(;e>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new d.Vector2);const h=this._pointerPositionsRC[e];h.set(l,c),this.convertScreenspaceToRaycastSpace(h)}getPointerIndex(t){let e=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===t)return i;e===-1&&this._pointerIds[i]===-1&&(e=i)}return e!==-1?(this._pointerIds[e]=t,e):(et&&console.log("PUSH pointerId:",t),this._pointerIds.push(t),this._pointerIds.length-1)}setPointerState(t,e,i){e[t]=i}setPointerStateT(t,e,i){return e[t]=i,i}onDispatchEvent(t){const e=X.Current;try{X.Current=this.context,this.dispatchEvent(t)}finally{X.Current=e}}}const Ta=new d.Matrix4().makeRotationY(Math.PI),Ni=new d.Quaternion().setFromAxisAngle(new d.Vector3(0,1,0),Math.PI),gC=S("debugwebxr");class yC{constructor(){r(this,"priority",-1e5);r(this,"gameObject");if(this.gameObject=new d.Object3D,this.gameObject.name="Implicit XR Rig",gC){const t=hg(16733661);t.position.y+=.5,this.gameObject.add(t)}}isXRRig(){return!0}get isActive(){return this.gameObject.visible}}const hs=S("debugwebxr"),Zh=S("debugcustomgesture"),_C="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",bC="generic-trigger",vC=new d.Quaternion().setFromEuler(new d.Euler(d.MathUtils.degToRad(0),d.MathUtils.degToRad(-90),d.MathUtils.degToRad(-90))),wC=new d.Vector3(.04,-.04,0);class sg{constructor(t,e,i){r(this,"xr");r(this,"inputSource");r(this,"index",0);r(this,"emitEvents",!0);r(this,"_connected",!0);r(this,"_isTracking",!1);r(this,"__gamepad");r(this,"__hand");r(this,"__side");r(this,"_hitTestSource");r(this,"_hasSelectEvent",!1);r(this,"_isMxInk",!1);r(this,"_isMetaQuestTouchController",!1);r(this,"_handJointPoses",new Map);r(this,"_gripMatrix",new d.Matrix4);r(this,"_gripPosition",new d.Vector3);r(this,"_gripQuaternion",new d.Quaternion);r(this,"_linearVelocity",new d.Vector3);r(this,"_rayPositionRaw",new d.Vector3);r(this,"_rayRotationRaw",new d.Quaternion);r(this,"_rayMatrix",new d.Matrix4);r(this,"_rayPosition",new d.Vector3);r(this,"_rayQuaternion",new d.Quaternion);r(this,"_gripWorldPosition",new d.Vector3);r(this,"_gripWorldQuaternion",new d.Quaternion);r(this,"_rayWorldPosition",new d.Vector3);r(this,"_rayWorldQuaternion",new d.Quaternion);r(this,"_pinchPosition",new d.Vector3);r(this,"_ray");r(this,"_hand_wristDotUp");r(this,"_object");r(this,"_gripSpaceObject");r(this,"_raySpaceObject");r(this,"model",null);r(this,"_debugAxesHelper",new d.AxesHelper(.15));r(this,"_debugGripAxesHelper",new d.AxesHelper(.07));r(this,"_debugRayAxesHelper",new d.AxesHelper(.07));r(this,"_hitTestSourcePromise",null);r(this,"onPointerHits",t=>{});r(this,"_needleGamepadButtons",{});r(this,"_buttonMap",new Map);r(this,"_motioncontroller");r(this,"_layout");r(this,"getMotionController");r(this,"emitPointerDownEvent",!0);r(this,"emitPointerUpEvent",!0);r(this,"emitPointerMoveEvent",!0);r(this,"pointerMoveDistanceThreshold",.03);r(this,"pointerMoveAngleThreshold",.05);r(this,"_selectButtonIndex");r(this,"_squeezeButtonIndex");r(this,"onSelectStart",t=>{var n,s,a,l;if(!this.emitPointerDownEvent||this.inputSource!==t.inputSource)return;this.onUpdateFrame(t.frame),this._hasSelectEvent=!0;const e=(n=this._layout)==null?void 0:n.selectComponentId,i=(l=(a=(s=this._layout)==null?void 0:s.components[e])==null?void 0:a.gamepadIndices)==null?void 0:l.button;i!==void 0&&(this._selectButtonIndex=i),!Zh&&(hs&&V.DrawDirection(this.rayWorldPosition,$(0,.01,1).applyQuaternion(this.rayWorldQuaternion),16711680,10),this.emitPointerEvent(Re.PointerDown,this._selectButtonIndex||0,"xr-standard-trigger",!0,t))});r(this,"onSelectEnd",t=>{this.emitPointerUpEvent&&(Zh||this.inputSource===t.inputSource&&this.emitPointerEvent(Re.PointerUp,this._selectButtonIndex||0,"xr-standard-trigger",!0,t))});r(this,"onSequeezeStart",t=>{var e,i,n;this.emitPointerDownEvent&&this.inputSource===t.inputSource&&(this._squeezeButtonIndex=(n=(i=(e=this._layout)==null?void 0:e.components["xr-standard-squeeze"])==null?void 0:i.gamepadIndices)==null?void 0:n.button,this._squeezeButtonIndex!==void 0&&(hs&&V.DrawDirection(this.rayWorldPosition,$(0,.01,1).applyQuaternion(this.rayWorldQuaternion),255,10),this.emitPointerEvent(Re.PointerDown,this._squeezeButtonIndex||0,"xr-standard-squeeze",!0,t)))});r(this,"onSequeezeEnd",t=>{this.emitPointerUpEvent&&this.inputSource===t.inputSource&&this._squeezeButtonIndex!==void 0&&this.emitPointerEvent(Re.PointerUp,this._squeezeButtonIndex||0,"xr-standard-squeeze",!0,t)});r(this,"states",{});r(this,"_didMoveLastFrame",!1);r(this,"_lastPointerMovePosition",new d.Vector3);r(this,"_lastPointerMoveQuaternion",new d.Quaternion);r(this,"pointerInit");this.xr=t,this.inputSource=e,this.index=i,this._object=new d.Object3D,this._object.name=`NeedleXRController_${i}`,hs&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new d.Object3D,this._raySpaceObject=new d.Object3D,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new d.Ray,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}get context(){return this.xr.context}get connected(){return this._connected}get isTracking(){return this._isTracking}get gamepad(){return this.__gamepad??(this.__gamepad=this.inputSource.gamepad)}get isHand(){return this.hand!=null}get hand(){return this.__hand??(this.__hand=this.inputSource.hand)}get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??(this.__side=this.inputSource.handedness)}get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}get hasSelectEvent(){return this._hasSelectEvent}getHitTest(){return this.xr.getHitTest(this)}getHandJointPose(t,e){var n;if(e=e||this.xr.frame,!this.hand||!(e!=null&&e.getJointPose)||!this.xr.referenceSpace)return null;let i=(n=this._handJointPoses)==null?void 0:n.get(t);return i||(i=e.getJointPose(t,this.xr.referenceSpace),i&&this._handJointPoses.set(t,i),i)}get gripPosition(){return $(this._gripPosition)}get gripQuaternion(){return un(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return $(this._linearVelocity).applyQuaternion(Ni)}get rayPosition(){return $(this._rayPosition)}get rayQuaternion(){return un(this._rayQuaternion)}get gripWorldPosition(){return $(this._gripWorldPosition)}get gripWorldQuaternion(){return un(this._gripWorldQuaternion)}get rayWorldPosition(){return $(this._rayWorldPosition)}updateRayWorldPosition(){var e;const t=(e=this.xr.context.mainCamera)==null?void 0:e.parent;this._rayWorldPosition.copy(this._rayPositionRaw),t&&this._rayWorldPosition.applyMatrix4(t.matrixWorld)}get rayWorldQuaternion(){return un(this._rayWorldQuaternion)}get pinchPosition(){return $(this._pinchPosition)}updateRayWorldQuaternion(){var i;const t=(i=this.xr.context.mainCamera)==null?void 0:i.parent,e=t?_e(t):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Ni),e&&this._rayWorldQuaternion.premultiply(e)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy($(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}get handWristDotUp(){var e;if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const t=(e=this.handObject)==null?void 0:e.joints.wrist;if(t){const i=$(0,1,0).applyQuaternion(t.quaternion),n=$(0,1,0).dot(i);return this._hand_wristDotUp=n}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){var t;return this.isHandUpsideDown&&((t=this.getGesture("pinch"))==null?void 0:t.isDown)}get object(){return this._object}async getModelUrl(){var t;return(t=this.getMotionController)==null?void 0:t.then(e=>(e==null?void 0:e.assetUrl)||null)}_requestHitTestSource(){var t;return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=((t=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay}))==null?void 0:t.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null))))??null:null}onUpdate(t){this.onUpdateFrame(t),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){var s;V.DrawSphere(this.rayWorldPosition,.003),V.DrawDirection(this.rayWorldPosition,$(0,0,10).applyQuaternion(this.rayWorldQuaternion));const e=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),i=this.inputSource.profiles.join(`
|
|
147
147
|
`);let n=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
|
|
148
148
|
C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(n+=`
|
|
@@ -936,7 +936,7 @@ ${e.path}! : AssetReference;
|
|
|
936
936
|
Could not find method ${h.method} on object ${f.name}. Please rename ${h.method} to ${b}?
|
|
937
937
|
`,f[b],`
|
|
938
938
|
in script: `,f),me("EventList methods must start with lowercase letter, see console for details");return}else console.warn(`EventList method:
|
|
939
|
-
Could not find method ${h.method} on object ${f.name}`,f,typeof f[h.method])};if(typeof f[h.method]!="function"){let b=!1,_=f;for(;_;){const v=Object.getOwnPropertyDescriptor(_,h.method);if(v&&(v.writable===!0||v.set)){b=!0;break}_=Object.getPrototypeOf(_)}!b&&(j()||dt)&&g()}}if(f){let g=h.argument;if(g!==void 0?g=u(g):h.arguments!==void 0&&(g=h.arguments.map(u)),!f[h.method])console.warn(`EventList method not found: "${h.method}" on ${f==null?void 0:f.name}`);else{g!==void 0&&!Array.isArray(g)&&(g=[g]);const b=new Cs(f,h.method,g,h.enabled);a.push(b)}}else j()&&console.warn("[Debug] EventList: Could not find event listener in scene",h,e.object,t)}const l=new ye(a);dt&&console.log(l);const c=e.target;return c!==void 0&&e.path!==void 0&&l.setEventTarget(e.path,c),l}}}const NP=new zP,cu=new WeakMap,VP=d.Texture.prototype.clone;d.Texture.prototype.clone=function(){const o=VP.call(this);return cu.has(o)||cu.set(o,this),o};class hw extends Ki{constructor(){super([Sr,d.WebGLRenderTarget])}onSerialize(t,e){}onDeserialize(t,e){if(t instanceof d.Texture&&e.type===Sr){let i=t;cu.has(i)&&(i=cu.get(i)),i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof d.CompressedTexture&&(i.isCompressedTexture=!1,i.format=d.RGBAFormat);const n=new Sr(i.image.width,i.image.height,{colorSpace:d.LinearSRGBColorSpace});return n.texture=i,n}}}new hw;class dw extends Ki{constructor(){super([URL])}onSerialize(t,e){return null}onDeserialize(t,e){if(typeof t=="string"&&t.length>0)return To(e.gltfId,t)}}new dw;var $P=Object.defineProperty,WP=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&$P(t,e,n),n};class Ga extends D{awake(){Qt.createIfNoneExists(this.context)}onEnable(){var t;(t=Qt.get(this.context))==null||t.register(this)}onDisable(){var t;(t=Qt.get(this.context))==null||t.unregister(this)}}class Ei extends Ga{constructor(){super(...arguments);r(this,"targets",null);r(this,"raycastHits",[]);r(this,"ignoreSkinnedMeshes",!1)}start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??(e=new Jn),e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;const i=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=s=>s instanceof d.SkinnedMesh?"continue in children":i?i(s):!0);const n=this.context.physics.raycast(e);return e.testObject=i,n}}WP([m()],Ei.prototype,"ignoreSkinnedMeshes");class Yu extends Ei{constructor(){super(),this.ignoreSkinnedMeshes=!0}}const Ru=class Ru extends Ga{performRaycast(t){if(!J.active||!Ru.allow||!(t!=null&&t.ray))return null;const e=t.ray.origin;return this.context.physics.sphereOverlap(e,.015,!1,!0)}};r(Ru,"allow",!0);let Tr=Ru;class kg{static getObject(t){const e=t[Si];return e&&(e.isComponent===!0?t=e.gameObject:t=e),t}static isInteractable(t,e){if(e&&(e.canvasGroup=void 0,e.graphic=void 0),t==null||!t.visible||(t=this.getObject(t),!t.visible))return!1;const i=this.tryFindCanvasGroup(t);if((i==null?void 0:i.isCanvasGroup)===!0&&(e&&(e.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Rr(t,s=>{if(s.isGraphic===!0)return s},!1);return e&&(n==null?void 0:n.isGraphic)===!0&&(e.graphic=n),!((n==null?void 0:n.raycastTarget)===!1||(n==null?void 0:n.layer)===2)}static tryFindCanvasGroup(t){if(!t)return null;const e=Rr(t,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return e!==void 0?e:this.tryFindCanvasGroup(t.parent)}}function Rg(o){const t=o[Si];return t||(o.parent?Rg(o.parent):null)}function HP(o){return o.isUI===!0||typeof o[Si]=="object"}function hu(o,t){if(!o)return;const e=o.material;if((e==null?void 0:e.isMaterial)===!0){const i=o.parent;i&&i.isText,e.side=t.doubleSided??!0?d.DoubleSide:d.FrontSide,e.shadowSide=t.doubleSided?d.DoubleSide:d.FrontSide,o.castShadow=t.castShadows?t.castShadows:!1,o.receiveShadow=t.receiveShadows?t.receiveShadows:!1}for(const i of o.children)hu(i,t)}function pa(o,t,e){o[t]===void 0&&console.warn("Field",t,"is undefined on",o);const i=Proxy.revocable(o[t],{set(a,l,c,h){const u=a[l],f=Reflect.set(a,l,c,h);return e(c,u),f}}),n=i.revoke,s=o[t];return i.revoke=()=>{o[t]=s,n()},o[t]=i.proxy,i}const rb=Symbol("Scheduled action");function GP(o,t,e=we.OnBeforeRender){let i=o[rb];i||(i=o[rb]={});const n=t.name;i[e]||(i[e]={});const s=i[e];if(s[n])return;function*l(){t==null||t.call(o),s[n]=null}const c=o.startCoroutine(l(),e);s[n]=c}const to=S("debugeventsystem");var Sm=(o=>(o.BeforeHandleInput="BeforeHandleInput",o.AfterHandleInput="AfterHandleInput",o))(Sm||{});sw(o=>{Qt.createIfNoneExists(o)});class Qt extends D{constructor(){super(...arguments);r(this,"raycaster",[]);r(this,"pressedByID",new Map);r(this,"hoveredByID",new Map);r(this,"onPointerEvent",e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;const i=new ph(this.context.input,e);this._currentPointerEventName=e.type,i.inputSource=this.context.input,i.isClick=e.isClick,i.isDoubleClick=e.isDoubleClick,i.isDown=e.type==Re.PointerDown,i.isUp=e.type==Re.PointerUp,i.isPressed=this.context.input.getPointerPressed(e.pointerId),to&&(i.isDown?console.log("DOWN",i.pointerId):i.isUp&&console.log("UP",i.pointerId),i.isClick&&console.log("CLICK",i.pointerId));const n=new Jn;e.hasRay?n.ray=e.ray:n.screenPoint=this.context.input.getPointerPositionRC(e.pointerId);const s=this.performRaycast(n);if(s){for(const l of s)l.event=e,e.intersections.push(l);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:s})}to&&i.isClick&&Ee("EventSystem: "+i.pointerId+" - "+this.context.time.frame+" - Up:"+i.isUp+", Down:"+i.isDown);const a={sender:this,args:i,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:a})),this.handleIntersections(s,i),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:a}))});r(this,"_sortedHits",[]);r(this,"_testObjectsCache",new Map);r(this,"_currentlyActiveRaycaster",null);r(this,"_currentPointerEventName",null);r(this,"shouldRaycastObject",e=>{var a;const i=e&&"getComponent"in e?e.getComponent(Ga):null;if(i&&i!=this._currentlyActiveRaycaster)return!1;let n=null;if(HP(e)&&(n=(a=e[Si])==null?void 0:a.gameObject),this._testObjectsCache.has(e)||n&&this._testObjectsCache.has(n))return this._testObjectsCache.get(e)===!1?"continue in children":!0;{let l=lu(e,this._currentPointerEventName);if(!l&&n&&(l=lu(n,this._currentPointerEventName)),l){this._testObjectsCache.set(e,!0);for(const c of e.children)this.shouldRaycastObject_AddToYesCache(c);return!0}return this._testObjectsCache.set(e,!1),"continue in children"}});r(this,"_sortingBuffer",[]);r(this,"_noDepthTestingResults",[]);r(this,"out",{});r(this,"_capturedPointer",{});r(this,"pointerEnterSymbol",Symbol("pointerEnter"));r(this,"pointerExitSymbol",Symbol("pointerExit"));r(this,"currentActiveMeshUIComponents",[])}static ensureUpdateMeshUI(e,i,n=!1){fo.update(e,i,n)}static markUIDirty(e){fo.markDirty()}static createIfNoneExists(e){e.scene.getComponent(Qt)||e.scene.addComponent(Qt)}static get(e){return this.createIfNoneExists(e),e.scene.getComponent(Qt)}static get instance(){return this.get(X.Current)}register(e){var i;e&&this.raycaster&&!this.raycaster.includes(e)&&((i=this.raycaster)==null||i.push(e))}unregister(e){var n,s;const i=(n=this.raycaster)==null?void 0:n.indexOf(e);i!==void 0&&i!==-1&&((s=this.raycaster)==null||s.splice(i,1))}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(Ga)||this.context.scene.addComponent(Ei)}onEnable(){this.context.input.addEventListener(Re.PointerDown,this.onPointerEvent),this.context.input.addEventListener(Re.PointerUp,this.onPointerEvent),this.context.input.addEventListener(Re.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(Re.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(Re.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(Re.PointerMove,this.onPointerEvent)}onBeforeRender(){this.resetMeshUIStates()}shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(const i of e.children)this.shouldRaycastObject_AddToYesCache(i)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e||(e=new Jn),e.testObject=this.shouldRaycastObject;for(const i of this.raycaster){if(!i.activeAndEnabled)continue;this._currentlyActiveRaycaster=i;const n=i.performRaycast(e);this._currentlyActiveRaycaster=null,n&&n.length>0&&this._sortedHits.push(...n)}return this._sortedHits.sort((i,n)=>i.distance-n.distance),this._sortedHits}assignHitInformation(e,i){i?(e.intersection=i,e.point=i.point,e.normal=i.normal,e.face=i.face,e.distance=i.distance,e.instanceId=i.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,i){var s;if(e!=null&&e.length){e=this.sortCandidates(e);for(const a of e){if(i.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(i,a),this.handleEventOnObject(a.object,i))return!0}}this.assignHitInformation(i,e==null?void 0:e[0]),this.invokePointerCapture(i);const n=this.hoveredByID.get(i.pointerId);return n&&this.propagatePointerExit(n.obj,n.data,null),this.hoveredByID.delete(i.pointerId),i.isUp&&((s=this.pressedByID.get(i.pointerId))==null||s.handlers.forEach(a=>this.invokeOnPointerUp(i,a)),this.pressedByID.delete(i.pointerId)),!1}sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let i=0;i<e.length;i++){const n=e[i],s=n.object;if(s.material&&s.material.depthTest===!1){this._noDepthTestingResults.push(n);continue}this._sortingBuffer.push(n)}for(const i of this._sortingBuffer)this._noDepthTestingResults.push(i);return this._noDepthTestingResults}handleEventOnObject(e,i){if(!this.testIsVisible(e))return i.isClick&&to&&console.log("not allowed",e),!1;if(i.pointerId===void 0)return to&&console.error("Event without pointer can't be handled",i),!1;i.object=e;const n=e.parent,s=i.isClick??!1;let a=null;if(n&&n.isUI){const f=(i.isPressed||i.isClick)??!1;if(n[Si]){const p=n[Si].gameObject;if(p){if(!kg.isInteractable(p,this.out))return!1;a=this.out.canvasGroup??null,this.handleMeshUIIntersection(e,f),e=p}}}s&&to&&console.log(this.context.time.frame,e);const l=this.hoveredByID.get(i.pointerId),c=l==null?void 0:l.obj;c!==e&&c&&this.propagatePointerExit(c,l.data,e);const u=this.hoveredByID.get(i.pointerId);if(u?(u.obj=e,u.data=i):this.hoveredByID.set(i.pointerId,{obj:e,data:i}),i.isDown){const f=this.pressedByID.get(i.pointerId);f?(f.obj=e,f.data=i):this.pressedByID.set(i.pointerId,{obj:e,data:i,handlers:new Set})}return(a===null||a.interactable)&&this.handleMainInteraction(e,i,c??null),!0}propagate(e,i){for(;e;)C.foreachComponent(e,n=>{i(n)},!1),e=e.parent}handleMainInteraction(e,i,n){const s=this.pressedByID.get(i.pointerId),a=n!==e;let l=!0;switch(i.event.pointerType){case"mouse":case"touch":const c=this.context.input.getPointerPositionLastFrame(i.pointerId),h=this.context.input.getPointerPosition(i.pointerId);l=c&&!z.approximately(c,h);break}this.propagate(e,c=>{var u;const h=c;h.interactable!==!1&&(!h.activeAndEnabled||!h.enabled||(h.onPointerEnter&&a&&this.handlePointerEnter(h,i),i.isDown&&h.onPointerDown&&(h.onPointerDown(i),s==null||s.handlers.add(h),this.handlePointerCapture(i,h)),h.onPointerMove&&(l&&h.onPointerMove(i),this.handlePointerCapture(i,h)),i.isUp&&(h.onPointerUp&&(this.invokeOnPointerUp(i,h),s==null||s.handlers.delete(h)),h.onPointerExit&&((u=i.event)==null?void 0:u.pointerType)===zu.Touch&&(this.handlePointerExit(h,i),this.hoveredByID.delete(i.pointerId))),i.isClick&&h.onPointerClick&&h.onPointerClick(i)))}),i.isUp&&(s==null||s.handlers.forEach(c=>{this.invokeOnPointerUp(i,c)}),this.pressedByID.delete(i.pointerId))}propagatePointerExit(e,i,n){this.propagate(e,s=>{if(!s.gameObject||s.destroyed)return;const a=s;if(a.onPointerExit||a.onPointerEnter){if(n&&this.isChild(n,s.gameObject))return;this.handlePointerExit(a,i)}})}invokeOnPointerUp(e,i){var n;(n=i.onPointerUp)==null||n.call(i,e),this.releasePointerCapture(e,i)}handlePointerEnter(e,i){e.onPointerEnter&&this.updatePointerState(e,i.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(i),this.updatePointerState(e,i.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,i){e.onPointerExit&&this.updatePointerState(e,i.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(i),this.updatePointerState(e,i.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,i,n,s){let a=e[n];if(s)return a&&a.includes(i)?!1:(a=a||[],a.push(i),e[n]=a,!0);{if(!a||!a.includes(i))return!1;const l=a.indexOf(i);return l!==-1&&a.splice(l,1),!0}}handlePointerCapture(e,i){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;const n=e.pointerId;if(i.onPointerMove){const s=this._capturedPointer[n]||[];s.push(i),this._capturedPointer[n]=s}else j()&&!i.z__warned_no_pointermove&&(i.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,i))}releasePointerCapture(e,i){const n=e.pointerId;if(this._capturedPointer[n]){const s=this._capturedPointer[n].indexOf(i);s!==-1&&(this._capturedPointer[n].splice(s,1),to&&console.log("released pointer capture",n,i,this._capturedPointer))}}invokePointerCapture(e){var i;if(e.event.type===Re.PointerMove){const n=e.pointerId,s=this._capturedPointer[n];if(s){to&&console.log("Captured",n,s);for(let a=0;a<s.length;a++){const l=s[a];if(l.destroyed){s.splice(a,1),a--;continue}(i=l.onPointerMove)==null||i.call(l,e)}}}}isChild(e,i){return!e||!i?!1:e===i?!0:e.parent?this.isChild(e.parent,i):!1}handleMeshUiObjectWithoutShadowDom(e,i){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,i)}handleMeshUIIntersection(e,i){const n=fo.updateState(e,i);return n&&this.currentActiveMeshUIComponents.push(n),n!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&fo.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){const i=this.currentActiveMeshUIComponents[e];fo.resetState(i)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?C.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}}class fo{static markDirty(){this.needsUpdate=!0}static update(t,e,i=!1){if(i){t.update();return}const n=e.time.frameCount;for(const s of this.lastUpdateFrame)if(s.context===e){if(n===s.frame)return;s.frame=n;let a=this.needsUpdate||n<1;s.nextUpdate<=n&&(a=!0),a&&(to&&console.log("Update threemeshui"),this.needsUpdate=!1,s.nextUpdate=n+60,t.update());return}this.lastUpdateFrame=[{context:e,frame:n,nextUpdate:n+60}],t.update(),this.needsUpdate=!1}static updateState(t,e){let i=null;if(t&&(i=this.findBlockOrTextInParent(t),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const t=this.lastSelected;t&&(this.lastSelected=null,this.resetState(t))}static resetState(t){t&&(this.needsUpdate=!0)}static findBlockOrTextInParent(t){return t?t.isBlock||t.isText?t:this.findBlockOrTextInParent(t.parent):null}}r(fo,"lastSelected",null),r(fo,"lastUpdateFrame",[]),r(fo,"needsUpdate",!1);var qP=Object.defineProperty,Te=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&qP(t,e,n),n};const Ui=S("debugorbit"),lp=S("freecam"),El=S("debugcamerafit"),cd=S("smoothcam"),XP={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let cp;class Bc extends CustomEvent{constructor(t,e){super("target-reached",{detail:{controls:t,type:e}})}}class ge extends D{constructor(){super(...arguments);r(this,"autoTarget",!0);r(this,"autoFit",!1);r(this,"enableRotate",!0);r(this,"autoRotate",!1);r(this,"autoRotateSpeed",1);r(this,"minAzimuthAngle",1/0);r(this,"maxAzimuthAngle",1/0);r(this,"minPolarAngle",0);r(this,"maxPolarAngle",Math.PI);r(this,"enableKeys",!1);r(this,"enableDamping",!0);r(this,"dampingFactor",.1);r(this,"enableZoom",!0);r(this,"minZoom",0);r(this,"maxZoom",1/0);r(this,"zoomSpeed",1);r(this,"zoomToCursor",!1);r(this,"enablePan",!0);r(this,"lookAtConstraint",null);r(this,"lookAtConstraint01",1);r(this,"allowInterrupt",!0);r(this,"middleClickToFocus",!0);r(this,"doubleClickToFocus",!0);r(this,"clickBackgroundToFitScene",2);r(this,"debugLog",!1);r(this,"targetLerpDuration",1);r(this,"_controls",null);r(this,"_cameraObject",null);r(this,"_lookTargetLerpActive",!1);r(this,"_lookTargetStartPosition",new d.Vector3);r(this,"_lookTargetEndPosition",new d.Vector3);r(this,"_lookTargetLerp01",0);r(this,"_lookTargetLerpDuration",0);r(this,"_cameraLerpActive",!1);r(this,"_cameraStartPosition",new d.Vector3);r(this,"_cameraEndPosition",new d.Vector3);r(this,"_cameraLerp01",0);r(this,"_cameraLerpDuration",0);r(this,"_fovLerpActive",!1);r(this,"_fovLerpStartValue",0);r(this,"_fovLerpEndValue",0);r(this,"_fovLerp01",0);r(this,"_fovLerpDuration",0);r(this,"_inputs",0);r(this,"_enableTime",0);r(this,"_startedListeningToKeyEvents",!1);r(this,"_eventSystem");r(this,"_afterHandleInputFn");r(this,"_camera",null);r(this,"_syncedTransform");r(this,"_didSetTarget",0);r(this,"targetElement",null);r(this,"_activePointerEvents");r(this,"_lastTimeClickOnBackground",-1);r(this,"_clickOnBackgroundCount",0);r(this,"_onPointerDown",e=>{this._activePointerEvents.push(e)});r(this,"_onPointerDownLate",e=>{e.used&&this._controls&&(this._controls.enabled=!1)});r(this,"_onPointerUp",e=>{for(let i=this._activePointerEvents.length-1;i>=0;i--){const n=this._activePointerEvents[i];if(n.pointerId===e.pointerId&&n.button===e.button){this._activePointerEvents.splice(i,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){const i=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||i<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}Ui&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}});r(this,"_onPointerUpLate",e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()});r(this,"_orbitStartAngle",0);r(this,"onControlsChangeStarted",()=>{this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()),this._syncedTransform&&this._syncedTransform.requestOwnership()});r(this,"onControlsChangeEnded",()=>{if(this._controls&&this.autoTarget){const i=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(i)<.01?(Ui&&console.debug("OrbitControls: No movement detected, updating target now"),this.updateTargetNow()):Ui&&console.debug("OrbitControls: Movement detected",i)}});r(this,"_shouldDisable",!1);r(this,"__onPreRender",()=>{const e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:"y",immediate:!0,objects:this.scene.children}))});r(this,"_haveAttachedKeyboardEvents",!1)}get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){var i;(i=this.controls)==null||i.addEventListener("start",e)}get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}awake(){Ui&&console.debug("OrbitControls",this),this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._eventSystem=Qt.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(Sm.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){var e,i;(e=this._controls)==null||e.dispose(),(i=this._eventSystem)==null||i.removeEventListener(Sm.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const e=C.getComponent(this.gameObject,ri);this._camera=e;let i=e==null?void 0:e.threeCamera;if(!i&&this.gameObject instanceof d.PerspectiveCamera&&(i=this.gameObject),i&&Kp(i,this,!0),!this._controls&&i instanceof d.Object3D){this._cameraObject=i;const n=this.targetElement??this.context.renderer.domElement,s=i==null?void 0:i.quaternion.clone();this._controls=new G.OrbitControls(i,n),i==null||i.quaternion.copy(s),cp===void 0&&(cp={...this._controls.keys});const a=Q(i),l=this.gameObject.worldForward,h=a.clone().sub(l.multiplyScalar(2.5));this._controls.target.copy(h)}if(this._controls)if(lp&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,exports.DeviceUtilities.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),this._controls.addEventListener("end",this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=C.getComponent(this.gameObject,es)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener("pointerdown",this._onPointerDown,{queue:oi.Early}),this.context.input.addEventListener("pointerdown",this._onPointerDownLate,{queue:oi.Late}),this.context.input.addEventListener("pointerup",this._onPointerUp,{queue:oi.Early}),this.context.input.addEventListener("pointerup",this._onPointerUpLate,{queue:oi.Late})}onDisable(){var e;if((e=this._camera)!=null&&e.threeCamera&&Kp(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted),this._controls.removeEventListener("end",this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener("pointerdown",this._onPointerDown),this.context.input.removeEventListener("pointerdown",this._onPointerDownLate),this.context.input.removeEventListener("pointerup",this._onPointerUp),this.context.input.removeEventListener("pointerup",this._onPointerUpLate)}updateTargetNow(){var s,a,l;const e=new d.Ray((s=this._cameraObject)==null?void 0:s.worldPosition,(a=this._cameraObject)==null?void 0:a.worldForward.multiplyScalar(-1)),i=this.context.physics.raycastFromRay(e),n=i.length>0?i[0]:void 0;n&&n.distance>this.minZoom&&n.distance<this.maxZoom&&(Ui&&V.DrawWireSphere(n.point,.1,16711680,2),(l=this._controls)==null||l.target.copy(i[0].point))}afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onBeforeRender(){var i,n,s,a;if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&((i=this.context.input.getPointerPositionDelta(0))!=null&&i.length()))&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const l=C.getComponent(this.gameObject,ri);if(l&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const c=Q(l.threeCamera),h=Math.max(.01,c.length()),u=new d.Vector3(0,0,-h).applyMatrix4(l.threeCamera.matrixWorld);Ui&&V.DrawLine(c,u,5592575,10),this.setLookTargetPosition(u,!0)}if(!this.setLookTargetFromConstraint()){const c=new Jn;c.screenPoint=new d.Vector2(0,0),c.lineThreshold=.1;const h=this.context.physics.raycast(c);h.length>0&&this.setLookTargetPosition(h[0].point,!0),El&&console.log("OrbitControls hits",...h)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Bc(this,"camera"));else{const l=z.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,l)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this._controls.target.copy(this._lookTargetEndPosition),this._lookTargetLerpActive=!1,this.dispatchEvent(new Bc(this,"lookat"));else{const l=z.easeInOutCubic(this._lookTargetLerp01);this._controls.target.lerpVectors(this._lookTargetStartPosition,this._lookTargetEndPosition,l)}if(this._fovLerpActive&&this._cameraObject){const l=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)l.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{const c=z.easeInOutCubic(this._fovLerp01);l.fov=z.lerp(this._fovLerpStartValue,this._fovLerpEndValue,c)}l.updateProjectionMatrix()}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(l=>l.used),this._controls.keys=this.enableKeys?cp:XP,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,lp||(((s=(n=this._camera)==null?void 0:n.threeCamera)==null?void 0:s.type)==="PerspectiveCamera"?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof cd=="number"||cd===!0){this._controls.enableDamping=!0;const l=typeof cd=="number"?cd:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,l))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!lp&&((a=this.lookAtConstraint)!=null&&a.locked)&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(this.context.time.deltaTime),Ui&&V.DrawWireSphere(this._controls.target,.1,65280))}}setCameraAndLookTarget(e,i=!1){if(!e)return(j()||Ui)&&console.warn("[OrbitControls] setCameraAndLookTarget target is null"),!1;if(!(e instanceof d.Object3D)&&!(e instanceof ri))return(j()||Ui)&&console.warn("[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera"),!1;e instanceof ri&&(e=e.gameObject);const n=e.worldPosition,s=e.worldForward;e instanceof d.Camera&&(Ui&&console.debug("[OrbitControls] setCameraAndLookTarget flip forward direction for camera"),s.multiplyScalar(-1));const a=new d.Ray(n,s);return Ui&&V.DrawRay(a.origin,a.direction,16711680,10),this.setTargetFromRaycast(a,i)||this.setLookTargetPosition(a.at(2,$()),i),this.setCameraTargetPosition(n,i),!0}setCameraTargetPosition(e,i=!1){var n;e&&(e instanceof d.Object3D&&(e=Q(e)),this._cameraEndPosition||(this._cameraEndPosition=new d.Vector3),this._cameraEndPosition.copy(e),i===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy((n=this._cameraObject)==null?void 0:n.position),typeof i=="number"?this._cameraLerpDuration=i:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,i=!1){var s;if(!this._controls||typeof e!="number")return;const n=(s=this._camera)==null?void 0:s.threeCamera;n&&(i===!0?n.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=n.fov,this._fovLerpEndValue=e,typeof i=="number"?this._fovLerpDuration=i:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,i=!1){this._controls&&e&&(e instanceof d.Object3D&&(e=Q(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,Ui&&(console.warn("OrbitControls: setLookTargetPosition",e,i),V.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),i===!0?this._controls.target.copy(this._lookTargetEndPosition):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof i=="number"?this._lookTargetLerpDuration=i:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=0,i=1){var s,a;if(!this._controls||((s=this.lookAtConstraint)==null?void 0:s.enabled)===!1)return!1;const n=(a=this.lookAtConstraint)==null?void 0:a.sources;if(n&&n.length>0){const l=n[e];if(l)return l.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._lookTargetEndPosition,i),!0}return!1}lerpTarget(e,i){return this.lerpLookTarget(e,i)}lerpLookTarget(e,i){this._controls&&(i>=1?this._controls.target.copy(e):this._controls.target.lerp(e,i))}setTargetFromRaycast(e,i=!1){if(!this.controls)return!1;const n=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(const s of n)if(s.distance>0&&C.isActiveInHierarchy(s.object)){const a=Rg(s.object);if(a){const l=a.canvas;if(l!=null&&l.screenspace)break}return this.setLookTargetPosition(s.point,i),!0}return!1}fitCamera(e,i){var H,B;if(this.context.isInXR)return;let n;if(Array.isArray(e)?n=e:e&&"type"in e?n=e.children:e&&typeof e=="object"&&!(e instanceof d.Object3D)&&!Array.isArray(e)&&(i=e,n=i.objects),n&&!Array.isArray(n)&&(n=n.children),(!Array.isArray(n)||n&&n.length<=0)&&(n=this.context.scene.children),!Array.isArray(n)||n.length<=0){console.warn("No objects to fit camera to...");return}const s=this._cameraObject,a=this._controls;if(!s||!a){console.warn("No camera or controls found to fit camera to objects...");return}i||(i={});const{immediate:l=!1,centerCamera:c="y",cameraNearFar:h="auto",fitOffset:u=1.1,fov:f=s==null?void 0:s.fov}=i,p=new d.Vector3,g=new d.Vector3,y=li(n,void 0,(B=(H=this._camera)==null?void 0:H.threeCamera)==null?void 0:B.layers),b=y.clone();s.updateMatrixWorld(),s.updateProjectionMatrix(),y.getCenter(g);const _=new d.Vector3;if(y.getSize(_),y.applyMatrix4(s.matrixWorldInverse),y.getSize(p),y.setFromCenterAndSize(g,p),Number.isNaN(p.x)||Number.isNaN(p.y)||Number.isNaN(p.z)){console.warn("Camera fit size resultet in NaN",s,y,[...n]);return}if(p.length()<=1e-10){El&&console.warn("Camera fit size is zero",y,[...n]);return}const v=i.fov||s.fov,w=2*Math.atan(Math.tan(v*Math.PI/360/2)*s.aspect)/Math.PI*360,x=p.y/(2*Math.atan(Math.PI*v/360)),O=p.x/(2*Math.atan(Math.PI*w/360)),M=u*Math.max(x,O)+p.z/2;El&&console.log("Fit camera to objects",{fitHeightDistance:x,fitWidthDistance:O,distance:M,verticalFov:v,horizontalFov:w}),this.maxZoom=M*10,this.minZoom=M*.01;const R=.05,E=g.clone();if(E.y-=p.y*R,this.setLookTargetPosition(E,l),this.setFieldOfView(i.fov,l),h==null||h=="auto"){const I=C.findObjectOfType(ss),N=I?I.radius:0,Y=Math.max(_.x,_.y,_.z,N);s.near=M/100,s.far=Y+M*10,I&&(this.maxZoom=Math.max(Math.min(this.maxZoom,N*.5),M))}const F=a.getDistance();F<this.minZoom&&(this.minZoom=F*.9),F>this.maxZoom&&(this.maxZoom=F*1.1),s.updateMatrixWorld(),s.updateProjectionMatrix();const T=Q(s),L=g.clone();L.sub(T),c==="y"&&(L.y=0),L.normalize(),L.multiplyScalar(M),c==="y"&&(L.y+=-R*4*M);let A=g.clone().sub(L);s.parent&&(A=s.parent.worldToLocal(A)),this.setCameraTargetPosition(A,l),(El||i.debug)&&(V.DrawWireBox3(y,16777011,10),V.DrawWireBox3(b,65280,10),!this._haveAttachedKeyboardEvents&&El&&(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",I=>{if(I.code==="KeyF"){let N;this._cameraObject instanceof d.PerspectiveCamera&&(N=Math.random()*Math.random()*170+10),this.fitCamera({objects:n,fitOffset:u,immediate:!1,fov:N})}I.code==="KeyV"&&this._cameraObject instanceof d.PerspectiveCamera&&(this._cameraObject.fov=60)}))),this.onBeforeRender()}}Te([m()],ge.prototype,"autoTarget");Te([m()],ge.prototype,"autoFit");Te([m()],ge.prototype,"enableRotate");Te([m()],ge.prototype,"autoRotate");Te([m()],ge.prototype,"autoRotateSpeed");Te([m()],ge.prototype,"minAzimuthAngle");Te([m()],ge.prototype,"maxAzimuthAngle");Te([m()],ge.prototype,"minPolarAngle");Te([m()],ge.prototype,"maxPolarAngle");Te([m()],ge.prototype,"enableKeys");Te([m()],ge.prototype,"enableDamping");Te([m()],ge.prototype,"dampingFactor");Te([m()],ge.prototype,"enableZoom");Te([m()],ge.prototype,"minZoom");Te([m()],ge.prototype,"maxZoom");Te([m()],ge.prototype,"zoomSpeed");Te([m()],ge.prototype,"enablePan");Te([m(Ur)],ge.prototype,"lookAtConstraint");Te([m()],ge.prototype,"lookAtConstraint01");Te([m()],ge.prototype,"allowInterrupt");Te([m()],ge.prototype,"middleClickToFocus");Te([m()],ge.prototype,"doubleClickToFocus");Te([m()],ge.prototype,"clickBackgroundToFitScene");Te([m()],ge.prototype,"targetLerpDuration");var QP=Object.defineProperty,YP=Object.getOwnPropertyDescriptor,Kt=(o,t,e,i)=>{for(var n=i>1?void 0:i?YP(t,e):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=(i?a(t,e,n):a(n))||n);return i&&n&&QP(t,e,n),n},Co=(o=>(o[o.None=0]="None",o[o.Skybox=1]="Skybox",o[o.SolidColor=2]="SolidColor",o[o.Uninitialized=4]="Uninitialized",o))(Co||{});const io=S("debugcam"),ab=S("debugscreenpointtoray");var pn;const Lt=(pn=class extends D{constructor(){super(...arguments);r(this,"_nearClipPlane",.1);r(this,"_farClipPlane",1e3);r(this,"orthographic",!1);r(this,"orthographicSize",5);r(this,"ARBackgroundAlpha",0);r(this,"_cullingMask",4294967295);r(this,"_backgroundBlurriness");r(this,"_backgroundIntensity");r(this,"_backgroundRotation");r(this,"_environmentIntensity");r(this,"_targetTexture",null);r(this,"_backgroundColor");r(this,"_fov");r(this,"_cam",null);r(this,"_clearFlags",2);r(this,"_skybox");r(this,"_frustum");r(this,"_projScreenMatrix",new d.Matrix4)}get isCamera(){return!0}get aspect(){return this._cam instanceof d.PerspectiveCamera?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof d.PerspectiveCamera&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof d.PerspectiveCamera?this._cam.fov:this._fov}set fieldOfView(e){const i=this.fieldOfView!=e;if(this._fov=e,i&&this._cam&&this._cam instanceof d.PerspectiveCamera){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const i=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(i||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const i=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(i||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e=="string")switch(e){case"skybox":e=1;break;case"solidcolor":e=2;break;default:e=0;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||(this._backgroundColor=new ie(1,1,1,1)),this._backgroundColor.copy(e),(!("alpha"in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}screenPointToRay(e,i,n){const s=this.threeCamera,a=pn._origin;a.set(e,i,-1),this.context.input.convertScreenspaceToRaycastSpace(a),ab&&console.log("screenPointToRay",e.toFixed(2),i.toFixed(2),"now:",a.x.toFixed(2),a.y.toFixed(2),"isInXR:"+this.context.isInXR),a.z=-1,a.unproject(s);const l=pn._direction.set(a.x,a.y,a.z),c=Q(s);return l.sub(c),l.normalize(),n?(n.set(c,l),n):new d.Ray(c.clone(),l.clone())}getFrustum(){return this._frustum||(this._frustum=new d.Frustum,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new d.Frustum),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,i){return i&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}awake(){ab&&window.addEventListener("pointerdown",e=>{const i=e.clientX,n=e.clientY;console.log("touch",i.toFixed(2),n.toFixed(2));const s=this.screenPointToRay(i,n),a="#"+Math.floor(Math.random()*16777215).toString(16);V.DrawRay(s.origin,s.direction,a,10)})}onEnable(){io&&console.log(`Camera enabled: "${this.name}". ClearFlags=${Co[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),ZP(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const i=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),i==null||i.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let i=null;if(e?(i=this.gameObject,i==null||i.layers.enableAll(),i instanceof d.PerspectiveCamera&&(this._fov=i.fov)):i=this.gameObject.children[0],i&&i.isCamera)i instanceof d.PerspectiveCamera&&(this._fov&&(i.fov=this._fov),i.near=this._nearClipPlane,i.far=this._farClipPlane,i.updateProjectionMatrix());else if(!this.orthographic)i=new d.PerspectiveCamera(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(i.fov=this.fieldOfView),this.gameObject.add(i);else{const n=this.orthographicSize*100;i=new d.OrthographicCamera(window.innerWidth/-n,window.innerWidth/n,window.innerHeight/n,window.innerHeight/-n,this._nearClipPlane,this._farClipPlane),this.gameObject.add(i)}this._cam=i,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){var n;if(!this._cam){io&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this._fov,io){const s=`[Camera] Apply ClearFlags: ${Co[this._clearFlags]} - "${this.name}"`;console.debug(s)}const i=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color")||this.context.domElement.getAttribute("skybox-image");switch(this._clearFlags){case 0:return;case 1:if(pn.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||(e==null?void 0:e.applySkybox)===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute("background-blurriness")?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:io&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute("background-intensity")&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute("background-rotation")?this.context.scene.backgroundRotation=this._backgroundRotation:io&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor&&!i){let s=this._backgroundColor.alpha;pn.backgroundShouldBeTransparent(this.context)&&(s=this.ARBackgroundAlpha??0),this.context.scene.background=null,(n=this.context.xr)!=null&&n.isVR?this.context.renderer.setClearColor(x0(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,s)}else this._backgroundColor||io&&console.warn(`[Camera] has no background color "${this.name}" `);break;case 4:i||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||(this._skybox=new KP(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){var a,l,c,h;const i=(a=e.renderer.xr)==null?void 0:a.getSession();if(!i)return!1;if(typeof i._transparent=="boolean")return i._transparent;const n=i.environmentBlendMode;io&&Ee("Environment blend mode: "+n+" on "+navigator.userAgent);let s=n==="additive"||n==="alpha-blend";return e.isInAR&&n==="opaque"&&((l=navigator.userAgent)!=null&&l.includes("OculusBrowser")||(c=navigator.userAgent)!=null&&c.includes("Mozilla")&&((h=navigator.userAgent)!=null&&h.includes("Mobile WebXRViewer/v2")))&&(s=!0),i._transparent=s,s}},r(pn,"_origin",new d.Vector3),r(pn,"_direction",new d.Vector3),pn);Kt([m()],Lt.prototype,"aspect",1);Kt([m()],Lt.prototype,"fieldOfView",1);Kt([m()],Lt.prototype,"nearClipPlane",1);Kt([m()],Lt.prototype,"farClipPlane",1);Kt([m()],Lt.prototype,"clearFlags",1);Kt([m()],Lt.prototype,"orthographic",2);Kt([m()],Lt.prototype,"orthographicSize",2);Kt([m()],Lt.prototype,"ARBackgroundAlpha",2);Kt([m()],Lt.prototype,"cullingMask",1);Kt([m()],Lt.prototype,"backgroundBlurriness",1);Kt([m()],Lt.prototype,"backgroundIntensity",1);Kt([m(d.Euler)],Lt.prototype,"backgroundRotation",1);Kt([m()],Lt.prototype,"environmentIntensity",1);Kt([m(ie)],Lt.prototype,"backgroundColor",1);Kt([m(Sr)],Lt.prototype,"targetTexture",1);let ri=Lt;class KP{constructor(t){r(this,"_camera");r(this,"_skybox");this._camera=t}get context(){var t;return(t=this._camera)==null?void 0:t.context}apply(){var t;if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){const e=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color")||this.context.domElement.getAttribute("skybox-image");io&&console.debug(`[Camera] Apply Skybox ${(t=this._skybox)==null?void 0:t.name} ${e} - "${this._camera.name}"`),e!=null&&e.length||(this._skybox.mapping=d.EquirectangularReflectionMapping,this.context.scene.background=this._skybox)}}}function ZP(o){S("freecam")&&o.context.mainCameraComponent===o&&C.getOrAddComponent(o.gameObject,ge)}class Ms extends D{constructor(){super(...arguments);r(this,"_listener",null);r(this,"onInteraction",()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()})}get listener(){return this._listener==null&&(this._listener=new d.AudioListener),this._listener}onEnable(){wn.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){wn.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}addListenerIfItExists(){const e=this._listener;if(!e||e!=null&&e.parent)return;const i=this.context.mainCameraComponent||C.getComponentInParent(this.gameObject,ri);i!=null&&i.threeCamera?i.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){const e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}}var JP=Object.defineProperty,eM=Object.getOwnPropertyDescriptor,Cn=(o,t,e,i)=>{for(var n=i>1?void 0:i?eM(t,e):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=(i?a(t,e,n):a(n))||n);return i&&n&&JP(t,e,n),n};const gt=S("debugaudio"),Zi=class no extends D{constructor(){super(...arguments);r(this,"clip","");r(this,"playOnAwake",!1);r(this,"preload",!0);r(this,"playInBackground",!0);r(this,"_spatialBlend",0);r(this,"_minDistance",1);r(this,"_maxDistance",100);r(this,"_volume",1);r(this,"rollOffMode",0);r(this,"_loop",!1);r(this,"sound",null);r(this,"helper",null);r(this,"wasPlaying",!1);r(this,"audioLoader",null);r(this,"shouldPlay",!1);r(this,"_lastClipStartedLoading",null);r(this,"_audioElement",null);r(this,"onVisibilityChanged",()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||exports.DeviceUtilities.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":gt&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,no.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&no.userInteractionRegistered&&this.wasPlaying&&this.play();break}});r(this,"onApplicationMuteChanged",()=>{var e,i;this.context.application.muted?(e=this.sound)==null||e.setVolume(0):(i=this.sound)==null||i.setVolume(this.volume)});r(this,"createAudio",e=>{if(this.destroyed){gt&&console.warn("AudioSource destroyed, not creating audio",this.name);return}gt&&console.log("AudioBuffer finished loading",e);const i=this.Sound;if(!i){gt&&console.warn("Failed getting sound?",this.name);return}i.isPlaying&&i.stop(),e&&i.setBuffer(e),i.loop=this._loop,this.context.application.muted?i.setVolume(0):i.setVolume(this.volume),i.autoplay=this.shouldPlay&&no.userInteractionRegistered,this.applySpatialDistanceSettings(),i.isPlaying&&i.stop(),no.registerWaitForAllowAudio(this.__onAllowAudioCallback)});r(this,"__onAllowAudioCallback",()=>{this.shouldPlay&&this.play()});r(this,"_lastContextTime",0);r(this,"_hasEnded",!0);r(this,"_needUpdateSpatialDistanceSettings",!1)}static get userInteractionRegistered(){return wn.userInteractionRegistered}static registerWaitForAllowAudio(e){wn.registerWaitForInteraction(e)}get isPlaying(){var e;return((e=this.sound)==null?void 0:e.isPlaying)??!1}get duration(){var e,i;return(i=(e=this.sound)==null?void 0:e.buffer)==null?void 0:i.duration}get time01(){var i;const e=this.duration;return e&&this.sound?((i=this.sound)==null?void 0:i.context.currentTime)/e:0}set time01(e){const i=this.duration;i&&this.sound&&(this.time=e*i)}get time(){var e,i;return(e=this.sound)!=null&&e.source?((i=this.sound.source)==null?void 0:i.context.currentTime)-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const i=this.isPlaying;this.stop(),this.sound.offset=e,i&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(gt&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}get Sound(){var e;if(!this.sound&&no.userInteractionRegistered){let i=this.gameObject.getComponent(Ms)??this.context.mainCamera.getComponent(Ms)??ch(Ms,this.context,!1);!i&&this.context.mainCamera&&(i=this.context.mainCamera.addComponent(Ms)),i!=null&&i.listener?(this.sound=new d.PositionalAudio(i.listener),(e=this.gameObject)==null||e.add(this.sound)):gt&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){var e;return(e=this.sound)==null?void 0:e.context}awake(){gt&&console.log("[AudioSource]",this),this.audioLoader=new d.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),no.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():no.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(im.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(im.MuteChanged,this.onApplicationMuteChanged),this.pause()}applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const i=z.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(gt&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+i),e.setRefDistance(i),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?gt&&!this.helper&&(this.helper=new G.PositionalAudioHelper(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(gt&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new d.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===e){gt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,gt&&console.log("load audio",e);const i=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),i&&this.createAudio(i)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){var n,s,a;!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(j()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
|
|
939
|
+
Could not find method ${h.method} on object ${f.name}`,f,typeof f[h.method])};if(typeof f[h.method]!="function"){let b=!1,_=f;for(;_;){const v=Object.getOwnPropertyDescriptor(_,h.method);if(v&&(v.writable===!0||v.set)){b=!0;break}_=Object.getPrototypeOf(_)}!b&&(j()||dt)&&g()}}if(f){let g=h.argument;if(g!==void 0?g=u(g):h.arguments!==void 0&&(g=h.arguments.map(u)),!f[h.method])console.warn(`EventList method not found: "${h.method}" on ${f==null?void 0:f.name}`);else{g!==void 0&&!Array.isArray(g)&&(g=[g]);const b=new Cs(f,h.method,g,h.enabled);a.push(b)}}else j()&&console.warn("[Debug] EventList: Could not find event listener in scene",h,e.object,t)}const l=new ye(a);dt&&console.log(l);const c=e.target;return c!==void 0&&e.path!==void 0&&l.setEventTarget(e.path,c),l}}}const NP=new zP,cu=new WeakMap,VP=d.Texture.prototype.clone;d.Texture.prototype.clone=function(){const o=VP.call(this);return cu.has(o)||cu.set(o,this),o};class hw extends Ki{constructor(){super([Sr,d.WebGLRenderTarget])}onSerialize(t,e){}onDeserialize(t,e){if(t instanceof d.Texture&&e.type===Sr){let i=t;cu.has(i)&&(i=cu.get(i)),i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof d.CompressedTexture&&(i.isCompressedTexture=!1,i.format=d.RGBAFormat);const n=new Sr(i.image.width,i.image.height,{colorSpace:d.LinearSRGBColorSpace});return n.texture=i,n}}}new hw;class dw extends Ki{constructor(){super([URL])}onSerialize(t,e){return null}onDeserialize(t,e){if(typeof t=="string"&&t.length>0)return To(e.gltfId,t)}}new dw;var $P=Object.defineProperty,WP=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&$P(t,e,n),n};class Ga extends D{awake(){Qt.createIfNoneExists(this.context)}onEnable(){var t;(t=Qt.get(this.context))==null||t.register(this)}onDisable(){var t;(t=Qt.get(this.context))==null||t.unregister(this)}}class Ei extends Ga{constructor(){super(...arguments);r(this,"targets",null);r(this,"raycastHits",[]);r(this,"ignoreSkinnedMeshes",!1)}start(){this.targets=[this.gameObject]}performRaycast(e=null){if(!this.targets)return null;e??(e=new Jn),e.targets=this.targets,e.results=this.raycastHits,e.useAcceleratedRaycast=!0;const i=e.testObject;this.ignoreSkinnedMeshes&&(e.testObject=s=>s instanceof d.SkinnedMesh?"continue in children":i?i(s):!0);const n=this.context.physics.raycast(e);return e.testObject=i,n}}WP([m()],Ei.prototype,"ignoreSkinnedMeshes");class Yu extends Ei{constructor(){super(),this.ignoreSkinnedMeshes=!0}}const Ru=class Ru extends Ga{performRaycast(t){if(!J.active||!Ru.allow||!(t!=null&&t.ray))return null;const e=t.ray.origin;return this.context.physics.sphereOverlap(e,.015,!1,!0)}};r(Ru,"allow",!0);let Tr=Ru;class kg{static getObject(t){const e=t[Si];return e&&(e.isComponent===!0?t=e.gameObject:t=e),t}static isInteractable(t,e){if(e&&(e.canvasGroup=void 0,e.graphic=void 0),t==null||!t.visible||(t=this.getObject(t),!t.visible))return!1;const i=this.tryFindCanvasGroup(t);if((i==null?void 0:i.isCanvasGroup)===!0&&(e&&(e.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Rr(t,s=>{if(s.isGraphic===!0)return s},!1);return e&&(n==null?void 0:n.isGraphic)===!0&&(e.graphic=n),!((n==null?void 0:n.raycastTarget)===!1||(n==null?void 0:n.layer)===2)}static tryFindCanvasGroup(t){if(!t)return null;const e=Rr(t,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return e!==void 0?e:this.tryFindCanvasGroup(t.parent)}}function Rg(o){const t=o[Si];return t||(o.parent?Rg(o.parent):null)}function HP(o){return o.isUI===!0||typeof o[Si]=="object"}function hu(o,t){if(!o)return;const e=o.material;if((e==null?void 0:e.isMaterial)===!0){const i=o.parent;i&&i.isText,e.side=t.doubleSided??!0?d.DoubleSide:d.FrontSide,e.shadowSide=t.doubleSided?d.DoubleSide:d.FrontSide,o.castShadow=t.castShadows?t.castShadows:!1,o.receiveShadow=t.receiveShadows?t.receiveShadows:!1}for(const i of o.children)hu(i,t)}function pa(o,t,e){o[t]===void 0&&console.warn("Field",t,"is undefined on",o);const i=Proxy.revocable(o[t],{set(a,l,c,h){const u=a[l],f=Reflect.set(a,l,c,h);return e(c,u),f}}),n=i.revoke,s=o[t];return i.revoke=()=>{o[t]=s,n()},o[t]=i.proxy,i}const rb=Symbol("Scheduled action");function GP(o,t,e=we.OnBeforeRender){let i=o[rb];i||(i=o[rb]={});const n=t.name;i[e]||(i[e]={});const s=i[e];if(s[n])return;function*l(){t==null||t.call(o),s[n]=null}const c=o.startCoroutine(l(),e);s[n]=c}const to=S("debugeventsystem");var Sm=(o=>(o.BeforeHandleInput="BeforeHandleInput",o.AfterHandleInput="AfterHandleInput",o))(Sm||{});sw(o=>{Qt.createIfNoneExists(o)});class Qt extends D{constructor(){super(...arguments);r(this,"raycaster",[]);r(this,"pressedByID",new Map);r(this,"hoveredByID",new Map);r(this,"onPointerEvent",e=>{if(e===void 0||e.propagationStopped||e.defaultPrevented||e.used)return;const i=new ph(this.context.input,e);this._currentPointerEventName=e.type,i.inputSource=this.context.input,i.isClick=e.isClick,i.isDoubleClick=e.isDoubleClick,i.isDown=e.type==Re.PointerDown,i.isUp=e.type==Re.PointerUp,i.isPressed=this.context.input.getPointerPressed(e.pointerId),to&&(i.isDown?console.log("DOWN",i.pointerId):i.isUp&&console.log("UP",i.pointerId),i.isClick&&console.log("CLICK",i.pointerId));const n=new Jn;e.hasRay?n.ray=e.ray:n.screenPoint=this.context.input.getPointerPositionRC(e.pointerId);const s=this.performRaycast(n);if(s){for(const l of s)l.event=e,e.intersections.push(l);e.origin.onPointerHits&&e.origin.onPointerHits({sender:this,event:e,hits:s})}to&&i.isClick&&Ee("EventSystem: "+i.pointerId+" - "+this.context.time.frame+" - Up:"+i.isUp+", Down:"+i.isDown);const a={sender:this,args:i,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:a})),this.handleIntersections(s,i),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:a}))});r(this,"_sortedHits",[]);r(this,"_testObjectsCache",new Map);r(this,"_currentlyActiveRaycaster",null);r(this,"_currentPointerEventName",null);r(this,"shouldRaycastObject",e=>{var a;const i=e&&"getComponent"in e?e.getComponent(Ga):null;if(i&&i!=this._currentlyActiveRaycaster)return!1;let n=null;if(HP(e)&&(n=(a=e[Si])==null?void 0:a.gameObject),this._testObjectsCache.has(e)||n&&this._testObjectsCache.has(n))return this._testObjectsCache.get(e)===!1?"continue in children":!0;{let l=lu(e,this._currentPointerEventName);if(!l&&n&&(l=lu(n,this._currentPointerEventName)),l){this._testObjectsCache.set(e,!0);for(const c of e.children)this.shouldRaycastObject_AddToYesCache(c);return!0}return this._testObjectsCache.set(e,!1),"continue in children"}});r(this,"_sortingBuffer",[]);r(this,"_noDepthTestingResults",[]);r(this,"out",{});r(this,"_capturedPointer",{});r(this,"pointerEnterSymbol",Symbol("pointerEnter"));r(this,"pointerExitSymbol",Symbol("pointerExit"));r(this,"currentActiveMeshUIComponents",[])}static ensureUpdateMeshUI(e,i,n=!1){fo.update(e,i,n)}static markUIDirty(e){fo.markDirty()}static createIfNoneExists(e){e.scene.getComponent(Qt)||e.scene.addComponent(Qt)}static get(e){return this.createIfNoneExists(e),e.scene.getComponent(Qt)}static get instance(){return this.get(X.Current)}register(e){var i;e&&this.raycaster&&!this.raycaster.includes(e)&&((i=this.raycaster)==null||i.push(e))}unregister(e){var n,s;const i=(n=this.raycaster)==null?void 0:n.indexOf(e);i!==void 0&&i!==-1&&((s=this.raycaster)==null||s.splice(i,1))}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}awake(){this.gameObject!==this.context.scene&&(console.debug(`[Needle Engine] EventSystem is only allowed on the scene root. Disabling EventSystem on '${this.gameObject.name}'`),this.enabled=!1)}start(){this.context.scene.getComponent(Ga)||this.context.scene.addComponent(Ei)}onEnable(){this.context.input.addEventListener(Re.PointerDown,this.onPointerEvent),this.context.input.addEventListener(Re.PointerUp,this.onPointerEvent),this.context.input.addEventListener(Re.PointerMove,this.onPointerEvent)}onDisable(){this.context.input.removeEventListener(Re.PointerDown,this.onPointerEvent),this.context.input.removeEventListener(Re.PointerUp,this.onPointerEvent),this.context.input.removeEventListener(Re.PointerMove,this.onPointerEvent)}onBeforeRender(){this.resetMeshUIStates()}shouldRaycastObject_AddToYesCache(e){this._testObjectsCache.set(e,!0);for(const i of e.children)this.shouldRaycastObject_AddToYesCache(i)}performRaycast(e){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,e||(e=new Jn),e.testObject=this.shouldRaycastObject;for(const i of this.raycaster){if(!i.activeAndEnabled)continue;this._currentlyActiveRaycaster=i;const n=i.performRaycast(e);this._currentlyActiveRaycaster=null,n&&n.length>0&&this._sortedHits.push(...n)}return this._sortedHits.sort((i,n)=>i.distance-n.distance),this._sortedHits}assignHitInformation(e,i){i?(e.intersection=i,e.point=i.point,e.normal=i.normal,e.face=i.face,e.distance=i.distance,e.instanceId=i.instanceId):(e.intersection=void 0,e.point=void 0,e.normal=void 0,e.face=void 0,e.distance=void 0,e.instanceId=void 0)}handleIntersections(e,i){var s;if(e!=null&&e.length){e=this.sortCandidates(e);for(const a of e){if(i.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(i,a),this.handleEventOnObject(a.object,i))return!0}}this.assignHitInformation(i,e==null?void 0:e[0]),this.invokePointerCapture(i);const n=this.hoveredByID.get(i.pointerId);return n&&this.propagatePointerExit(n.obj,n.data,null),this.hoveredByID.delete(i.pointerId),i.isUp&&((s=this.pressedByID.get(i.pointerId))==null||s.handlers.forEach(a=>this.invokeOnPointerUp(i,a)),this.pressedByID.delete(i.pointerId)),!1}sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let i=0;i<e.length;i++){const n=e[i],s=n.object;if(s.material&&s.material.depthTest===!1){this._noDepthTestingResults.push(n);continue}this._sortingBuffer.push(n)}for(const i of this._sortingBuffer)this._noDepthTestingResults.push(i);return this._noDepthTestingResults}handleEventOnObject(e,i){if(!this.testIsVisible(e))return i.isClick&&to&&console.log("not allowed",e),!1;if(i.pointerId===void 0)return to&&console.error("Event without pointer can't be handled",i),!1;i.object=e;const n=e.parent,s=i.isClick??!1;let a=null;if(n&&n.isUI){const f=(i.isPressed||i.isClick)??!1;if(n[Si]){const p=n[Si].gameObject;if(p){if(!kg.isInteractable(p,this.out))return!1;a=this.out.canvasGroup??null,this.handleMeshUIIntersection(e,f),e=p}}}s&&to&&console.log(this.context.time.frame,e);const l=this.hoveredByID.get(i.pointerId),c=l==null?void 0:l.obj;c!==e&&c&&this.propagatePointerExit(c,l.data,e);const u=this.hoveredByID.get(i.pointerId);if(u?(u.obj=e,u.data=i):this.hoveredByID.set(i.pointerId,{obj:e,data:i}),i.isDown){const f=this.pressedByID.get(i.pointerId);f?(f.obj=e,f.data=i):this.pressedByID.set(i.pointerId,{obj:e,data:i,handlers:new Set})}return(a===null||a.interactable)&&this.handleMainInteraction(e,i,c??null),!0}propagate(e,i){for(;e;)C.foreachComponent(e,n=>{i(n)},!1),e=e.parent}handleMainInteraction(e,i,n){const s=this.pressedByID.get(i.pointerId),a=n!==e;let l=!0;switch(i.event.pointerType){case"mouse":case"touch":const c=this.context.input.getPointerPositionLastFrame(i.pointerId),h=this.context.input.getPointerPosition(i.pointerId);l=c&&!z.approximately(c,h);break}this.propagate(e,c=>{var u;const h=c;h.interactable!==!1&&(!h.activeAndEnabled||!h.enabled||(h.onPointerEnter&&a&&this.handlePointerEnter(h,i),i.isDown&&h.onPointerDown&&(h.onPointerDown(i),s==null||s.handlers.add(h),this.handlePointerCapture(i,h)),h.onPointerMove&&(l&&h.onPointerMove(i),this.handlePointerCapture(i,h)),i.isUp&&(h.onPointerUp&&(this.invokeOnPointerUp(i,h),s==null||s.handlers.delete(h)),h.onPointerExit&&((u=i.event)==null?void 0:u.pointerType)===zu.Touch&&(this.handlePointerExit(h,i),this.hoveredByID.delete(i.pointerId))),i.isClick&&h.onPointerClick&&h.onPointerClick(i)))}),i.isUp&&(s==null||s.handlers.forEach(c=>{this.invokeOnPointerUp(i,c)}),this.pressedByID.delete(i.pointerId))}propagatePointerExit(e,i,n){this.propagate(e,s=>{if(!s.gameObject||s.destroyed)return;const a=s;if(a.onPointerExit||a.onPointerEnter){if(n&&this.isChild(n,s.gameObject))return;this.handlePointerExit(a,i)}})}invokeOnPointerUp(e,i){var n;(n=i.onPointerUp)==null||n.call(i,e),this.releasePointerCapture(e,i)}handlePointerEnter(e,i){e.onPointerEnter&&this.updatePointerState(e,i.pointerId,this.pointerEnterSymbol,!0)&&e.onPointerEnter(i),this.updatePointerState(e,i.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(e,i){e.onPointerExit&&this.updatePointerState(e,i.pointerId,this.pointerExitSymbol,!0)&&e.onPointerExit(i),this.updatePointerState(e,i.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(e,i,n,s){let a=e[n];if(s)return a&&a.includes(i)?!1:(a=a||[],a.push(i),e[n]=a,!0);{if(!a||!a.includes(i))return!1;const l=a.indexOf(i);return l!==-1&&a.splice(l,1),!0}}handlePointerCapture(e,i){if(e.z__pointer_ctured){e.z__pointer_ctured=!1;const n=e.pointerId;if(i.onPointerMove){const s=this._capturedPointer[n]||[];s.push(i),this._capturedPointer[n]=s}else j()&&!i.z__warned_no_pointermove&&(i.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else e.z__pointer_cture_rleased&&(e.z__pointer_cture_rleased=!1,this.releasePointerCapture(e,i))}releasePointerCapture(e,i){const n=e.pointerId;if(this._capturedPointer[n]){const s=this._capturedPointer[n].indexOf(i);s!==-1&&(this._capturedPointer[n].splice(s,1),to&&console.log("released pointer capture",n,i,this._capturedPointer))}}invokePointerCapture(e){var i;if(e.event.type===Re.PointerMove){const n=e.pointerId,s=this._capturedPointer[n];if(s){to&&console.log("Captured",n,s);for(let a=0;a<s.length;a++){const l=s[a];if(l.destroyed){s.splice(a,1),a--;continue}(i=l.onPointerMove)==null||i.call(l,e)}}}}isChild(e,i){return!e||!i?!1:e===i?!0:e.parent?this.isChild(e.parent,i):!1}handleMeshUiObjectWithoutShadowDom(e,i){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,i)}handleMeshUIIntersection(e,i){const n=fo.updateState(e,i);return n&&this.currentActiveMeshUIComponents.push(n),n!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&fo.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){const i=this.currentActiveMeshUIComponents[e];fo.resetState(i)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?C.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}}class fo{static markDirty(){this.needsUpdate=!0}static update(t,e,i=!1){if(i){t.update();return}const n=e.time.frameCount;for(const s of this.lastUpdateFrame)if(s.context===e){if(n===s.frame)return;s.frame=n;let a=this.needsUpdate||n<1;s.nextUpdate<=n&&(a=!0),a&&(to&&console.log("Update threemeshui"),this.needsUpdate=!1,s.nextUpdate=n+60,t.update());return}this.lastUpdateFrame=[{context:e,frame:n,nextUpdate:n+60}],t.update(),this.needsUpdate=!1}static updateState(t,e){let i=null;if(t&&(i=this.findBlockOrTextInParent(t),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const t=this.lastSelected;t&&(this.lastSelected=null,this.resetState(t))}static resetState(t){t&&(this.needsUpdate=!0)}static findBlockOrTextInParent(t){return t?t.isBlock||t.isText?t:this.findBlockOrTextInParent(t.parent):null}}r(fo,"lastSelected",null),r(fo,"lastUpdateFrame",[]),r(fo,"needsUpdate",!1);var qP=Object.defineProperty,Te=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&qP(t,e,n),n};const Ui=S("debugorbit"),lp=S("freecam"),El=S("debugcamerafit"),cd=S("smoothcam"),XP={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let cp;class Bc extends CustomEvent{constructor(t,e){super("target-reached",{detail:{controls:t,type:e}})}}class ge extends D{constructor(){super(...arguments);r(this,"autoTarget",!0);r(this,"autoFit",!1);r(this,"enableRotate",!0);r(this,"autoRotate",!1);r(this,"autoRotateSpeed",1);r(this,"minAzimuthAngle",1/0);r(this,"maxAzimuthAngle",1/0);r(this,"minPolarAngle",0);r(this,"maxPolarAngle",Math.PI);r(this,"enableKeys",!1);r(this,"enableDamping",!0);r(this,"dampingFactor",.1);r(this,"enableZoom",!0);r(this,"minZoom",0);r(this,"maxZoom",1/0);r(this,"zoomSpeed",1);r(this,"zoomToCursor",!1);r(this,"enablePan",!0);r(this,"lookAtConstraint",null);r(this,"lookAtConstraint01",1);r(this,"allowInterrupt",!0);r(this,"middleClickToFocus",!0);r(this,"doubleClickToFocus",!0);r(this,"clickBackgroundToFitScene",2);r(this,"debugLog",!1);r(this,"targetLerpDuration",1);r(this,"_controls",null);r(this,"_cameraObject",null);r(this,"_lookTargetLerpActive",!1);r(this,"_lookTargetStartPosition",new d.Vector3);r(this,"_lookTargetEndPosition",new d.Vector3);r(this,"_lookTargetLerp01",0);r(this,"_lookTargetLerpDuration",0);r(this,"_cameraLerpActive",!1);r(this,"_cameraStartPosition",new d.Vector3);r(this,"_cameraEndPosition",new d.Vector3);r(this,"_cameraLerp01",0);r(this,"_cameraLerpDuration",0);r(this,"_fovLerpActive",!1);r(this,"_fovLerpStartValue",0);r(this,"_fovLerpEndValue",0);r(this,"_fovLerp01",0);r(this,"_fovLerpDuration",0);r(this,"_inputs",0);r(this,"_enableTime",0);r(this,"_startedListeningToKeyEvents",!1);r(this,"_eventSystem");r(this,"_afterHandleInputFn");r(this,"_camera",null);r(this,"_syncedTransform");r(this,"_didSetTarget",0);r(this,"targetElement",null);r(this,"_activePointerEvents");r(this,"_lastTimeClickOnBackground",-1);r(this,"_clickOnBackgroundCount",0);r(this,"_onPointerDown",e=>{this._activePointerEvents.push(e)});r(this,"_onPointerDownLate",e=>{e.used&&this._controls&&(this._controls.enabled=!1)});r(this,"_onPointerUp",e=>{for(let i=this._activePointerEvents.length-1;i>=0;i--){const n=this._activePointerEvents[i];if(n.pointerId===e.pointerId&&n.button===e.button){this._activePointerEvents.splice(i,1);break}}if(this.clickBackgroundToFitScene>0&&e.isClick&&e.button===0){if(e.hasRay||e.intersections.push(...this.context.physics.raycast()),e.intersections.length<=0){const i=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||i<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}Ui&&console.log(this.clickBackgroundToFitScene,e.intersections.length,this._clickOnBackgroundCount)}});r(this,"_onPointerUpLate",e=>{this.doubleClickToFocus&&e.isDoubleClick&&!e.used&&this.setTargetFromRaycast()});r(this,"_orbitStartAngle",0);r(this,"onControlsChangeStarted",()=>{this._controls&&(this._orbitStartAngle=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()),this._syncedTransform&&this._syncedTransform.requestOwnership()});r(this,"onControlsChangeEnded",()=>{if(this._controls&&this.autoTarget){const i=this._controls.getAzimuthalAngle()+this._controls.getPolarAngle()-this._orbitStartAngle;Math.abs(i)<.01?(Ui&&console.debug("OrbitControls: No movement detected, updating target now"),this.updateTargetNow()):Ui&&console.debug("OrbitControls: Movement detected",i)}});r(this,"_shouldDisable",!1);r(this,"__onPreRender",()=>{const e=this.context.pre_render_callbacks.indexOf(this.__onPreRender);e>=0&&this.context.pre_render_callbacks.splice(e,1),this.autoFit&&(this.autoFit=!1,this.fitCamera({centerCamera:"y",immediate:!0,objects:this.scene.children}))});r(this,"_haveAttachedKeyboardEvents",!1)}get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){var i;(i=this.controls)==null||i.addEventListener("start",e)}get targetLerpSpeed(){return 5}set targetLerpSpeed(e){this.targetLerpDuration=1/e}awake(){Ui&&console.debug("OrbitControls",this),this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._eventSystem=Qt.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(Sm.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){var e,i;(e=this._controls)==null||e.dispose(),(i=this._eventSystem)==null||i.removeEventListener(Sm.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const e=C.getComponent(this.gameObject,ri);this._camera=e;let i=e==null?void 0:e.threeCamera;if(!i&&this.gameObject instanceof d.PerspectiveCamera&&(i=this.gameObject),i&&Kp(i,this,!0),!this._controls&&i instanceof d.Object3D){this._cameraObject=i;const n=this.targetElement??this.context.renderer.domElement,s=i==null?void 0:i.quaternion.clone();this._controls=new G.OrbitControls(i,n),i==null||i.quaternion.copy(s),cp===void 0&&(cp={...this._controls.keys});const a=Q(i),l=this.gameObject.worldForward,h=a.clone().sub(l.multiplyScalar(2.5));this._controls.target.copy(h)}if(this._controls)if(lp&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,exports.DeviceUtilities.isMobileDevice()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),this._controls.addEventListener("end",this.onControlsChangeEnded),!this._startedListeningToKeyEvents&&this.enableKeys)this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(this.context.domElement);else try{this._controls.stopListenToKeyEvents()}catch{}this._syncedTransform=C.getComponent(this.gameObject,es)??void 0,this.context.pre_render_callbacks.push(this.__onPreRender),this._activePointerEvents=[],this.context.input.addEventListener("pointerdown",this._onPointerDown,{queue:oi.Early}),this.context.input.addEventListener("pointerdown",this._onPointerDownLate,{queue:oi.Late}),this.context.input.addEventListener("pointerup",this._onPointerUp,{queue:oi.Early}),this.context.input.addEventListener("pointerup",this._onPointerUpLate,{queue:oi.Late})}onDisable(){var e;if((e=this._camera)!=null&&e.threeCamera&&Kp(this._camera.threeCamera,this,!1),this._controls){this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted),this._controls.removeEventListener("end",this.onControlsChangeEnded);try{this._controls.stopListenToKeyEvents()}catch{}this._startedListeningToKeyEvents=!1}this._activePointerEvents.length=0,this.context.input.removeEventListener("pointerdown",this._onPointerDown),this.context.input.removeEventListener("pointerdown",this._onPointerDownLate),this.context.input.removeEventListener("pointerup",this._onPointerUp),this.context.input.removeEventListener("pointerup",this._onPointerUpLate)}updateTargetNow(){var s,a,l;const e=new d.Ray((s=this._cameraObject)==null?void 0:s.worldPosition,(a=this._cameraObject)==null?void 0:a.worldForward.multiplyScalar(-1)),i=this.context.physics.raycastFromRay(e),n=i.length>0?i[0]:void 0;n&&n.distance>this.minZoom&&n.distance<this.maxZoom&&(Ui&&V.DrawWireSphere(n.point,.1,16711680,2),(l=this._controls)==null||l.target.copy(i[0].point))}afterHandleInput(e){e.detail.args.pointerId===0&&(e.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!e.detail.args.isPressed||e.detail.args.isUp)&&(this._shouldDisable=!1))}onBeforeRender(){var i,n,s,a;if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&((i=this.context.input.getPointerPositionDelta(0))!=null&&i.length()))&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const l=C.getComponent(this.gameObject,ri);if(l&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const c=Q(l.threeCamera),h=Math.max(.01,c.length()),u=new d.Vector3(0,0,-h).applyMatrix4(l.threeCamera.matrixWorld);Ui&&V.DrawLine(c,u,5592575,10),this.setLookTargetPosition(u,!0)}if(!this.setLookTargetFromConstraint()){const c=new Jn;c.screenPoint=new d.Vector2(0,0),c.lineThreshold=.1;const h=this.context.physics.raycast(c);h.length>0&&this.setLookTargetPosition(h[0].point,!0),El&&console.log("OrbitControls hits",...h)}}if(this.middleClickToFocus&&this.context.input.getPointerClicked(1)&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive||this._fovLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new Bc(this,"camera"));else{const l=z.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,l)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this._controls.target.copy(this._lookTargetEndPosition),this._lookTargetLerpActive=!1,this.dispatchEvent(new Bc(this,"lookat"));else{const l=z.easeInOutCubic(this._lookTargetLerp01);this._controls.target.lerpVectors(this._lookTargetStartPosition,this._lookTargetEndPosition,l)}if(this._fovLerpActive&&this._cameraObject){const l=this._cameraObject;if(this._fovLerp01+=this.context.time.deltaTime/this._fovLerpDuration,this._fovLerp01>=1)l.fov=this._fovLerpEndValue,this._fovLerpActive=!1;else{const c=z.easeInOutCubic(this._fovLerp01);l.fov=z.lerp(this._fovLerpStartValue,this._fovLerpEndValue,c)}l.updateProjectionMatrix()}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR&&!this._activePointerEvents.some(l=>l.used),this._controls.keys=this.enableKeys?cp:XP,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,lp||(((s=(n=this._camera)==null?void 0:n.threeCamera)==null?void 0:s.type)==="PerspectiveCamera"?(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom,this._controls.minZoom=0,this._controls.maxZoom=1/0):(this._controls.minDistance=0,this._controls.maxDistance=1/0,this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom)),typeof cd=="number"||cd===!0){this._controls.enableDamping=!0;const l=typeof cd=="number"?cd:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,l))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!lp&&((a=this.lookAtConstraint)!=null&&a.locked)&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(this.context.time.deltaTime),Ui&&V.DrawWireSphere(this._controls.target,.1,65280))}}setCameraAndLookTarget(e,i=!1){if(!e)return(j()||Ui)&&console.warn("[OrbitControls] setCameraAndLookTarget target is null"),!1;if(!(e instanceof d.Object3D)&&!(e instanceof ri))return(j()||Ui)&&console.warn("[OrbitControls] setCameraAndLookTarget target is not an Object3D or Camera"),!1;e instanceof ri&&(e=e.gameObject);const n=e.worldPosition,s=e.worldForward;e instanceof d.Camera&&(Ui&&console.debug("[OrbitControls] setCameraAndLookTarget flip forward direction for camera"),s.multiplyScalar(-1));const a=new d.Ray(n,s);return Ui&&V.DrawRay(a.origin,a.direction,16711680,10),this.setTargetFromRaycast(a,i)||this.setLookTargetPosition(a.at(2,$()),i),this.setCameraTargetPosition(n,i),!0}setCameraTargetPosition(e,i=!1){var n;e&&(e instanceof d.Object3D&&(e=Q(e)),this._cameraEndPosition||(this._cameraEndPosition=new d.Vector3),this._cameraEndPosition.copy(e),i===!0?(this._cameraLerpActive=!1,this._cameraObject&&this._cameraObject.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy((n=this._cameraObject)==null?void 0:n.position),typeof i=="number"?this._cameraLerpDuration=i:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setFieldOfView(e,i=!1){var s;if(!this._controls||typeof e!="number")return;const n=(s=this._camera)==null?void 0:s.threeCamera;n&&(i===!0?n.fov=e:(this._fovLerpActive=!0,this._fovLerp01=0,this._fovLerpStartValue=n.fov,this._fovLerpEndValue=e,typeof i=="number"?this._fovLerpDuration=i:this._fovLerpDuration=this.targetLerpDuration))}setLookTargetPosition(e=null,i=!1){this._controls&&e&&(e instanceof d.Object3D&&(e=Q(e)),this._lookTargetEndPosition.copy(e),this._didSetTarget++,Ui&&(console.warn("OrbitControls: setLookTargetPosition",e,i),V.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),i===!0?this._controls.target.copy(this._lookTargetEndPosition):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof i=="number"?this._lookTargetLerpDuration=i:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(e=0,i=1){var s,a;if(!this._controls||((s=this.lookAtConstraint)==null?void 0:s.enabled)===!1)return!1;const n=(a=this.lookAtConstraint)==null?void 0:a.sources;if(n&&n.length>0){const l=n[e];if(l)return l.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._lookTargetEndPosition,i),!0}return!1}lerpTarget(e,i){return this.lerpLookTarget(e,i)}lerpLookTarget(e,i){this._controls&&(i>=1?this._controls.target.copy(e):this._controls.target.lerp(e,i))}setTargetFromRaycast(e,i=!1){if(!this.controls)return!1;const n=e?this.context.physics.raycastFromRay(e):this.context.physics.raycast();for(const s of n)if(s.distance>0&&C.isActiveInHierarchy(s.object)){const a=Rg(s.object);if(a){const l=a.canvas;if(l!=null&&l.screenspace)break}return this.setLookTargetPosition(s.point,i),!0}return!1}fitCamera(e,i){var H,B;if(this.context.isInXR)return;let n;if(Array.isArray(e)?n=e:e&&"type"in e?n=e.children:e&&typeof e=="object"&&!(e instanceof d.Object3D)&&!Array.isArray(e)&&(i=e,n=i.objects),n&&!Array.isArray(n)&&(n=n.children),(!Array.isArray(n)||n&&n.length<=0)&&(n=this.context.scene.children),!Array.isArray(n)||n.length<=0){console.warn("No objects to fit camera to...");return}const s=this._cameraObject,a=this._controls;if(!s||!a){console.warn("No camera or controls found to fit camera to objects...");return}i||(i={});const{immediate:l=!1,centerCamera:c="y",cameraNearFar:h="auto",fitOffset:u=1.1,fov:f=s==null?void 0:s.fov}=i,p=new d.Vector3,g=new d.Vector3,y=li(n,void 0,(B=(H=this._camera)==null?void 0:H.threeCamera)==null?void 0:B.layers),b=y.clone();s.updateMatrixWorld(),s.updateProjectionMatrix(),y.getCenter(g);const _=new d.Vector3;if(y.getSize(_),y.applyMatrix4(s.matrixWorldInverse),y.getSize(p),y.setFromCenterAndSize(g,p),Number.isNaN(p.x)||Number.isNaN(p.y)||Number.isNaN(p.z)){console.warn("Camera fit size resultet in NaN",s,y,[...n]);return}if(p.length()<=1e-10){El&&console.warn("Camera fit size is zero",y,[...n]);return}const v=i.fov||s.fov,w=2*Math.atan(Math.tan(v*Math.PI/360/2)*s.aspect)/Math.PI*360,x=p.y/(2*Math.atan(Math.PI*v/360)),O=p.x/(2*Math.atan(Math.PI*w/360)),M=u*Math.max(x,O)+p.z/2;El&&console.log("Fit camera to objects",{fitHeightDistance:x,fitWidthDistance:O,distance:M,verticalFov:v,horizontalFov:w}),this.maxZoom=M*10,this.minZoom=M*.01;const R=.05,E=g.clone();if(E.y-=p.y*R,this.setLookTargetPosition(E,l),this.setFieldOfView(i.fov,l),h==null||h=="auto"){const I=C.findObjectOfType(ss),N=I?I.radius:0,Y=Math.max(_.x,_.y,_.z,N);s.near=M/100,s.far=Y+M*10,I&&(this.maxZoom=Math.max(Math.min(this.maxZoom,N*.5),M))}const F=a.getDistance();F<this.minZoom&&(this.minZoom=F*.9),F>this.maxZoom&&(this.maxZoom=F*1.1),s.updateMatrixWorld(),s.updateProjectionMatrix();const T=Q(s),L=g.clone();L.sub(T),c==="y"&&(L.y=0),L.normalize(),L.multiplyScalar(M),c==="y"&&(L.y+=-R*4*M);let A=g.clone().sub(L);s.parent&&(A=s.parent.worldToLocal(A)),this.setCameraTargetPosition(A,l),(El||i.debug)&&(V.DrawWireBox3(y,16777011,10),V.DrawWireBox3(b,65280,10),!this._haveAttachedKeyboardEvents&&El&&(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",I=>{if(I.code==="KeyF"){let N;this._cameraObject instanceof d.PerspectiveCamera&&(N=Math.random()*Math.random()*170+10),this.fitCamera({objects:n,fitOffset:u,immediate:!1,fov:N})}I.code==="KeyV"&&this._cameraObject instanceof d.PerspectiveCamera&&(this._cameraObject.fov=60)}))),this.onBeforeRender()}}Te([m()],ge.prototype,"autoTarget");Te([m()],ge.prototype,"autoFit");Te([m()],ge.prototype,"enableRotate");Te([m()],ge.prototype,"autoRotate");Te([m()],ge.prototype,"autoRotateSpeed");Te([m()],ge.prototype,"minAzimuthAngle");Te([m()],ge.prototype,"maxAzimuthAngle");Te([m()],ge.prototype,"minPolarAngle");Te([m()],ge.prototype,"maxPolarAngle");Te([m()],ge.prototype,"enableKeys");Te([m()],ge.prototype,"enableDamping");Te([m()],ge.prototype,"dampingFactor");Te([m()],ge.prototype,"enableZoom");Te([m()],ge.prototype,"minZoom");Te([m()],ge.prototype,"maxZoom");Te([m()],ge.prototype,"zoomSpeed");Te([m()],ge.prototype,"enablePan");Te([m(Ur)],ge.prototype,"lookAtConstraint");Te([m()],ge.prototype,"lookAtConstraint01");Te([m()],ge.prototype,"allowInterrupt");Te([m()],ge.prototype,"middleClickToFocus");Te([m()],ge.prototype,"doubleClickToFocus");Te([m()],ge.prototype,"clickBackgroundToFitScene");Te([m()],ge.prototype,"targetLerpDuration");var QP=Object.defineProperty,YP=Object.getOwnPropertyDescriptor,Kt=(o,t,e,i)=>{for(var n=i>1?void 0:i?YP(t,e):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=(i?a(t,e,n):a(n))||n);return i&&n&&QP(t,e,n),n},Co=(o=>(o[o.None=0]="None",o[o.Skybox=1]="Skybox",o[o.SolidColor=2]="SolidColor",o[o.Uninitialized=4]="Uninitialized",o))(Co||{});const io=S("debugcam"),ab=S("debugscreenpointtoray");var pn;const Lt=(pn=class extends D{constructor(){super(...arguments);r(this,"_nearClipPlane",.1);r(this,"_farClipPlane",1e3);r(this,"orthographic",!1);r(this,"orthographicSize",5);r(this,"ARBackgroundAlpha",0);r(this,"_cullingMask",4294967295);r(this,"_backgroundBlurriness");r(this,"_backgroundIntensity");r(this,"_backgroundRotation");r(this,"_environmentIntensity");r(this,"_targetTexture",null);r(this,"_backgroundColor");r(this,"_fov");r(this,"_cam",null);r(this,"_clearFlags",2);r(this,"_skybox");r(this,"_frustum");r(this,"_projScreenMatrix",new d.Matrix4)}get isCamera(){return!0}get aspect(){return this._cam instanceof d.PerspectiveCamera?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof d.PerspectiveCamera&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof d.PerspectiveCamera?this._cam.fov:this._fov}set fieldOfView(e){const i=this.fieldOfView!=e;if(this._fov=e,i&&this._cam&&this._cam instanceof d.PerspectiveCamera){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const i=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&(i||this._cam.near!=e)&&(this._cam.near=e,this._cam.updateProjectionMatrix())}get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const i=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&(i||this._cam.far!=e)&&(this._cam.far=e,this._cam.updateProjectionMatrix())}applyClippingPlane(){this._cam&&(this._cam.near=this._nearClipPlane,this._cam.far=this._farClipPlane,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){if(typeof e=="string")switch(e){case"skybox":e=1;break;case"solidcolor":e=2;break;default:e=0;break}e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}set backgroundRotation(e){e!==this._backgroundRotation&&(e===void 0?this._backgroundRotation=void 0:this._backgroundRotation=e,this.applyClearFlagsIfIsActiveCamera())}get backgroundRotation(){return this._backgroundRotation}set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){e&&(this._backgroundColor||(this._backgroundColor=new ie(1,1,1,1)),this._backgroundColor.copy(e),(!("alpha"in e)||e.alpha===void 0)&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera())}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}get cam(){return this.threeCamera}get threeCamera(){return this.activeAndEnabled&&this.buildCamera(),this._cam}screenPointToRay(e,i,n){const s=this.threeCamera,a=pn._origin;a.set(e,i,-1),this.context.input.convertScreenspaceToRaycastSpace(a),ab&&console.log("screenPointToRay",e.toFixed(2),i.toFixed(2),"now:",a.x.toFixed(2),a.y.toFixed(2),"isInXR:"+this.context.isInXR),a.z=-1,a.unproject(s);const l=pn._direction.set(a.x,a.y,a.z),c=Q(s);return l.sub(c),l.normalize(),n?(n.set(c,l),n):new d.Ray(c.clone(),l.clone())}getFrustum(){return this._frustum||(this._frustum=new d.Frustum,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new d.Frustum),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,i){return i&&this._projScreenMatrix.multiplyMatrices(this.threeCamera.projectionMatrix,this.threeCamera.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}awake(){ab&&window.addEventListener("pointerdown",e=>{const i=e.clientX,n=e.clientY;console.log("touch",i.toFixed(2),n.toFixed(2));const s=this.screenPointToRay(i,n),a="#"+Math.floor(Math.random()*16777215).toString(16);V.DrawRay(s.origin,s.direction,a,10)})}onEnable(){io&&console.log(`Camera enabled: "${this.name}". ClearFlags=${Co[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),ZP(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const i=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),i==null||i.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let i=null;if(e?(i=this.gameObject,i==null||i.layers.enableAll(),i instanceof d.PerspectiveCamera&&(this._fov=i.fov)):i=this.gameObject.children[0],i&&i.isCamera)i instanceof d.PerspectiveCamera&&(this._fov&&(i.fov=this._fov),i.near=this._nearClipPlane,i.far=this._farClipPlane,i.updateProjectionMatrix());else if(!this.orthographic)i=new d.PerspectiveCamera(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(i.fov=this.fieldOfView),this.gameObject.add(i);else{const n=this.orthographicSize*100;i=new d.OrthographicCamera(window.innerWidth/-n,window.innerWidth/n,window.innerHeight/n,window.innerHeight/-n,this._nearClipPlane,this._farClipPlane),this.gameObject.add(i)}this._cam=i,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){var n;if(!this._cam){io&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this._fov,io){const s=`[Camera] Apply ClearFlags: ${Co[this._clearFlags]} - "${this.name}"`;console.debug(s)}const i=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color");switch(this._clearFlags){case 0:return;case 1:if(pn.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||(e==null?void 0:e.applySkybox)===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0&&!this.context.domElement.getAttribute("background-blurriness")?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:io&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0&&!this.context.domElement.getAttribute("background-intensity")&&(this.context.scene.backgroundIntensity=this._backgroundIntensity),this._backgroundRotation!==void 0&&!this.context.domElement.getAttribute("background-rotation")?this.context.scene.backgroundRotation=this._backgroundRotation:io&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor&&!i){let s=this._backgroundColor.alpha;pn.backgroundShouldBeTransparent(this.context)&&(s=this.ARBackgroundAlpha??0),this.context.scene.background=null,(n=this.context.xr)!=null&&n.isVR?this.context.renderer.setClearColor(x0(this._backgroundColor).convertLinearToSRGB()):this.context.renderer.setClearColor(this._backgroundColor,s)}else this._backgroundColor||io&&console.warn(`[Camera] has no background color "${this.name}" `);break;case 4:i||(this.context.scene.background=null,this.context.renderer.setClearColor(0,0));break}}applySceneSkybox(){this._skybox||(this._skybox=new KP(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){var a,l,c,h;const i=(a=e.renderer.xr)==null?void 0:a.getSession();if(!i)return!1;if(typeof i._transparent=="boolean")return i._transparent;const n=i.environmentBlendMode;io&&Ee("Environment blend mode: "+n+" on "+navigator.userAgent);let s=n==="additive"||n==="alpha-blend";return e.isInAR&&n==="opaque"&&((l=navigator.userAgent)!=null&&l.includes("OculusBrowser")||(c=navigator.userAgent)!=null&&c.includes("Mozilla")&&((h=navigator.userAgent)!=null&&h.includes("Mobile WebXRViewer/v2")))&&(s=!0),i._transparent=s,s}},r(pn,"_origin",new d.Vector3),r(pn,"_direction",new d.Vector3),pn);Kt([m()],Lt.prototype,"aspect",1);Kt([m()],Lt.prototype,"fieldOfView",1);Kt([m()],Lt.prototype,"nearClipPlane",1);Kt([m()],Lt.prototype,"farClipPlane",1);Kt([m()],Lt.prototype,"clearFlags",1);Kt([m()],Lt.prototype,"orthographic",2);Kt([m()],Lt.prototype,"orthographicSize",2);Kt([m()],Lt.prototype,"ARBackgroundAlpha",2);Kt([m()],Lt.prototype,"cullingMask",1);Kt([m()],Lt.prototype,"backgroundBlurriness",1);Kt([m()],Lt.prototype,"backgroundIntensity",1);Kt([m(d.Euler)],Lt.prototype,"backgroundRotation",1);Kt([m()],Lt.prototype,"environmentIntensity",1);Kt([m(ie)],Lt.prototype,"backgroundColor",1);Kt([m(Sr)],Lt.prototype,"targetTexture",1);let ri=Lt;class KP{constructor(t){r(this,"_camera");r(this,"_skybox");this._camera=t}get context(){var t;return(t=this._camera)==null?void 0:t.context}apply(){var t;if(this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),!this._skybox)this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" has no skybox texture. ${this._camera.sourceId}`));else if(this.context.scene.background!==this._skybox){const e=this.context.domElement.getAttribute("background-image")||this.context.domElement.getAttribute("background-color")||this.context.domElement.getAttribute("skybox-image");io&&console.debug(`[Camera] Apply Skybox ${(t=this._skybox)==null?void 0:t.name} ${e} - "${this._camera.name}"`),e!=null&&e.length||(this._skybox.mapping=d.EquirectangularReflectionMapping,this.context.scene.background=this._skybox)}}}function ZP(o){S("freecam")&&o.context.mainCameraComponent===o&&C.getOrAddComponent(o.gameObject,ge)}class Ms extends D{constructor(){super(...arguments);r(this,"_listener",null);r(this,"onInteraction",()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()})}get listener(){return this._listener==null&&(this._listener=new d.AudioListener),this._listener}onEnable(){wn.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){wn.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}addListenerIfItExists(){const e=this._listener;if(!e||e!=null&&e.parent)return;const i=this.context.mainCameraComponent||C.getComponentInParent(this.gameObject,ri);i!=null&&i.threeCamera?i.threeCamera.add(e):this.gameObject.add(e),e.filter?(e.gain.connect(e.filter),e.filter.connect(e.context.destination)):e.gain.connect(e.context.destination)}removeListenerIfItExists(){const e=this._listener;e&&(e.removeFromParent(),e.filter&&e.filter.disconnect(),e.gain&&e.gain.disconnect())}}var JP=Object.defineProperty,eM=Object.getOwnPropertyDescriptor,Cn=(o,t,e,i)=>{for(var n=i>1?void 0:i?eM(t,e):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=(i?a(t,e,n):a(n))||n);return i&&n&&JP(t,e,n),n};const gt=S("debugaudio"),Zi=class no extends D{constructor(){super(...arguments);r(this,"clip","");r(this,"playOnAwake",!1);r(this,"preload",!0);r(this,"playInBackground",!0);r(this,"_spatialBlend",0);r(this,"_minDistance",1);r(this,"_maxDistance",100);r(this,"_volume",1);r(this,"rollOffMode",0);r(this,"_loop",!1);r(this,"sound",null);r(this,"helper",null);r(this,"wasPlaying",!1);r(this,"audioLoader",null);r(this,"shouldPlay",!1);r(this,"_lastClipStartedLoading",null);r(this,"_audioElement",null);r(this,"onVisibilityChanged",()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||exports.DeviceUtilities.isMobileDevice())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":gt&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,no.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&no.userInteractionRegistered&&this.wasPlaying&&this.play();break}});r(this,"onApplicationMuteChanged",()=>{var e,i;this.context.application.muted?(e=this.sound)==null||e.setVolume(0):(i=this.sound)==null||i.setVolume(this.volume)});r(this,"createAudio",e=>{if(this.destroyed){gt&&console.warn("AudioSource destroyed, not creating audio",this.name);return}gt&&console.log("AudioBuffer finished loading",e);const i=this.Sound;if(!i){gt&&console.warn("Failed getting sound?",this.name);return}i.isPlaying&&i.stop(),e&&i.setBuffer(e),i.loop=this._loop,this.context.application.muted?i.setVolume(0):i.setVolume(this.volume),i.autoplay=this.shouldPlay&&no.userInteractionRegistered,this.applySpatialDistanceSettings(),i.isPlaying&&i.stop(),no.registerWaitForAllowAudio(this.__onAllowAudioCallback)});r(this,"__onAllowAudioCallback",()=>{this.shouldPlay&&this.play()});r(this,"_lastContextTime",0);r(this,"_hasEnded",!0);r(this,"_needUpdateSpatialDistanceSettings",!1)}static get userInteractionRegistered(){return wn.userInteractionRegistered}static registerWaitForAllowAudio(e){wn.registerWaitForInteraction(e)}get isPlaying(){var e;return((e=this.sound)==null?void 0:e.isPlaying)??!1}get duration(){var e,i;return(i=(e=this.sound)==null?void 0:e.buffer)==null?void 0:i.duration}get time01(){var i;const e=this.duration;return e&&this.sound?((i=this.sound)==null?void 0:i.context.currentTime)/e:0}set time01(e){const i=this.duration;i&&this.sound&&(this.time=e*i)}get time(){var e,i;return(e=this.sound)!=null&&e.source?((i=this.sound.source)==null?void 0:i.context.currentTime)-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const i=this.isPlaying;this.stop(),this.sound.offset=e,i&&this.play()}}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(gt&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}set pitch(e){this.sound&&this.sound.setPlaybackRate(e)}get pitch(){return this.sound?this.sound.getPlaybackRate():1}get Sound(){var e;if(!this.sound&&no.userInteractionRegistered){let i=this.gameObject.getComponent(Ms)??this.context.mainCamera.getComponent(Ms)??ch(Ms,this.context,!1);!i&&this.context.mainCamera&&(i=this.context.mainCamera.addComponent(Ms)),i!=null&&i.listener?(this.sound=new d.PositionalAudio(i.listener),(e=this.gameObject)==null||e.add(this.sound)):gt&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){var e;return(e=this.sound)==null?void 0:e.context}awake(){gt&&console.log("[AudioSource]",this),this.audioLoader=new d.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),no.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():no.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(im.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(im.MuteChanged,this.onApplicationMuteChanged),this.pause()}applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const i=z.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(gt&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+i),e.setRefDistance(i),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?gt&&!this.helper&&(this.helper=new G.PositionalAudioHelper(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(gt&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new d.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===e){gt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,gt&&console.log("load audio",e);const i=await this.audioLoader.loadAsync(e).catch(console.error);if(this.destroyed)return;this._lastClipStartedLoading===e&&(this._lastClipStartedLoading=null),i&&this.createAudio(i)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){var n,s,a;!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(j()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
|
|
940
940
|
Using the assigned clip instead:`,this.clip),e=this.clip);let i=!this.sound||e&&e!==this.clip;if(typeof e=="string"&&!this.audioLoader&&(i=!0),(e instanceof MediaStream||typeof e=="string")&&(this.clip=e),i){this.shouldPlay=!0,this.onNewClip(e);return}if(this.shouldPlay=!0,this._hasEnded=!1,gt&&console.log("play",(n=this.sound)==null?void 0:n.getVolume(),this.sound),this.sound&&!this.sound.isPlaying){const l=this.context.application.muted;l&&this.sound.setVolume(0),(s=this.gameObject)==null||s.add(this.sound),this.clip instanceof MediaStream?(this.sound.setMediaStreamSource(this.clip),this._audioElement||(this._audioElement=document.createElement("audio"),this._audioElement.style.display="none"),this._audioElement.parentNode||(a=this.context.domElement.shadowRoot)==null||a.append(this._audioElement),this._audioElement.srcObject=this.clip,this._audioElement.autoplay=!1):(this._audioElement&&this._audioElement.remove(),this.sound.play(l?.1:0))}}pause(){var e,i;gt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=(e=this.sound)==null?void 0:e.context.currentTime,this.sound.pause()),(i=this._audioElement)==null||i.remove()}stop(){var e,i;gt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=(e=this.sound)==null?void 0:e.context.currentTime,gt&&console.log(this._lastContextTime),this.sound.stop()),(i=this._audioElement)==null||i.remove()}update(){this.helper&&(this.isPlaying&&this.helper.update(),this.helper.visible=this.isPlaying),this._needUpdateSpatialDistanceSettings&&this.applySpatialDistanceSettings(),this.sound&&!this.sound.isPlaying&&this.shouldPlay&&!this._hasEnded&&(this._hasEnded=!0,gt&&console.log("Audio clip ended",this.clip),this.dispatchEvent(new CustomEvent("ended",{detail:this})))}};Cn([m(URL)],Zi.prototype,"clip",2);Cn([m()],Zi.prototype,"playOnAwake",2);Cn([m()],Zi.prototype,"preload",2);Cn([m()],Zi.prototype,"playInBackground",2);Cn([m()],Zi.prototype,"loop",1);Cn([m()],Zi.prototype,"spatialBlend",1);Cn([m()],Zi.prototype,"minDistance",1);Cn([m()],Zi.prototype,"maxDistance",1);Cn([m()],Zi.prototype,"volume",1);Cn([m()],Zi.prototype,"pitch",1);Cn([m()],Zi.prototype,"rollOffMode",2);let qi=Zi;const tM=S("debugavatar"),ni=class ni extends D{constructor(){super(...arguments);r(this,"connectionId");r(this,"avatar")}static getAvatar(e){return e>=0&&e<ni.instances.length?ni.instances[e]:null}static onAvatarMarkerCreated(e){return ni._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return ni._onAvatarMarkerDestroyed.push(e),e}awake(){ni.instances.push(this),tM&&console.log(this);for(const e of ni._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){ni.instances.splice(ni.instances.indexOf(this),1);for(const e of ni._onAvatarMarkerDestroyed)e({avatarMarker:this,gameObject:this.gameObject})}isLocalAvatar(){return this.connectionId===this.context.connection.connectionId}};r(ni,"instances",[]),r(ni,"_onNewAvatarMarkerAdded",[]),r(ni,"_onAvatarMarkerDestroyed",[]);let At=ni;class Ts{static Add(t,e,i=null){if(e){for(const n of this.Pois)if(n.obj===e)return;this.Pois.push({obj:e,avatar:i}),this.LastChangeTime=t.time.time}}static Remove(t,e){var i;if(e){for(const n of this.Pois)if(n.obj===e){this.Pois.splice(this.Pois.indexOf(n),1),this.LastChangeTime=(t==null?void 0:t.time.time)??((i=X.Current)==null?void 0:i.time.time);return}}}}r(Ts,"Pois",[]),r(Ts,"LastChangeTime",0);class iM{constructor(){r(this,"guid");r(this,"position",new d.Vector3)}}class Fc extends D{constructor(){super(...arguments);r(this,"target",null);r(this,"avatar",null);r(this,"_model",null);r(this,"_targetModel",new iM);r(this,"_currentTargetObject",null);r(this,"_lastUpdateTime",0);r(this,"_lookDuration",0);r(this,"_lastPoiChangedTime",0)}set controlledTarget(e){this.target=e;const i=k.get("MoveRandom");if(i&&this.target){const n=C.getComponent(this.target,i);n&&n.destroy()}}awake(){if(this.avatar=C.getComponentInParent(this.gameObject,At),this.avatar){const e=C.getComponentInParent(this.gameObject,At);this._model=new lg(this.context.connection,this.guid),e!=null&&e.isLocalAvatar&&this._model.requestOwnership()}this.context.connection.beginListen("avatar-look-target-changed",e=>{var i;this.target&&e&&e.guid===((i=this.avatar)==null?void 0:i.guid)&&st(this.target,e.position)})}update(){var i;if((!this.context.connection.isConnected||(i=this._model)!=null&&i.hasOwnership)&&(Ts.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=Ts.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){const n=Q(this._currentTargetObject);st(this.target,n),this.context.connection.isConnected&&this.avatar&&(this.context.connection.send("avatar-look-target-changed",this._targetModel),this._targetModel.guid=this.avatar.guid,this._targetModel.position.copy(n))}}selectTarget(){if(this.context.time.time-this._lastUpdateTime>this._lookDuration){this._lastUpdateTime=this.context.time.time,this._lookDuration=Math.random()*.5+.2;const i=Ts.Pois;if(i.length>0){const n=i[Math.floor(Math.random()*i.length)];if(n&&n.obj){if(n.avatar&&n.avatar===this.avatar)return;this._currentTargetObject=n.obj}}}}}function uw(o){const t=o;return!!(t.parser&&t.parser.json)}var Ku=(o=>(o[o.None=0]="None",o[o.DontExport=1]="DontExport",o))(Ku||{});function fw(o){return o&&o.isComponent}const nM=Symbol("object"),hp=new ki(()=>new d.Vector3,20);class pw{constructor(t,e,i,n,s,a){r(this,"_point");r(this,"_normal");r(this,"_tangentVelocity");r(this,"distance");r(this,"impulse");r(this,"friction");this._point=t,this.distance=e,this._normal=i,this.impulse=n,this.friction=s,this._tangentVelocity=a}get point(){return hp.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return hp.get().set(this._normal.x,this._normal.y,this._normal.z)}get tangentVelocity(){return hp.get().set(this._tangentVelocity.x,this._tangentVelocity.y,this._tangentVelocity.z)}}class mw{constructor(t,e,i){r(this,"contacts");r(this,"me");r(this,"_collider");r(this,"_gameObject");this.me=t,this._collider=e,this._gameObject=e.gameObject,this.contacts=i}get collider(){return this._collider}get gameObject(){return this._gameObject}get rigidBody(){var t;return(t=this.collider)==null?void 0:t.attachedRigidbody}}class gw{constructor(t,e){r(this,"object");r(this,"collider");this.object=t,this.collider=e}}const $e=S("debugnetworkingstreams");var Nn=(o=>(o.Connected="peer-user-connected",o.StreamReceived="receive-stream",o.StreamEnded="call-ended",o.Disconnected="peer-user-disconnected",o.UserJoined="user-joined",o))(Nn||{});class Eg{constructor(t,e){r(this,"type","call-ended");r(this,"userId");r(this,"direction");this.userId=t,this.direction=e}}class yw{constructor(t,e,i){r(this,"type","receive-stream");r(this,"userId");r(this,"stream");r(this,"target");this.userId=t,this.stream=e,this.target=i}}class sM{constructor(t,e){r(this,"guid");r(this,"peerId");r(this,"dontSave",!0);this.guid=t.id,this.peerId=e}}var _w=(o=>(o.Incoming="incoming",o.Outgoing="outgoing",o))(_w||{});class oM extends d.EventDispatcher{constructor(e,i,n,s=null){super();r(this,"peerId");r(this,"userId");r(this,"direction");r(this,"call");r(this,"_stream",null);r(this,"_isDisposed",!1);this.peerId=i.peer,this.userId=e,this.call=i,this.direction=n,this._stream=s,i.on("stream",a=>{if($e&&console.log("Receive stream",`
|
|
941
941
|
Audio:`,a.getAudioTracks(),`
|
|
942
942
|
Video:`,a.getVideoTracks()),this._stream=a,n==="incoming"){const l=new yw(e,a,this);this.dispatchEvent(l)}}),i.on("close",()=>{this.dispatchEvent(new Eg(e,n))})}get stream(){return this._stream}close(){this._isDisposed||(this._isDisposed=!0,this.call.close(),Vn(this._stream))}get isOpen(){var e;return((e=this.call.peerConnection)==null?void 0:e.connectionState)==="connected"}get isOpening(){var e;return((e=this.call.peerConnection)==null?void 0:e.connectionState)==="connecting"}get isClosed(){return!this.isOpen||this._isDisposed}}function lb(o){return o=o.replace("a=fmtp:111 minptime=10;useinbandfec=1","a=fmtp:111 ptime=5;useinbandfec=1;stereo=1;maxplaybackrate=48000;maxaveragebitrat=128000;sprop-stereo=1"),o}const rr=class rr extends d.EventDispatcher{constructor(e,i){super();r(this,"updateCalls",()=>{var e;for(let i=this._incomingCalls.length-1;i>=0;i--){const n=this._incomingCalls[i];n.isClosed&&!n.isOpening&&this._incomingCalls.splice(i,1)}for(let i=this._outgoingCalls.length-1;i>=0;i--){const n=this._outgoingCalls[i];let s=!1;n.isClosed&&!n.isOpening&&((e=n.stream)!=null&&e.active?$e&&console.warn("!!! Stream is still active, don't remove call",n.userId,"Your id: "+this.context.connection.connectionId):($e&&console.warn("!!! Remove closed call",n.userId),s=!0)),this.context.connection.userIsInRoom(n.userId)===!1&&($e&&console.warn("!!! User is not in room anymore, remove call",n.userId),s=!0),s&&(n.close(),this._outgoingCalls.splice(i,1))}});r(this,"id");r(this,"context");r(this,"_incomingCalls",[]);r(this,"_outgoingCalls",[]);r(this,"_peer");r(this,"_enabled",!1);r(this,"_enabledPeer",!1);r(this,"onConnectRoomFn",this.onConnectRoom.bind(this));r(this,"onPeerConnect",e=>{if($e&&console.log("PEER opened as",e),e===null){console.error("Peer connection failed",e);return}this.context.connection.send("peer-user-connected",new sM(this,e))});r(this,"onPeerClose",()=>{$e&&console.log("PEER closed"),this.updateCalls()});r(this,"onPeerDisconnected",()=>{$e&&console.log("PEER disconnected"),this.updateCalls()});r(this,"onPeerError",e=>{$e&&console.error("PEER error",e)});r(this,"onPeerReceivingCall",e=>{e.answer(void 0,{sdpTransform:i=>lb(i)}),this.registerCall(e,"incoming",null)});this.context=e,this.id=i,this.setupPeer(),navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia}static getOrCreate(e,i){if(rr.instances.has(i))return rr.instances.get(i);const n=new rr(e,i);return rr.instances.set(i,n),n}getMyPeerId(){if(this.context.connection.connectionId)return this.getPeerIdFromUserId(this.context.connection.connectionId)}getPeerIdFromUserId(e){return this.id+"-"+e}getUserIdFromPeerId(e){return e.substring(this.id.length+1)}makeCall(e,i){var a;if(!(i!=null&&i.id)){$e?console.warn("Can not make a call: mediastream has no id or is undefined"):console.debug("Can not make a call: mediastream has no id or is undefined");return}const n={metadata:{userId:this.context.connection.connectionId,streamId:i.id},sdpTransform:l=>lb(l)},s=(a=this._peer)==null?void 0:a.call(e,i,n);if(s){const l=this.registerCall(s,"outgoing",i);return $e&&console.warn(`📞 CALL ${e}`,`
|
|
@@ -1385,7 +1385,7 @@ If you need multisampling consider changing 'auto' to a fixed value (e.g. 4).`))
|
|
|
1385
1385
|
// be blended onto the scene.
|
|
1386
1386
|
gl_FragColor = vec4(direct, max);
|
|
1387
1387
|
return;
|
|
1388
|
-
`)},e.userData.isLightBlendMaterial=!0}applyShadowMaterial(){if(this.targetMesh)if(this.targetMesh.material.type!=="ShadowMaterial"){const e=new d.ShadowMaterial;e.color=this.shadowColor,e.opacity=this.shadowColor.alpha,this.applyMaterialOptions(e),this.targetMesh.material=e,e.userData.isShadowCatcherMaterial=!0}else{const e=this.targetMesh.material;e.color=this.shadowColor,e.opacity=this.shadowColor.alpha,this.applyMaterialOptions(e),e.userData.isShadowCatcherMaterial=!0}}applyOccluderMaterial(){if(this.targetMesh){let e=this.targetMesh.material;if(!e){const i=new d.MeshBasicMaterial;this.targetMesh.material=i,e=i}e.depthWrite=!0,e.stencilWrite=!0,e.colorWrite=!1,this.gameObject.renderOrder=-100}}applyMaterialOptions(e){e&&(e.depthWrite=!1,e.stencilWrite=!1)}}xx([m()],Uh.prototype,"mode");xx([m(ie)],Uh.prototype,"shadowColor");var UR=Object.defineProperty,zh=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&UR(t,e,n),n};const Ot=S("debugskybox");Iy("skybox-image");Iy("environment-image");function Nb(o,t,e,i,n){const s=new xf;s.allowDrop=!1,s.allowNetworking=!1,s.background=e,s.environment=i,C.addComponent(o.scene,s);const a=l=>{typeof l=="string"&&(Ot&&console.log(n,"CHANGED TO",l),s.setSkybox(l))};return h0(o.domElement,n,a),s.addEventListener("destroy",()=>{Ot&&console.log("Destroyed attribute remote skybox",n),d0(o.domElement,n,a)}),s.setSkybox(t)}const xu=new Array;re.registerCallback(he.ContextCreationStart,o=>{var n;const t=o.context,e=t.domElement.getAttribute("skybox-image")||t.domElement.getAttribute("background-image"),i=t.domElement.getAttribute("environment-image");if(e){Ot&&console.log("Creating remote skybox to load "+e),((n=t.mainCameraComponent)==null?void 0:n.clearFlags)!==Co.Skybox&&console.warn('"skybox-image"/"background-image" attribute has no effect: camera clearflags are not set to "Skybox"');const s=Nb(t,e,!0,!1,"skybox-image");xu.push(s)}if(i){Ot&&console.log("Creating remote environment to load "+i);const s=Nb(t,i,!1,!0,"environment-image");xu.push(s)}});re.registerCallback(he.ContextCreationStart,()=>Promise.all(xu).finally(()=>{xu.length=0}));function Sx(){return globalThis.NEEDLE_ENGINE_SKYBOX_TEXTURES||(globalThis.NEEDLE_ENGINE_SKYBOX_TEXTURES=new Array),globalThis.NEEDLE_ENGINE_SKYBOX_TEXTURES}function Vb(o){const e=Sx().find(i=>i.src===o);return e?(Ot&&console.log("Skybox: Found previously loaded texture for "+o),e.texture):null}async function zR(o){const t=await o;ug(t,!0),Se(t)}function NR(o,t){const e=Sx();for(;e.length>5;){const i=e.shift();i&&zR(i.texture)}t.then(i=>ug(i,!1)),e.push({src:o,texture:t})}const Lr=class extends D{constructor(){super(...arguments);r(this,"url");r(this,"allowDrop",!0);r(this,"background",!0);r(this,"environment",!0);r(this,"allowNetworking",!0);r(this,"_loader");r(this,"_prevUrl");r(this,"_prevLoadedEnvironment");r(this,"_prevEnvironment",null);r(this,"_prevBackground",null);r(this,"validTextureTypes",[".ktx2",".hdr",".exr",".jpg",".jpeg",".png"]);r(this,"onDragOverEvent",e=>{if(this.allowDrop&&e.dataTransfer)for(const i of e.dataTransfer.types)(i==="text/uri-list"||i==="Files")&&e.preventDefault()});r(this,"onDrop",e=>{var i,n,s,a;if(this.allowDrop&&e.dataTransfer){for(const l of e.dataTransfer.types)if(Ot&&console.log(l),l==="text/uri-list"){const c=e.dataTransfer.getData(l);Ot&&console.log(l,c);let h=(n=(i=new RegExp(/polyhaven.com\/asset_img\/.+?\/(?<name>.+)\.png/).exec(c))==null?void 0:i.groups)==null?void 0:n.name;if(h||(h=(a=(s=new RegExp(/polyhaven\.com\/a\/(?<name>.+)/).exec(c))==null?void 0:s.groups)==null?void 0:a.name),Ot&&console.log(h),h){const u="https://dl.polyhaven.org/file/ph-assets/HDRIs/exr/1k/"+h+"_1k.exr";console.log(`[Remote Skybox] Setting skybox from url: ${u}`),e.preventDefault(),this.setSkybox(u);break}else if(this.isValidTextureType(c)){console.log("[Remote Skybox] Setting skybox from url: "+c),e.preventDefault(),this.setSkybox(c);break}else{console.warn(`[RemoteSkybox] Unknown url ${c}. If you want to load a skybox from a url, make sure it is a valid image url. Url must end with${this.validTextureTypes.join(", ")}.`);const u=new CustomEvent("dropped-unknown-url",{detail:{sender:this,event:e,url:c,apply:f=>{e.preventDefault(),this.setSkybox(f)}}});this.dispatchEvent(u)}}else if(l=="Files"){const c=e.dataTransfer.files.item(0);if(Ot&&console.log(l,c),!c)continue;if(!this.isValidTextureType(c.name)){console.warn(`[RemoteSkybox]: File "${c.name}" is not supported. Supported files are ${this.validTextureTypes.join(", ")}`);return}if(Vb(c.name)===null){const h=new Blob([c]),u=URL.createObjectURL(h);e.preventDefault(),this.setSkybox(u,c.name)}else e.preventDefault(),this.setSkybox(c.name);break}}})}onEnable(){this.setSkybox(this.url),this.registerDropEvents()}onDisable(){var e;this.context.scene.environment===this._prevLoadedEnvironment&&(this.context.scene.environment=this._prevEnvironment,ri.backgroundShouldBeTransparent(this.context)||(this.context.scene.background=this._prevBackground),this._prevLoadedEnvironment=void 0),this.unregisterDropEvents(),(e=this.context.mainCameraComponent)==null||e.applyClearFlags()}urlChangedSyncField(){this.allowNetworking&&this.url&&(this.isRemoteTexture(this.url)?this.setSkybox(this.url):Ot&&console.warn(`RemoteSkybox: Not setting skybox: ${this.url} is not a remote texture. If you want to set a local texture, set allowNetworking to false.`))}async setSkybox(e,i){var a;if(!this.activeAndEnabled||(e=VR(e,this.environment,this.background),!e))return!1;if(i??(i=e),this.isValidTextureType(i)||console.warn("Potentially invalid skybox url",i,"on",this.name),Ot&&console.log("Set remote skybox url: "+e),this._prevUrl===e&&this._prevLoadedEnvironment)return this.apply(),!0;(a=this._prevLoadedEnvironment)==null||a.dispose(),this._prevLoadedEnvironment=void 0,this._prevUrl=e;const n=await this.loadTexture(e,i);if(!n)return Ot&&console.warn("RemoteSkybox: Failed to load texture from url",e),!1;if(!this.enabled)return Ot&&console.warn("RemoteSkybox: Component is not enabled, aborting setSkybox"),!1;if(this._prevUrl!==e)return Ot&&console.warn("RemoteSkybox: URL changed while loading texture, aborting setSkybox"),!1;this.url=e;const s=e.lastIndexOf("/");return n.name=e.substring(s>=0?s+1:0),this._loader instanceof d.TextureLoader&&(n.colorSpace=d.SRGBColorSpace),this._prevLoadedEnvironment=n,this.apply(),!0}async loadTexture(e,i){var u,f,p,g,y;if(!e)return Promise.resolve(null);i??(i=e);const n=Vb(i);if(n){const b=await n;if(((f=(u=b.source)==null?void 0:u.data)==null?void 0:f.length)>0||(y=(g=(p=b.source)==null?void 0:p.data)==null?void 0:g.data)!=null&&y.length)return b}const s=i.endsWith(".exr"),a=i.endsWith(".hdr"),l=i.endsWith(".ktx2");if(s)this._loader instanceof G.EXRLoader||(this._loader=new G.EXRLoader);else if(a)this._loader instanceof G.RGBELoader||(this._loader=new G.RGBELoader);else if(l){if(!(this._loader instanceof G.KTX2Loader)){const{ktx2Loader:b}=le.createLoaders(this.context.renderer);this._loader=b}}else this._loader instanceof d.TextureLoader||(this._loader=new d.TextureLoader);Ot&&console.log("Loading skybox: "+e);const c=this._loader.loadAsync(e);return NR(i,c),await c}apply(){var i;const e=this._prevLoadedEnvironment;e&&(e instanceof d.CubeTexture||e instanceof d.CompressedCubeTexture||(e.mapping=d.EquirectangularRefractionMapping,e.needsUpdate=!0),this.context.scene.background!==e&&(this._prevBackground=this.context.scene.background),this.context.scene.environment!==e&&(this._prevEnvironment=this.context.scene.environment),Ot&&console.log("Set remote skybox",this.url,!ri.backgroundShouldBeTransparent(this.context)),this.environment&&(this.context.scene.environment=e),this.background&&!ri.backgroundShouldBeTransparent(this.context)&&(this.context.scene.background=e),((i=this.context.mainCameraComponent)==null?void 0:i.backgroundBlurriness)!==void 0&&(this.context.scene.backgroundBlurriness=this.context.mainCameraComponent.backgroundBlurriness))}isRemoteTexture(e){return e.startsWith("http://")||e.startsWith("https://")}isValidTextureType(e){for(const i of this.validTextureTypes)if(e.endsWith(i))return!0;return!1}registerDropEvents(){this.unregisterDropEvents(),this.context.domElement.addEventListener("dragover",this.onDragOverEvent),this.context.domElement.addEventListener("drop",this.onDrop)}unregisterDropEvents(){this.context.domElement.removeEventListener("dragover",this.onDragOverEvent),this.context.domElement.removeEventListener("drop",this.onDrop)}};zh([ly(Lr.prototype.urlChangedSyncField),m(URL)],Lr.prototype,"url");zh([m()],Lr.prototype,"allowDrop");zh([m()],Lr.prototype,"background");zh([m()],Lr.prototype,"environment");zh([m()],Lr.prototype,"allowNetworking");let xf=Lr;function VR(o,t,e){const i=t&&!e;switch(o==null?void 0:o.toLowerCase()){case"studio":return i?"https://cdn.needle.tools/static/skybox/modelviewer-Neutral-small.hdr":"https://cdn.needle.tools/static/skybox/modelviewer-Neutral.hdr";case"blurred-skybox":return i?"https://cdn.needle.tools/static/skybox/blurred-skybox-small.exr":"https://cdn.needle.tools/static/skybox/blurred-skybox.exr";case"quicklook-ar":return i?"https://cdn.needle.tools/static/skybox/QuickLook-ARMode-small.exr":"https://cdn.needle.tools/static/skybox/QuickLook-ARMode.exr";case"quicklook":return i?"https://cdn.needle.tools/static/skybox/QuickLook-ObjectMode-small.exr":"https://cdn.needle.tools/static/skybox/QuickLook-ObjectMode.exr"}return o===void 0?null:o}var $R=Object.defineProperty,Sf=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&$R(t,e,n),n},fr;const Nh=(fr=class extends D{constructor(){super(...arguments);r(this,"target",null);r(this,"followFactor",.1);r(this,"rotateFactor",.1);r(this,"positionAxes",wa.All);r(this,"flipForward",!1);r(this,"_firstUpdate",!0)}onBeforeRender(){this.updateNow(!1)}updateNow(e){if(!(!this.target||this.target===this.gameObject)){if(this.followFactor>0){const i=Q(this.target),n=this._firstUpdate||e?1:z.clamp01(this.context.time.deltaTime*this.followFactor),s=this.worldPosition;this.positionAxes&wa.X&&(s.x=z.lerp(s.x,i.x,n)),this.positionAxes&wa.Y&&(s.y=z.lerp(s.y,i.y,n)),this.positionAxes&wa.Z&&(s.z=z.lerp(s.z,i.z,n)),this.worldPosition=s}if(this.rotateFactor>0){const i=_e(this.target);this.flipForward&&i.premultiply(fr._invertForward);const n=this._firstUpdate||e?1:z.clamp01(this.context.time.deltaTime*this.rotateFactor);this.worldQuaternion=this.worldQuaternion.slerp(i,n)}this._firstUpdate=!1}}},r(fr,"_invertForward",new d.Quaternion().setFromAxisAngle(new d.Vector3(0,1,0),Math.PI)),fr);Sf([m(d.Object3D)],Nh.prototype,"target");Sf([m()],Nh.prototype,"followFactor");Sf([m()],Nh.prototype,"rotateFactor");Sf([m()],Nh.prototype,"positionAxes");let Cf=Nh;var WR=Object.defineProperty,Vh=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&WR(t,e,n),n};const yc=S("debugspatialtrigger"),$b=new d.Layers,Wb=new d.Layers;function HR(o,t){return $b.mask=o,Wb.mask=t,$b.test(Wb)}class Zn extends D{constructor(){super(...arguments);r(this,"triggerMask",0);r(this,"onEnter");r(this,"onStay");r(this,"onExit");r(this,"currentIntersected",[]);r(this,"lastIntersected",[])}start(){yc&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(const e of Pf.triggers)HR(e.triggerMask,this.triggerMask)&&e.test(this.gameObject)&&this.currentIntersected.push(e);for(let e=this.lastIntersected.length-1;e>=0;e--){const i=this.lastIntersected[e];this.currentIntersected.indexOf(i)<0&&(this.onExitTrigger(i),this.lastIntersected.splice(e,1))}for(const e of this.currentIntersected)this.lastIntersected.indexOf(e)<0&&this.onEnterTrigger(e),this.onStayTrigger(e);this.lastIntersected.length=0,this.lastIntersected.push(...this.currentIntersected)}onEnterTrigger(e){var i;yc&&console.log("ENTER TRIGGER",this.name,e.name,this,e),e.raiseOnEnterEvent(this),(i=this.onEnter)==null||i.invoke()}onExitTrigger(e){var i;yc&&console.log("EXIT TRIGGER",this.name,e.name),e.raiseOnExitEvent(this),(i=this.onExit)==null||i.invoke()}onStayTrigger(e){var i;e.raiseOnStayEvent(this),(i=this.onStay)==null||i.invoke()}}Vh([m()],Zn.prototype,"triggerMask");Vh([m(ye)],Zn.prototype,"onEnter");Vh([m(ye)],Zn.prototype,"onStay");Vh([m(ye)],Zn.prototype,"onExit");var ks;const Cx=(ks=class extends D{constructor(){super(...arguments);r(this,"triggerMask");r(this,"boxHelper")}start(){yc&&console.log(this.name,this.triggerMask,this)}onEnable(){var e;ks.triggers.push(this),this.boxHelper||(this.boxHelper=C.addComponent(this.gameObject,ts),(e=this.boxHelper)==null||e.showHelper(null,yc))}onDisable(){ks.triggers.splice(ks.triggers.indexOf(this),1)}test(e){return this.boxHelper?this.boxHelper.isInBox(e)??!1:!1}raiseOnEnterEvent(e){C.foreachComponent(this.gameObject,i=>{i!==e&&i instanceof Zn&&i.onEnterTrigger(this)},!1)}raiseOnStayEvent(e){C.foreachComponent(this.gameObject,i=>{i!==e&&i instanceof Zn&&i.onStayTrigger(this)},!1)}raiseOnExitEvent(e){C.foreachComponent(this.gameObject,i=>{i!==e&&i instanceof Zn&&i.onExitTrigger(this)},!1)}},r(ks,"triggers",[]),ks);Vh([m()],Cx.prototype,"triggerMask");let Pf=Cx;var GR=Object.defineProperty,qR=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&GR(t,e,n),n};const Pi=S("debugspectator");class Mf extends D{constructor(){super(...arguments);r(this,"cam",null);r(this,"useKeys",!0);r(this,"_mode",0);r(this,"orbit",null);r(this,"_handler");r(this,"eventSub_WebXRRequestStartEvent",null);r(this,"eventSub_WebXRStartEvent",null);r(this,"eventSub_WebXREndEvent",null);r(this,"_debug");r(this,"_networking")}get mode(){return this._mode}set mode(e){this._mode=e}get isSpectating(){var e;return((e=this._handler)==null?void 0:e.currentTarget)!==void 0}isSpectatingUser(e){var i;return((i=this.target)==null?void 0:i.userId)===e}isFollowedBy(e){var i;return(i=this.followers)==null?void 0:i.includes(e)}get followers(){return this._networking.followers}stopSpectating(){if(this.context.isInXR){this.followSelf();return}this.target=void 0}get localId(){return this.context.connection.connectionId??"local"}set target(e){var i;if(this._handler){const n=(i=this._handler.currentTarget)==null?void 0:i.userId,s=this.context.players.getPlayerView(this.localId);e===void 0||this.context.isInXR===!1&&(s==null?void 0:s.currentObject)===e.currentObject?this._handler.currentTarget!==void 0&&(this._handler.disable(),C.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._networking.onSpectatedObjectChanged(e,n)):this._handler.currentTarget!==e&&(this._handler.set(e),C.setActive(this.gameObject,!0),this.orbit&&(this.orbit.enabled=!1),this._networking.onSpectatedObjectChanged(e,n))}}get target(){var e;return(e=this._handler)==null?void 0:e.currentTarget}requestAllFollowMe(){this._networking.onRequestFollowMe()}get isSpectatingSelf(){var e,i;return this.isSpectating&&((e=this.target)==null?void 0:e.currentObject)===((i=this.context.players.getPlayerView(this.localId))==null?void 0:i.currentObject)}awake(){if(this._debug=new YR(this.context,this),this._networking=new JR(this.context,this),this._networking.awake(),C.setActive(this.gameObject,!1),this.cam=C.getComponent(this.gameObject,ri),!this.cam){console.warn("SpectatorCamera: Spectator camera needs camera component on the same object.",this);return}!this._handler&&this.cam&&(this._handler=new XR(this.context,this.cam,this)),this.orbit=C.getComponent(this.context.mainCamera,ge)}onDestroy(){var e,i;this.stopSpectating(),(e=this._handler)==null||e.destroy(),(i=this._networking)==null||i.destroy()}isSupportedPlatform(){const e=window.navigator.userAgent,i=/Windows|MacOS/.test(e),n=/Windows NT/.test(e)&&/Edg/.test(e)&&!/Win64/.test(e);return i&&!n}onBeforeXR(e){this.isSupportedPlatform()&&C.setActive(this.gameObject,!0)}onEnterXR(e){this.isSupportedPlatform()&&(Pi&&console.log(this.context.mainCamera),this.context.mainCamera&&this.followSelf())}onLeaveXR(e){var i,n;this.context.removeCamera(this.cam),C.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),(i=this._handler)==null||i.set(void 0),(n=this._handler)==null||n.disable(),this.isSpectatingSelf&&this.stopSpectating()}followSelf(){this.target=this.context.players.getPlayerView(this.context.connection.connectionId),this.target||(this.context.players.setPlayerView(this.localId,this.context.mainCamera,wo.Headset),this.target=this.context.players.getPlayerView(this.localId)),Pi&&console.log("Follow self",this.target)}onAfterRender(){var u,f,p;if(!this.cam)return;const e=this.context.renderer,i=e.xr.enabled;if(!e.xr.isPresenting&&!((u=this._handler)!=null&&u.currentTarget))return;(f=this._handler)==null||f.update(this._mode);const n=e.getRenderTarget();let s=null;const a=e.state;if(!n){if(!e.state.bindFramebuffer||!a.bindXRFramebuffer)return;s=e._framebuffer,a.bindXRFramebuffer(null)}this.setAvatarFlagsBeforeRender();const l=this.context.mainCameraComponent;if(l){const g=l.backgroundColor;g&&e.setClearColor(g,g.alpha),this.cam.backgroundColor=g,this.cam.clearFlags=l.clearFlags,this.cam.nearClipPlane=l.nearClipPlane,this.cam.farClipPlane=l.farClipPlane}else e.setClearColor(new d.Color(1,1,1));e.setRenderTarget(null),e.xr.enabled=!1;const c=(p=this.cam)==null?void 0:p.threeCamera;this.context.updateAspect(c);const h=e.xr.isPresenting;e.xr.isPresenting=!1,e.setSize(this.context.domWidth,this.context.domHeight),e.render(this.context.scene,c),e.xr.isPresenting=h,e.xr.enabled=i,n?e.setRenderTarget(n):a.bindXRFramebuffer&&a.bindXRFramebuffer(s),this.resetAvatarFlags()}setAvatarFlagsBeforeRender(){const e=this._mode===0;for(const i of At.instances)if(i.avatar&&"isLocalAvatar"in i.avatar&&"flags"in i.avatar){let n=Bn.All;this.isSpectatingSelf&&(n=e&&i.avatar.isLocalAvatar?Bn.FirstPerson:Bn.ThirdPerson);const s=i.avatar.flags;if(!s)continue;for(const a of s)a.UpdateVisible(n)}}resetAvatarFlags(){var e;for(const i of At.instances)if(i.avatar&&"flags"in i.avatar){const n=i.avatar.flags;if(!n)continue;for(const s of n)"isLocalAvatar"in i.avatar&&((e=i.avatar)!=null&&e.isLocalAvatar)?s.UpdateVisible(Bn.FirstPerson):s.UpdateVisible(Bn.ThirdPerson)}}}qR([m()],Mf.prototype,"useKeys");class XR{constructor(t,e,i){r(this,"context");r(this,"cam");r(this,"spectator");r(this,"follow");r(this,"target");r(this,"view");r(this,"currentObject");this.context=t,this.cam=e,this.spectator=i}get currentTarget(){return this.view}set(t){const e=t==null?void 0:t.currentObject;if(!e){this.spectator.stopSpectating();return}e!==this.currentObject&&(this.currentObject=e,this.view=t,this.follow||(this.follow=C.addComponent(this.cam.gameObject,Cf)),this.target||(this.target=new d.Object3D),e.add(this.target),this.follow.enabled=!0,this.follow.target=this.target,Pi&&console.log("FOLLOW",e),this.context.isInXR?this.context.removeCamera(this.cam):this.context.setCurrentCamera(this.cam))}disable(){Pi&&console.log("STOP FOLLOW",this.currentObject),this.view=void 0,this.currentObject=void 0,this.context.removeCamera(this.cam),this.follow&&(this.follow.enabled=!1)}destroy(){var t;(t=this.target)==null||t.removeFromParent(),this.follow&&C.destroy(this.follow)}update(t){var n,s,a,l,c,h;if(((n=this.currentTarget)==null?void 0:n.isConnected)===!1||((s=this.currentTarget)==null?void 0:s.removed)===!0){Pi&&console.log("Target disconnected or timeout",this.currentTarget),this.spectator.stopSpectating();return}this.currentTarget&&((a=this.currentTarget)==null?void 0:a.currentObject)!==this.currentObject&&(Pi&&console.log("Target changed",this.currentObject,"to",this.currentTarget.currentObject),this.set(this.currentTarget));const e=this.context.mainCamera;if(e){const u=this.cam.threeCamera;(u.near!==e.near||u.far!==e.far)&&(u.near=e.near,u.far=e.far,u.updateProjectionMatrix())}const i=(l=this.follow)==null?void 0:l.target;if(!(!i||!this.follow)){switch(t){case 0:((c=this.view)==null?void 0:c.viewDevice)!==wo.Browser?(this.follow.followFactor=5,this.follow.rotateFactor=5):(this.follow.followFactor=50,this.follow.rotateFactor=50),i.position.set(0,0,0);break;case 1:this.follow.followFactor=3,this.follow.rotateFactor=2,i.position.set(0,.5,1.5);break}this.follow.flipForward=!1,((h=this.view)==null?void 0:h.viewDevice)!==wo.Browser?i.quaternion.copy(QR):i.quaternion.identity()}}}const QR=new d.Quaternion().setFromAxisAngle(new d.Vector3(0,1,0),Math.PI);class YR{constructor(t,e){r(this,"context");r(this,"spectator");this.context=t,this.spectator=e,console.log("[Spectator Camera] Click other avatars or cameras to follow them. Press ESC to exit spectator mode."),this.context.domElement.addEventListener("keydown",n=>{if(!this.spectator.useKeys)return;n.key==="Escape"&&this.spectator.stopSpectating()});let i=0;this.context.input.addEventListener(Re.PointerDown,n=>{i=this.context.time.time}),this.context.input.addEventListener(Re.PointerUp,n=>{const s=this.context.time.time-i;s>1?this.spectator.stopSpectating():this.context.input.getPointerClicked(0)&&s<.3&&this.trySelectObject()})}trySelectObject(){const t=new Jn;t.setMask(16777215);const e=this.context.physics.raycast(t);if(Pi&&console.log(...e),e!=null&&e.length)for(const i of e){if(i.distance<.2)continue;const n=i.object,s=C.getComponentInParent(n,At),a=s==null?void 0:s.connectionId;if(a){const l=this.context.players.getPlayerView(a);this.spectator.target=l,Pi&&console.log("spectate",a,s);break}}}}class KR{constructor(t,e,i){r(this,"guid");r(this,"dontSave",!0);r(this,"targetUserId");r(this,"stoppedFollowing");this.guid=t,this.targetUserId=e,this.stoppedFollowing=i}}class ZR{constructor(t,e){r(this,"guid");r(this,"userId");this.guid=t.guid,this.userId=e}}class JR{constructor(t,e){r(this,"followers",[]);r(this,"context");r(this,"spectator");r(this,"_followerEventMethod");r(this,"_requestFollowMethod");r(this,"_joinedRoomMethod");r(this,"_lastRequestFollowUser");r(this,"_enforceFollowInterval");this.context=t,this.spectator=e,this._followerEventMethod=this.onFollowerEvent.bind(this),this._requestFollowMethod=this.onRequestFollowEvent.bind(this),this._joinedRoomMethod=this.onUserJoinedRoom.bind(this)}awake(){this.context.connection.beginListen("spectator-follower-changed",this._followerEventMethod),this.context.connection.beginListen("spectator-request-follow",this._requestFollowMethod),this.context.connection.beginListen(ee.JoinedRoom,this._joinedRoomMethod),this.context.domElement.addEventListener("keydown",t=>{this.spectator.useKeys&&(t.key==="f"?this.onRequestFollowMe():t.key==="Escape"&&this.onRequestFollowMe(!0))})}destroy(){this.context.connection.stopListen("spectator-follower-changed",this._followerEventMethod),this.context.connection.stopListen("spectator-request-follow",this._requestFollowMethod),this.context.connection.stopListen(ee.JoinedRoom,this._joinedRoomMethod)}onSpectatedObjectChanged(t,e){if(Pi&&console.log(this.context.connection.connectionId,"onSpectatedObjectChanged",t,e),this.context.connection.connectionId){const i=(t==null?void 0:t.userId)===void 0,n=i?e:t==null?void 0:t.userId,s=new KR(this.context.connection.connectionId,n,i);this.context.connection.send("spectator-follower-changed",s)}}onRequestFollowMe(t=!1){if(Pi&&console.log("Request follow",this.context.connection.connectionId),this.context.connection.connectionId){this.spectator.stopSpectating();const e=t?void 0:this.context.connection.connectionId,i=new ZR(this.spectator,e);this.context.connection.send("spectator-request-follow",i)}}onUserJoinedRoom(){S("followme")&&this.onRequestFollowMe()}onFollowerEvent(t){const e=t.targetUserId,i=t.guid;if(Pi&&console.log(t),e===this.context.connection.connectionId)if(t.stoppedFollowing){const n=this.followers.indexOf(i);n!==-1&&(this.followers.splice(n,1),this.removeDisconnectedFollowers(),console.log(i,"unfollows you",this.followers.length))}else this.followers.includes(i)||(this.followers.push(i),this.removeDisconnectedFollowers(),console.log(i,"follows you",this.followers.length))}removeDisconnectedFollowers(){for(let t=this.followers.length-1;t>=0;t--){const e=this.followers[t];this.context.connection.userIsInRoom(e)===!1&&this.followers.splice(t,1)}}onRequestFollowEvent(t){if(this._lastRequestFollowUser=t,t.userId===this.context.connection.connectionId)this.spectator.stopSpectating();else if(t.userId===void 0)this.spectator.stopSpectating();else{const e=this.context.players.getPlayerView(t.userId);if(e)this.spectator.target=e;else return Pi&&console.warn("Could not find view",t.userId),this.enforceFollow(),!1}return!0}enforceFollow(){this._enforceFollowInterval||(this._enforceFollowInterval=setInterval(()=>{this._lastRequestFollowUser===void 0||this._lastRequestFollowUser.userId&&this.spectator.isFollowedBy(this._lastRequestFollowUser.userId)?(clearInterval(this._enforceFollowInterval),this._enforceFollowInterval=void 0):(Pi&&console.log("REQUEST FOLLOW AGAIN",this._lastRequestFollowUser.userId),this.onRequestFollowEvent(this._lastRequestFollowUser))},1e3))}}class jn{constructor(){r(this,"bb",null);r(this,"bb_pos",0)}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSyncedCameraModel(t,e){return(e||new jn).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSyncedCameraModel(t,e){return t.setPosition(t.position()+ae.SIZE_PREFIX_LENGTH),(e||new jn).__init(t.readInt32(t.position())+t.position(),t)}userId(t){const e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}guid(t){const e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}dontSave(){const t=this.bb.__offset(this.bb_pos,8);return t?!!this.bb.readInt8(this.bb_pos+t):!1}pos(t){const e=this.bb.__offset(this.bb_pos,10);return e?(t||new Cr).__init(this.bb_pos+e,this.bb):null}rot(t){const e=this.bb.__offset(this.bb_pos,12);return e?(t||new Cr).__init(this.bb_pos+e,this.bb):null}static startSyncedCameraModel(t){t.startObject(5)}static addUserId(t,e){t.addFieldOffset(0,e,0)}static addGuid(t,e){t.addFieldOffset(1,e,0)}static addDontSave(t,e){t.addFieldInt8(2,+e,0)}static addPos(t,e){t.addFieldStruct(3,e,0)}static addRot(t,e){t.addFieldStruct(4,e,0)}static endSyncedCameraModel(t){return t.endObject()}static finishSyncedCameraModelBuffer(t,e){t.finish(e)}static finishSizePrefixedSyncedCameraModelBuffer(t,e){t.finish(e,void 0,!0)}}var eE=Object.defineProperty,tE=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&eE(t,e,n),n};const Su="SCAM";rg(Su,jn.getRootAsSyncedCameraModel);const yi=new ae.Builder;class iE{constructor(t,e){r(this,"userId");r(this,"guid");this.guid=e,this.userId=t}send(t,e){if(t){yi.clear();const i=yi.createString(this.guid),n=yi.createString(this.userId);jn.startSyncedCameraModel(yi),jn.addGuid(yi,i),jn.addUserId(yi,n);const s=Q(t),a=ju(t);jn.addPos(yi,Cr.createVec3(yi,s.x,s.y,s.z)),jn.addRot(yi,Cr.createVec3(yi,a.x,a.y,a.z));const l=jn.endSyncedCameraModel(yi);yi.finish(l,Su),e.sendBinary(yi.asUint8Array())}}}var bo;const Px=(bo=class extends D{constructor(){super(...arguments);r(this,"cameraPrefab",null);r(this,"_lastWorldPosition");r(this,"_lastWorldQuaternion");r(this,"_model",null);r(this,"_needsUpdate",!0);r(this,"_lastUpdateTime",0);r(this,"remoteCams",{});r(this,"userToCamMap",{});r(this,"_camTimeoutInSeconds",10);r(this,"_receiveCallback",null)}getCameraObject(e){const i=this.userToCamMap[e];return i?this.remoteCams[i].obj:null}async awake(){this._lastWorldPosition=this.worldPosition.clone(),this._lastWorldQuaternion=this.worldQuaternion.clone(),this.cameraPrefab&&("uri"in this.cameraPrefab&&(this.cameraPrefab=await this.cameraPrefab.instantiate(this.gameObject)),this.cameraPrefab&&"isObject3D"in this.cameraPrefab&&(this.cameraPrefab.visible=!1))}onEnable(){this._receiveCallback=this.context.connection.beginListenBinary(Su,this.onReceivedRemoteCameraInfoBin.bind(this))}onDisable(){this.context.connection.stopListenBinary(Su,this._receiveCallback)}update(){for(const s in this.remoteCams){const a=this.remoteCams[s],l=this.context.time.realtimeSinceStartup-a.lastUpdate;if(!a||l>this._camTimeoutInSeconds){j()&&console.log("Remote cam timeout",s),a!=null&&a.obj&&C.destroy(a.obj),delete this.remoteCams[s],a&&delete this.userToCamMap[a.userId],bo.instances.push(a),this.context.players.removePlayerView(a.userId,wo.Browser);continue}}if(this.context.isInXR)return;const e=this.context.mainCamera;if(e===null){this.enabled=!1;return}if(!this.context.connection.isConnected||this.context.connection.connectionId===null)return;this._model===null&&(this._model=new iE(this.context.connection.connectionId,this.context.connection.connectionId+"_camera"));const i=Q(e),n=_e(e);(i.distanceTo(this._lastWorldPosition)>.001||n.angleTo(this._lastWorldQuaternion)>.01)&&(this._needsUpdate=!0),this._lastWorldPosition.copy(i),this._lastWorldQuaternion.copy(n),!((!this._needsUpdate||this.context.time.frameCount%2!==0)&&!(this.context.time.realtimeSinceStartup-this._lastUpdateTime>this._camTimeoutInSeconds*.5))&&(this._lastUpdateTime=this.context.time.realtimeSinceStartup,this._needsUpdate=!1,this._model.send(e,this.context.connection),this.context.isInXR||this.context.players.setPlayerView(this.context.connection.connectionId,e,wo.Browser))}onReceivedRemoteCameraInfoBin(e){const i=e.guid();if(!i)return;const n=e.userId();if(!n||!this.context.connection.userIsInRoom(n)||!this.cameraPrefab)return;let s=this.remoteCams[i];if(!s)if("isObject3D"in this.cameraPrefab){const h=new Sn;h.context=this.context;const u=C.instantiate(this.cameraPrefab,h);s=this.remoteCams[i]={obj:u,lastUpdate:this.context.time.realtimeSinceStartup,userId:n},s.obj.visible=!0,this.gameObject.add(u),this.userToCamMap[n]=i,bo.instances.push(s);const f=C.getOrAddComponent(u,At);f.connectionId=n,f.avatar=u}else return;const a=s.obj;this.context.players.setPlayerView(n,a,wo.Browser),s.lastUpdate=this.context.time.realtimeSinceStartup,Wi.markDirty(a);const l=e.pos();l&&Pr(a,l.x(),l.y(),l.z());const c=e.rot();c&&th(a,c.x(),c.y(),c.z())}},r(bo,"instances",[]),bo);tE([m([d.Object3D,te])],Px.prototype,"cameraPrefab");let jy=Px;var nE=Object.defineProperty,sE=Object.getOwnPropertyDescriptor,Ho=(o,t,e,i)=>{for(var n=i>1?void 0:i?sE(t,e):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=(i?a(t,e,n):a(n))||n);return i&&n&&nE(t,e,n),n};const Up="view",zp=S("debugsyncedroom");class kn extends D{constructor(){super(...arguments);r(this,"roomName","");r(this,"urlParameterName","room");r(this,"joinRandomRoom");r(this,"requireRoomParameter",!1);r(this,"autoRejoin",!0);r(this,"createJoinButton",!0);r(this,"createViewOnlyButton",!1);r(this,"_lastJoinedRoom");r(this,"_roomPrefix","");r(this,"_lastPingTime",0);r(this,"_lastRoomTime",-1);r(this,"_userWantsToBeInARoom",!1);r(this,"_roomButton");r(this,"_roomButtonIconJoin");r(this,"_roomButtonIconLeave");r(this,"updateRoomButtonState",()=>{var e,i;this._roomButton&&(this.context.connection.isInRoom?(this._roomButton.title="Leave the networked room",this._roomButton.textContent="Leave Room",(e=this._roomButtonIconJoin)==null||e.remove(),this._roomButton.prepend(this._roomButtonIconLeave)):(this._roomButton.title="Create or join a networked room",this._roomButton.textContent="Join Room",(i=this._roomButtonIconLeave)==null||i.remove(),this._roomButton.prepend(this._roomButtonIconJoin)))});r(this,"_viewOnlyButton");r(this,"onCreateViewOnlyButton",()=>{if(!this._viewOnlyButton){const e=document.createElement("button");this._viewOnlyButton=e,e.classList.add("view-only-button"),e.setAttribute("priority","90"),e.onclick=()=>{var n;const i=this.getViewOnlyUrl();i!=null&&i.length?navigator.canShare({url:i})?(n=navigator.share({url:i}))==null||n.catch(s=>{console.warn(s)}):(navigator.clipboard.writeText(i),Ee("View only URL copied to clipboard")):me("Could not create view only URL")},e.title="Copy the view only URL: A page accessed by the view only URL can not be modified by visiting users.",e.textContent="Share View URL",e.prepend(_t("visibility"))}this.context.menu.appendChild(this._viewOnlyButton)})}get currentRoomName(){const e=S(Up);return e||S(this.urlParameterName)}set roomPrefix(e){this._roomPrefix=e}get roomPrefix(){return this._roomPrefix}awake(){var e;this.joinRandomRoom===void 0&&((e=this.roomName)==null?void 0:e.length)<=0&&(this.joinRandomRoom=!0),zp&&console.log(`SyncedRoom roomName:${this.roomName}, urlParamName:${this.urlParameterName}, joinRandomRoom:${this.joinRandomRoom}`)}onEnable(){const e=S(Up);if(e&&typeof e=="string"&&e.length>0){console.log("Join as viewer"),this.context.connection.joinRoom(e,!0);return}if(this.tryJoinRoom(),this.createJoinButton){const i=this.createRoomButton();this.context.menu.appendChild(i)}this.createViewOnlyButton&&this.onEnableViewOnlyButton()}onDisable(){var e;(e=this._roomButton)==null||e.remove(),this.onDisableViewOnlyButton(),this.roomName&&this.roomName.length>0&&this.context.connection.leaveRoom(this.roomName)}onDestroy(){this.destroyRoomButton()}tryJoinRandomRoom(){this.setRandomRoomUrlParameter(),this.tryJoinRoom()}tryJoinRoom(e=0){var n;e===void 0&&(e=0);let i=!1;if(((n=this.urlParameterName)==null?void 0:n.length)>0){const s=S(this.urlParameterName);if(s&&(typeof s=="string"||typeof s=="number")){i=!0;const a=l0(s.toString());this.roomName=a}else if(this.joinRandomRoom&&(console.log("No room name found in url, generating random one"),this.setRandomRoomUrlParameter(),e<1))return this.tryJoinRoom(e+1)}else this.joinRandomRoom&&(this.roomName===null||this.roomName===void 0||this.roomName.length<=0)&&(this.roomName=this.generateRoomName());return this.requireRoomParameter&&!i?((zp||j())&&console.warn('[SyncedRoom] Missing required room parameter "'+this.urlParameterName+`" in url - will not connect.
|
|
1388
|
+
`)},e.userData.isLightBlendMaterial=!0}applyShadowMaterial(){if(this.targetMesh)if(this.targetMesh.material.type!=="ShadowMaterial"){const e=new d.ShadowMaterial;e.color=this.shadowColor,e.opacity=this.shadowColor.alpha,this.applyMaterialOptions(e),this.targetMesh.material=e,e.userData.isShadowCatcherMaterial=!0}else{const e=this.targetMesh.material;e.color=this.shadowColor,e.opacity=this.shadowColor.alpha,this.applyMaterialOptions(e),e.userData.isShadowCatcherMaterial=!0}}applyOccluderMaterial(){if(this.targetMesh){let e=this.targetMesh.material;if(!e){const i=new d.MeshBasicMaterial;this.targetMesh.material=i,e=i}e.depthWrite=!0,e.stencilWrite=!0,e.colorWrite=!1,this.gameObject.renderOrder=-100}}applyMaterialOptions(e){e&&(e.depthWrite=!1,e.stencilWrite=!1)}}xx([m()],Uh.prototype,"mode");xx([m(ie)],Uh.prototype,"shadowColor");var UR=Object.defineProperty,zh=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&UR(t,e,n),n};const Ot=S("debugskybox");Iy("background-image");Iy("environment-image");function Nb(o,t,e,i,n){const s=new xf;s.allowDrop=!1,s.allowNetworking=!1,s.background=e,s.environment=i,C.addComponent(o.scene,s);const a=l=>{typeof l=="string"&&(Ot&&console.log(n,"CHANGED TO",l),s.setSkybox(l))};return h0(o.domElement,n,a),s.addEventListener("destroy",()=>{Ot&&console.log("Destroyed attribute remote skybox",n),d0(o.domElement,n,a)}),s.setSkybox(t)}const xu=new Array;re.registerCallback(he.ContextCreationStart,o=>{var n;const t=o.context,e=t.domElement.getAttribute("background-image"),i=t.domElement.getAttribute("environment-image");if(e){Ot&&console.log("Creating remote skybox to load "+e),((n=t.mainCameraComponent)==null?void 0:n.clearFlags)!==Co.Skybox&&console.warn('"background-image" attribute has no effect: camera clear flags are not set to "Skybox"');const s=Nb(t,e,!0,!1,"background-image");xu.push(s)}if(i){Ot&&console.log("Creating remote environment to load "+i);const s=Nb(t,i,!1,!0,"environment-image");xu.push(s)}});re.registerCallback(he.ContextCreationStart,()=>Promise.all(xu).finally(()=>{xu.length=0}));function Sx(){return globalThis.NEEDLE_ENGINE_SKYBOX_TEXTURES||(globalThis.NEEDLE_ENGINE_SKYBOX_TEXTURES=new Array),globalThis.NEEDLE_ENGINE_SKYBOX_TEXTURES}function Vb(o){const e=Sx().find(i=>i.src===o);return e?(Ot&&console.log("Skybox: Found previously loaded texture for "+o),e.texture):null}async function zR(o){const t=await o;ug(t,!0),Se(t)}function NR(o,t){const e=Sx();for(;e.length>5;){const i=e.shift();i&&zR(i.texture)}t.then(i=>ug(i,!1)),e.push({src:o,texture:t})}const Lr=class extends D{constructor(){super(...arguments);r(this,"url");r(this,"allowDrop",!0);r(this,"background",!0);r(this,"environment",!0);r(this,"allowNetworking",!0);r(this,"_loader");r(this,"_prevUrl");r(this,"_prevLoadedEnvironment");r(this,"_prevEnvironment",null);r(this,"_prevBackground",null);r(this,"validTextureTypes",[".ktx2",".hdr",".exr",".jpg",".jpeg",".png"]);r(this,"onDragOverEvent",e=>{if(this.allowDrop&&e.dataTransfer)for(const i of e.dataTransfer.types)(i==="text/uri-list"||i==="Files")&&e.preventDefault()});r(this,"onDrop",e=>{var i,n,s,a;if(this.allowDrop&&e.dataTransfer){for(const l of e.dataTransfer.types)if(Ot&&console.log(l),l==="text/uri-list"){const c=e.dataTransfer.getData(l);Ot&&console.log(l,c);let h=(n=(i=new RegExp(/polyhaven.com\/asset_img\/.+?\/(?<name>.+)\.png/).exec(c))==null?void 0:i.groups)==null?void 0:n.name;if(h||(h=(a=(s=new RegExp(/polyhaven\.com\/a\/(?<name>.+)/).exec(c))==null?void 0:s.groups)==null?void 0:a.name),Ot&&console.log(h),h){const u="https://dl.polyhaven.org/file/ph-assets/HDRIs/exr/1k/"+h+"_1k.exr";console.log(`[Remote Skybox] Setting skybox from url: ${u}`),e.preventDefault(),this.setSkybox(u);break}else if(this.isValidTextureType(c)){console.log("[Remote Skybox] Setting skybox from url: "+c),e.preventDefault(),this.setSkybox(c);break}else{console.warn(`[RemoteSkybox] Unknown url ${c}. If you want to load a skybox from a url, make sure it is a valid image url. Url must end with${this.validTextureTypes.join(", ")}.`);const u=new CustomEvent("dropped-unknown-url",{detail:{sender:this,event:e,url:c,apply:f=>{e.preventDefault(),this.setSkybox(f)}}});this.dispatchEvent(u)}}else if(l=="Files"){const c=e.dataTransfer.files.item(0);if(Ot&&console.log(l,c),!c)continue;if(!this.isValidTextureType(c.name)){console.warn(`[RemoteSkybox]: File "${c.name}" is not supported. Supported files are ${this.validTextureTypes.join(", ")}`);return}if(Vb(c.name)===null){const h=new Blob([c]),u=URL.createObjectURL(h);e.preventDefault(),this.setSkybox(u,c.name)}else e.preventDefault(),this.setSkybox(c.name);break}}})}onEnable(){this.setSkybox(this.url),this.registerDropEvents()}onDisable(){var e;this.context.scene.environment===this._prevLoadedEnvironment&&(this.context.scene.environment=this._prevEnvironment,ri.backgroundShouldBeTransparent(this.context)||(this.context.scene.background=this._prevBackground),this._prevLoadedEnvironment=void 0),this.unregisterDropEvents(),(e=this.context.mainCameraComponent)==null||e.applyClearFlags()}urlChangedSyncField(){this.allowNetworking&&this.url&&(this.isRemoteTexture(this.url)?this.setSkybox(this.url):Ot&&console.warn(`RemoteSkybox: Not setting skybox: ${this.url} is not a remote texture. If you want to set a local texture, set allowNetworking to false.`))}async setSkybox(e,i){var a;if(!this.activeAndEnabled||(e=VR(e,this.environment,this.background),!e))return!1;if(i??(i=e),this.isValidTextureType(i)||console.warn("Potentially invalid skybox url",i,"on",this.name),Ot&&console.log("Set remote skybox url: "+e),this._prevUrl===e&&this._prevLoadedEnvironment)return this.apply(),!0;(a=this._prevLoadedEnvironment)==null||a.dispose(),this._prevLoadedEnvironment=void 0,this._prevUrl=e;const n=await this.loadTexture(e,i);if(!n)return Ot&&console.warn("RemoteSkybox: Failed to load texture from url",e),!1;if(!this.enabled)return Ot&&console.warn("RemoteSkybox: Component is not enabled, aborting setSkybox"),!1;if(this._prevUrl!==e)return Ot&&console.warn("RemoteSkybox: URL changed while loading texture, aborting setSkybox"),!1;this.url=e;const s=e.lastIndexOf("/");return n.name=e.substring(s>=0?s+1:0),this._loader instanceof d.TextureLoader&&(n.colorSpace=d.SRGBColorSpace),this._prevLoadedEnvironment=n,this.apply(),!0}async loadTexture(e,i){var u,f,p,g,y;if(!e)return Promise.resolve(null);i??(i=e);const n=Vb(i);if(n){const b=await n;if(((f=(u=b.source)==null?void 0:u.data)==null?void 0:f.length)>0||(y=(g=(p=b.source)==null?void 0:p.data)==null?void 0:g.data)!=null&&y.length)return b}const s=i.endsWith(".exr"),a=i.endsWith(".hdr"),l=i.endsWith(".ktx2");if(s)this._loader instanceof G.EXRLoader||(this._loader=new G.EXRLoader);else if(a)this._loader instanceof G.RGBELoader||(this._loader=new G.RGBELoader);else if(l){if(!(this._loader instanceof G.KTX2Loader)){const{ktx2Loader:b}=le.createLoaders(this.context.renderer);this._loader=b}}else this._loader instanceof d.TextureLoader||(this._loader=new d.TextureLoader);Ot&&console.log("Loading skybox: "+e);const c=this._loader.loadAsync(e);return NR(i,c),await c}apply(){var i;const e=this._prevLoadedEnvironment;e&&(e instanceof d.CubeTexture||e instanceof d.CompressedCubeTexture||(e.mapping=d.EquirectangularRefractionMapping,e.needsUpdate=!0),this.context.scene.background!==e&&(this._prevBackground=this.context.scene.background),this.context.scene.environment!==e&&(this._prevEnvironment=this.context.scene.environment),Ot&&console.log("Set remote skybox",this.url,!ri.backgroundShouldBeTransparent(this.context)),this.environment&&(this.context.scene.environment=e),this.background&&!ri.backgroundShouldBeTransparent(this.context)&&(this.context.scene.background=e),((i=this.context.mainCameraComponent)==null?void 0:i.backgroundBlurriness)!==void 0&&(this.context.scene.backgroundBlurriness=this.context.mainCameraComponent.backgroundBlurriness))}isRemoteTexture(e){return e.startsWith("http://")||e.startsWith("https://")}isValidTextureType(e){for(const i of this.validTextureTypes)if(e.endsWith(i))return!0;return!1}registerDropEvents(){this.unregisterDropEvents(),this.context.domElement.addEventListener("dragover",this.onDragOverEvent),this.context.domElement.addEventListener("drop",this.onDrop)}unregisterDropEvents(){this.context.domElement.removeEventListener("dragover",this.onDragOverEvent),this.context.domElement.removeEventListener("drop",this.onDrop)}};zh([ly(Lr.prototype.urlChangedSyncField),m(URL)],Lr.prototype,"url");zh([m()],Lr.prototype,"allowDrop");zh([m()],Lr.prototype,"background");zh([m()],Lr.prototype,"environment");zh([m()],Lr.prototype,"allowNetworking");let xf=Lr;function VR(o,t,e){const i=t&&!e;switch(o==null?void 0:o.toLowerCase()){case"studio":return i?"https://cdn.needle.tools/static/skybox/modelviewer-Neutral-small.hdr":"https://cdn.needle.tools/static/skybox/modelviewer-Neutral.hdr";case"blurred-skybox":return i?"https://cdn.needle.tools/static/skybox/blurred-skybox-small.exr":"https://cdn.needle.tools/static/skybox/blurred-skybox.exr";case"quicklook-ar":return i?"https://cdn.needle.tools/static/skybox/QuickLook-ARMode-small.exr":"https://cdn.needle.tools/static/skybox/QuickLook-ARMode.exr";case"quicklook":return i?"https://cdn.needle.tools/static/skybox/QuickLook-ObjectMode-small.exr":"https://cdn.needle.tools/static/skybox/QuickLook-ObjectMode.exr"}return o===void 0?null:o}var $R=Object.defineProperty,Sf=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&$R(t,e,n),n},fr;const Nh=(fr=class extends D{constructor(){super(...arguments);r(this,"target",null);r(this,"followFactor",.1);r(this,"rotateFactor",.1);r(this,"positionAxes",wa.All);r(this,"flipForward",!1);r(this,"_firstUpdate",!0)}onBeforeRender(){this.updateNow(!1)}updateNow(e){if(!(!this.target||this.target===this.gameObject)){if(this.followFactor>0){const i=Q(this.target),n=this._firstUpdate||e?1:z.clamp01(this.context.time.deltaTime*this.followFactor),s=this.worldPosition;this.positionAxes&wa.X&&(s.x=z.lerp(s.x,i.x,n)),this.positionAxes&wa.Y&&(s.y=z.lerp(s.y,i.y,n)),this.positionAxes&wa.Z&&(s.z=z.lerp(s.z,i.z,n)),this.worldPosition=s}if(this.rotateFactor>0){const i=_e(this.target);this.flipForward&&i.premultiply(fr._invertForward);const n=this._firstUpdate||e?1:z.clamp01(this.context.time.deltaTime*this.rotateFactor);this.worldQuaternion=this.worldQuaternion.slerp(i,n)}this._firstUpdate=!1}}},r(fr,"_invertForward",new d.Quaternion().setFromAxisAngle(new d.Vector3(0,1,0),Math.PI)),fr);Sf([m(d.Object3D)],Nh.prototype,"target");Sf([m()],Nh.prototype,"followFactor");Sf([m()],Nh.prototype,"rotateFactor");Sf([m()],Nh.prototype,"positionAxes");let Cf=Nh;var WR=Object.defineProperty,Vh=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&WR(t,e,n),n};const yc=S("debugspatialtrigger"),$b=new d.Layers,Wb=new d.Layers;function HR(o,t){return $b.mask=o,Wb.mask=t,$b.test(Wb)}class Zn extends D{constructor(){super(...arguments);r(this,"triggerMask",0);r(this,"onEnter");r(this,"onStay");r(this,"onExit");r(this,"currentIntersected",[]);r(this,"lastIntersected",[])}start(){yc&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(const e of Pf.triggers)HR(e.triggerMask,this.triggerMask)&&e.test(this.gameObject)&&this.currentIntersected.push(e);for(let e=this.lastIntersected.length-1;e>=0;e--){const i=this.lastIntersected[e];this.currentIntersected.indexOf(i)<0&&(this.onExitTrigger(i),this.lastIntersected.splice(e,1))}for(const e of this.currentIntersected)this.lastIntersected.indexOf(e)<0&&this.onEnterTrigger(e),this.onStayTrigger(e);this.lastIntersected.length=0,this.lastIntersected.push(...this.currentIntersected)}onEnterTrigger(e){var i;yc&&console.log("ENTER TRIGGER",this.name,e.name,this,e),e.raiseOnEnterEvent(this),(i=this.onEnter)==null||i.invoke()}onExitTrigger(e){var i;yc&&console.log("EXIT TRIGGER",this.name,e.name),e.raiseOnExitEvent(this),(i=this.onExit)==null||i.invoke()}onStayTrigger(e){var i;e.raiseOnStayEvent(this),(i=this.onStay)==null||i.invoke()}}Vh([m()],Zn.prototype,"triggerMask");Vh([m(ye)],Zn.prototype,"onEnter");Vh([m(ye)],Zn.prototype,"onStay");Vh([m(ye)],Zn.prototype,"onExit");var ks;const Cx=(ks=class extends D{constructor(){super(...arguments);r(this,"triggerMask");r(this,"boxHelper")}start(){yc&&console.log(this.name,this.triggerMask,this)}onEnable(){var e;ks.triggers.push(this),this.boxHelper||(this.boxHelper=C.addComponent(this.gameObject,ts),(e=this.boxHelper)==null||e.showHelper(null,yc))}onDisable(){ks.triggers.splice(ks.triggers.indexOf(this),1)}test(e){return this.boxHelper?this.boxHelper.isInBox(e)??!1:!1}raiseOnEnterEvent(e){C.foreachComponent(this.gameObject,i=>{i!==e&&i instanceof Zn&&i.onEnterTrigger(this)},!1)}raiseOnStayEvent(e){C.foreachComponent(this.gameObject,i=>{i!==e&&i instanceof Zn&&i.onStayTrigger(this)},!1)}raiseOnExitEvent(e){C.foreachComponent(this.gameObject,i=>{i!==e&&i instanceof Zn&&i.onExitTrigger(this)},!1)}},r(ks,"triggers",[]),ks);Vh([m()],Cx.prototype,"triggerMask");let Pf=Cx;var GR=Object.defineProperty,qR=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&GR(t,e,n),n};const Pi=S("debugspectator");class Mf extends D{constructor(){super(...arguments);r(this,"cam",null);r(this,"useKeys",!0);r(this,"_mode",0);r(this,"orbit",null);r(this,"_handler");r(this,"eventSub_WebXRRequestStartEvent",null);r(this,"eventSub_WebXRStartEvent",null);r(this,"eventSub_WebXREndEvent",null);r(this,"_debug");r(this,"_networking")}get mode(){return this._mode}set mode(e){this._mode=e}get isSpectating(){var e;return((e=this._handler)==null?void 0:e.currentTarget)!==void 0}isSpectatingUser(e){var i;return((i=this.target)==null?void 0:i.userId)===e}isFollowedBy(e){var i;return(i=this.followers)==null?void 0:i.includes(e)}get followers(){return this._networking.followers}stopSpectating(){if(this.context.isInXR){this.followSelf();return}this.target=void 0}get localId(){return this.context.connection.connectionId??"local"}set target(e){var i;if(this._handler){const n=(i=this._handler.currentTarget)==null?void 0:i.userId,s=this.context.players.getPlayerView(this.localId);e===void 0||this.context.isInXR===!1&&(s==null?void 0:s.currentObject)===e.currentObject?this._handler.currentTarget!==void 0&&(this._handler.disable(),C.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._networking.onSpectatedObjectChanged(e,n)):this._handler.currentTarget!==e&&(this._handler.set(e),C.setActive(this.gameObject,!0),this.orbit&&(this.orbit.enabled=!1),this._networking.onSpectatedObjectChanged(e,n))}}get target(){var e;return(e=this._handler)==null?void 0:e.currentTarget}requestAllFollowMe(){this._networking.onRequestFollowMe()}get isSpectatingSelf(){var e,i;return this.isSpectating&&((e=this.target)==null?void 0:e.currentObject)===((i=this.context.players.getPlayerView(this.localId))==null?void 0:i.currentObject)}awake(){if(this._debug=new YR(this.context,this),this._networking=new JR(this.context,this),this._networking.awake(),C.setActive(this.gameObject,!1),this.cam=C.getComponent(this.gameObject,ri),!this.cam){console.warn("SpectatorCamera: Spectator camera needs camera component on the same object.",this);return}!this._handler&&this.cam&&(this._handler=new XR(this.context,this.cam,this)),this.orbit=C.getComponent(this.context.mainCamera,ge)}onDestroy(){var e,i;this.stopSpectating(),(e=this._handler)==null||e.destroy(),(i=this._networking)==null||i.destroy()}isSupportedPlatform(){const e=window.navigator.userAgent,i=/Windows|MacOS/.test(e),n=/Windows NT/.test(e)&&/Edg/.test(e)&&!/Win64/.test(e);return i&&!n}onBeforeXR(e){this.isSupportedPlatform()&&C.setActive(this.gameObject,!0)}onEnterXR(e){this.isSupportedPlatform()&&(Pi&&console.log(this.context.mainCamera),this.context.mainCamera&&this.followSelf())}onLeaveXR(e){var i,n;this.context.removeCamera(this.cam),C.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),(i=this._handler)==null||i.set(void 0),(n=this._handler)==null||n.disable(),this.isSpectatingSelf&&this.stopSpectating()}followSelf(){this.target=this.context.players.getPlayerView(this.context.connection.connectionId),this.target||(this.context.players.setPlayerView(this.localId,this.context.mainCamera,wo.Headset),this.target=this.context.players.getPlayerView(this.localId)),Pi&&console.log("Follow self",this.target)}onAfterRender(){var u,f,p;if(!this.cam)return;const e=this.context.renderer,i=e.xr.enabled;if(!e.xr.isPresenting&&!((u=this._handler)!=null&&u.currentTarget))return;(f=this._handler)==null||f.update(this._mode);const n=e.getRenderTarget();let s=null;const a=e.state;if(!n){if(!e.state.bindFramebuffer||!a.bindXRFramebuffer)return;s=e._framebuffer,a.bindXRFramebuffer(null)}this.setAvatarFlagsBeforeRender();const l=this.context.mainCameraComponent;if(l){const g=l.backgroundColor;g&&e.setClearColor(g,g.alpha),this.cam.backgroundColor=g,this.cam.clearFlags=l.clearFlags,this.cam.nearClipPlane=l.nearClipPlane,this.cam.farClipPlane=l.farClipPlane}else e.setClearColor(new d.Color(1,1,1));e.setRenderTarget(null),e.xr.enabled=!1;const c=(p=this.cam)==null?void 0:p.threeCamera;this.context.updateAspect(c);const h=e.xr.isPresenting;e.xr.isPresenting=!1,e.setSize(this.context.domWidth,this.context.domHeight),e.render(this.context.scene,c),e.xr.isPresenting=h,e.xr.enabled=i,n?e.setRenderTarget(n):a.bindXRFramebuffer&&a.bindXRFramebuffer(s),this.resetAvatarFlags()}setAvatarFlagsBeforeRender(){const e=this._mode===0;for(const i of At.instances)if(i.avatar&&"isLocalAvatar"in i.avatar&&"flags"in i.avatar){let n=Bn.All;this.isSpectatingSelf&&(n=e&&i.avatar.isLocalAvatar?Bn.FirstPerson:Bn.ThirdPerson);const s=i.avatar.flags;if(!s)continue;for(const a of s)a.UpdateVisible(n)}}resetAvatarFlags(){var e;for(const i of At.instances)if(i.avatar&&"flags"in i.avatar){const n=i.avatar.flags;if(!n)continue;for(const s of n)"isLocalAvatar"in i.avatar&&((e=i.avatar)!=null&&e.isLocalAvatar)?s.UpdateVisible(Bn.FirstPerson):s.UpdateVisible(Bn.ThirdPerson)}}}qR([m()],Mf.prototype,"useKeys");class XR{constructor(t,e,i){r(this,"context");r(this,"cam");r(this,"spectator");r(this,"follow");r(this,"target");r(this,"view");r(this,"currentObject");this.context=t,this.cam=e,this.spectator=i}get currentTarget(){return this.view}set(t){const e=t==null?void 0:t.currentObject;if(!e){this.spectator.stopSpectating();return}e!==this.currentObject&&(this.currentObject=e,this.view=t,this.follow||(this.follow=C.addComponent(this.cam.gameObject,Cf)),this.target||(this.target=new d.Object3D),e.add(this.target),this.follow.enabled=!0,this.follow.target=this.target,Pi&&console.log("FOLLOW",e),this.context.isInXR?this.context.removeCamera(this.cam):this.context.setCurrentCamera(this.cam))}disable(){Pi&&console.log("STOP FOLLOW",this.currentObject),this.view=void 0,this.currentObject=void 0,this.context.removeCamera(this.cam),this.follow&&(this.follow.enabled=!1)}destroy(){var t;(t=this.target)==null||t.removeFromParent(),this.follow&&C.destroy(this.follow)}update(t){var n,s,a,l,c,h;if(((n=this.currentTarget)==null?void 0:n.isConnected)===!1||((s=this.currentTarget)==null?void 0:s.removed)===!0){Pi&&console.log("Target disconnected or timeout",this.currentTarget),this.spectator.stopSpectating();return}this.currentTarget&&((a=this.currentTarget)==null?void 0:a.currentObject)!==this.currentObject&&(Pi&&console.log("Target changed",this.currentObject,"to",this.currentTarget.currentObject),this.set(this.currentTarget));const e=this.context.mainCamera;if(e){const u=this.cam.threeCamera;(u.near!==e.near||u.far!==e.far)&&(u.near=e.near,u.far=e.far,u.updateProjectionMatrix())}const i=(l=this.follow)==null?void 0:l.target;if(!(!i||!this.follow)){switch(t){case 0:((c=this.view)==null?void 0:c.viewDevice)!==wo.Browser?(this.follow.followFactor=5,this.follow.rotateFactor=5):(this.follow.followFactor=50,this.follow.rotateFactor=50),i.position.set(0,0,0);break;case 1:this.follow.followFactor=3,this.follow.rotateFactor=2,i.position.set(0,.5,1.5);break}this.follow.flipForward=!1,((h=this.view)==null?void 0:h.viewDevice)!==wo.Browser?i.quaternion.copy(QR):i.quaternion.identity()}}}const QR=new d.Quaternion().setFromAxisAngle(new d.Vector3(0,1,0),Math.PI);class YR{constructor(t,e){r(this,"context");r(this,"spectator");this.context=t,this.spectator=e,console.log("[Spectator Camera] Click other avatars or cameras to follow them. Press ESC to exit spectator mode."),this.context.domElement.addEventListener("keydown",n=>{if(!this.spectator.useKeys)return;n.key==="Escape"&&this.spectator.stopSpectating()});let i=0;this.context.input.addEventListener(Re.PointerDown,n=>{i=this.context.time.time}),this.context.input.addEventListener(Re.PointerUp,n=>{const s=this.context.time.time-i;s>1?this.spectator.stopSpectating():this.context.input.getPointerClicked(0)&&s<.3&&this.trySelectObject()})}trySelectObject(){const t=new Jn;t.setMask(16777215);const e=this.context.physics.raycast(t);if(Pi&&console.log(...e),e!=null&&e.length)for(const i of e){if(i.distance<.2)continue;const n=i.object,s=C.getComponentInParent(n,At),a=s==null?void 0:s.connectionId;if(a){const l=this.context.players.getPlayerView(a);this.spectator.target=l,Pi&&console.log("spectate",a,s);break}}}}class KR{constructor(t,e,i){r(this,"guid");r(this,"dontSave",!0);r(this,"targetUserId");r(this,"stoppedFollowing");this.guid=t,this.targetUserId=e,this.stoppedFollowing=i}}class ZR{constructor(t,e){r(this,"guid");r(this,"userId");this.guid=t.guid,this.userId=e}}class JR{constructor(t,e){r(this,"followers",[]);r(this,"context");r(this,"spectator");r(this,"_followerEventMethod");r(this,"_requestFollowMethod");r(this,"_joinedRoomMethod");r(this,"_lastRequestFollowUser");r(this,"_enforceFollowInterval");this.context=t,this.spectator=e,this._followerEventMethod=this.onFollowerEvent.bind(this),this._requestFollowMethod=this.onRequestFollowEvent.bind(this),this._joinedRoomMethod=this.onUserJoinedRoom.bind(this)}awake(){this.context.connection.beginListen("spectator-follower-changed",this._followerEventMethod),this.context.connection.beginListen("spectator-request-follow",this._requestFollowMethod),this.context.connection.beginListen(ee.JoinedRoom,this._joinedRoomMethod),this.context.domElement.addEventListener("keydown",t=>{this.spectator.useKeys&&(t.key==="f"?this.onRequestFollowMe():t.key==="Escape"&&this.onRequestFollowMe(!0))})}destroy(){this.context.connection.stopListen("spectator-follower-changed",this._followerEventMethod),this.context.connection.stopListen("spectator-request-follow",this._requestFollowMethod),this.context.connection.stopListen(ee.JoinedRoom,this._joinedRoomMethod)}onSpectatedObjectChanged(t,e){if(Pi&&console.log(this.context.connection.connectionId,"onSpectatedObjectChanged",t,e),this.context.connection.connectionId){const i=(t==null?void 0:t.userId)===void 0,n=i?e:t==null?void 0:t.userId,s=new KR(this.context.connection.connectionId,n,i);this.context.connection.send("spectator-follower-changed",s)}}onRequestFollowMe(t=!1){if(Pi&&console.log("Request follow",this.context.connection.connectionId),this.context.connection.connectionId){this.spectator.stopSpectating();const e=t?void 0:this.context.connection.connectionId,i=new ZR(this.spectator,e);this.context.connection.send("spectator-request-follow",i)}}onUserJoinedRoom(){S("followme")&&this.onRequestFollowMe()}onFollowerEvent(t){const e=t.targetUserId,i=t.guid;if(Pi&&console.log(t),e===this.context.connection.connectionId)if(t.stoppedFollowing){const n=this.followers.indexOf(i);n!==-1&&(this.followers.splice(n,1),this.removeDisconnectedFollowers(),console.log(i,"unfollows you",this.followers.length))}else this.followers.includes(i)||(this.followers.push(i),this.removeDisconnectedFollowers(),console.log(i,"follows you",this.followers.length))}removeDisconnectedFollowers(){for(let t=this.followers.length-1;t>=0;t--){const e=this.followers[t];this.context.connection.userIsInRoom(e)===!1&&this.followers.splice(t,1)}}onRequestFollowEvent(t){if(this._lastRequestFollowUser=t,t.userId===this.context.connection.connectionId)this.spectator.stopSpectating();else if(t.userId===void 0)this.spectator.stopSpectating();else{const e=this.context.players.getPlayerView(t.userId);if(e)this.spectator.target=e;else return Pi&&console.warn("Could not find view",t.userId),this.enforceFollow(),!1}return!0}enforceFollow(){this._enforceFollowInterval||(this._enforceFollowInterval=setInterval(()=>{this._lastRequestFollowUser===void 0||this._lastRequestFollowUser.userId&&this.spectator.isFollowedBy(this._lastRequestFollowUser.userId)?(clearInterval(this._enforceFollowInterval),this._enforceFollowInterval=void 0):(Pi&&console.log("REQUEST FOLLOW AGAIN",this._lastRequestFollowUser.userId),this.onRequestFollowEvent(this._lastRequestFollowUser))},1e3))}}class jn{constructor(){r(this,"bb",null);r(this,"bb_pos",0)}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSyncedCameraModel(t,e){return(e||new jn).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSyncedCameraModel(t,e){return t.setPosition(t.position()+ae.SIZE_PREFIX_LENGTH),(e||new jn).__init(t.readInt32(t.position())+t.position(),t)}userId(t){const e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}guid(t){const e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}dontSave(){const t=this.bb.__offset(this.bb_pos,8);return t?!!this.bb.readInt8(this.bb_pos+t):!1}pos(t){const e=this.bb.__offset(this.bb_pos,10);return e?(t||new Cr).__init(this.bb_pos+e,this.bb):null}rot(t){const e=this.bb.__offset(this.bb_pos,12);return e?(t||new Cr).__init(this.bb_pos+e,this.bb):null}static startSyncedCameraModel(t){t.startObject(5)}static addUserId(t,e){t.addFieldOffset(0,e,0)}static addGuid(t,e){t.addFieldOffset(1,e,0)}static addDontSave(t,e){t.addFieldInt8(2,+e,0)}static addPos(t,e){t.addFieldStruct(3,e,0)}static addRot(t,e){t.addFieldStruct(4,e,0)}static endSyncedCameraModel(t){return t.endObject()}static finishSyncedCameraModelBuffer(t,e){t.finish(e)}static finishSizePrefixedSyncedCameraModelBuffer(t,e){t.finish(e,void 0,!0)}}var eE=Object.defineProperty,tE=(o,t,e,i)=>{for(var n=void 0,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=a(t,e,n)||n);return n&&eE(t,e,n),n};const Su="SCAM";rg(Su,jn.getRootAsSyncedCameraModel);const yi=new ae.Builder;class iE{constructor(t,e){r(this,"userId");r(this,"guid");this.guid=e,this.userId=t}send(t,e){if(t){yi.clear();const i=yi.createString(this.guid),n=yi.createString(this.userId);jn.startSyncedCameraModel(yi),jn.addGuid(yi,i),jn.addUserId(yi,n);const s=Q(t),a=ju(t);jn.addPos(yi,Cr.createVec3(yi,s.x,s.y,s.z)),jn.addRot(yi,Cr.createVec3(yi,a.x,a.y,a.z));const l=jn.endSyncedCameraModel(yi);yi.finish(l,Su),e.sendBinary(yi.asUint8Array())}}}var bo;const Px=(bo=class extends D{constructor(){super(...arguments);r(this,"cameraPrefab",null);r(this,"_lastWorldPosition");r(this,"_lastWorldQuaternion");r(this,"_model",null);r(this,"_needsUpdate",!0);r(this,"_lastUpdateTime",0);r(this,"remoteCams",{});r(this,"userToCamMap",{});r(this,"_camTimeoutInSeconds",10);r(this,"_receiveCallback",null)}getCameraObject(e){const i=this.userToCamMap[e];return i?this.remoteCams[i].obj:null}async awake(){this._lastWorldPosition=this.worldPosition.clone(),this._lastWorldQuaternion=this.worldQuaternion.clone(),this.cameraPrefab&&("uri"in this.cameraPrefab&&(this.cameraPrefab=await this.cameraPrefab.instantiate(this.gameObject)),this.cameraPrefab&&"isObject3D"in this.cameraPrefab&&(this.cameraPrefab.visible=!1))}onEnable(){this._receiveCallback=this.context.connection.beginListenBinary(Su,this.onReceivedRemoteCameraInfoBin.bind(this))}onDisable(){this.context.connection.stopListenBinary(Su,this._receiveCallback)}update(){for(const s in this.remoteCams){const a=this.remoteCams[s],l=this.context.time.realtimeSinceStartup-a.lastUpdate;if(!a||l>this._camTimeoutInSeconds){j()&&console.log("Remote cam timeout",s),a!=null&&a.obj&&C.destroy(a.obj),delete this.remoteCams[s],a&&delete this.userToCamMap[a.userId],bo.instances.push(a),this.context.players.removePlayerView(a.userId,wo.Browser);continue}}if(this.context.isInXR)return;const e=this.context.mainCamera;if(e===null){this.enabled=!1;return}if(!this.context.connection.isConnected||this.context.connection.connectionId===null)return;this._model===null&&(this._model=new iE(this.context.connection.connectionId,this.context.connection.connectionId+"_camera"));const i=Q(e),n=_e(e);(i.distanceTo(this._lastWorldPosition)>.001||n.angleTo(this._lastWorldQuaternion)>.01)&&(this._needsUpdate=!0),this._lastWorldPosition.copy(i),this._lastWorldQuaternion.copy(n),!((!this._needsUpdate||this.context.time.frameCount%2!==0)&&!(this.context.time.realtimeSinceStartup-this._lastUpdateTime>this._camTimeoutInSeconds*.5))&&(this._lastUpdateTime=this.context.time.realtimeSinceStartup,this._needsUpdate=!1,this._model.send(e,this.context.connection),this.context.isInXR||this.context.players.setPlayerView(this.context.connection.connectionId,e,wo.Browser))}onReceivedRemoteCameraInfoBin(e){const i=e.guid();if(!i)return;const n=e.userId();if(!n||!this.context.connection.userIsInRoom(n)||!this.cameraPrefab)return;let s=this.remoteCams[i];if(!s)if("isObject3D"in this.cameraPrefab){const h=new Sn;h.context=this.context;const u=C.instantiate(this.cameraPrefab,h);s=this.remoteCams[i]={obj:u,lastUpdate:this.context.time.realtimeSinceStartup,userId:n},s.obj.visible=!0,this.gameObject.add(u),this.userToCamMap[n]=i,bo.instances.push(s);const f=C.getOrAddComponent(u,At);f.connectionId=n,f.avatar=u}else return;const a=s.obj;this.context.players.setPlayerView(n,a,wo.Browser),s.lastUpdate=this.context.time.realtimeSinceStartup,Wi.markDirty(a);const l=e.pos();l&&Pr(a,l.x(),l.y(),l.z());const c=e.rot();c&&th(a,c.x(),c.y(),c.z())}},r(bo,"instances",[]),bo);tE([m([d.Object3D,te])],Px.prototype,"cameraPrefab");let jy=Px;var nE=Object.defineProperty,sE=Object.getOwnPropertyDescriptor,Ho=(o,t,e,i)=>{for(var n=i>1?void 0:i?sE(t,e):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(n=(i?a(t,e,n):a(n))||n);return i&&n&&nE(t,e,n),n};const Up="view",zp=S("debugsyncedroom");class kn extends D{constructor(){super(...arguments);r(this,"roomName","");r(this,"urlParameterName","room");r(this,"joinRandomRoom");r(this,"requireRoomParameter",!1);r(this,"autoRejoin",!0);r(this,"createJoinButton",!0);r(this,"createViewOnlyButton",!1);r(this,"_lastJoinedRoom");r(this,"_roomPrefix","");r(this,"_lastPingTime",0);r(this,"_lastRoomTime",-1);r(this,"_userWantsToBeInARoom",!1);r(this,"_roomButton");r(this,"_roomButtonIconJoin");r(this,"_roomButtonIconLeave");r(this,"updateRoomButtonState",()=>{var e,i;this._roomButton&&(this.context.connection.isInRoom?(this._roomButton.title="Leave the networked room",this._roomButton.textContent="Leave Room",(e=this._roomButtonIconJoin)==null||e.remove(),this._roomButton.prepend(this._roomButtonIconLeave)):(this._roomButton.title="Create or join a networked room",this._roomButton.textContent="Join Room",(i=this._roomButtonIconLeave)==null||i.remove(),this._roomButton.prepend(this._roomButtonIconJoin)))});r(this,"_viewOnlyButton");r(this,"onCreateViewOnlyButton",()=>{if(!this._viewOnlyButton){const e=document.createElement("button");this._viewOnlyButton=e,e.classList.add("view-only-button"),e.setAttribute("priority","90"),e.onclick=()=>{var n;const i=this.getViewOnlyUrl();i!=null&&i.length?navigator.canShare({url:i})?(n=navigator.share({url:i}))==null||n.catch(s=>{console.warn(s)}):(navigator.clipboard.writeText(i),Ee("View only URL copied to clipboard")):me("Could not create view only URL")},e.title="Copy the view only URL: A page accessed by the view only URL can not be modified by visiting users.",e.textContent="Share View URL",e.prepend(_t("visibility"))}this.context.menu.appendChild(this._viewOnlyButton)})}get currentRoomName(){const e=S(Up);return e||S(this.urlParameterName)}set roomPrefix(e){this._roomPrefix=e}get roomPrefix(){return this._roomPrefix}awake(){var e;this.joinRandomRoom===void 0&&((e=this.roomName)==null?void 0:e.length)<=0&&(this.joinRandomRoom=!0),zp&&console.log(`SyncedRoom roomName:${this.roomName}, urlParamName:${this.urlParameterName}, joinRandomRoom:${this.joinRandomRoom}`)}onEnable(){const e=S(Up);if(e&&typeof e=="string"&&e.length>0){console.log("Join as viewer"),this.context.connection.joinRoom(e,!0);return}if(this.tryJoinRoom(),this.createJoinButton){const i=this.createRoomButton();this.context.menu.appendChild(i)}this.createViewOnlyButton&&this.onEnableViewOnlyButton()}onDisable(){var e;(e=this._roomButton)==null||e.remove(),this.onDisableViewOnlyButton(),this.roomName&&this.roomName.length>0&&this.context.connection.leaveRoom(this.roomName)}onDestroy(){this.destroyRoomButton()}tryJoinRandomRoom(){this.setRandomRoomUrlParameter(),this.tryJoinRoom()}tryJoinRoom(e=0){var n;e===void 0&&(e=0);let i=!1;if(((n=this.urlParameterName)==null?void 0:n.length)>0){const s=S(this.urlParameterName);if(s&&(typeof s=="string"||typeof s=="number")){i=!0;const a=l0(s.toString());this.roomName=a}else if(this.joinRandomRoom&&(console.log("No room name found in url, generating random one"),this.setRandomRoomUrlParameter(),e<1))return this.tryJoinRoom(e+1)}else this.joinRandomRoom&&(this.roomName===null||this.roomName===void 0||this.roomName.length<=0)&&(this.roomName=this.generateRoomName());return this.requireRoomParameter&&!i?((zp||j())&&console.warn('[SyncedRoom] Missing required room parameter "'+this.urlParameterName+`" in url - will not connect.
|
|
1389
1389
|
To allow joining a room without a query parameter you can set "requireRoomParameter" to false.`),!1):(this.context.connection.isConnected||this.context.connection.connect(),this._lastJoinedRoom=this.roomName,this._roomPrefix&&(this.roomName=this._roomPrefix+this.roomName),this.roomName.length<=0?(console.warn(`[SyncedRoom] Room name is not set so we can not join a networked room.
|
|
1390
1390
|
Please choose one of the following options to fix this:
|
|
1391
1391
|
A) Set a room name in the SyncedRoom component
|
|
@@ -1603,4 +1603,4 @@ Error:`,l),null}}updateColliderCollisionGroups(t){const e=t[zt],i=t.membership;l
|
|
|
1603
1603
|
justify-content: center;
|
|
1604
1604
|
gap: .5rem;
|
|
1605
1605
|
}
|
|
1606
|
-
`),ce(this,gr).innerHTML=ce(this,$t).innerHTML,ce(this,gr).style.cssText="display: flex; align-items: center; justify-content: center;",ce(this,$t).innerHTML=ce(this,gr).outerHTML,ce(this,mr).innerHTML=ce(this,$t).outerHTML,ce(this,mr).prepend(ce(this,yr)),ou(ym,{element:ce(this,mr)}),(n=ce(this,Fa))==null||n.disconnect(),ce(this,Fa)??rn(this,Fa,new MutationObserver(()=>Ml(this,il,Nx).call(this))),ce(this,Fa).observe(ce(this,$t),{attributes:!0}),Hp&&console.log("Needle Button updated")},Nx=function(){ce(this,$t)&&(ce(this,$t).style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))},Yc=new WeakMap,r(Yy,"observedAttributes",["ar","vr","quicklook"]);typeof window<"u"&&!window.customElements.get(t0)&&window.customElements.define(t0,Yy);const Hl=S("debugavatar");class Ky{constructor(t,e,i,n){r(this,"root");r(this,"head");r(this,"leftHand");r(this,"rigthHand");var s;this.root=t,this.head=e,this.leftHand=i,this.rigthHand=n,(s=this.root)==null||s.traverse(a=>a.layers.set(2))}get isValid(){return this.head!==null&&this.head!==void 0}}class Vx{constructor(){r(this,"avatarRegistryUrl",null)}async getOrCreateNewAvatarInstance(t,e){if(!e)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof e=="string"){if(i=await this.loadAvatar(t,e),!i){const s=new Sn;i=C.instantiate(Ua(e,t.scene),s)}}else i=e;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Hl&&console.log("[Custom Avatar] valid config",e,Hl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",e,Hl?n:""),null)}async loadAvatar(t,e){if(console.assert(e!=null&&typeof e=="string","Avatar id must not be null"),e.length<=0||!e)return null;if(Hl&&console.log("[Custom Avatar] "+e+", loading..."),e.endsWith(".glb")||(e+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+e);let s=null;if(n.ok){const l=await n.blob();l&&(s=await l.arrayBuffer())}if(!s)return null;const a=await vn().parseSync(t,s,null,0);return(a==null?void 0:a.scene)??null}const i=new G.GLTFLoader;return Pg(i,t),new Promise((n,s)=>{const a=this.avatarRegistryUrl+"/"+e;i.load(a,async l=>{await vn().createBuiltinComponents(t,a,l,null,void 0),n(l.scene)},l=>{Hl&&console.log("[Custom Avatar] "+l.loaded/l.total*100+"% loaded of "+l.total/1024+"kB")},l=>{console.error("[Custom Avatar] Error when loading: "+l),n(null)})})}cacheModel(t,e){}findAvatar(t){const e=t;let i=e;i.children.length==1&&(i=t.children[0]);let n=this.findAvatarPart(i,["head"]);const s=this.findAvatarPart(i,["left","hand"]),a=this.findAvatarPart(i,["right","hand"]);if(!n){n=e;const c=new d.Vector3;new d.Box3().setFromObject(n).getSize(c);const h=Math.max(c.x,c.y,c.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new Ky(e,n,s,a)}findAvatarPart(t,e){const i=t.name.toLowerCase();let n=!0;for(const s of e){if(!n)break;i.indexOf(s)===-1&&(n=!1)}if(n)return t;if(t.children)for(const s of t.children){const a=this.findAvatarPart(s,e);if(a)return a}return null}handleCustomAvatarErrors(t){if(!t.ok)throw Error(t.statusText);return t}}class $x{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(t){}}class Wx{}const cT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:fe,ActionCollection:Zw,ActionModel:xi,AlignmentConstraint:uh,Animation:Tt,AnimationCurve:Th,AnimationExtension:rf,AnimationTrackHandler:Rf,Animator:xt,AnimatorController:Hi,Antialiasing:Lh,AudioExtension:Wr,AudioListener:Ms,AudioSource:qi,AudioTrackHandler:el,Avatar:ko,AvatarBlink_Simple:zr,AvatarEyeLook_Rotation:Dg,AvatarLoader:Vx,AvatarMarker:At,AvatarModel:Ky,Avatar_Brain_LookAt:Fc,Avatar_MouthShapes:gh,Avatar_MustacheShake:Ag,Avatar_POI:Ts,AxesHelper:ol,BaseUIComponent:Qi,BasicIKConstraint:jg,BehaviorExtension:dy,BehaviorModel:vt,BloomEffect:vf,BoxCollider:ef,BoxGizmo:Xr,BoxHelperComponent:ts,Button:$s,CallInfo:Cs,Camera:ri,CameraTargetReachedEvent:Bc,Canvas:Za,CanvasGroup:Ro,CapsuleCollider:As,ChangeMaterialOnClick:iy,ChangeTransformOnClick:Hr,CharacterController:Nr,CharacterControllerInput:Is,ChromaticAberration:Dh,Collider:di,ColorAdjustments:$o,ColorBySpeedModule:yl,ColorOverLifetimeModule:yf,ContactShadows:yh,ControlTrackHandler:Ef,CustomBranding:qr,Deletable:zg,DeleteBox:qa,DepthOfField:Mn,DeviceFlag:tf,DocumentExtension:$x,DragControls:cr,DropListener:js,Duplicatable:$g,EffectWrapper:Wc,EmissionModule:Ns,EmphasizeOnClick:cl,EnvironmentScene:If,EventList:ye,EventListEvent:Qu,EventSystem:Qt,EventTrigger:sf,FieldWithDefault:Bw,FixedJoint:Py,Fog:pl,GltfExport:Zg,GltfExportBox:Yg,Gradient:Yr,Graphic:Mh,GraphicRaycaster:Yu,GridHelper:ml,GridLayoutGroup:yy,GroundProjectedEnv:ss,GroupActionModel:yo,HideOnStart:Qa,HingeJoint:kh,HorizontalLayoutGroup:gy,Image:vl,InheritVelocityModule:Ry,InputField:Vy,InstanceHandle:zc,InstancingHandler:Xa,Interactable:Ug,Keyframe:ai,LODGroup:Eh,LODModel:gl,Light:pi,LimitVelocityOverLifetimeModule:lt,LogStats:Fg,LookAt:$y,LookAtConstraint:Ur,MainModule:It,MaskableGraphic:Oh,MeshCollider:jo,MeshRenderer:bh,MinMaxCurve:q,MinMaxGradient:Kr,NeedleMenu:rs,NestedGltf:pf,Networking:Oy,NoiseModule:be,ObjectRaycaster:Ei,OffsetConstraint:Qr,OpenURL:wl,OrbitControls:ge,Outline:fl,Padding:Gr,ParticleBurst:vu,ParticleSubEmitter:Ey,ParticleSystem:$c,ParticleSystemRenderer:en,PhysicsExtension:uy,PixelationEffect:Ih,PlayAnimationOnClick:Nc,PlayAudioOnClick:Oo,PlayableDirector:tl,PlayerColor:Ja,PointerEventData:ph,PostProcessingHandler:Dy,PreliminaryAction:hl,PreliminaryTrigger:xh,RawImage:Lf,Rect:nx,RectTransform:xn,ReflectionProbe:Uc,RegisteredAnimationInfo:_o,RemoteSkybox:xf,Renderer:Ti,RendererLightmap:yu,Rigidbody:ot,RotationBySpeedModule:Ji,RotationOverLifetimeModule:Pn,SceneSwitcher:He,ScreenCapture:Wo,ScreenSpaceAmbientOcclusion:Vs,ScreenSpaceAmbientOcclusionN8:On,SetActiveOnClick:ny,ShadowCatcher:Uh,ShapeModule:ky,SharpeningEffect:Bh,SignalAsset:kf,SignalReceiver:Wh,SignalReceiverEvent:$h,SignalTrackHandler:Hc,Size:ix,SizeBySpeedModule:mi,SizeOverLifetimeModule:Zr,SkinnedMeshRenderer:Qg,SmoothFollow:Cf,SpatialGrabRaycaster:Tr,SpatialHtml:qh,SpatialTrigger:Pf,SpatialTriggerReceiver:Zn,SpectatorCamera:Mf,SphereCollider:rl,Sprite:Fs,SpriteData:Ba,SpriteRenderer:ui,SpriteSheet:Ka,SubEmitterSystem:wu,SyncedCamera:jy,SyncedRoom:kn,SyncedTransform:es,TapGestureTrigger:oy,TeleportTarget:df,TestRunner:By,TestSimulateUserData:Fy,Text:Dt,TextBuilder:py,TextExtension:ff,TextureSheetAnimationModule:jt,TiltShiftEffect:cs,ToneMappingEffect:Eo,TrailModule:je,TransformData:We,TransformGizmo:ia,TriggerBuilder:wt,TriggerModel:Po,UIRaycastUtils:kg,UIRootComponent:Ch,USDZExporter:Kn,USDZText:hr,USDZUIExtension:by,UsageMarker:_h,VariantAction:ty,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:my,VideoPlayer:rt,Vignette:ta,VisibilityAction:Sh,Voip:Io,Volume:bl,VolumeParameter:U,VolumeProfile:_f,WebARCameraBackground:Qh,WebARSessionRoot:is,WebXR:uf,WebXRImageTracking:qc,WebXRImageTrackingModel:Hs,WebXRPlaneTracking:Gs,WebXRTrackedImage:Gc,XRControllerFollow:Ws,XRControllerModel:ns,XRControllerMovement:Ai,XRFlag:Vi,XRRig:Bf,XRState:Xt,__Ignore:Wx},Symbol.toStringTag,{value:"Module"})),Mu=S("debugmissingcamera");re.registerCallback(he.MissingCamera,o=>{var l,c,h,u;Mu&&console.warn("Creating missing camera");const t=o.context.scene,e=new d.PerspectiveCamera;e.name="Default Fallback Camera",t.add(e);const i=new ri;if(i.sourceId=((c=(l=o.files)==null?void 0:l[0])==null?void 0:c.src)??"unknown",i.fieldOfView=35,o.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Co.Uninitialized;else if((h=o.context.domElement.getAttribute("skybox-image"))!=null&&h.length||(u=o.context.domElement.getAttribute("background-image"))!=null&&u.length||o.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Co.Skybox,i.backgroundBlurriness=.2;else{if(i.clearFlags=Co.SolidColor,!o.context.domElement.getAttribute("background-color")){let f="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(f="#1f1f1f"),t.background=new d.Color(f)}if(!t.environment){const f=new d.PMREMGenerator$1(o.context.renderer),p=new If("neutral");t.environment=f.fromScene(p,.025).texture}}const s=wr(e,i,!0);e.position.x=0,e.position.y=1,e.position.z=2;const a=o.context.domElement;return(a==null?void 0:a.cameraControls)!=!1&&Hx(o.context,s),s});re.registerCallback(he.ContextCreated,o=>{if(!o.context.mainCamera){Mu&&console.log("Will not auto-fit because a default camera exists");return}const t=o.context.domElement;if((t==null?void 0:t.cameraControls)==!0){const e=b0(o.context.mainCamera);if((e==null?void 0:e.isCameraController)==!0){Mu&&console.log("Will not auto-fit because a camera controller exists");return}Hx(o.context)}});function Hx(o,t){t=t??o.mainCameraComponent;const e=t==null?void 0:t.gameObject;if(Mu&&console.log("Creating default camera controls",t==null?void 0:t.name),e){const i=rh(e,ge);i.sourceId=(t==null?void 0:t.sourceId)??"unknown";const n=o.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&(n==null?void 0:n.toLowerCase())!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const s=parseFloat(n);isNaN(s)||(i.autoRotateSpeed=s)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(he.ContextCreated,o=>{const t=o.context.domElement.getAttribute("autoplay");if(t!==void 0&&(t===""||t==="true"||t==="1")&&o.files)for(const e of o.files)C.foreachComponent(e.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Tt&&n.playAutomatically||n instanceof xt||n instanceof tl&&n.playOnAwake===!0)return!0;if(n instanceof Tt)return n.playAutomatically=!0,!0;if(n instanceof tl)return n.playOnAwake=!0,!0}},!0)!==!0&&Ha.assignAnimationsFromFile(e.file,{createAnimationComponent:(n,s)=>Oi(n,Tt)})});class hT extends ae.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-BaNp_Xtp.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:zf&&zf.tagName.toUpperCase()==="SCRIPT"&&zf.src||new URL("needle-engine.bundle-BRRl7L9U.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(t,e,i={}){return new Promise((n,s)=>{if(e.getAttribute("position").isInterleavedBufferAttribute||e.index&&e.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");t.onerror=h=>{s(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},t.onmessage=h=>{const{data:u}=h;if(u.error)s(new Error(u.error)),t.onmessage=null;else if(u.serialized){const{serialized:f,position:p}=u,g=ae.MeshBVH.deserialize(f,e,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(e.attributes.position.array=p,f.index)if(e.index)e.index.array=f.index;else{const b=new d.BufferAttribute(f.index,1,!1);e.setIndex(b)}y.setBoundingBox&&(e.boundingBox=g.getBoundingBox(new d.Box3)),i.onProgress&&i.onProgress(u.progress),n(g),t.onmessage=null}else i.onProgress&&i.onProgress(u.progress)};const a=e.index?e.index.array:null,l=e.attributes.position.array,c=[l];a&&c.push(a),t.postMessage({index:a,position:l,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...e.groups]}},c.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const dT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:hT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=nM;exports.ActionBuilder=fe;exports.ActionCollection=Zw;exports.ActionModel=xi;exports.Addressables=jv;exports.AlignmentConstraint=uh;exports.AmbientMode=Da;exports.Animation=Tt;exports.AnimationCurve=Th;exports.AnimationExtension=rf;exports.AnimationTrackHandler=Rf;exports.AnimationUtils=Ha;exports.Animator=xt;exports.AnimatorConditionMode=so;exports.AnimatorController=Hi;exports.AnimatorControllerParameterType=Mg;exports.AnimatorStateInfo=Zl;exports.Antialiasing=Lh;exports.Application=wn;exports.AssetDatabase=J0;exports.AssetReference=te;exports.AudioExtension=Wr;exports.AudioListener=Ms;exports.AudioSource=qi;exports.AudioTrackHandler=el;exports.Avatar=ko;exports.AvatarBlink_Simple=zr;exports.AvatarEyeLook_Rotation=Dg;exports.AvatarLoader=Vx;exports.AvatarMarker=At;exports.AvatarModel=Ky;exports.Avatar_Brain_LookAt=Fc;exports.Avatar_MouthShapes=gh;exports.Avatar_MustacheShake=Ag;exports.Avatar_POI=Ts;exports.Axes=wa;exports.AxesHelper=ol;exports.BUILD_TIME=eg;exports.BaseUIComponent=Qi;exports.BasicIKConstraint=jg;exports.BehaviorExtension=dy;exports.BehaviorModel=vt;exports.BloomEffect=vf;exports.BoxCollider=ef;exports.BoxGizmo=Xr;exports.BoxHelperComponent=ts;exports.Button=$s;exports.ButtonsFactory=zn;exports.CallDirection=_w;exports.CallInfo=Cs;exports.Camera=ri;exports.CameraTargetReachedEvent=Bc;exports.Canvas=Za;exports.CanvasGroup=Ro;exports.CapsuleCollider=As;exports.ChangeMaterialOnClick=iy;exports.ChangeTransformOnClick=Hr;exports.CharacterController=Nr;exports.CharacterControllerInput=Is;exports.ChromaticAberration=Dh;exports.CircularBuffer=ki;exports.ClearFlags=Co;exports.ClipExtrapolation=Ln;exports.Collider=di;exports.Collision=mw;exports.CollisionDetectionMode=Xu;exports.ColorAdjustments=$o;exports.ColorBySpeedModule=yl;exports.ColorOverLifetimeModule=yf;exports.Component=lP;exports.Component$1=D;exports.ComponentLifecycleEvents=nh;exports.Components=cT;exports.ConnectionEvents=q0;exports.ContactPoint=pw;exports.ContactShadows=yh;exports.Context=X;exports.ContextArgs=K1;exports.ContextEvent=he;exports.ContextRegistry=re;exports.ControlTrackHandler=Ef;exports.CustomBranding=qr;exports.CustomShader=pu;exports.DefaultReflectionMode=su;exports.Deletable=zg;exports.DeleteBox=qa;exports.DepthOfField=Mn;exports.DeviceFlag=tf;exports.DocumentExtension=$x;exports.DragControls=cr;exports.DragMode=Ng;exports.DropListener=js;exports.Duplicatable=$g;exports.EffectWrapper=Wc;exports.EmissionModule=Ns;exports.EmphasizeOnClick=cl;exports.EngineLoadingView=Cu;exports.EnvironmentScene=If;exports.EventList=ye;exports.EventListEvent=Qu;exports.EventSystem=Qt;exports.EventTrigger=sf;exports.FieldWithDefault=Bw;exports.FileReference=Dc;exports.FileReferenceSerializer=Fv;exports.FileSpawnModel=MM;exports.File_Event=Sw;exports.FixedJoint=Py;exports.Fog=pl;exports.FrameEvent=we;exports.GENERATOR=Bu;exports.GameObject=C;exports.Gizmos=V;exports.GltfExport=Zg;exports.GltfExportBox=Yg;exports.Gradient=Yr;exports.Graphic=Mh;exports.GraphicRaycaster=Yu;exports.Graphics=Mr;exports.GridHelper=ml;exports.GridLayoutGroup=yy;exports.GroundProjectedEnv=ss;exports.GroupActionModel=yo;exports.HideFlags=Ku;exports.HideOnStart=Qa;exports.HingeJoint=kh;exports.HorizontalLayoutGroup=gy;exports.HostData=t1;exports.Image=vl;exports.ImageReference=Lc;exports.ImageReferenceSerializer=Bv;exports.InheritVelocityModule=Ry;exports.Input=N0;exports.InputEventQueue=oi;exports.InputEvents=Re;exports.InputField=Vy;exports.InstanceHandle=zc;exports.InstancingHandler=Xa;exports.InstancingUtil=Wi;exports.InstantiateEvent=hv;exports.InstantiateIdProvider=bt;exports.InstantiateOptions=Sn;exports.Interactable=Ug;exports.JoinedRoomResponse=MC;exports.KeyEventArgs=mC;exports.Keyframe=ai;exports.LODGroup=Eh;exports.LODModel=gl;exports.LeftRoomResponse=OC;exports.Light=pi;exports.LightData=$v;exports.LimitVelocityOverLifetimeModule=lt;exports.LoadingElementOptions=QE;exports.LogStats=Fg;exports.LogType=Mi;exports.LookAt=$y;exports.LookAtConstraint=Ur;exports.MainModule=It;exports.MarkerType=Uy;exports.MaskableGraphic=Oh;exports.Mathf=z;exports.MeshCollider=jo;exports.MeshRenderer=bh;exports.MinMaxCurve=q;exports.MinMaxGradient=Kr;exports.NEKeyboardEvent=ql;exports.NEPointerEvent=ys;exports.NeedleButtonElement=Yy;exports.NeedleEngineWebComponent=Qy;exports.NeedleMenu=rs;exports.NeedlePatchesKey=kd;exports.NeedleXRController=sg;exports.NeedleXRSession=J;exports.NeedleXRSync=Y0;exports.NeedleXRUtils=Z0;exports.NestedGltf=pf;exports.NetworkConnection=Q0;exports.NetworkedStreamEvents=Nn;exports.NetworkedStreams=mh;exports.Networking=Oy;exports.NewInstanceModel=uv;exports.NoiseModule=be;exports.ObjectRaycaster=Ei;exports.ObjectUtils=Do;exports.OffsetConstraint=Qr;exports.OneEuroFilter=Md;exports.OneEuroFilterXYZ=Gm;exports.OpenURL=wl;exports.OrbitControls=ge;exports.Outline=fl;exports.OwnershipEvent=X0;exports.OwnershipModel=lg;exports.PUBLIC_KEY=_a;exports.Padding=Gr;exports.ParticleBurst=vu;exports.ParticleSubEmitter=Ey;exports.ParticleSystem=$c;exports.ParticleSystemBaseBehaviour=Vo;exports.ParticleSystemRenderer=en;exports.ParticleSystemShapeType=bu;exports.PeerHandle=Ia;exports.PeerNetworking=G0;exports.Physics=Rc;exports.PhysicsExtension=uy;exports.PhysicsMaterialCombine=ht;exports.PixelationEffect=Ih;exports.PlayAnimationOnClick=Nc;exports.PlayAudioOnClick=Oo;exports.PlayableDirector=tl;exports.PlayerColor=Ja;exports.PlayerState=yn;exports.PlayerStateEvent=tx;exports.PlayerSync=cy;exports.PlayerView=zv;exports.PlayerViewManager=Nv;exports.PointerEventData=ph;exports.PointerType=zu;exports.PostProcessingEffect=Ye;exports.PostProcessingEffectOrder=it;exports.PostProcessingHandler=Dy;exports.PreliminaryAction=hl;exports.PreliminaryTrigger=xh;exports.PrimitiveType=Or;exports.Progress=oe;exports.PromiseAllWithErrors=Wm;exports.PromiseErrorResult=Xp;exports.RGBAColor=ie;exports.RapierPhysics=Pu;exports.RawImage=Lf;exports.RaycastOptions=Jn;exports.Rect=nx;exports.RectTransform=xn;exports.ReflectionProbe=Uc;exports.RegisteredAnimationInfo=_o;exports.RemoteSkybox=xf;exports.RenderTexture=Sr;exports.RenderTextureSerializer=hw;exports.Renderer=Ti;exports.RendererData=Vv;exports.RendererLightmap=yu;exports.Rigidbody=ot;exports.RigidbodyConstraints=Ne;exports.RoomEvents=ee;exports.RotationBySpeedModule=Ji;exports.RotationOverLifetimeModule=Pn;exports.SceneLightSettings=uu;exports.SceneSwitcher=He;exports.ScreenCapture=Wo;exports.ScreenSpaceAmbientOcclusion=Vs;exports.ScreenSpaceAmbientOcclusionN8=On;exports.SendQueue=fn;exports.SerializationContext=bg;exports.SetActiveOnClick=ny;exports.ShadowCatcher=Uh;exports.ShapeModule=ky;exports.SharpeningEffect=Bh;exports.SignalAsset=kf;exports.SignalReceiver=Wh;exports.SignalReceiverEvent=$h;exports.SignalTrackHandler=Hc;exports.Size=ix;exports.SizeBySpeedModule=mi;exports.SizeOverLifetimeModule=Zr;exports.SkinnedMeshRenderer=Qg;exports.SmoothFollow=Cf;exports.SpatialGrabRaycaster=Tr;exports.SpatialHtml=qh;exports.SpatialTrigger=Pf;exports.SpatialTriggerReceiver=Zn;exports.SpectatorCamera=Mf;exports.SphereCollider=rl;exports.SphereIntersection=dg;exports.SphereOverlapResult=gw;exports.Sprite=Fs;exports.SpriteData=Ba;exports.SpriteRenderer=ui;exports.SpriteSheet=Ka;exports.StateMachineBehaviour=pP;exports.StreamEndedEvent=Eg;exports.StreamReceivedEvent=yw;exports.SubEmitterSystem=wu;exports.SyncedCamera=jy;exports.SyncedRoom=kn;exports.SyncedTransform=es;exports.TapGestureTrigger=oy;exports.TeleportTarget=df;exports.TestRunner=By;exports.TestSceneUtils=nT;exports.TestSimulateUserData=Fy;exports.Text=Dt;exports.TextBuilder=py;exports.TextExtension=ff;exports.TextureSheetAnimationModule=jt;exports.TiltShiftEffect=cs;exports.Time=Wv;exports.ToneMappingEffect=Eo;exports.TrackHandler=Hh;exports.TrackType=_i;exports.TrailModule=je;exports.TransformData=We;exports.TransformGizmo=ia;exports.TriggerBuilder=wt;exports.TriggerModel=Po;exports.TypeStore=k;exports.UIRaycastUtils=kg;exports.UIRootComponent=Ch;exports.USDDocument=Jg;exports.USDObject=Et;exports.USDWriter=$w;exports.USDZExporter=Kn;exports.USDZExporter$1=Ww;exports.USDZText=hr;exports.USDZUIExtension=by;exports.UriSerializer=dw;exports.UsageMarker=_h;exports.UserJoinedOrLeftRoomModel=kC;exports.VERSION=_n;exports.VariantAction=ty;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=my;exports.VideoPlayer=rt;exports.ViewDevice=wo;exports.Vignette=ta;exports.VisibilityAction=Sh;exports.Voip=Io;exports.Volume=bl;exports.VolumeParameter=U;exports.VolumeProfile=_f;exports.WaitForFrames=E1;exports.WaitForPromise=Uv;exports.WaitForSeconds=xg;exports.Watch=Rs;exports.WebARCameraBackground=Qh;exports.WebARSessionRoot=is;exports.WebXR=uf;exports.WebXRButtonFactory=Mo;exports.WebXRImageTracking=qc;exports.WebXRImageTrackingModel=Hs;exports.WebXRPlaneTracking=Gs;exports.WebXRTrackedImage=Gc;exports.XRControllerFollow=Ws;exports.XRControllerModel=ns;exports.XRControllerMovement=Ai;exports.XRFlag=Vi;exports.XRRig=Bf;exports.XRState=Xt;exports.XRStateFlag=Bn;exports.__Ignore=Wx;exports.__internalNotifyObjectDestroyed=sv;exports.activeInHierarchyFieldName=Es;exports.addAttributeChangeCallback=h0;exports.addComponent=Oi;exports.addCustomExtensionPlugin=XM;exports.addNewComponent=wr;exports.addPatch=Fu;exports.apply=$u;exports.applyHMRChanges=aP;exports.applyPrototypeExtensions=Cv;exports.beginListenDestroy=dv;exports.beginListenInstantiate=pv;exports.binaryIdentifierCasts=og;exports.build_scene_functions=Y1;exports.builtinComponentKeyName=tr;exports.calculateProgress01=Xy;exports.clearMessages=RS;exports.colorSerializer=IP;exports.compareAssociation=_v;exports.componentSerializer=jd;exports.copyTexture=M0;exports.createMotion=nw;exports.debugNet=Jt;exports.debugOwner=Xl;exports.decompressGpuTexture=Xw;exports.deepClone=Zc;exports.delay=bn;exports.delayForFrames=Jc;exports.deserializeObject=iu;exports.destroy=Ri;exports.destroyComponentInstance=Ov;exports.determineMimeTypeFromExtension=Cw;exports.disposeObjectResources=Se;exports.disposeStream=Vn;exports.editorGuidKeyName=lc;exports.enableSpatialConsole=br;exports.euler=BP;exports.eventListSerializer=NP;exports.exportAsGLTF=rT;exports.findByGuid=wg;exports.findObjectOfType=ch;exports.findObjectsOfType=Rv;exports.findResourceUsers=fg;exports.fitObjectIntoVolume=k0;exports.foreachComponent=Rr;exports.foreachComponentEnumerator=Hu;exports.forward=WS;exports.generateQRCode=u0;exports.generateSeed=fv;exports.getBoundingBox=li;exports.getCameraController=b0;exports.getComponent=jr;exports.getComponentInChildren=lh;exports.getComponentInParent=Ac;exports.getComponents=ah;exports.getComponentsInChildren=nl;exports.getComponentsInParent=Vu;exports.getFormattedDate=Uw;exports.getIconElement=_t;exports.getIconTexture=gm;exports.getLoader=vn;exports.getOrAddComponent=rh;exports.getParam=S;exports.getParentHierarchyPath=qS;exports.getPath=lS;exports.getPeerOptions=xC;exports.getPeerjsInstance=H0;exports.getResourceUserCount=GC;exports.getTempColor=x0;exports.getTempQuaternion=un;exports.getTempVector=$;exports.getUrlParams=Kc;exports.getVisibleInCustomShadowRendering=O0;exports.getWorldDirection=S0;exports.getWorldEuler=Qm;exports.getWorldPosition=Q;exports.getWorldQuaternion=_e;exports.getWorldRotation=ju;exports.getWorldScale=Ue;exports.hasCommercialLicense=Yn;exports.hasIndieLicense=dh;exports.hasPointerEventComponent=lu;exports.hasProLicense=Qn;exports.hideDebugConsole=A0;exports.imageToCanvas=Qw;exports.instantiate=Er;exports.invokeLoadedImportPluginHooks=Lw;exports.invokeXRSessionEnd=z0;exports.invokeXRSessionStart=U0;exports.isActiveInHierarchy=Ev;exports.isActiveSelf=sl;exports.isAndroidDevice=pS;exports.isAnimationAction=P0;exports.isComponent=fw;exports.isDebugMode=sS;exports.isDesktop=hS;exports.isDestroyed=kr;exports.isDevEnvironment=j;exports.isDisposed=WC;exports.isExporting=sT;exports.isGLTFModel=uw;exports.isHostedOnGlitch=n0;exports.isHotReloadEnabled=vm;exports.isHotReloading=oP;exports.isIPad=uS;exports.isIconElement=qv;exports.isLocalNetwork=Yt;exports.isMacOS=gS;exports.isMobileDevice=dS;exports.isMozillaXR=mS;exports.isQuest=bS;exports.isResourceTrackingEnabled=tv;exports.isSafari=_S;exports.isUsingInstancing=Wu;exports.isiOS=yS;exports.isiPad=fS;exports.loadAsset=$E;exports.loadSync=qy;exports.logHierarchy=qd;exports.lookAtInverse=jS;exports.lookAtObject=eh;exports.lookAtScreenPoint=BS;exports.makeId=rS;exports.makeIdFromRandomWords=a0;exports.makeNameSafe=Xi;exports.markAsInstancedRendered=Tv;exports.microphonePermissionsGranted=vS;exports.nameof=nS;exports.nameofFactory=o0;exports.objectSerializer=cw;exports.offXRSessionEnd=pC;exports.offXRSessionStart=fC;exports.onAfterRender=OP;exports.onBeforeRender=MP;exports.onClear=CP;exports.onDestroy=PP;exports.onInitialized=sw;exports.onStart=ow;exports.onUpdate=rw;exports.onXRSessionEnd=ng;exports.onXRSessionStart=Uu;exports.parseSync=Ix;exports.placeOnSurface=R0;exports.postprocessFBXMaterials=Zm;exports.prefix=RP;exports.pushState=r0;exports.randomNumber=aS;exports.registerBinaryType=rg;exports.registerComponent=Gu;exports.registerComponentExtension=Gg;exports.registerCustomEffectType=tn;exports.registerExportExtensions=qg;exports.registerExtensions=gu;exports.registerHotReloadType=Jv;exports.registerLoader=tg;exports.registerPrefabProvider=gv;exports.registerPrototypeExtensions=Pv;exports.registerType=r1;exports.relativePathPrefix=c0;exports.removeAttributeChangeCallback=d0;exports.removeComponent=vg;exports.removeCustomImportExtensionType=QM;exports.removePatch=dC;exports.resolveUrl=To;exports.sanitizeString=l0;exports.saveImage=Tx;exports.screenshot=ME;exports.screenshot2=Hy;exports.sendDestroyed=mg;exports.serializable=m;exports.serializeObject=vv;exports.serializeable=Br;exports.setActive=dc;exports.setAllowBalloonMessages=g0;exports.setAllowOverlayMessages=PS;exports.setAutoFitEnabled=Hd;exports.setCameraController=Kp;exports.setDestroyed=Lv;exports.setDevEnvironment=tC;exports.setDisposable=ug;exports.setDontDestroy=fa;exports.setOrAddParamsToUrl=qp;exports.setParam=oS;exports.setParamWithoutReload=Mc;exports.setPeerOptions=SC;exports.setResourceTrackingEnabled=$C;exports.setState=Vm;exports.setVisibleInCustomShadowRendering=Km;exports.setWorldEuler=Ym;exports.setWorldPosition=st;exports.setWorldPositionXYZ=Pr;exports.setWorldQuaternion=Gi;exports.setWorldQuaternionXYZW=Xm;exports.setWorldRotation=C0;exports.setWorldRotationXYZ=th;exports.setWorldScale=za;exports.showBalloonError=ih;exports.showBalloonMessage=Ee;exports.showBalloonWarning=me;exports.showDebugConsole=Jm;exports.slerp=IS;exports.syncDestroy=sh;exports.syncField=ly;exports.syncInstantiate=gg;exports.textureToCanvas=XS;exports.tryCastBinary=$0;exports.tryDetermineMimetypeFromBinary=Mw;exports.tryDetermineMimetypeFromURL=Pw;exports.tryFindObject=Ua;exports.tryGetGuid=W0;exports.unregisterHotReloadType=ew;exports.unwatchWrite=$m;exports.useForAutoFit=v0;exports.validate=St;exports.watchWrite=Iu;
|
|
1606
|
+
`),ce(this,gr).innerHTML=ce(this,$t).innerHTML,ce(this,gr).style.cssText="display: flex; align-items: center; justify-content: center;",ce(this,$t).innerHTML=ce(this,gr).outerHTML,ce(this,mr).innerHTML=ce(this,$t).outerHTML,ce(this,mr).prepend(ce(this,yr)),ou(ym,{element:ce(this,mr)}),(n=ce(this,Fa))==null||n.disconnect(),ce(this,Fa)??rn(this,Fa,new MutationObserver(()=>Ml(this,il,Nx).call(this))),ce(this,Fa).observe(ce(this,$t),{attributes:!0}),Hp&&console.log("Needle Button updated")},Nx=function(){ce(this,$t)&&(ce(this,$t).style.display==="none"?this.style.display="none":this.style.display==="none"&&(this.style.display=""))},Yc=new WeakMap,r(Yy,"observedAttributes",["ar","vr","quicklook"]);typeof window<"u"&&!window.customElements.get(t0)&&window.customElements.define(t0,Yy);const Hl=S("debugavatar");class Ky{constructor(t,e,i,n){r(this,"root");r(this,"head");r(this,"leftHand");r(this,"rigthHand");var s;this.root=t,this.head=e,this.leftHand=i,this.rigthHand=n,(s=this.root)==null||s.traverse(a=>a.layers.set(2))}get isValid(){return this.head!==null&&this.head!==void 0}}class Vx{constructor(){r(this,"avatarRegistryUrl",null)}async getOrCreateNewAvatarInstance(t,e){if(!e)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof e=="string"){if(i=await this.loadAvatar(t,e),!i){const s=new Sn;i=C.instantiate(Ua(e,t.scene),s)}}else i=e;if(!i)return null;const n=this.findAvatar(i);return n.isValid?(Hl&&console.log("[Custom Avatar] valid config",e,Hl?n:""),n):(console.warn("[Custom Avatar] config isn't valid",e,Hl?n:""),null)}async loadAvatar(t,e){if(console.assert(e!=null&&typeof e=="string","Avatar id must not be null"),e.length<=0||!e)return null;if(Hl&&console.log("[Custom Avatar] "+e+", loading..."),e.endsWith(".glb")||(e+=".glb"),this.avatarRegistryUrl===null){const n=await fetch("./"+e);let s=null;if(n.ok){const l=await n.blob();l&&(s=await l.arrayBuffer())}if(!s)return null;const a=await vn().parseSync(t,s,null,0);return(a==null?void 0:a.scene)??null}const i=new G.GLTFLoader;return Pg(i,t),new Promise((n,s)=>{const a=this.avatarRegistryUrl+"/"+e;i.load(a,async l=>{await vn().createBuiltinComponents(t,a,l,null,void 0),n(l.scene)},l=>{Hl&&console.log("[Custom Avatar] "+l.loaded/l.total*100+"% loaded of "+l.total/1024+"kB")},l=>{console.error("[Custom Avatar] Error when loading: "+l),n(null)})})}cacheModel(t,e){}findAvatar(t){const e=t;let i=e;i.children.length==1&&(i=t.children[0]);let n=this.findAvatarPart(i,["head"]);const s=this.findAvatarPart(i,["left","hand"]),a=this.findAvatarPart(i,["right","hand"]);if(!n){n=e;const c=new d.Vector3;new d.Box3().setFromObject(n).getSize(c);const h=Math.max(c.x,c.y,c.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+h+" meters! Should be < 0.3m"),h>.3&&n.scale.multiplyScalar(1/h*.3)}return new Ky(e,n,s,a)}findAvatarPart(t,e){const i=t.name.toLowerCase();let n=!0;for(const s of e){if(!n)break;i.indexOf(s)===-1&&(n=!1)}if(n)return t;if(t.children)for(const s of t.children){const a=this.findAvatarPart(s,e);if(a)return a}return null}handleCustomAvatarErrors(t){if(!t.ok)throw Error(t.statusText);return t}}class $x{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(t){}}class Wx{}const cT=Object.freeze(Object.defineProperty({__proto__:null,ActionBuilder:fe,ActionCollection:Zw,ActionModel:xi,AlignmentConstraint:uh,Animation:Tt,AnimationCurve:Th,AnimationExtension:rf,AnimationTrackHandler:Rf,Animator:xt,AnimatorController:Hi,Antialiasing:Lh,AudioExtension:Wr,AudioListener:Ms,AudioSource:qi,AudioTrackHandler:el,Avatar:ko,AvatarBlink_Simple:zr,AvatarEyeLook_Rotation:Dg,AvatarLoader:Vx,AvatarMarker:At,AvatarModel:Ky,Avatar_Brain_LookAt:Fc,Avatar_MouthShapes:gh,Avatar_MustacheShake:Ag,Avatar_POI:Ts,AxesHelper:ol,BaseUIComponent:Qi,BasicIKConstraint:jg,BehaviorExtension:dy,BehaviorModel:vt,BloomEffect:vf,BoxCollider:ef,BoxGizmo:Xr,BoxHelperComponent:ts,Button:$s,CallInfo:Cs,Camera:ri,CameraTargetReachedEvent:Bc,Canvas:Za,CanvasGroup:Ro,CapsuleCollider:As,ChangeMaterialOnClick:iy,ChangeTransformOnClick:Hr,CharacterController:Nr,CharacterControllerInput:Is,ChromaticAberration:Dh,Collider:di,ColorAdjustments:$o,ColorBySpeedModule:yl,ColorOverLifetimeModule:yf,ContactShadows:yh,ControlTrackHandler:Ef,CustomBranding:qr,Deletable:zg,DeleteBox:qa,DepthOfField:Mn,DeviceFlag:tf,DocumentExtension:$x,DragControls:cr,DropListener:js,Duplicatable:$g,EffectWrapper:Wc,EmissionModule:Ns,EmphasizeOnClick:cl,EnvironmentScene:If,EventList:ye,EventListEvent:Qu,EventSystem:Qt,EventTrigger:sf,FieldWithDefault:Bw,FixedJoint:Py,Fog:pl,GltfExport:Zg,GltfExportBox:Yg,Gradient:Yr,Graphic:Mh,GraphicRaycaster:Yu,GridHelper:ml,GridLayoutGroup:yy,GroundProjectedEnv:ss,GroupActionModel:yo,HideOnStart:Qa,HingeJoint:kh,HorizontalLayoutGroup:gy,Image:vl,InheritVelocityModule:Ry,InputField:Vy,InstanceHandle:zc,InstancingHandler:Xa,Interactable:Ug,Keyframe:ai,LODGroup:Eh,LODModel:gl,Light:pi,LimitVelocityOverLifetimeModule:lt,LogStats:Fg,LookAt:$y,LookAtConstraint:Ur,MainModule:It,MaskableGraphic:Oh,MeshCollider:jo,MeshRenderer:bh,MinMaxCurve:q,MinMaxGradient:Kr,NeedleMenu:rs,NestedGltf:pf,Networking:Oy,NoiseModule:be,ObjectRaycaster:Ei,OffsetConstraint:Qr,OpenURL:wl,OrbitControls:ge,Outline:fl,Padding:Gr,ParticleBurst:vu,ParticleSubEmitter:Ey,ParticleSystem:$c,ParticleSystemRenderer:en,PhysicsExtension:uy,PixelationEffect:Ih,PlayAnimationOnClick:Nc,PlayAudioOnClick:Oo,PlayableDirector:tl,PlayerColor:Ja,PointerEventData:ph,PostProcessingHandler:Dy,PreliminaryAction:hl,PreliminaryTrigger:xh,RawImage:Lf,Rect:nx,RectTransform:xn,ReflectionProbe:Uc,RegisteredAnimationInfo:_o,RemoteSkybox:xf,Renderer:Ti,RendererLightmap:yu,Rigidbody:ot,RotationBySpeedModule:Ji,RotationOverLifetimeModule:Pn,SceneSwitcher:He,ScreenCapture:Wo,ScreenSpaceAmbientOcclusion:Vs,ScreenSpaceAmbientOcclusionN8:On,SetActiveOnClick:ny,ShadowCatcher:Uh,ShapeModule:ky,SharpeningEffect:Bh,SignalAsset:kf,SignalReceiver:Wh,SignalReceiverEvent:$h,SignalTrackHandler:Hc,Size:ix,SizeBySpeedModule:mi,SizeOverLifetimeModule:Zr,SkinnedMeshRenderer:Qg,SmoothFollow:Cf,SpatialGrabRaycaster:Tr,SpatialHtml:qh,SpatialTrigger:Pf,SpatialTriggerReceiver:Zn,SpectatorCamera:Mf,SphereCollider:rl,Sprite:Fs,SpriteData:Ba,SpriteRenderer:ui,SpriteSheet:Ka,SubEmitterSystem:wu,SyncedCamera:jy,SyncedRoom:kn,SyncedTransform:es,TapGestureTrigger:oy,TeleportTarget:df,TestRunner:By,TestSimulateUserData:Fy,Text:Dt,TextBuilder:py,TextExtension:ff,TextureSheetAnimationModule:jt,TiltShiftEffect:cs,ToneMappingEffect:Eo,TrailModule:je,TransformData:We,TransformGizmo:ia,TriggerBuilder:wt,TriggerModel:Po,UIRaycastUtils:kg,UIRootComponent:Ch,USDZExporter:Kn,USDZText:hr,USDZUIExtension:by,UsageMarker:_h,VariantAction:ty,VelocityOverLifetimeModule:ze,VerticalLayoutGroup:my,VideoPlayer:rt,Vignette:ta,VisibilityAction:Sh,Voip:Io,Volume:bl,VolumeParameter:U,VolumeProfile:_f,WebARCameraBackground:Qh,WebARSessionRoot:is,WebXR:uf,WebXRImageTracking:qc,WebXRImageTrackingModel:Hs,WebXRPlaneTracking:Gs,WebXRTrackedImage:Gc,XRControllerFollow:Ws,XRControllerModel:ns,XRControllerMovement:Ai,XRFlag:Vi,XRRig:Bf,XRState:Xt,__Ignore:Wx},Symbol.toStringTag,{value:"Module"})),Mu=S("debugmissingcamera");re.registerCallback(he.MissingCamera,o=>{var l,c,h;Mu&&console.warn("Creating missing camera");const t=o.context.scene,e=new d.PerspectiveCamera;e.name="Default Fallback Camera",t.add(e);const i=new ri;if(i.sourceId=((c=(l=o.files)==null?void 0:l[0])==null?void 0:c.src)??"unknown",i.fieldOfView=35,o.context.domElement.getAttribute("transparent")!=null)i.clearFlags=Co.Uninitialized;else if((h=o.context.domElement.getAttribute("background-image"))!=null&&h.length||o.context.lightmaps.tryGetSkybox(i.sourceId))i.clearFlags=Co.Skybox,o.context.domElement.getAttribute("background-blurriness")===null&&(o.context.scene.backgroundBlurriness=.2);else{if(i.clearFlags=Co.SolidColor,!o.context.domElement.getAttribute("background-color")){let u="#efefef";typeof window!==void 0&&window.matchMedia("(prefers-color-scheme: dark)").matches&&(u="#1f1f1f"),t.background=new d.Color(u)}if(!t.environment){const u=new d.PMREMGenerator$1(o.context.renderer),f=new If("neutral");t.environment=u.fromScene(f,.025).texture}}const s=wr(e,i,!0);e.position.x=0,e.position.y=1,e.position.z=2;const a=o.context.domElement;return(a==null?void 0:a.cameraControls)!=!1&&Hx(o.context,s),s});re.registerCallback(he.ContextCreated,o=>{if(!o.context.mainCamera){Mu&&console.log("Will not auto-fit because a default camera exists");return}const t=o.context.domElement;if((t==null?void 0:t.cameraControls)==!0){const e=b0(o.context.mainCamera);if((e==null?void 0:e.isCameraController)==!0){Mu&&console.log("Will not auto-fit because a camera controller exists");return}Hx(o.context)}});function Hx(o,t){t=t??o.mainCameraComponent;const e=t==null?void 0:t.gameObject;if(Mu&&console.log("Creating default camera controls",t==null?void 0:t.name),e){const i=rh(e,ge);i.sourceId=(t==null?void 0:t.sourceId)??"unknown";const n=o.domElement.getAttribute("auto-rotate");if(i.autoRotate=n!=null&&n!="0"&&(n==null?void 0:n.toLowerCase())!="false",i.autoRotateSpeed=.5,i.autoFit=!0,i.autoRotate&&n){const s=parseFloat(n);isNaN(s)||(i.autoRotateSpeed=s)}}else console.warn("Missing camera object, can not add orbit controls")}re.registerCallback(he.ContextCreated,o=>{const t=o.context.domElement.getAttribute("autoplay");if(t!==void 0&&(t===""||t==="true"||t==="1")&&o.files)for(const e of o.files)C.foreachComponent(e.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Tt&&n.playAutomatically||n instanceof xt||n instanceof tl&&n.playOnAwake===!0)return!0;if(n instanceof Tt)return n.playAutomatically=!0,!0;if(n instanceof tl)return n.playOnAwake=!0,!0}},!0)!==!0&&Ha.assignAnimationsFromFile(e.file,{createAnimationComponent:(n,s)=>Oi(n,Tt)})});class hT extends ae.WorkerBase{constructor(){super(new Worker(new URL("/generateMeshBVH.worker-BaNp_Xtp.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:zf&&zf.tagName.toUpperCase()==="SCRIPT"&&zf.src||new URL("needle-engine.bundle-BPvX8tv9.umd.cjs",document.baseURI).href),{type:"module"})),this.name="GenerateMeshBVHWorker"}runTask(t,e,i={}){return new Promise((n,s)=>{if(e.getAttribute("position").isInterleavedBufferAttribute||e.index&&e.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");t.onerror=h=>{s(new Error(`[GenerateMeshBVHWorker] ${h.message||"Unknown error. Please check the server console. If you're using vite try adding 'three-mesh-bvh' to 'optimizeDeps.exclude' in your vite.config.js"}`))},t.onmessage=h=>{const{data:u}=h;if(u.error)s(new Error(u.error)),t.onmessage=null;else if(u.serialized){const{serialized:f,position:p}=u,g=ae.MeshBVH.deserialize(f,e,{setIndex:!1}),y=Object.assign({setBoundingBox:!0},i);if(e.attributes.position.array=p,f.index)if(e.index)e.index.array=f.index;else{const b=new d.BufferAttribute(f.index,1,!1);e.setIndex(b)}y.setBoundingBox&&(e.boundingBox=g.getBoundingBox(new d.Box3)),i.onProgress&&i.onProgress(u.progress),n(g),t.onmessage=null}else i.onProgress&&i.onProgress(u.progress)};const a=e.index?e.index.array:null,l=e.attributes.position.array,c=[l];a&&c.push(a),t.postMessage({index:a,position:l,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...e.groups]}},c.map(h=>h.buffer).filter(h=>typeof SharedArrayBuffer>"u"||!(h instanceof SharedArrayBuffer)))})}}const dT=Object.freeze(Object.defineProperty({__proto__:null,GenerateMeshBVHWorker:hT},Symbol.toStringTag,{value:"Module"}));exports.$physicsKey=nM;exports.ActionBuilder=fe;exports.ActionCollection=Zw;exports.ActionModel=xi;exports.Addressables=jv;exports.AlignmentConstraint=uh;exports.AmbientMode=Da;exports.Animation=Tt;exports.AnimationCurve=Th;exports.AnimationExtension=rf;exports.AnimationTrackHandler=Rf;exports.AnimationUtils=Ha;exports.Animator=xt;exports.AnimatorConditionMode=so;exports.AnimatorController=Hi;exports.AnimatorControllerParameterType=Mg;exports.AnimatorStateInfo=Zl;exports.Antialiasing=Lh;exports.Application=wn;exports.AssetDatabase=J0;exports.AssetReference=te;exports.AudioExtension=Wr;exports.AudioListener=Ms;exports.AudioSource=qi;exports.AudioTrackHandler=el;exports.Avatar=ko;exports.AvatarBlink_Simple=zr;exports.AvatarEyeLook_Rotation=Dg;exports.AvatarLoader=Vx;exports.AvatarMarker=At;exports.AvatarModel=Ky;exports.Avatar_Brain_LookAt=Fc;exports.Avatar_MouthShapes=gh;exports.Avatar_MustacheShake=Ag;exports.Avatar_POI=Ts;exports.Axes=wa;exports.AxesHelper=ol;exports.BUILD_TIME=eg;exports.BaseUIComponent=Qi;exports.BasicIKConstraint=jg;exports.BehaviorExtension=dy;exports.BehaviorModel=vt;exports.BloomEffect=vf;exports.BoxCollider=ef;exports.BoxGizmo=Xr;exports.BoxHelperComponent=ts;exports.Button=$s;exports.ButtonsFactory=zn;exports.CallDirection=_w;exports.CallInfo=Cs;exports.Camera=ri;exports.CameraTargetReachedEvent=Bc;exports.Canvas=Za;exports.CanvasGroup=Ro;exports.CapsuleCollider=As;exports.ChangeMaterialOnClick=iy;exports.ChangeTransformOnClick=Hr;exports.CharacterController=Nr;exports.CharacterControllerInput=Is;exports.ChromaticAberration=Dh;exports.CircularBuffer=ki;exports.ClearFlags=Co;exports.ClipExtrapolation=Ln;exports.Collider=di;exports.Collision=mw;exports.CollisionDetectionMode=Xu;exports.ColorAdjustments=$o;exports.ColorBySpeedModule=yl;exports.ColorOverLifetimeModule=yf;exports.Component=lP;exports.Component$1=D;exports.ComponentLifecycleEvents=nh;exports.Components=cT;exports.ConnectionEvents=q0;exports.ContactPoint=pw;exports.ContactShadows=yh;exports.Context=X;exports.ContextArgs=K1;exports.ContextEvent=he;exports.ContextRegistry=re;exports.ControlTrackHandler=Ef;exports.CustomBranding=qr;exports.CustomShader=pu;exports.DefaultReflectionMode=su;exports.Deletable=zg;exports.DeleteBox=qa;exports.DepthOfField=Mn;exports.DeviceFlag=tf;exports.DocumentExtension=$x;exports.DragControls=cr;exports.DragMode=Ng;exports.DropListener=js;exports.Duplicatable=$g;exports.EffectWrapper=Wc;exports.EmissionModule=Ns;exports.EmphasizeOnClick=cl;exports.EngineLoadingView=Cu;exports.EnvironmentScene=If;exports.EventList=ye;exports.EventListEvent=Qu;exports.EventSystem=Qt;exports.EventTrigger=sf;exports.FieldWithDefault=Bw;exports.FileReference=Dc;exports.FileReferenceSerializer=Fv;exports.FileSpawnModel=MM;exports.File_Event=Sw;exports.FixedJoint=Py;exports.Fog=pl;exports.FrameEvent=we;exports.GENERATOR=Bu;exports.GameObject=C;exports.Gizmos=V;exports.GltfExport=Zg;exports.GltfExportBox=Yg;exports.Gradient=Yr;exports.Graphic=Mh;exports.GraphicRaycaster=Yu;exports.Graphics=Mr;exports.GridHelper=ml;exports.GridLayoutGroup=yy;exports.GroundProjectedEnv=ss;exports.GroupActionModel=yo;exports.HideFlags=Ku;exports.HideOnStart=Qa;exports.HingeJoint=kh;exports.HorizontalLayoutGroup=gy;exports.HostData=t1;exports.Image=vl;exports.ImageReference=Lc;exports.ImageReferenceSerializer=Bv;exports.InheritVelocityModule=Ry;exports.Input=N0;exports.InputEventQueue=oi;exports.InputEvents=Re;exports.InputField=Vy;exports.InstanceHandle=zc;exports.InstancingHandler=Xa;exports.InstancingUtil=Wi;exports.InstantiateEvent=hv;exports.InstantiateIdProvider=bt;exports.InstantiateOptions=Sn;exports.Interactable=Ug;exports.JoinedRoomResponse=MC;exports.KeyEventArgs=mC;exports.Keyframe=ai;exports.LODGroup=Eh;exports.LODModel=gl;exports.LeftRoomResponse=OC;exports.Light=pi;exports.LightData=$v;exports.LimitVelocityOverLifetimeModule=lt;exports.LoadingElementOptions=QE;exports.LogStats=Fg;exports.LogType=Mi;exports.LookAt=$y;exports.LookAtConstraint=Ur;exports.MainModule=It;exports.MarkerType=Uy;exports.MaskableGraphic=Oh;exports.Mathf=z;exports.MeshCollider=jo;exports.MeshRenderer=bh;exports.MinMaxCurve=q;exports.MinMaxGradient=Kr;exports.NEKeyboardEvent=ql;exports.NEPointerEvent=ys;exports.NeedleButtonElement=Yy;exports.NeedleEngineWebComponent=Qy;exports.NeedleMenu=rs;exports.NeedlePatchesKey=kd;exports.NeedleXRController=sg;exports.NeedleXRSession=J;exports.NeedleXRSync=Y0;exports.NeedleXRUtils=Z0;exports.NestedGltf=pf;exports.NetworkConnection=Q0;exports.NetworkedStreamEvents=Nn;exports.NetworkedStreams=mh;exports.Networking=Oy;exports.NewInstanceModel=uv;exports.NoiseModule=be;exports.ObjectRaycaster=Ei;exports.ObjectUtils=Do;exports.OffsetConstraint=Qr;exports.OneEuroFilter=Md;exports.OneEuroFilterXYZ=Gm;exports.OpenURL=wl;exports.OrbitControls=ge;exports.Outline=fl;exports.OwnershipEvent=X0;exports.OwnershipModel=lg;exports.PUBLIC_KEY=_a;exports.Padding=Gr;exports.ParticleBurst=vu;exports.ParticleSubEmitter=Ey;exports.ParticleSystem=$c;exports.ParticleSystemBaseBehaviour=Vo;exports.ParticleSystemRenderer=en;exports.ParticleSystemShapeType=bu;exports.PeerHandle=Ia;exports.PeerNetworking=G0;exports.Physics=Rc;exports.PhysicsExtension=uy;exports.PhysicsMaterialCombine=ht;exports.PixelationEffect=Ih;exports.PlayAnimationOnClick=Nc;exports.PlayAudioOnClick=Oo;exports.PlayableDirector=tl;exports.PlayerColor=Ja;exports.PlayerState=yn;exports.PlayerStateEvent=tx;exports.PlayerSync=cy;exports.PlayerView=zv;exports.PlayerViewManager=Nv;exports.PointerEventData=ph;exports.PointerType=zu;exports.PostProcessingEffect=Ye;exports.PostProcessingEffectOrder=it;exports.PostProcessingHandler=Dy;exports.PreliminaryAction=hl;exports.PreliminaryTrigger=xh;exports.PrimitiveType=Or;exports.Progress=oe;exports.PromiseAllWithErrors=Wm;exports.PromiseErrorResult=Xp;exports.RGBAColor=ie;exports.RapierPhysics=Pu;exports.RawImage=Lf;exports.RaycastOptions=Jn;exports.Rect=nx;exports.RectTransform=xn;exports.ReflectionProbe=Uc;exports.RegisteredAnimationInfo=_o;exports.RemoteSkybox=xf;exports.RenderTexture=Sr;exports.RenderTextureSerializer=hw;exports.Renderer=Ti;exports.RendererData=Vv;exports.RendererLightmap=yu;exports.Rigidbody=ot;exports.RigidbodyConstraints=Ne;exports.RoomEvents=ee;exports.RotationBySpeedModule=Ji;exports.RotationOverLifetimeModule=Pn;exports.SceneLightSettings=uu;exports.SceneSwitcher=He;exports.ScreenCapture=Wo;exports.ScreenSpaceAmbientOcclusion=Vs;exports.ScreenSpaceAmbientOcclusionN8=On;exports.SendQueue=fn;exports.SerializationContext=bg;exports.SetActiveOnClick=ny;exports.ShadowCatcher=Uh;exports.ShapeModule=ky;exports.SharpeningEffect=Bh;exports.SignalAsset=kf;exports.SignalReceiver=Wh;exports.SignalReceiverEvent=$h;exports.SignalTrackHandler=Hc;exports.Size=ix;exports.SizeBySpeedModule=mi;exports.SizeOverLifetimeModule=Zr;exports.SkinnedMeshRenderer=Qg;exports.SmoothFollow=Cf;exports.SpatialGrabRaycaster=Tr;exports.SpatialHtml=qh;exports.SpatialTrigger=Pf;exports.SpatialTriggerReceiver=Zn;exports.SpectatorCamera=Mf;exports.SphereCollider=rl;exports.SphereIntersection=dg;exports.SphereOverlapResult=gw;exports.Sprite=Fs;exports.SpriteData=Ba;exports.SpriteRenderer=ui;exports.SpriteSheet=Ka;exports.StateMachineBehaviour=pP;exports.StreamEndedEvent=Eg;exports.StreamReceivedEvent=yw;exports.SubEmitterSystem=wu;exports.SyncedCamera=jy;exports.SyncedRoom=kn;exports.SyncedTransform=es;exports.TapGestureTrigger=oy;exports.TeleportTarget=df;exports.TestRunner=By;exports.TestSceneUtils=nT;exports.TestSimulateUserData=Fy;exports.Text=Dt;exports.TextBuilder=py;exports.TextExtension=ff;exports.TextureSheetAnimationModule=jt;exports.TiltShiftEffect=cs;exports.Time=Wv;exports.ToneMappingEffect=Eo;exports.TrackHandler=Hh;exports.TrackType=_i;exports.TrailModule=je;exports.TransformData=We;exports.TransformGizmo=ia;exports.TriggerBuilder=wt;exports.TriggerModel=Po;exports.TypeStore=k;exports.UIRaycastUtils=kg;exports.UIRootComponent=Ch;exports.USDDocument=Jg;exports.USDObject=Et;exports.USDWriter=$w;exports.USDZExporter=Kn;exports.USDZExporter$1=Ww;exports.USDZText=hr;exports.USDZUIExtension=by;exports.UriSerializer=dw;exports.UsageMarker=_h;exports.UserJoinedOrLeftRoomModel=kC;exports.VERSION=_n;exports.VariantAction=ty;exports.VelocityOverLifetimeModule=ze;exports.VerticalLayoutGroup=my;exports.VideoPlayer=rt;exports.ViewDevice=wo;exports.Vignette=ta;exports.VisibilityAction=Sh;exports.Voip=Io;exports.Volume=bl;exports.VolumeParameter=U;exports.VolumeProfile=_f;exports.WaitForFrames=E1;exports.WaitForPromise=Uv;exports.WaitForSeconds=xg;exports.Watch=Rs;exports.WebARCameraBackground=Qh;exports.WebARSessionRoot=is;exports.WebXR=uf;exports.WebXRButtonFactory=Mo;exports.WebXRImageTracking=qc;exports.WebXRImageTrackingModel=Hs;exports.WebXRPlaneTracking=Gs;exports.WebXRTrackedImage=Gc;exports.XRControllerFollow=Ws;exports.XRControllerModel=ns;exports.XRControllerMovement=Ai;exports.XRFlag=Vi;exports.XRRig=Bf;exports.XRState=Xt;exports.XRStateFlag=Bn;exports.__Ignore=Wx;exports.__internalNotifyObjectDestroyed=sv;exports.activeInHierarchyFieldName=Es;exports.addAttributeChangeCallback=h0;exports.addComponent=Oi;exports.addCustomExtensionPlugin=XM;exports.addNewComponent=wr;exports.addPatch=Fu;exports.apply=$u;exports.applyHMRChanges=aP;exports.applyPrototypeExtensions=Cv;exports.beginListenDestroy=dv;exports.beginListenInstantiate=pv;exports.binaryIdentifierCasts=og;exports.build_scene_functions=Y1;exports.builtinComponentKeyName=tr;exports.calculateProgress01=Xy;exports.clearMessages=RS;exports.colorSerializer=IP;exports.compareAssociation=_v;exports.componentSerializer=jd;exports.copyTexture=M0;exports.createMotion=nw;exports.debugNet=Jt;exports.debugOwner=Xl;exports.decompressGpuTexture=Xw;exports.deepClone=Zc;exports.delay=bn;exports.delayForFrames=Jc;exports.deserializeObject=iu;exports.destroy=Ri;exports.destroyComponentInstance=Ov;exports.determineMimeTypeFromExtension=Cw;exports.disposeObjectResources=Se;exports.disposeStream=Vn;exports.editorGuidKeyName=lc;exports.enableSpatialConsole=br;exports.euler=BP;exports.eventListSerializer=NP;exports.exportAsGLTF=rT;exports.findByGuid=wg;exports.findObjectOfType=ch;exports.findObjectsOfType=Rv;exports.findResourceUsers=fg;exports.fitObjectIntoVolume=k0;exports.foreachComponent=Rr;exports.foreachComponentEnumerator=Hu;exports.forward=WS;exports.generateQRCode=u0;exports.generateSeed=fv;exports.getBoundingBox=li;exports.getCameraController=b0;exports.getComponent=jr;exports.getComponentInChildren=lh;exports.getComponentInParent=Ac;exports.getComponents=ah;exports.getComponentsInChildren=nl;exports.getComponentsInParent=Vu;exports.getFormattedDate=Uw;exports.getIconElement=_t;exports.getIconTexture=gm;exports.getLoader=vn;exports.getOrAddComponent=rh;exports.getParam=S;exports.getParentHierarchyPath=qS;exports.getPath=lS;exports.getPeerOptions=xC;exports.getPeerjsInstance=H0;exports.getResourceUserCount=GC;exports.getTempColor=x0;exports.getTempQuaternion=un;exports.getTempVector=$;exports.getUrlParams=Kc;exports.getVisibleInCustomShadowRendering=O0;exports.getWorldDirection=S0;exports.getWorldEuler=Qm;exports.getWorldPosition=Q;exports.getWorldQuaternion=_e;exports.getWorldRotation=ju;exports.getWorldScale=Ue;exports.hasCommercialLicense=Yn;exports.hasIndieLicense=dh;exports.hasPointerEventComponent=lu;exports.hasProLicense=Qn;exports.hideDebugConsole=A0;exports.imageToCanvas=Qw;exports.instantiate=Er;exports.invokeLoadedImportPluginHooks=Lw;exports.invokeXRSessionEnd=z0;exports.invokeXRSessionStart=U0;exports.isActiveInHierarchy=Ev;exports.isActiveSelf=sl;exports.isAndroidDevice=pS;exports.isAnimationAction=P0;exports.isComponent=fw;exports.isDebugMode=sS;exports.isDesktop=hS;exports.isDestroyed=kr;exports.isDevEnvironment=j;exports.isDisposed=WC;exports.isExporting=sT;exports.isGLTFModel=uw;exports.isHostedOnGlitch=n0;exports.isHotReloadEnabled=vm;exports.isHotReloading=oP;exports.isIPad=uS;exports.isIconElement=qv;exports.isLocalNetwork=Yt;exports.isMacOS=gS;exports.isMobileDevice=dS;exports.isMozillaXR=mS;exports.isQuest=bS;exports.isResourceTrackingEnabled=tv;exports.isSafari=_S;exports.isUsingInstancing=Wu;exports.isiOS=yS;exports.isiPad=fS;exports.loadAsset=$E;exports.loadSync=qy;exports.logHierarchy=qd;exports.lookAtInverse=jS;exports.lookAtObject=eh;exports.lookAtScreenPoint=BS;exports.makeId=rS;exports.makeIdFromRandomWords=a0;exports.makeNameSafe=Xi;exports.markAsInstancedRendered=Tv;exports.microphonePermissionsGranted=vS;exports.nameof=nS;exports.nameofFactory=o0;exports.objectSerializer=cw;exports.offXRSessionEnd=pC;exports.offXRSessionStart=fC;exports.onAfterRender=OP;exports.onBeforeRender=MP;exports.onClear=CP;exports.onDestroy=PP;exports.onInitialized=sw;exports.onStart=ow;exports.onUpdate=rw;exports.onXRSessionEnd=ng;exports.onXRSessionStart=Uu;exports.parseSync=Ix;exports.placeOnSurface=R0;exports.postprocessFBXMaterials=Zm;exports.prefix=RP;exports.pushState=r0;exports.randomNumber=aS;exports.registerBinaryType=rg;exports.registerComponent=Gu;exports.registerComponentExtension=Gg;exports.registerCustomEffectType=tn;exports.registerExportExtensions=qg;exports.registerExtensions=gu;exports.registerHotReloadType=Jv;exports.registerLoader=tg;exports.registerPrefabProvider=gv;exports.registerPrototypeExtensions=Pv;exports.registerType=r1;exports.relativePathPrefix=c0;exports.removeAttributeChangeCallback=d0;exports.removeComponent=vg;exports.removeCustomImportExtensionType=QM;exports.removePatch=dC;exports.resolveUrl=To;exports.sanitizeString=l0;exports.saveImage=Tx;exports.screenshot=ME;exports.screenshot2=Hy;exports.sendDestroyed=mg;exports.serializable=m;exports.serializeObject=vv;exports.serializeable=Br;exports.setActive=dc;exports.setAllowBalloonMessages=g0;exports.setAllowOverlayMessages=PS;exports.setAutoFitEnabled=Hd;exports.setCameraController=Kp;exports.setDestroyed=Lv;exports.setDevEnvironment=tC;exports.setDisposable=ug;exports.setDontDestroy=fa;exports.setOrAddParamsToUrl=qp;exports.setParam=oS;exports.setParamWithoutReload=Mc;exports.setPeerOptions=SC;exports.setResourceTrackingEnabled=$C;exports.setState=Vm;exports.setVisibleInCustomShadowRendering=Km;exports.setWorldEuler=Ym;exports.setWorldPosition=st;exports.setWorldPositionXYZ=Pr;exports.setWorldQuaternion=Gi;exports.setWorldQuaternionXYZW=Xm;exports.setWorldRotation=C0;exports.setWorldRotationXYZ=th;exports.setWorldScale=za;exports.showBalloonError=ih;exports.showBalloonMessage=Ee;exports.showBalloonWarning=me;exports.showDebugConsole=Jm;exports.slerp=IS;exports.syncDestroy=sh;exports.syncField=ly;exports.syncInstantiate=gg;exports.textureToCanvas=XS;exports.tryCastBinary=$0;exports.tryDetermineMimetypeFromBinary=Mw;exports.tryDetermineMimetypeFromURL=Pw;exports.tryFindObject=Ua;exports.tryGetGuid=W0;exports.unregisterHotReloadType=ew;exports.unwatchWrite=$m;exports.useForAutoFit=v0;exports.validate=St;exports.watchWrite=Iu;
|