@needle-tools/engine 2.57.0-pre → 2.58.0-pre

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/needle-engine.d.ts +33 -2
  3. package/dist/needle-engine.js +200 -200
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +18 -18
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/dist/needle-engine.tsbuildinfo +1 -1
  8. package/lib/engine/codegen/register_types.js +2 -0
  9. package/lib/engine/codegen/register_types.js.map +1 -1
  10. package/lib/engine/engine.d.ts +1 -0
  11. package/lib/engine/engine.js +1 -0
  12. package/lib/engine/engine.js.map +1 -1
  13. package/lib/engine/engine_hot_reload.d.ts +3 -0
  14. package/lib/engine/engine_hot_reload.js +168 -0
  15. package/lib/engine/engine_hot_reload.js.map +1 -0
  16. package/lib/engine/engine_input.js +1 -1
  17. package/lib/engine/engine_setup.js +41 -36
  18. package/lib/engine/engine_setup.js.map +1 -1
  19. package/lib/engine-components/Fog.d.ts +20 -0
  20. package/lib/engine-components/Fog.js +61 -0
  21. package/lib/engine-components/Fog.js.map +1 -0
  22. package/lib/engine-components/codegen/components.d.ts +1 -0
  23. package/lib/engine-components/codegen/components.js +1 -0
  24. package/lib/engine-components/codegen/components.js.map +1 -1
  25. package/lib/engine-components/ui/EventSystem.d.ts +1 -1
  26. package/lib/engine-components/ui/EventSystem.js +25 -10
  27. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  28. package/lib/engine-components/ui/PointerEvents.d.ts +3 -1
  29. package/lib/engine-components/ui/PointerEvents.js +1 -0
  30. package/lib/engine-components/ui/PointerEvents.js.map +1 -1
  31. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  32. package/lib/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +1 -1
  34. package/src/engine/codegen/register_types.js +2 -0
  35. package/src/engine/engine.ts +2 -0
  36. package/src/engine/engine_hot_reload.ts +186 -0
  37. package/src/engine/engine_input.ts +1 -1
  38. package/src/engine/engine_setup.ts +39 -36
  39. package/src/engine-components/Fog.ts +60 -0
  40. package/src/engine-components/codegen/components.ts +1 -0
  41. package/src/engine-components/ui/EventSystem.ts +30 -15
  42. package/src/engine-components/ui/PointerEvents.ts +7 -4
  43. package/src/engine-components/ui/Raycaster.ts +6 -3
@@ -1,4 +1,4 @@
1
- var Vg=Object.create;var Hs=Object.defineProperty;var np=Object.getOwnPropertyDescriptor;var zg=Object.getOwnPropertyNames;var Wg=Object.getPrototypeOf,Ng=Object.prototype.hasOwnProperty;var Xg=(o,e,t)=>e in o?Hs(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var zc=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+o+'" is not supported')});var Fs=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),rp=(o,e)=>{for(var t in e)Hs(o,t,{get:e[t],enumerable:!0})},Qg=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of zg(e))!Ng.call(o,n)&&n!==t&&Hs(o,n,{get:()=>e[n],enumerable:!(i=np(e,n))||i.enumerable});return o};var Da=(o,e,t)=>(t=o!=null?Vg(Wg(o)):{},Qg(e||!o||!o.__esModule?Hs(t,"default",{value:o,enumerable:!0}):t,o));var v=(o,e,t,i)=>{for(var n=i>1?void 0:i?np(e,t):e,r=o.length-1,s;r>=0;r--)(s=o[r])&&(n=(i?s(e,t,n):s(n))||n);return i&&n&&Hs(e,t,n),n};var I=(o,e,t)=>(Xg(o,typeof e!="symbol"?e+"":e,t),t);var hl=Fs((vf,Ou)=>{parcelRequire=function(o,e,t,i){var n,r=typeof parcelRequire=="function"&&parcelRequire,s=typeof zc=="function"&&zc;function a(l,d){if(!e[l]){if(!o[l]){var h=typeof parcelRequire=="function"&&parcelRequire;if(!d&&h)return h(l,!0);if(r)return r(l,!0);if(s&&typeof l=="string")return s(l);var g=new Error("Cannot find module '"+l+"'");throw g.code="MODULE_NOT_FOUND",g}_.resolve=function(x){return o[l][1][x]||x},_.cache={};var E=e[l]=new a.Module(l);o[l][0].call(E.exports,_,E,E.exports,this)}return e[l].exports;function _(x){return a(_.resolve(x))}}a.isParcelRequire=!0,a.Module=function(l){this.id=l,this.bundle=a,this.exports={}},a.modules=o,a.cache=e,a.parent=r,a.register=function(l,d){o[l]=[function(h,g){g.exports=d},{}]};for(var c=0;c<t.length;c++)try{a(t[c])}catch(l){n||(n=l)}if(t.length){var u=a(t[t.length-1]);typeof vf=="object"&&typeof Ou<"u"?Ou.exports=u:typeof define=="function"&&define.amd?define(function(){return u}):i&&(this[i]=u)}if(parcelRequire=a,n)throw n;return a}({EgBh:[function(o,e,t){var i={};i.useBlobBuilder=function(){try{return new Blob([]),!1}catch{return!0}}(),i.useArrayBufferView=!i.useBlobBuilder&&function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}}(),e.exports.binaryFeatures=i;var n=e.exports.BlobBuilder;function r(){this._pieces=[],this._parts=[]}typeof window<"u"&&(n=e.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder),r.prototype.append=function(s){typeof s=="number"?this._pieces.push(s):(this.flush(),this._parts.push(s))},r.prototype.flush=function(){if(this._pieces.length>0){var s=new Uint8Array(this._pieces);i.useArrayBufferView||(s=s.buffer),this._parts.push(s),this._pieces=[]}},r.prototype.getBuffer=function(){if(this.flush(),i.useBlobBuilder){for(var s=new n,a=0,c=this._parts.length;a<c;a++)s.append(this._parts[a]);return s.getBlob()}return new Blob(this._parts)},e.exports.BufferBuilder=r},{}],kdPp:[function(o,e,t){var i=o("./bufferbuilder").BufferBuilder,n=o("./bufferbuilder").binaryFeatures,r={unpack:function(l){return new s(l).unpack()},pack:function(l){var d=new a;return d.pack(l),d.getBuffer()}};function s(l){this.index=0,this.dataBuffer=l,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}function a(){this.bufferBuilder=new i}function c(l){var d=l.charCodeAt(0);return d<=2047?"00":d<=65535?"000":d<=2097151?"0000":d<=67108863?"00000":"000000"}function u(l){return l.length>600?new Blob([l]).size:l.replace(/[^\u0000-\u007F]/g,c).length}e.exports=r,s.prototype.unpack=function(){var l,d=this.unpack_uint8();if(d<128)return d;if((224^d)<32)return(224^d)-32;if((l=160^d)<=15)return this.unpack_raw(l);if((l=176^d)<=15)return this.unpack_string(l);if((l=144^d)<=15)return this.unpack_array(l);if((l=128^d)<=15)return this.unpack_map(l);switch(d){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:case 213:case 214:case 215:return;case 216:return l=this.unpack_uint16(),this.unpack_string(l);case 217:return l=this.unpack_uint32(),this.unpack_string(l);case 218:return l=this.unpack_uint16(),this.unpack_raw(l);case 219:return l=this.unpack_uint32(),this.unpack_raw(l);case 220:return l=this.unpack_uint16(),this.unpack_array(l);case 221:return l=this.unpack_uint32(),this.unpack_array(l);case 222:return l=this.unpack_uint16(),this.unpack_map(l);case 223:return l=this.unpack_uint32(),this.unpack_map(l)}},s.prototype.unpack_uint8=function(){var l=255&this.dataView[this.index];return this.index++,l},s.prototype.unpack_uint16=function(){var l=this.read(2),d=256*(255&l[0])+(255&l[1]);return this.index+=2,d},s.prototype.unpack_uint32=function(){var l=this.read(4),d=256*(256*(256*l[0]+l[1])+l[2])+l[3];return this.index+=4,d},s.prototype.unpack_uint64=function(){var l=this.read(8),d=256*(256*(256*(256*(256*(256*(256*l[0]+l[1])+l[2])+l[3])+l[4])+l[5])+l[6])+l[7];return this.index+=8,d},s.prototype.unpack_int8=function(){var l=this.unpack_uint8();return l<128?l:l-256},s.prototype.unpack_int16=function(){var l=this.unpack_uint16();return l<32768?l:l-65536},s.prototype.unpack_int32=function(){var l=this.unpack_uint32();return l<Math.pow(2,31)?l:l-Math.pow(2,32)},s.prototype.unpack_int64=function(){var l=this.unpack_uint64();return l<Math.pow(2,63)?l:l-Math.pow(2,64)},s.prototype.unpack_raw=function(l){if(this.length<this.index+l)throw new Error("BinaryPackFailure: index is out of range "+this.index+" "+l+" "+this.length);var d=this.dataBuffer.slice(this.index,this.index+l);return this.index+=l,d},s.prototype.unpack_string=function(l){for(var d,h,g=this.read(l),E=0,_="";E<l;)(d=g[E])<128?(_+=String.fromCharCode(d),E++):(192^d)<32?(h=(192^d)<<6|63&g[E+1],_+=String.fromCharCode(h),E+=2):(h=(15&d)<<12|(63&g[E+1])<<6|63&g[E+2],_+=String.fromCharCode(h),E+=3);return this.index+=l,_},s.prototype.unpack_array=function(l){for(var d=new Array(l),h=0;h<l;h++)d[h]=this.unpack();return d},s.prototype.unpack_map=function(l){for(var d={},h=0;h<l;h++){var g=this.unpack(),E=this.unpack();d[g]=E}return d},s.prototype.unpack_float=function(){var l=this.unpack_uint32(),d=(l>>23&255)-127;return(l>>31===0?1:-1)*(8388607&l|8388608)*Math.pow(2,d-23)},s.prototype.unpack_double=function(){var l=this.unpack_uint32(),d=this.unpack_uint32(),h=(l>>20&2047)-1023;return(l>>31===0?1:-1)*((1048575&l|1048576)*Math.pow(2,h-20)+d*Math.pow(2,h-52))},s.prototype.read=function(l){var d=this.index;if(d+l<=this.length)return this.dataView.subarray(d,d+l);throw new Error("BinaryPackFailure: read index out of range")},a.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},a.prototype.pack=function(l){var d=typeof l;if(d==="string")this.pack_string(l);else if(d==="number")Math.floor(l)===l?this.pack_integer(l):this.pack_double(l);else if(d==="boolean")l===!0?this.bufferBuilder.append(195):l===!1&&this.bufferBuilder.append(194);else if(d==="undefined")this.bufferBuilder.append(192);else{if(d!=="object")throw new Error('Type "'+d+'" not yet supported');if(l===null)this.bufferBuilder.append(192);else{var h=l.constructor;if(h==Array)this.pack_array(l);else if(h==Blob||h==File||l instanceof Blob||l instanceof File)this.pack_bin(l);else if(h==ArrayBuffer)n.useArrayBufferView?this.pack_bin(new Uint8Array(l)):this.pack_bin(l);else if("BYTES_PER_ELEMENT"in l)n.useArrayBufferView?this.pack_bin(new Uint8Array(l.buffer)):this.pack_bin(l.buffer);else if(h==Object||h.toString().startsWith("class"))this.pack_object(l);else if(h==Date)this.pack_string(l.toString());else{if(typeof l.toBinaryPack!="function")throw new Error('Type "'+h.toString()+'" not yet supported');this.bufferBuilder.append(l.toBinaryPack())}}}this.bufferBuilder.flush()},a.prototype.pack_bin=function(l){var d=l.length||l.byteLength||l.size;if(d<=15)this.pack_uint8(160+d);else if(d<=65535)this.bufferBuilder.append(218),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(219),this.pack_uint32(d)}this.bufferBuilder.append(l)},a.prototype.pack_string=function(l){var d=u(l);if(d<=15)this.pack_uint8(176+d);else if(d<=65535)this.bufferBuilder.append(216),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(217),this.pack_uint32(d)}this.bufferBuilder.append(l)},a.prototype.pack_array=function(l){var d=l.length;if(d<=15)this.pack_uint8(144+d);else if(d<=65535)this.bufferBuilder.append(220),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(221),this.pack_uint32(d)}for(var h=0;h<d;h++)this.pack(l[h])},a.prototype.pack_integer=function(l){if(l>=-32&&l<=127)this.bufferBuilder.append(255&l);else if(l>=0&&l<=255)this.bufferBuilder.append(204),this.pack_uint8(l);else if(l>=-128&&l<=127)this.bufferBuilder.append(208),this.pack_int8(l);else if(l>=0&&l<=65535)this.bufferBuilder.append(205),this.pack_uint16(l);else if(l>=-32768&&l<=32767)this.bufferBuilder.append(209),this.pack_int16(l);else if(l>=0&&l<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(l);else if(l>=-2147483648&&l<=2147483647)this.bufferBuilder.append(210),this.pack_int32(l);else if(l>=-9223372036854776e3&&l<=9223372036854776e3)this.bufferBuilder.append(211),this.pack_int64(l);else{if(!(l>=0&&l<=18446744073709552e3))throw new Error("Invalid integer");this.bufferBuilder.append(207),this.pack_uint64(l)}},a.prototype.pack_double=function(l){var d=0;l<0&&(d=1,l=-l);var h=Math.floor(Math.log(l)/Math.LN2),g=l/Math.pow(2,h)-1,E=Math.floor(g*Math.pow(2,52)),_=Math.pow(2,32),x=d<<31|h+1023<<20|E/_&1048575,m=E%_;this.bufferBuilder.append(203),this.pack_int32(x),this.pack_int32(m)},a.prototype.pack_object=function(l){var d=Object.keys(l).length;if(d<=15)this.pack_uint8(128+d);else if(d<=65535)this.bufferBuilder.append(222),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(223),this.pack_uint32(d)}for(var h in l)l.hasOwnProperty(h)&&(this.pack(h),this.pack(l[h]))},a.prototype.pack_uint8=function(l){this.bufferBuilder.append(l)},a.prototype.pack_uint16=function(l){this.bufferBuilder.append(l>>8),this.bufferBuilder.append(255&l)},a.prototype.pack_uint32=function(l){var d=4294967295&l;this.bufferBuilder.append((4278190080&d)>>>24),this.bufferBuilder.append((16711680&d)>>>16),this.bufferBuilder.append((65280&d)>>>8),this.bufferBuilder.append(255&d)},a.prototype.pack_uint64=function(l){var d=l/Math.pow(2,32),h=l%Math.pow(2,32);this.bufferBuilder.append((4278190080&d)>>>24),this.bufferBuilder.append((16711680&d)>>>16),this.bufferBuilder.append((65280&d)>>>8),this.bufferBuilder.append(255&d),this.bufferBuilder.append((4278190080&h)>>>24),this.bufferBuilder.append((16711680&h)>>>16),this.bufferBuilder.append((65280&h)>>>8),this.bufferBuilder.append(255&h)},a.prototype.pack_int8=function(l){this.bufferBuilder.append(255&l)},a.prototype.pack_int16=function(l){this.bufferBuilder.append((65280&l)>>8),this.bufferBuilder.append(255&l)},a.prototype.pack_int32=function(l){this.bufferBuilder.append(l>>>24&255),this.bufferBuilder.append((16711680&l)>>>16),this.bufferBuilder.append((65280&l)>>>8),this.bufferBuilder.append(255&l)},a.prototype.pack_int64=function(l){var d=Math.floor(l/Math.pow(2,32)),h=l%Math.pow(2,32);this.bufferBuilder.append((4278190080&d)>>>24),this.bufferBuilder.append((16711680&d)>>>16),this.bufferBuilder.append((65280&d)>>>8),this.bufferBuilder.append(255&d),this.bufferBuilder.append((4278190080&h)>>>24),this.bufferBuilder.append((16711680&h)>>>16),this.bufferBuilder.append((65280&h)>>>8),this.bufferBuilder.append(255&h)}},{"./bufferbuilder":"EgBh"}],iSxC:[function(o,e,t){"use strict";function i(f,p,b){return p in f?Object.defineProperty(f,p,{value:b,enumerable:!0,configurable:!0,writable:!0}):f[p]=b,f}function n(f){return(n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(p){return typeof p}:function(p){return p&&typeof Symbol=="function"&&p.constructor===Symbol&&p!==Symbol.prototype?"symbol":typeof p})(f)}Object.defineProperty(t,"__esModule",{value:!0}),t.extractVersion=a,t.wrapPeerConnectionEvent=c,t.disableLog=u,t.disableWarnings=l,t.log=d,t.deprecated=h,t.detectBrowser=g,t.compactObject=_,t.walkStats=x,t.filterStats=m;var r=!0,s=!0;function a(f,p,b){var w=f.match(p);return w&&w.length>=b&&parseInt(w[b],10)}function c(f,p,b){if(f.RTCPeerConnection){var w=f.RTCPeerConnection.prototype,C=w.addEventListener;w.addEventListener=function(S,A){if(S!==p)return C.apply(this,arguments);var D=function(k){var j=b(k);j&&(A.handleEvent?A.handleEvent(j):A(j))};return this._eventMap=this._eventMap||{},this._eventMap[p]||(this._eventMap[p]=new Map),this._eventMap[p].set(A,D),C.apply(this,[S,D])};var T=w.removeEventListener;w.removeEventListener=function(S,A){if(S!==p||!this._eventMap||!this._eventMap[p])return T.apply(this,arguments);if(!this._eventMap[p].has(A))return T.apply(this,arguments);var D=this._eventMap[p].get(A);return this._eventMap[p].delete(A),this._eventMap[p].size===0&&delete this._eventMap[p],Object.keys(this._eventMap).length===0&&delete this._eventMap,T.apply(this,[S,D])},Object.defineProperty(w,"on"+p,{get:function(){return this["_on"+p]},set:function(S){this["_on"+p]&&(this.removeEventListener(p,this["_on"+p]),delete this["_on"+p]),S&&this.addEventListener(p,this["_on"+p]=S)},enumerable:!0,configurable:!0})}}function u(f){return typeof f!="boolean"?new Error("Argument type: "+n(f)+". Please use a boolean."):(r=f,f?"adapter.js logging disabled":"adapter.js logging enabled")}function l(f){return typeof f!="boolean"?new Error("Argument type: "+n(f)+". Please use a boolean."):(s=!f,"adapter.js deprecation warnings "+(f?"disabled":"enabled"))}function d(){if((typeof window>"u"?"undefined":n(window))==="object"){if(r)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function h(f,p){s&&console.warn(f+" is deprecated, please use "+p+" instead.")}function g(f){var p={browser:null,version:null};if(f===void 0||!f.navigator)return p.browser="Not a browser.",p;var{navigator:b}=f;if(b.mozGetUserMedia)p.browser="firefox",p.version=a(b.userAgent,/Firefox\/(\d+)\./,1);else if(b.webkitGetUserMedia||f.isSecureContext===!1&&f.webkitRTCPeerConnection&&!f.RTCIceGatherer)p.browser="chrome",p.version=a(b.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(b.mediaDevices&&b.userAgent.match(/Edge\/(\d+).(\d+)$/))p.browser="edge",p.version=a(b.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!f.RTCPeerConnection||!b.userAgent.match(/AppleWebKit\/(\d+)\./))return p.browser="Not a supported browser.",p;p.browser="safari",p.version=a(b.userAgent,/AppleWebKit\/(\d+)\./,1),p.supportsUnifiedPlan=f.RTCRtpTransceiver&&"currentDirection"in f.RTCRtpTransceiver.prototype}return p}function E(f){return Object.prototype.toString.call(f)==="[object Object]"}function _(f){return E(f)?Object.keys(f).reduce(function(p,b){var w=E(f[b]),C=w?_(f[b]):f[b],T=w&&!Object.keys(C).length;return C===void 0||T?p:Object.assign(p,i({},b,C))},{}):f}function x(f,p,b){p&&!b.has(p.id)&&(b.set(p.id,p),Object.keys(p).forEach(function(w){w.endsWith("Id")?x(f,f.get(p[w]),b):w.endsWith("Ids")&&p[w].forEach(function(C){x(f,f.get(C),b)})}))}function m(f,p,b){var w=b?"outbound-rtp":"inbound-rtp",C=new Map;if(p===null)return C;var T=[];return f.forEach(function(S){S.type==="track"&&S.trackIdentifier===p.id&&T.push(S)}),T.forEach(function(S){f.forEach(function(A){A.type===w&&A.trackId===S.id&&x(f,A,C)})}),C}},{}],s6SN:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shimGetUserMedia=c;var i=r(o("../utils.js"));function n(){if(typeof WeakMap!="function")return null;var u=new WeakMap;return n=function(){return u},u}function r(u){if(u&&u.__esModule)return u;if(u===null||typeof u!="object"&&typeof u!="function")return{default:u};var l=n();if(l&&l.has(u))return l.get(u);var d={},h=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in u)if(Object.prototype.hasOwnProperty.call(u,g)){var E=h?Object.getOwnPropertyDescriptor(u,g):null;E&&(E.get||E.set)?Object.defineProperty(d,g,E):d[g]=u[g]}return d.default=u,l&&l.set(u,d),d}function s(u){return(s=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(l){return typeof l}:function(l){return l&&typeof Symbol=="function"&&l.constructor===Symbol&&l!==Symbol.prototype?"symbol":typeof l})(u)}var a=i.log;function c(u,l){var d=u&&u.navigator;if(d.mediaDevices){var h=function(x){if(s(x)!=="object"||x.mandatory||x.optional)return x;var m={};return Object.keys(x).forEach(function(f){if(f!=="require"&&f!=="advanced"&&f!=="mediaSource"){var p=s(x[f])==="object"?x[f]:{ideal:x[f]};p.exact!==void 0&&typeof p.exact=="number"&&(p.min=p.max=p.exact);var b=function(C,T){return C?C+T.charAt(0).toUpperCase()+T.slice(1):T==="deviceId"?"sourceId":T};if(p.ideal!==void 0){m.optional=m.optional||[];var w={};typeof p.ideal=="number"?(w[b("min",f)]=p.ideal,m.optional.push(w),(w={})[b("max",f)]=p.ideal,m.optional.push(w)):(w[b("",f)]=p.ideal,m.optional.push(w))}p.exact!==void 0&&typeof p.exact!="number"?(m.mandatory=m.mandatory||{},m.mandatory[b("",f)]=p.exact):["min","max"].forEach(function(C){p[C]!==void 0&&(m.mandatory=m.mandatory||{},m.mandatory[b(C,f)]=p[C])})}}),x.advanced&&(m.optional=(m.optional||[]).concat(x.advanced)),m},g=function(x,m){if(l.version>=61)return m(x);if((x=JSON.parse(JSON.stringify(x)))&&s(x.audio)==="object"){var f=function(C,T,S){T in C&&!(S in C)&&(C[S]=C[T],delete C[T])};f((x=JSON.parse(JSON.stringify(x))).audio,"autoGainControl","googAutoGainControl"),f(x.audio,"noiseSuppression","googNoiseSuppression"),x.audio=h(x.audio)}if(x&&s(x.video)==="object"){var p=x.video.facingMode;p=p&&(s(p)==="object"?p:{ideal:p});var b,w=l.version<66;if(p&&(p.exact==="user"||p.exact==="environment"||p.ideal==="user"||p.ideal==="environment")&&(!d.mediaDevices.getSupportedConstraints||!d.mediaDevices.getSupportedConstraints().facingMode||w)&&(delete x.video.facingMode,p.exact==="environment"||p.ideal==="environment"?b=["back","rear"]:p.exact!=="user"&&p.ideal!=="user"||(b=["front"]),b))return d.mediaDevices.enumerateDevices().then(function(C){var T=(C=C.filter(function(S){return S.kind==="videoinput"})).find(function(S){return b.some(function(A){return S.label.toLowerCase().includes(A)})});return!T&&C.length&&b.includes("back")&&(T=C[C.length-1]),T&&(x.video.deviceId=p.exact?{exact:T.deviceId}:{ideal:T.deviceId}),x.video=h(x.video),a("chrome: "+JSON.stringify(x)),m(x)});x.video=h(x.video)}return a("chrome: "+JSON.stringify(x)),m(x)},E=function(x){return l.version>=64?x:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[x.name]||x.name,message:x.message,constraint:x.constraint||x.constraintName,toString:function(){return this.name+(this.message&&": ")+this.message}}};if(d.getUserMedia=function(x,m,f){g(x,function(p){d.webkitGetUserMedia(p,m,function(b){f&&f(E(b))})})}.bind(d),d.mediaDevices.getUserMedia){var _=d.mediaDevices.getUserMedia.bind(d.mediaDevices);d.mediaDevices.getUserMedia=function(x){return g(x,function(m){return _(m).then(function(f){if(m.audio&&!f.getAudioTracks().length||m.video&&!f.getVideoTracks().length)throw f.getTracks().forEach(function(p){p.stop()}),new DOMException("","NotFoundError");return f},function(f){return Promise.reject(E(f))})})}}}}},{"../utils.js":"iSxC"}],VHa8:[function(o,e,t){"use strict";function i(n,r){n.navigator.mediaDevices&&"getDisplayMedia"in n.navigator.mediaDevices||n.navigator.mediaDevices&&(typeof r=="function"?n.navigator.mediaDevices.getDisplayMedia=function(s){return r(s).then(function(a){var c=s.video&&s.video.width,u=s.video&&s.video.height,l=s.video&&s.video.frameRate;return s.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:a,maxFrameRate:l||3}},c&&(s.video.mandatory.maxWidth=c),u&&(s.video.mandatory.maxHeight=u),n.navigator.mediaDevices.getUserMedia(s)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}Object.defineProperty(t,"__esModule",{value:!0}),t.shimGetDisplayMedia=i},{}],uI5X:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shimMediaStream=l,t.shimOnTrack=d,t.shimGetSendersWithDtmf=h,t.shimGetStats=g,t.shimSenderReceiverGetStats=E,t.shimAddTrackRemoveTrackWithNative=_,t.shimAddTrackRemoveTrack=x,t.shimPeerConnection=m,t.fixNegotiationNeeded=f,Object.defineProperty(t,"shimGetUserMedia",{enumerable:!0,get:function(){return n.shimGetUserMedia}}),Object.defineProperty(t,"shimGetDisplayMedia",{enumerable:!0,get:function(){return r.shimGetDisplayMedia}});var i=a(o("../utils.js")),n=o("./getusermedia"),r=o("./getdisplaymedia");function s(){if(typeof WeakMap!="function")return null;var p=new WeakMap;return s=function(){return p},p}function a(p){if(p&&p.__esModule)return p;if(p===null||typeof p!="object"&&typeof p!="function")return{default:p};var b=s();if(b&&b.has(p))return b.get(p);var w={},C=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var T in p)if(Object.prototype.hasOwnProperty.call(p,T)){var S=C?Object.getOwnPropertyDescriptor(p,T):null;S&&(S.get||S.set)?Object.defineProperty(w,T,S):w[T]=p[T]}return w.default=p,b&&b.set(p,w),w}function c(p,b,w){return b in p?Object.defineProperty(p,b,{value:w,enumerable:!0,configurable:!0,writable:!0}):p[b]=w,p}function u(p){return(u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(b){return typeof b}:function(b){return b&&typeof Symbol=="function"&&b.constructor===Symbol&&b!==Symbol.prototype?"symbol":typeof b})(p)}function l(p){p.MediaStream=p.MediaStream||p.webkitMediaStream}function d(p){if(u(p)!=="object"||!p.RTCPeerConnection||"ontrack"in p.RTCPeerConnection.prototype)i.wrapPeerConnectionEvent(p,"track",function(w){return w.transceiver||Object.defineProperty(w,"transceiver",{value:{receiver:w.receiver}}),w});else{Object.defineProperty(p.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(w){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=w)},enumerable:!0,configurable:!0});var b=p.RTCPeerConnection.prototype.setRemoteDescription;p.RTCPeerConnection.prototype.setRemoteDescription=function(){var w=this;return this._ontrackpoly||(this._ontrackpoly=function(C){C.stream.addEventListener("addtrack",function(T){var S;S=p.RTCPeerConnection.prototype.getReceivers?w.getReceivers().find(function(D){return D.track&&D.track.id===T.track.id}):{track:T.track};var A=new Event("track");A.track=T.track,A.receiver=S,A.transceiver={receiver:S},A.streams=[C.stream],w.dispatchEvent(A)}),C.stream.getTracks().forEach(function(T){var S;S=p.RTCPeerConnection.prototype.getReceivers?w.getReceivers().find(function(D){return D.track&&D.track.id===T.id}):{track:T};var A=new Event("track");A.track=T,A.receiver=S,A.transceiver={receiver:S},A.streams=[C.stream],w.dispatchEvent(A)})},this.addEventListener("addstream",this._ontrackpoly)),b.apply(this,arguments)}}}function h(p){if(u(p)==="object"&&p.RTCPeerConnection&&!("getSenders"in p.RTCPeerConnection.prototype)&&"createDTMFSender"in p.RTCPeerConnection.prototype){var b=function(D,k){return{track:k,get dtmf(){return this._dtmf===void 0&&(k.kind==="audio"?this._dtmf=D.createDTMFSender(k):this._dtmf=null),this._dtmf},_pc:D}};if(!p.RTCPeerConnection.prototype.getSenders){p.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};var w=p.RTCPeerConnection.prototype.addTrack;p.RTCPeerConnection.prototype.addTrack=function(D,k){var j=w.apply(this,arguments);return j||(j=b(this,D),this._senders.push(j)),j};var C=p.RTCPeerConnection.prototype.removeTrack;p.RTCPeerConnection.prototype.removeTrack=function(D){C.apply(this,arguments);var k=this._senders.indexOf(D);k!==-1&&this._senders.splice(k,1)}}var T=p.RTCPeerConnection.prototype.addStream;p.RTCPeerConnection.prototype.addStream=function(D){var k=this;this._senders=this._senders||[],T.apply(this,[D]),D.getTracks().forEach(function(j){k._senders.push(b(k,j))})};var S=p.RTCPeerConnection.prototype.removeStream;p.RTCPeerConnection.prototype.removeStream=function(D){var k=this;this._senders=this._senders||[],S.apply(this,[D]),D.getTracks().forEach(function(j){var F=k._senders.find(function(W){return W.track===j});F&&k._senders.splice(k._senders.indexOf(F),1)})}}else if(u(p)==="object"&&p.RTCPeerConnection&&"getSenders"in p.RTCPeerConnection.prototype&&"createDTMFSender"in p.RTCPeerConnection.prototype&&p.RTCRtpSender&&!("dtmf"in p.RTCRtpSender.prototype)){var A=p.RTCPeerConnection.prototype.getSenders;p.RTCPeerConnection.prototype.getSenders=function(){var D=this,k=A.apply(this,[]);return k.forEach(function(j){return j._pc=D}),k},Object.defineProperty(p.RTCRtpSender.prototype,"dtmf",{get:function(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function g(p){if(p.RTCPeerConnection){var b=p.RTCPeerConnection.prototype.getStats;p.RTCPeerConnection.prototype.getStats=function(){var w=this,[C,T,S]=arguments;if(arguments.length>0&&typeof C=="function")return b.apply(this,arguments);if(b.length===0&&(arguments.length===0||typeof C!="function"))return b.apply(this,[]);var A=function(k){var j={};return k.result().forEach(function(F){var W={id:F.id,timestamp:F.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[F.type]||F.type};F.names().forEach(function(z){W[z]=F.stat(z)}),j[W.id]=W}),j},D=function(k){return new Map(Object.keys(k).map(function(j){return[j,k[j]]}))};return arguments.length>=2?b.apply(this,[function(k){T(D(A(k)))},C]):new Promise(function(k,j){b.apply(w,[function(F){k(D(A(F)))},j])}).then(T,S)}}}function E(p){if(u(p)==="object"&&p.RTCPeerConnection&&p.RTCRtpSender&&p.RTCRtpReceiver){if(!("getStats"in p.RTCRtpSender.prototype)){var b=p.RTCPeerConnection.prototype.getSenders;b&&(p.RTCPeerConnection.prototype.getSenders=function(){var S=this,A=b.apply(this,[]);return A.forEach(function(D){return D._pc=S}),A});var w=p.RTCPeerConnection.prototype.addTrack;w&&(p.RTCPeerConnection.prototype.addTrack=function(){var S=w.apply(this,arguments);return S._pc=this,S}),p.RTCRtpSender.prototype.getStats=function(){var S=this;return this._pc.getStats().then(function(A){return i.filterStats(A,S.track,!0)})}}if(!("getStats"in p.RTCRtpReceiver.prototype)){var C=p.RTCPeerConnection.prototype.getReceivers;C&&(p.RTCPeerConnection.prototype.getReceivers=function(){var S=this,A=C.apply(this,[]);return A.forEach(function(D){return D._pc=S}),A}),i.wrapPeerConnectionEvent(p,"track",function(S){return S.receiver._pc=S.srcElement,S}),p.RTCRtpReceiver.prototype.getStats=function(){var S=this;return this._pc.getStats().then(function(A){return i.filterStats(A,S.track,!1)})}}if("getStats"in p.RTCRtpSender.prototype&&"getStats"in p.RTCRtpReceiver.prototype){var T=p.RTCPeerConnection.prototype.getStats;p.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof p.MediaStreamTrack){var S,A,D,k=arguments[0];return this.getSenders().forEach(function(j){j.track===k&&(S?D=!0:S=j)}),this.getReceivers().forEach(function(j){return j.track===k&&(A?D=!0:A=j),j.track===k}),D||S&&A?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):S?S.getStats():A?A.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return T.apply(this,arguments)}}}}function _(p){p.RTCPeerConnection.prototype.getLocalStreams=function(){var S=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(function(A){return S._shimmedLocalStreams[A][0]})};var b=p.RTCPeerConnection.prototype.addTrack;p.RTCPeerConnection.prototype.addTrack=function(S,A){if(!A)return b.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};var D=b.apply(this,arguments);return this._shimmedLocalStreams[A.id]?this._shimmedLocalStreams[A.id].indexOf(D)===-1&&this._shimmedLocalStreams[A.id].push(D):this._shimmedLocalStreams[A.id]=[A,D],D};var w=p.RTCPeerConnection.prototype.addStream;p.RTCPeerConnection.prototype.addStream=function(S){var A=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{},S.getTracks().forEach(function(j){if(A.getSenders().find(function(F){return F.track===j}))throw new DOMException("Track already exists.","InvalidAccessError")});var D=this.getSenders();w.apply(this,arguments);var k=this.getSenders().filter(function(j){return D.indexOf(j)===-1});this._shimmedLocalStreams[S.id]=[S].concat(k)};var C=p.RTCPeerConnection.prototype.removeStream;p.RTCPeerConnection.prototype.removeStream=function(S){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[S.id],C.apply(this,arguments)};var T=p.RTCPeerConnection.prototype.removeTrack;p.RTCPeerConnection.prototype.removeTrack=function(S){var A=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},S&&Object.keys(this._shimmedLocalStreams).forEach(function(D){var k=A._shimmedLocalStreams[D].indexOf(S);k!==-1&&A._shimmedLocalStreams[D].splice(k,1),A._shimmedLocalStreams[D].length===1&&delete A._shimmedLocalStreams[D]}),T.apply(this,arguments)}}function x(p,b){if(p.RTCPeerConnection){if(p.RTCPeerConnection.prototype.addTrack&&b.version>=65)return _(p);var w=p.RTCPeerConnection.prototype.getLocalStreams;p.RTCPeerConnection.prototype.getLocalStreams=function(){var k=this,j=w.apply(this);return this._reverseStreams=this._reverseStreams||{},j.map(function(F){return k._reverseStreams[F.id]})};var C=p.RTCPeerConnection.prototype.addStream;p.RTCPeerConnection.prototype.addStream=function(k){var j=this;if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},k.getTracks().forEach(function(W){if(j.getSenders().find(function(z){return z.track===W}))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[k.id]){var F=new p.MediaStream(k.getTracks());this._streams[k.id]=F,this._reverseStreams[F.id]=k,k=F}C.apply(this,[k])};var T=p.RTCPeerConnection.prototype.removeStream;p.RTCPeerConnection.prototype.removeStream=function(k){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},T.apply(this,[this._streams[k.id]||k]),delete this._reverseStreams[this._streams[k.id]?this._streams[k.id].id:k.id],delete this._streams[k.id]},p.RTCPeerConnection.prototype.addTrack=function(k,j){var F=this;if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");var W=[].slice.call(arguments,1);if(W.length!==1||!W[0].getTracks().find(function(he){return he===k}))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(function(he){return he.track===k}))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};var z=this._streams[j.id];if(z)z.addTrack(k),Promise.resolve().then(function(){F.dispatchEvent(new Event("negotiationneeded"))});else{var ne=new p.MediaStream([k]);this._streams[j.id]=ne,this._reverseStreams[ne.id]=j,this.addStream(ne)}return this.getSenders().find(function(he){return he.track===k})},["createOffer","createAnswer"].forEach(function(k){var j=p.RTCPeerConnection.prototype[k],F=c({},k,function(){var W=this,z=arguments;return arguments.length&&typeof arguments[0]=="function"?j.apply(this,[function(ne){var he=D(W,ne);z[0].apply(null,[he])},function(ne){z[1]&&z[1].apply(null,ne)},arguments[2]]):j.apply(this,arguments).then(function(ne){return D(W,ne)})});p.RTCPeerConnection.prototype[k]=F[k]});var S=p.RTCPeerConnection.prototype.setLocalDescription;p.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=(k=this,j=arguments[0],F=j.sdp,Object.keys(k._reverseStreams||[]).forEach(function(W){var z=k._reverseStreams[W],ne=k._streams[z.id];F=F.replace(new RegExp(z.id,"g"),ne.id)}),new RTCSessionDescription({type:j.type,sdp:F})),S.apply(this,arguments)):S.apply(this,arguments);var k,j,F};var A=Object.getOwnPropertyDescriptor(p.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(p.RTCPeerConnection.prototype,"localDescription",{get:function(){var k=A.get.apply(this);return k.type===""?k:D(this,k)}}),p.RTCPeerConnection.prototype.removeTrack=function(k){var j,F=this;if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!k._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(k._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{},Object.keys(this._streams).forEach(function(W){F._streams[W].getTracks().find(function(z){return k.track===z})&&(j=F._streams[W])}),j&&(j.getTracks().length===1?this.removeStream(this._reverseStreams[j.id]):j.removeTrack(k.track),this.dispatchEvent(new Event("negotiationneeded")))}}function D(k,j){var F=j.sdp;return Object.keys(k._reverseStreams||[]).forEach(function(W){var z=k._reverseStreams[W],ne=k._streams[z.id];F=F.replace(new RegExp(ne.id,"g"),z.id)}),new RTCSessionDescription({type:j.type,sdp:F})}}function m(p,b){!p.RTCPeerConnection&&p.webkitRTCPeerConnection&&(p.RTCPeerConnection=p.webkitRTCPeerConnection),p.RTCPeerConnection&&b.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(w){var C=p.RTCPeerConnection.prototype[w],T=c({},w,function(){return arguments[0]=new(w==="addIceCandidate"?p.RTCIceCandidate:p.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)});p.RTCPeerConnection.prototype[w]=T[w]})}function f(p,b){i.wrapPeerConnectionEvent(p,"negotiationneeded",function(w){var C=w.target;if(!(b.version<72||C.getConfiguration&&C.getConfiguration().sdpSemantics==="plan-b")||C.signalingState==="stable")return w})}},{"../utils.js":"iSxC","./getusermedia":"s6SN","./getdisplaymedia":"VHa8"}],NZ1C:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterIceServers=s;var i=r(o("../utils"));function n(){if(typeof WeakMap!="function")return null;var a=new WeakMap;return n=function(){return a},a}function r(a){if(a&&a.__esModule)return a;if(a===null||typeof a!="object"&&typeof a!="function")return{default:a};var c=n();if(c&&c.has(a))return c.get(a);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var d in a)if(Object.prototype.hasOwnProperty.call(a,d)){var h=l?Object.getOwnPropertyDescriptor(a,d):null;h&&(h.get||h.set)?Object.defineProperty(u,d,h):u[d]=a[d]}return u.default=a,c&&c.set(a,u),u}function s(a,c){var u=!1;return(a=JSON.parse(JSON.stringify(a))).filter(function(l){if(l&&(l.urls||l.url)){var d=l.urls||l.url;l.url&&!l.urls&&i.deprecated("RTCIceServer.url","RTCIceServer.urls");var h=typeof d=="string";return h&&(d=[d]),d=d.filter(function(g){if(g.indexOf("stun:")===0)return!1;var E=g.startsWith("turn")&&!g.startsWith("turn:[")&&g.includes("transport=udp");return E&&!u?(u=!0,!0):E&&!u}),delete l.url,l.urls=h?d[0]:d,!!d.length}})}},{"../utils":"iSxC"}],YHvh:[function(o,e,t){"use strict";var i={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};i.localCName=i.generateIdentifier(),i.splitLines=function(n){return n.trim().split(`
1
+ var zg=Object.create;var Fs=Object.defineProperty;var rp=Object.getOwnPropertyDescriptor;var Wg=Object.getOwnPropertyNames;var Ng=Object.getPrototypeOf,Xg=Object.prototype.hasOwnProperty;var Qg=(o,e,t)=>e in o?Fs(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Wc=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+o+'" is not supported')});var Bs=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),op=(o,e)=>{for(var t in e)Fs(o,t,{get:e[t],enumerable:!0})},qg=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Wg(e))!Xg.call(o,n)&&n!==t&&Fs(o,n,{get:()=>e[n],enumerable:!(i=rp(e,n))||i.enumerable});return o};var La=(o,e,t)=>(t=o!=null?zg(Ng(o)):{},qg(e||!o||!o.__esModule?Fs(t,"default",{value:o,enumerable:!0}):t,o));var v=(o,e,t,i)=>{for(var n=i>1?void 0:i?rp(e,t):e,r=o.length-1,s;r>=0;r--)(s=o[r])&&(n=(i?s(e,t,n):s(n))||n);return i&&n&&Fs(e,t,n),n};var I=(o,e,t)=>(Qg(o,typeof e!="symbol"?e+"":e,t),t);var pl=Bs((yf,ku)=>{parcelRequire=function(o,e,t,i){var n,r=typeof parcelRequire=="function"&&parcelRequire,s=typeof Wc=="function"&&Wc;function a(l,d){if(!e[l]){if(!o[l]){var h=typeof parcelRequire=="function"&&parcelRequire;if(!d&&h)return h(l,!0);if(r)return r(l,!0);if(s&&typeof l=="string")return s(l);var g=new Error("Cannot find module '"+l+"'");throw g.code="MODULE_NOT_FOUND",g}_.resolve=function(x){return o[l][1][x]||x},_.cache={};var E=e[l]=new a.Module(l);o[l][0].call(E.exports,_,E,E.exports,this)}return e[l].exports;function _(x){return a(_.resolve(x))}}a.isParcelRequire=!0,a.Module=function(l){this.id=l,this.bundle=a,this.exports={}},a.modules=o,a.cache=e,a.parent=r,a.register=function(l,d){o[l]=[function(h,g){g.exports=d},{}]};for(var c=0;c<t.length;c++)try{a(t[c])}catch(l){n||(n=l)}if(t.length){var u=a(t[t.length-1]);typeof yf=="object"&&typeof ku<"u"?ku.exports=u:typeof define=="function"&&define.amd?define(function(){return u}):i&&(this[i]=u)}if(parcelRequire=a,n)throw n;return a}({EgBh:[function(o,e,t){var i={};i.useBlobBuilder=function(){try{return new Blob([]),!1}catch{return!0}}(),i.useArrayBufferView=!i.useBlobBuilder&&function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}}(),e.exports.binaryFeatures=i;var n=e.exports.BlobBuilder;function r(){this._pieces=[],this._parts=[]}typeof window<"u"&&(n=e.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder),r.prototype.append=function(s){typeof s=="number"?this._pieces.push(s):(this.flush(),this._parts.push(s))},r.prototype.flush=function(){if(this._pieces.length>0){var s=new Uint8Array(this._pieces);i.useArrayBufferView||(s=s.buffer),this._parts.push(s),this._pieces=[]}},r.prototype.getBuffer=function(){if(this.flush(),i.useBlobBuilder){for(var s=new n,a=0,c=this._parts.length;a<c;a++)s.append(this._parts[a]);return s.getBlob()}return new Blob(this._parts)},e.exports.BufferBuilder=r},{}],kdPp:[function(o,e,t){var i=o("./bufferbuilder").BufferBuilder,n=o("./bufferbuilder").binaryFeatures,r={unpack:function(l){return new s(l).unpack()},pack:function(l){var d=new a;return d.pack(l),d.getBuffer()}};function s(l){this.index=0,this.dataBuffer=l,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}function a(){this.bufferBuilder=new i}function c(l){var d=l.charCodeAt(0);return d<=2047?"00":d<=65535?"000":d<=2097151?"0000":d<=67108863?"00000":"000000"}function u(l){return l.length>600?new Blob([l]).size:l.replace(/[^\u0000-\u007F]/g,c).length}e.exports=r,s.prototype.unpack=function(){var l,d=this.unpack_uint8();if(d<128)return d;if((224^d)<32)return(224^d)-32;if((l=160^d)<=15)return this.unpack_raw(l);if((l=176^d)<=15)return this.unpack_string(l);if((l=144^d)<=15)return this.unpack_array(l);if((l=128^d)<=15)return this.unpack_map(l);switch(d){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:case 213:case 214:case 215:return;case 216:return l=this.unpack_uint16(),this.unpack_string(l);case 217:return l=this.unpack_uint32(),this.unpack_string(l);case 218:return l=this.unpack_uint16(),this.unpack_raw(l);case 219:return l=this.unpack_uint32(),this.unpack_raw(l);case 220:return l=this.unpack_uint16(),this.unpack_array(l);case 221:return l=this.unpack_uint32(),this.unpack_array(l);case 222:return l=this.unpack_uint16(),this.unpack_map(l);case 223:return l=this.unpack_uint32(),this.unpack_map(l)}},s.prototype.unpack_uint8=function(){var l=255&this.dataView[this.index];return this.index++,l},s.prototype.unpack_uint16=function(){var l=this.read(2),d=256*(255&l[0])+(255&l[1]);return this.index+=2,d},s.prototype.unpack_uint32=function(){var l=this.read(4),d=256*(256*(256*l[0]+l[1])+l[2])+l[3];return this.index+=4,d},s.prototype.unpack_uint64=function(){var l=this.read(8),d=256*(256*(256*(256*(256*(256*(256*l[0]+l[1])+l[2])+l[3])+l[4])+l[5])+l[6])+l[7];return this.index+=8,d},s.prototype.unpack_int8=function(){var l=this.unpack_uint8();return l<128?l:l-256},s.prototype.unpack_int16=function(){var l=this.unpack_uint16();return l<32768?l:l-65536},s.prototype.unpack_int32=function(){var l=this.unpack_uint32();return l<Math.pow(2,31)?l:l-Math.pow(2,32)},s.prototype.unpack_int64=function(){var l=this.unpack_uint64();return l<Math.pow(2,63)?l:l-Math.pow(2,64)},s.prototype.unpack_raw=function(l){if(this.length<this.index+l)throw new Error("BinaryPackFailure: index is out of range "+this.index+" "+l+" "+this.length);var d=this.dataBuffer.slice(this.index,this.index+l);return this.index+=l,d},s.prototype.unpack_string=function(l){for(var d,h,g=this.read(l),E=0,_="";E<l;)(d=g[E])<128?(_+=String.fromCharCode(d),E++):(192^d)<32?(h=(192^d)<<6|63&g[E+1],_+=String.fromCharCode(h),E+=2):(h=(15&d)<<12|(63&g[E+1])<<6|63&g[E+2],_+=String.fromCharCode(h),E+=3);return this.index+=l,_},s.prototype.unpack_array=function(l){for(var d=new Array(l),h=0;h<l;h++)d[h]=this.unpack();return d},s.prototype.unpack_map=function(l){for(var d={},h=0;h<l;h++){var g=this.unpack(),E=this.unpack();d[g]=E}return d},s.prototype.unpack_float=function(){var l=this.unpack_uint32(),d=(l>>23&255)-127;return(l>>31===0?1:-1)*(8388607&l|8388608)*Math.pow(2,d-23)},s.prototype.unpack_double=function(){var l=this.unpack_uint32(),d=this.unpack_uint32(),h=(l>>20&2047)-1023;return(l>>31===0?1:-1)*((1048575&l|1048576)*Math.pow(2,h-20)+d*Math.pow(2,h-52))},s.prototype.read=function(l){var d=this.index;if(d+l<=this.length)return this.dataView.subarray(d,d+l);throw new Error("BinaryPackFailure: read index out of range")},a.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},a.prototype.pack=function(l){var d=typeof l;if(d==="string")this.pack_string(l);else if(d==="number")Math.floor(l)===l?this.pack_integer(l):this.pack_double(l);else if(d==="boolean")l===!0?this.bufferBuilder.append(195):l===!1&&this.bufferBuilder.append(194);else if(d==="undefined")this.bufferBuilder.append(192);else{if(d!=="object")throw new Error('Type "'+d+'" not yet supported');if(l===null)this.bufferBuilder.append(192);else{var h=l.constructor;if(h==Array)this.pack_array(l);else if(h==Blob||h==File||l instanceof Blob||l instanceof File)this.pack_bin(l);else if(h==ArrayBuffer)n.useArrayBufferView?this.pack_bin(new Uint8Array(l)):this.pack_bin(l);else if("BYTES_PER_ELEMENT"in l)n.useArrayBufferView?this.pack_bin(new Uint8Array(l.buffer)):this.pack_bin(l.buffer);else if(h==Object||h.toString().startsWith("class"))this.pack_object(l);else if(h==Date)this.pack_string(l.toString());else{if(typeof l.toBinaryPack!="function")throw new Error('Type "'+h.toString()+'" not yet supported');this.bufferBuilder.append(l.toBinaryPack())}}}this.bufferBuilder.flush()},a.prototype.pack_bin=function(l){var d=l.length||l.byteLength||l.size;if(d<=15)this.pack_uint8(160+d);else if(d<=65535)this.bufferBuilder.append(218),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(219),this.pack_uint32(d)}this.bufferBuilder.append(l)},a.prototype.pack_string=function(l){var d=u(l);if(d<=15)this.pack_uint8(176+d);else if(d<=65535)this.bufferBuilder.append(216),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(217),this.pack_uint32(d)}this.bufferBuilder.append(l)},a.prototype.pack_array=function(l){var d=l.length;if(d<=15)this.pack_uint8(144+d);else if(d<=65535)this.bufferBuilder.append(220),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(221),this.pack_uint32(d)}for(var h=0;h<d;h++)this.pack(l[h])},a.prototype.pack_integer=function(l){if(l>=-32&&l<=127)this.bufferBuilder.append(255&l);else if(l>=0&&l<=255)this.bufferBuilder.append(204),this.pack_uint8(l);else if(l>=-128&&l<=127)this.bufferBuilder.append(208),this.pack_int8(l);else if(l>=0&&l<=65535)this.bufferBuilder.append(205),this.pack_uint16(l);else if(l>=-32768&&l<=32767)this.bufferBuilder.append(209),this.pack_int16(l);else if(l>=0&&l<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(l);else if(l>=-2147483648&&l<=2147483647)this.bufferBuilder.append(210),this.pack_int32(l);else if(l>=-9223372036854776e3&&l<=9223372036854776e3)this.bufferBuilder.append(211),this.pack_int64(l);else{if(!(l>=0&&l<=18446744073709552e3))throw new Error("Invalid integer");this.bufferBuilder.append(207),this.pack_uint64(l)}},a.prototype.pack_double=function(l){var d=0;l<0&&(d=1,l=-l);var h=Math.floor(Math.log(l)/Math.LN2),g=l/Math.pow(2,h)-1,E=Math.floor(g*Math.pow(2,52)),_=Math.pow(2,32),x=d<<31|h+1023<<20|E/_&1048575,m=E%_;this.bufferBuilder.append(203),this.pack_int32(x),this.pack_int32(m)},a.prototype.pack_object=function(l){var d=Object.keys(l).length;if(d<=15)this.pack_uint8(128+d);else if(d<=65535)this.bufferBuilder.append(222),this.pack_uint16(d);else{if(!(d<=4294967295))throw new Error("Invalid length");this.bufferBuilder.append(223),this.pack_uint32(d)}for(var h in l)l.hasOwnProperty(h)&&(this.pack(h),this.pack(l[h]))},a.prototype.pack_uint8=function(l){this.bufferBuilder.append(l)},a.prototype.pack_uint16=function(l){this.bufferBuilder.append(l>>8),this.bufferBuilder.append(255&l)},a.prototype.pack_uint32=function(l){var d=4294967295&l;this.bufferBuilder.append((4278190080&d)>>>24),this.bufferBuilder.append((16711680&d)>>>16),this.bufferBuilder.append((65280&d)>>>8),this.bufferBuilder.append(255&d)},a.prototype.pack_uint64=function(l){var d=l/Math.pow(2,32),h=l%Math.pow(2,32);this.bufferBuilder.append((4278190080&d)>>>24),this.bufferBuilder.append((16711680&d)>>>16),this.bufferBuilder.append((65280&d)>>>8),this.bufferBuilder.append(255&d),this.bufferBuilder.append((4278190080&h)>>>24),this.bufferBuilder.append((16711680&h)>>>16),this.bufferBuilder.append((65280&h)>>>8),this.bufferBuilder.append(255&h)},a.prototype.pack_int8=function(l){this.bufferBuilder.append(255&l)},a.prototype.pack_int16=function(l){this.bufferBuilder.append((65280&l)>>8),this.bufferBuilder.append(255&l)},a.prototype.pack_int32=function(l){this.bufferBuilder.append(l>>>24&255),this.bufferBuilder.append((16711680&l)>>>16),this.bufferBuilder.append((65280&l)>>>8),this.bufferBuilder.append(255&l)},a.prototype.pack_int64=function(l){var d=Math.floor(l/Math.pow(2,32)),h=l%Math.pow(2,32);this.bufferBuilder.append((4278190080&d)>>>24),this.bufferBuilder.append((16711680&d)>>>16),this.bufferBuilder.append((65280&d)>>>8),this.bufferBuilder.append(255&d),this.bufferBuilder.append((4278190080&h)>>>24),this.bufferBuilder.append((16711680&h)>>>16),this.bufferBuilder.append((65280&h)>>>8),this.bufferBuilder.append(255&h)}},{"./bufferbuilder":"EgBh"}],iSxC:[function(o,e,t){"use strict";function i(f,p,b){return p in f?Object.defineProperty(f,p,{value:b,enumerable:!0,configurable:!0,writable:!0}):f[p]=b,f}function n(f){return(n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(p){return typeof p}:function(p){return p&&typeof Symbol=="function"&&p.constructor===Symbol&&p!==Symbol.prototype?"symbol":typeof p})(f)}Object.defineProperty(t,"__esModule",{value:!0}),t.extractVersion=a,t.wrapPeerConnectionEvent=c,t.disableLog=u,t.disableWarnings=l,t.log=d,t.deprecated=h,t.detectBrowser=g,t.compactObject=_,t.walkStats=x,t.filterStats=m;var r=!0,s=!0;function a(f,p,b){var w=f.match(p);return w&&w.length>=b&&parseInt(w[b],10)}function c(f,p,b){if(f.RTCPeerConnection){var w=f.RTCPeerConnection.prototype,C=w.addEventListener;w.addEventListener=function(S,A){if(S!==p)return C.apply(this,arguments);var D=function(k){var j=b(k);j&&(A.handleEvent?A.handleEvent(j):A(j))};return this._eventMap=this._eventMap||{},this._eventMap[p]||(this._eventMap[p]=new Map),this._eventMap[p].set(A,D),C.apply(this,[S,D])};var T=w.removeEventListener;w.removeEventListener=function(S,A){if(S!==p||!this._eventMap||!this._eventMap[p])return T.apply(this,arguments);if(!this._eventMap[p].has(A))return T.apply(this,arguments);var D=this._eventMap[p].get(A);return this._eventMap[p].delete(A),this._eventMap[p].size===0&&delete this._eventMap[p],Object.keys(this._eventMap).length===0&&delete this._eventMap,T.apply(this,[S,D])},Object.defineProperty(w,"on"+p,{get:function(){return this["_on"+p]},set:function(S){this["_on"+p]&&(this.removeEventListener(p,this["_on"+p]),delete this["_on"+p]),S&&this.addEventListener(p,this["_on"+p]=S)},enumerable:!0,configurable:!0})}}function u(f){return typeof f!="boolean"?new Error("Argument type: "+n(f)+". Please use a boolean."):(r=f,f?"adapter.js logging disabled":"adapter.js logging enabled")}function l(f){return typeof f!="boolean"?new Error("Argument type: "+n(f)+". Please use a boolean."):(s=!f,"adapter.js deprecation warnings "+(f?"disabled":"enabled"))}function d(){if((typeof window>"u"?"undefined":n(window))==="object"){if(r)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function h(f,p){s&&console.warn(f+" is deprecated, please use "+p+" instead.")}function g(f){var p={browser:null,version:null};if(f===void 0||!f.navigator)return p.browser="Not a browser.",p;var{navigator:b}=f;if(b.mozGetUserMedia)p.browser="firefox",p.version=a(b.userAgent,/Firefox\/(\d+)\./,1);else if(b.webkitGetUserMedia||f.isSecureContext===!1&&f.webkitRTCPeerConnection&&!f.RTCIceGatherer)p.browser="chrome",p.version=a(b.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(b.mediaDevices&&b.userAgent.match(/Edge\/(\d+).(\d+)$/))p.browser="edge",p.version=a(b.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!f.RTCPeerConnection||!b.userAgent.match(/AppleWebKit\/(\d+)\./))return p.browser="Not a supported browser.",p;p.browser="safari",p.version=a(b.userAgent,/AppleWebKit\/(\d+)\./,1),p.supportsUnifiedPlan=f.RTCRtpTransceiver&&"currentDirection"in f.RTCRtpTransceiver.prototype}return p}function E(f){return Object.prototype.toString.call(f)==="[object Object]"}function _(f){return E(f)?Object.keys(f).reduce(function(p,b){var w=E(f[b]),C=w?_(f[b]):f[b],T=w&&!Object.keys(C).length;return C===void 0||T?p:Object.assign(p,i({},b,C))},{}):f}function x(f,p,b){p&&!b.has(p.id)&&(b.set(p.id,p),Object.keys(p).forEach(function(w){w.endsWith("Id")?x(f,f.get(p[w]),b):w.endsWith("Ids")&&p[w].forEach(function(C){x(f,f.get(C),b)})}))}function m(f,p,b){var w=b?"outbound-rtp":"inbound-rtp",C=new Map;if(p===null)return C;var T=[];return f.forEach(function(S){S.type==="track"&&S.trackIdentifier===p.id&&T.push(S)}),T.forEach(function(S){f.forEach(function(A){A.type===w&&A.trackId===S.id&&x(f,A,C)})}),C}},{}],s6SN:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shimGetUserMedia=c;var i=r(o("../utils.js"));function n(){if(typeof WeakMap!="function")return null;var u=new WeakMap;return n=function(){return u},u}function r(u){if(u&&u.__esModule)return u;if(u===null||typeof u!="object"&&typeof u!="function")return{default:u};var l=n();if(l&&l.has(u))return l.get(u);var d={},h=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in u)if(Object.prototype.hasOwnProperty.call(u,g)){var E=h?Object.getOwnPropertyDescriptor(u,g):null;E&&(E.get||E.set)?Object.defineProperty(d,g,E):d[g]=u[g]}return d.default=u,l&&l.set(u,d),d}function s(u){return(s=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(l){return typeof l}:function(l){return l&&typeof Symbol=="function"&&l.constructor===Symbol&&l!==Symbol.prototype?"symbol":typeof l})(u)}var a=i.log;function c(u,l){var d=u&&u.navigator;if(d.mediaDevices){var h=function(x){if(s(x)!=="object"||x.mandatory||x.optional)return x;var m={};return Object.keys(x).forEach(function(f){if(f!=="require"&&f!=="advanced"&&f!=="mediaSource"){var p=s(x[f])==="object"?x[f]:{ideal:x[f]};p.exact!==void 0&&typeof p.exact=="number"&&(p.min=p.max=p.exact);var b=function(C,T){return C?C+T.charAt(0).toUpperCase()+T.slice(1):T==="deviceId"?"sourceId":T};if(p.ideal!==void 0){m.optional=m.optional||[];var w={};typeof p.ideal=="number"?(w[b("min",f)]=p.ideal,m.optional.push(w),(w={})[b("max",f)]=p.ideal,m.optional.push(w)):(w[b("",f)]=p.ideal,m.optional.push(w))}p.exact!==void 0&&typeof p.exact!="number"?(m.mandatory=m.mandatory||{},m.mandatory[b("",f)]=p.exact):["min","max"].forEach(function(C){p[C]!==void 0&&(m.mandatory=m.mandatory||{},m.mandatory[b(C,f)]=p[C])})}}),x.advanced&&(m.optional=(m.optional||[]).concat(x.advanced)),m},g=function(x,m){if(l.version>=61)return m(x);if((x=JSON.parse(JSON.stringify(x)))&&s(x.audio)==="object"){var f=function(C,T,S){T in C&&!(S in C)&&(C[S]=C[T],delete C[T])};f((x=JSON.parse(JSON.stringify(x))).audio,"autoGainControl","googAutoGainControl"),f(x.audio,"noiseSuppression","googNoiseSuppression"),x.audio=h(x.audio)}if(x&&s(x.video)==="object"){var p=x.video.facingMode;p=p&&(s(p)==="object"?p:{ideal:p});var b,w=l.version<66;if(p&&(p.exact==="user"||p.exact==="environment"||p.ideal==="user"||p.ideal==="environment")&&(!d.mediaDevices.getSupportedConstraints||!d.mediaDevices.getSupportedConstraints().facingMode||w)&&(delete x.video.facingMode,p.exact==="environment"||p.ideal==="environment"?b=["back","rear"]:p.exact!=="user"&&p.ideal!=="user"||(b=["front"]),b))return d.mediaDevices.enumerateDevices().then(function(C){var T=(C=C.filter(function(S){return S.kind==="videoinput"})).find(function(S){return b.some(function(A){return S.label.toLowerCase().includes(A)})});return!T&&C.length&&b.includes("back")&&(T=C[C.length-1]),T&&(x.video.deviceId=p.exact?{exact:T.deviceId}:{ideal:T.deviceId}),x.video=h(x.video),a("chrome: "+JSON.stringify(x)),m(x)});x.video=h(x.video)}return a("chrome: "+JSON.stringify(x)),m(x)},E=function(x){return l.version>=64?x:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[x.name]||x.name,message:x.message,constraint:x.constraint||x.constraintName,toString:function(){return this.name+(this.message&&": ")+this.message}}};if(d.getUserMedia=function(x,m,f){g(x,function(p){d.webkitGetUserMedia(p,m,function(b){f&&f(E(b))})})}.bind(d),d.mediaDevices.getUserMedia){var _=d.mediaDevices.getUserMedia.bind(d.mediaDevices);d.mediaDevices.getUserMedia=function(x){return g(x,function(m){return _(m).then(function(f){if(m.audio&&!f.getAudioTracks().length||m.video&&!f.getVideoTracks().length)throw f.getTracks().forEach(function(p){p.stop()}),new DOMException("","NotFoundError");return f},function(f){return Promise.reject(E(f))})})}}}}},{"../utils.js":"iSxC"}],VHa8:[function(o,e,t){"use strict";function i(n,r){n.navigator.mediaDevices&&"getDisplayMedia"in n.navigator.mediaDevices||n.navigator.mediaDevices&&(typeof r=="function"?n.navigator.mediaDevices.getDisplayMedia=function(s){return r(s).then(function(a){var c=s.video&&s.video.width,u=s.video&&s.video.height,l=s.video&&s.video.frameRate;return s.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:a,maxFrameRate:l||3}},c&&(s.video.mandatory.maxWidth=c),u&&(s.video.mandatory.maxHeight=u),n.navigator.mediaDevices.getUserMedia(s)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}Object.defineProperty(t,"__esModule",{value:!0}),t.shimGetDisplayMedia=i},{}],uI5X:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shimMediaStream=l,t.shimOnTrack=d,t.shimGetSendersWithDtmf=h,t.shimGetStats=g,t.shimSenderReceiverGetStats=E,t.shimAddTrackRemoveTrackWithNative=_,t.shimAddTrackRemoveTrack=x,t.shimPeerConnection=m,t.fixNegotiationNeeded=f,Object.defineProperty(t,"shimGetUserMedia",{enumerable:!0,get:function(){return n.shimGetUserMedia}}),Object.defineProperty(t,"shimGetDisplayMedia",{enumerable:!0,get:function(){return r.shimGetDisplayMedia}});var i=a(o("../utils.js")),n=o("./getusermedia"),r=o("./getdisplaymedia");function s(){if(typeof WeakMap!="function")return null;var p=new WeakMap;return s=function(){return p},p}function a(p){if(p&&p.__esModule)return p;if(p===null||typeof p!="object"&&typeof p!="function")return{default:p};var b=s();if(b&&b.has(p))return b.get(p);var w={},C=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var T in p)if(Object.prototype.hasOwnProperty.call(p,T)){var S=C?Object.getOwnPropertyDescriptor(p,T):null;S&&(S.get||S.set)?Object.defineProperty(w,T,S):w[T]=p[T]}return w.default=p,b&&b.set(p,w),w}function c(p,b,w){return b in p?Object.defineProperty(p,b,{value:w,enumerable:!0,configurable:!0,writable:!0}):p[b]=w,p}function u(p){return(u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(b){return typeof b}:function(b){return b&&typeof Symbol=="function"&&b.constructor===Symbol&&b!==Symbol.prototype?"symbol":typeof b})(p)}function l(p){p.MediaStream=p.MediaStream||p.webkitMediaStream}function d(p){if(u(p)!=="object"||!p.RTCPeerConnection||"ontrack"in p.RTCPeerConnection.prototype)i.wrapPeerConnectionEvent(p,"track",function(w){return w.transceiver||Object.defineProperty(w,"transceiver",{value:{receiver:w.receiver}}),w});else{Object.defineProperty(p.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(w){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=w)},enumerable:!0,configurable:!0});var b=p.RTCPeerConnection.prototype.setRemoteDescription;p.RTCPeerConnection.prototype.setRemoteDescription=function(){var w=this;return this._ontrackpoly||(this._ontrackpoly=function(C){C.stream.addEventListener("addtrack",function(T){var S;S=p.RTCPeerConnection.prototype.getReceivers?w.getReceivers().find(function(D){return D.track&&D.track.id===T.track.id}):{track:T.track};var A=new Event("track");A.track=T.track,A.receiver=S,A.transceiver={receiver:S},A.streams=[C.stream],w.dispatchEvent(A)}),C.stream.getTracks().forEach(function(T){var S;S=p.RTCPeerConnection.prototype.getReceivers?w.getReceivers().find(function(D){return D.track&&D.track.id===T.id}):{track:T};var A=new Event("track");A.track=T,A.receiver=S,A.transceiver={receiver:S},A.streams=[C.stream],w.dispatchEvent(A)})},this.addEventListener("addstream",this._ontrackpoly)),b.apply(this,arguments)}}}function h(p){if(u(p)==="object"&&p.RTCPeerConnection&&!("getSenders"in p.RTCPeerConnection.prototype)&&"createDTMFSender"in p.RTCPeerConnection.prototype){var b=function(D,k){return{track:k,get dtmf(){return this._dtmf===void 0&&(k.kind==="audio"?this._dtmf=D.createDTMFSender(k):this._dtmf=null),this._dtmf},_pc:D}};if(!p.RTCPeerConnection.prototype.getSenders){p.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};var w=p.RTCPeerConnection.prototype.addTrack;p.RTCPeerConnection.prototype.addTrack=function(D,k){var j=w.apply(this,arguments);return j||(j=b(this,D),this._senders.push(j)),j};var C=p.RTCPeerConnection.prototype.removeTrack;p.RTCPeerConnection.prototype.removeTrack=function(D){C.apply(this,arguments);var k=this._senders.indexOf(D);k!==-1&&this._senders.splice(k,1)}}var T=p.RTCPeerConnection.prototype.addStream;p.RTCPeerConnection.prototype.addStream=function(D){var k=this;this._senders=this._senders||[],T.apply(this,[D]),D.getTracks().forEach(function(j){k._senders.push(b(k,j))})};var S=p.RTCPeerConnection.prototype.removeStream;p.RTCPeerConnection.prototype.removeStream=function(D){var k=this;this._senders=this._senders||[],S.apply(this,[D]),D.getTracks().forEach(function(j){var F=k._senders.find(function(W){return W.track===j});F&&k._senders.splice(k._senders.indexOf(F),1)})}}else if(u(p)==="object"&&p.RTCPeerConnection&&"getSenders"in p.RTCPeerConnection.prototype&&"createDTMFSender"in p.RTCPeerConnection.prototype&&p.RTCRtpSender&&!("dtmf"in p.RTCRtpSender.prototype)){var A=p.RTCPeerConnection.prototype.getSenders;p.RTCPeerConnection.prototype.getSenders=function(){var D=this,k=A.apply(this,[]);return k.forEach(function(j){return j._pc=D}),k},Object.defineProperty(p.RTCRtpSender.prototype,"dtmf",{get:function(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function g(p){if(p.RTCPeerConnection){var b=p.RTCPeerConnection.prototype.getStats;p.RTCPeerConnection.prototype.getStats=function(){var w=this,[C,T,S]=arguments;if(arguments.length>0&&typeof C=="function")return b.apply(this,arguments);if(b.length===0&&(arguments.length===0||typeof C!="function"))return b.apply(this,[]);var A=function(k){var j={};return k.result().forEach(function(F){var W={id:F.id,timestamp:F.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[F.type]||F.type};F.names().forEach(function(z){W[z]=F.stat(z)}),j[W.id]=W}),j},D=function(k){return new Map(Object.keys(k).map(function(j){return[j,k[j]]}))};return arguments.length>=2?b.apply(this,[function(k){T(D(A(k)))},C]):new Promise(function(k,j){b.apply(w,[function(F){k(D(A(F)))},j])}).then(T,S)}}}function E(p){if(u(p)==="object"&&p.RTCPeerConnection&&p.RTCRtpSender&&p.RTCRtpReceiver){if(!("getStats"in p.RTCRtpSender.prototype)){var b=p.RTCPeerConnection.prototype.getSenders;b&&(p.RTCPeerConnection.prototype.getSenders=function(){var S=this,A=b.apply(this,[]);return A.forEach(function(D){return D._pc=S}),A});var w=p.RTCPeerConnection.prototype.addTrack;w&&(p.RTCPeerConnection.prototype.addTrack=function(){var S=w.apply(this,arguments);return S._pc=this,S}),p.RTCRtpSender.prototype.getStats=function(){var S=this;return this._pc.getStats().then(function(A){return i.filterStats(A,S.track,!0)})}}if(!("getStats"in p.RTCRtpReceiver.prototype)){var C=p.RTCPeerConnection.prototype.getReceivers;C&&(p.RTCPeerConnection.prototype.getReceivers=function(){var S=this,A=C.apply(this,[]);return A.forEach(function(D){return D._pc=S}),A}),i.wrapPeerConnectionEvent(p,"track",function(S){return S.receiver._pc=S.srcElement,S}),p.RTCRtpReceiver.prototype.getStats=function(){var S=this;return this._pc.getStats().then(function(A){return i.filterStats(A,S.track,!1)})}}if("getStats"in p.RTCRtpSender.prototype&&"getStats"in p.RTCRtpReceiver.prototype){var T=p.RTCPeerConnection.prototype.getStats;p.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof p.MediaStreamTrack){var S,A,D,k=arguments[0];return this.getSenders().forEach(function(j){j.track===k&&(S?D=!0:S=j)}),this.getReceivers().forEach(function(j){return j.track===k&&(A?D=!0:A=j),j.track===k}),D||S&&A?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):S?S.getStats():A?A.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return T.apply(this,arguments)}}}}function _(p){p.RTCPeerConnection.prototype.getLocalStreams=function(){var S=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(function(A){return S._shimmedLocalStreams[A][0]})};var b=p.RTCPeerConnection.prototype.addTrack;p.RTCPeerConnection.prototype.addTrack=function(S,A){if(!A)return b.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};var D=b.apply(this,arguments);return this._shimmedLocalStreams[A.id]?this._shimmedLocalStreams[A.id].indexOf(D)===-1&&this._shimmedLocalStreams[A.id].push(D):this._shimmedLocalStreams[A.id]=[A,D],D};var w=p.RTCPeerConnection.prototype.addStream;p.RTCPeerConnection.prototype.addStream=function(S){var A=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{},S.getTracks().forEach(function(j){if(A.getSenders().find(function(F){return F.track===j}))throw new DOMException("Track already exists.","InvalidAccessError")});var D=this.getSenders();w.apply(this,arguments);var k=this.getSenders().filter(function(j){return D.indexOf(j)===-1});this._shimmedLocalStreams[S.id]=[S].concat(k)};var C=p.RTCPeerConnection.prototype.removeStream;p.RTCPeerConnection.prototype.removeStream=function(S){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[S.id],C.apply(this,arguments)};var T=p.RTCPeerConnection.prototype.removeTrack;p.RTCPeerConnection.prototype.removeTrack=function(S){var A=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},S&&Object.keys(this._shimmedLocalStreams).forEach(function(D){var k=A._shimmedLocalStreams[D].indexOf(S);k!==-1&&A._shimmedLocalStreams[D].splice(k,1),A._shimmedLocalStreams[D].length===1&&delete A._shimmedLocalStreams[D]}),T.apply(this,arguments)}}function x(p,b){if(p.RTCPeerConnection){if(p.RTCPeerConnection.prototype.addTrack&&b.version>=65)return _(p);var w=p.RTCPeerConnection.prototype.getLocalStreams;p.RTCPeerConnection.prototype.getLocalStreams=function(){var k=this,j=w.apply(this);return this._reverseStreams=this._reverseStreams||{},j.map(function(F){return k._reverseStreams[F.id]})};var C=p.RTCPeerConnection.prototype.addStream;p.RTCPeerConnection.prototype.addStream=function(k){var j=this;if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},k.getTracks().forEach(function(W){if(j.getSenders().find(function(z){return z.track===W}))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[k.id]){var F=new p.MediaStream(k.getTracks());this._streams[k.id]=F,this._reverseStreams[F.id]=k,k=F}C.apply(this,[k])};var T=p.RTCPeerConnection.prototype.removeStream;p.RTCPeerConnection.prototype.removeStream=function(k){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},T.apply(this,[this._streams[k.id]||k]),delete this._reverseStreams[this._streams[k.id]?this._streams[k.id].id:k.id],delete this._streams[k.id]},p.RTCPeerConnection.prototype.addTrack=function(k,j){var F=this;if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");var W=[].slice.call(arguments,1);if(W.length!==1||!W[0].getTracks().find(function(he){return he===k}))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(function(he){return he.track===k}))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};var z=this._streams[j.id];if(z)z.addTrack(k),Promise.resolve().then(function(){F.dispatchEvent(new Event("negotiationneeded"))});else{var ne=new p.MediaStream([k]);this._streams[j.id]=ne,this._reverseStreams[ne.id]=j,this.addStream(ne)}return this.getSenders().find(function(he){return he.track===k})},["createOffer","createAnswer"].forEach(function(k){var j=p.RTCPeerConnection.prototype[k],F=c({},k,function(){var W=this,z=arguments;return arguments.length&&typeof arguments[0]=="function"?j.apply(this,[function(ne){var he=D(W,ne);z[0].apply(null,[he])},function(ne){z[1]&&z[1].apply(null,ne)},arguments[2]]):j.apply(this,arguments).then(function(ne){return D(W,ne)})});p.RTCPeerConnection.prototype[k]=F[k]});var S=p.RTCPeerConnection.prototype.setLocalDescription;p.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=(k=this,j=arguments[0],F=j.sdp,Object.keys(k._reverseStreams||[]).forEach(function(W){var z=k._reverseStreams[W],ne=k._streams[z.id];F=F.replace(new RegExp(z.id,"g"),ne.id)}),new RTCSessionDescription({type:j.type,sdp:F})),S.apply(this,arguments)):S.apply(this,arguments);var k,j,F};var A=Object.getOwnPropertyDescriptor(p.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(p.RTCPeerConnection.prototype,"localDescription",{get:function(){var k=A.get.apply(this);return k.type===""?k:D(this,k)}}),p.RTCPeerConnection.prototype.removeTrack=function(k){var j,F=this;if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!k._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(k._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{},Object.keys(this._streams).forEach(function(W){F._streams[W].getTracks().find(function(z){return k.track===z})&&(j=F._streams[W])}),j&&(j.getTracks().length===1?this.removeStream(this._reverseStreams[j.id]):j.removeTrack(k.track),this.dispatchEvent(new Event("negotiationneeded")))}}function D(k,j){var F=j.sdp;return Object.keys(k._reverseStreams||[]).forEach(function(W){var z=k._reverseStreams[W],ne=k._streams[z.id];F=F.replace(new RegExp(ne.id,"g"),z.id)}),new RTCSessionDescription({type:j.type,sdp:F})}}function m(p,b){!p.RTCPeerConnection&&p.webkitRTCPeerConnection&&(p.RTCPeerConnection=p.webkitRTCPeerConnection),p.RTCPeerConnection&&b.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(w){var C=p.RTCPeerConnection.prototype[w],T=c({},w,function(){return arguments[0]=new(w==="addIceCandidate"?p.RTCIceCandidate:p.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)});p.RTCPeerConnection.prototype[w]=T[w]})}function f(p,b){i.wrapPeerConnectionEvent(p,"negotiationneeded",function(w){var C=w.target;if(!(b.version<72||C.getConfiguration&&C.getConfiguration().sdpSemantics==="plan-b")||C.signalingState==="stable")return w})}},{"../utils.js":"iSxC","./getusermedia":"s6SN","./getdisplaymedia":"VHa8"}],NZ1C:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterIceServers=s;var i=r(o("../utils"));function n(){if(typeof WeakMap!="function")return null;var a=new WeakMap;return n=function(){return a},a}function r(a){if(a&&a.__esModule)return a;if(a===null||typeof a!="object"&&typeof a!="function")return{default:a};var c=n();if(c&&c.has(a))return c.get(a);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var d in a)if(Object.prototype.hasOwnProperty.call(a,d)){var h=l?Object.getOwnPropertyDescriptor(a,d):null;h&&(h.get||h.set)?Object.defineProperty(u,d,h):u[d]=a[d]}return u.default=a,c&&c.set(a,u),u}function s(a,c){var u=!1;return(a=JSON.parse(JSON.stringify(a))).filter(function(l){if(l&&(l.urls||l.url)){var d=l.urls||l.url;l.url&&!l.urls&&i.deprecated("RTCIceServer.url","RTCIceServer.urls");var h=typeof d=="string";return h&&(d=[d]),d=d.filter(function(g){if(g.indexOf("stun:")===0)return!1;var E=g.startsWith("turn")&&!g.startsWith("turn:[")&&g.includes("transport=udp");return E&&!u?(u=!0,!0):E&&!u}),delete l.url,l.urls=h?d[0]:d,!!d.length}})}},{"../utils":"iSxC"}],YHvh:[function(o,e,t){"use strict";var i={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};i.localCName=i.generateIdentifier(),i.splitLines=function(n){return n.trim().split(`
2
2
  `).map(function(r){return r.trim()})},i.splitSections=function(n){return n.split(`
3
3
  m=`).map(function(r,s){return(s>0?"m="+r:r).trim()+`\r
4
4
  `})},i.getDescription=function(n){var r=i.splitSections(n);return r&&r[0]},i.getMediaSections=function(n){var r=i.splitSections(n);return r.shift(),r},i.matchPrefix=function(n,r){return i.splitLines(n).filter(function(s){return s.indexOf(r)===0})},i.parseCandidate=function(n){for(var r,s={foundation:(r=n.indexOf("a=candidate:")===0?n.substring(12).split(" "):n.substring(10).split(" "))[0],component:parseInt(r[1],10),protocol:r[2].toLowerCase(),priority:parseInt(r[3],10),ip:r[4],address:r[4],port:parseInt(r[5],10),type:r[7]},a=8;a<r.length;a+=2)switch(r[a]){case"raddr":s.relatedAddress=r[a+1];break;case"rport":s.relatedPort=parseInt(r[a+1],10);break;case"tcptype":s.tcpType=r[a+1];break;case"ufrag":s.ufrag=r[a+1],s.usernameFragment=r[a+1];break;default:s[r[a]]=r[a+1]}return s},i.writeCandidate=function(n){var r=[];r.push(n.foundation),r.push(n.component),r.push(n.protocol.toUpperCase()),r.push(n.priority),r.push(n.address||n.ip),r.push(n.port);var s=n.type;return r.push("typ"),r.push(s),s!=="host"&&n.relatedAddress&&n.relatedPort&&(r.push("raddr"),r.push(n.relatedAddress),r.push("rport"),r.push(n.relatedPort)),n.tcpType&&n.protocol.toLowerCase()==="tcp"&&(r.push("tcptype"),r.push(n.tcpType)),(n.usernameFragment||n.ufrag)&&(r.push("ufrag"),r.push(n.usernameFragment||n.ufrag)),"candidate:"+r.join(" ")},i.parseIceOptions=function(n){return n.substr(14).split(" ")},i.parseRtpMap=function(n){var r=n.substr(9).split(" "),s={payloadType:parseInt(r.shift(),10)};return r=r[0].split("/"),s.name=r[0],s.clockRate=parseInt(r[1],10),s.channels=r.length===3?parseInt(r[2],10):1,s.numChannels=s.channels,s},i.writeRtpMap=function(n){var r=n.payloadType;n.preferredPayloadType!==void 0&&(r=n.preferredPayloadType);var s=n.channels||n.numChannels||1;return"a=rtpmap:"+r+" "+n.name+"/"+n.clockRate+(s!==1?"/"+s:"")+`\r
@@ -47,7 +47,7 @@ t=0 0\r
47
47
  `,d.rtpSender&&d.sendEncodingParameters[0].rtx&&(x+="a=ssrc:"+d.sendEncodingParameters[0].rtx.ssrc+" cname:"+i.localCName+`\r
48
48
  `),x}function s(d,h){var g=!1;return(d=JSON.parse(JSON.stringify(d))).filter(function(E){if(E&&(E.urls||E.url)){var _=E.urls||E.url;E.url&&!E.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var x=typeof _=="string";return x&&(_=[_]),_=_.filter(function(m){return m.indexOf("turn:")===0&&m.indexOf("transport=udp")!==-1&&m.indexOf("turn:[")===-1&&!g?(g=!0,!0):m.indexOf("stun:")===0&&h>=14393&&m.indexOf("?transport=udp")===-1}),delete E.url,E.urls=x?_[0]:_,!!_.length}})}function a(d,h){var g={codecs:[],headerExtensions:[],fecMechanisms:[]},E=function(x,m){x=parseInt(x,10);for(var f=0;f<m.length;f++)if(m[f].payloadType===x||m[f].preferredPayloadType===x)return m[f]},_=function(x,m,f,p){var b=E(x.parameters.apt,f),w=E(m.parameters.apt,p);return b&&w&&b.name.toLowerCase()===w.name.toLowerCase()};return d.codecs.forEach(function(x){for(var m=0;m<h.codecs.length;m++){var f=h.codecs[m];if(x.name.toLowerCase()===f.name.toLowerCase()&&x.clockRate===f.clockRate){if(x.name.toLowerCase()==="rtx"&&x.parameters&&f.parameters.apt&&!_(x,f,d.codecs,h.codecs))continue;(f=JSON.parse(JSON.stringify(f))).numChannels=Math.min(x.numChannels,f.numChannels),g.codecs.push(f),f.rtcpFeedback=f.rtcpFeedback.filter(function(p){for(var b=0;b<x.rtcpFeedback.length;b++)if(x.rtcpFeedback[b].type===p.type&&x.rtcpFeedback[b].parameter===p.parameter)return!0;return!1});break}}}),d.headerExtensions.forEach(function(x){for(var m=0;m<h.headerExtensions.length;m++){var f=h.headerExtensions[m];if(x.uri===f.uri){g.headerExtensions.push(f);break}}}),g}function c(d,h,g){return{offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[h][d].indexOf(g)!==-1}function u(d,h){var g=d.getRemoteCandidates().find(function(E){return h.foundation===E.foundation&&h.ip===E.ip&&h.port===E.port&&h.priority===E.priority&&h.protocol===E.protocol&&h.type===E.type});return g||d.addRemoteCandidate(h),!g}function l(d,h){var g=new Error(h);return g.name=d,g.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[d],g}e.exports=function(d,h){function g(m,f){f.addTrack(m),f.dispatchEvent(new d.MediaStreamTrackEvent("addtrack",{track:m}))}function E(m,f,p,b){var w=new Event("track");w.track=f,w.receiver=p,w.transceiver={receiver:p},w.streams=b,d.setTimeout(function(){m._dispatchEvent("track",w)})}var _=function(m){var f=this,p=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach(function(w){f[w]=p[w].bind(p)}),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",m=JSON.parse(JSON.stringify(m||{})),this.usingBundle=m.bundlePolicy==="max-bundle",m.rtcpMuxPolicy==="negotiate")throw l("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(m.rtcpMuxPolicy||(m.rtcpMuxPolicy="require"),m.iceTransportPolicy){case"all":case"relay":break;default:m.iceTransportPolicy="all"}switch(m.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:m.bundlePolicy="balanced"}if(m.iceServers=s(m.iceServers||[],h),this._iceGatherers=[],m.iceCandidatePoolSize)for(var b=m.iceCandidatePoolSize;b>0;b--)this._iceGatherers.push(new d.RTCIceGatherer({iceServers:m.iceServers,gatherPolicy:m.iceTransportPolicy}));else m.iceCandidatePoolSize=0;this._config=m,this.transceivers=[],this._sdpSessionId=i.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(_.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(_.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),_.prototype.onicecandidate=null,_.prototype.onaddstream=null,_.prototype.ontrack=null,_.prototype.onremovestream=null,_.prototype.onsignalingstatechange=null,_.prototype.oniceconnectionstatechange=null,_.prototype.onconnectionstatechange=null,_.prototype.onicegatheringstatechange=null,_.prototype.onnegotiationneeded=null,_.prototype.ondatachannel=null,_.prototype._dispatchEvent=function(m,f){this._isClosed||(this.dispatchEvent(f),typeof this["on"+m]=="function"&&this["on"+m](f))},_.prototype._emitGatheringStateChange=function(){var m=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",m)},_.prototype.getConfiguration=function(){return this._config},_.prototype.getLocalStreams=function(){return this.localStreams},_.prototype.getRemoteStreams=function(){return this.remoteStreams},_.prototype._createTransceiver=function(m,f){var p=this.transceivers.length>0,b={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:m,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&p)b.iceTransport=this.transceivers[0].iceTransport,b.dtlsTransport=this.transceivers[0].dtlsTransport;else{var w=this._createIceAndDtlsTransports();b.iceTransport=w.iceTransport,b.dtlsTransport=w.dtlsTransport}return f||this.transceivers.push(b),b},_.prototype.addTrack=function(m,f){if(this._isClosed)throw l("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var p;if(this.transceivers.find(function(w){return w.track===m}))throw l("InvalidAccessError","Track already exists.");for(var b=0;b<this.transceivers.length;b++)this.transceivers[b].track||this.transceivers[b].kind!==m.kind||(p=this.transceivers[b]);return p||(p=this._createTransceiver(m.kind)),this._maybeFireNegotiationNeeded(),this.localStreams.indexOf(f)===-1&&this.localStreams.push(f),p.track=m,p.stream=f,p.rtpSender=new d.RTCRtpSender(m,p.dtlsTransport),p.rtpSender},_.prototype.addStream=function(m){var f=this;if(h>=15025)m.getTracks().forEach(function(b){f.addTrack(b,m)});else{var p=m.clone();m.getTracks().forEach(function(b,w){var C=p.getTracks()[w];b.addEventListener("enabled",function(T){C.enabled=T.enabled})}),p.getTracks().forEach(function(b){f.addTrack(b,p)})}},_.prototype.removeTrack=function(m){if(this._isClosed)throw l("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(m instanceof d.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var f=this.transceivers.find(function(b){return b.rtpSender===m});if(!f)throw l("InvalidAccessError","Sender was not created by this connection.");var p=f.stream;f.rtpSender.stop(),f.rtpSender=null,f.track=null,f.stream=null,this.transceivers.map(function(b){return b.stream}).indexOf(p)===-1&&this.localStreams.indexOf(p)>-1&&this.localStreams.splice(this.localStreams.indexOf(p),1),this._maybeFireNegotiationNeeded()},_.prototype.removeStream=function(m){var f=this;m.getTracks().forEach(function(p){var b=f.getSenders().find(function(w){return w.track===p});b&&f.removeTrack(b)})},_.prototype.getSenders=function(){return this.transceivers.filter(function(m){return!!m.rtpSender}).map(function(m){return m.rtpSender})},_.prototype.getReceivers=function(){return this.transceivers.filter(function(m){return!!m.rtpReceiver}).map(function(m){return m.rtpReceiver})},_.prototype._createIceGatherer=function(m,f){var p=this;if(f&&m>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var b=new d.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(b,"state",{value:"new",writable:!0}),this.transceivers[m].bufferedCandidateEvents=[],this.transceivers[m].bufferCandidates=function(w){var C=!w.candidate||Object.keys(w.candidate).length===0;b.state=C?"completed":"gathering",p.transceivers[m].bufferedCandidateEvents!==null&&p.transceivers[m].bufferedCandidateEvents.push(w)},b.addEventListener("localcandidate",this.transceivers[m].bufferCandidates),b},_.prototype._gather=function(m,f){var p=this,b=this.transceivers[f].iceGatherer;if(!b.onlocalcandidate){var w=this.transceivers[f].bufferedCandidateEvents;this.transceivers[f].bufferedCandidateEvents=null,b.removeEventListener("localcandidate",this.transceivers[f].bufferCandidates),b.onlocalcandidate=function(C){if(!(p.usingBundle&&f>0)){var T=new Event("icecandidate");T.candidate={sdpMid:m,sdpMLineIndex:f};var S=C.candidate,A=!S||Object.keys(S).length===0;if(A)b.state!=="new"&&b.state!=="gathering"||(b.state="completed");else{b.state==="new"&&(b.state="gathering"),S.component=1,S.ufrag=b.getLocalParameters().usernameFragment;var D=i.writeCandidate(S);T.candidate=Object.assign(T.candidate,i.parseCandidate(D)),T.candidate.candidate=D,T.candidate.toJSON=function(){return{candidate:T.candidate.candidate,sdpMid:T.candidate.sdpMid,sdpMLineIndex:T.candidate.sdpMLineIndex,usernameFragment:T.candidate.usernameFragment}}}var k=i.getMediaSections(p._localDescription.sdp);k[T.candidate.sdpMLineIndex]+=A?`a=end-of-candidates\r
49
49
  `:"a="+T.candidate.candidate+`\r
50
- `,p._localDescription.sdp=i.getDescription(p._localDescription.sdp)+k.join("");var j=p.transceivers.every(function(F){return F.iceGatherer&&F.iceGatherer.state==="completed"});p.iceGatheringState!=="gathering"&&(p.iceGatheringState="gathering",p._emitGatheringStateChange()),A||p._dispatchEvent("icecandidate",T),j&&(p._dispatchEvent("icecandidate",new Event("icecandidate")),p.iceGatheringState="complete",p._emitGatheringStateChange())}},d.setTimeout(function(){w.forEach(function(C){b.onlocalcandidate(C)})},0)}},_.prototype._createIceAndDtlsTransports=function(){var m=this,f=new d.RTCIceTransport(null);f.onicestatechange=function(){m._updateIceConnectionState(),m._updateConnectionState()};var p=new d.RTCDtlsTransport(f);return p.ondtlsstatechange=function(){m._updateConnectionState()},p.onerror=function(){Object.defineProperty(p,"state",{value:"failed",writable:!0}),m._updateConnectionState()},{iceTransport:f,dtlsTransport:p}},_.prototype._disposeIceAndDtlsTransports=function(m){var f=this.transceivers[m].iceGatherer;f&&(delete f.onlocalcandidate,delete this.transceivers[m].iceGatherer);var p=this.transceivers[m].iceTransport;p&&(delete p.onicestatechange,delete this.transceivers[m].iceTransport);var b=this.transceivers[m].dtlsTransport;b&&(delete b.ondtlsstatechange,delete b.onerror,delete this.transceivers[m].dtlsTransport)},_.prototype._transceive=function(m,f,p){var b=a(m.localCapabilities,m.remoteCapabilities);f&&m.rtpSender&&(b.encodings=m.sendEncodingParameters,b.rtcp={cname:i.localCName,compound:m.rtcpParameters.compound},m.recvEncodingParameters.length&&(b.rtcp.ssrc=m.recvEncodingParameters[0].ssrc),m.rtpSender.send(b)),p&&m.rtpReceiver&&b.codecs.length>0&&(m.kind==="video"&&m.recvEncodingParameters&&h<15019&&m.recvEncodingParameters.forEach(function(w){delete w.rtx}),m.recvEncodingParameters.length?b.encodings=m.recvEncodingParameters:b.encodings=[{}],b.rtcp={compound:m.rtcpParameters.compound},m.rtcpParameters.cname&&(b.rtcp.cname=m.rtcpParameters.cname),m.sendEncodingParameters.length&&(b.rtcp.ssrc=m.sendEncodingParameters[0].ssrc),m.rtpReceiver.receive(b))},_.prototype.setLocalDescription=function(m){var f,p,b=this;if(["offer","answer"].indexOf(m.type)===-1)return Promise.reject(l("TypeError",'Unsupported type "'+m.type+'"'));if(!c("setLocalDescription",m.type,b.signalingState)||b._isClosed)return Promise.reject(l("InvalidStateError","Can not set local "+m.type+" in state "+b.signalingState));if(m.type==="offer")f=i.splitSections(m.sdp),p=f.shift(),f.forEach(function(C,T){var S=i.parseRtpParameters(C);b.transceivers[T].localCapabilities=S}),b.transceivers.forEach(function(C,T){b._gather(C.mid,T)});else if(m.type==="answer"){f=i.splitSections(b._remoteDescription.sdp),p=f.shift();var w=i.matchPrefix(p,"a=ice-lite").length>0;f.forEach(function(C,T){var S=b.transceivers[T],A=S.iceGatherer,D=S.iceTransport,k=S.dtlsTransport,j=S.localCapabilities,F=S.remoteCapabilities;if(!(i.isRejected(C)&&i.matchPrefix(C,"a=bundle-only").length===0)&&!S.rejected){var W=i.getIceParameters(C,p),z=i.getDtlsParameters(C,p);w&&(z.role="server"),b.usingBundle&&T!==0||(b._gather(S.mid,T),D.state==="new"&&D.start(A,W,w?"controlling":"controlled"),k.state==="new"&&k.start(z));var ne=a(j,F);b._transceive(S,ne.codecs.length>0,!1)}})}return b._localDescription={type:m.type,sdp:m.sdp},m.type==="offer"?b._updateSignalingState("have-local-offer"):b._updateSignalingState("stable"),Promise.resolve()},_.prototype.setRemoteDescription=function(m){var f=this;if(["offer","answer"].indexOf(m.type)===-1)return Promise.reject(l("TypeError",'Unsupported type "'+m.type+'"'));if(!c("setRemoteDescription",m.type,f.signalingState)||f._isClosed)return Promise.reject(l("InvalidStateError","Can not set remote "+m.type+" in state "+f.signalingState));var p={};f.remoteStreams.forEach(function(D){p[D.id]=D});var b=[],w=i.splitSections(m.sdp),C=w.shift(),T=i.matchPrefix(C,"a=ice-lite").length>0,S=i.matchPrefix(C,"a=group:BUNDLE ").length>0;f.usingBundle=S;var A=i.matchPrefix(C,"a=ice-options:")[0];return f.canTrickleIceCandidates=!!A&&A.substr(14).split(" ").indexOf("trickle")>=0,w.forEach(function(D,k){var j=i.splitLines(D),F=i.getKind(D),W=i.isRejected(D)&&i.matchPrefix(D,"a=bundle-only").length===0,z=j[0].substr(2).split(" ")[2],ne=i.getDirection(D,C),he=i.parseMsid(D),qh=i.getMid(D)||i.generateIdentifier();if(W||F==="application"&&(z==="DTLS/SCTP"||z==="UDP/DTLS/SCTP"))f.transceivers[k]={mid:qh,kind:F,protocol:z,rejected:!0};else{var q,Yh,Ls,Fc,cn,Bc,Uc,js,un;!W&&f.transceivers[k]&&f.transceivers[k].rejected&&(f.transceivers[k]=f._createTransceiver(F,!0));var Kh,Jh,Zh=i.parseRtpParameters(D);W||(Kh=i.getIceParameters(D,C),(Jh=i.getDtlsParameters(D,C)).role="client"),Uc=i.parseRtpEncodingParameters(D);var $h=i.parseRtcpParameters(D),ep=i.matchPrefix(D,"a=end-of-candidates",C).length>0,bo=i.matchPrefix(D,"a=candidate:").map(function(ct){return i.parseCandidate(ct)}).filter(function(ct){return ct.component===1});if((m.type==="offer"||m.type==="answer")&&!W&&S&&k>0&&f.transceivers[k]&&(f._disposeIceAndDtlsTransports(k),f.transceivers[k].iceGatherer=f.transceivers[0].iceGatherer,f.transceivers[k].iceTransport=f.transceivers[0].iceTransport,f.transceivers[k].dtlsTransport=f.transceivers[0].dtlsTransport,f.transceivers[k].rtpSender&&f.transceivers[k].rtpSender.setTransport(f.transceivers[0].dtlsTransport),f.transceivers[k].rtpReceiver&&f.transceivers[k].rtpReceiver.setTransport(f.transceivers[0].dtlsTransport)),m.type!=="offer"||W)m.type==="answer"&&!W&&(Yh=(q=f.transceivers[k]).iceGatherer,Ls=q.iceTransport,Fc=q.dtlsTransport,cn=q.rtpReceiver,Bc=q.sendEncodingParameters,js=q.localCapabilities,f.transceivers[k].recvEncodingParameters=Uc,f.transceivers[k].remoteCapabilities=Zh,f.transceivers[k].rtcpParameters=$h,bo.length&&Ls.state==="new"&&(!T&&!ep||S&&k!==0?bo.forEach(function(ct){u(q.iceTransport,ct)}):Ls.setRemoteCandidates(bo)),S&&k!==0||(Ls.state==="new"&&Ls.start(Yh,Kh,"controlling"),Fc.state==="new"&&Fc.start(Jh)),!a(q.localCapabilities,q.remoteCapabilities).codecs.filter(function(ct){return ct.name.toLowerCase()==="rtx"}).length&&q.sendEncodingParameters[0].rtx&&delete q.sendEncodingParameters[0].rtx,f._transceive(q,ne==="sendrecv"||ne==="recvonly",ne==="sendrecv"||ne==="sendonly"),!cn||ne!=="sendrecv"&&ne!=="sendonly"?delete q.rtpReceiver:(un=cn.track,he?(p[he.stream]||(p[he.stream]=new d.MediaStream),g(un,p[he.stream]),b.push([un,cn,p[he.stream]])):(p.default||(p.default=new d.MediaStream),g(un,p.default),b.push([un,cn,p.default]))));else{(q=f.transceivers[k]||f._createTransceiver(F)).mid=qh,q.iceGatherer||(q.iceGatherer=f._createIceGatherer(k,S)),bo.length&&q.iceTransport.state==="new"&&(!ep||S&&k!==0?bo.forEach(function(ct){u(q.iceTransport,ct)}):q.iceTransport.setRemoteCandidates(bo)),js=d.RTCRtpReceiver.getCapabilities(F),h<15019&&(js.codecs=js.codecs.filter(function(ct){return ct.name!=="rtx"})),Bc=q.sendEncodingParameters||[{ssrc:1001*(2*k+2)}];var vo,Gc=!1;ne==="sendrecv"||ne==="sendonly"?(Gc=!q.rtpReceiver,cn=q.rtpReceiver||new d.RTCRtpReceiver(q.dtlsTransport,F),Gc&&(un=cn.track,he&&he.stream==="-"||(he?(p[he.stream]||(p[he.stream]=new d.MediaStream,Object.defineProperty(p[he.stream],"id",{get:function(){return he.stream}})),Object.defineProperty(un,"id",{get:function(){return he.track}}),vo=p[he.stream]):(p.default||(p.default=new d.MediaStream),vo=p.default)),vo&&(g(un,vo),q.associatedRemoteMediaStreams.push(vo)),b.push([un,cn,vo]))):q.rtpReceiver&&q.rtpReceiver.track&&(q.associatedRemoteMediaStreams.forEach(function(ct){var Vc,tp,ip=ct.getTracks().find(function(Gg){return Gg.id===q.rtpReceiver.track.id});ip&&(Vc=ip,(tp=ct).removeTrack(Vc),tp.dispatchEvent(new d.MediaStreamTrackEvent("removetrack",{track:Vc})))}),q.associatedRemoteMediaStreams=[]),q.localCapabilities=js,q.remoteCapabilities=Zh,q.rtpReceiver=cn,q.rtcpParameters=$h,q.sendEncodingParameters=Bc,q.recvEncodingParameters=Uc,f._transceive(f.transceivers[k],!1,Gc)}}}),f._dtlsRole===void 0&&(f._dtlsRole=m.type==="offer"?"active":"passive"),f._remoteDescription={type:m.type,sdp:m.sdp},m.type==="offer"?f._updateSignalingState("have-remote-offer"):f._updateSignalingState("stable"),Object.keys(p).forEach(function(D){var k=p[D];if(k.getTracks().length){if(f.remoteStreams.indexOf(k)===-1){f.remoteStreams.push(k);var j=new Event("addstream");j.stream=k,d.setTimeout(function(){f._dispatchEvent("addstream",j)})}b.forEach(function(F){var W=F[0],z=F[1];k.id===F[2].id&&E(f,W,z,[k])})}}),b.forEach(function(D){D[2]||E(f,D[0],D[1],[])}),d.setTimeout(function(){f&&f.transceivers&&f.transceivers.forEach(function(D){D.iceTransport&&D.iceTransport.state==="new"&&D.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),D.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},_.prototype.close=function(){this.transceivers.forEach(function(m){m.iceTransport&&m.iceTransport.stop(),m.dtlsTransport&&m.dtlsTransport.stop(),m.rtpSender&&m.rtpSender.stop(),m.rtpReceiver&&m.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState("closed")},_.prototype._updateSignalingState=function(m){this.signalingState=m;var f=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",f)},_.prototype._maybeFireNegotiationNeeded=function(){var m=this;this.signalingState==="stable"&&this.needNegotiation!==!0&&(this.needNegotiation=!0,d.setTimeout(function(){if(m.needNegotiation){m.needNegotiation=!1;var f=new Event("negotiationneeded");m._dispatchEvent("negotiationneeded",f)}},0))},_.prototype._updateIceConnectionState=function(){var m,f={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(b){b.iceTransport&&!b.rejected&&f[b.iceTransport.state]++}),m="new",f.failed>0?m="failed":f.checking>0?m="checking":f.disconnected>0?m="disconnected":f.new>0?m="new":f.connected>0?m="connected":f.completed>0&&(m="completed"),m!==this.iceConnectionState){this.iceConnectionState=m;var p=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",p)}},_.prototype._updateConnectionState=function(){var m,f={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(b){b.iceTransport&&b.dtlsTransport&&!b.rejected&&(f[b.iceTransport.state]++,f[b.dtlsTransport.state]++)}),f.connected+=f.completed,m="new",f.failed>0?m="failed":f.connecting>0?m="connecting":f.disconnected>0?m="disconnected":f.new>0?m="new":f.connected>0&&(m="connected"),m!==this.connectionState){this.connectionState=m;var p=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",p)}},_.prototype.createOffer=function(){var m=this;if(m._isClosed)return Promise.reject(l("InvalidStateError","Can not call createOffer after close"));var f=m.transceivers.filter(function(T){return T.kind==="audio"}).length,p=m.transceivers.filter(function(T){return T.kind==="video"}).length,b=arguments[0];if(b){if(b.mandatory||b.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");b.offerToReceiveAudio!==void 0&&(f=b.offerToReceiveAudio===!0?1:b.offerToReceiveAudio===!1?0:b.offerToReceiveAudio),b.offerToReceiveVideo!==void 0&&(p=b.offerToReceiveVideo===!0?1:b.offerToReceiveVideo===!1?0:b.offerToReceiveVideo)}for(m.transceivers.forEach(function(T){T.kind==="audio"?--f<0&&(T.wantReceive=!1):T.kind==="video"&&--p<0&&(T.wantReceive=!1)});f>0||p>0;)f>0&&(m._createTransceiver("audio"),f--),p>0&&(m._createTransceiver("video"),p--);var w=i.writeSessionBoilerplate(m._sdpSessionId,m._sdpSessionVersion++);m.transceivers.forEach(function(T,S){var A=T.track,D=T.kind,k=T.mid||i.generateIdentifier();T.mid=k,T.iceGatherer||(T.iceGatherer=m._createIceGatherer(S,m.usingBundle));var j=d.RTCRtpSender.getCapabilities(D);h<15019&&(j.codecs=j.codecs.filter(function(W){return W.name!=="rtx"})),j.codecs.forEach(function(W){W.name==="H264"&&W.parameters["level-asymmetry-allowed"]===void 0&&(W.parameters["level-asymmetry-allowed"]="1"),T.remoteCapabilities&&T.remoteCapabilities.codecs&&T.remoteCapabilities.codecs.forEach(function(z){W.name.toLowerCase()===z.name.toLowerCase()&&W.clockRate===z.clockRate&&(W.preferredPayloadType=z.payloadType)})}),j.headerExtensions.forEach(function(W){(T.remoteCapabilities&&T.remoteCapabilities.headerExtensions||[]).forEach(function(z){W.uri===z.uri&&(W.id=z.id)})});var F=T.sendEncodingParameters||[{ssrc:1001*(2*S+1)}];A&&h>=15019&&D==="video"&&!F[0].rtx&&(F[0].rtx={ssrc:F[0].ssrc+1}),T.wantReceive&&(T.rtpReceiver=new d.RTCRtpReceiver(T.dtlsTransport,D)),T.localCapabilities=j,T.sendEncodingParameters=F}),m._config.bundlePolicy!=="max-compat"&&(w+="a=group:BUNDLE "+m.transceivers.map(function(T){return T.mid}).join(" ")+`\r
50
+ `,p._localDescription.sdp=i.getDescription(p._localDescription.sdp)+k.join("");var j=p.transceivers.every(function(F){return F.iceGatherer&&F.iceGatherer.state==="completed"});p.iceGatheringState!=="gathering"&&(p.iceGatheringState="gathering",p._emitGatheringStateChange()),A||p._dispatchEvent("icecandidate",T),j&&(p._dispatchEvent("icecandidate",new Event("icecandidate")),p.iceGatheringState="complete",p._emitGatheringStateChange())}},d.setTimeout(function(){w.forEach(function(C){b.onlocalcandidate(C)})},0)}},_.prototype._createIceAndDtlsTransports=function(){var m=this,f=new d.RTCIceTransport(null);f.onicestatechange=function(){m._updateIceConnectionState(),m._updateConnectionState()};var p=new d.RTCDtlsTransport(f);return p.ondtlsstatechange=function(){m._updateConnectionState()},p.onerror=function(){Object.defineProperty(p,"state",{value:"failed",writable:!0}),m._updateConnectionState()},{iceTransport:f,dtlsTransport:p}},_.prototype._disposeIceAndDtlsTransports=function(m){var f=this.transceivers[m].iceGatherer;f&&(delete f.onlocalcandidate,delete this.transceivers[m].iceGatherer);var p=this.transceivers[m].iceTransport;p&&(delete p.onicestatechange,delete this.transceivers[m].iceTransport);var b=this.transceivers[m].dtlsTransport;b&&(delete b.ondtlsstatechange,delete b.onerror,delete this.transceivers[m].dtlsTransport)},_.prototype._transceive=function(m,f,p){var b=a(m.localCapabilities,m.remoteCapabilities);f&&m.rtpSender&&(b.encodings=m.sendEncodingParameters,b.rtcp={cname:i.localCName,compound:m.rtcpParameters.compound},m.recvEncodingParameters.length&&(b.rtcp.ssrc=m.recvEncodingParameters[0].ssrc),m.rtpSender.send(b)),p&&m.rtpReceiver&&b.codecs.length>0&&(m.kind==="video"&&m.recvEncodingParameters&&h<15019&&m.recvEncodingParameters.forEach(function(w){delete w.rtx}),m.recvEncodingParameters.length?b.encodings=m.recvEncodingParameters:b.encodings=[{}],b.rtcp={compound:m.rtcpParameters.compound},m.rtcpParameters.cname&&(b.rtcp.cname=m.rtcpParameters.cname),m.sendEncodingParameters.length&&(b.rtcp.ssrc=m.sendEncodingParameters[0].ssrc),m.rtpReceiver.receive(b))},_.prototype.setLocalDescription=function(m){var f,p,b=this;if(["offer","answer"].indexOf(m.type)===-1)return Promise.reject(l("TypeError",'Unsupported type "'+m.type+'"'));if(!c("setLocalDescription",m.type,b.signalingState)||b._isClosed)return Promise.reject(l("InvalidStateError","Can not set local "+m.type+" in state "+b.signalingState));if(m.type==="offer")f=i.splitSections(m.sdp),p=f.shift(),f.forEach(function(C,T){var S=i.parseRtpParameters(C);b.transceivers[T].localCapabilities=S}),b.transceivers.forEach(function(C,T){b._gather(C.mid,T)});else if(m.type==="answer"){f=i.splitSections(b._remoteDescription.sdp),p=f.shift();var w=i.matchPrefix(p,"a=ice-lite").length>0;f.forEach(function(C,T){var S=b.transceivers[T],A=S.iceGatherer,D=S.iceTransport,k=S.dtlsTransport,j=S.localCapabilities,F=S.remoteCapabilities;if(!(i.isRejected(C)&&i.matchPrefix(C,"a=bundle-only").length===0)&&!S.rejected){var W=i.getIceParameters(C,p),z=i.getDtlsParameters(C,p);w&&(z.role="server"),b.usingBundle&&T!==0||(b._gather(S.mid,T),D.state==="new"&&D.start(A,W,w?"controlling":"controlled"),k.state==="new"&&k.start(z));var ne=a(j,F);b._transceive(S,ne.codecs.length>0,!1)}})}return b._localDescription={type:m.type,sdp:m.sdp},m.type==="offer"?b._updateSignalingState("have-local-offer"):b._updateSignalingState("stable"),Promise.resolve()},_.prototype.setRemoteDescription=function(m){var f=this;if(["offer","answer"].indexOf(m.type)===-1)return Promise.reject(l("TypeError",'Unsupported type "'+m.type+'"'));if(!c("setRemoteDescription",m.type,f.signalingState)||f._isClosed)return Promise.reject(l("InvalidStateError","Can not set remote "+m.type+" in state "+f.signalingState));var p={};f.remoteStreams.forEach(function(D){p[D.id]=D});var b=[],w=i.splitSections(m.sdp),C=w.shift(),T=i.matchPrefix(C,"a=ice-lite").length>0,S=i.matchPrefix(C,"a=group:BUNDLE ").length>0;f.usingBundle=S;var A=i.matchPrefix(C,"a=ice-options:")[0];return f.canTrickleIceCandidates=!!A&&A.substr(14).split(" ").indexOf("trickle")>=0,w.forEach(function(D,k){var j=i.splitLines(D),F=i.getKind(D),W=i.isRejected(D)&&i.matchPrefix(D,"a=bundle-only").length===0,z=j[0].substr(2).split(" ")[2],ne=i.getDirection(D,C),he=i.parseMsid(D),Yh=i.getMid(D)||i.generateIdentifier();if(W||F==="application"&&(z==="DTLS/SCTP"||z==="UDP/DTLS/SCTP"))f.transceivers[k]={mid:Yh,kind:F,protocol:z,rejected:!0};else{var q,Kh,js,Bc,cn,Uc,Gc,Hs,un;!W&&f.transceivers[k]&&f.transceivers[k].rejected&&(f.transceivers[k]=f._createTransceiver(F,!0));var Jh,Zh,$h=i.parseRtpParameters(D);W||(Jh=i.getIceParameters(D,C),(Zh=i.getDtlsParameters(D,C)).role="client"),Gc=i.parseRtpEncodingParameters(D);var ep=i.parseRtcpParameters(D),tp=i.matchPrefix(D,"a=end-of-candidates",C).length>0,vo=i.matchPrefix(D,"a=candidate:").map(function(ct){return i.parseCandidate(ct)}).filter(function(ct){return ct.component===1});if((m.type==="offer"||m.type==="answer")&&!W&&S&&k>0&&f.transceivers[k]&&(f._disposeIceAndDtlsTransports(k),f.transceivers[k].iceGatherer=f.transceivers[0].iceGatherer,f.transceivers[k].iceTransport=f.transceivers[0].iceTransport,f.transceivers[k].dtlsTransport=f.transceivers[0].dtlsTransport,f.transceivers[k].rtpSender&&f.transceivers[k].rtpSender.setTransport(f.transceivers[0].dtlsTransport),f.transceivers[k].rtpReceiver&&f.transceivers[k].rtpReceiver.setTransport(f.transceivers[0].dtlsTransport)),m.type!=="offer"||W)m.type==="answer"&&!W&&(Kh=(q=f.transceivers[k]).iceGatherer,js=q.iceTransport,Bc=q.dtlsTransport,cn=q.rtpReceiver,Uc=q.sendEncodingParameters,Hs=q.localCapabilities,f.transceivers[k].recvEncodingParameters=Gc,f.transceivers[k].remoteCapabilities=$h,f.transceivers[k].rtcpParameters=ep,vo.length&&js.state==="new"&&(!T&&!tp||S&&k!==0?vo.forEach(function(ct){u(q.iceTransport,ct)}):js.setRemoteCandidates(vo)),S&&k!==0||(js.state==="new"&&js.start(Kh,Jh,"controlling"),Bc.state==="new"&&Bc.start(Zh)),!a(q.localCapabilities,q.remoteCapabilities).codecs.filter(function(ct){return ct.name.toLowerCase()==="rtx"}).length&&q.sendEncodingParameters[0].rtx&&delete q.sendEncodingParameters[0].rtx,f._transceive(q,ne==="sendrecv"||ne==="recvonly",ne==="sendrecv"||ne==="sendonly"),!cn||ne!=="sendrecv"&&ne!=="sendonly"?delete q.rtpReceiver:(un=cn.track,he?(p[he.stream]||(p[he.stream]=new d.MediaStream),g(un,p[he.stream]),b.push([un,cn,p[he.stream]])):(p.default||(p.default=new d.MediaStream),g(un,p.default),b.push([un,cn,p.default]))));else{(q=f.transceivers[k]||f._createTransceiver(F)).mid=Yh,q.iceGatherer||(q.iceGatherer=f._createIceGatherer(k,S)),vo.length&&q.iceTransport.state==="new"&&(!tp||S&&k!==0?vo.forEach(function(ct){u(q.iceTransport,ct)}):q.iceTransport.setRemoteCandidates(vo)),Hs=d.RTCRtpReceiver.getCapabilities(F),h<15019&&(Hs.codecs=Hs.codecs.filter(function(ct){return ct.name!=="rtx"})),Uc=q.sendEncodingParameters||[{ssrc:1001*(2*k+2)}];var yo,Vc=!1;ne==="sendrecv"||ne==="sendonly"?(Vc=!q.rtpReceiver,cn=q.rtpReceiver||new d.RTCRtpReceiver(q.dtlsTransport,F),Vc&&(un=cn.track,he&&he.stream==="-"||(he?(p[he.stream]||(p[he.stream]=new d.MediaStream,Object.defineProperty(p[he.stream],"id",{get:function(){return he.stream}})),Object.defineProperty(un,"id",{get:function(){return he.track}}),yo=p[he.stream]):(p.default||(p.default=new d.MediaStream),yo=p.default)),yo&&(g(un,yo),q.associatedRemoteMediaStreams.push(yo)),b.push([un,cn,yo]))):q.rtpReceiver&&q.rtpReceiver.track&&(q.associatedRemoteMediaStreams.forEach(function(ct){var zc,ip,np=ct.getTracks().find(function(Vg){return Vg.id===q.rtpReceiver.track.id});np&&(zc=np,(ip=ct).removeTrack(zc),ip.dispatchEvent(new d.MediaStreamTrackEvent("removetrack",{track:zc})))}),q.associatedRemoteMediaStreams=[]),q.localCapabilities=Hs,q.remoteCapabilities=$h,q.rtpReceiver=cn,q.rtcpParameters=ep,q.sendEncodingParameters=Uc,q.recvEncodingParameters=Gc,f._transceive(f.transceivers[k],!1,Vc)}}}),f._dtlsRole===void 0&&(f._dtlsRole=m.type==="offer"?"active":"passive"),f._remoteDescription={type:m.type,sdp:m.sdp},m.type==="offer"?f._updateSignalingState("have-remote-offer"):f._updateSignalingState("stable"),Object.keys(p).forEach(function(D){var k=p[D];if(k.getTracks().length){if(f.remoteStreams.indexOf(k)===-1){f.remoteStreams.push(k);var j=new Event("addstream");j.stream=k,d.setTimeout(function(){f._dispatchEvent("addstream",j)})}b.forEach(function(F){var W=F[0],z=F[1];k.id===F[2].id&&E(f,W,z,[k])})}}),b.forEach(function(D){D[2]||E(f,D[0],D[1],[])}),d.setTimeout(function(){f&&f.transceivers&&f.transceivers.forEach(function(D){D.iceTransport&&D.iceTransport.state==="new"&&D.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),D.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},_.prototype.close=function(){this.transceivers.forEach(function(m){m.iceTransport&&m.iceTransport.stop(),m.dtlsTransport&&m.dtlsTransport.stop(),m.rtpSender&&m.rtpSender.stop(),m.rtpReceiver&&m.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState("closed")},_.prototype._updateSignalingState=function(m){this.signalingState=m;var f=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",f)},_.prototype._maybeFireNegotiationNeeded=function(){var m=this;this.signalingState==="stable"&&this.needNegotiation!==!0&&(this.needNegotiation=!0,d.setTimeout(function(){if(m.needNegotiation){m.needNegotiation=!1;var f=new Event("negotiationneeded");m._dispatchEvent("negotiationneeded",f)}},0))},_.prototype._updateIceConnectionState=function(){var m,f={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(b){b.iceTransport&&!b.rejected&&f[b.iceTransport.state]++}),m="new",f.failed>0?m="failed":f.checking>0?m="checking":f.disconnected>0?m="disconnected":f.new>0?m="new":f.connected>0?m="connected":f.completed>0&&(m="completed"),m!==this.iceConnectionState){this.iceConnectionState=m;var p=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",p)}},_.prototype._updateConnectionState=function(){var m,f={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(b){b.iceTransport&&b.dtlsTransport&&!b.rejected&&(f[b.iceTransport.state]++,f[b.dtlsTransport.state]++)}),f.connected+=f.completed,m="new",f.failed>0?m="failed":f.connecting>0?m="connecting":f.disconnected>0?m="disconnected":f.new>0?m="new":f.connected>0&&(m="connected"),m!==this.connectionState){this.connectionState=m;var p=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",p)}},_.prototype.createOffer=function(){var m=this;if(m._isClosed)return Promise.reject(l("InvalidStateError","Can not call createOffer after close"));var f=m.transceivers.filter(function(T){return T.kind==="audio"}).length,p=m.transceivers.filter(function(T){return T.kind==="video"}).length,b=arguments[0];if(b){if(b.mandatory||b.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");b.offerToReceiveAudio!==void 0&&(f=b.offerToReceiveAudio===!0?1:b.offerToReceiveAudio===!1?0:b.offerToReceiveAudio),b.offerToReceiveVideo!==void 0&&(p=b.offerToReceiveVideo===!0?1:b.offerToReceiveVideo===!1?0:b.offerToReceiveVideo)}for(m.transceivers.forEach(function(T){T.kind==="audio"?--f<0&&(T.wantReceive=!1):T.kind==="video"&&--p<0&&(T.wantReceive=!1)});f>0||p>0;)f>0&&(m._createTransceiver("audio"),f--),p>0&&(m._createTransceiver("video"),p--);var w=i.writeSessionBoilerplate(m._sdpSessionId,m._sdpSessionVersion++);m.transceivers.forEach(function(T,S){var A=T.track,D=T.kind,k=T.mid||i.generateIdentifier();T.mid=k,T.iceGatherer||(T.iceGatherer=m._createIceGatherer(S,m.usingBundle));var j=d.RTCRtpSender.getCapabilities(D);h<15019&&(j.codecs=j.codecs.filter(function(W){return W.name!=="rtx"})),j.codecs.forEach(function(W){W.name==="H264"&&W.parameters["level-asymmetry-allowed"]===void 0&&(W.parameters["level-asymmetry-allowed"]="1"),T.remoteCapabilities&&T.remoteCapabilities.codecs&&T.remoteCapabilities.codecs.forEach(function(z){W.name.toLowerCase()===z.name.toLowerCase()&&W.clockRate===z.clockRate&&(W.preferredPayloadType=z.payloadType)})}),j.headerExtensions.forEach(function(W){(T.remoteCapabilities&&T.remoteCapabilities.headerExtensions||[]).forEach(function(z){W.uri===z.uri&&(W.id=z.id)})});var F=T.sendEncodingParameters||[{ssrc:1001*(2*S+1)}];A&&h>=15019&&D==="video"&&!F[0].rtx&&(F[0].rtx={ssrc:F[0].ssrc+1}),T.wantReceive&&(T.rtpReceiver=new d.RTCRtpReceiver(T.dtlsTransport,D)),T.localCapabilities=j,T.sendEncodingParameters=F}),m._config.bundlePolicy!=="max-compat"&&(w+="a=group:BUNDLE "+m.transceivers.map(function(T){return T.mid}).join(" ")+`\r
51
51
  `),w+=`a=ice-options:trickle\r
52
52
  `,m.transceivers.forEach(function(T,S){w+=r(T,T.localCapabilities,"offer",T.stream,m._dtlsRole),w+=`a=rtcp-rsize\r
53
53
  `,!T.iceGatherer||m.iceGatheringState==="new"||S!==0&&m.usingBundle||(T.iceGatherer.getLocalCandidates().forEach(function(A){A.component=1,w+="a="+i.writeCandidate(A)+`\r
@@ -75,9 +75,9 @@ a=extmap-allow-mixed`)!==-1){var p=f.sdp.split(`
75
75
  isIOS:`+this.isIOS+`
76
76
  isWebRTCSupported:`+this.isWebRTCSupported()+`
77
77
  isBrowserSupported:`+this.isBrowserSupported()+`
78
- isUnifiedPlanSupported:`+this.isUnifiedPlanSupported()},n}())},{"./adapter":"sXtV"}],BHXf:[function(o,e,t){"use strict";var i=this&&this.__createBinding||(Object.create?function(u,l,d,h){h===void 0&&(h=d),Object.defineProperty(u,h,{enumerable:!0,get:function(){return l[d]}})}:function(u,l,d,h){h===void 0&&(h=d),u[h]=l[d]}),n=this&&this.__setModuleDefault||(Object.create?function(u,l){Object.defineProperty(u,"default",{enumerable:!0,value:l})}:function(u,l){u.default=l}),r=this&&this.__importStar||function(u){if(u&&u.__esModule)return u;var l={};if(u!=null)for(var d in u)d!=="default"&&Object.prototype.hasOwnProperty.call(u,d)&&i(l,u,d);return n(l,u),l};Object.defineProperty(t,"__esModule",{value:!0}),t.util=void 0;var s=r(o("peerjs-js-binarypack")),a=o("./supports"),c={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"turn:0.peerjs.com:3478",username:"peerjs",credential:"peerjsp"}],sdpSemantics:"unified-plan"};t.util=new(function(){function u(){this.CLOUD_HOST="0.peerjs.com",this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=c,this.browser=a.Supports.getBrowser(),this.browserVersion=a.Supports.getVersion(),this.supports=function(){var l,d={browser:a.Supports.isBrowserSupported(),webRTC:a.Supports.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!d.webRTC)return d;try{l=new RTCPeerConnection(c),d.audioVideo=!0;var h=void 0;try{h=l.createDataChannel("_PEERJSTEST",{ordered:!0}),d.data=!0,d.reliable=!!h.ordered;try{h.binaryType="blob",d.binaryBlob=!a.Supports.isIOS}catch{}}catch{}finally{h&&h.close()}}catch{}finally{l&&l.close()}return d}(),this.pack=s.pack,this.unpack=s.unpack,this._dataCount=1}return u.prototype.noop=function(){},u.prototype.validateId=function(l){return!l||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(l)},u.prototype.chunk=function(l){for(var d=[],h=l.size,g=Math.ceil(h/t.util.chunkedMTU),E=0,_=0;_<h;){var x=Math.min(h,_+t.util.chunkedMTU),m=l.slice(_,x),f={__peerData:this._dataCount,n:E,data:m,total:g};d.push(f),_=x,E++}return this._dataCount++,d},u.prototype.blobToArrayBuffer=function(l,d){var h=new FileReader;return h.onload=function(g){g.target&&d(g.target.result)},h.readAsArrayBuffer(l),h},u.prototype.binaryStringToArrayBuffer=function(l){for(var d=new Uint8Array(l.length),h=0;h<l.length;h++)d[h]=255&l.charCodeAt(h);return d.buffer},u.prototype.randomToken=function(){return Math.random().toString(36).substr(2)},u.prototype.isSecure=function(){return location.protocol==="https:"},u}())},{"peerjs-js-binarypack":"kdPp","./supports":"I31f"}],JJlS:[function(o,e,t){"use strict";var i=Object.prototype.hasOwnProperty,n="~";function r(){}function s(l,d,h){this.fn=l,this.context=d,this.once=h||!1}function a(l,d,h,g,E){if(typeof h!="function")throw new TypeError("The listener must be a function");var _=new s(h,g||l,E),x=n?n+d:d;return l._events[x]?l._events[x].fn?l._events[x]=[l._events[x],_]:l._events[x].push(_):(l._events[x]=_,l._eventsCount++),l}function c(l,d){--l._eventsCount==0?l._events=new r:delete l._events[d]}function u(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1)),u.prototype.eventNames=function(){var l,d,h=[];if(this._eventsCount===0)return h;for(d in l=this._events)i.call(l,d)&&h.push(n?d.slice(1):d);return Object.getOwnPropertySymbols?h.concat(Object.getOwnPropertySymbols(l)):h},u.prototype.listeners=function(l){var d=n?n+l:l,h=this._events[d];if(!h)return[];if(h.fn)return[h.fn];for(var g=0,E=h.length,_=new Array(E);g<E;g++)_[g]=h[g].fn;return _},u.prototype.listenerCount=function(l){var d=n?n+l:l,h=this._events[d];return h?h.fn?1:h.length:0},u.prototype.emit=function(l,d,h,g,E,_){var x=n?n+l:l;if(!this._events[x])return!1;var m,f,p=this._events[x],b=arguments.length;if(p.fn){switch(p.once&&this.removeListener(l,p.fn,void 0,!0),b){case 1:return p.fn.call(p.context),!0;case 2:return p.fn.call(p.context,d),!0;case 3:return p.fn.call(p.context,d,h),!0;case 4:return p.fn.call(p.context,d,h,g),!0;case 5:return p.fn.call(p.context,d,h,g,E),!0;case 6:return p.fn.call(p.context,d,h,g,E,_),!0}for(f=1,m=new Array(b-1);f<b;f++)m[f-1]=arguments[f];p.fn.apply(p.context,m)}else{var w,C=p.length;for(f=0;f<C;f++)switch(p[f].once&&this.removeListener(l,p[f].fn,void 0,!0),b){case 1:p[f].fn.call(p[f].context);break;case 2:p[f].fn.call(p[f].context,d);break;case 3:p[f].fn.call(p[f].context,d,h);break;case 4:p[f].fn.call(p[f].context,d,h,g);break;default:if(!m)for(w=1,m=new Array(b-1);w<b;w++)m[w-1]=arguments[w];p[f].fn.apply(p[f].context,m)}}return!0},u.prototype.on=function(l,d,h){return a(this,l,d,h,!1)},u.prototype.once=function(l,d,h){return a(this,l,d,h,!0)},u.prototype.removeListener=function(l,d,h,g){var E=n?n+l:l;if(!this._events[E])return this;if(!d)return c(this,E),this;var _=this._events[E];if(_.fn)_.fn!==d||g&&!_.once||h&&_.context!==h||c(this,E);else{for(var x=0,m=[],f=_.length;x<f;x++)(_[x].fn!==d||g&&!_[x].once||h&&_[x].context!==h)&&m.push(_[x]);m.length?this._events[E]=m.length===1?m[0]:m:c(this,E)}return this},u.prototype.removeAllListeners=function(l){var d;return l?(d=n?n+l:l,this._events[d]&&c(this,d)):(this._events=new r,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=n,u.EventEmitter=u,typeof e<"u"&&(e.exports=u)},{}],WOs9:[function(o,e,t){"use strict";var i=this&&this.__read||function(c,u){var l=typeof Symbol=="function"&&c[Symbol.iterator];if(!l)return c;var d,h,g=l.call(c),E=[];try{for(;(u===void 0||u-- >0)&&!(d=g.next()).done;)E.push(d.value)}catch(_){h={error:_}}finally{try{d&&!d.done&&(l=g.return)&&l.call(g)}finally{if(h)throw h.error}}return E},n=this&&this.__spreadArray||function(c,u){for(var l=0,d=u.length,h=c.length;l<d;l++,h++)c[h]=u[l];return c};Object.defineProperty(t,"__esModule",{value:!0}),t.LogLevel=void 0;var r,s="PeerJS: ";(function(c){c[c.Disabled=0]="Disabled",c[c.Errors=1]="Errors",c[c.Warnings=2]="Warnings",c[c.All=3]="All"})(r=t.LogLevel||(t.LogLevel={}));var a=function(){function c(){this._logLevel=r.Disabled}return Object.defineProperty(c.prototype,"logLevel",{get:function(){return this._logLevel},set:function(u){this._logLevel=u},enumerable:!1,configurable:!0}),c.prototype.log=function(){for(var u=[],l=0;l<arguments.length;l++)u[l]=arguments[l];this._logLevel>=r.All&&this._print.apply(this,n([r.All],i(u)))},c.prototype.warn=function(){for(var u=[],l=0;l<arguments.length;l++)u[l]=arguments[l];this._logLevel>=r.Warnings&&this._print.apply(this,n([r.Warnings],i(u)))},c.prototype.error=function(){for(var u=[],l=0;l<arguments.length;l++)u[l]=arguments[l];this._logLevel>=r.Errors&&this._print.apply(this,n([r.Errors],i(u)))},c.prototype.setLogFunction=function(u){this._print=u},c.prototype._print=function(u){for(var l=[],d=1;d<arguments.length;d++)l[d-1]=arguments[d];var h=n([s],i(l));for(var g in h)h[g]instanceof Error&&(h[g]="("+h[g].name+") "+h[g].message);u>=r.All?console.log.apply(console,n([],i(h))):u>=r.Warnings?console.warn.apply(console,n(["WARNING"],i(h))):u>=r.Errors&&console.error.apply(console,n(["ERROR"],i(h)))},c}();t.default=new a},{}],ZRYf:[function(o,e,t){"use strict";var i,n,r,s,a,c,u;Object.defineProperty(t,"__esModule",{value:!0}),t.ServerMessageType=t.SocketEventType=t.SerializationType=t.PeerErrorType=t.PeerEventType=t.ConnectionType=t.ConnectionEventType=void 0,function(l){l.Open="open",l.Stream="stream",l.Data="data",l.Close="close",l.Error="error",l.IceStateChanged="iceStateChanged"}(i=t.ConnectionEventType||(t.ConnectionEventType={})),function(l){l.Data="data",l.Media="media"}(n=t.ConnectionType||(t.ConnectionType={})),function(l){l.Open="open",l.Close="close",l.Connection="connection",l.Call="call",l.Disconnected="disconnected",l.Error="error"}(r=t.PeerEventType||(t.PeerEventType={})),function(l){l.BrowserIncompatible="browser-incompatible",l.Disconnected="disconnected",l.InvalidID="invalid-id",l.InvalidKey="invalid-key",l.Network="network",l.PeerUnavailable="peer-unavailable",l.SslUnavailable="ssl-unavailable",l.ServerError="server-error",l.SocketError="socket-error",l.SocketClosed="socket-closed",l.UnavailableID="unavailable-id",l.WebRTC="webrtc"}(s=t.PeerErrorType||(t.PeerErrorType={})),function(l){l.Binary="binary",l.BinaryUTF8="binary-utf8",l.JSON="json"}(a=t.SerializationType||(t.SerializationType={})),function(l){l.Message="message",l.Disconnected="disconnected",l.Error="error",l.Close="close"}(c=t.SocketEventType||(t.SocketEventType={})),function(l){l.Heartbeat="HEARTBEAT",l.Candidate="CANDIDATE",l.Offer="OFFER",l.Answer="ANSWER",l.Open="OPEN",l.Error="ERROR",l.IdTaken="ID-TAKEN",l.InvalidKey="INVALID-KEY",l.Leave="LEAVE",l.Expire="EXPIRE"}(u=t.ServerMessageType||(t.ServerMessageType={}))},{}],wJlv:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var h=function(g,E){return(h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(_,x){_.__proto__=x}||function(_,x){for(var m in x)Object.prototype.hasOwnProperty.call(x,m)&&(_[m]=x[m])})(g,E)};return function(g,E){if(typeof E!="function"&&E!==null)throw new TypeError("Class extends value "+String(E)+" is not a constructor or null");function _(){this.constructor=g}h(g,E),g.prototype=E===null?Object.create(E):(_.prototype=E.prototype,new _)}}(),n=this&&this.__read||function(h,g){var E=typeof Symbol=="function"&&h[Symbol.iterator];if(!E)return h;var _,x,m=E.call(h),f=[];try{for(;(g===void 0||g-- >0)&&!(_=m.next()).done;)f.push(_.value)}catch(p){x={error:p}}finally{try{_&&!_.done&&(E=m.return)&&E.call(m)}finally{if(x)throw x.error}}return f},r=this&&this.__spreadArray||function(h,g){for(var E=0,_=g.length,x=h.length;E<_;E++,x++)h[x]=g[E];return h},s=this&&this.__values||function(h){var g=typeof Symbol=="function"&&Symbol.iterator,E=g&&h[g],_=0;if(E)return E.call(h);if(h&&typeof h.length=="number")return{next:function(){return h&&_>=h.length&&(h=void 0),{value:h&&h[_++],done:!h}}};throw new TypeError(g?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(h){return h&&h.__esModule?h:{default:h}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;var c=o("eventemitter3"),u=a(o("./logger")),l=o("./enums"),d=function(h){function g(E,_,x,m,f,p){p===void 0&&(p=5e3);var b=h.call(this)||this;b.pingInterval=p,b._disconnected=!0,b._messagesQueue=[];var w=E?"wss://":"ws://";return b._baseUrl=w+_+":"+x+m+"peerjs?key="+f,b}return i(g,h),g.prototype.start=function(E,_){var x=this;this._id=E;var m=this._baseUrl+"&id="+E+"&token="+_;!this._socket&&this._disconnected&&(this._socket=new WebSocket(m),this._disconnected=!1,this._socket.onmessage=function(f){var p;try{p=JSON.parse(f.data),u.default.log("Server message received:",p)}catch{return void u.default.log("Invalid server message",f.data)}x.emit(l.SocketEventType.Message,p)},this._socket.onclose=function(f){x._disconnected||(u.default.log("Socket closed.",f),x._cleanup(),x._disconnected=!0,x.emit(l.SocketEventType.Disconnected))},this._socket.onopen=function(){x._disconnected||(x._sendQueuedMessages(),u.default.log("Socket open"),x._scheduleHeartbeat())})},g.prototype._scheduleHeartbeat=function(){var E=this;this._wsPingTimer=setTimeout(function(){E._sendHeartbeat()},this.pingInterval)},g.prototype._sendHeartbeat=function(){if(this._wsOpen()){var E=JSON.stringify({type:l.ServerMessageType.Heartbeat});this._socket.send(E),this._scheduleHeartbeat()}else u.default.log("Cannot send heartbeat, because socket closed")},g.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},g.prototype._sendQueuedMessages=function(){var E,_,x=r([],n(this._messagesQueue));this._messagesQueue=[];try{for(var m=s(x),f=m.next();!f.done;f=m.next()){var p=f.value;this.send(p)}}catch(b){E={error:b}}finally{try{f&&!f.done&&(_=m.return)&&_.call(m)}finally{if(E)throw E.error}}},g.prototype.send=function(E){if(!this._disconnected)if(this._id)if(E.type){if(this._wsOpen()){var _=JSON.stringify(E);this._socket.send(_)}}else this.emit(l.SocketEventType.Error,"Invalid message");else this._messagesQueue.push(E)},g.prototype.close=function(){this._disconnected||(this._cleanup(),this._disconnected=!0)},g.prototype._cleanup=function(){this._socket&&(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),this._socket=void 0),clearTimeout(this._wsPingTimer)},g}(c.EventEmitter);t.Socket=d},{eventemitter3:"JJlS","./logger":"WOs9","./enums":"ZRYf"}],HCdX:[function(o,e,t){"use strict";var i=this&&this.__assign||function(){return(i=Object.assign||function(d){for(var h,g=1,E=arguments.length;g<E;g++)for(var _ in h=arguments[g])Object.prototype.hasOwnProperty.call(h,_)&&(d[_]=h[_]);return d}).apply(this,arguments)},n=this&&this.__awaiter||function(d,h,g,E){return new(g||(g=Promise))(function(_,x){function m(b){try{p(E.next(b))}catch(w){x(w)}}function f(b){try{p(E.throw(b))}catch(w){x(w)}}function p(b){var w;b.done?_(b.value):(w=b.value,w instanceof g?w:new g(function(C){C(w)})).then(m,f)}p((E=E.apply(d,h||[])).next())})},r=this&&this.__generator||function(d,h){var g,E,_,x,m={label:0,sent:function(){if(1&_[0])throw _[1];return _[1]},trys:[],ops:[]};return x={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(x[Symbol.iterator]=function(){return this}),x;function f(p){return function(b){return function(w){if(g)throw new TypeError("Generator is already executing.");for(;m;)try{if(g=1,E&&(_=2&w[0]?E.return:w[0]?E.throw||((_=E.return)&&_.call(E),0):E.next)&&!(_=_.call(E,w[1])).done)return _;switch(E=0,_&&(w=[2&w[0],_.value]),w[0]){case 0:case 1:_=w;break;case 4:return m.label++,{value:w[1],done:!1};case 5:m.label++,E=w[1],w=[0];continue;case 7:w=m.ops.pop(),m.trys.pop();continue;default:if(!(_=(_=m.trys).length>0&&_[_.length-1])&&(w[0]===6||w[0]===2)){m=0;continue}if(w[0]===3&&(!_||w[1]>_[0]&&w[1]<_[3])){m.label=w[1];break}if(w[0]===6&&m.label<_[1]){m.label=_[1],_=w;break}if(_&&m.label<_[2]){m.label=_[2],m.ops.push(w);break}_[2]&&m.ops.pop(),m.trys.pop();continue}w=h.call(d,m)}catch(C){w=[6,C],E=0}finally{g=_=0}if(5&w[0])throw w[1];return{value:w[0]?w[1]:void 0,done:!0}}([p,b])}}},s=this&&this.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(t,"__esModule",{value:!0}),t.Negotiator=void 0;var a=o("./util"),c=s(o("./logger")),u=o("./enums"),l=function(){function d(h){this.connection=h}return d.prototype.startConnection=function(h){var g=this._startPeerConnection();if(this.connection.peerConnection=g,this.connection.type===u.ConnectionType.Media&&h._stream&&this._addTracksToConnection(h._stream,g),h.originator){if(this.connection.type===u.ConnectionType.Data){var E=this.connection,_={ordered:!!h.reliable},x=g.createDataChannel(E.label,_);E.initialize(x)}this._makeOffer()}else this.handleSDP("OFFER",h.sdp)},d.prototype._startPeerConnection=function(){c.default.log("Creating RTCPeerConnection.");var h=new RTCPeerConnection(this.connection.provider.options.config);return this._setupListeners(h),h},d.prototype._setupListeners=function(h){var g=this,E=this.connection.peer,_=this.connection.connectionId,x=this.connection.type,m=this.connection.provider;c.default.log("Listening for ICE candidates."),h.onicecandidate=function(f){f.candidate&&f.candidate.candidate&&(c.default.log("Received ICE candidates for "+E+":",f.candidate),m.socket.send({type:u.ServerMessageType.Candidate,payload:{candidate:f.candidate,type:x,connectionId:_},dst:E}))},h.oniceconnectionstatechange=function(){switch(h.iceConnectionState){case"failed":c.default.log("iceConnectionState is failed, closing connections to "+E),g.connection.emit(u.ConnectionEventType.Error,new Error("Negotiation of connection to "+E+" failed.")),g.connection.close();break;case"closed":c.default.log("iceConnectionState is closed, closing connections to "+E),g.connection.emit(u.ConnectionEventType.Error,new Error("Connection to "+E+" closed.")),g.connection.close();break;case"disconnected":c.default.log("iceConnectionState changed to disconnected on the connection with "+E);break;case"completed":h.onicecandidate=a.util.noop}g.connection.emit(u.ConnectionEventType.IceStateChanged,h.iceConnectionState)},c.default.log("Listening for data channel"),h.ondatachannel=function(f){c.default.log("Received data channel");var p=f.channel;m.getConnection(E,_).initialize(p)},c.default.log("Listening for remote stream"),h.ontrack=function(f){c.default.log("Received remote stream");var p=f.streams[0],b=m.getConnection(E,_);if(b.type===u.ConnectionType.Media){var w=b;g._addStreamToMediaConnection(p,w)}}},d.prototype.cleanup=function(){c.default.log("Cleaning up PeerConnection to "+this.connection.peer);var h=this.connection.peerConnection;if(h){this.connection.peerConnection=null,h.onicecandidate=h.oniceconnectionstatechange=h.ondatachannel=h.ontrack=function(){};var g=h.signalingState!=="closed",E=!1;if(this.connection.type===u.ConnectionType.Data){var _=this.connection.dataChannel;_&&(E=!!_.readyState&&_.readyState!=="closed")}(g||E)&&h.close()}},d.prototype._makeOffer=function(){return n(this,void 0,Promise,function(){var h,g,E,_,x,m,f;return r(this,function(p){switch(p.label){case 0:h=this.connection.peerConnection,g=this.connection.provider,p.label=1;case 1:return p.trys.push([1,7,,8]),[4,h.createOffer(this.connection.options.constraints)];case 2:E=p.sent(),c.default.log("Created offer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(E.sdp=this.connection.options.sdpTransform(E.sdp)||E.sdp),p.label=3;case 3:return p.trys.push([3,5,,6]),[4,h.setLocalDescription(E)];case 4:return p.sent(),c.default.log("Set localDescription:",E,"for:"+this.connection.peer),_={sdp:E,type:this.connection.type,connectionId:this.connection.connectionId,metadata:this.connection.metadata,browser:a.util.browser},this.connection.type===u.ConnectionType.Data&&(x=this.connection,_=i(i({},_),{label:x.label,reliable:x.reliable,serialization:x.serialization})),g.socket.send({type:u.ServerMessageType.Offer,payload:_,dst:this.connection.peer}),[3,6];case 5:return(m=p.sent())!="OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer"&&(g.emitError(u.PeerErrorType.WebRTC,m),c.default.log("Failed to setLocalDescription, ",m)),[3,6];case 6:return[3,8];case 7:return f=p.sent(),g.emitError(u.PeerErrorType.WebRTC,f),c.default.log("Failed to createOffer, ",f),[3,8];case 8:return[2]}})})},d.prototype._makeAnswer=function(){return n(this,void 0,Promise,function(){var h,g,E,_,x;return r(this,function(m){switch(m.label){case 0:h=this.connection.peerConnection,g=this.connection.provider,m.label=1;case 1:return m.trys.push([1,7,,8]),[4,h.createAnswer()];case 2:E=m.sent(),c.default.log("Created answer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(E.sdp=this.connection.options.sdpTransform(E.sdp)||E.sdp),m.label=3;case 3:return m.trys.push([3,5,,6]),[4,h.setLocalDescription(E)];case 4:return m.sent(),c.default.log("Set localDescription:",E,"for:"+this.connection.peer),g.socket.send({type:u.ServerMessageType.Answer,payload:{sdp:E,type:this.connection.type,connectionId:this.connection.connectionId,browser:a.util.browser},dst:this.connection.peer}),[3,6];case 5:return _=m.sent(),g.emitError(u.PeerErrorType.WebRTC,_),c.default.log("Failed to setLocalDescription, ",_),[3,6];case 6:return[3,8];case 7:return x=m.sent(),g.emitError(u.PeerErrorType.WebRTC,x),c.default.log("Failed to create answer, ",x),[3,8];case 8:return[2]}})})},d.prototype.handleSDP=function(h,g){return n(this,void 0,Promise,function(){var E,_,x,m;return r(this,function(f){switch(f.label){case 0:g=new RTCSessionDescription(g),E=this.connection.peerConnection,_=this.connection.provider,c.default.log("Setting remote description",g),x=this,f.label=1;case 1:return f.trys.push([1,5,,6]),[4,E.setRemoteDescription(g)];case 2:return f.sent(),c.default.log("Set remoteDescription:"+h+" for:"+this.connection.peer),h!=="OFFER"?[3,4]:[4,x._makeAnswer()];case 3:f.sent(),f.label=4;case 4:return[3,6];case 5:return m=f.sent(),_.emitError(u.PeerErrorType.WebRTC,m),c.default.log("Failed to setRemoteDescription, ",m),[3,6];case 6:return[2]}})})},d.prototype.handleCandidate=function(h){return n(this,void 0,Promise,function(){var g,E,_,x,m,f;return r(this,function(p){switch(p.label){case 0:c.default.log("handleCandidate:",h),g=h.candidate,E=h.sdpMLineIndex,_=h.sdpMid,x=this.connection.peerConnection,m=this.connection.provider,p.label=1;case 1:return p.trys.push([1,3,,4]),[4,x.addIceCandidate(new RTCIceCandidate({sdpMid:_,sdpMLineIndex:E,candidate:g}))];case 2:return p.sent(),c.default.log("Added ICE candidate for:"+this.connection.peer),[3,4];case 3:return f=p.sent(),m.emitError(u.PeerErrorType.WebRTC,f),c.default.log("Failed to handleCandidate, ",f),[3,4];case 4:return[2]}})})},d.prototype._addTracksToConnection=function(h,g){if(c.default.log("add tracks from stream "+h.id+" to peer connection"),!g.addTrack)return c.default.error("Your browser does't support RTCPeerConnection#addTrack. Ignored.");h.getTracks().forEach(function(E){g.addTrack(E,h)})},d.prototype._addStreamToMediaConnection=function(h,g){c.default.log("add stream "+h.id+" to media connection "+g.connectionId),g.addStream(h)},d}();t.Negotiator=l},{"./util":"BHXf","./logger":"WOs9","./enums":"ZRYf"}],tQFK:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var s=function(a,c){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,l){u.__proto__=l}||function(u,l){for(var d in l)Object.prototype.hasOwnProperty.call(l,d)&&(u[d]=l[d])})(a,c)};return function(a,c){if(typeof c!="function"&&c!==null)throw new TypeError("Class extends value "+String(c)+" is not a constructor or null");function u(){this.constructor=a}s(a,c),a.prototype=c===null?Object.create(c):(u.prototype=c.prototype,new u)}}();Object.defineProperty(t,"__esModule",{value:!0}),t.BaseConnection=void 0;var n=o("eventemitter3"),r=function(s){function a(c,u,l){var d=s.call(this)||this;return d.peer=c,d.provider=u,d.options=l,d._open=!1,d.metadata=l.metadata,d}return i(a,s),Object.defineProperty(a.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),a}(n.EventEmitter);t.BaseConnection=r},{eventemitter3:"JJlS"}],dbHP:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var g=function(E,_){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,m){x.__proto__=m}||function(x,m){for(var f in m)Object.prototype.hasOwnProperty.call(m,f)&&(x[f]=m[f])})(E,_)};return function(E,_){if(typeof _!="function"&&_!==null)throw new TypeError("Class extends value "+String(_)+" is not a constructor or null");function x(){this.constructor=E}g(E,_),E.prototype=_===null?Object.create(_):(x.prototype=_.prototype,new x)}}(),n=this&&this.__assign||function(){return(n=Object.assign||function(g){for(var E,_=1,x=arguments.length;_<x;_++)for(var m in E=arguments[_])Object.prototype.hasOwnProperty.call(E,m)&&(g[m]=E[m]);return g}).apply(this,arguments)},r=this&&this.__values||function(g){var E=typeof Symbol=="function"&&Symbol.iterator,_=E&&g[E],x=0;if(_)return _.call(g);if(g&&typeof g.length=="number")return{next:function(){return g&&x>=g.length&&(g=void 0),{value:g&&g[x++],done:!g}}};throw new TypeError(E?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__importDefault||function(g){return g&&g.__esModule?g:{default:g}};Object.defineProperty(t,"__esModule",{value:!0}),t.MediaConnection=void 0;var a=o("./util"),c=s(o("./logger")),u=o("./negotiator"),l=o("./enums"),d=o("./baseconnection"),h=function(g){function E(_,x,m){var f=g.call(this,_,x,m)||this;return f._localStream=f.options._stream,f.connectionId=f.options.connectionId||E.ID_PREFIX+a.util.randomToken(),f._negotiator=new u.Negotiator(f),f._localStream&&f._negotiator.startConnection({_stream:f._localStream,originator:!0}),f}return i(E,g),Object.defineProperty(E.prototype,"type",{get:function(){return l.ConnectionType.Media},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"localStream",{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"remoteStream",{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),E.prototype.addStream=function(_){c.default.log("Receiving stream",_),this._remoteStream=_,g.prototype.emit.call(this,l.ConnectionEventType.Stream,_)},E.prototype.handleMessage=function(_){var x=_.type,m=_.payload;switch(_.type){case l.ServerMessageType.Answer:this._negotiator.handleSDP(x,m.sdp),this._open=!0;break;case l.ServerMessageType.Candidate:this._negotiator.handleCandidate(m.candidate);break;default:c.default.warn("Unrecognized message type:"+x+" from peer:"+this.peer)}},E.prototype.answer=function(_,x){var m,f;if(x===void 0&&(x={}),this._localStream)c.default.warn("Local stream already exists on this MediaConnection. Are you answering a call twice?");else{this._localStream=_,x&&x.sdpTransform&&(this.options.sdpTransform=x.sdpTransform),this._negotiator.startConnection(n(n({},this.options._payload),{_stream:_}));var p=this.provider._getMessages(this.connectionId);try{for(var b=r(p),w=b.next();!w.done;w=b.next()){var C=w.value;this.handleMessage(C)}}catch(T){m={error:T}}finally{try{w&&!w.done&&(f=b.return)&&f.call(b)}finally{if(m)throw m.error}}this._open=!0}},E.prototype.close=function(){this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this._localStream=null,this._remoteStream=null,this.provider&&(this.provider._removeConnection(this),this.provider=null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,g.prototype.emit.call(this,l.ConnectionEventType.Close))},E.ID_PREFIX="mc_",E}(d.BaseConnection);t.MediaConnection=h},{"./util":"BHXf","./logger":"WOs9","./negotiator":"HCdX","./enums":"ZRYf","./baseconnection":"tQFK"}],GGp6:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var c=function(u,l){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,h){d.__proto__=h}||function(d,h){for(var g in h)Object.prototype.hasOwnProperty.call(h,g)&&(d[g]=h[g])})(u,l)};return function(u,l){if(typeof l!="function"&&l!==null)throw new TypeError("Class extends value "+String(l)+" is not a constructor or null");function d(){this.constructor=u}c(u,l),u.prototype=l===null?Object.create(l):(d.prototype=l.prototype,new d)}}(),n=this&&this.__importDefault||function(c){return c&&c.__esModule?c:{default:c}};Object.defineProperty(t,"__esModule",{value:!0}),t.EncodingQueue=void 0;var r=o("eventemitter3"),s=n(o("./logger")),a=function(c){function u(){var l=c.call(this)||this;return l.fileReader=new FileReader,l._queue=[],l._processing=!1,l.fileReader.onload=function(d){l._processing=!1,d.target&&l.emit("done",d.target.result),l.doNextTask()},l.fileReader.onerror=function(d){s.default.error("EncodingQueue error:",d),l._processing=!1,l.destroy(),l.emit("error",d)},l}return i(u,c),Object.defineProperty(u.prototype,"queue",{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(u.prototype,"size",{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(u.prototype,"processing",{get:function(){return this._processing},enumerable:!1,configurable:!0}),u.prototype.enque=function(l){this.queue.push(l),this.processing||this.doNextTask()},u.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},u.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},u}(r.EventEmitter);t.EncodingQueue=a},{eventemitter3:"JJlS","./logger":"WOs9"}],GBTQ:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var g=function(E,_){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,m){x.__proto__=m}||function(x,m){for(var f in m)Object.prototype.hasOwnProperty.call(m,f)&&(x[f]=m[f])})(E,_)};return function(E,_){if(typeof _!="function"&&_!==null)throw new TypeError("Class extends value "+String(_)+" is not a constructor or null");function x(){this.constructor=E}g(E,_),E.prototype=_===null?Object.create(_):(x.prototype=_.prototype,new x)}}(),n=this&&this.__values||function(g){var E=typeof Symbol=="function"&&Symbol.iterator,_=E&&g[E],x=0;if(_)return _.call(g);if(g&&typeof g.length=="number")return{next:function(){return g&&x>=g.length&&(g=void 0),{value:g&&g[x++],done:!g}}};throw new TypeError(E?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__importDefault||function(g){return g&&g.__esModule?g:{default:g}};Object.defineProperty(t,"__esModule",{value:!0}),t.DataConnection=void 0;var s=o("./util"),a=r(o("./logger")),c=o("./negotiator"),u=o("./enums"),l=o("./baseconnection"),d=o("./encodingQueue"),h=function(g){function E(_,x,m){var f=g.call(this,_,x,m)||this;return f.stringify=JSON.stringify,f.parse=JSON.parse,f._buffer=[],f._bufferSize=0,f._buffering=!1,f._chunkedData={},f._encodingQueue=new d.EncodingQueue,f.connectionId=f.options.connectionId||E.ID_PREFIX+s.util.randomToken(),f.label=f.options.label||f.connectionId,f.serialization=f.options.serialization||u.SerializationType.Binary,f.reliable=!!f.options.reliable,f._encodingQueue.on("done",function(p){f._bufferedSend(p)}),f._encodingQueue.on("error",function(){a.default.error("DC#"+f.connectionId+": Error occured in encoding from blob to arraybuffer, close DC"),f.close()}),f._negotiator=new c.Negotiator(f),f._negotiator.startConnection(f.options._payload||{originator:!0}),f}return i(E,g),Object.defineProperty(E.prototype,"type",{get:function(){return u.ConnectionType.Data},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"dataChannel",{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"bufferSize",{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),E.prototype.initialize=function(_){this._dc=_,this._configureDataChannel()},E.prototype._configureDataChannel=function(){var _=this;s.util.supports.binaryBlob&&!s.util.supports.reliable||(this.dataChannel.binaryType="arraybuffer"),this.dataChannel.onopen=function(){a.default.log("DC#"+_.connectionId+" dc connection success"),_._open=!0,_.emit(u.ConnectionEventType.Open)},this.dataChannel.onmessage=function(x){a.default.log("DC#"+_.connectionId+" dc onmessage:",x.data),_._handleDataMessage(x)},this.dataChannel.onclose=function(){a.default.log("DC#"+_.connectionId+" dc closed for:",_.peer),_.close()}},E.prototype._handleDataMessage=function(_){var x=this,m=_.data,f=m.constructor,p=m;if(this.serialization===u.SerializationType.Binary||this.serialization===u.SerializationType.BinaryUTF8){if(f===Blob)return void s.util.blobToArrayBuffer(m,function(w){var C=s.util.unpack(w);x.emit(u.ConnectionEventType.Data,C)});if(f===ArrayBuffer)p=s.util.unpack(m);else if(f===String){var b=s.util.binaryStringToArrayBuffer(m);p=s.util.unpack(b)}}else this.serialization===u.SerializationType.JSON&&(p=this.parse(m));p.__peerData?this._handleChunk(p):g.prototype.emit.call(this,u.ConnectionEventType.Data,p)},E.prototype._handleChunk=function(_){var x=_.__peerData,m=this._chunkedData[x]||{data:[],count:0,total:_.total};if(m.data[_.n]=_.data,m.count++,this._chunkedData[x]=m,m.total===m.count){delete this._chunkedData[x];var f=new Blob(m.data);this._handleDataMessage({data:f})}},E.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this.provider&&(this.provider._removeConnection(this),this.provider=null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),this._encodingQueue=null),this.open&&(this._open=!1,g.prototype.emit.call(this,u.ConnectionEventType.Close))},E.prototype.send=function(_,x){if(this.open)if(this.serialization===u.SerializationType.JSON)this._bufferedSend(this.stringify(_));else if(this.serialization===u.SerializationType.Binary||this.serialization===u.SerializationType.BinaryUTF8){var m=s.util.pack(_);if(!x&&m.size>s.util.chunkedMTU)return void this._sendChunks(m);s.util.supports.binaryBlob?this._bufferedSend(m):this._encodingQueue.enque(m)}else this._bufferedSend(_);else g.prototype.emit.call(this,u.ConnectionEventType.Error,new Error("Connection is not open. You should listen for the `open` event before sending messages."))},E.prototype._bufferedSend=function(_){!this._buffering&&this._trySend(_)||(this._buffer.push(_),this._bufferSize=this._buffer.length)},E.prototype._trySend=function(_){var x=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>E.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){x._buffering=!1,x._tryBuffer()},50),!1;try{this.dataChannel.send(_)}catch(m){return a.default.error("DC#:"+this.connectionId+" Error when sending:",m),this._buffering=!0,this.close(),!1}return!0},E.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var _=this._buffer[0];this._trySend(_)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},E.prototype._sendChunks=function(_){var x,m,f=s.util.chunk(_);a.default.log("DC#"+this.connectionId+" Try to send "+f.length+" chunks...");try{for(var p=n(f),b=p.next();!b.done;b=p.next()){var w=b.value;this.send(w,!0)}}catch(C){x={error:C}}finally{try{b&&!b.done&&(m=p.return)&&m.call(p)}finally{if(x)throw x.error}}},E.prototype.handleMessage=function(_){var x=_.payload;switch(_.type){case u.ServerMessageType.Answer:this._negotiator.handleSDP(_.type,x.sdp);break;case u.ServerMessageType.Candidate:this._negotiator.handleCandidate(x.candidate);break;default:a.default.warn("Unrecognized message type:",_.type,"from peer:",this.peer)}},E.ID_PREFIX="dc_",E.MAX_BUFFERED_AMOUNT=8388608,E}(l.BaseConnection);t.DataConnection=h},{"./util":"BHXf","./logger":"WOs9","./negotiator":"HCdX","./enums":"ZRYf","./baseconnection":"tQFK","./encodingQueue":"GGp6"}],in7L:[function(o,e,t){"use strict";var i=this&&this.__awaiter||function(u,l,d,h){return new(d||(d=Promise))(function(g,E){function _(f){try{m(h.next(f))}catch(p){E(p)}}function x(f){try{m(h.throw(f))}catch(p){E(p)}}function m(f){var p;f.done?g(f.value):(p=f.value,p instanceof d?p:new d(function(b){b(p)})).then(_,x)}m((h=h.apply(u,l||[])).next())})},n=this&&this.__generator||function(u,l){var d,h,g,E,_={label:0,sent:function(){if(1&g[0])throw g[1];return g[1]},trys:[],ops:[]};return E={next:x(0),throw:x(1),return:x(2)},typeof Symbol=="function"&&(E[Symbol.iterator]=function(){return this}),E;function x(m){return function(f){return function(p){if(d)throw new TypeError("Generator is already executing.");for(;_;)try{if(d=1,h&&(g=2&p[0]?h.return:p[0]?h.throw||((g=h.return)&&g.call(h),0):h.next)&&!(g=g.call(h,p[1])).done)return g;switch(h=0,g&&(p=[2&p[0],g.value]),p[0]){case 0:case 1:g=p;break;case 4:return _.label++,{value:p[1],done:!1};case 5:_.label++,h=p[1],p=[0];continue;case 7:p=_.ops.pop(),_.trys.pop();continue;default:if(!(g=(g=_.trys).length>0&&g[g.length-1])&&(p[0]===6||p[0]===2)){_=0;continue}if(p[0]===3&&(!g||p[1]>g[0]&&p[1]<g[3])){_.label=p[1];break}if(p[0]===6&&_.label<g[1]){_.label=g[1],g=p;break}if(g&&_.label<g[2]){_.label=g[2],_.ops.push(p);break}g[2]&&_.ops.pop(),_.trys.pop();continue}p=l.call(u,_)}catch(b){p=[6,b],h=0}finally{d=g=0}if(5&p[0])throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}([m,f])}}},r=this&&this.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(t,"__esModule",{value:!0}),t.API=void 0;var s=o("./util"),a=r(o("./logger")),c=function(){function u(l){this._options=l}return u.prototype._buildUrl=function(l){var d=(this._options.secure?"https://":"http://")+this._options.host+":"+this._options.port+this._options.path+this._options.key+"/"+l;return d+="?ts="+new Date().getTime()+Math.random()},u.prototype.retrieveId=function(){return i(this,void 0,Promise,function(){var l,d,h,g;return n(this,function(E){switch(E.label){case 0:l=this._buildUrl("id"),E.label=1;case 1:return E.trys.push([1,3,,4]),[4,fetch(l)];case 2:if((d=E.sent()).status!==200)throw new Error("Error. Status:"+d.status);return[2,d.text()];case 3:throw h=E.sent(),a.default.error("Error retrieving ID",h),g="",this._options.path==="/"&&this._options.host!==s.util.CLOUD_HOST&&(g=" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),new Error("Could not get an ID from the server."+g);case 4:return[2]}})})},u.prototype.listAllPeers=function(){return i(this,void 0,Promise,function(){var l,d,h,g;return n(this,function(E){switch(E.label){case 0:l=this._buildUrl("peers"),E.label=1;case 1:return E.trys.push([1,3,,4]),[4,fetch(l)];case 2:if((d=E.sent()).status!==200)throw d.status===401?(h="",h=this._options.host===s.util.CLOUD_HOST?"It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key.":"You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature.",new Error("It doesn't look like you have permission to list peers IDs. "+h)):new Error("Error. Status:"+d.status);return[2,d.json()];case 3:throw g=E.sent(),a.default.error("Error retrieving list peers",g),new Error("Could not get list peers from the server."+g);case 4:return[2]}})})},u}();t.API=c},{"./util":"BHXf","./logger":"WOs9"}],Hxpd:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var f=function(p,b){return(f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(w,C){w.__proto__=C}||function(w,C){for(var T in C)Object.prototype.hasOwnProperty.call(C,T)&&(w[T]=C[T])})(p,b)};return function(p,b){if(typeof b!="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");function w(){this.constructor=p}f(p,b),p.prototype=b===null?Object.create(b):(w.prototype=b.prototype,new w)}}(),n=this&&this.__assign||function(){return(n=Object.assign||function(f){for(var p,b=1,w=arguments.length;b<w;b++)for(var C in p=arguments[b])Object.prototype.hasOwnProperty.call(p,C)&&(f[C]=p[C]);return f}).apply(this,arguments)},r=this&&this.__values||function(f){var p=typeof Symbol=="function"&&Symbol.iterator,b=p&&f[p],w=0;if(b)return b.call(f);if(f&&typeof f.length=="number")return{next:function(){return f&&w>=f.length&&(f=void 0),{value:f&&f[w++],done:!f}}};throw new TypeError(p?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(f,p){var b=typeof Symbol=="function"&&f[Symbol.iterator];if(!b)return f;var w,C,T=b.call(f),S=[];try{for(;(p===void 0||p-- >0)&&!(w=T.next()).done;)S.push(w.value)}catch(A){C={error:A}}finally{try{w&&!w.done&&(b=T.return)&&b.call(T)}finally{if(C)throw C.error}}return S},a=this&&this.__importDefault||function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(t,"__esModule",{value:!0}),t.Peer=void 0;var c=o("eventemitter3"),u=o("./util"),l=a(o("./logger")),d=o("./socket"),h=o("./mediaconnection"),g=o("./dataconnection"),E=o("./enums"),_=o("./api"),x=function(){return function(){}}(),m=function(f){function p(b,w){var C,T=f.call(this)||this;return T._id=null,T._lastServerId=null,T._destroyed=!1,T._disconnected=!1,T._open=!1,T._connections=new Map,T._lostMessages=new Map,b&&b.constructor==Object?w=b:b&&(C=b.toString()),w=n({debug:0,host:u.util.CLOUD_HOST,port:u.util.CLOUD_PORT,path:"/",key:p.DEFAULT_KEY,token:u.util.randomToken(),config:u.util.defaultConfig},w),T._options=w,T._options.host==="/"&&(T._options.host=window.location.hostname),T._options.path&&(T._options.path[0]!=="/"&&(T._options.path="/"+T._options.path),T._options.path[T._options.path.length-1]!=="/"&&(T._options.path+="/")),T._options.secure===void 0&&T._options.host!==u.util.CLOUD_HOST?T._options.secure=u.util.isSecure():T._options.host==u.util.CLOUD_HOST&&(T._options.secure=!0),T._options.logFunction&&l.default.setLogFunction(T._options.logFunction),l.default.logLevel=T._options.debug||0,T._api=new _.API(w),T._socket=T._createServerConnection(),u.util.supports.audioVideo||u.util.supports.data?C&&!u.util.validateId(C)?(T._delayedAbort(E.PeerErrorType.InvalidID,'ID "'+C+'" is invalid'),T):(C?T._initialize(C):T._api.retrieveId().then(function(S){return T._initialize(S)}).catch(function(S){return T._abort(E.PeerErrorType.ServerError,S)}),T):(T._delayedAbort(E.PeerErrorType.BrowserIncompatible,"The current browser does not support WebRTC"),T)}return i(p,f),Object.defineProperty(p.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"socket",{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"connections",{get:function(){var b,w,C=Object.create(null);try{for(var T=r(this._connections),S=T.next();!S.done;S=T.next()){var A=s(S.value,2),D=A[0],k=A[1];C[D]=k}}catch(j){b={error:j}}finally{try{S&&!S.done&&(w=T.return)&&w.call(T)}finally{if(b)throw b.error}}return C},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"disconnected",{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),p.prototype._createServerConnection=function(){var b=this,w=new d.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return w.on(E.SocketEventType.Message,function(C){b._handleMessage(C)}),w.on(E.SocketEventType.Error,function(C){b._abort(E.PeerErrorType.SocketError,C)}),w.on(E.SocketEventType.Disconnected,function(){b.disconnected||(b.emitError(E.PeerErrorType.Network,"Lost connection to server."),b.disconnect())}),w.on(E.SocketEventType.Close,function(){b.disconnected||b._abort(E.PeerErrorType.SocketClosed,"Underlying socket is already closed.")}),w},p.prototype._initialize=function(b){this._id=b,this.socket.start(b,this._options.token)},p.prototype._handleMessage=function(b){var w,C,T=b.type,S=b.payload,A=b.src;switch(T){case E.ServerMessageType.Open:this._lastServerId=this.id,this._open=!0,this.emit(E.PeerEventType.Open,this.id);break;case E.ServerMessageType.Error:this._abort(E.PeerErrorType.ServerError,S.msg);break;case E.ServerMessageType.IdTaken:this._abort(E.PeerErrorType.UnavailableID,'ID "'+this.id+'" is taken');break;case E.ServerMessageType.InvalidKey:this._abort(E.PeerErrorType.InvalidKey,'API KEY "'+this._options.key+'" is invalid');break;case E.ServerMessageType.Leave:l.default.log("Received leave message from "+A),this._cleanupPeer(A),this._connections.delete(A);break;case E.ServerMessageType.Expire:this.emitError(E.PeerErrorType.PeerUnavailable,"Could not connect to peer "+A);break;case E.ServerMessageType.Offer:var D=S.connectionId;if((z=this.getConnection(A,D))&&(z.close(),l.default.warn("Offer received for existing Connection ID:"+D)),S.type===E.ConnectionType.Media)z=new h.MediaConnection(A,this,{connectionId:D,_payload:S,metadata:S.metadata}),this._addConnection(A,z),this.emit(E.PeerEventType.Call,z);else{if(S.type!==E.ConnectionType.Data)return void l.default.warn("Received malformed connection type:"+S.type);z=new g.DataConnection(A,this,{connectionId:D,_payload:S,metadata:S.metadata,label:S.label,serialization:S.serialization,reliable:S.reliable}),this._addConnection(A,z),this.emit(E.PeerEventType.Connection,z)}var k=this._getMessages(D);try{for(var j=r(k),F=j.next();!F.done;F=j.next()){var W=F.value;z.handleMessage(W)}}catch(ne){w={error:ne}}finally{try{F&&!F.done&&(C=j.return)&&C.call(j)}finally{if(w)throw w.error}}break;default:if(!S)return void l.default.warn("You received a malformed message from "+A+" of type "+T);var z;D=S.connectionId,(z=this.getConnection(A,D))&&z.peerConnection?z.handleMessage(b):D?this._storeMessage(D,b):l.default.warn("You received an unrecognized message:",b)}},p.prototype._storeMessage=function(b,w){this._lostMessages.has(b)||this._lostMessages.set(b,[]),this._lostMessages.get(b).push(w)},p.prototype._getMessages=function(b){var w=this._lostMessages.get(b);return w?(this._lostMessages.delete(b),w):[]},p.prototype.connect=function(b,w){if(w===void 0&&(w={}),this.disconnected)return l.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."),void this.emitError(E.PeerErrorType.Disconnected,"Cannot connect to new Peer after disconnecting from server.");var C=new g.DataConnection(b,this,w);return this._addConnection(b,C),C},p.prototype.call=function(b,w,C){if(C===void 0&&(C={}),this.disconnected)return l.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."),void this.emitError(E.PeerErrorType.Disconnected,"Cannot connect to new Peer after disconnecting from server.");if(w){C._stream=w;var T=new h.MediaConnection(b,this,C);return this._addConnection(b,T),T}l.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.")},p.prototype._addConnection=function(b,w){l.default.log("add connection "+w.type+":"+w.connectionId+" to peerId:"+b),this._connections.has(b)||this._connections.set(b,[]),this._connections.get(b).push(w)},p.prototype._removeConnection=function(b){var w=this._connections.get(b.peer);if(w){var C=w.indexOf(b);C!==-1&&w.splice(C,1)}this._lostMessages.delete(b.connectionId)},p.prototype.getConnection=function(b,w){var C,T,S=this._connections.get(b);if(!S)return null;try{for(var A=r(S),D=A.next();!D.done;D=A.next()){var k=D.value;if(k.connectionId===w)return k}}catch(j){C={error:j}}finally{try{D&&!D.done&&(T=A.return)&&T.call(A)}finally{if(C)throw C.error}}return null},p.prototype._delayedAbort=function(b,w){var C=this;setTimeout(function(){C._abort(b,w)},0)},p.prototype._abort=function(b,w){l.default.error("Aborting!"),this.emitError(b,w),this._lastServerId?this.disconnect():this.destroy()},p.prototype.emitError=function(b,w){var C;l.default.error("Error:",w),(C=typeof w=="string"?new Error(w):w).type=b,this.emit(E.PeerEventType.Error,C)},p.prototype.destroy=function(){this.destroyed||(l.default.log("Destroy peer with ID:"+this.id),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit(E.PeerEventType.Close))},p.prototype._cleanup=function(){var b,w;try{for(var C=r(this._connections.keys()),T=C.next();!T.done;T=C.next()){var S=T.value;this._cleanupPeer(S),this._connections.delete(S)}}catch(A){b={error:A}}finally{try{T&&!T.done&&(w=C.return)&&w.call(C)}finally{if(b)throw b.error}}this.socket.removeAllListeners()},p.prototype._cleanupPeer=function(b){var w,C,T=this._connections.get(b);if(T)try{for(var S=r(T),A=S.next();!A.done;A=S.next())A.value.close()}catch(D){w={error:D}}finally{try{A&&!A.done&&(C=S.return)&&C.call(S)}finally{if(w)throw w.error}}},p.prototype.disconnect=function(){if(!this.disconnected){var b=this.id;l.default.log("Disconnect peer with ID:"+b),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=b,this._id=null,this.emit(E.PeerEventType.Disconnected,b)}},p.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)l.default.log("Attempting reconnection to server with ID "+this._lastServerId),this._disconnected=!1,this._initialize(this._lastServerId);else{if(this.destroyed)throw new Error("This peer cannot reconnect to the server. It has already been destroyed.");if(this.disconnected||this.open)throw new Error("Peer "+this.id+" cannot reconnect because it is not disconnected from the server!");l.default.error("In a hurry? We're still trying to make the initial connection!")}},p.prototype.listAllPeers=function(b){var w=this;b===void 0&&(b=function(C){}),this._api.listAllPeers().then(function(C){return b(C)}).catch(function(C){return w._abort(E.PeerErrorType.ServerError,C)})},p.DEFAULT_KEY="peerjs",p}(c.EventEmitter);t.Peer=m},{eventemitter3:"JJlS","./util":"BHXf","./logger":"WOs9","./socket":"wJlv","./mediaconnection":"dbHP","./dataconnection":"GBTQ","./enums":"ZRYf","./api":"in7L"}],iTK6:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.peerjs=void 0;var i=o("./util"),n=o("./peer");t.peerjs={Peer:n.Peer,util:i.util},t.default=n.Peer,window.peerjs=t.peerjs,window.Peer=n.Peer},{"./util":"BHXf","./peer":"Hxpd"}]},{},["iTK6"],null)});var _f=Fs((hT,yf)=>{(function(){var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e={rotl:function(t,i){return t<<i|t>>>32-i},rotr:function(t,i){return t<<32-i|t>>>i},endian:function(t){if(t.constructor==Number)return e.rotl(t,8)&16711935|e.rotl(t,24)&4278255360;for(var i=0;i<t.length;i++)t[i]=e.endian(t[i]);return t},randomBytes:function(t){for(var i=[];t>0;t--)i.push(Math.floor(Math.random()*256));return i},bytesToWords:function(t){for(var i=[],n=0,r=0;n<t.length;n++,r+=8)i[r>>>5]|=t[n]<<24-r%32;return i},wordsToBytes:function(t){for(var i=[],n=0;n<t.length*32;n+=8)i.push(t[n>>>5]>>>24-n%32&255);return i},bytesToHex:function(t){for(var i=[],n=0;n<t.length;n++)i.push((t[n]>>>4).toString(16)),i.push((t[n]&15).toString(16));return i.join("")},hexToBytes:function(t){for(var i=[],n=0;n<t.length;n+=2)i.push(parseInt(t.substr(n,2),16));return i},bytesToBase64:function(t){for(var i=[],n=0;n<t.length;n+=3)for(var r=t[n]<<16|t[n+1]<<8|t[n+2],s=0;s<4;s++)n*8+s*6<=t.length*8?i.push(o.charAt(r>>>6*(3-s)&63)):i.push("=");return i.join("")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/ig,"");for(var i=[],n=0,r=0;n<t.length;r=++n%4)r!=0&&i.push((o.indexOf(t.charAt(n-1))&Math.pow(2,-2*r+8)-1)<<r*2|o.indexOf(t.charAt(n))>>>6-r*2);return i}};yf.exports=e})()});var Du=Fs((pT,xf)=>{var Au={utf8:{stringToBytes:function(o){return Au.bin.stringToBytes(unescape(encodeURIComponent(o)))},bytesToString:function(o){return decodeURIComponent(escape(Au.bin.bytesToString(o)))}},bin:{stringToBytes:function(o){for(var e=[],t=0;t<o.length;t++)e.push(o.charCodeAt(t)&255);return e},bytesToString:function(o){for(var e=[],t=0;t<o.length;t++)e.push(String.fromCharCode(o[t]));return e.join("")}}};xf.exports=Au});var Cf=Fs((fT,Ef)=>{Ef.exports=function(o){return o!=null&&(wf(o)||vv(o)||!!o._isBuffer)};function wf(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}function vv(o){return typeof o.readFloatLE=="function"&&typeof o.slice=="function"&&wf(o.slice(0,0))}});var Rf=Fs((mT,Tf)=>{(function(){var o=_f(),e=Du().utf8,t=Cf(),i=Du().bin,n=function(r,s){r.constructor==String?s&&s.encoding==="binary"?r=i.stringToBytes(r):r=e.stringToBytes(r):t(r)?r=Array.prototype.slice.call(r,0):!Array.isArray(r)&&r.constructor!==Uint8Array&&(r=r.toString());for(var a=o.bytesToWords(r),c=r.length*8,u=1732584193,l=-271733879,d=-1732584194,h=271733878,g=0;g<a.length;g++)a[g]=(a[g]<<8|a[g]>>>24)&16711935|(a[g]<<24|a[g]>>>8)&4278255360;a[c>>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;for(var E=n._ff,_=n._gg,x=n._hh,m=n._ii,g=0;g<a.length;g+=16){var f=u,p=l,b=d,w=h;u=E(u,l,d,h,a[g+0],7,-680876936),h=E(h,u,l,d,a[g+1],12,-389564586),d=E(d,h,u,l,a[g+2],17,606105819),l=E(l,d,h,u,a[g+3],22,-1044525330),u=E(u,l,d,h,a[g+4],7,-176418897),h=E(h,u,l,d,a[g+5],12,1200080426),d=E(d,h,u,l,a[g+6],17,-1473231341),l=E(l,d,h,u,a[g+7],22,-45705983),u=E(u,l,d,h,a[g+8],7,1770035416),h=E(h,u,l,d,a[g+9],12,-1958414417),d=E(d,h,u,l,a[g+10],17,-42063),l=E(l,d,h,u,a[g+11],22,-1990404162),u=E(u,l,d,h,a[g+12],7,1804603682),h=E(h,u,l,d,a[g+13],12,-40341101),d=E(d,h,u,l,a[g+14],17,-1502002290),l=E(l,d,h,u,a[g+15],22,1236535329),u=_(u,l,d,h,a[g+1],5,-165796510),h=_(h,u,l,d,a[g+6],9,-1069501632),d=_(d,h,u,l,a[g+11],14,643717713),l=_(l,d,h,u,a[g+0],20,-373897302),u=_(u,l,d,h,a[g+5],5,-701558691),h=_(h,u,l,d,a[g+10],9,38016083),d=_(d,h,u,l,a[g+15],14,-660478335),l=_(l,d,h,u,a[g+4],20,-405537848),u=_(u,l,d,h,a[g+9],5,568446438),h=_(h,u,l,d,a[g+14],9,-1019803690),d=_(d,h,u,l,a[g+3],14,-187363961),l=_(l,d,h,u,a[g+8],20,1163531501),u=_(u,l,d,h,a[g+13],5,-1444681467),h=_(h,u,l,d,a[g+2],9,-51403784),d=_(d,h,u,l,a[g+7],14,1735328473),l=_(l,d,h,u,a[g+12],20,-1926607734),u=x(u,l,d,h,a[g+5],4,-378558),h=x(h,u,l,d,a[g+8],11,-2022574463),d=x(d,h,u,l,a[g+11],16,1839030562),l=x(l,d,h,u,a[g+14],23,-35309556),u=x(u,l,d,h,a[g+1],4,-1530992060),h=x(h,u,l,d,a[g+4],11,1272893353),d=x(d,h,u,l,a[g+7],16,-155497632),l=x(l,d,h,u,a[g+10],23,-1094730640),u=x(u,l,d,h,a[g+13],4,681279174),h=x(h,u,l,d,a[g+0],11,-358537222),d=x(d,h,u,l,a[g+3],16,-722521979),l=x(l,d,h,u,a[g+6],23,76029189),u=x(u,l,d,h,a[g+9],4,-640364487),h=x(h,u,l,d,a[g+12],11,-421815835),d=x(d,h,u,l,a[g+15],16,530742520),l=x(l,d,h,u,a[g+2],23,-995338651),u=m(u,l,d,h,a[g+0],6,-198630844),h=m(h,u,l,d,a[g+7],10,1126891415),d=m(d,h,u,l,a[g+14],15,-1416354905),l=m(l,d,h,u,a[g+5],21,-57434055),u=m(u,l,d,h,a[g+12],6,1700485571),h=m(h,u,l,d,a[g+3],10,-1894986606),d=m(d,h,u,l,a[g+10],15,-1051523),l=m(l,d,h,u,a[g+1],21,-2054922799),u=m(u,l,d,h,a[g+8],6,1873313359),h=m(h,u,l,d,a[g+15],10,-30611744),d=m(d,h,u,l,a[g+6],15,-1560198380),l=m(l,d,h,u,a[g+13],21,1309151649),u=m(u,l,d,h,a[g+4],6,-145523070),h=m(h,u,l,d,a[g+11],10,-1120210379),d=m(d,h,u,l,a[g+2],15,718787259),l=m(l,d,h,u,a[g+9],21,-343485551),u=u+f>>>0,l=l+p>>>0,d=d+b>>>0,h=h+w>>>0}return o.endian([u,l,d,h])};n._ff=function(r,s,a,c,u,l,d){var h=r+(s&a|~s&c)+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._gg=function(r,s,a,c,u,l,d){var h=r+(s&c|a&~c)+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._hh=function(r,s,a,c,u,l,d){var h=r+(s^a^c)+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._ii=function(r,s,a,c,u,l,d){var h=r+(a^(s|~c))+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._blocksize=16,n._digestsize=16,Tf.exports=function(r,s){if(r==null)throw new Error("Illegal argument "+r);var a=o.wordsToBytes(n(r,s));return s&&s.asBytes?a:s&&s.asString?i.bytesToString(a):o.bytesToHex(a)}})()});var Qc=()=>o=>o;var Mi=class{_factory;_cache=[];_maxSize;_index=0;constructor(e,t){this._factory=e,this._maxSize=t}get(){let e=this._index++;return e>=this._cache.length&&(e>=this._maxSize?e=this._index=0:this._cache.push(this._factory())),this._cache[e]}},qc=!1,Nc=[];setTimeout(()=>{qc&&console.log(Nc)},100);function Yc(){return new URLSearchParams(window.location.search)}function P(o){qc&&!Nc.includes(o)&&Nc.push(o);let e=Yc();if(e.has(o)){let t=e.get(o);if(t){let i=Number(t);return isNaN(i)?t:i}else return!0}return!1}qc=P("help")===!0;function yo(o,e,t){o.has(e)?o.set(e,t.toString()):o.append(e,t.toString())}function ap(o,e){window.history.replaceState(null,o,"?"+e.toString())}function lp(o,e){return Math.floor(Math.random()*(e-o+1))+o}var op=["smol","tiny","giant","interesting","smart","bright","dull","extreme","beautiful","pretty","dark","epic","salty","silly","funny","lame","lazy","loud","lucky","mad","mean","mighty","mysterious","nasty","odd","old","powerful","quiet","rapid","scary","shiny","shy","silly","smooth","sour","spicy","stupid","sweet","tasty","terrible","ugly","unusual","vast","wet","wild","witty","wrong","zany","zealous","zippy","zombie","zorro"],sp=["cat","dog","mouse","pig","cow","horse","sheep","chicken","duck","goat","panda","tiger","lion","elephant","monkey","bird","fish","snake","frog","turtle","hamster","penguin","kangaroo","whale","dolphin","crocodile","snail","ant","bee","beetle","butterfly","dragon","eagle","fish","giraffe","lizard","panda","penguin","rabbit","snake","spider","tiger","zebra"];function cp(){let o=op[Math.floor(Math.random()*op.length)],e=sp[Math.floor(Math.random()*sp.length)];return o+"_"+e}function up(o){return o=o.replace(/[^a-z0-9áéíóúñü \.,_-]/gim,""),o.trim()}function dn(o,e,t=!0,i=!1){if(e==null)return null;if(e.userData&&e.userData.guid===o)return e;if(e.guid==o)return e;if(i&&e.userData?.components){for(let n of e.userData.components)if(n.guid===o)return n}if(t){if(e.scenes)for(let n in e.scenes){let r=e.scenes[n],s=dn(o,r,t,i);if(s)return s}if(e.children)for(let n in e.children){let r=e.children[n],s=dn(o,r,t,i);if(s)return s}}}function Bs(o,e){if(o!=null&&typeof o=="object"){let t;Array.isArray(o)?t=[]:(t=Object.create(o),Object.assign(t,o));for(let i of Object.keys(o)){let n=o[i];e&&!e(o,i,n)?t[i]=n:n?.clone!==void 0&&typeof n.clone=="function"?t[i]=n.clone():t[i]=Bs(n,e)}return t}return o}function _o(o){return new Promise((e,t)=>{setTimeout(e,o)})}var Wc=P("debugsourcepath");function Ii(o,e){if(o===void 0)return Wc&&console.warn("getPath: source is undefined, returning uri",e),e;if(e.startsWith("http"))return Wc&&console.warn("getPath: uri is absolute, returning uri",e),e;let t=o.lastIndexOf("/");if(t>=0){let i=o.substring(0,t+1),n=e.lastIndexOf("/");return n>=0?i+=e.substring(n+1):i+=e,Wc&&console.log("getPath:",o,` - changed uri from
78
+ isUnifiedPlanSupported:`+this.isUnifiedPlanSupported()},n}())},{"./adapter":"sXtV"}],BHXf:[function(o,e,t){"use strict";var i=this&&this.__createBinding||(Object.create?function(u,l,d,h){h===void 0&&(h=d),Object.defineProperty(u,h,{enumerable:!0,get:function(){return l[d]}})}:function(u,l,d,h){h===void 0&&(h=d),u[h]=l[d]}),n=this&&this.__setModuleDefault||(Object.create?function(u,l){Object.defineProperty(u,"default",{enumerable:!0,value:l})}:function(u,l){u.default=l}),r=this&&this.__importStar||function(u){if(u&&u.__esModule)return u;var l={};if(u!=null)for(var d in u)d!=="default"&&Object.prototype.hasOwnProperty.call(u,d)&&i(l,u,d);return n(l,u),l};Object.defineProperty(t,"__esModule",{value:!0}),t.util=void 0;var s=r(o("peerjs-js-binarypack")),a=o("./supports"),c={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"turn:0.peerjs.com:3478",username:"peerjs",credential:"peerjsp"}],sdpSemantics:"unified-plan"};t.util=new(function(){function u(){this.CLOUD_HOST="0.peerjs.com",this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=c,this.browser=a.Supports.getBrowser(),this.browserVersion=a.Supports.getVersion(),this.supports=function(){var l,d={browser:a.Supports.isBrowserSupported(),webRTC:a.Supports.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!d.webRTC)return d;try{l=new RTCPeerConnection(c),d.audioVideo=!0;var h=void 0;try{h=l.createDataChannel("_PEERJSTEST",{ordered:!0}),d.data=!0,d.reliable=!!h.ordered;try{h.binaryType="blob",d.binaryBlob=!a.Supports.isIOS}catch{}}catch{}finally{h&&h.close()}}catch{}finally{l&&l.close()}return d}(),this.pack=s.pack,this.unpack=s.unpack,this._dataCount=1}return u.prototype.noop=function(){},u.prototype.validateId=function(l){return!l||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(l)},u.prototype.chunk=function(l){for(var d=[],h=l.size,g=Math.ceil(h/t.util.chunkedMTU),E=0,_=0;_<h;){var x=Math.min(h,_+t.util.chunkedMTU),m=l.slice(_,x),f={__peerData:this._dataCount,n:E,data:m,total:g};d.push(f),_=x,E++}return this._dataCount++,d},u.prototype.blobToArrayBuffer=function(l,d){var h=new FileReader;return h.onload=function(g){g.target&&d(g.target.result)},h.readAsArrayBuffer(l),h},u.prototype.binaryStringToArrayBuffer=function(l){for(var d=new Uint8Array(l.length),h=0;h<l.length;h++)d[h]=255&l.charCodeAt(h);return d.buffer},u.prototype.randomToken=function(){return Math.random().toString(36).substr(2)},u.prototype.isSecure=function(){return location.protocol==="https:"},u}())},{"peerjs-js-binarypack":"kdPp","./supports":"I31f"}],JJlS:[function(o,e,t){"use strict";var i=Object.prototype.hasOwnProperty,n="~";function r(){}function s(l,d,h){this.fn=l,this.context=d,this.once=h||!1}function a(l,d,h,g,E){if(typeof h!="function")throw new TypeError("The listener must be a function");var _=new s(h,g||l,E),x=n?n+d:d;return l._events[x]?l._events[x].fn?l._events[x]=[l._events[x],_]:l._events[x].push(_):(l._events[x]=_,l._eventsCount++),l}function c(l,d){--l._eventsCount==0?l._events=new r:delete l._events[d]}function u(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1)),u.prototype.eventNames=function(){var l,d,h=[];if(this._eventsCount===0)return h;for(d in l=this._events)i.call(l,d)&&h.push(n?d.slice(1):d);return Object.getOwnPropertySymbols?h.concat(Object.getOwnPropertySymbols(l)):h},u.prototype.listeners=function(l){var d=n?n+l:l,h=this._events[d];if(!h)return[];if(h.fn)return[h.fn];for(var g=0,E=h.length,_=new Array(E);g<E;g++)_[g]=h[g].fn;return _},u.prototype.listenerCount=function(l){var d=n?n+l:l,h=this._events[d];return h?h.fn?1:h.length:0},u.prototype.emit=function(l,d,h,g,E,_){var x=n?n+l:l;if(!this._events[x])return!1;var m,f,p=this._events[x],b=arguments.length;if(p.fn){switch(p.once&&this.removeListener(l,p.fn,void 0,!0),b){case 1:return p.fn.call(p.context),!0;case 2:return p.fn.call(p.context,d),!0;case 3:return p.fn.call(p.context,d,h),!0;case 4:return p.fn.call(p.context,d,h,g),!0;case 5:return p.fn.call(p.context,d,h,g,E),!0;case 6:return p.fn.call(p.context,d,h,g,E,_),!0}for(f=1,m=new Array(b-1);f<b;f++)m[f-1]=arguments[f];p.fn.apply(p.context,m)}else{var w,C=p.length;for(f=0;f<C;f++)switch(p[f].once&&this.removeListener(l,p[f].fn,void 0,!0),b){case 1:p[f].fn.call(p[f].context);break;case 2:p[f].fn.call(p[f].context,d);break;case 3:p[f].fn.call(p[f].context,d,h);break;case 4:p[f].fn.call(p[f].context,d,h,g);break;default:if(!m)for(w=1,m=new Array(b-1);w<b;w++)m[w-1]=arguments[w];p[f].fn.apply(p[f].context,m)}}return!0},u.prototype.on=function(l,d,h){return a(this,l,d,h,!1)},u.prototype.once=function(l,d,h){return a(this,l,d,h,!0)},u.prototype.removeListener=function(l,d,h,g){var E=n?n+l:l;if(!this._events[E])return this;if(!d)return c(this,E),this;var _=this._events[E];if(_.fn)_.fn!==d||g&&!_.once||h&&_.context!==h||c(this,E);else{for(var x=0,m=[],f=_.length;x<f;x++)(_[x].fn!==d||g&&!_[x].once||h&&_[x].context!==h)&&m.push(_[x]);m.length?this._events[E]=m.length===1?m[0]:m:c(this,E)}return this},u.prototype.removeAllListeners=function(l){var d;return l?(d=n?n+l:l,this._events[d]&&c(this,d)):(this._events=new r,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=n,u.EventEmitter=u,typeof e<"u"&&(e.exports=u)},{}],WOs9:[function(o,e,t){"use strict";var i=this&&this.__read||function(c,u){var l=typeof Symbol=="function"&&c[Symbol.iterator];if(!l)return c;var d,h,g=l.call(c),E=[];try{for(;(u===void 0||u-- >0)&&!(d=g.next()).done;)E.push(d.value)}catch(_){h={error:_}}finally{try{d&&!d.done&&(l=g.return)&&l.call(g)}finally{if(h)throw h.error}}return E},n=this&&this.__spreadArray||function(c,u){for(var l=0,d=u.length,h=c.length;l<d;l++,h++)c[h]=u[l];return c};Object.defineProperty(t,"__esModule",{value:!0}),t.LogLevel=void 0;var r,s="PeerJS: ";(function(c){c[c.Disabled=0]="Disabled",c[c.Errors=1]="Errors",c[c.Warnings=2]="Warnings",c[c.All=3]="All"})(r=t.LogLevel||(t.LogLevel={}));var a=function(){function c(){this._logLevel=r.Disabled}return Object.defineProperty(c.prototype,"logLevel",{get:function(){return this._logLevel},set:function(u){this._logLevel=u},enumerable:!1,configurable:!0}),c.prototype.log=function(){for(var u=[],l=0;l<arguments.length;l++)u[l]=arguments[l];this._logLevel>=r.All&&this._print.apply(this,n([r.All],i(u)))},c.prototype.warn=function(){for(var u=[],l=0;l<arguments.length;l++)u[l]=arguments[l];this._logLevel>=r.Warnings&&this._print.apply(this,n([r.Warnings],i(u)))},c.prototype.error=function(){for(var u=[],l=0;l<arguments.length;l++)u[l]=arguments[l];this._logLevel>=r.Errors&&this._print.apply(this,n([r.Errors],i(u)))},c.prototype.setLogFunction=function(u){this._print=u},c.prototype._print=function(u){for(var l=[],d=1;d<arguments.length;d++)l[d-1]=arguments[d];var h=n([s],i(l));for(var g in h)h[g]instanceof Error&&(h[g]="("+h[g].name+") "+h[g].message);u>=r.All?console.log.apply(console,n([],i(h))):u>=r.Warnings?console.warn.apply(console,n(["WARNING"],i(h))):u>=r.Errors&&console.error.apply(console,n(["ERROR"],i(h)))},c}();t.default=new a},{}],ZRYf:[function(o,e,t){"use strict";var i,n,r,s,a,c,u;Object.defineProperty(t,"__esModule",{value:!0}),t.ServerMessageType=t.SocketEventType=t.SerializationType=t.PeerErrorType=t.PeerEventType=t.ConnectionType=t.ConnectionEventType=void 0,function(l){l.Open="open",l.Stream="stream",l.Data="data",l.Close="close",l.Error="error",l.IceStateChanged="iceStateChanged"}(i=t.ConnectionEventType||(t.ConnectionEventType={})),function(l){l.Data="data",l.Media="media"}(n=t.ConnectionType||(t.ConnectionType={})),function(l){l.Open="open",l.Close="close",l.Connection="connection",l.Call="call",l.Disconnected="disconnected",l.Error="error"}(r=t.PeerEventType||(t.PeerEventType={})),function(l){l.BrowserIncompatible="browser-incompatible",l.Disconnected="disconnected",l.InvalidID="invalid-id",l.InvalidKey="invalid-key",l.Network="network",l.PeerUnavailable="peer-unavailable",l.SslUnavailable="ssl-unavailable",l.ServerError="server-error",l.SocketError="socket-error",l.SocketClosed="socket-closed",l.UnavailableID="unavailable-id",l.WebRTC="webrtc"}(s=t.PeerErrorType||(t.PeerErrorType={})),function(l){l.Binary="binary",l.BinaryUTF8="binary-utf8",l.JSON="json"}(a=t.SerializationType||(t.SerializationType={})),function(l){l.Message="message",l.Disconnected="disconnected",l.Error="error",l.Close="close"}(c=t.SocketEventType||(t.SocketEventType={})),function(l){l.Heartbeat="HEARTBEAT",l.Candidate="CANDIDATE",l.Offer="OFFER",l.Answer="ANSWER",l.Open="OPEN",l.Error="ERROR",l.IdTaken="ID-TAKEN",l.InvalidKey="INVALID-KEY",l.Leave="LEAVE",l.Expire="EXPIRE"}(u=t.ServerMessageType||(t.ServerMessageType={}))},{}],wJlv:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var h=function(g,E){return(h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(_,x){_.__proto__=x}||function(_,x){for(var m in x)Object.prototype.hasOwnProperty.call(x,m)&&(_[m]=x[m])})(g,E)};return function(g,E){if(typeof E!="function"&&E!==null)throw new TypeError("Class extends value "+String(E)+" is not a constructor or null");function _(){this.constructor=g}h(g,E),g.prototype=E===null?Object.create(E):(_.prototype=E.prototype,new _)}}(),n=this&&this.__read||function(h,g){var E=typeof Symbol=="function"&&h[Symbol.iterator];if(!E)return h;var _,x,m=E.call(h),f=[];try{for(;(g===void 0||g-- >0)&&!(_=m.next()).done;)f.push(_.value)}catch(p){x={error:p}}finally{try{_&&!_.done&&(E=m.return)&&E.call(m)}finally{if(x)throw x.error}}return f},r=this&&this.__spreadArray||function(h,g){for(var E=0,_=g.length,x=h.length;E<_;E++,x++)h[x]=g[E];return h},s=this&&this.__values||function(h){var g=typeof Symbol=="function"&&Symbol.iterator,E=g&&h[g],_=0;if(E)return E.call(h);if(h&&typeof h.length=="number")return{next:function(){return h&&_>=h.length&&(h=void 0),{value:h&&h[_++],done:!h}}};throw new TypeError(g?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(h){return h&&h.__esModule?h:{default:h}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;var c=o("eventemitter3"),u=a(o("./logger")),l=o("./enums"),d=function(h){function g(E,_,x,m,f,p){p===void 0&&(p=5e3);var b=h.call(this)||this;b.pingInterval=p,b._disconnected=!0,b._messagesQueue=[];var w=E?"wss://":"ws://";return b._baseUrl=w+_+":"+x+m+"peerjs?key="+f,b}return i(g,h),g.prototype.start=function(E,_){var x=this;this._id=E;var m=this._baseUrl+"&id="+E+"&token="+_;!this._socket&&this._disconnected&&(this._socket=new WebSocket(m),this._disconnected=!1,this._socket.onmessage=function(f){var p;try{p=JSON.parse(f.data),u.default.log("Server message received:",p)}catch{return void u.default.log("Invalid server message",f.data)}x.emit(l.SocketEventType.Message,p)},this._socket.onclose=function(f){x._disconnected||(u.default.log("Socket closed.",f),x._cleanup(),x._disconnected=!0,x.emit(l.SocketEventType.Disconnected))},this._socket.onopen=function(){x._disconnected||(x._sendQueuedMessages(),u.default.log("Socket open"),x._scheduleHeartbeat())})},g.prototype._scheduleHeartbeat=function(){var E=this;this._wsPingTimer=setTimeout(function(){E._sendHeartbeat()},this.pingInterval)},g.prototype._sendHeartbeat=function(){if(this._wsOpen()){var E=JSON.stringify({type:l.ServerMessageType.Heartbeat});this._socket.send(E),this._scheduleHeartbeat()}else u.default.log("Cannot send heartbeat, because socket closed")},g.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},g.prototype._sendQueuedMessages=function(){var E,_,x=r([],n(this._messagesQueue));this._messagesQueue=[];try{for(var m=s(x),f=m.next();!f.done;f=m.next()){var p=f.value;this.send(p)}}catch(b){E={error:b}}finally{try{f&&!f.done&&(_=m.return)&&_.call(m)}finally{if(E)throw E.error}}},g.prototype.send=function(E){if(!this._disconnected)if(this._id)if(E.type){if(this._wsOpen()){var _=JSON.stringify(E);this._socket.send(_)}}else this.emit(l.SocketEventType.Error,"Invalid message");else this._messagesQueue.push(E)},g.prototype.close=function(){this._disconnected||(this._cleanup(),this._disconnected=!0)},g.prototype._cleanup=function(){this._socket&&(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),this._socket=void 0),clearTimeout(this._wsPingTimer)},g}(c.EventEmitter);t.Socket=d},{eventemitter3:"JJlS","./logger":"WOs9","./enums":"ZRYf"}],HCdX:[function(o,e,t){"use strict";var i=this&&this.__assign||function(){return(i=Object.assign||function(d){for(var h,g=1,E=arguments.length;g<E;g++)for(var _ in h=arguments[g])Object.prototype.hasOwnProperty.call(h,_)&&(d[_]=h[_]);return d}).apply(this,arguments)},n=this&&this.__awaiter||function(d,h,g,E){return new(g||(g=Promise))(function(_,x){function m(b){try{p(E.next(b))}catch(w){x(w)}}function f(b){try{p(E.throw(b))}catch(w){x(w)}}function p(b){var w;b.done?_(b.value):(w=b.value,w instanceof g?w:new g(function(C){C(w)})).then(m,f)}p((E=E.apply(d,h||[])).next())})},r=this&&this.__generator||function(d,h){var g,E,_,x,m={label:0,sent:function(){if(1&_[0])throw _[1];return _[1]},trys:[],ops:[]};return x={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(x[Symbol.iterator]=function(){return this}),x;function f(p){return function(b){return function(w){if(g)throw new TypeError("Generator is already executing.");for(;m;)try{if(g=1,E&&(_=2&w[0]?E.return:w[0]?E.throw||((_=E.return)&&_.call(E),0):E.next)&&!(_=_.call(E,w[1])).done)return _;switch(E=0,_&&(w=[2&w[0],_.value]),w[0]){case 0:case 1:_=w;break;case 4:return m.label++,{value:w[1],done:!1};case 5:m.label++,E=w[1],w=[0];continue;case 7:w=m.ops.pop(),m.trys.pop();continue;default:if(!(_=(_=m.trys).length>0&&_[_.length-1])&&(w[0]===6||w[0]===2)){m=0;continue}if(w[0]===3&&(!_||w[1]>_[0]&&w[1]<_[3])){m.label=w[1];break}if(w[0]===6&&m.label<_[1]){m.label=_[1],_=w;break}if(_&&m.label<_[2]){m.label=_[2],m.ops.push(w);break}_[2]&&m.ops.pop(),m.trys.pop();continue}w=h.call(d,m)}catch(C){w=[6,C],E=0}finally{g=_=0}if(5&w[0])throw w[1];return{value:w[0]?w[1]:void 0,done:!0}}([p,b])}}},s=this&&this.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(t,"__esModule",{value:!0}),t.Negotiator=void 0;var a=o("./util"),c=s(o("./logger")),u=o("./enums"),l=function(){function d(h){this.connection=h}return d.prototype.startConnection=function(h){var g=this._startPeerConnection();if(this.connection.peerConnection=g,this.connection.type===u.ConnectionType.Media&&h._stream&&this._addTracksToConnection(h._stream,g),h.originator){if(this.connection.type===u.ConnectionType.Data){var E=this.connection,_={ordered:!!h.reliable},x=g.createDataChannel(E.label,_);E.initialize(x)}this._makeOffer()}else this.handleSDP("OFFER",h.sdp)},d.prototype._startPeerConnection=function(){c.default.log("Creating RTCPeerConnection.");var h=new RTCPeerConnection(this.connection.provider.options.config);return this._setupListeners(h),h},d.prototype._setupListeners=function(h){var g=this,E=this.connection.peer,_=this.connection.connectionId,x=this.connection.type,m=this.connection.provider;c.default.log("Listening for ICE candidates."),h.onicecandidate=function(f){f.candidate&&f.candidate.candidate&&(c.default.log("Received ICE candidates for "+E+":",f.candidate),m.socket.send({type:u.ServerMessageType.Candidate,payload:{candidate:f.candidate,type:x,connectionId:_},dst:E}))},h.oniceconnectionstatechange=function(){switch(h.iceConnectionState){case"failed":c.default.log("iceConnectionState is failed, closing connections to "+E),g.connection.emit(u.ConnectionEventType.Error,new Error("Negotiation of connection to "+E+" failed.")),g.connection.close();break;case"closed":c.default.log("iceConnectionState is closed, closing connections to "+E),g.connection.emit(u.ConnectionEventType.Error,new Error("Connection to "+E+" closed.")),g.connection.close();break;case"disconnected":c.default.log("iceConnectionState changed to disconnected on the connection with "+E);break;case"completed":h.onicecandidate=a.util.noop}g.connection.emit(u.ConnectionEventType.IceStateChanged,h.iceConnectionState)},c.default.log("Listening for data channel"),h.ondatachannel=function(f){c.default.log("Received data channel");var p=f.channel;m.getConnection(E,_).initialize(p)},c.default.log("Listening for remote stream"),h.ontrack=function(f){c.default.log("Received remote stream");var p=f.streams[0],b=m.getConnection(E,_);if(b.type===u.ConnectionType.Media){var w=b;g._addStreamToMediaConnection(p,w)}}},d.prototype.cleanup=function(){c.default.log("Cleaning up PeerConnection to "+this.connection.peer);var h=this.connection.peerConnection;if(h){this.connection.peerConnection=null,h.onicecandidate=h.oniceconnectionstatechange=h.ondatachannel=h.ontrack=function(){};var g=h.signalingState!=="closed",E=!1;if(this.connection.type===u.ConnectionType.Data){var _=this.connection.dataChannel;_&&(E=!!_.readyState&&_.readyState!=="closed")}(g||E)&&h.close()}},d.prototype._makeOffer=function(){return n(this,void 0,Promise,function(){var h,g,E,_,x,m,f;return r(this,function(p){switch(p.label){case 0:h=this.connection.peerConnection,g=this.connection.provider,p.label=1;case 1:return p.trys.push([1,7,,8]),[4,h.createOffer(this.connection.options.constraints)];case 2:E=p.sent(),c.default.log("Created offer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(E.sdp=this.connection.options.sdpTransform(E.sdp)||E.sdp),p.label=3;case 3:return p.trys.push([3,5,,6]),[4,h.setLocalDescription(E)];case 4:return p.sent(),c.default.log("Set localDescription:",E,"for:"+this.connection.peer),_={sdp:E,type:this.connection.type,connectionId:this.connection.connectionId,metadata:this.connection.metadata,browser:a.util.browser},this.connection.type===u.ConnectionType.Data&&(x=this.connection,_=i(i({},_),{label:x.label,reliable:x.reliable,serialization:x.serialization})),g.socket.send({type:u.ServerMessageType.Offer,payload:_,dst:this.connection.peer}),[3,6];case 5:return(m=p.sent())!="OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer"&&(g.emitError(u.PeerErrorType.WebRTC,m),c.default.log("Failed to setLocalDescription, ",m)),[3,6];case 6:return[3,8];case 7:return f=p.sent(),g.emitError(u.PeerErrorType.WebRTC,f),c.default.log("Failed to createOffer, ",f),[3,8];case 8:return[2]}})})},d.prototype._makeAnswer=function(){return n(this,void 0,Promise,function(){var h,g,E,_,x;return r(this,function(m){switch(m.label){case 0:h=this.connection.peerConnection,g=this.connection.provider,m.label=1;case 1:return m.trys.push([1,7,,8]),[4,h.createAnswer()];case 2:E=m.sent(),c.default.log("Created answer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(E.sdp=this.connection.options.sdpTransform(E.sdp)||E.sdp),m.label=3;case 3:return m.trys.push([3,5,,6]),[4,h.setLocalDescription(E)];case 4:return m.sent(),c.default.log("Set localDescription:",E,"for:"+this.connection.peer),g.socket.send({type:u.ServerMessageType.Answer,payload:{sdp:E,type:this.connection.type,connectionId:this.connection.connectionId,browser:a.util.browser},dst:this.connection.peer}),[3,6];case 5:return _=m.sent(),g.emitError(u.PeerErrorType.WebRTC,_),c.default.log("Failed to setLocalDescription, ",_),[3,6];case 6:return[3,8];case 7:return x=m.sent(),g.emitError(u.PeerErrorType.WebRTC,x),c.default.log("Failed to create answer, ",x),[3,8];case 8:return[2]}})})},d.prototype.handleSDP=function(h,g){return n(this,void 0,Promise,function(){var E,_,x,m;return r(this,function(f){switch(f.label){case 0:g=new RTCSessionDescription(g),E=this.connection.peerConnection,_=this.connection.provider,c.default.log("Setting remote description",g),x=this,f.label=1;case 1:return f.trys.push([1,5,,6]),[4,E.setRemoteDescription(g)];case 2:return f.sent(),c.default.log("Set remoteDescription:"+h+" for:"+this.connection.peer),h!=="OFFER"?[3,4]:[4,x._makeAnswer()];case 3:f.sent(),f.label=4;case 4:return[3,6];case 5:return m=f.sent(),_.emitError(u.PeerErrorType.WebRTC,m),c.default.log("Failed to setRemoteDescription, ",m),[3,6];case 6:return[2]}})})},d.prototype.handleCandidate=function(h){return n(this,void 0,Promise,function(){var g,E,_,x,m,f;return r(this,function(p){switch(p.label){case 0:c.default.log("handleCandidate:",h),g=h.candidate,E=h.sdpMLineIndex,_=h.sdpMid,x=this.connection.peerConnection,m=this.connection.provider,p.label=1;case 1:return p.trys.push([1,3,,4]),[4,x.addIceCandidate(new RTCIceCandidate({sdpMid:_,sdpMLineIndex:E,candidate:g}))];case 2:return p.sent(),c.default.log("Added ICE candidate for:"+this.connection.peer),[3,4];case 3:return f=p.sent(),m.emitError(u.PeerErrorType.WebRTC,f),c.default.log("Failed to handleCandidate, ",f),[3,4];case 4:return[2]}})})},d.prototype._addTracksToConnection=function(h,g){if(c.default.log("add tracks from stream "+h.id+" to peer connection"),!g.addTrack)return c.default.error("Your browser does't support RTCPeerConnection#addTrack. Ignored.");h.getTracks().forEach(function(E){g.addTrack(E,h)})},d.prototype._addStreamToMediaConnection=function(h,g){c.default.log("add stream "+h.id+" to media connection "+g.connectionId),g.addStream(h)},d}();t.Negotiator=l},{"./util":"BHXf","./logger":"WOs9","./enums":"ZRYf"}],tQFK:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var s=function(a,c){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,l){u.__proto__=l}||function(u,l){for(var d in l)Object.prototype.hasOwnProperty.call(l,d)&&(u[d]=l[d])})(a,c)};return function(a,c){if(typeof c!="function"&&c!==null)throw new TypeError("Class extends value "+String(c)+" is not a constructor or null");function u(){this.constructor=a}s(a,c),a.prototype=c===null?Object.create(c):(u.prototype=c.prototype,new u)}}();Object.defineProperty(t,"__esModule",{value:!0}),t.BaseConnection=void 0;var n=o("eventemitter3"),r=function(s){function a(c,u,l){var d=s.call(this)||this;return d.peer=c,d.provider=u,d.options=l,d._open=!1,d.metadata=l.metadata,d}return i(a,s),Object.defineProperty(a.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),a}(n.EventEmitter);t.BaseConnection=r},{eventemitter3:"JJlS"}],dbHP:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var g=function(E,_){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,m){x.__proto__=m}||function(x,m){for(var f in m)Object.prototype.hasOwnProperty.call(m,f)&&(x[f]=m[f])})(E,_)};return function(E,_){if(typeof _!="function"&&_!==null)throw new TypeError("Class extends value "+String(_)+" is not a constructor or null");function x(){this.constructor=E}g(E,_),E.prototype=_===null?Object.create(_):(x.prototype=_.prototype,new x)}}(),n=this&&this.__assign||function(){return(n=Object.assign||function(g){for(var E,_=1,x=arguments.length;_<x;_++)for(var m in E=arguments[_])Object.prototype.hasOwnProperty.call(E,m)&&(g[m]=E[m]);return g}).apply(this,arguments)},r=this&&this.__values||function(g){var E=typeof Symbol=="function"&&Symbol.iterator,_=E&&g[E],x=0;if(_)return _.call(g);if(g&&typeof g.length=="number")return{next:function(){return g&&x>=g.length&&(g=void 0),{value:g&&g[x++],done:!g}}};throw new TypeError(E?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__importDefault||function(g){return g&&g.__esModule?g:{default:g}};Object.defineProperty(t,"__esModule",{value:!0}),t.MediaConnection=void 0;var a=o("./util"),c=s(o("./logger")),u=o("./negotiator"),l=o("./enums"),d=o("./baseconnection"),h=function(g){function E(_,x,m){var f=g.call(this,_,x,m)||this;return f._localStream=f.options._stream,f.connectionId=f.options.connectionId||E.ID_PREFIX+a.util.randomToken(),f._negotiator=new u.Negotiator(f),f._localStream&&f._negotiator.startConnection({_stream:f._localStream,originator:!0}),f}return i(E,g),Object.defineProperty(E.prototype,"type",{get:function(){return l.ConnectionType.Media},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"localStream",{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"remoteStream",{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),E.prototype.addStream=function(_){c.default.log("Receiving stream",_),this._remoteStream=_,g.prototype.emit.call(this,l.ConnectionEventType.Stream,_)},E.prototype.handleMessage=function(_){var x=_.type,m=_.payload;switch(_.type){case l.ServerMessageType.Answer:this._negotiator.handleSDP(x,m.sdp),this._open=!0;break;case l.ServerMessageType.Candidate:this._negotiator.handleCandidate(m.candidate);break;default:c.default.warn("Unrecognized message type:"+x+" from peer:"+this.peer)}},E.prototype.answer=function(_,x){var m,f;if(x===void 0&&(x={}),this._localStream)c.default.warn("Local stream already exists on this MediaConnection. Are you answering a call twice?");else{this._localStream=_,x&&x.sdpTransform&&(this.options.sdpTransform=x.sdpTransform),this._negotiator.startConnection(n(n({},this.options._payload),{_stream:_}));var p=this.provider._getMessages(this.connectionId);try{for(var b=r(p),w=b.next();!w.done;w=b.next()){var C=w.value;this.handleMessage(C)}}catch(T){m={error:T}}finally{try{w&&!w.done&&(f=b.return)&&f.call(b)}finally{if(m)throw m.error}}this._open=!0}},E.prototype.close=function(){this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this._localStream=null,this._remoteStream=null,this.provider&&(this.provider._removeConnection(this),this.provider=null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,g.prototype.emit.call(this,l.ConnectionEventType.Close))},E.ID_PREFIX="mc_",E}(d.BaseConnection);t.MediaConnection=h},{"./util":"BHXf","./logger":"WOs9","./negotiator":"HCdX","./enums":"ZRYf","./baseconnection":"tQFK"}],GGp6:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var c=function(u,l){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,h){d.__proto__=h}||function(d,h){for(var g in h)Object.prototype.hasOwnProperty.call(h,g)&&(d[g]=h[g])})(u,l)};return function(u,l){if(typeof l!="function"&&l!==null)throw new TypeError("Class extends value "+String(l)+" is not a constructor or null");function d(){this.constructor=u}c(u,l),u.prototype=l===null?Object.create(l):(d.prototype=l.prototype,new d)}}(),n=this&&this.__importDefault||function(c){return c&&c.__esModule?c:{default:c}};Object.defineProperty(t,"__esModule",{value:!0}),t.EncodingQueue=void 0;var r=o("eventemitter3"),s=n(o("./logger")),a=function(c){function u(){var l=c.call(this)||this;return l.fileReader=new FileReader,l._queue=[],l._processing=!1,l.fileReader.onload=function(d){l._processing=!1,d.target&&l.emit("done",d.target.result),l.doNextTask()},l.fileReader.onerror=function(d){s.default.error("EncodingQueue error:",d),l._processing=!1,l.destroy(),l.emit("error",d)},l}return i(u,c),Object.defineProperty(u.prototype,"queue",{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(u.prototype,"size",{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(u.prototype,"processing",{get:function(){return this._processing},enumerable:!1,configurable:!0}),u.prototype.enque=function(l){this.queue.push(l),this.processing||this.doNextTask()},u.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},u.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},u}(r.EventEmitter);t.EncodingQueue=a},{eventemitter3:"JJlS","./logger":"WOs9"}],GBTQ:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var g=function(E,_){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,m){x.__proto__=m}||function(x,m){for(var f in m)Object.prototype.hasOwnProperty.call(m,f)&&(x[f]=m[f])})(E,_)};return function(E,_){if(typeof _!="function"&&_!==null)throw new TypeError("Class extends value "+String(_)+" is not a constructor or null");function x(){this.constructor=E}g(E,_),E.prototype=_===null?Object.create(_):(x.prototype=_.prototype,new x)}}(),n=this&&this.__values||function(g){var E=typeof Symbol=="function"&&Symbol.iterator,_=E&&g[E],x=0;if(_)return _.call(g);if(g&&typeof g.length=="number")return{next:function(){return g&&x>=g.length&&(g=void 0),{value:g&&g[x++],done:!g}}};throw new TypeError(E?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__importDefault||function(g){return g&&g.__esModule?g:{default:g}};Object.defineProperty(t,"__esModule",{value:!0}),t.DataConnection=void 0;var s=o("./util"),a=r(o("./logger")),c=o("./negotiator"),u=o("./enums"),l=o("./baseconnection"),d=o("./encodingQueue"),h=function(g){function E(_,x,m){var f=g.call(this,_,x,m)||this;return f.stringify=JSON.stringify,f.parse=JSON.parse,f._buffer=[],f._bufferSize=0,f._buffering=!1,f._chunkedData={},f._encodingQueue=new d.EncodingQueue,f.connectionId=f.options.connectionId||E.ID_PREFIX+s.util.randomToken(),f.label=f.options.label||f.connectionId,f.serialization=f.options.serialization||u.SerializationType.Binary,f.reliable=!!f.options.reliable,f._encodingQueue.on("done",function(p){f._bufferedSend(p)}),f._encodingQueue.on("error",function(){a.default.error("DC#"+f.connectionId+": Error occured in encoding from blob to arraybuffer, close DC"),f.close()}),f._negotiator=new c.Negotiator(f),f._negotiator.startConnection(f.options._payload||{originator:!0}),f}return i(E,g),Object.defineProperty(E.prototype,"type",{get:function(){return u.ConnectionType.Data},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"dataChannel",{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"bufferSize",{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),E.prototype.initialize=function(_){this._dc=_,this._configureDataChannel()},E.prototype._configureDataChannel=function(){var _=this;s.util.supports.binaryBlob&&!s.util.supports.reliable||(this.dataChannel.binaryType="arraybuffer"),this.dataChannel.onopen=function(){a.default.log("DC#"+_.connectionId+" dc connection success"),_._open=!0,_.emit(u.ConnectionEventType.Open)},this.dataChannel.onmessage=function(x){a.default.log("DC#"+_.connectionId+" dc onmessage:",x.data),_._handleDataMessage(x)},this.dataChannel.onclose=function(){a.default.log("DC#"+_.connectionId+" dc closed for:",_.peer),_.close()}},E.prototype._handleDataMessage=function(_){var x=this,m=_.data,f=m.constructor,p=m;if(this.serialization===u.SerializationType.Binary||this.serialization===u.SerializationType.BinaryUTF8){if(f===Blob)return void s.util.blobToArrayBuffer(m,function(w){var C=s.util.unpack(w);x.emit(u.ConnectionEventType.Data,C)});if(f===ArrayBuffer)p=s.util.unpack(m);else if(f===String){var b=s.util.binaryStringToArrayBuffer(m);p=s.util.unpack(b)}}else this.serialization===u.SerializationType.JSON&&(p=this.parse(m));p.__peerData?this._handleChunk(p):g.prototype.emit.call(this,u.ConnectionEventType.Data,p)},E.prototype._handleChunk=function(_){var x=_.__peerData,m=this._chunkedData[x]||{data:[],count:0,total:_.total};if(m.data[_.n]=_.data,m.count++,this._chunkedData[x]=m,m.total===m.count){delete this._chunkedData[x];var f=new Blob(m.data);this._handleDataMessage({data:f})}},E.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this.provider&&(this.provider._removeConnection(this),this.provider=null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),this._encodingQueue=null),this.open&&(this._open=!1,g.prototype.emit.call(this,u.ConnectionEventType.Close))},E.prototype.send=function(_,x){if(this.open)if(this.serialization===u.SerializationType.JSON)this._bufferedSend(this.stringify(_));else if(this.serialization===u.SerializationType.Binary||this.serialization===u.SerializationType.BinaryUTF8){var m=s.util.pack(_);if(!x&&m.size>s.util.chunkedMTU)return void this._sendChunks(m);s.util.supports.binaryBlob?this._bufferedSend(m):this._encodingQueue.enque(m)}else this._bufferedSend(_);else g.prototype.emit.call(this,u.ConnectionEventType.Error,new Error("Connection is not open. You should listen for the `open` event before sending messages."))},E.prototype._bufferedSend=function(_){!this._buffering&&this._trySend(_)||(this._buffer.push(_),this._bufferSize=this._buffer.length)},E.prototype._trySend=function(_){var x=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>E.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){x._buffering=!1,x._tryBuffer()},50),!1;try{this.dataChannel.send(_)}catch(m){return a.default.error("DC#:"+this.connectionId+" Error when sending:",m),this._buffering=!0,this.close(),!1}return!0},E.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var _=this._buffer[0];this._trySend(_)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},E.prototype._sendChunks=function(_){var x,m,f=s.util.chunk(_);a.default.log("DC#"+this.connectionId+" Try to send "+f.length+" chunks...");try{for(var p=n(f),b=p.next();!b.done;b=p.next()){var w=b.value;this.send(w,!0)}}catch(C){x={error:C}}finally{try{b&&!b.done&&(m=p.return)&&m.call(p)}finally{if(x)throw x.error}}},E.prototype.handleMessage=function(_){var x=_.payload;switch(_.type){case u.ServerMessageType.Answer:this._negotiator.handleSDP(_.type,x.sdp);break;case u.ServerMessageType.Candidate:this._negotiator.handleCandidate(x.candidate);break;default:a.default.warn("Unrecognized message type:",_.type,"from peer:",this.peer)}},E.ID_PREFIX="dc_",E.MAX_BUFFERED_AMOUNT=8388608,E}(l.BaseConnection);t.DataConnection=h},{"./util":"BHXf","./logger":"WOs9","./negotiator":"HCdX","./enums":"ZRYf","./baseconnection":"tQFK","./encodingQueue":"GGp6"}],in7L:[function(o,e,t){"use strict";var i=this&&this.__awaiter||function(u,l,d,h){return new(d||(d=Promise))(function(g,E){function _(f){try{m(h.next(f))}catch(p){E(p)}}function x(f){try{m(h.throw(f))}catch(p){E(p)}}function m(f){var p;f.done?g(f.value):(p=f.value,p instanceof d?p:new d(function(b){b(p)})).then(_,x)}m((h=h.apply(u,l||[])).next())})},n=this&&this.__generator||function(u,l){var d,h,g,E,_={label:0,sent:function(){if(1&g[0])throw g[1];return g[1]},trys:[],ops:[]};return E={next:x(0),throw:x(1),return:x(2)},typeof Symbol=="function"&&(E[Symbol.iterator]=function(){return this}),E;function x(m){return function(f){return function(p){if(d)throw new TypeError("Generator is already executing.");for(;_;)try{if(d=1,h&&(g=2&p[0]?h.return:p[0]?h.throw||((g=h.return)&&g.call(h),0):h.next)&&!(g=g.call(h,p[1])).done)return g;switch(h=0,g&&(p=[2&p[0],g.value]),p[0]){case 0:case 1:g=p;break;case 4:return _.label++,{value:p[1],done:!1};case 5:_.label++,h=p[1],p=[0];continue;case 7:p=_.ops.pop(),_.trys.pop();continue;default:if(!(g=(g=_.trys).length>0&&g[g.length-1])&&(p[0]===6||p[0]===2)){_=0;continue}if(p[0]===3&&(!g||p[1]>g[0]&&p[1]<g[3])){_.label=p[1];break}if(p[0]===6&&_.label<g[1]){_.label=g[1],g=p;break}if(g&&_.label<g[2]){_.label=g[2],_.ops.push(p);break}g[2]&&_.ops.pop(),_.trys.pop();continue}p=l.call(u,_)}catch(b){p=[6,b],h=0}finally{d=g=0}if(5&p[0])throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}([m,f])}}},r=this&&this.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(t,"__esModule",{value:!0}),t.API=void 0;var s=o("./util"),a=r(o("./logger")),c=function(){function u(l){this._options=l}return u.prototype._buildUrl=function(l){var d=(this._options.secure?"https://":"http://")+this._options.host+":"+this._options.port+this._options.path+this._options.key+"/"+l;return d+="?ts="+new Date().getTime()+Math.random()},u.prototype.retrieveId=function(){return i(this,void 0,Promise,function(){var l,d,h,g;return n(this,function(E){switch(E.label){case 0:l=this._buildUrl("id"),E.label=1;case 1:return E.trys.push([1,3,,4]),[4,fetch(l)];case 2:if((d=E.sent()).status!==200)throw new Error("Error. Status:"+d.status);return[2,d.text()];case 3:throw h=E.sent(),a.default.error("Error retrieving ID",h),g="",this._options.path==="/"&&this._options.host!==s.util.CLOUD_HOST&&(g=" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),new Error("Could not get an ID from the server."+g);case 4:return[2]}})})},u.prototype.listAllPeers=function(){return i(this,void 0,Promise,function(){var l,d,h,g;return n(this,function(E){switch(E.label){case 0:l=this._buildUrl("peers"),E.label=1;case 1:return E.trys.push([1,3,,4]),[4,fetch(l)];case 2:if((d=E.sent()).status!==200)throw d.status===401?(h="",h=this._options.host===s.util.CLOUD_HOST?"It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key.":"You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature.",new Error("It doesn't look like you have permission to list peers IDs. "+h)):new Error("Error. Status:"+d.status);return[2,d.json()];case 3:throw g=E.sent(),a.default.error("Error retrieving list peers",g),new Error("Could not get list peers from the server."+g);case 4:return[2]}})})},u}();t.API=c},{"./util":"BHXf","./logger":"WOs9"}],Hxpd:[function(o,e,t){"use strict";var i=this&&this.__extends||function(){var f=function(p,b){return(f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(w,C){w.__proto__=C}||function(w,C){for(var T in C)Object.prototype.hasOwnProperty.call(C,T)&&(w[T]=C[T])})(p,b)};return function(p,b){if(typeof b!="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");function w(){this.constructor=p}f(p,b),p.prototype=b===null?Object.create(b):(w.prototype=b.prototype,new w)}}(),n=this&&this.__assign||function(){return(n=Object.assign||function(f){for(var p,b=1,w=arguments.length;b<w;b++)for(var C in p=arguments[b])Object.prototype.hasOwnProperty.call(p,C)&&(f[C]=p[C]);return f}).apply(this,arguments)},r=this&&this.__values||function(f){var p=typeof Symbol=="function"&&Symbol.iterator,b=p&&f[p],w=0;if(b)return b.call(f);if(f&&typeof f.length=="number")return{next:function(){return f&&w>=f.length&&(f=void 0),{value:f&&f[w++],done:!f}}};throw new TypeError(p?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(f,p){var b=typeof Symbol=="function"&&f[Symbol.iterator];if(!b)return f;var w,C,T=b.call(f),S=[];try{for(;(p===void 0||p-- >0)&&!(w=T.next()).done;)S.push(w.value)}catch(A){C={error:A}}finally{try{w&&!w.done&&(b=T.return)&&b.call(T)}finally{if(C)throw C.error}}return S},a=this&&this.__importDefault||function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(t,"__esModule",{value:!0}),t.Peer=void 0;var c=o("eventemitter3"),u=o("./util"),l=a(o("./logger")),d=o("./socket"),h=o("./mediaconnection"),g=o("./dataconnection"),E=o("./enums"),_=o("./api"),x=function(){return function(){}}(),m=function(f){function p(b,w){var C,T=f.call(this)||this;return T._id=null,T._lastServerId=null,T._destroyed=!1,T._disconnected=!1,T._open=!1,T._connections=new Map,T._lostMessages=new Map,b&&b.constructor==Object?w=b:b&&(C=b.toString()),w=n({debug:0,host:u.util.CLOUD_HOST,port:u.util.CLOUD_PORT,path:"/",key:p.DEFAULT_KEY,token:u.util.randomToken(),config:u.util.defaultConfig},w),T._options=w,T._options.host==="/"&&(T._options.host=window.location.hostname),T._options.path&&(T._options.path[0]!=="/"&&(T._options.path="/"+T._options.path),T._options.path[T._options.path.length-1]!=="/"&&(T._options.path+="/")),T._options.secure===void 0&&T._options.host!==u.util.CLOUD_HOST?T._options.secure=u.util.isSecure():T._options.host==u.util.CLOUD_HOST&&(T._options.secure=!0),T._options.logFunction&&l.default.setLogFunction(T._options.logFunction),l.default.logLevel=T._options.debug||0,T._api=new _.API(w),T._socket=T._createServerConnection(),u.util.supports.audioVideo||u.util.supports.data?C&&!u.util.validateId(C)?(T._delayedAbort(E.PeerErrorType.InvalidID,'ID "'+C+'" is invalid'),T):(C?T._initialize(C):T._api.retrieveId().then(function(S){return T._initialize(S)}).catch(function(S){return T._abort(E.PeerErrorType.ServerError,S)}),T):(T._delayedAbort(E.PeerErrorType.BrowserIncompatible,"The current browser does not support WebRTC"),T)}return i(p,f),Object.defineProperty(p.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"socket",{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"connections",{get:function(){var b,w,C=Object.create(null);try{for(var T=r(this._connections),S=T.next();!S.done;S=T.next()){var A=s(S.value,2),D=A[0],k=A[1];C[D]=k}}catch(j){b={error:j}}finally{try{S&&!S.done&&(w=T.return)&&w.call(T)}finally{if(b)throw b.error}}return C},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"disconnected",{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),p.prototype._createServerConnection=function(){var b=this,w=new d.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return w.on(E.SocketEventType.Message,function(C){b._handleMessage(C)}),w.on(E.SocketEventType.Error,function(C){b._abort(E.PeerErrorType.SocketError,C)}),w.on(E.SocketEventType.Disconnected,function(){b.disconnected||(b.emitError(E.PeerErrorType.Network,"Lost connection to server."),b.disconnect())}),w.on(E.SocketEventType.Close,function(){b.disconnected||b._abort(E.PeerErrorType.SocketClosed,"Underlying socket is already closed.")}),w},p.prototype._initialize=function(b){this._id=b,this.socket.start(b,this._options.token)},p.prototype._handleMessage=function(b){var w,C,T=b.type,S=b.payload,A=b.src;switch(T){case E.ServerMessageType.Open:this._lastServerId=this.id,this._open=!0,this.emit(E.PeerEventType.Open,this.id);break;case E.ServerMessageType.Error:this._abort(E.PeerErrorType.ServerError,S.msg);break;case E.ServerMessageType.IdTaken:this._abort(E.PeerErrorType.UnavailableID,'ID "'+this.id+'" is taken');break;case E.ServerMessageType.InvalidKey:this._abort(E.PeerErrorType.InvalidKey,'API KEY "'+this._options.key+'" is invalid');break;case E.ServerMessageType.Leave:l.default.log("Received leave message from "+A),this._cleanupPeer(A),this._connections.delete(A);break;case E.ServerMessageType.Expire:this.emitError(E.PeerErrorType.PeerUnavailable,"Could not connect to peer "+A);break;case E.ServerMessageType.Offer:var D=S.connectionId;if((z=this.getConnection(A,D))&&(z.close(),l.default.warn("Offer received for existing Connection ID:"+D)),S.type===E.ConnectionType.Media)z=new h.MediaConnection(A,this,{connectionId:D,_payload:S,metadata:S.metadata}),this._addConnection(A,z),this.emit(E.PeerEventType.Call,z);else{if(S.type!==E.ConnectionType.Data)return void l.default.warn("Received malformed connection type:"+S.type);z=new g.DataConnection(A,this,{connectionId:D,_payload:S,metadata:S.metadata,label:S.label,serialization:S.serialization,reliable:S.reliable}),this._addConnection(A,z),this.emit(E.PeerEventType.Connection,z)}var k=this._getMessages(D);try{for(var j=r(k),F=j.next();!F.done;F=j.next()){var W=F.value;z.handleMessage(W)}}catch(ne){w={error:ne}}finally{try{F&&!F.done&&(C=j.return)&&C.call(j)}finally{if(w)throw w.error}}break;default:if(!S)return void l.default.warn("You received a malformed message from "+A+" of type "+T);var z;D=S.connectionId,(z=this.getConnection(A,D))&&z.peerConnection?z.handleMessage(b):D?this._storeMessage(D,b):l.default.warn("You received an unrecognized message:",b)}},p.prototype._storeMessage=function(b,w){this._lostMessages.has(b)||this._lostMessages.set(b,[]),this._lostMessages.get(b).push(w)},p.prototype._getMessages=function(b){var w=this._lostMessages.get(b);return w?(this._lostMessages.delete(b),w):[]},p.prototype.connect=function(b,w){if(w===void 0&&(w={}),this.disconnected)return l.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."),void this.emitError(E.PeerErrorType.Disconnected,"Cannot connect to new Peer after disconnecting from server.");var C=new g.DataConnection(b,this,w);return this._addConnection(b,C),C},p.prototype.call=function(b,w,C){if(C===void 0&&(C={}),this.disconnected)return l.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."),void this.emitError(E.PeerErrorType.Disconnected,"Cannot connect to new Peer after disconnecting from server.");if(w){C._stream=w;var T=new h.MediaConnection(b,this,C);return this._addConnection(b,T),T}l.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.")},p.prototype._addConnection=function(b,w){l.default.log("add connection "+w.type+":"+w.connectionId+" to peerId:"+b),this._connections.has(b)||this._connections.set(b,[]),this._connections.get(b).push(w)},p.prototype._removeConnection=function(b){var w=this._connections.get(b.peer);if(w){var C=w.indexOf(b);C!==-1&&w.splice(C,1)}this._lostMessages.delete(b.connectionId)},p.prototype.getConnection=function(b,w){var C,T,S=this._connections.get(b);if(!S)return null;try{for(var A=r(S),D=A.next();!D.done;D=A.next()){var k=D.value;if(k.connectionId===w)return k}}catch(j){C={error:j}}finally{try{D&&!D.done&&(T=A.return)&&T.call(A)}finally{if(C)throw C.error}}return null},p.prototype._delayedAbort=function(b,w){var C=this;setTimeout(function(){C._abort(b,w)},0)},p.prototype._abort=function(b,w){l.default.error("Aborting!"),this.emitError(b,w),this._lastServerId?this.disconnect():this.destroy()},p.prototype.emitError=function(b,w){var C;l.default.error("Error:",w),(C=typeof w=="string"?new Error(w):w).type=b,this.emit(E.PeerEventType.Error,C)},p.prototype.destroy=function(){this.destroyed||(l.default.log("Destroy peer with ID:"+this.id),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit(E.PeerEventType.Close))},p.prototype._cleanup=function(){var b,w;try{for(var C=r(this._connections.keys()),T=C.next();!T.done;T=C.next()){var S=T.value;this._cleanupPeer(S),this._connections.delete(S)}}catch(A){b={error:A}}finally{try{T&&!T.done&&(w=C.return)&&w.call(C)}finally{if(b)throw b.error}}this.socket.removeAllListeners()},p.prototype._cleanupPeer=function(b){var w,C,T=this._connections.get(b);if(T)try{for(var S=r(T),A=S.next();!A.done;A=S.next())A.value.close()}catch(D){w={error:D}}finally{try{A&&!A.done&&(C=S.return)&&C.call(S)}finally{if(w)throw w.error}}},p.prototype.disconnect=function(){if(!this.disconnected){var b=this.id;l.default.log("Disconnect peer with ID:"+b),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=b,this._id=null,this.emit(E.PeerEventType.Disconnected,b)}},p.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)l.default.log("Attempting reconnection to server with ID "+this._lastServerId),this._disconnected=!1,this._initialize(this._lastServerId);else{if(this.destroyed)throw new Error("This peer cannot reconnect to the server. It has already been destroyed.");if(this.disconnected||this.open)throw new Error("Peer "+this.id+" cannot reconnect because it is not disconnected from the server!");l.default.error("In a hurry? We're still trying to make the initial connection!")}},p.prototype.listAllPeers=function(b){var w=this;b===void 0&&(b=function(C){}),this._api.listAllPeers().then(function(C){return b(C)}).catch(function(C){return w._abort(E.PeerErrorType.ServerError,C)})},p.DEFAULT_KEY="peerjs",p}(c.EventEmitter);t.Peer=m},{eventemitter3:"JJlS","./util":"BHXf","./logger":"WOs9","./socket":"wJlv","./mediaconnection":"dbHP","./dataconnection":"GBTQ","./enums":"ZRYf","./api":"in7L"}],iTK6:[function(o,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.peerjs=void 0;var i=o("./util"),n=o("./peer");t.peerjs={Peer:n.Peer,util:i.util},t.default=n.Peer,window.peerjs=t.peerjs,window.Peer=n.Peer},{"./util":"BHXf","./peer":"Hxpd"}]},{},["iTK6"],null)});var xf=Bs((mT,_f)=>{(function(){var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e={rotl:function(t,i){return t<<i|t>>>32-i},rotr:function(t,i){return t<<32-i|t>>>i},endian:function(t){if(t.constructor==Number)return e.rotl(t,8)&16711935|e.rotl(t,24)&4278255360;for(var i=0;i<t.length;i++)t[i]=e.endian(t[i]);return t},randomBytes:function(t){for(var i=[];t>0;t--)i.push(Math.floor(Math.random()*256));return i},bytesToWords:function(t){for(var i=[],n=0,r=0;n<t.length;n++,r+=8)i[r>>>5]|=t[n]<<24-r%32;return i},wordsToBytes:function(t){for(var i=[],n=0;n<t.length*32;n+=8)i.push(t[n>>>5]>>>24-n%32&255);return i},bytesToHex:function(t){for(var i=[],n=0;n<t.length;n++)i.push((t[n]>>>4).toString(16)),i.push((t[n]&15).toString(16));return i.join("")},hexToBytes:function(t){for(var i=[],n=0;n<t.length;n+=2)i.push(parseInt(t.substr(n,2),16));return i},bytesToBase64:function(t){for(var i=[],n=0;n<t.length;n+=3)for(var r=t[n]<<16|t[n+1]<<8|t[n+2],s=0;s<4;s++)n*8+s*6<=t.length*8?i.push(o.charAt(r>>>6*(3-s)&63)):i.push("=");return i.join("")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/ig,"");for(var i=[],n=0,r=0;n<t.length;r=++n%4)r!=0&&i.push((o.indexOf(t.charAt(n-1))&Math.pow(2,-2*r+8)-1)<<r*2|o.indexOf(t.charAt(n))>>>6-r*2);return i}};_f.exports=e})()});var Lu=Bs((gT,wf)=>{var Du={utf8:{stringToBytes:function(o){return Du.bin.stringToBytes(unescape(encodeURIComponent(o)))},bytesToString:function(o){return decodeURIComponent(escape(Du.bin.bytesToString(o)))}},bin:{stringToBytes:function(o){for(var e=[],t=0;t<o.length;t++)e.push(o.charCodeAt(t)&255);return e},bytesToString:function(o){for(var e=[],t=0;t<o.length;t++)e.push(String.fromCharCode(o[t]));return e.join("")}}};wf.exports=Du});var Tf=Bs((bT,Cf)=>{Cf.exports=function(o){return o!=null&&(Ef(o)||yv(o)||!!o._isBuffer)};function Ef(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}function yv(o){return typeof o.readFloatLE=="function"&&typeof o.slice=="function"&&Ef(o.slice(0,0))}});var Sf=Bs((vT,Rf)=>{(function(){var o=xf(),e=Lu().utf8,t=Tf(),i=Lu().bin,n=function(r,s){r.constructor==String?s&&s.encoding==="binary"?r=i.stringToBytes(r):r=e.stringToBytes(r):t(r)?r=Array.prototype.slice.call(r,0):!Array.isArray(r)&&r.constructor!==Uint8Array&&(r=r.toString());for(var a=o.bytesToWords(r),c=r.length*8,u=1732584193,l=-271733879,d=-1732584194,h=271733878,g=0;g<a.length;g++)a[g]=(a[g]<<8|a[g]>>>24)&16711935|(a[g]<<24|a[g]>>>8)&4278255360;a[c>>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;for(var E=n._ff,_=n._gg,x=n._hh,m=n._ii,g=0;g<a.length;g+=16){var f=u,p=l,b=d,w=h;u=E(u,l,d,h,a[g+0],7,-680876936),h=E(h,u,l,d,a[g+1],12,-389564586),d=E(d,h,u,l,a[g+2],17,606105819),l=E(l,d,h,u,a[g+3],22,-1044525330),u=E(u,l,d,h,a[g+4],7,-176418897),h=E(h,u,l,d,a[g+5],12,1200080426),d=E(d,h,u,l,a[g+6],17,-1473231341),l=E(l,d,h,u,a[g+7],22,-45705983),u=E(u,l,d,h,a[g+8],7,1770035416),h=E(h,u,l,d,a[g+9],12,-1958414417),d=E(d,h,u,l,a[g+10],17,-42063),l=E(l,d,h,u,a[g+11],22,-1990404162),u=E(u,l,d,h,a[g+12],7,1804603682),h=E(h,u,l,d,a[g+13],12,-40341101),d=E(d,h,u,l,a[g+14],17,-1502002290),l=E(l,d,h,u,a[g+15],22,1236535329),u=_(u,l,d,h,a[g+1],5,-165796510),h=_(h,u,l,d,a[g+6],9,-1069501632),d=_(d,h,u,l,a[g+11],14,643717713),l=_(l,d,h,u,a[g+0],20,-373897302),u=_(u,l,d,h,a[g+5],5,-701558691),h=_(h,u,l,d,a[g+10],9,38016083),d=_(d,h,u,l,a[g+15],14,-660478335),l=_(l,d,h,u,a[g+4],20,-405537848),u=_(u,l,d,h,a[g+9],5,568446438),h=_(h,u,l,d,a[g+14],9,-1019803690),d=_(d,h,u,l,a[g+3],14,-187363961),l=_(l,d,h,u,a[g+8],20,1163531501),u=_(u,l,d,h,a[g+13],5,-1444681467),h=_(h,u,l,d,a[g+2],9,-51403784),d=_(d,h,u,l,a[g+7],14,1735328473),l=_(l,d,h,u,a[g+12],20,-1926607734),u=x(u,l,d,h,a[g+5],4,-378558),h=x(h,u,l,d,a[g+8],11,-2022574463),d=x(d,h,u,l,a[g+11],16,1839030562),l=x(l,d,h,u,a[g+14],23,-35309556),u=x(u,l,d,h,a[g+1],4,-1530992060),h=x(h,u,l,d,a[g+4],11,1272893353),d=x(d,h,u,l,a[g+7],16,-155497632),l=x(l,d,h,u,a[g+10],23,-1094730640),u=x(u,l,d,h,a[g+13],4,681279174),h=x(h,u,l,d,a[g+0],11,-358537222),d=x(d,h,u,l,a[g+3],16,-722521979),l=x(l,d,h,u,a[g+6],23,76029189),u=x(u,l,d,h,a[g+9],4,-640364487),h=x(h,u,l,d,a[g+12],11,-421815835),d=x(d,h,u,l,a[g+15],16,530742520),l=x(l,d,h,u,a[g+2],23,-995338651),u=m(u,l,d,h,a[g+0],6,-198630844),h=m(h,u,l,d,a[g+7],10,1126891415),d=m(d,h,u,l,a[g+14],15,-1416354905),l=m(l,d,h,u,a[g+5],21,-57434055),u=m(u,l,d,h,a[g+12],6,1700485571),h=m(h,u,l,d,a[g+3],10,-1894986606),d=m(d,h,u,l,a[g+10],15,-1051523),l=m(l,d,h,u,a[g+1],21,-2054922799),u=m(u,l,d,h,a[g+8],6,1873313359),h=m(h,u,l,d,a[g+15],10,-30611744),d=m(d,h,u,l,a[g+6],15,-1560198380),l=m(l,d,h,u,a[g+13],21,1309151649),u=m(u,l,d,h,a[g+4],6,-145523070),h=m(h,u,l,d,a[g+11],10,-1120210379),d=m(d,h,u,l,a[g+2],15,718787259),l=m(l,d,h,u,a[g+9],21,-343485551),u=u+f>>>0,l=l+p>>>0,d=d+b>>>0,h=h+w>>>0}return o.endian([u,l,d,h])};n._ff=function(r,s,a,c,u,l,d){var h=r+(s&a|~s&c)+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._gg=function(r,s,a,c,u,l,d){var h=r+(s&c|a&~c)+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._hh=function(r,s,a,c,u,l,d){var h=r+(s^a^c)+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._ii=function(r,s,a,c,u,l,d){var h=r+(a^(s|~c))+(u>>>0)+d;return(h<<l|h>>>32-l)+s},n._blocksize=16,n._digestsize=16,Rf.exports=function(r,s){if(r==null)throw new Error("Illegal argument "+r);var a=o.wordsToBytes(n(r,s));return s&&s.asBytes?a:s&&s.asString?i.bytesToString(a):o.bytesToHex(a)}})()});var qc=()=>o=>o;var Mi=class{_factory;_cache=[];_maxSize;_index=0;constructor(e,t){this._factory=e,this._maxSize=t}get(){let e=this._index++;return e>=this._cache.length&&(e>=this._maxSize?e=this._index=0:this._cache.push(this._factory())),this._cache[e]}},Yc=!1,Xc=[];setTimeout(()=>{Yc&&console.log(Xc)},100);function Kc(){return new URLSearchParams(window.location.search)}function P(o){Yc&&!Xc.includes(o)&&Xc.push(o);let e=Kc();if(e.has(o)){let t=e.get(o);if(t){let i=Number(t);return isNaN(i)?t:i}else return!0}return!1}Yc=P("help")===!0;function _o(o,e,t){o.has(e)?o.set(e,t.toString()):o.append(e,t.toString())}function lp(o,e){window.history.replaceState(null,o,"?"+e.toString())}function cp(o,e){return Math.floor(Math.random()*(e-o+1))+o}var sp=["smol","tiny","giant","interesting","smart","bright","dull","extreme","beautiful","pretty","dark","epic","salty","silly","funny","lame","lazy","loud","lucky","mad","mean","mighty","mysterious","nasty","odd","old","powerful","quiet","rapid","scary","shiny","shy","silly","smooth","sour","spicy","stupid","sweet","tasty","terrible","ugly","unusual","vast","wet","wild","witty","wrong","zany","zealous","zippy","zombie","zorro"],ap=["cat","dog","mouse","pig","cow","horse","sheep","chicken","duck","goat","panda","tiger","lion","elephant","monkey","bird","fish","snake","frog","turtle","hamster","penguin","kangaroo","whale","dolphin","crocodile","snail","ant","bee","beetle","butterfly","dragon","eagle","fish","giraffe","lizard","panda","penguin","rabbit","snake","spider","tiger","zebra"];function up(){let o=sp[Math.floor(Math.random()*sp.length)],e=ap[Math.floor(Math.random()*ap.length)];return o+"_"+e}function dp(o){return o=o.replace(/[^a-z0-9áéíóúñü \.,_-]/gim,""),o.trim()}function dn(o,e,t=!0,i=!1){if(e==null)return null;if(e.userData&&e.userData.guid===o)return e;if(e.guid==o)return e;if(i&&e.userData?.components){for(let n of e.userData.components)if(n.guid===o)return n}if(t){if(e.scenes)for(let n in e.scenes){let r=e.scenes[n],s=dn(o,r,t,i);if(s)return s}if(e.children)for(let n in e.children){let r=e.children[n],s=dn(o,r,t,i);if(s)return s}}}function Us(o,e){if(o!=null&&typeof o=="object"){let t;Array.isArray(o)?t=[]:(t=Object.create(o),Object.assign(t,o));for(let i of Object.keys(o)){let n=o[i];e&&!e(o,i,n)?t[i]=n:n?.clone!==void 0&&typeof n.clone=="function"?t[i]=n.clone():t[i]=Us(n,e)}return t}return o}function xo(o){return new Promise((e,t)=>{setTimeout(e,o)})}var Nc=P("debugsourcepath");function Ii(o,e){if(o===void 0)return Nc&&console.warn("getPath: source is undefined, returning uri",e),e;if(e.startsWith("http"))return Nc&&console.warn("getPath: uri is absolute, returning uri",e),e;let t=o.lastIndexOf("/");if(t>=0){let i=o.substring(0,t+1),n=e.lastIndexOf("/");return n>=0?i+=e.substring(n+1):i+=e,Nc&&console.log("getPath:",o,` - changed uri from
79
79
  `,e,`
80
- \u2192 `,i),i}return e}var Xc=class{subscribeWrite(e){this.writeCallbacks.push(e)}writeCallbacks=[];constructor(e,t){this._object=e,this._prop=t,this._wrapperProp=Symbol("$"+t),this.apply()}_applied=!1;_object;_prop;_wrapperProp;apply(){if(this._applied||!this._object)return;let e=this._object,t=this._prop;if(e[t]===void 0)return;this._applied=!0,e[this._wrapperProp]!==void 0&&console.warn("Watcher is being applied to an object that already has a wrapper property. This is not (yet) supported");let i=e[t];e[this._wrapperProp]=i,Object.defineProperty(e,t,{get:()=>e[this._wrapperProp],set:s=>{e[this._wrapperProp]=s;for(let a of this.writeCallbacks)a(s,this._prop)}})}revoke(){if(!this._applied||!this._object)return;this._applied=!1;let e=this._object,t=this._prop;Reflect.deleteProperty(e,t);let i=e[this._wrapperProp];e[t]=i,Reflect.deleteProperty(e,this._wrapperProp)}dispose(){this.revoke(),this.writeCallbacks.length=0,this._object=null}},hn=class{_watches=[];constructor(e,t){if(Array.isArray(t))for(let i of t)this._watches.push(new hn(e,i));else this._watches.push(new Xc(e,t))}subscribeWrite(e){for(let t of this._watches)t.subscribeWrite(e)}apply(){for(let e of this._watches)e.apply()}revoke(){for(let e of this._watches)e.revoke()}dispose(){for(let e of this._watches)e.dispose();this._watches.length=0}};function xo(){return typeof window.orientation<"u"||navigator.userAgent.indexOf("IEMobile")!==-1}function La(){return/WebXRViewer\//i.test(navigator.userAgent)}var qg=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"];function wo(){return qg.includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}function ja(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ut(o=window.location.hostname){return new RegExp("[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}|localhost","gm").test(o)===!0}function dp(){return window.location.hostname.includes("glitch.me")}import{DepthTexture as ey,WebGLRenderer as ty}from"three";import*as Pe from"three";import*as ni from"three";var pn=null,Nn=null,Ai=null,Kc=!1,$c=!1,hp=null,fp="\u{1F4DC}",Jc=P("console"),Yg=P("noerrors");Jc&&eu();if(!Yg&&(Jc||ut())){ut()&&console.log("Add the ?console query parameter to the url to show the debug console (on mobile it will automatically open for local development when your get errors)");let o=xo();if(o&&(mp(),gp(!0),o)){let e=document.querySelector("needle-engine");e?.addEventListener("enter-ar",()=>{if(Jc||pn||tu()>0){if(P("noerrors"))return;let t=e.getAROverlayContainer?.call(e),i=bp();i&&t&&t.appendChild(i)}}),e?.addEventListener("exit-ar",()=>{eb()})}}var Zc=Symbol("consoleParent");function eu(){if(pn!==null){$c=!0,pn.showSwitch();return}gp()}function Kg(){pn!==null&&($c=!1,pn.hide(),pn.hideSwitch())}function mp(){hp||(hp=setInterval(Jg,500))}var pp=0;function Jg(){let o=tu(),e=o!==pp;pp=o,e&&Zg()}function Zg(){eu(),Ai&&(Ai.setAttribute("error","true"),Ai.innerText="\u{1F92C}")}function $g(){Ai&&(Ai.removeAttribute("error"),Ai.innerText=fp)}function eb(){Nn&&Nn[Zc]&&Nn[Zc].appendChild(Nn)}function gp(o=!1){if(pn||Kc)return;Kc=!0;let e=document.createElement("script");e.src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js",e.onload=()=>{if(Kc=!1,$c=!0,mp(),pn=new window.VConsole,Nn=bp(),Nn&&(Nn[Zc]=Nn.parentElement),pn.setSwitchPosition(20,10),Ai=tb(),Ai){Ai.innerText=fp,Ai.addEventListener("click",$g);let t=document.createElement("style"),i=40;t.innerHTML=`
80
+ \u2192 `,i),i}return e}var Qc=class{subscribeWrite(e){this.writeCallbacks.push(e)}writeCallbacks=[];constructor(e,t){this._object=e,this._prop=t,this._wrapperProp=Symbol("$"+t),this.apply()}_applied=!1;_object;_prop;_wrapperProp;apply(){if(this._applied||!this._object)return;let e=this._object,t=this._prop;if(e[t]===void 0)return;this._applied=!0,e[this._wrapperProp]!==void 0&&console.warn("Watcher is being applied to an object that already has a wrapper property. This is not (yet) supported");let i=e[t];e[this._wrapperProp]=i,Object.defineProperty(e,t,{get:()=>e[this._wrapperProp],set:s=>{e[this._wrapperProp]=s;for(let a of this.writeCallbacks)a(s,this._prop)}})}revoke(){if(!this._applied||!this._object)return;this._applied=!1;let e=this._object,t=this._prop;Reflect.deleteProperty(e,t);let i=e[this._wrapperProp];e[t]=i,Reflect.deleteProperty(e,this._wrapperProp)}dispose(){this.revoke(),this.writeCallbacks.length=0,this._object=null}},hn=class{_watches=[];constructor(e,t){if(Array.isArray(t))for(let i of t)this._watches.push(new hn(e,i));else this._watches.push(new Qc(e,t))}subscribeWrite(e){for(let t of this._watches)t.subscribeWrite(e)}apply(){for(let e of this._watches)e.apply()}revoke(){for(let e of this._watches)e.revoke()}dispose(){for(let e of this._watches)e.dispose();this._watches.length=0}};function wo(){return typeof window.orientation<"u"||navigator.userAgent.indexOf("IEMobile")!==-1}function ja(){return/WebXRViewer\//i.test(navigator.userAgent)}var Yg=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"];function Eo(){return Yg.includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}function Ha(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ut(o=window.location.hostname){return new RegExp("[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}|localhost","gm").test(o)===!0}function hp(){return window.location.hostname.includes("glitch.me")}import{DepthTexture as ty,WebGLRenderer as iy}from"three";import*as Pe from"three";import*as ni from"three";var pn=null,Xn=null,Ai=null,Jc=!1,eu=!1,pp=null,mp="\u{1F4DC}",Zc=P("console"),Kg=P("noerrors");Zc&&tu();if(!Kg&&(Zc||ut())){ut()&&console.log("Add the ?console query parameter to the url to show the debug console (on mobile it will automatically open for local development when your get errors)");let o=wo();if(o&&(gp(),bp(!0),o)){let e=document.querySelector("needle-engine");e?.addEventListener("enter-ar",()=>{if(Zc||pn||iu()>0){if(P("noerrors"))return;let t=e.getAROverlayContainer?.call(e),i=vp();i&&t&&t.appendChild(i)}}),e?.addEventListener("exit-ar",()=>{tb()})}}var $c=Symbol("consoleParent");function tu(){if(pn!==null){eu=!0,pn.showSwitch();return}bp()}function Jg(){pn!==null&&(eu=!1,pn.hide(),pn.hideSwitch())}function gp(){pp||(pp=setInterval(Zg,500))}var fp=0;function Zg(){let o=iu(),e=o!==fp;fp=o,e&&$g()}function $g(){tu(),Ai&&(Ai.setAttribute("error","true"),Ai.innerText="\u{1F92C}")}function eb(){Ai&&(Ai.removeAttribute("error"),Ai.innerText=mp)}function tb(){Xn&&Xn[$c]&&Xn[$c].appendChild(Xn)}function bp(o=!1){if(pn||Jc)return;Jc=!0;let e=document.createElement("script");e.src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js",e.onload=()=>{if(Jc=!1,eu=!0,gp(),pn=new window.VConsole,Xn=vp(),Xn&&(Xn[$c]=Xn.parentElement),pn.setSwitchPosition(20,10),Ai=ib(),Ai){Ai.innerText=mp,Ai.addEventListener("click",eb);let t=document.createElement("style"),i=40;t.innerHTML=`
81
81
  #__vconsole .vc-switch {
82
82
  border: 1px solid rgba(255,255,255,.2);
83
83
  border-radius: 50%;
@@ -116,7 +116,7 @@ a=extmap-allow-mixed`)!==-1){var p=f.sdp.split(`
116
116
  transform: scale(1, 1);
117
117
  }
118
118
  }
119
- `,document.head.appendChild(t),o===!0&&Kg()}},document.body.appendChild(e)}function tb(){let o=document.querySelector("#__vconsole .vc-switch");return o||null}function bp(){let o=document.querySelector("#__vconsole");return o||null}function Fe(o,e=0){Gs(e,o)}function Xn(o){Fe(o,1)}function Ha(){return ut()}var Di=P("gizmos"),pe=P("debugextension");var Ba=P("debugresolvedependencies"),ib=["/extensions/","extensions/"],nb=[{prefix:"/nodes/",dependencyName:"node"},{prefix:"/meshes/",dependencyName:"mesh"},{prefix:"/materials/",dependencyName:"material"},{prefix:"/textures/",dependencyName:"texture"},{prefix:"/animations/",dependencyName:"animation"},{prefix:"nodes/",dependencyName:"node"},{prefix:"meshes/",dependencyName:"mesh"},{prefix:"materials/",dependencyName:"material"},{prefix:"textures/",dependencyName:"texture"},{prefix:"animations/",dependencyName:"animation"}];async function Eo(o,e){Ba&&console.log(o,e);let t=[];iu(nb,o,e,t);let i=await Promise.all(t);return typeof e=="string"&&i.length===1?i[0]:i}function iu(o,e,t,i){if(typeof t=="object"&&t!==void 0&&t!==null)for(let n of Object.keys(t)){let r=t[n];if(typeof r=="string"){let s=vp(e,r);if(s!==null)typeof s.then=="function"?i.push(s.then(a=>t[n]=a)):t[n]=s;else for(let a of o){let c=nu(a.prefix,r);if(c>=0){Ba&&console.log(a,c,a.dependencyName),i.push(e?.getDependency(a.dependencyName,c).then(u=>(t[n]=u,u)));break}}}else if(Array.isArray(r))for(let s=0;s<r.length;s++){let a=r[s],c=vp(e,a);if(c!==null){typeof c.then=="function"?i.push(c.then(u=>r[s]=u)):r[s]=c;continue}for(let u of o){let l=nu(u.prefix,a);if(l>=0){Ba&&console.log(u,l,u.dependencyName),i.push(e?.getDependency(u.dependencyName,l).then(d=>r[s]=d));break}}typeof a=="object"&&iu(o,e,a,i)}else typeof r=="object"&&iu(o,e,r,i)}else typeof t=="string"&&rb(o,e,t,i)}function vp(o,e){if(o&&o.plugins&&typeof e=="string"){for(let t of ib)if(e.startsWith(t)){let i=e.substring(t.length),n=i.indexOf("/");n>=0&&(i=i.substring(0,n));let r=o.plugins[i];if(pe&&console.log(i,r),typeof r?.resolve=="function"){let s=e.substring(t.length+i.length+1);return r.resolve(o,s)}break}}return null}function rb(o,e,t,i){for(let n of o){let r=nu(n.prefix,t);if(r>=0)return Ba&&console.log(n,r,n.dependencyName),i.push(e?.getDependency(n.dependencyName,r).then(s=>s)),!0}return!1}function nu(o,e){if(typeof e=="string"&&e.startsWith(o)){let t=e.substring(o.length),i=Number.parseInt(t);if(i>=0)return i}return-1}var ru=class{_types={};add(e,t){let i=this._types[e];i===void 0?this._types[e]=t:i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e)}get(e){return this._types[e]}},yp=Symbol("BuiltInType"),O=new ru;var ou="NEEDLE_persistent_assets";function _p(o){return o?.___persistentAsset===!0}var Ua=class{get name(){return ou}parser;constructor(e){this.parser=e}async afterRoot(e){if(!this.parser?.json?.extensions)return;let t=this.parser.json.extensions[ou];if(!t)return;pe&&console.log(t);let i=new Array;for(let n of t?.assets){let r=Eo(this.parser,n);r&&i.push(r)}await Promise.all(i)}resolve(e,t){let i=Number.parseInt(t);if(i>=0){pe&&console.log(t);let n=e.json.extensions[ou];if(n){let r=n?.assets[i];if(r&&typeof r=="object"){r.___persistentAsset=!0;let s=r.__type;if(s){let a=O.get(s)}}return r}}return null}};var Mr=P("debugserializer"),su=class{register(e,t){if(this.typeMap[e]!==void 0){if(this.typeMap[e]===t)return;console.warn("Type "+e+" is already registered",t,this.typeMap[e])}Mr&&console.log("Register type serializer for "+e,t),this.typeMap[e]=t}typeMap={};getSerializer(e){if(!!e)return this.typeMap[e]}getSerializerForConstructor(e,t=0){if(t>20)return;if(!e||!e.constructor){Mr&&console.log("invalid type");return}let i=e.name??e.constructor?.name;if(!i){Mr&&console.log("invalid name",i);return}let n=this.getSerializer(i);if(n!==void 0)return Mr&&console.log("FOUND "+i,e.name,e.constructor.name,n,this.typeMap),n;let r=Object.getPrototypeOf(e);if(!(r.prototype||r.constructor)){Mr&&console.warn("No prototype for "+i,e,e.name,e.prototype,e.constructor.name);return}let a=r.prototype??r.constructor;if(a!==e){let c=this.getSerializerForConstructor(a,++t);if(c){Mr&&console.log("FOUND "+a.constructor.name,a.name,a,c);let u=a.name??a.constructor.name;u==="Function"?console.error("Registering Function is not allowed, something went wrong",e,a,c):this.register(u,c)}return c}}},Va=new su,Li=class{constructor(e){if(Array.isArray(e))for(let t of e)Va.register(t.name,this);else Va.register(e.name,this)}},za=class{isDevMode=ut();cache={};registerDefinedKeys(e,t){!this.isDevMode||this.cache[e]===void 0&&(this.cache[e]=Object.keys(t))}getDefinedKey(e,t){return this.cache[e]===void 0?!1:this.cache[e].includes(t)}},Co=class{root;gltf;gltfId;object;target;nodeId;nodeToObject;objectToNode;context;path;type;implementationInformation;constructor(e){this.root=e}};function lu(o,e){let t=o.$serializedTypes;if(t===void 0)return null;let i={};for(let n in t){let r=o[n];if(r!=null&&typeof r=="object"){let s=Va.getSerializerForConstructor(r);if(s){i[n]=s.onSerialize(r,e);continue}}i[n]=r}return i.name=o.constructor.name,typeof o.guid=="string"&&(i.guid=o.guid),i}var Ga=[];function wp(o,e){if(!o)return e;typeof o.$serializedTypes=="object"&&(e||(e={}),Object.assign(e,o.$serializedTypes));let t=Object.getPrototypeOf(o);return wp(t,e)}function Vs(o,e,t){if(!o)return!1;if(t.target=o,o.onBeforeDeserialize!==void 0){let r=o.onBeforeDeserialize(e,t);if(typeof r=="boolean")return r}let i=wp(o);if(e){if(typeof e.guid=="string"&&(o.guid=e.guid),i)for(let r in i){let s=i[r],a=e[r];if(!(o[r]!==void 0&&a===void 0))if(t.type=void 0,t.path=r,s===null)o[r]=a;else{let c=function(u){let d=u.type;return d?au(a,d,t,void 0,o[r]):au(a,u,t,void 0,o[r])};var n=c;if(o.onBeforeDeserializeMember!==void 0&&o.onBeforeDeserializeMember(r,a,t)===!0)continue;if(Array.isArray(s))for(let u=0;u<s.length;u++){let l=s[u],d=c(l);if(d!==void 0||u===s.length-1){o[r]=d;break}}else o[r]=c(s);Ga.length=0,o.onAfterDeserializeMember!==void 0&&o.onAfterDeserializeMember(r,a,t)}}ab(o,e)}return sb(o,e,t.implementationInformation),o.onAfterDeserialize!==void 0&&o.onAfterDeserialize(e,t),t.path=void 0,!0}var ob=P("noerrors");function sb(o,e,t){if(ob||!e||ut()===!1||!o||o.constructor&&o.constructor[yp]===!0)return;let i=o.constructor?.name,n=Object.getOwnPropertyNames(e);for(let r of n){if(r==="sourceId")continue;let s=o[r],a=e[r];if(t?.getDefinedKey(i,r)===!1){let c=r.charAt(0).toUpperCase()+r.slice(1);t.getDefinedKey(i,c)&&(Xn('<strong>Please rename</strong> "'+c+'" to "'+r+'" in '+i),console.warn('Please use lowercase for field: "'+c+'" in '+i,a,o));continue}if(a!=null){if(typeof a=="object"&&(s===void 0||!s.isObject3D)&&(typeof a.node=="number"||typeof a.guid=="string")){if(a.could_not_resolve)continue;if(!(s!==void 0&&Object.keys(s).length>1)){Fe(`<strong>Missing serialization for object reference!</strong>
119
+ `,document.head.appendChild(t),o===!0&&Jg()}},document.body.appendChild(e)}function ib(){let o=document.querySelector("#__vconsole .vc-switch");return o||null}function vp(){let o=document.querySelector("#__vconsole");return o||null}function Fe(o,e=0){Vs(e,o)}function Qn(o){Fe(o,1)}function Fa(){return ut()}var Di=P("gizmos"),pe=P("debugextension");var Ua=P("debugresolvedependencies"),nb=["/extensions/","extensions/"],rb=[{prefix:"/nodes/",dependencyName:"node"},{prefix:"/meshes/",dependencyName:"mesh"},{prefix:"/materials/",dependencyName:"material"},{prefix:"/textures/",dependencyName:"texture"},{prefix:"/animations/",dependencyName:"animation"},{prefix:"nodes/",dependencyName:"node"},{prefix:"meshes/",dependencyName:"mesh"},{prefix:"materials/",dependencyName:"material"},{prefix:"textures/",dependencyName:"texture"},{prefix:"animations/",dependencyName:"animation"}];async function Co(o,e){Ua&&console.log(o,e);let t=[];nu(rb,o,e,t);let i=await Promise.all(t);return typeof e=="string"&&i.length===1?i[0]:i}function nu(o,e,t,i){if(typeof t=="object"&&t!==void 0&&t!==null)for(let n of Object.keys(t)){let r=t[n];if(typeof r=="string"){let s=yp(e,r);if(s!==null)typeof s.then=="function"?i.push(s.then(a=>t[n]=a)):t[n]=s;else for(let a of o){let c=ru(a.prefix,r);if(c>=0){Ua&&console.log(a,c,a.dependencyName),i.push(e?.getDependency(a.dependencyName,c).then(u=>(t[n]=u,u)));break}}}else if(Array.isArray(r))for(let s=0;s<r.length;s++){let a=r[s],c=yp(e,a);if(c!==null){typeof c.then=="function"?i.push(c.then(u=>r[s]=u)):r[s]=c;continue}for(let u of o){let l=ru(u.prefix,a);if(l>=0){Ua&&console.log(u,l,u.dependencyName),i.push(e?.getDependency(u.dependencyName,l).then(d=>r[s]=d));break}}typeof a=="object"&&nu(o,e,a,i)}else typeof r=="object"&&nu(o,e,r,i)}else typeof t=="string"&&ob(o,e,t,i)}function yp(o,e){if(o&&o.plugins&&typeof e=="string"){for(let t of nb)if(e.startsWith(t)){let i=e.substring(t.length),n=i.indexOf("/");n>=0&&(i=i.substring(0,n));let r=o.plugins[i];if(pe&&console.log(i,r),typeof r?.resolve=="function"){let s=e.substring(t.length+i.length+1);return r.resolve(o,s)}break}}return null}function ob(o,e,t,i){for(let n of o){let r=ru(n.prefix,t);if(r>=0)return Ua&&console.log(n,r,n.dependencyName),i.push(e?.getDependency(n.dependencyName,r).then(s=>s)),!0}return!1}function ru(o,e){if(typeof e=="string"&&e.startsWith(o)){let t=e.substring(o.length),i=Number.parseInt(t);if(i>=0)return i}return-1}var ou=class{_types={};add(e,t){let i=this._types[e];i===void 0?this._types[e]=t:i!==t&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",e)}get(e){return this._types[e]}},_p=Symbol("BuiltInType"),O=new ou;var su="NEEDLE_persistent_assets";function xp(o){return o?.___persistentAsset===!0}var Ga=class{get name(){return su}parser;constructor(e){this.parser=e}async afterRoot(e){if(!this.parser?.json?.extensions)return;let t=this.parser.json.extensions[su];if(!t)return;pe&&console.log(t);let i=new Array;for(let n of t?.assets){let r=Co(this.parser,n);r&&i.push(r)}await Promise.all(i)}resolve(e,t){let i=Number.parseInt(t);if(i>=0){pe&&console.log(t);let n=e.json.extensions[su];if(n){let r=n?.assets[i];if(r&&typeof r=="object"){r.___persistentAsset=!0;let s=r.__type;if(s){let a=O.get(s)}}return r}}return null}};var Ir=P("debugserializer"),au=class{register(e,t){if(this.typeMap[e]!==void 0){if(this.typeMap[e]===t)return;console.warn("Type "+e+" is already registered",t,this.typeMap[e])}Ir&&console.log("Register type serializer for "+e,t),this.typeMap[e]=t}typeMap={};getSerializer(e){if(!!e)return this.typeMap[e]}getSerializerForConstructor(e,t=0){if(t>20)return;if(!e||!e.constructor){Ir&&console.log("invalid type");return}let i=e.name??e.constructor?.name;if(!i){Ir&&console.log("invalid name",i);return}let n=this.getSerializer(i);if(n!==void 0)return Ir&&console.log("FOUND "+i,e.name,e.constructor.name,n,this.typeMap),n;let r=Object.getPrototypeOf(e);if(!(r.prototype||r.constructor)){Ir&&console.warn("No prototype for "+i,e,e.name,e.prototype,e.constructor.name);return}let a=r.prototype??r.constructor;if(a!==e){let c=this.getSerializerForConstructor(a,++t);if(c){Ir&&console.log("FOUND "+a.constructor.name,a.name,a,c);let u=a.name??a.constructor.name;u==="Function"?console.error("Registering Function is not allowed, something went wrong",e,a,c):this.register(u,c)}return c}}},za=new au,Li=class{constructor(e){if(Array.isArray(e))for(let t of e)za.register(t.name,this);else za.register(e.name,this)}},Wa=class{isDevMode=ut();cache={};registerDefinedKeys(e,t){!this.isDevMode||this.cache[e]===void 0&&(this.cache[e]=Object.keys(t))}getDefinedKey(e,t){return this.cache[e]===void 0?!1:this.cache[e].includes(t)}},To=class{root;gltf;gltfId;object;target;nodeId;nodeToObject;objectToNode;context;path;type;implementationInformation;constructor(e){this.root=e}};function cu(o,e){let t=o.$serializedTypes;if(t===void 0)return null;let i={};for(let n in t){let r=o[n];if(r!=null&&typeof r=="object"){let s=za.getSerializerForConstructor(r);if(s){i[n]=s.onSerialize(r,e);continue}}i[n]=r}return i.name=o.constructor.name,typeof o.guid=="string"&&(i.guid=o.guid),i}var Va=[];function Ep(o,e){if(!o)return e;typeof o.$serializedTypes=="object"&&(e||(e={}),Object.assign(e,o.$serializedTypes));let t=Object.getPrototypeOf(o);return Ep(t,e)}function zs(o,e,t){if(!o)return!1;if(t.target=o,o.onBeforeDeserialize!==void 0){let r=o.onBeforeDeserialize(e,t);if(typeof r=="boolean")return r}let i=Ep(o);if(e){if(typeof e.guid=="string"&&(o.guid=e.guid),i)for(let r in i){let s=i[r],a=e[r];if(!(o[r]!==void 0&&a===void 0))if(t.type=void 0,t.path=r,s===null)o[r]=a;else{let c=function(u){let d=u.type;return d?lu(a,d,t,void 0,o[r]):lu(a,u,t,void 0,o[r])};var n=c;if(o.onBeforeDeserializeMember!==void 0&&o.onBeforeDeserializeMember(r,a,t)===!0)continue;if(Array.isArray(s))for(let u=0;u<s.length;u++){let l=s[u],d=c(l);if(d!==void 0||u===s.length-1){o[r]=d;break}}else o[r]=c(s);Va.length=0,o.onAfterDeserializeMember!==void 0&&o.onAfterDeserializeMember(r,a,t)}}lb(o,e)}return ab(o,e,t.implementationInformation),o.onAfterDeserialize!==void 0&&o.onAfterDeserialize(e,t),t.path=void 0,!0}var sb=P("noerrors");function ab(o,e,t){if(sb||!e||ut()===!1||!o||o.constructor&&o.constructor[_p]===!0)return;let i=o.constructor?.name,n=Object.getOwnPropertyNames(e);for(let r of n){if(r==="sourceId")continue;let s=o[r],a=e[r];if(t?.getDefinedKey(i,r)===!1){let c=r.charAt(0).toUpperCase()+r.slice(1);t.getDefinedKey(i,c)&&(Qn('<strong>Please rename</strong> "'+c+'" to "'+r+'" in '+i),console.warn('Please use lowercase for field: "'+c+'" in '+i,a,o));continue}if(a!=null){if(typeof a=="object"&&(s===void 0||!s.isObject3D)&&(typeof a.node=="number"||typeof a.guid=="string")){if(a.could_not_resolve)continue;if(!(s!==void 0&&Object.keys(s).length>1)){Fe(`<strong>Missing serialization for object reference!</strong>
120
120
 
121
121
  Please change to:
122
122
  @serializable(Object3D)
@@ -130,7 +130,7 @@ Please change to:
130
130
  ${r}? : AssetReference;
131
131
 
132
132
  in script ${i}.ts
133
- <a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`,1),console.warn(i,r,o[r],o);continue}}}}function ab(o,e){for(let t of Object.keys(e)){let i=e[t];if(typeof i=="object"&&i!==null&&i!==void 0){let n=o[t];if(!n){Mr&&console.log(t,"is undefined on",o);continue}for(let r of Object.keys(i))n[r]===void 0&&xp(i[r])&&!xp(n)&&(n[r]=i[r])}}}function xp(o){switch(typeof o){case"number":case"string":case"boolean":return!0}return!1}function au(o,e,t,i,n){let r=typeof e=="function"&&e.prototype===void 0,s=e;if(r)try{if(s=e?.call(e,n),r=!1,s==null)return}catch(l){console.error("Error in callback",l,o)}if(t.type=s,!r&&n instanceof s)return n;if(n&&typeof n=="object"&&_p(n)){if(n.__concreteInstance)return n.__concreteInstance;let l=n;if(!l.$serializedTypes&&s.prototype.$serializedTypes&&(l.$serializedTypes=s.prototype.$serializedTypes),l.$serializedTypes&&Vs(l,o,t),n&&s!==void 0)try{let d=new s;pe&&console.log("Create concrete instance for persistent asset",n,"instance:",d),jt(d,n),n.__concreteInstance=d,n=d}catch(d){console.error("Error creating instance or creating values on instance",d,n,s)}return n}if(i||(i={serializer:Va.getSerializerForConstructor(s)}),Array.isArray(o)){let l=[];for(let d=0;d<o.length;d++){let h=o[d],g=au(h,e,t,i,h);l.push(g)}return l}let a=i.serializer;if(a)return a.onDeserialize(o,t);let c;if(o&&(o.isMaterial||o.isTexture||o.isObject3D))c=o;else{if(o===void 0)return;c=new s(...lb(o))}let u=c;return u.$serializedTypes&&Vs(u,o,t),c}function lb(o){if(Ga.length=0,typeof o=="object"&&o!==null&&o!==void 0)for(let e of Object.keys(o))Ga.push(o[e]);return Ga}var Wa=Symbol("assigned component properties");function jt(o,e,t){if(e==null||o==null)return;let i=!1;o[Wa]=!0;let n=o.constructor?.name??"unknown";t?.registerDefinedKeys(n,o);for(let r of Object.keys(e)){let s=cb(o,r);i&&s===void 0||(!s||s.writable===!0||s?.set!==void 0)&&(o[r]=e[r])}delete o[Wa]}function cb(o,e){let t;do t=Object.getOwnPropertyDescriptor(o,e);while(!t&&(o=Object.getPrototypeOf(o)));return t}var ii=P("debuginput"),zs=class{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}};var Na=class extends EventTarget{_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}_specialCursorTrigger=0;setCursorPointer(){this._specialCursorTrigger+=1,this.context.domElement.style.cursor="pointer"}setCursorNormal(){this._specialCursorTrigger-=1,this._specialCursorTrigger=Math.max(0,this._specialCursorTrigger),this._specialCursorTrigger===0&&(this.context.domElement.style.cursor="default")}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive[t]){if(e!==void 0){let i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(let r of e)if(i===r){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new ni.Vector2];_pointerPositionsLastFrame=[new ni.Vector2];_pointerPositionsDelta=[new ni.Vector2];_pointerPositionsRC=[new ni.Vector2];_pointerPositionDown=[new ni.Vector2];_pointerDownTime=[];_pointerUpTime=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];getKeyDown(){for(let e in this.keysPressed){let t=this.keysPressed[e];if(t.startFrame===this.context.time.frameCount)return t.key}return null}getKeyPressed(){for(let e in this.keysPressed){let t=this.keysPressed[e];if(t.pressed)return t.key}return null}isKeyDown(e){return typeof e=="number"&&(console.warn("Use of keycode as number is not recommended, please use KeyCode or string instead"),e=String.fromCharCode(e)),this.context.application.isVisible&&this.context.application.hasFocus&&this.keysPressed[e]?.startFrame===this.context.time.frameCount&&this.keysPressed[e].pressed}isKeyUp(e){return typeof e=="number"&&(console.warn("Use of keycode as number is not recommended, please use KeyCode or string instead"),e=String.fromCharCode(e)),this.context.application.isVisible&&this.context.application.hasFocus&&this.keysPressed[e]?.frame===this.context.time.frameCount&&!this.keysPressed[e].pressed}isKeyPressed(e){return typeof e=="number"&&(e=String.fromCharCode(e)),this.context.application.isVisible&&this.context.application.hasFocus&&this.keysPressed[e]?.pressed}createPointerDown(e){ii&&Fe("Create Pointer down"),this.onDown(e)}createPointerMove(e){ii&&Fe("Create Pointer move"),this.onMove(e)}createPointerUp(e){ii&&Fe("Create Pointer up"),this.onUp(e)}convertScreenspaceToRaycastSpace(e){e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1}constructor(e){super(),this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame.bind(this)),window.addEventListener("touchstart",this.onTouchStart.bind(this),!1),window.addEventListener("touchmove",this.onTouchMove.bind(this),{passive:!0}),window.addEventListener("touchend",this.onTouchUp.bind(this),!1),window.addEventListener("mousedown",this.onMouseDown.bind(this),!1),window.addEventListener("mousemove",this.onMouseMove.bind(this),!1),window.addEventListener("mouseup",this.onMouseUp.bind(this),!1),window.addEventListener("wheel",this.onMouseWheel.bind(this),{passive:!0}),window.addEventListener("keydown",this.onKeyDown.bind(this),!1),window.addEventListener("keypress",this.onKeyPressed.bind(this),!1),window.addEventListener("keyup",this.onKeyUp.bind(this),!1),window.addEventListener("blur",this.onLostFocus.bind(this))}onLostFocus(){for(let e in this.keysPressed)this.keysPressed[e].pressed=!1}onEndOfFrame(){for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(let e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0}keysPressed={};onKeyDown(e){if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.key];t&&t.pressed||(this.keysPressed[e.key]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key},this.onDispatchEvent("keydown",new zs(e)))}onKeyPressed(e){if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.key];!t||(t.pressed=!0,t.frame=this.context.time.frameCount+1,this.onDispatchEvent("keypress",new zs(e)))}onKeyUp(e){if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.key];!t||(t.pressed=!1,t.frame=this.context.time.frameCount+1,this.onDispatchEvent("keyup",new zs(e)))}onMouseWheel(e){this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;let t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY}onTouchStart(e){if(!(e.changedTouches.length<=0))for(let t=0;t<e.changedTouches.length;t++){let i=e.changedTouches[t],n=this.getPointerIndex(i.identifier);ii&&Fe(`touch start #${n}, identifier:${i.identifier}`);let r={button:n,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",source:e};this.onDown(r)}}onTouchMove(e){if(!(e.changedTouches.length<=0))for(let t=0;t<e.changedTouches.length;t++){let i=e.changedTouches[t],r={button:this.getPointerIndex(i.identifier),clientX:i.clientX,clientY:i.clientY,pointerType:"touch",source:e};this.onMove(r)}}onTouchUp(e){if(!(e.changedTouches.length<=0))for(let t=0;t<e.changedTouches.length;t++){let i=e.changedTouches[t],n=this.getPointerIndex(i.identifier);ii&&Fe(`touch up #${n}, identifier:${i.identifier}`);let r={button:n,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",source:e};this.onUp(r)}}onMouseDown(e){if(e.defaultPrevented)return;let t=e.button;this.onDown({button:t,clientX:e.clientX,clientY:e.clientY,pointerType:"mouse",source:e})}onMouseMove(e){if(e.defaultPrevented)return;let i={button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:"mouse",source:e,movementX:e.movementX,movementY:e.movementY};this.onMove(i)}onMouseUp(e){if(e.defaultPrevented)return;let t=e.button;this.onUp({button:t,clientX:e.clientX,clientY:e.clientY,pointerType:"mouse",source:e})}isInRect(e){if(this.context.isInXR)return!0;let t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,r=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return ii&&!r&&console.log("Not in rect",t,i,n),r}onDown(e){if(ii&&console.log(e.pointerType,"DOWN",e.button),!!this.isInRect(e)){for(this.setPointerState(e.button,this._pointerPressed,!0),this.setPointerState(e.button,this._pointerDown,!0),this.setPointerStateT(e.button,this._pointerEvent,e.source);e.button>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[e.button]=e.pointerType;e.button>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new ni.Vector2);this._pointerPositionDown[e.button].set(e.clientX,e.clientY),e.button>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[e.button]=this.context.time.time,this.updatePointerPosition(e),this.onDispatchEvent("pointerdown",e)}}onMove(e){let t=this.getPointerPressed(e.button);t===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!t||(ii&&console.log(e.pointerType,"MOVE",e.button),this.updatePointerPosition(e),this.setPointerStateT(e.button,this._pointerEvent,e.source),this.onDispatchEvent("pointermove",e))}onUp(e){if(this._pointerIds?.length>=e.button&&(this._pointerIds[e.button]=-1),!this._pointerPressed[e.button]){ii&&console.log(e.pointerType,"UP",e.button,"was not down");return}if(ii&&console.log(e.pointerType,"UP",e.button),this.setPointerState(e.button,this._pointerPressed,!1),this.setPointerStateT(e.button,this._pointerEvent,e.source),this.setPointerState(e.button,this._pointerUp,!0),this.updatePointerPosition(e),!this._pointerPositionDown[e.button]){ii&&Xn("Received pointer up event without matching down event for button: "+e.button),console.warn("Received pointer up event without matching down event for button: "+e.button);return}let i=e.clientX-this._pointerPositionDown[e.button].x,n=e.clientY-this._pointerPositionDown[e.button].y;if(e.button>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),Math.abs(i)<5&&Math.abs(n)<5){this.setPointerState(e.button,this._pointerClick,!0);let r=this._pointerUpTime[e.button],s=this.context.time.time-r;s<this._doubleClickTimeThreshold&&s>0&&this.setPointerState(e.button,this._pointerDoubleClick,!0)}this._pointerUpTime[e.button]=this.context.time.time,this.onDispatchEvent("pointerup",e)}updatePointerPosition(e){for(;e.button>=this._pointerPositions.length;)this._pointerPositions.push(new ni.Vector2);for(;e.button>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new ni.Vector2);for(;e.button>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new ni.Vector2);let t=this._pointerPositionsLastFrame[e.button];t.copy(this._pointerPositions[e.button]);let i=e.movementX!==void 0?e.movementX:e.clientX-t.x,n=e.movementY!==void 0?e.movementY:e.clientY-t.y;this._pointerPositionsDelta[e.button].set(i,n),this._pointerPositions[e.button].x=e.clientX,this._pointerPositions[e.button].y=e.clientY;let r=e.clientX,s=e.clientY;for(;e.button>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new ni.Vector2);let a=this._pointerPositionsRC[e.button];a.set(r,s),this.convertScreenspaceToRaycastSpace(a)}getPointerIndex(e){let t=this._pointerIds,i=-1;for(let n=0;n<t.length;n++){if(t[n]===e)return n;i===-1&&t[n]===-1&&(i=n)}return i!==-1?(t[i]=e,i):(t.push(e),t.length-1)}setPointerState(e,t,i){for(;t.length<=e;)t.push(!1);t[e]=i}setPointerStateT(e,t,i){for(;t.length<=e;)t.push(null);t[e]=i}onDispatchEvent(e,t){let i=G.Current;try{G.Current=this.context;let n=new Event(e);jt(n,t),this.dispatchEvent(n)}finally{G.Current=i}}};import{Box3 as Zb,BufferAttribute as hf,BufferGeometry as $b,Layers as Ru,LineBasicMaterial as ev,LineSegments as tv,Matrix4 as iv,Quaternion as nv,Raycaster as rv,Sphere as ov,Vector2 as sv,Vector3 as wu}from"three";import*as fe from"three";var cu=class{random(){return Math.random()}clamp(e,t,i){return e<t?t:e>i?i:e}clamp01(e){return this.clamp(e,0,1)}lerp(e,t,i){return i=i<0?0:i,i=i>1?1:i,e+(t-e)*i}inverseLerp(e,t,i){return(i-e)/(t-e)}remap(e,t,i,n,r){return n+(r-n)*(e-t)/(i-t)}moveTowards(e,t,i){return e+=i,(i<0&&e<t||i>0&&e>t)&&(e=t),e}toDegrees(e){return e*180/Math.PI}toRadians(e){return e*Math.PI/180}gammaToLinear(e){return Math.pow(e,2.2)}linearToGamma(e){return Math.pow(e,1/2.2)}},H=new cu;import{WebGLRenderer as ub,Vector3 as db,Quaternion as hb,Uniform as Ep,Texture as pb,ShaderMaterial as Cp}from"three";function Sp(o,e,t){let i=o.length(),n=e.length(),r=H.lerp(i,n,t);return o.lerp(e,t).normalize().multiplyScalar(r)}var fb=new hb().setFromAxisAngle(new db(0,1,0),Math.PI);function Pp(o,e){o.lookAt(e),o.quaternion.multiply(fb)}var du=new Mi(()=>new fe.Vector3,100);function B(o,e=null,t=!0){let i=e??du.get();return o?o.parent?(t&&o.updateWorldMatrix(!0,!1),o.matrixWorldNeedsUpdate&&o.updateMatrixWorld(),i.setFromMatrixPosition(o.matrixWorld),i):i.copy(o.position):i.set(0,0,0)}function te(o,e){if(!o)return;let t=du.get();e!==t&&t.copy(e),(o?.parent??o).worldToLocal(t),o.position.set(t.x,t.y,t.z)}function fn(o,e,t,i){let n=du.get();n.set(e,t,i),te(o,n)}var Ir=new fe.Quaternion,Ws=new fe.Quaternion,uu=new fe.Quaternion;function me(o,e=null){if(!o)return Ws.set(0,0,0,1);let t=e??Ws;return o.parent?(o.getWorldQuaternion(t),t):t.copy(o.quaternion)}function $e(o,e){if(!o)return;e!==Ir&&Ir.copy(e);let t=Ir;o?.parent?.getWorldQuaternion(uu),uu.invert();let n=uu.multiply(t);o.quaternion.set(n.x,n.y,n.z,n.w)}function Op(o,e,t,i,n){Ir.set(e,t,i,n),$e(o,Ir)}var Xa=new fe.Vector3,HE=new fe.Vector3;function Ae(o,e=null){return o?o.parent?(o.getWorldScale(e??Xa),e??Xa):Xa.copy(o.scale):Xa.set(0,0,0)}var FE=new fe.Vector3,BE=new fe.Quaternion;var Tp=new fe.Euler,Rp=new fe.Euler,mb=new fe.Vector3;function gb(o){return o.getWorldQuaternion(Ws),Rp.setFromQuaternion(Ws),Rp}function kp(o,e){$e(o,Ws.setFromEuler(e))}function Qa(o){let e=gb(o),t=mb;return t.set(e.x,e.y,e.z),t.x=H.toDegrees(t.x),t.y=H.toDegrees(t.y),t.z=H.toDegrees(t.z),t}function qa(o,e,t,i,n=!0){n&&(e=H.toRadians(e),t=H.toRadians(t),i=H.toRadians(i)),Tp.set(e,t,i),Ir.setFromEuler(Tp),$e(o,Ir)}function Ns(o,e=!0){!o||(e?function t(i){console.groupCollapsed((i.name?i.name:"(no name : "+i.type+")")+" %o",i),i.children.forEach(t),console.groupEnd()}(o):o.traverse(function(t){for(var i="|___",n=t;n.parent!==null;)i=" "+i,n=n.parent;console.log(i+t.name+" <"+t.type+">")}))}function Mp(o){if(o){let e=o;return e.blendMode!==void 0&&e.clampWhenFinished!==void 0&&e.enabled!==void 0&&e.fadeIn!==void 0&&e.getClip!==void 0}return!1}var To=class{static createBlitMaterial(e){return new Cp({uniforms:{map:new Ep(null)},vertexShader:this.vertex,fragmentShader:e})}static copyTexture(e,t){let i=t??this.blipMaterial;i.uniforms.map.value=e,i.needsUpdate=!0,i.uniformsNeedUpdate=!0;let n=this.mesh;n.material=i,n.frustumCulled=!1,this.scene.children.length=0,this.scene.add(n),this.renderer.setSize(e.image.width,e.image.height),this.renderer.clear(),this.renderer.render(this.scene,this.perspectiveCam);let r=new pb(this.renderer.domElement);return r.name="Copy",r.needsUpdate=!0,r}static textureToCanvas(e,t){if(!e)return null;(t===!0||e.isCompressedTexture===!0)&&(e=bb(e));let i=e.image;if(vb(i)){let n=document.createElement("canvas");n.width=i.width,n.height=i.height;let r=n.getContext("2d");return r?(r.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}},ri=To;I(ri,"planeGeometry",new fe.PlaneGeometry(2,2,1,1)),I(ri,"renderer",new ub({antialias:!1})),I(ri,"perspectiveCam",new fe.PerspectiveCamera),I(ri,"scene",new fe.Scene),I(ri,"vertex",`
133
+ <a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`,1),console.warn(i,r,o[r],o);continue}}}}function lb(o,e){for(let t of Object.keys(e)){let i=e[t];if(typeof i=="object"&&i!==null&&i!==void 0){let n=o[t];if(!n){Ir&&console.log(t,"is undefined on",o);continue}for(let r of Object.keys(i))n[r]===void 0&&wp(i[r])&&!wp(n)&&(n[r]=i[r])}}}function wp(o){switch(typeof o){case"number":case"string":case"boolean":return!0}return!1}function lu(o,e,t,i,n){let r=typeof e=="function"&&e.prototype===void 0,s=e;if(r)try{if(s=e?.call(e,n),r=!1,s==null)return}catch(l){console.error("Error in callback",l,o)}if(t.type=s,!r&&n instanceof s)return n;if(n&&typeof n=="object"&&xp(n)){if(n.__concreteInstance)return n.__concreteInstance;let l=n;if(!l.$serializedTypes&&s.prototype.$serializedTypes&&(l.$serializedTypes=s.prototype.$serializedTypes),l.$serializedTypes&&zs(l,o,t),n&&s!==void 0)try{let d=new s;pe&&console.log("Create concrete instance for persistent asset",n,"instance:",d),jt(d,n),n.__concreteInstance=d,n=d}catch(d){console.error("Error creating instance or creating values on instance",d,n,s)}return n}if(i||(i={serializer:za.getSerializerForConstructor(s)}),Array.isArray(o)){let l=[];for(let d=0;d<o.length;d++){let h=o[d],g=lu(h,e,t,i,h);l.push(g)}return l}let a=i.serializer;if(a)return a.onDeserialize(o,t);let c;if(o&&(o.isMaterial||o.isTexture||o.isObject3D))c=o;else{if(o===void 0)return;c=new s(...cb(o))}let u=c;return u.$serializedTypes&&zs(u,o,t),c}function cb(o){if(Va.length=0,typeof o=="object"&&o!==null&&o!==void 0)for(let e of Object.keys(o))Va.push(o[e]);return Va}var Na=Symbol("assigned component properties");function jt(o,e,t){if(e==null||o==null)return;let i=!1;o[Na]=!0;let n=o.constructor?.name??"unknown";t?.registerDefinedKeys(n,o);for(let r of Object.keys(e)){let s=ub(o,r);i&&s===void 0||(!s||s.writable===!0||s?.set!==void 0)&&(o[r]=e[r])}delete o[Na]}function ub(o,e){let t;do t=Object.getOwnPropertyDescriptor(o,e);while(!t&&(o=Object.getPrototypeOf(o)));return t}var ii=P("debuginput"),Ws=class{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}};var Xa=class extends EventTarget{_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}_specialCursorTrigger=0;setCursorPointer(){this._specialCursorTrigger+=1,this.context.domElement.style.cursor="pointer"}setCursorNormal(){this._specialCursorTrigger-=1,this._specialCursorTrigger=Math.max(0,this._specialCursorTrigger),this._specialCursorTrigger===0&&(this.context.domElement.style.cursor="default")}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){let i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(let r of e)if(i===r){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new ni.Vector2];_pointerPositionsLastFrame=[new ni.Vector2];_pointerPositionsDelta=[new ni.Vector2];_pointerPositionsRC=[new ni.Vector2];_pointerPositionDown=[new ni.Vector2];_pointerDownTime=[];_pointerUpTime=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];getKeyDown(){for(let e in this.keysPressed){let t=this.keysPressed[e];if(t.startFrame===this.context.time.frameCount)return t.key}return null}getKeyPressed(){for(let e in this.keysPressed){let t=this.keysPressed[e];if(t.pressed)return t.key}return null}isKeyDown(e){return typeof e=="number"&&(console.warn("Use of keycode as number is not recommended, please use KeyCode or string instead"),e=String.fromCharCode(e)),this.context.application.isVisible&&this.context.application.hasFocus&&this.keysPressed[e]?.startFrame===this.context.time.frameCount&&this.keysPressed[e].pressed}isKeyUp(e){return typeof e=="number"&&(console.warn("Use of keycode as number is not recommended, please use KeyCode or string instead"),e=String.fromCharCode(e)),this.context.application.isVisible&&this.context.application.hasFocus&&this.keysPressed[e]?.frame===this.context.time.frameCount&&!this.keysPressed[e].pressed}isKeyPressed(e){return typeof e=="number"&&(e=String.fromCharCode(e)),this.context.application.isVisible&&this.context.application.hasFocus&&this.keysPressed[e]?.pressed}createPointerDown(e){ii&&Fe("Create Pointer down"),this.onDown(e)}createPointerMove(e){ii&&Fe("Create Pointer move"),this.onMove(e)}createPointerUp(e){ii&&Fe("Create Pointer up"),this.onUp(e)}convertScreenspaceToRaycastSpace(e){e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1}constructor(e){super(),this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame.bind(this)),window.addEventListener("touchstart",this.onTouchStart.bind(this),!1),window.addEventListener("touchmove",this.onTouchMove.bind(this),{passive:!0}),window.addEventListener("touchend",this.onTouchUp.bind(this),!1),window.addEventListener("mousedown",this.onMouseDown.bind(this),!1),window.addEventListener("mousemove",this.onMouseMove.bind(this),!1),window.addEventListener("mouseup",this.onMouseUp.bind(this),!1),window.addEventListener("wheel",this.onMouseWheel.bind(this),{passive:!0}),window.addEventListener("keydown",this.onKeyDown.bind(this),!1),window.addEventListener("keypress",this.onKeyPressed.bind(this),!1),window.addEventListener("keyup",this.onKeyUp.bind(this),!1),window.addEventListener("blur",this.onLostFocus.bind(this))}onLostFocus(){for(let e in this.keysPressed)this.keysPressed[e].pressed=!1}onEndOfFrame(){for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(let e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0}keysPressed={};onKeyDown(e){if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.key];t&&t.pressed||(this.keysPressed[e.key]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key},this.onDispatchEvent("keydown",new Ws(e)))}onKeyPressed(e){if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.key];!t||(t.pressed=!0,t.frame=this.context.time.frameCount+1,this.onDispatchEvent("keypress",new Ws(e)))}onKeyUp(e){if(!this.context.application.hasFocus)return;let t=this.keysPressed[e.key];!t||(t.pressed=!1,t.frame=this.context.time.frameCount+1,this.onDispatchEvent("keyup",new Ws(e)))}onMouseWheel(e){this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;let t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY}onTouchStart(e){if(!(e.changedTouches.length<=0))for(let t=0;t<e.changedTouches.length;t++){let i=e.changedTouches[t],n=this.getPointerIndex(i.identifier);ii&&Fe(`touch start #${n}, identifier:${i.identifier}`);let r={button:n,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",source:e};this.onDown(r)}}onTouchMove(e){if(!(e.changedTouches.length<=0))for(let t=0;t<e.changedTouches.length;t++){let i=e.changedTouches[t],r={button:this.getPointerIndex(i.identifier),clientX:i.clientX,clientY:i.clientY,pointerType:"touch",source:e};this.onMove(r)}}onTouchUp(e){if(!(e.changedTouches.length<=0))for(let t=0;t<e.changedTouches.length;t++){let i=e.changedTouches[t],n=this.getPointerIndex(i.identifier);ii&&Fe(`touch up #${n}, identifier:${i.identifier}`);let r={button:n,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",source:e};this.onUp(r)}}onMouseDown(e){if(e.defaultPrevented)return;let t=e.button;this.onDown({button:t,clientX:e.clientX,clientY:e.clientY,pointerType:"mouse",source:e})}onMouseMove(e){if(e.defaultPrevented)return;let i={button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:"mouse",source:e,movementX:e.movementX,movementY:e.movementY};this.onMove(i)}onMouseUp(e){if(e.defaultPrevented)return;let t=e.button;this.onUp({button:t,clientX:e.clientX,clientY:e.clientY,pointerType:"mouse",source:e})}isInRect(e){if(this.context.isInXR)return!0;let t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,r=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return ii&&!r&&console.log("Not in rect",t,i,n),r}onDown(e){if(ii&&console.log(e.pointerType,"DOWN",e.button),!!this.isInRect(e)){for(this.setPointerState(e.button,this._pointerPressed,!0),this.setPointerState(e.button,this._pointerDown,!0),this.setPointerStateT(e.button,this._pointerEvent,e.source);e.button>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[e.button]=e.pointerType;e.button>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new ni.Vector2);this._pointerPositionDown[e.button].set(e.clientX,e.clientY),e.button>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[e.button]=this.context.time.time,this.updatePointerPosition(e),this.onDispatchEvent("pointerdown",e)}}onMove(e){let t=this.getPointerPressed(e.button);t===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!t||(ii&&console.log(e.pointerType,"MOVE",e.button),this.updatePointerPosition(e),this.setPointerStateT(e.button,this._pointerEvent,e.source),this.onDispatchEvent("pointermove",e))}onUp(e){if(this._pointerIds?.length>=e.button&&(this._pointerIds[e.button]=-1),!this._pointerPressed[e.button]){ii&&console.log(e.pointerType,"UP",e.button,"was not down");return}if(ii&&console.log(e.pointerType,"UP",e.button),this.setPointerState(e.button,this._pointerPressed,!1),this.setPointerStateT(e.button,this._pointerEvent,e.source),this.setPointerState(e.button,this._pointerUp,!0),this.updatePointerPosition(e),!this._pointerPositionDown[e.button]){ii&&Qn("Received pointer up event without matching down event for button: "+e.button),console.warn("Received pointer up event without matching down event for button: "+e.button);return}let i=e.clientX-this._pointerPositionDown[e.button].x,n=e.clientY-this._pointerPositionDown[e.button].y;if(e.button>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),Math.abs(i)<5&&Math.abs(n)<5){this.setPointerState(e.button,this._pointerClick,!0);let r=this._pointerUpTime[e.button],s=this.context.time.time-r;s<this._doubleClickTimeThreshold&&s>0&&this.setPointerState(e.button,this._pointerDoubleClick,!0)}this._pointerUpTime[e.button]=this.context.time.time,this.onDispatchEvent("pointerup",e)}updatePointerPosition(e){for(;e.button>=this._pointerPositions.length;)this._pointerPositions.push(new ni.Vector2);for(;e.button>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new ni.Vector2);for(;e.button>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new ni.Vector2);let t=this._pointerPositionsLastFrame[e.button];t.copy(this._pointerPositions[e.button]);let i=e.movementX!==void 0?e.movementX:e.clientX-t.x,n=e.movementY!==void 0?e.movementY:e.clientY-t.y;this._pointerPositionsDelta[e.button].set(i,n),this._pointerPositions[e.button].x=e.clientX,this._pointerPositions[e.button].y=e.clientY;let r=e.clientX,s=e.clientY;for(;e.button>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new ni.Vector2);let a=this._pointerPositionsRC[e.button];a.set(r,s),this.convertScreenspaceToRaycastSpace(a)}getPointerIndex(e){let t=this._pointerIds,i=-1;for(let n=0;n<t.length;n++){if(t[n]===e)return n;i===-1&&t[n]===-1&&(i=n)}return i!==-1?(t[i]=e,i):(t.push(e),t.length-1)}setPointerState(e,t,i){for(;t.length<=e;)t.push(!1);t[e]=i}setPointerStateT(e,t,i){for(;t.length<=e;)t.push(null);t[e]=i}onDispatchEvent(e,t){let i=G.Current;try{G.Current=this.context;let n=new Event(e);jt(n,t),this.dispatchEvent(n)}finally{G.Current=i}}};import{Box3 as $b,BufferAttribute as pf,BufferGeometry as ev,Layers as Su,LineBasicMaterial as tv,LineSegments as iv,Matrix4 as nv,Quaternion as rv,Raycaster as ov,Sphere as sv,Vector2 as av,Vector3 as Eu}from"three";import*as fe from"three";var uu=class{random(){return Math.random()}clamp(e,t,i){return e<t?t:e>i?i:e}clamp01(e){return this.clamp(e,0,1)}lerp(e,t,i){return i=i<0?0:i,i=i>1?1:i,e+(t-e)*i}inverseLerp(e,t,i){return(i-e)/(t-e)}remap(e,t,i,n,r){return n+(r-n)*(e-t)/(i-t)}moveTowards(e,t,i){return e+=i,(i<0&&e<t||i>0&&e>t)&&(e=t),e}toDegrees(e){return e*180/Math.PI}toRadians(e){return e*Math.PI/180}gammaToLinear(e){return Math.pow(e,2.2)}linearToGamma(e){return Math.pow(e,1/2.2)}},H=new uu;import{WebGLRenderer as db,Vector3 as hb,Quaternion as pb,Uniform as Cp,Texture as fb,ShaderMaterial as Tp}from"three";function Pp(o,e,t){let i=o.length(),n=e.length(),r=H.lerp(i,n,t);return o.lerp(e,t).normalize().multiplyScalar(r)}var mb=new pb().setFromAxisAngle(new hb(0,1,0),Math.PI);function Op(o,e){o.lookAt(e),o.quaternion.multiply(mb)}var hu=new Mi(()=>new fe.Vector3,100);function B(o,e=null,t=!0){let i=e??hu.get();return o?o.parent?(t&&o.updateWorldMatrix(!0,!1),o.matrixWorldNeedsUpdate&&o.updateMatrixWorld(),i.setFromMatrixPosition(o.matrixWorld),i):i.copy(o.position):i.set(0,0,0)}function te(o,e){if(!o)return;let t=hu.get();e!==t&&t.copy(e),(o?.parent??o).worldToLocal(t),o.position.set(t.x,t.y,t.z)}function fn(o,e,t,i){let n=hu.get();n.set(e,t,i),te(o,n)}var Ar=new fe.Quaternion,Ns=new fe.Quaternion,du=new fe.Quaternion;function me(o,e=null){if(!o)return Ns.set(0,0,0,1);let t=e??Ns;return o.parent?(o.getWorldQuaternion(t),t):t.copy(o.quaternion)}function $e(o,e){if(!o)return;e!==Ar&&Ar.copy(e);let t=Ar;o?.parent?.getWorldQuaternion(du),du.invert();let n=du.multiply(t);o.quaternion.set(n.x,n.y,n.z,n.w)}function kp(o,e,t,i,n){Ar.set(e,t,i,n),$e(o,Ar)}var Qa=new fe.Vector3,UE=new fe.Vector3;function Ae(o,e=null){return o?o.parent?(o.getWorldScale(e??Qa),e??Qa):Qa.copy(o.scale):Qa.set(0,0,0)}var GE=new fe.Vector3,VE=new fe.Quaternion;var Rp=new fe.Euler,Sp=new fe.Euler,gb=new fe.Vector3;function bb(o){return o.getWorldQuaternion(Ns),Sp.setFromQuaternion(Ns),Sp}function Mp(o,e){$e(o,Ns.setFromEuler(e))}function qa(o){let e=bb(o),t=gb;return t.set(e.x,e.y,e.z),t.x=H.toDegrees(t.x),t.y=H.toDegrees(t.y),t.z=H.toDegrees(t.z),t}function Ya(o,e,t,i,n=!0){n&&(e=H.toRadians(e),t=H.toRadians(t),i=H.toRadians(i)),Rp.set(e,t,i),Ar.setFromEuler(Rp),$e(o,Ar)}function Xs(o,e=!0){!o||(e?function t(i){console.groupCollapsed((i.name?i.name:"(no name : "+i.type+")")+" %o",i),i.children.forEach(t),console.groupEnd()}(o):o.traverse(function(t){for(var i="|___",n=t;n.parent!==null;)i=" "+i,n=n.parent;console.log(i+t.name+" <"+t.type+">")}))}function Ip(o){if(o){let e=o;return e.blendMode!==void 0&&e.clampWhenFinished!==void 0&&e.enabled!==void 0&&e.fadeIn!==void 0&&e.getClip!==void 0}return!1}var Ro=class{static createBlitMaterial(e){return new Tp({uniforms:{map:new Cp(null)},vertexShader:this.vertex,fragmentShader:e})}static copyTexture(e,t){let i=t??this.blipMaterial;i.uniforms.map.value=e,i.needsUpdate=!0,i.uniformsNeedUpdate=!0;let n=this.mesh;n.material=i,n.frustumCulled=!1,this.scene.children.length=0,this.scene.add(n),this.renderer.setSize(e.image.width,e.image.height),this.renderer.clear(),this.renderer.render(this.scene,this.perspectiveCam);let r=new fb(this.renderer.domElement);return r.name="Copy",r.needsUpdate=!0,r}static textureToCanvas(e,t){if(!e)return null;(t===!0||e.isCompressedTexture===!0)&&(e=vb(e));let i=e.image;if(yb(i)){let n=document.createElement("canvas");n.width=i.width,n.height=i.height;let r=n.getContext("2d");return r?(r.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}},ri=Ro;I(ri,"planeGeometry",new fe.PlaneGeometry(2,2,1,1)),I(ri,"renderer",new db({antialias:!1})),I(ri,"perspectiveCam",new fe.PerspectiveCamera),I(ri,"scene",new fe.Scene),I(ri,"vertex",`
134
134
  varying vec2 vUv;
135
135
  void main(){
136
136
  vUv = uv;
@@ -143,13 +143,13 @@ in script ${i}.ts
143
143
  uv.y = 1.0 - uv.y;
144
144
  gl_FragColor = texture2D( map, uv);
145
145
  // gl_FragColor = vec4(uv.xy, 0, 1);
146
- }`),I(ri,"blipMaterial",new Cp({uniforms:{map:new Ep(null)},vertexShader:To.vertex,fragmentShader:To.fragment})),I(ri,"mesh",new fe.Mesh(To.planeGeometry,To.blipMaterial));function bb(o){return ri.copyTexture(o)}function vb(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}import{Vector3 as yb}from"three";var YE=Symbol("object"),Ip=new Mi(()=>new yb,20),Ya=class{_point;_normal;distance;impulse;friction;get point(){return Ip.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Ip.get().set(this._normal.x,this._normal.y,this._normal.z)}constructor(e,t,i,n,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=r}},Xs=class{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}};function Dr(o,e){try{e?o(e):o()}catch(t){return console.error(t),!1}return!0}var ji="__isActiveInHierarchy",Lr="builtin_components";var wb=P("debugnewscripts"),ge=[];function vn(o){if(!(o.new_scripts.length<=0)){if(wb&&console.log("Register new components",o.new_scripts.length,o.alias?"element: "+o.alias:""),o.new_scripts_pre_setup_callbacks.length>0){for(let e of o.new_scripts_pre_setup_callbacks)!e||e();o.new_scripts_pre_setup_callbacks.length=0}ge.length=0,o.new_scripts.length>0&&ge.push(...o.new_scripts),o.new_scripts.length=0;for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed)continue;if(!t.gameObject){console.error("MISSING GAMEOBJECT - will ignore",t),ge.splice(e,1),e--;continue}t.context=o,jr(t.gameObject),pu(t,o)}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed){gn(ge[e],o),ge.splice(e,1),e--;continue}if(t.registering)try{t.registering()}catch(i){console.error(i)}t.__internalAwake!==void 0&&(t.gameObject||console.error("MISSING GAMEOBJECT",t,t.gameObject),jr(t.gameObject),t.activeAndEnabled&&Dr(t.__internalAwake.bind(t)))}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed||t.enabled===!1||(jr(t.gameObject),t.activeAndEnabled===!1))continue;t.__internalEnable!==void 0&&(t.enabled=!0,Dr(t.__internalEnable.bind(t)))}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed||!t.gameObject)continue;o.new_script_start.push(t)}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}ge.length=0;for(let e of o.new_scripts_post_setup_callbacks)e&&e();o.new_scripts_post_setup_callbacks.length=0}}function Ap(o){!o||(o.__internalDisable(),gn(o,o.context))}function Ka(o,e){for(let t=0;t<o.new_script_start.length;t++)try{let i=o.new_script_start[t];if(e!==void 0&&i.gameObject!==e||i.destroyed||i.activeAndEnabled===!1)continue;Dr(i.__internalAwake.bind(i)),Dr(i.__internalEnable.bind(i)),Dr(i.__internalStart.bind(i)),o.new_script_start.splice(t,1),t--}catch(i){console.error(i),gn(o.new_script_start[t],o),o.new_script_start.splice(t,1),t--}}function pu(o,e){e.scripts.indexOf(o)===-1&&(e.scripts.push(o),o.earlyUpdate&&e.scripts_earlyUpdate.push(o),o.update&&e.scripts_update.push(o),o.lateUpdate&&e.scripts_lateUpdate.push(o),o.onBeforeRender&&e.scripts_onBeforeRender.push(o),o.onAfterRender&&e.scripts_onAfterRender.push(o),o.onPausedChanged&&e.scripts_pausedChanged.push(o))}function gn(o,e){mn(o,e.new_scripts),mn(o,e.new_script_start),mn(o,e.scripts),mn(o,e.scripts_earlyUpdate),mn(o,e.scripts_update),mn(o,e.scripts_lateUpdate),mn(o,e.scripts_onBeforeRender),mn(o,e.scripts_onAfterRender),mn(o,e.scripts_pausedChanged),e.stopAllCoroutinesFrom(o)}function mn(o,e){let t=e.indexOf(o);t>=0&&e.splice(t,1)}var Eb={},hu={};function Ro(o){if(o||(o=G.Current.scene),!o){console.trace("Invalid call - no current context.");return}Dp(o,bn(o),!0)}function Dp(o,e,t){let i=!1,n=bn(o);if(Eb[o.uuid]=n,e&&(e=bn(o)),o[ji]=e,!i){let r=hu[o.uuid];r!==void 0&&r!==e&&t&&Cb(o,s=>{e?(Dr(s.__internalAwake.bind(s)),s.enabled=!0):s.enabled=!1})}if(hu[o.uuid]=e,o.children)for(let r of o.children)Dp(r,e,t)}function jr(o){let e=!0,t=o,i=!1;for(;t&&t;){if(t.type==="Scene"&&(i=!0),!bn(t)){e=!1;break}t=t.parent}if(!o){console.error("GO is null");return}hu[o.uuid]=e,o[ji]=e&&i}function Cb(o,e){if(o.userData?.components)for(let t of o.userData.components)e(t)}import*as Qs from"three";var jp=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Tb(o){return typeof o=="string"&&jp.test(o)}var Hp=Tb;var Be=[];for(let o=0;o<256;++o)Be.push((o+256).toString(16).slice(1));function Fp(o,e=0){return(Be[o[e+0]]+Be[o[e+1]]+Be[o[e+2]]+Be[o[e+3]]+"-"+Be[o[e+4]]+Be[o[e+5]]+"-"+Be[o[e+6]]+Be[o[e+7]]+"-"+Be[o[e+8]]+Be[o[e+9]]+"-"+Be[o[e+10]]+Be[o[e+11]]+Be[o[e+12]]+Be[o[e+13]]+Be[o[e+14]]+Be[o[e+15]]).toLowerCase()}function Rb(o){if(!Hp(o))throw TypeError("Invalid UUID");let e,t=new Uint8Array(16);return t[0]=(e=parseInt(o.slice(0,8),16))>>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=e&255,t[4]=(e=parseInt(o.slice(9,13),16))>>>8,t[5]=e&255,t[6]=(e=parseInt(o.slice(14,18),16))>>>8,t[7]=e&255,t[8]=(e=parseInt(o.slice(19,23),16))>>>8,t[9]=e&255,t[10]=(e=parseInt(o.slice(24,36),16))/1099511627776&255,t[11]=e/4294967296&255,t[12]=e>>>24&255,t[13]=e>>>16&255,t[14]=e>>>8&255,t[15]=e&255,t}var Bp=Rb;function Sb(o){o=unescape(encodeURIComponent(o));let e=[];for(let t=0;t<o.length;++t)e.push(o.charCodeAt(t));return e}var Pb="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Ob="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function fu(o,e,t){function i(n,r,s,a){var c;if(typeof n=="string"&&(n=Sb(n)),typeof r=="string"&&(r=Bp(r)),((c=r)===null||c===void 0?void 0:c.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let u=new Uint8Array(16+n.length);if(u.set(r),u.set(n,r.length),u=t(u),u[6]=u[6]&15|e,u[8]=u[8]&63|128,s){a=a||0;for(let l=0;l<16;++l)s[a+l]=u[l];return s}return Fp(u)}try{i.name=o}catch{}return i.DNS=Pb,i.URL=Ob,i}function kb(o,e,t,i){switch(o){case 0:return e&t^~e&i;case 1:return e^t^i;case 2:return e&t^e&i^t&i;case 3:return e^t^i}}function mu(o,e){return o<<e|o>>>32-e}function Mb(o){let e=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof o=="string"){let s=unescape(encodeURIComponent(o));o=[];for(let a=0;a<s.length;++a)o.push(s.charCodeAt(a))}else Array.isArray(o)||(o=Array.prototype.slice.call(o));o.push(128);let i=o.length/4+2,n=Math.ceil(i/16),r=new Array(n);for(let s=0;s<n;++s){let a=new Uint32Array(16);for(let c=0;c<16;++c)a[c]=o[s*64+c*4]<<24|o[s*64+c*4+1]<<16|o[s*64+c*4+2]<<8|o[s*64+c*4+3];r[s]=a}r[n-1][14]=(o.length-1)*8/Math.pow(2,32),r[n-1][14]=Math.floor(r[n-1][14]),r[n-1][15]=(o.length-1)*8&4294967295;for(let s=0;s<n;++s){let a=new Uint32Array(80);for(let g=0;g<16;++g)a[g]=r[s][g];for(let g=16;g<80;++g)a[g]=mu(a[g-3]^a[g-8]^a[g-14]^a[g-16],1);let c=t[0],u=t[1],l=t[2],d=t[3],h=t[4];for(let g=0;g<80;++g){let E=Math.floor(g/20),_=mu(c,5)+kb(E,u,l,d)+h+e[E]+a[g]>>>0;h=d,d=l,l=mu(u,30)>>>0,u=c,c=_}t[0]=t[0]+c>>>0,t[1]=t[1]+u>>>0,t[2]=t[2]+l>>>0,t[3]=t[3]+d>>>0,t[4]=t[4]+h>>>0}return[t[0]>>24&255,t[0]>>16&255,t[0]>>8&255,t[0]&255,t[1]>>24&255,t[1]>>16&255,t[1]>>8&255,t[1]&255,t[2]>>24&255,t[2]>>16&255,t[2]>>8&255,t[2]&255,t[3]>>24&255,t[3]>>16&255,t[3]>>8&255,t[3]&255,t[4]>>24&255,t[4]>>16&255,t[4]>>8&255,t[4]&255]}var Up=Mb;var Ib=fu("v5",80,Up),Ja=Ib;var Za=P("debugcomponents"),Gp="eff8ba80-635d-11ec-90d6-0242ac120003",Se=class{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(e){typeof e=="string"&&(e=Se.hash(e)),this._originalSeed=e,this._seed=e}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e=="string")return Ja(e,Gp);let t=this._seed;return this._seed-=1,Ja(t.toString(),Gp)}initialize(e){typeof e=="string"?this._seed=Se.hash(e):this._seed=e}static createFromString(e){return new Se(this.hash(e))}static hash(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}};var $a=class{guid;constructor(e){this.guid=e}};function So(o,e,t=!0){if(!o)return;let i=o;if(oi(o,t),!e){console.warn("Can not send destroy: No networking connection provided",o.guid);return}if(!e.isConnected){console.warn("Can not send destroy: not connected",o.guid);return}let n=o.guid;if(!n&&i.uuid&&(n=i.uuid),!n){console.warn("Can not send destroy: failed to find guid",o);return}let r=new $a(n);e.send("instance-destroyed",r,2)}function Vp(o,e){let t=new $a(o);e.send("instance-destroyed",t,2)}function zp(o){o.connection.beginListen("instance-destroyed",e=>{Za&&console.log("[Remote] Destroyed",o.scene,e);let t=Hr(e.guid,o.scene);t&&oi(t)})}var gu=class{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;constructor(e,t){this.originalGuid=e,this.guid=t}};function el(o,e,t,i){let n=o;if(!n.guid)return console.warn("Can not instantiate: No guid",n),null;if(e.context||(e.context=G.Current),!e.context)return console.error("Missing network instantiate options / reference to network connection in sync instantiate"),null;let r=e?{...e}:null,{instance:s,seed:a}=Ab(n,e);if(s){let c=s;if(c.guid){Za&&console.log("[Local] new instance","gameobject:",s?.guid);let u=new gu(n.guid,c.guid);u.seed=a,r&&(r.position&&(u.position={x:r.position.x,y:r.position.y,z:r.position.z}),r.rotation&&(u.rotation={x:r.rotation.x,y:r.rotation.y,z:r.rotation.z,w:r.rotation.w}),r.scale&&(u.scale={x:r.scale.x,y:r.scale.y,z:r.scale.z})),u.position||(u.position={x:c.position.x,y:c.position.y,z:c.position.z}),u.rotation||(u.rotation={x:c.quaternion.x,y:c.quaternion.y,z:c.quaternion.z,w:c.quaternion.w}),u.scale||(u.scale={x:c.scale.x,y:c.scale.y,z:c.scale.z}),u.visible=n.visible,r?.parent&&(typeof r.parent=="string"?u.parent=r.parent:u.parent=r.parent.guid),u.hostData=t,i===!1&&(u.dontSave=!0),e?.context?.connection.send("new-instance-created",u)}else console.warn("Missing guid, can not send new instance event",c)}return s}function tl(){return Math.random()*9999999}function Wp(o){o.connection.beginListen("new-instance-created",async e=>{let t=await Db(e.originalGuid,o.scene);if(!t){console.warn("could not find object that was instantiated: "+e.guid);return}let i=new Ue;e.position&&(i.position=new Qs.Vector3(e.position.x,e.position.y,e.position.z)),e.rotation&&(i.rotation=new Qs.Quaternion(e.rotation.x,e.rotation.y,e.rotation.z,e.rotation.w)),e.scale&&(i.scale=new Qs.Vector3(e.scale.x,e.scale.y,e.scale.z)),i.parent=e.parent,e.seed&&(i.idProvider=new Se(e.seed)),i.visible=e.visible,i.context=o,Za&&o.alias&&console.log("[Remote] instantiate in: "+o.alias);let n=Fr(t,i);n&&(e.parent==="scene"&&o.scene.add(n),Za&&console.log("[Remote] new instance","gameobject:",n?.guid,t))})}function Ab(o,e){let t=tl(),i=e??new Ue;i.idProvider=new Se(t);let n=Fr(o,i);return{seed:t,instance:n}}var Np={};function Xp(o,e){Np[o]=e}async function Db(o,e){let t=Np[o];if(t!=null){let i=await t(o);if(i)return i}return Qp(o,e)}function Qp(o,e){if(e===null||!o)return null;if(e.guid===o)return e;if(e.children)for(let t of e.children){let i=Qp(o,t);if(i)return i}return null}var qp=new Map;function Yp(o,e){if(!o)return;if(!e){console.warn("No prototype found",o,o.prototype,o.constructor);return}let t=qp.get(e);t&&t.apply(o)}function Kp(o){let e=Lb(o.prototype);qp.set(o,e)}function Lb(o){return new vu(o)}var vu=class{$symbol;extensions;descriptors;constructor(e){this.$symbol=Symbol("prototype-extension"),this.extensions=Object.keys(e),this.descriptors=new Array;for(let t=0;t<this.extensions.length;t++){let i=this.extensions[t],n=Object.getOwnPropertyDescriptor(e,i);n&&this.descriptors.push(n)}}apply(e){if(!e[this.$symbol]){e[this.$symbol]=!0;for(let t=0;t<this.extensions.length;t++){let i=this.extensions[t],n=this.descriptors[t];n&&Object.defineProperty(e,i,n)}}}};import{Object3D as dt}from"three";var yu=P("debuggetcomponent");function jb(o){return o==null||o.isObject3D?o:o.object&&o.object.isObject3D?o.object:o}function il(o,e){if(!o||!o.userData.components)return;let t=o.userData.components.indexOf(e);t<0||(e.gameObject=null,o.userData.components.splice(t,1))}function nl(o,e){let t=Br(o,e);if(t)return t;let i=new e;return Ht(o,i)}function Ht(o,e,t=!0){o||new Error("Can not add componet to null object"),o.userData||(o.userData={}),o.userData.components||(o.userData.components=[]),o.userData.components.push(e),e.gameObject=o,Mo(o),rl(e);try{e.__internalAwake&&t&&(jr(o),e.__internalAwake())}catch(i){console.error(i)}return e}function Zp(o,e){if(e.gameObject!==o){if(e.gameObject&&e.gameObject.userData.components){let t=e.gameObject.userData.components.indexOf(e);e.gameObject.userData.components.splice(t,1)}if(!o.userData.components)o.userData.components=[];else if(o.userData.components.includes(e))return;o.userData.components.push(e),e.gameObject=o}}function $p(o){if(o.gameObject&&o.gameObject.userData.components){let e=o.gameObject.userData.components.indexOf(o);o.gameObject.userData.components.splice(e,1)}o.__internalDisable&&o.__internalDisable(),o.onDestroy&&o.onDestroy(),gn(o,o.context??G.Current),o.__internalDestroy(),o.gameObject=null}var Jp=!1;function ef(o,e,t){if(o!=null){if(!o.isObject3D){console.error("Object is not object3D");return}if(!o?.userData?.components)return null;if(typeof e=="string"&&(Jp||(Jp=!0,console.warn(`Accessing components by name is not supported.
146
+ }`),I(ri,"blipMaterial",new Tp({uniforms:{map:new Cp(null)},vertexShader:Ro.vertex,fragmentShader:Ro.fragment})),I(ri,"mesh",new fe.Mesh(Ro.planeGeometry,Ro.blipMaterial));function vb(o){return ri.copyTexture(o)}function yb(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}import{Vector3 as _b}from"three";var ZE=Symbol("object"),Ap=new Mi(()=>new _b,20),Ka=class{_point;_normal;distance;impulse;friction;get point(){return Ap.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Ap.get().set(this._normal.x,this._normal.y,this._normal.z)}constructor(e,t,i,n,r){this._point=e,this.distance=t,this._normal=i,this.impulse=n,this.friction=r}},Qs=class{contacts;constructor(e,t,i){this.me=e,this._collider=t,this._gameObject=t.gameObject,this.contacts=i}me;_collider;get collider(){return this._collider}_gameObject;get gameObject(){return this._gameObject}get rigidBody(){return this.collider?.attachedRigidbody}};function Lr(o,e){try{e?o(e):o()}catch(t){return console.error(t),!1}return!0}var ji="__isActiveInHierarchy",jr="builtin_components";var Eb=P("debugnewscripts"),ge=[];function vn(o){if(!(o.new_scripts.length<=0)){if(Eb&&console.log("Register new components",o.new_scripts.length,o.alias?"element: "+o.alias:""),o.new_scripts_pre_setup_callbacks.length>0){for(let e of o.new_scripts_pre_setup_callbacks)!e||e();o.new_scripts_pre_setup_callbacks.length=0}ge.length=0,o.new_scripts.length>0&&ge.push(...o.new_scripts),o.new_scripts.length=0;for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed)continue;if(!t.gameObject){console.error("MISSING GAMEOBJECT - will ignore",t),ge.splice(e,1),e--;continue}t.context=o,Hr(t.gameObject),fu(t,o)}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed){gn(ge[e],o),ge.splice(e,1),e--;continue}if(t.registering)try{t.registering()}catch(i){console.error(i)}t.__internalAwake!==void 0&&(t.gameObject||console.error("MISSING GAMEOBJECT",t,t.gameObject),Hr(t.gameObject),t.activeAndEnabled&&Lr(t.__internalAwake.bind(t)))}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed||t.enabled===!1||(Hr(t.gameObject),t.activeAndEnabled===!1))continue;t.__internalEnable!==void 0&&(t.enabled=!0,Lr(t.__internalEnable.bind(t)))}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed||!t.gameObject)continue;o.new_script_start.push(t)}catch(t){console.error(t),gn(ge[e],o),ge.splice(e,1),e--}ge.length=0;for(let e of o.new_scripts_post_setup_callbacks)e&&e();o.new_scripts_post_setup_callbacks.length=0}}function Dp(o){!o||(o.__internalDisable(),gn(o,o.context))}function Ja(o,e){for(let t=0;t<o.new_script_start.length;t++)try{let i=o.new_script_start[t];if(e!==void 0&&i.gameObject!==e||i.destroyed||i.activeAndEnabled===!1)continue;Lr(i.__internalAwake.bind(i)),Lr(i.__internalEnable.bind(i)),Lr(i.__internalStart.bind(i)),o.new_script_start.splice(t,1),t--}catch(i){console.error(i),gn(o.new_script_start[t],o),o.new_script_start.splice(t,1),t--}}function fu(o,e){e.scripts.indexOf(o)===-1&&(e.scripts.push(o),o.earlyUpdate&&e.scripts_earlyUpdate.push(o),o.update&&e.scripts_update.push(o),o.lateUpdate&&e.scripts_lateUpdate.push(o),o.onBeforeRender&&e.scripts_onBeforeRender.push(o),o.onAfterRender&&e.scripts_onAfterRender.push(o),o.onPausedChanged&&e.scripts_pausedChanged.push(o))}function gn(o,e){mn(o,e.new_scripts),mn(o,e.new_script_start),mn(o,e.scripts),mn(o,e.scripts_earlyUpdate),mn(o,e.scripts_update),mn(o,e.scripts_lateUpdate),mn(o,e.scripts_onBeforeRender),mn(o,e.scripts_onAfterRender),mn(o,e.scripts_pausedChanged),e.stopAllCoroutinesFrom(o)}function mn(o,e){let t=e.indexOf(o);t>=0&&e.splice(t,1)}var Cb={},pu={};function So(o){if(o||(o=G.Current.scene),!o){console.trace("Invalid call - no current context.");return}Lp(o,bn(o),!0)}function Lp(o,e,t){let i=!1,n=bn(o);if(Cb[o.uuid]=n,e&&(e=bn(o)),o[ji]=e,!i){let r=pu[o.uuid];r!==void 0&&r!==e&&t&&Tb(o,s=>{e?(Lr(s.__internalAwake.bind(s)),s.enabled=!0):s.enabled=!1})}if(pu[o.uuid]=e,o.children)for(let r of o.children)Lp(r,e,t)}function Hr(o){let e=!0,t=o,i=!1;for(;t&&t;){if(t.type==="Scene"&&(i=!0),!bn(t)){e=!1;break}t=t.parent}if(!o){console.error("GO is null");return}pu[o.uuid]=e,o[ji]=e&&i}function Tb(o,e){if(o.userData?.components)for(let t of o.userData.components)e(t)}import*as qs from"three";var Hp=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rb(o){return typeof o=="string"&&Hp.test(o)}var Fp=Rb;var Be=[];for(let o=0;o<256;++o)Be.push((o+256).toString(16).slice(1));function Bp(o,e=0){return(Be[o[e+0]]+Be[o[e+1]]+Be[o[e+2]]+Be[o[e+3]]+"-"+Be[o[e+4]]+Be[o[e+5]]+"-"+Be[o[e+6]]+Be[o[e+7]]+"-"+Be[o[e+8]]+Be[o[e+9]]+"-"+Be[o[e+10]]+Be[o[e+11]]+Be[o[e+12]]+Be[o[e+13]]+Be[o[e+14]]+Be[o[e+15]]).toLowerCase()}function Sb(o){if(!Fp(o))throw TypeError("Invalid UUID");let e,t=new Uint8Array(16);return t[0]=(e=parseInt(o.slice(0,8),16))>>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=e&255,t[4]=(e=parseInt(o.slice(9,13),16))>>>8,t[5]=e&255,t[6]=(e=parseInt(o.slice(14,18),16))>>>8,t[7]=e&255,t[8]=(e=parseInt(o.slice(19,23),16))>>>8,t[9]=e&255,t[10]=(e=parseInt(o.slice(24,36),16))/1099511627776&255,t[11]=e/4294967296&255,t[12]=e>>>24&255,t[13]=e>>>16&255,t[14]=e>>>8&255,t[15]=e&255,t}var Up=Sb;function Pb(o){o=unescape(encodeURIComponent(o));let e=[];for(let t=0;t<o.length;++t)e.push(o.charCodeAt(t));return e}var Ob="6ba7b810-9dad-11d1-80b4-00c04fd430c8",kb="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function mu(o,e,t){function i(n,r,s,a){var c;if(typeof n=="string"&&(n=Pb(n)),typeof r=="string"&&(r=Up(r)),((c=r)===null||c===void 0?void 0:c.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let u=new Uint8Array(16+n.length);if(u.set(r),u.set(n,r.length),u=t(u),u[6]=u[6]&15|e,u[8]=u[8]&63|128,s){a=a||0;for(let l=0;l<16;++l)s[a+l]=u[l];return s}return Bp(u)}try{i.name=o}catch{}return i.DNS=Ob,i.URL=kb,i}function Mb(o,e,t,i){switch(o){case 0:return e&t^~e&i;case 1:return e^t^i;case 2:return e&t^e&i^t&i;case 3:return e^t^i}}function gu(o,e){return o<<e|o>>>32-e}function Ib(o){let e=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof o=="string"){let s=unescape(encodeURIComponent(o));o=[];for(let a=0;a<s.length;++a)o.push(s.charCodeAt(a))}else Array.isArray(o)||(o=Array.prototype.slice.call(o));o.push(128);let i=o.length/4+2,n=Math.ceil(i/16),r=new Array(n);for(let s=0;s<n;++s){let a=new Uint32Array(16);for(let c=0;c<16;++c)a[c]=o[s*64+c*4]<<24|o[s*64+c*4+1]<<16|o[s*64+c*4+2]<<8|o[s*64+c*4+3];r[s]=a}r[n-1][14]=(o.length-1)*8/Math.pow(2,32),r[n-1][14]=Math.floor(r[n-1][14]),r[n-1][15]=(o.length-1)*8&4294967295;for(let s=0;s<n;++s){let a=new Uint32Array(80);for(let g=0;g<16;++g)a[g]=r[s][g];for(let g=16;g<80;++g)a[g]=gu(a[g-3]^a[g-8]^a[g-14]^a[g-16],1);let c=t[0],u=t[1],l=t[2],d=t[3],h=t[4];for(let g=0;g<80;++g){let E=Math.floor(g/20),_=gu(c,5)+Mb(E,u,l,d)+h+e[E]+a[g]>>>0;h=d,d=l,l=gu(u,30)>>>0,u=c,c=_}t[0]=t[0]+c>>>0,t[1]=t[1]+u>>>0,t[2]=t[2]+l>>>0,t[3]=t[3]+d>>>0,t[4]=t[4]+h>>>0}return[t[0]>>24&255,t[0]>>16&255,t[0]>>8&255,t[0]&255,t[1]>>24&255,t[1]>>16&255,t[1]>>8&255,t[1]&255,t[2]>>24&255,t[2]>>16&255,t[2]>>8&255,t[2]&255,t[3]>>24&255,t[3]>>16&255,t[3]>>8&255,t[3]&255,t[4]>>24&255,t[4]>>16&255,t[4]>>8&255,t[4]&255]}var Gp=Ib;var Ab=mu("v5",80,Gp),Za=Ab;var $a=P("debugcomponents"),Vp="eff8ba80-635d-11ec-90d6-0242ac120003",Se=class{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(e){typeof e=="string"&&(e=Se.hash(e)),this._originalSeed=e,this._seed=e}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e=="string")return Za(e,Vp);let t=this._seed;return this._seed-=1,Za(t.toString(),Vp)}initialize(e){typeof e=="string"?this._seed=Se.hash(e):this._seed=e}static createFromString(e){return new Se(this.hash(e))}static hash(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}};var el=class{guid;constructor(e){this.guid=e}};function Po(o,e,t=!0){if(!o)return;let i=o;if(oi(o,t),!e){console.warn("Can not send destroy: No networking connection provided",o.guid);return}if(!e.isConnected){console.warn("Can not send destroy: not connected",o.guid);return}let n=o.guid;if(!n&&i.uuid&&(n=i.uuid),!n){console.warn("Can not send destroy: failed to find guid",o);return}let r=new el(n);e.send("instance-destroyed",r,2)}function zp(o,e){let t=new el(o);e.send("instance-destroyed",t,2)}function Wp(o){o.connection.beginListen("instance-destroyed",e=>{$a&&console.log("[Remote] Destroyed",o.scene,e);let t=Fr(e.guid,o.scene);t&&oi(t)})}var bu=class{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;constructor(e,t){this.originalGuid=e,this.guid=t}};function tl(o,e,t,i){let n=o;if(!n.guid)return console.warn("Can not instantiate: No guid",n),null;if(e.context||(e.context=G.Current),!e.context)return console.error("Missing network instantiate options / reference to network connection in sync instantiate"),null;let r=e?{...e}:null,{instance:s,seed:a}=Db(n,e);if(s){let c=s;if(c.guid){$a&&console.log("[Local] new instance","gameobject:",s?.guid);let u=new bu(n.guid,c.guid);u.seed=a,r&&(r.position&&(u.position={x:r.position.x,y:r.position.y,z:r.position.z}),r.rotation&&(u.rotation={x:r.rotation.x,y:r.rotation.y,z:r.rotation.z,w:r.rotation.w}),r.scale&&(u.scale={x:r.scale.x,y:r.scale.y,z:r.scale.z})),u.position||(u.position={x:c.position.x,y:c.position.y,z:c.position.z}),u.rotation||(u.rotation={x:c.quaternion.x,y:c.quaternion.y,z:c.quaternion.z,w:c.quaternion.w}),u.scale||(u.scale={x:c.scale.x,y:c.scale.y,z:c.scale.z}),u.visible=n.visible,r?.parent&&(typeof r.parent=="string"?u.parent=r.parent:u.parent=r.parent.guid),u.hostData=t,i===!1&&(u.dontSave=!0),e?.context?.connection.send("new-instance-created",u)}else console.warn("Missing guid, can not send new instance event",c)}return s}function il(){return Math.random()*9999999}function Np(o){o.connection.beginListen("new-instance-created",async e=>{let t=await Lb(e.originalGuid,o.scene);if(!t){console.warn("could not find object that was instantiated: "+e.guid);return}let i=new Ue;e.position&&(i.position=new qs.Vector3(e.position.x,e.position.y,e.position.z)),e.rotation&&(i.rotation=new qs.Quaternion(e.rotation.x,e.rotation.y,e.rotation.z,e.rotation.w)),e.scale&&(i.scale=new qs.Vector3(e.scale.x,e.scale.y,e.scale.z)),i.parent=e.parent,e.seed&&(i.idProvider=new Se(e.seed)),i.visible=e.visible,i.context=o,$a&&o.alias&&console.log("[Remote] instantiate in: "+o.alias);let n=Br(t,i);n&&(e.parent==="scene"&&o.scene.add(n),$a&&console.log("[Remote] new instance","gameobject:",n?.guid,t))})}function Db(o,e){let t=il(),i=e??new Ue;i.idProvider=new Se(t);let n=Br(o,i);return{seed:t,instance:n}}var Xp={};function Qp(o,e){Xp[o]=e}async function Lb(o,e){let t=Xp[o];if(t!=null){let i=await t(o);if(i)return i}return qp(o,e)}function qp(o,e){if(e===null||!o)return null;if(e.guid===o)return e;if(e.children)for(let t of e.children){let i=qp(o,t);if(i)return i}return null}var Yp=new Map;function Kp(o,e){if(!o)return;if(!e){console.warn("No prototype found",o,o.prototype,o.constructor);return}let t=Yp.get(e);t&&t.apply(o)}function Jp(o){let e=jb(o.prototype);Yp.set(o,e)}function jb(o){return new yu(o)}var yu=class{$symbol;extensions;descriptors;constructor(e){this.$symbol=Symbol("prototype-extension"),this.extensions=Object.keys(e),this.descriptors=new Array;for(let t=0;t<this.extensions.length;t++){let i=this.extensions[t],n=Object.getOwnPropertyDescriptor(e,i);n&&this.descriptors.push(n)}}apply(e){if(!e[this.$symbol]){e[this.$symbol]=!0;for(let t=0;t<this.extensions.length;t++){let i=this.extensions[t],n=this.descriptors[t];n&&Object.defineProperty(e,i,n)}}}};import{Object3D as dt}from"three";var _u=P("debuggetcomponent");function Hb(o){return o==null||o.isObject3D?o:o.object&&o.object.isObject3D?o.object:o}function nl(o,e){if(!o||!o.userData.components)return;let t=o.userData.components.indexOf(e);t<0||(e.gameObject=null,o.userData.components.splice(t,1))}function rl(o,e){let t=Ur(o,e);if(t)return t;let i=new e;return Ht(o,i)}function Ht(o,e,t=!0){o||new Error("Can not add componet to null object"),o.userData||(o.userData={}),o.userData.components||(o.userData.components=[]),o.userData.components.push(e),e.gameObject=o,Io(o),ol(e);try{e.__internalAwake&&t&&(Hr(o),e.__internalAwake())}catch(i){console.error(i)}return e}function $p(o,e){if(e.gameObject!==o){if(e.gameObject&&e.gameObject.userData.components){let t=e.gameObject.userData.components.indexOf(e);e.gameObject.userData.components.splice(t,1)}if(!o.userData.components)o.userData.components=[];else if(o.userData.components.includes(e))return;o.userData.components.push(e),e.gameObject=o}}function ef(o){if(o.gameObject&&o.gameObject.userData.components){let e=o.gameObject.userData.components.indexOf(o);o.gameObject.userData.components.splice(e,1)}o.__internalDisable&&o.__internalDisable(),o.onDestroy&&o.onDestroy(),gn(o,o.context??G.Current),o.__internalDestroy(),o.gameObject=null}var Zp=!1;function tf(o,e,t){if(o!=null){if(!o.isObject3D){console.error("Object is not object3D");return}if(!o?.userData?.components)return null;if(typeof e=="string"&&(Zp||(Zp=!0,console.warn(`Accessing components by name is not supported.
147
147
  Please use the component type instead. This may keep working in local development but it will fail when bundling your application.
148
148
 
149
149
  You can import other modules your main module to get access to types
150
150
  or if you use npmdefs you can make types available globally using globalThis:
151
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis`,e))),yu&&console.log("FIND",e),e!=null){for(let i=0;i<o.userData.components.length;i++){let n=o.userData.components[i];if(e===null||n.constructor.name===e.name||n.constructor.name===e)if(yu&&console.log("MATCH BY NAME",n),t)t.push(n);else return n}for(let i=0;i<o.userData.components.length;i++){let n=o.userData.components[i],r=Object.getPrototypeOf(n.constructor);do{if(r===e)if(yu&&console.log("MATCH BY PROTOYPE",r),t)t.push(n);else return n;r=Object.getPrototypeOf(r)}while(r)}return t}}}function Br(o,e){return ef(o,e)}function Oo(o,e,t){return t||(t=[]),ef(o,e,t)}function Qn(o,e,t){let i=Br(o,e);if(t===!1&&i?.enabled===!1)return null;if(i)return i;for(let n=0;n<o?.children?.length;n++){let r=Qn(o.children[n],e);if(r)return r}return null}function ko(o,e,t){t||(t=[]),Oo(o,e,t);for(let i=0;i<o?.children?.length;i++)ko(o.children[i],e,t);return t}function Po(o,e){if(!o)return null;if(Array.isArray(o)){for(let i=0;i<o.length;i++){let n=jb(o[i]),r=Po(n,e);if(r)return r}return null}let t=Br(o,e);return t||(o.parent?Po(o.parent,e):null)}function qs(o,e,t){return t||(t=[]),o?(Oo(o,e,t),o.parent?qs(o.parent,e,t):t):t}function tf(o,e,t){if(!o)return null;if(!e&&(e=G.Current,!e))return console.error("Can not search object without any needle context or scene!!!"),null;let i=e;if(i.isScene||(i=e?.scene),!i)return null;for(let n in i.children){let r=i.children[n];if(t===!1&&r[ji]===!1)continue;if(r.constructor==o)return r;let s=Qn(r,o);if(s)return s}return null}function nf(o,e,t){if(!o)return e;if(!t&&(t=G.Current,!t))return console.error("Can not search object without any needle context or scene!!!"),e;let i=t.isScene===!0||t.isObject3D===!0?t:t?.scene;if(!i)return e;for(let n in i.children){let r=i.children[n];if(r.constructor==o)return r;ko(r,o,e)}return e}function Mo(o){o&&o.isObject3D===!0&&Yp(o,dt)}dt.prototype.SetActive=function(o){this.visible=o};dt.prototype.addNewComponent=function(o){return Ht(this,new o)};dt.prototype.removeComponent=function(o){return il(this,o)};dt.prototype.getOrAddComponent=function(o){return nl(this,o)};dt.prototype.getComponent=function(o){return Br(this,o)};dt.prototype.getComponents=function(o,e){return Oo(this,o,e)};dt.prototype.getComponentInChildren=function(o){return Qn(this,o)};dt.prototype.getComponentsInChildren=function(o,e){return ko(this,o,e)};dt.prototype.getComponentInParent=function(o){return Po(this,o)};dt.prototype.getComponentsInParent=function(o,e){return qs(this,o,e)};Object.getOwnPropertyDescriptor(dt.prototype,"activeSelf")||Object.defineProperty(dt.prototype,"activeSelf",{get:function(){return bn(this)},set:function(o){Io(this,o,!0)}});Kp(dt);var ol=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),re=class{static isUsingInstancing(e){return e.__isUsingInstancing===!0}static markDirty(e,t=!0){if(!!e&&(this.isUsingInstancing(e)&&(e[ol]=!0,e.matrixWorldNeedsUpdate=!0),t))for(let i of e.children)re.markDirty(i,!0)}};var Ur=P("debuggetcomponent"),Hb=(u=>(u[u.None=0]="None",u[u.HideInHierarchy=1]="HideInHierarchy",u[u.HideInInspector=2]="HideInInspector",u[u.DontSaveInEditor=4]="DontSaveInEditor",u[u.NotEditable=8]="NotEditable",u[u.DontSaveInBuild=16]="DontSaveInBuild",u[u.DontUnloadUnusedAsset=32]="DontUnloadUnusedAsset",u[u.DontSave=52]="DontSave",u[u.HideAndDontSave=61]="HideAndDontSave",u))(Hb||{}),Ue=class{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context},Ys=Symbol("isActive");function bn(o){let e=o.visible||sl(o);return o[Ys]===void 0&&(o[Ys]=!0),o[Ys]&&e}function Io(o,e,t=!0){return typeof e=="number"&&(e=e>.5),o[Ys]=e,t&&(o.visible=e),o[Ys]}function of(o){return o[ji]||sl(o)}function sf(o,e){o.__isUsingInstancing=e}function sl(o){return re.isUsingInstancing(o)}function Hr(o,e){return dn(o,e,!0,!0)}function oi(o,e=!0,t=!0){let i=o;if(i.isComponent){i.__internalDisable(),i.__internalDestroy();return}let n=o;if(Ur&&console.log(n),e&&n.children)for(let s of n.children)oi(s,e,!1);let r=n.userData.components;if(r){let s=r.length;for(let a=0;a<r.length;a++){let c=r[a];c.__internalDisable(),c.__internalDestroy(),r.length<s&&(s=r.length,a--)}}t&&n.removeFromParent()}function si(o,e,t=!0){if(!!o){if(o.isObject3D||new Error("Expected Object3D but got "+o),o.userData?.components)for(let i=0;i<o.userData.components.length;i++){let n=o.userData.components[i];if(n?.isComponent===!0){let r=e(n);if(r!==void 0)return r}}if(t&&o.children)for(let i=0;i<o.children.length;i++){let n=o.children[i];if(!n)continue;let r=si(n,e,t);if(r!==void 0)return r}}}function Fr(o,e=null){if(o===null)return null;let t=null;e!==null&&(e.x!==void 0?(t=new Ue,t.position=e):t=e);let i=G.Current;t?.context&&(i=t.context),Ur&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new Se(Date.now()));let n=[],r={},s={},a=af(i,o,t,n,r,s);a&&(Bb(r),Fb(s,r)),Ur&&(Ns(o,!0),Ns(a,!0));let c={};for(let u in n){let l=n[u],d=l.guid;t&&t.idProvider&&(l.guid=t.idProvider.generateUUID(),c[d]=l.guid,Ur&&console.log(l.name,l.guid)),rl(l,i),l.__internalNewInstanceCreated&&l.__internalNewInstanceCreated()}for(let u in n){let l=n[u];l.resolveGuids&&l.resolveGuids(c),l.enabled!==!1&&(l.enabled=!0)}return vn(i),a}function af(o,e,t,i,n,r){if(!e)return null;let s=e.userData;e.userData={};let a=e.children;e.children=[];let c;if(c=e.clone(!1),Mo(c),e.userData=s,e.children=a,n[e.uuid]={original:e,clone:c},e.type==="SkinnedMesh"&&(r[e.uuid]={original:e,clone:c}),t?.visible!==void 0&&(c.visible=t.visible),t?.idProvider){c.uuid=t.idProvider.generateUUID();let l=c;l&&(l.guid=c.uuid)}e.animations&&e.animations.length>0&&(c.animations=[...e.animations]);let u=e.parent;if(u&&u.add(c),t?.position?te(c,t.position):c.position.copy(e.position),t?.rotation?$e(c,t.rotation):c.quaternion.copy(e.quaternion),t?.scale?c.scale.copy(t.scale):c.scale.copy(e.scale),t?.parent&&t.parent!=="scene"){let l=null;if(typeof t.parent=="string"?l=dn(t.parent,o.scene,!0):l=t.parent,l){let d=t.keepWorldPosition===!0?l.attach:l.add;d?d.call(l,c):console.error("Invalid parent object",l,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(let[l,d]of Object.entries(e.userData))l!=="components"&&(c.userData[l]=d);if(e.userData?.components){let l=e.userData.components,d=[];c.userData.components=d;for(let h=0;h<l.length;h++){let g=l[h],E=Object.create(g);jt(E,g),d.push(E),E.gameObject=c,i.push(E)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0);for(let l in e.children){let d=e.children[l],h=af(o,d,t,i,n,r);h&&c.add(h)}return c}function Fb(o,e){for(let t in o){let i=o[t],n=i.original,r=n.skeleton,s=i.clone;if(!r){console.warn("Skinned mesh has no skeleton?",i);continue}let a=r.bones,c=s.skeleton.clone();s.skeleton=c,s.bindMatrix.clone().copy(n.bindMatrix),s.bindMatrixInverse.copy(n.bindMatrixInverse);let u=[];c.bones=u;for(let l=0;l<a.length;l++){let d=a[l],g=e[d.uuid].clone;u.push(g)}}for(let t in o){let i=o[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function Bb(o){for(let e in o){let i=o[e].clone;if(i.userData?.components)for(let n=0;n<i.userData.components.length;n++){let r=i.userData.components[n],s=Object.entries(r);for(let[a,c]of s)if(Array.isArray(c)){let u=[];r[a]=u;for(let l=0;l<c.length;l++){let d=c[l];if(typeof d!="object"){u.push(d);continue}let h=rf(r,a,d,o);h!==void 0?u.push(h):u.push(d)}}else if(typeof c=="object"){let u=rf(r,a,c,o);u!==void 0&&(r[a]=u)}}}}function rf(o,e,t,i){if(t!=null){if(t.isComponent===!0){let n=t.gameObject;if(n){let r=n.uuid,s=i[r]?.clone;if(!s){Ur&&console.log("reference did not change",e,o,t);return}let a=n.userData.components.indexOf(t);if(a>=0)return Ur&&console.log(e,r),s.userData.components[a];console.warn("could not find component",e,t)}}else if(t.isObject3D===!0){if(e==="gameObject")return;let n=t;if(n){let r=n.uuid,s=i[r]?.clone;if(s)return Ur&&console.log(e,"old",t,"new",s),s}}else if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone()}}import yn,{ActiveEvents as av,CoefficientCombineRule as _n,Collider as lv,ColliderDesc as Ks,EventQueue as cv,JointData as uv,RigidBody as dv,RigidBodyType as Eu,World as hv}from"@dimforge/rapier3d-compat";import{BufferAttribute as Ub,Line as Gb,BoxGeometry as df,EdgesGeometry as Vb,Color as zb,LineSegments as Wb,LineBasicMaterial as Nb,Mesh as _u,SphereGeometry as Xb,Vector3 as xu,Quaternion as Qb,CylinderGeometry as qb}from"three";var et=new xu,lf=new xu,cf=new Qb,qn=8947848,Et=class{static DrawRay(e,t,i=qn,n=0,r=!0){let s=Ge.getLine(n),a=s.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),et.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+et.x,e.y+et.y,e.z+et.z),a.needsUpdate=!0,s.material.color.set(i),s.material.depthTest=r}static DrawDirection(e,t,i=qn,n=0,r=!0,s=1){let a=Ge.getLine(n),c=a.geometry.getAttribute("position");c.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(et.set(0,0,-s),cf.set(t.x,t.y,t.z,t.w),et.applyQuaternion(cf)):(et.set(t.x,t.y,t.z),et.multiplyScalar(s)),c.setXYZ(1,e.x+et.x,e.y+et.y,e.z+et.z),c.needsUpdate=!0,a.material.color.set(i),a.material.depthTest=r}static DrawLine(e,t,i=qn,n=0,r=!0){let s=Ge.getLine(n),a=s.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,s.material.color.set(i),s.material.depthTest=r}static DrawWireSphere(e,t,i=qn,n=0,r=!0){let s=Ge.getSphere(t,n,!0);fn(s,e.x,e.y,e.z),s.material.color.set(i),s.material.depthTest=r}static DrawSphere(e,t,i=qn,n=0,r=!0){let s=Ge.getSphere(t,n,!1);fn(s,e.x,e.y,e.z),s.material.color.set(i),s.material.depthTest=r}static DrawBox(e,t,i=qn,n=0,r=!0){let s=Ge.getBox(n);s.position.set(e.x,e.y,e.z),s.scale.set(t.x,t.y,t.z),s.material.color.set(i),s.material.depthTest=r,s.material.wireframe=!0}static DrawBox3(e,t=qn,i=0,n=!0){let r=Ge.getBox(i);r.position.copy(e.getCenter(et)),r.scale.copy(e.getSize(et)),r.material.color.set(t),r.material.depthTest=n,r.material.wireframe=!0}static DrawArrow(e,t,i=qn,n=0,r=!0,s=!1){let a=Ge.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),et.set(t.x,t.y,t.z).sub(lf.set(e.x,e.y,e.z)).normalize());let u=et.set(t.x,t.y,t.z).sub(lf.set(e.x,e.y,e.z)).length()*.1;a.scale.set(u,u,u),a.material.color.set(i),a.material.depthTest=r,a.material.wireframe=s,this.DrawLine(e,t,i,n,r)}};I(Et,"_up",new xu(0,1,0));var Yb=new df(1,1,1);function al(o=null){let e=new zb(o??14540253),t=new Vb(Yb);return new Wb(t,new Nb({color:e}))}var uf=Symbol("GizmoCache"),Ge=class{static getBox(e){let t=this.boxesCache.pop();if(!t){let i=new df(1,1,1);t=new _u(i)}return this.registerTimedObject(G.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new Gb;let i=t.geometry.getAttribute("position");i||(i=new Ub(new Float32Array(2*3),3),t.geometry.setAttribute("position",i))}return this.registerTimedObject(G.Current,t,e,this.linesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new _u(new Xb(.5,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(G.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new _u(new qb(0,.5,1,8))),this.registerTimedObject(G.Current,t,e,this.arrowHeadsCache),t}static registerTimedObject(e,t,i,n){if(!this.contextPostRenderCallbacks.get(e)){let r=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,r),e.post_render_callbacks.push(r)}t[uf]=n,this.timedObjectsBuffer.push(t),this.timesBuffer.push(G.Current.time.time+i),e.scene.add(t)}static onPostRender(e,t,i){let n=e.time.time;for(let r=0;r<t.length;r++)if(n>i[r]){let s=t[r];s[uf].push(s),e.scene.remove(s),t.splice(r,1),i.splice(r,1)}}};I(Ge,"linesCache",[]),I(Ge,"spheresCache",[]),I(Ge,"boxesCache",[]),I(Ge,"arrowHeadsCache",[]),I(Ge,"timedObjectsBuffer",new Array),I(Ge,"timesBuffer",new Array),I(Ge,"contextPostRenderCallbacks",new Map);var Ao=P("debugphysics"),Cu=P("debugphysicscolliders"),Tu=P("debugcollisions"),pv=P("showcolliders"),Do=Symbol("needle component"),Ft=Symbol("physics body"),fv=Symbol("rigidbody"),xe=class{ray=void 0;cam=void 0;screenPoint=void 0;raycaster=void 0;results=void 0;targets=void 0;recursive=!0;minDistance=void 0;maxDistance=void 0;lineThreshold=void 0;layerMask=void 0;ignore=void 0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new sv),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setMask(e){this.layerMask||(this.layerMask=new Ru);let t=this.layerMask;t?t.mask=e:this.layerMask=e}};I(xe,"AllLayers",4294967295);var Su=class{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}},Gr=class{raycaster=new rv;defaultRaycastOptions=new xe;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:0},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new Ru;sphereOverlap(e,t,i=!0){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;let n=new ov(e,t),r=this.sphereMask;r.enableAll(),r.disable(2);for(let s of this.context.scene.children)this.onSphereOverlap(s,n,r,this.sphereResults,i);return this.sphereResults.sort((s,a)=>s.distance-a.distance)}tempBoundingBox=new Zb;onSphereOverlap(e,t,i,n,r){if(e.type==="Mesh"&&e.layers.test(i)){let s=e,a=s.geometry;if(a.boundingBox||a.computeBoundingBox(),a.boundingBox){s.matrixWorldNeedsUpdate&&s.updateMatrixWorld();let c=this.tempBoundingBox.copy(a.boundingBox).applyMatrix4(s.matrixWorld);if(t.intersectsBox(c)){let l=B(e).distanceTo(t.center),d=new Su(e,l,t.center.clone());if(n.push(d),!r)return}}}if(e.children)for(let s of e.children){let a=n.length;if(this.onSphereOverlap(s,t,i,n,r),a!=n.length&&!r)return}}raycastFromRay(e,t=null){let i=t??this.defaultRaycastOptions;return i.ray=e,this.raycast(i)}raycast(e=null){e||(e=this.defaultRaycastOptions);let t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold?i.params.Line={threshold:e.lineThreshold}:i.params.Line={threshold:0},e.ray)i.ray.copy(e.ray);else{let a=e.cam??this.context.mainCamera;if(!a)return console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n[0]=this.context.scene);let r=e.results;r||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),r=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof Ru?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),r.length=0,i.intersectObjects(n,e.recursive,r);let s=e.ignore;return s!==void 0&&s.length>0&&(r=r.filter(a=>!s.includes(a.object))),r}rapierRay=new yn.Ray({x:0,y:0,z:0},{x:0,y:0,z:1});raycastVectorsBuffer=new Mi(()=>new wu,10);raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){let r=this.getPhysicsRay(this.rapierRay,e,t);if(!r)return null;let s=this.world?.castRay(r,i,n);if(s){let a=r.pointAt(s.toi),c=this.raycastVectorsBuffer.get();return c.set(a.x,a.y,a.z),{point:c,collider:s.collider[Do]}}return null}getPhysicsRay(e,t,i=void 0){let n=this.context.mainCamera;if(t.z===void 0){if(!n)return console.error("Can not perform raycast from 2d point - no main camera found"),null;let a=this.raycastVectorsBuffer.get();(t.x>1||t.y>1||t.y<-1||t.x<-1)&&this.context.input.convertScreenspaceToRaycastSpace(t),a.set(t.x,t.y,-1),a.unproject(n),t=a}let r=t;e.origin.x=r.x,e.origin.y=r.y,e.origin.z=r.z;let s=this.raycastVectorsBuffer.get();if(i)s.set(i.x,i.y,i.z);else{if(!n)return console.error("Can not perform raycast - no camera found"),null;s.set(e.origin.x,e.origin.y,e.origin.z);let a=B(n);s.sub(a)}return s.normalize(),e.dir.x=s.x,e.dir.y=s.y,e.dir.z=s.z,e}_tempPosition=new wu;_tempQuaternion=new nv;_tempScale=new wu;_tempMatrix=new iv;_isUpdatingPhysicsWorld=!1;get isUpdating(){return this._isUpdatingPhysicsWorld}context;world;_hasCreatedWorld=!1;eventQueue;collisionHandler;objects=[];bodies=[];_meshCache=new Map;constructor(e){this.context=e}async createWorld(){if(this._hasCreatedWorld){console.error("Invalid call to create physics world: world is already created");return}this._hasCreatedWorld=!0,Gr._didLoadPhysicsEngine||(await yn.init().then(()=>yn),Gr._didLoadPhysicsEngine=!0);let e={x:0,y:-9.81,z:0};this.world=new hv(e)}clearCaches(){this._meshCache.clear()}addBoxCollider(e,t,i){let n=e.gameObject,r=Ae(n,this._tempPosition).multiply(i);r.multiplyScalar(.5);let s=Ks.cuboid(r.x,r.y,r.z);this.createCollider(e,s,t)}addSphereCollider(e,t,i){let n=e.gameObject,r=Ae(n,this._tempPosition).multiplyScalar(i),s=Ks.ball(r.x);this.createCollider(e,s,t)}addCapsuleCollider(e,t,i,n){let r=e.gameObject,s=Ae(r,this._tempPosition);Ao&&console.log("capsule scale",s,i,n);let a=Ks.capsule(i*.5*s.y-n,n*s.x);this.createCollider(e,a,t)}addMeshCollider(e,t,i,n){let r=t.geometry;if(!r){Ao&&console.warn("Missing mesh geometry",t.name);return}let s=r.getAttribute("position").array,a=r.index?.array;if(Math.abs(n.x-1)>1e-4||Math.abs(n.y-1)>1e-4||Math.abs(n.z-1)>1e-4){let u=r.uuid+"_"+n.x+"_"+n.y+"_"+n.z+"_"+i;if(this._meshCache.has(u))s=this._meshCache.get(u);else{console.warn("Your model is using scaled mesh colliders which is not optimal for performance",t.name,Object.assign({},n),t);let l=new Float32Array(s.length);for(let d=0;d<s.length;d+=3)l[d]=s[d]*n.x,l[d+1]=s[d+1]*n.y,l[d+2]=s[d+2]*n.z;s=l,this._meshCache.set(u,l)}}let c=i?Ks.convexMesh(s):Ks.trimesh(s,a);c&&this.createCollider(e,c).setMassProperties(1,{x:0,y:0,z:0},{x:0,y:0,z:0},{x:0,y:0,z:0,w:1})}createCollider(e,t,i){if(!this.world)throw new Error("Physics world not initialized");let n=this._tempMatrix,{rigidBody:r,useExplicitMassProperties:s}=this.getRigidbody(e,this._tempMatrix);n.decompose(this._tempPosition,this._tempQuaternion,this._tempScale),Ae(e.gameObject,this._tempScale),i&&(i.multiply(this._tempScale),this._tempPosition.x-=i.x,this._tempPosition.y+=i.y,this._tempPosition.z+=i.z),t.setTranslation(this._tempPosition.x,this._tempPosition.y,this._tempPosition.z),t.setRotation(this._tempQuaternion),t.setSensor(e.isTrigger);let a=e.sharedMaterial;if(a){switch(_n,t.setRestitution(a.bounciness),a.bounceCombine){case 0:t.setRestitutionCombineRule(_n.Average);break;case 3:t.setRestitutionCombineRule(_n.Max);break;case 2:t.setRestitutionCombineRule(_n.Min);break;case 1:t.setRestitutionCombineRule(_n.Multiply);break}switch(t.setFriction(a.dynamicFriction),a.frictionCombine){case 0:t.setFrictionCombineRule(_n.Average);break;case 3:t.setFrictionCombineRule(_n.Max);break;case 2:t.setFrictionCombineRule(_n.Min);break;case 1:t.setFrictionCombineRule(_n.Multiply);break}}let c=this.world.createCollider(t,r);return c[Do]=e,e[Ft]=c,c.setActiveEvents(av.COLLISION_EVENTS),this.objects.push(e),this.bodies.push(c),c}getRigidbody(e,t){if(!this.world)throw new Error("Physics world not initialized");let i=null,n=!1;if(e.attachedRigidbody){let r=e.attachedRigidbody;if(i=r[Ft],n=!0,!i){let s=r.isKinematic&&!Cu;Ao&&console.log("Create rigidbody",s);let a=s?yn.RigidBodyDesc.kinematicPositionBased():yn.RigidBodyDesc.dynamic(),c=B(e.attachedRigidbody.gameObject);a.setTranslation(c.x,c.y,c.z),a.setRotation(me(e.attachedRigidbody.gameObject)),i=this.world.createRigidBody(a),this.bodies.push(i),this.objects.push(r)}i[Do]=r,r[Ft]=i,this.internalUpdateProperties(r,i),this.getRigidbodyRelativeMatrix(e.gameObject,r.gameObject,t)}else{let r=yn.RigidBodyDesc.kinematicPositionBased(),s=B(e.gameObject);r.setTranslation(s.x,s.y,s.z),r.setRotation(me(e.gameObject)),i=this.world.createRigidBody(r),t.identity(),i[Do]=null}return e[fv]=i,{rigidBody:i,useExplicitMassProperties:n}}removeBody(e){let t=e[Ft];if(e[Ft]=null,t&&this.world){let i=this.objects.findIndex(n=>n===e);if(i>=0){let n=this.bodies[i];if(this.bodies.splice(i,1),this.objects.splice(i,1),n instanceof lv){let r=n;this.world?.removeCollider(r,!0);let s=r.parent();s&&s.numColliders()<=0&&this.world?.removeRigidBody(s)}else n instanceof dv}}}updateBody(e,t,i){if(!(e.destroyed||!e.gameObject)&&!(!t&&!i))if(e.isCollider===!0)console.warn("TODO: implement updating collider position");else{let n=e,r=n[Ft];r&&this.syncPhysicsBody(n.gameObject,r,t,i)}}updateProperties(e){let t=e[Ft];t&&this.internalUpdateProperties(e,t)}internal_getRigidbody(e){return e[Ft]}internalUpdateProperties(e,t){t.enableCcd(e.collisionDetectionMode!==0),t.setLinearDamping(e.drag),t.setAngularDamping(e.angularDrag),t.setGravityScale(e.useGravity?e.gravityScale:0,!0),t.setEnabledRotations(!e.lockRotationX,!e.lockRotationY,!e.lockRotationZ,!0),t.setEnabledTranslations(!e.lockPositionX,!e.lockPositionY,!e.lockPositionZ,!0),e.isKinematic?t.setBodyType(yn.RigidBodyType.KinematicPositionBased):t.setBodyType(yn.RigidBodyType.Dynamic)}lines;step(e){!this.world||(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new cv(!1)),e&&(this.world.timestep=H.lerp(this.world.timestep,e,.8)),this.world.step(this.eventQueue),this._isUpdatingPhysicsWorld=!1,this.updateDebugRendering(this.world))}updateDebugRendering(e){if(Ao||Cu||pv){if(!this.lines){let i=new ev({color:2258688}),n=new $b;this.lines=new tv(n,i),this.context.scene.add(this.lines)}let t=e.debugRender();this.lines.geometry.setAttribute("position",new hf(t.vertices,3)),this.lines.geometry.setAttribute("color",new hf(t.colors,4))}}postStep(){!this.world||(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new Pu(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()))}syncObjects(){if(!Cu)for(let e=0;e<this.bodies.length;e++){let t=this.objects[e],i=this.bodies[e],n=t;if(n?.isCollider===!0&&!n.attachedRigidbody){let c=i.parent();c&&this.syncPhysicsBody(t.gameObject,c,!0,!0);continue}let r=i.translation(),s=i.rotation(),a=t.center;if(a&&a.isVector3){this._tempQuaternion.set(s.x,s.y,s.z,s.w);let c=this._tempPosition.copy(a).applyQuaternion(this._tempQuaternion),u=Ae(t.gameObject);c.multiply(u),r.x-=c.x,r.y-=c.y,r.z-=c.z}fn(t.gameObject,r.x,r.y,r.z),Op(t.gameObject,s.x,s.y,s.z,s.w)}}syncPhysicsBody(e,t,i,n){let r=B(e,this._tempPosition),s=me(e,this._tempQuaternion);switch(t.bodyType()){case Eu.Fixed:case Eu.KinematicPositionBased:case Eu.KinematicVelocityBased:i&&t.setNextKinematicTranslation(r),n&&t.setNextKinematicRotation(s);break;default:i&&t.setTranslation(r,!1),n&&t.setRotation(s,!1);break}t.wakeUp()}getRigidbodyRelativeMatrix(e,t,i,n){if(n===void 0&&(n=Gr._matricesBuffer,n.length=0),e===t){let r=Ae(e,this._tempPosition);i.makeScale(r.x,r.y,r.z);for(let s=n.length-1;s>=0;s--)i.multiply(n[s]);return i}return n.push(e.matrix),e.parent&&this.getRigidbodyRelativeMatrix(e.parent,t,i,n),i}addFixedJoint(e,t){if(!this.world){console.error("Physics world not initialized");return}let i=e[Ft],n=t[Ft];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let r=uv.fixed(Gr.centerConnectionPos,Gr.centerConnectionRot,this._tempPosition,this._tempQuaternion),s=this.world.createImpulseJoint(r,i,n,!0);Ao&&console.log("ADD FIXED JOINT",s)}addHingeJoint(e,t,i,n){if(!this.world){console.error("Physics world not initialized");return}let r=e[Ft],s=t[Ft];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let a=yn.JointData.revolute(i,this._tempPosition,n),c=this.world.createImpulseJoint(a,r,s,!0);Ao&&console.log("ADD HINGE JOINT",c)}calculateJointRelativeMatrices(e,t,i){e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let n=e.matrixWorld,r=t.matrixWorld;n.elements[0]=1,n.elements[5]=1,n.elements[10]=1,r.elements[0]=1,r.elements[5]=1,r.elements[10]=1,i.copy(r).premultiply(n.invert()).invert()}},Yn=Gr;I(Yn,"_didLoadPhysicsEngine",!1),I(Yn,"_matricesBuffer",[]),I(Yn,"centerConnectionPos",{x:0,y:0,z:0}),I(Yn,"centerConnectionRot",{x:0,y:0,z:0,w:1});var Pu=class{world;eventQueue;constructor(e,t){this.world=e,this.eventQueue=t}activeCollisions=[];activeCollisionsStay=[];activeTriggers=[];handleCollisionEvents(){!this.eventQueue||!this.world||this.eventQueue.drainCollisionEvents((e,t,i)=>{let n=this.world.getCollider(e),r=this.world.getCollider(t),s=n[Do],a=r[Do];Tu&&console.log("EVT",s.name,a.name,i,n,r),s&&a&&(i?(this.onCollisionStarted(s,n,a,r),this.onCollisionStarted(a,r,s,n)):(this.onCollisionEnded(s,a),this.onCollisionEnded(a,s)))})}update(){this.onHandleCollisionStay()}onCollisionStarted(e,t,i,n){let r=null;if(e.isTrigger||i.isTrigger)si(e.gameObject,s=>{s.onTriggerEnter&&s.onTriggerEnter(i),this.activeTriggers.push({collider:e,component:s,otherCollider:i})});else{let s=e.gameObject;this.world.contactPair(t,n,(a,c)=>{si(s,u=>{let l=u.onCollisionEnter||u.onCollisionStay||u.onCollisionExit;if(l||Tu){if(!r){let d=[],h=a.normal();for(let g=0;g<a.numSolverContacts();g++){let E=a.solverContactPoint(g),_=a.contactImpulse(g);if(E){let x=a.contactDist(g),m=a.solverContactFriction(g),f=new Ya(E,x,h,_,m);d.push(f),Tu&&Et.DrawDirection(E,h,16711680,3,!0)}}r=new Xs(s,i,d)}if(l){let d={collider:e,component:u,collision:r};this.activeCollisions.push(d),u.onCollisionStay&&this.activeCollisionsStay.push(d),u.onCollisionEnter?.call(u,r)}}})})}}onHandleCollisionStay(){for(let e of this.activeCollisionsStay){let t=e.component;if(t.activeAndEnabled&&t.onCollisionStay){let i=e.collision;t.onCollisionStay(i)}}for(let e of this.activeTriggers){let t=e.component;if(t.activeAndEnabled&&t.onTriggerStay){let i=e.otherCollider;t.onTriggerStay(i)}}}onCollisionEnded(e,t){for(let i=0;i<this.activeCollisions.length;i++){let n=this.activeCollisions[i];if(n.collider===e&&n.collision.collider===t){let s=n.component;if(this.activeCollisions.splice(i,1),i--,s.activeAndEnabled&&s.onCollisionExit){let a=n.collision;s.onCollisionExit(a)}}}for(let i=0;i<this.activeCollisionsStay.length;i++){let n=this.activeCollisionsStay[i];if(n.collider===e&&n.collision.collider===t){let s=n.component;if(this.activeCollisionsStay.splice(i,1),i--,s.activeAndEnabled&&s.onCollisionExit){let a=n.collision;s.onCollisionExit(a)}}}for(let i=0;i<this.activeTriggers.length;i++){let n=this.activeTriggers[i];if(n.collider===e&&n.otherCollider===t){let s=n.component;if(this.activeTriggers.splice(i,1),i--,s.activeAndEnabled&&s.onTriggerExit){let a=n.otherCollider;s.onTriggerExit(a)}}}}};import{Clock as mv}from"three";var pf=P("timescale"),ff=1;typeof pf=="number"&&(ff=pf);var ll=class{deltaTime=0;time=0;timeScale=1;frame=0;get realtimeSinceStartup(){return this.clock.elapsedTime}get frameCount(){return this.frame}get smoothedFps(){return this._smoothedFps}clock=new mv;_smoothedFps=0;_fpsSamples=[];_fpsSampleIndex=0;update(){this.deltaTime=this.clock.getDelta(),this.deltaTime=Math.min(.1,this.deltaTime),this.deltaTime*=ff*this.timeScale,this.deltaTime<=0&&(this.deltaTime=1e-12),this.frame+=1,this.time+=this.deltaTime,this._fpsSamples.length<30?this._fpsSamples.push(this.deltaTime):this._fpsSamples[this._fpsSampleIndex++%30]=this.deltaTime;let e=0;for(let t=0;t<this._fpsSamples.length;t++)e+=this._fpsSamples[t];this._smoothedFps=1/(e/this._fpsSamples.length)}};import{WebsocketBuilder as bv}from"websocket-ts";var Hi=new Int32Array(2),cl=new Float32Array(Hi.buffer),ul=new Float64Array(Hi.buffer),Lo=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var qe=class{constructor(e,t){this.low=e|0,this.high=t|0}static create(e,t){return e==0&&t==0?qe.ZERO:new qe(e,t)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(e){return this.low==e.low&&this.high==e.high}};qe.ZERO=new qe(0,0);var Js;(function(o){o[o.UTF8_BYTES=1]="UTF8_BYTES",o[o.UTF16_STRING=2]="UTF16_STRING"})(Js||(Js={}));var Fi=class{constructor(e){this.bytes_=e,this.position_=0}static allocate(e){return new Fi(new Uint8Array(e))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(e){this.position_=e}capacity(){return this.bytes_.length}readInt8(e){return this.readUint8(e)<<24>>24}readUint8(e){return this.bytes_[e]}readInt16(e){return this.readUint16(e)<<16>>16}readUint16(e){return this.bytes_[e]|this.bytes_[e+1]<<8}readInt32(e){return this.bytes_[e]|this.bytes_[e+1]<<8|this.bytes_[e+2]<<16|this.bytes_[e+3]<<24}readUint32(e){return this.readInt32(e)>>>0}readInt64(e){return new qe(this.readInt32(e),this.readInt32(e+4))}readUint64(e){return new qe(this.readUint32(e),this.readUint32(e+4))}readFloat32(e){return Hi[0]=this.readInt32(e),cl[0]}readFloat64(e){return Hi[Lo?0:1]=this.readInt32(e),Hi[Lo?1:0]=this.readInt32(e+4),ul[0]}writeInt8(e,t){this.bytes_[e]=t}writeUint8(e,t){this.bytes_[e]=t}writeInt16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8}writeUint16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8}writeInt32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24}writeUint32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24}writeInt64(e,t){this.writeInt32(e,t.low),this.writeInt32(e+4,t.high)}writeUint64(e,t){this.writeUint32(e,t.low),this.writeUint32(e+4,t.high)}writeFloat32(e,t){cl[0]=t,this.writeInt32(e,Hi[0])}writeFloat64(e,t){ul[0]=t,this.writeInt32(e,Hi[Lo?0:1]),this.writeInt32(e+4,Hi[Lo?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+4+4)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let e="";for(let t=0;t<4;t++)e+=String.fromCharCode(this.readInt8(this.position_+4+t));return e}__offset(e,t){let i=e-this.readInt32(e);return t<this.readInt16(i)?this.readInt16(i+t):0}__union(e,t){return e.bb_pos=t+this.readInt32(t),e.bb=this,e}__string(e,t){e+=this.readInt32(e);let i=this.readInt32(e),n="",r=0;if(e+=4,t===Js.UTF8_BYTES)return this.bytes_.subarray(e,e+i);for(;r<i;){let s,a=this.readUint8(e+r++);if(a<192)s=a;else{let c=this.readUint8(e+r++);if(a<224)s=(a&31)<<6|c&63;else{let u=this.readUint8(e+r++);if(a<240)s=(a&15)<<12|(c&63)<<6|u&63;else{let l=this.readUint8(e+r++);s=(a&7)<<18|(c&63)<<12|(u&63)<<6|l&63}}}s<65536?n+=String.fromCharCode(s):(s-=65536,n+=String.fromCharCode((s>>10)+55296,(s&(1<<10)-1)+56320))}return n}__union_with_string(e,t){return typeof e=="string"?this.__string(t):this.__union(e,t)}__indirect(e){return e+this.readInt32(e)}__vector(e){return e+this.readInt32(e)+4}__vector_len(e){return this.readInt32(e+this.readInt32(e))}__has_identifier(e){if(e.length!=4)throw new Error("FlatBuffers: file identifier must be length "+4);for(let t=0;t<4;t++)if(e.charCodeAt(t)!=this.readInt8(this.position()+4+t))return!1;return!0}createLong(e,t){return qe.create(e,t)}createScalarList(e,t){let i=[];for(let n=0;n<t;++n)e(n)!==null&&i.push(e(n));return i}createObjList(e,t){let i=[];for(let n=0;n<t;++n){let r=e(n);r!==null&&i.push(r.unpack())}return i}};var Ct=class{constructor(e){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null;let t;e?t=e:t=1024,this.bb=Fi.allocate(t),this.space=t}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(e){this.force_defaults=e}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(e,t){e>this.minalign&&(this.minalign=e);let i=~(this.bb.capacity()-this.space+t)+1&e-1;for(;this.space<i+e+t;){let n=this.bb.capacity();this.bb=Ct.growByteBuffer(this.bb),this.space+=this.bb.capacity()-n}this.pad(i)}pad(e){for(let t=0;t<e;t++)this.bb.writeInt8(--this.space,0)}writeInt8(e){this.bb.writeInt8(this.space-=1,e)}writeInt16(e){this.bb.writeInt16(this.space-=2,e)}writeInt32(e){this.bb.writeInt32(this.space-=4,e)}writeInt64(e){this.bb.writeInt64(this.space-=8,e)}writeFloat32(e){this.bb.writeFloat32(this.space-=4,e)}writeFloat64(e){this.bb.writeFloat64(this.space-=8,e)}addInt8(e){this.prep(1,0),this.writeInt8(e)}addInt16(e){this.prep(2,0),this.writeInt16(e)}addInt32(e){this.prep(4,0),this.writeInt32(e)}addInt64(e){this.prep(8,0),this.writeInt64(e)}addFloat32(e){this.prep(4,0),this.writeFloat32(e)}addFloat64(e){this.prep(8,0),this.writeFloat64(e)}addFieldInt8(e,t,i){(this.force_defaults||t!=i)&&(this.addInt8(t),this.slot(e))}addFieldInt16(e,t,i){(this.force_defaults||t!=i)&&(this.addInt16(t),this.slot(e))}addFieldInt32(e,t,i){(this.force_defaults||t!=i)&&(this.addInt32(t),this.slot(e))}addFieldInt64(e,t,i){(this.force_defaults||!t.equals(i))&&(this.addInt64(t),this.slot(e))}addFieldFloat32(e,t,i){(this.force_defaults||t!=i)&&(this.addFloat32(t),this.slot(e))}addFieldFloat64(e,t,i){(this.force_defaults||t!=i)&&(this.addFloat64(t),this.slot(e))}addFieldOffset(e,t,i){(this.force_defaults||t!=i)&&(this.addOffset(t),this.slot(e))}addFieldStruct(e,t,i){t!=i&&(this.nested(t),this.slot(e))}nested(e){if(e!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")}notNested(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")}slot(e){this.vtable!==null&&(this.vtable[e]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(e){let t=e.capacity();if(t&3221225472)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");let i=t<<1,n=Fi.allocate(i);return n.setPosition(i-t),n.bytes().set(e.bytes(),i-t),n}addOffset(e){this.prep(4,0),this.writeInt32(this.offset()-e+4)}startObject(e){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=e;for(let t=0;t<e;t++)this.vtable[t]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);let e=this.offset(),t=this.vtable_in_use-1;for(;t>=0&&this.vtable[t]==0;t--);let i=t+1;for(;t>=0;t--)this.addInt16(this.vtable[t]!=0?e-this.vtable[t]:0);let n=2;this.addInt16(e-this.object_start);let r=(i+n)*2;this.addInt16(r);let s=0,a=this.space;e:for(t=0;t<this.vtables.length;t++){let c=this.bb.capacity()-this.vtables[t];if(r==this.bb.readInt16(c)){for(let u=2;u<r;u+=2)if(this.bb.readInt16(a+u)!=this.bb.readInt16(c+u))continue e;s=this.vtables[t];break}}return s?(this.space=this.bb.capacity()-e,this.bb.writeInt32(this.space,s-e)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-e,this.offset()-e)),this.isNested=!1,e}finish(e,t,i){let n=i?4:0;if(t){let r=t;if(this.prep(this.minalign,4+4+n),r.length!=4)throw new Error("FlatBuffers: file identifier must be length "+4);for(let s=4-1;s>=0;s--)this.writeInt8(r.charCodeAt(s))}this.prep(this.minalign,4+n),this.addOffset(e),n&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(e,t){this.finish(e,t,!0)}requiredField(e,t){let i=this.bb.capacity()-e,n=i-this.bb.readInt32(i);if(!(this.bb.readInt16(n+t)!=0))throw new Error("FlatBuffers: field "+t+" must be set")}startVector(e,t,i){this.notNested(),this.vector_num_elems=t,this.prep(4,e*t),this.prep(i,e*t)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(e){if(!e)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(e))return this.string_maps.get(e);let t=this.createString(e);return this.string_maps.set(e,t),t}createString(e){if(!e)return 0;let t;if(e instanceof Uint8Array)t=e;else{t=[];let i=0;for(;i<e.length;){let n,r=e.charCodeAt(i++);if(r<55296||r>=56320)n=r;else{let s=e.charCodeAt(i++);n=(r<<10)+s+(65536-(55296<<10)-56320)}n<128?t.push(n):(n<2048?t.push(n>>6&31|192):(n<65536?t.push(n>>12&15|224):t.push(n>>18&7|240,n>>12&63|128),t.push(n>>6&63|128)),t.push(n&63|128))}}this.addInt8(0),this.startVector(1,t.length,1),this.bb.setPosition(this.space-=t.length);for(let i=0,n=this.space,r=this.bb.bytes();i<t.length;i++)r[n++]=t[i];return this.endVector()}createLong(e,t){return qe.create(e,t)}createObjectOffset(e){return e===null?0:typeof e=="string"?this.createString(e):e.pack(this)}createObjectOffsetList(e){let t=[];for(let i=0;i<e.length;++i){let n=e[i];if(n!==null)t.push(this.createObjectOffset(n));else throw new Error("FlatBuffers: Argument for createObjectOffsetList cannot contain null.")}return t}createStructOffsetList(e,t){return t(this,e.length),this.createObjectOffsetList(e),this.endVector()}};var mf={};function Ho(o,e){mf[o]=e}function gf(o){let e=o.getBufferIdentifier(),t=mf[e];return t(o)}function bf(o){return typeof o.guid=="function"?o.guid():null}var ku=Da(hl(),1);var pl=class{get isHost(){return this._host!==void 0}_host;_client;_clientData;constructor(){this.onEnable()}onEnable(){let e="HOST-5980e65c-8438-453e-8b35-f13c736dcd81";this.trySetupHost(e)}trySetupHost(e){let t=new ku.default(e);t.on("error",i=>{console.error(i),this._host=void 0,this.trySetupClient(e)}),t.on("open",i=>{this._host=new Iu(t)})}trySetupClient(e){this._client=new ku.default,this._client.on("error",t=>{console.error("Client error",t)}),this._client.on("open",t=>{console.log("client connected",t),this._clientData=this._client.connect(e,{metadata:{id:t}}),this._clientData.on("open",()=>{console.log("Connected to host")}),this._clientData.on("data",i=>{console.log("<<",i)})})}},Mu=class{_peer;constructor(e){this._peer=e}};var Iu=class extends Mu{get isHost(){return!0}_connections=[];constructor(e){super(e),console.log("I AM THE HOST"),this._peer?.on("connection",this.onConnection.bind(this)),this._peer.on("close",()=>{this.broadcast("BYE")}),setInterval(()=>{this.broadcast("HELLO")},2e3)}onConnection(e){console.log("host connection",e),e.on("open",()=>{this._connections.push(e),this.broadcastConnection(e)})}broadcastConnection(e){let t=this._connections.map(i=>i.metadata?.id).filter(i=>i!==void 0);this.broadcast({type:"connection-list",connections:t})}broadcast(e){if(e!=null){console.log(">>",e);for(let t in this._peer.connections){let i=this._peer.connections[t];if(!!i)if(Array.isArray(i))for(let n of i)!n||n.send(e);else console.warn(i)}}}};var fl="wss://needle-tiny-starter.glitch.me/socket",ht=!!P("debugnet"),ml=!!(ht||P("debugowner"));var Jn=class{guid;connection;get hasOwnership(){return this._hasOwnership}get isOwned(){return this._isOwned}get isConnected(){return this.connection.isConnected}_hasOwnership=!1;_isOwned=void 0;_gainSubscription;_lostSubscription;_hasOwnerResponse;constructor(e,t){this.connection=e,this.guid=t,this._gainSubscription=this.onGainedOwnership.bind(this),this._lostSubscription=this.onLostOwnership.bind(this),e.beginListen("lost-ownership",this._lostSubscription),e.beginListen("gained-ownership-broadcast",this._gainSubscription),this._hasOwnerResponse=this.onHasOwnerResponse.bind(this),e.beginListen("response-has-owner",this._hasOwnerResponse)}_isWaitingForOwnershipResponseCallback=null;updateIsOwned(){this.connection.send("request-has-owner",{guid:this.guid})}onHasOwnerResponse(e){e.guid===this.guid&&(this._isOwned=e.value)}requestOwnershipIfNotOwned(){return this._isWaitingForOwnershipResponseCallback!==null?this:(this._isWaitingForOwnershipResponseCallback=this.waitForHasOwnershipRequestResponse.bind(this),this.connection.beginListen("response-has-owner",this._isWaitingForOwnershipResponseCallback),this.connection.send("request-has-owner",{guid:this.guid}),this)}waitForHasOwnershipRequestResponse(e){e.guid===this.guid&&(this._isWaitingForOwnershipResponseCallback&&(this.connection.stopListening("response-has-owner",this._isWaitingForOwnershipResponseCallback),this._isWaitingForOwnershipResponseCallback=null),this._isOwned=e.value,e.value||(ml&&console.log("request ownership",this.guid),this.requestOwnership()))}requestOwnershipAsync(){return new Promise((e,t)=>{this.requestOwnership();let i=0,n=()=>{if(i++>10)return t("Timeout");setTimeout(()=>{this.hasOwnership?e(this):n()},100)};n()})}requestOwnership(){return ml&&console.log("Request ownership",this.guid),this.connection.send("request-ownership",{guid:this.guid}),this}freeOwnership(){return this.connection.send("remove-ownership",{guid:this.guid}),this._isWaitingForOwnershipResponseCallback&&(this.connection.stopListening("response-has-owner",this._isWaitingForOwnershipResponseCallback),this._isWaitingForOwnershipResponseCallback=null),this}destroy(){this.connection.stopListening("gained-ownership",this._gainSubscription),this.connection.stopListening("lost-ownership",this._lostSubscription),this.connection.stopListening("response-has-owner",this._hasOwnerResponse),this._isWaitingForOwnershipResponseCallback&&(this.connection.stopListening("response-has-owner",this._isWaitingForOwnershipResponseCallback),this._isWaitingForOwnershipResponseCallback=null)}onGainedOwnership(e){e.guid===this.guid&&(this._isOwned=!0,this.connection.connectionId===e.owner?(ml&&console.log("GAINED OWNERSHIP",this.guid),this._hasOwnership=!0):this._hasOwnership=!1)}onLostOwnership(e){e===this.guid&&(ml&&console.log("LOST OWNERSHIP",this.guid),this._hasOwnership=!1,this._isOwned=!1)}},gl=class{context;_peer=null;constructor(e){this.context=e}get peer(){return this._peer||(this._peer=new pl),this._peer}tryGetState(e){return e==="invalid"?null:this._state[e]}get connectionId(){return this._connectionId}get isDebugEnabled(){return ht}get isConnected(){return this.connected}get currentRoomName(){return this._currentRoomName}get allowEditing(){return this._currentRoomAllowEditing}get currentRoomViewId(){return this._currentRoomViewId}get isInRoom(){return this._isInRoom}get currentLatency(){return this._currentDelay}userIsInRoom(e){return this._currentInRoom.indexOf(e)!==-1}_usersInRoomCopy=[];usersInRoom(e=null){e||(e=this._usersInRoomCopy),e.length=0;for(let t of this._currentInRoom)e.push(t);return e}joinRoom(e,t=!1){this.connect(),ht&&console.log("join: "+e),this.send("join-room",{room:e,viewOnly:t},0)}leaveRoom(e=null){if(e||(e=this.currentRoomName),!e){console.error("Can not leave unknown room");return}this.send("leave-room",{room:e})}send(e,t=null,i=2){if(t===null&&(t={}),i===2){this._defaultMessagesBuffer.push({key:e,value:t});return}return this.sendWithWebsocket(e,t,i)}sendDeleteRemoteState(e){this.send("delete-state",{guid:e,dontSave:!0}),delete this._state[e]}sendDeleteRemoteStateAll(){this.send("delete-all-state"),this._state={}}sendBinary(e){ht&&console.log("<< bin",e.length),this._ws?.send(e)}_defaultMessagesBuffer=[];_defaultMessagesBufferArray=[];sendBufferedMessagesNow(){if(!this._ws)return;this._defaultMessagesBufferArray.length=0;let e=Object.keys(this._defaultMessagesBuffer).length;for(let i in this._defaultMessagesBuffer){let n=this._defaultMessagesBuffer[i];if(e<=1){this.sendWithWebsocket(n.key,n.value,3);break}let r=this.toMessage(n.key,n.value);this._defaultMessagesBufferArray.push(r)}if(this._defaultMessagesBuffer.length=0,this._defaultMessagesBufferArray.length>0&&ht&&console.log("SEND BUFFERED",this._defaultMessagesBufferArray.length),this._defaultMessagesBufferArray.length<=0)return;let t=JSON.stringify(this._defaultMessagesBufferArray);this._ws?.send(t)}beginListen(e,t){return this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t),t}stopListening(e,t){if(!t||!this._listeners[e])return;let i=this._listeners[e].indexOf(t);i>=0&&this._listeners[e].splice(i,1)}beginListenBinrary(e,t){return this._listenersBinary[e]||(this._listenersBinary[e]=[]),this._listenersBinary[e].push(t),t}stopListenBinary(e,t){if(!this._listenersBinary[e])return;let i=this._listenersBinary[e].indexOf(t);i>=0&&this._listenersBinary[e].splice(i,1)}netWebSocketUrlProvider;registerProvider(e){this.netWebSocketUrlProvider=e}connect(){if(this.connected)return;ht&&console.log("connecting");let e=this.netWebSocketUrlProvider?.getWebsocketUrl();e?fl=e:dp()&&(fl="wss://"+window.location.host+"/socket"),this.connectWebsocket()}_listeners={};_listenersBinary={};connected=!1;channelId;_connectionId=null;_isConnectingToWebsocket=!1;_ws;_waitingForSocket={};_isInRoom=!1;_currentRoomName=null;_currentRoomViewId=null;_currentRoomAllowEditing=!0;_currentInRoom=[];_state={};_currentDelay=-1;connectWebsocket(){if(this._isConnectingToWebsocket)return;this._isConnectingToWebsocket=!0,console.log("Connecting to "+fl);let e=new bv(fl).onOpen(()=>{this._ws=e,this._isConnectingToWebsocket=!1,this.connected=!0,console.log("Connected to websocket"),this.onSendQueued(0)}).onClose(t=>{this.connected=!1,this._isInRoom=!1}).onError((t,i)=>{console.error(t,i)}).onMessage(this.onMessage.bind(this)).onRetry(()=>{console.log("websocket connection retry")}).build()}onMessage(e,t){let i=t.data;try{if(typeof i!="string"){i.size&&this.handleIncomingBinaryMessage(i);return}let n=JSON.parse(i);if(Array.isArray(n))for(let r of n)this.handleIncomingStringMessage(r);else this.handleIncomingStringMessage(n);return}catch{ht&&i==="pong"&&console.log("<<",i)}}async handleIncomingBinaryMessage(e){let t=await e.arrayBuffer();var i=new Uint8Array(t);let n=new Fi(i),r=n.getBufferIdentifier(),s=this._listenersBinary[r],a=gf(n),c=bf(a);if(c&&typeof c=="string"&&(this._state[c]=a),!s)return;let u=a??n;for(let l of s)l(u)}handleIncomingStringMessage(e){if(ht&&console.log("<<",e.key??e),e.key)switch(e.key){case"connection-start-info":if(e.data){let s=e.data;s&&(console.assert(s.id!==void 0&&s.id!==null&&s.id.length>0,"server did not send connection id",s.id),console.log("Your id is: "+s.id,this.context.alias??""),this._connectionId=s.id)}else console.warn("Expected connection id in "+e.key);break;case"joined-room":if(ht&&console.log(e),e){this._isInRoom=!0;let s=e;this._currentRoomName=s.room,this._currentRoomViewId=s.viewId,this._currentRoomAllowEditing=s.allowEditing??!0,console.log("Room view id",this._currentRoomViewId),this._currentInRoom.length=0,this._currentInRoom.push(...s.inRoom),ht&&console.log("joined room with",this._currentInRoom,this.context.alias??"")}this.onSendQueued(1);break;case"left-room":e.room===this.currentRoomName&&(this._isInRoom=!1,this._currentRoomName=null,this._currentInRoom.length=0);break;case"user-joined-room":if(e.data){let s=e.data;this._currentInRoom.push(s.userId),ht&&console.log(s.userId+" joined","now in room:",this._currentInRoom)}break;case"user-left-room":if(e.data){let s=e.data,a=this._currentInRoom.indexOf(s.userId);a>=0&&(console.log(s.userId+" left",this.context.alias??""),this._currentInRoom.splice(a,1)),s.userId===this.connectionId&&console.log("you left the room")}break;case"all-room-state-deleted":ht&&console.log("RECEIVED all-room-state-deleted"),this._state={};break;case"ping":case"pong":let r=e.data?.time;r&&(this._currentDelay=this.context.time.time-r),ht&&console.log("Current latency: "+this._currentDelay.toFixed(1)+" sec","Clients in room: "+this._currentInRoom?.length);break}let t=this._listeners[e.key];if(t)for(let n of t)n(e.data);let i=e.data;i&&(this._state[i.guid]=i)}toMessage(e,t){return{key:e,data:t}}sendWithWebsocket(e,t,i=1){if(!this._ws){let r=this._waitingForSocket[i]||[];r.push(()=>this.sendWithWebsocket(e,t,i)),this._waitingForSocket[i]=r;return}let n=JSON.stringify(this.toMessage(e,t));ht&&console.log(">>",e),this._ws.send(n)}onSendQueued(e){let t=this._waitingForSocket[e];if(t){for(let i of t)i();t.length=0}}};import{EffectComposer as iy}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as ny}from"three/examples/jsm/postprocessing/RenderPass.js";import*as Zn from"three";var Sf=Da(Rf(),1),bl=class{success;filename;hash;size;url;constructor(e,t,i,n){this.success=e,this.filename=t,this.hash=i,this.size=n}};async function Pf(o,e){let t=await o.arrayBuffer(),i=Of(t),n=o.name.split(".").pop(),r=i+"."+n,s=o.name.split(".").shift();console.assert(s!==void 0);let a={alias:s,filename:r},u=await(await fetch(e+"/exists",{method:"POST",body:JSON.stringify(a)})).json();if(u.success||console.warn("exists check did fail"),u.exists)return console.log("file already exists",i),new bl(!0,r,i,o.size);console.log("begin uploading file",s,o.size);let l=new FormData;l.append("file",o);let d={};d.filesize=o.size,s&&(d.alias=s);let g=await(await fetch(e+"/upload/file",{method:"POST",body:l,headers:d})).json();if(g?.success===!1)return g.message!==void 0?console.error("Upload failed:",g.message):console.error("Upload failed"),null;console.assert(g.hash_sum===i,"hash sum did not match","received:",g.hash_sum,"expected:",i),g.success&&console.log("successfully uploaded",i,g.id);let E=new bl(g.success,r,i,o.size);return E.url=e,E}function Of(o){return(0,Sf.default)(new Uint8Array(o))}async function vl(o,e,t,i,n=!1){try{let r=await fetch(i+"/download/file",{method:"POST",body:o});if(r.status!==200)return console.error("download failed",r),null;let s=await r.blob(),a=await s.arrayBuffer();n||console.assert(s.size===t,"size mismatch","expected:",t,"got:",s.size);let c=Of(a);return n||console.assert(c===e,"hash mismatch, downloaded file is invalid"),s.arrayBuffer()}catch(r){console.error(r)}return null}async function kf(o,e){let t=await fetch(o),i=t.body?.getReader(),n=t.headers.get("Content-Length"),r=n?parseInt(n):0;if(!i)return null;let s=0,a=[];for(;;){let{done:l,value:d}=await i.read();if(d&&(a.push(d),s+=d.length,e.call(null,new ProgressEvent("progress",{loaded:s,total:r}))),l)break}let c=new Uint8Array(s),u=0;for(let l of a)c.set(l,u),u+=l.length;return c}function yl(o,e,t){console.warn("Adding components on object has been temporarily disabled")}var If,Mf=null;function Ye(){return If}function _l(o){Mf!==o&&(Mf=o,If=new o)}var Lu=class{guid;file_name;file_hash;file_size;position;seed;sender;serverUrl;parentGuid;boundsSize;constructor(e,t,i,n,r,s,a,c){this.seed=t,this.guid=i,this.file_name=n,this.file_hash=r,this.file_size=s,this.position=a,this.sender=e,this.serverUrl=c}};async function Hu(o,e,t){let i=o.name;return i.endsWith(".gltf")||i.endsWith(".glb")?new Promise((n,r)=>{let s=new FileReader;s.readAsDataURL(o),s.onloadend=async a=>{let c=s.result,u=tl(),l=new Se(u),d=await Ye().loadSync(e,c,l,!0);if(d&&d.scene){let h=d.scene;if(!h.guid){let g=new Se(u);h.guid=g.generateUUID()}t&&xv(e.connection,o,u,h,t),yl(h,l,d),n(d)}}}):(console.warn("Unsupported file type: "+i),console.log(o),null)}async function Af(o,e){return new Promise(async(t,i)=>{let n=tl(),r=new Se(n),s=await Ye().loadSync(e,o.toString(),r,!0);if(s&&s.scene){let a=s.scene;yl(a,r,s),t(s)}else console.warn("Unsupported file type: "+o.toString())})}function Df(o){o.connection.beginListen("file-spawned",async e=>{if(e.sender!==o.connection.connectionId){console.log("received file event",e),wv(e,o);let t=null;try{t=await vl(e.file_name,e.file_hash,e.file_size,e.serverUrl)}finally{Ev(e,o)}if(t){let i=new Se(e.seed),n=await Ye().parseSync(o,t,null,i);if(n&&n.scene){let r=n.scene;if(yl(r,i,n),e.parentGuid){let s=Hr(e.parentGuid,o.scene);"add"in s&&s.add(r)}r.parent||o.scene.add(r),e.position!==null&&r.position.copy(e.position)}}else console.error("download didnt return file")}})}async function xv(o,e,t,i,n){if(!o.connectionId){console.error("Can not upload file - no connection id");return}if(!i.guid){console.error("Can not upload file - no guid",i,i.guid);return}let r=await Pf(e,n);if(!r)return;if(!r.filename){console.error("Can not send upload event - no filename",e.name);return}if(!r.hash){console.error("Can not send upload event - no hash",e.name);return}let s=new Lu(o.connectionId,t,i.guid,r.filename,r.hash,e.size,i.position,r.url??n);i.parent&&(s.parentGuid=i.parent.guid),o.send("file-spawned",s)}var ju={};function wv(o,e){let t=new Zn.BoxGeometry,i=new Zn.Mesh(t,new Zn.MeshBasicMaterial({color:65280})),n=new Zn.BoxHelper(i,5592405);if(ju[o.guid]=n,e.scene.add(n),o.parentGuid){let r=Hr(o.parentGuid,e.scene);r&&r.add(n)}o.position&&n.position.copy(o.position)}function Ev(o,e){let t=o.guid,i=ju[t];i&&(delete ju[t],i.removeFromParent())}import*as Lf from"three";var _T=P("debugassets");var xl=class{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;let t=e?.reason?.path;if(t){let i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
152
- `+i.src),e.preventDefault())}})}texturesLoader=new Lf.TextureLoader;textures={};texturesLoading={};async loadTexture(e){if(this.textures[e])return this.textures[e];if(this.texturesLoading[e])return await this.texturesLoading[e];let t=this.texturesLoader.loadAsync(e);this.texturesLoading[e]=t;let i=await t;return delete this.texturesLoading[e],this.textures[e]=i,i}getTexture(e){return this._textures.get(e)||null}findTexture(e){for(let t of this._textures.values())if(t.name===e)return t;return null}findMesh(e){for(let t of this._meshes.values())if(t.name===e)return t;return null}findMaterial(e){for(let t of this._materials.values())if(t.name===e)return t;return null}async registerGltf(e){}registerAsset(e){}_materials=new Map;_meshes=new Map;_textures=new Map};import*as qf from"three/examples/jsm/libs/stats.module.js";import{Vector4 as Mv,EquirectangularReflectionMapping as El,sRGBEncoding as Cl,WebGLCubeRenderTarget as Iv}from"three";import{LightProbeGenerator as Av}from"three/examples/jsm/lights/LightProbeGenerator.js";import*as jf from"three";var Tv=new jf.FileLoader;async function Fu(o){return new Promise((e,t)=>{Tv.load(o,e,void 0,t)})}import{Vector4 as $n,FileLoader as Sv,DataTexture as zu,RGBAFormat as Pv,Color as Ov}from"three";var Zs=new Uint8Array(4);Zs[0]=255;Zs[1]=255;Zs[2]=255;Zs[3]=255;var Bf=new zu(Zs,1,1,Pv);function wl(o,e=1){let t="alpha"in o,i=e*e,n=new Uint8Array(4*i),r=Math.floor(o.r*255),s=Math.floor(o.g*255),a=Math.floor(o.b*255);for(let u=0;u<i;u++){let l=u*4;n[l+0]=r,n[l+1]=s,n[l+2]=a,t?n[l+3]=Math.floor(o.alpha*255):n[l+3]=255}let c=new zu(n,e,e);return c.needsUpdate=!0,c}function Uf(o,e,t,i=1,n=3){let a=i*n,c=[o,e,t],u=c.length,l=new Uint8Array(4*u*a),d=new Ov;for(let g=0;g<n;g++){let E=Math.floor(g/n*u),_=H.clamp(E+1,0,u-1),x=c[E],m=c[_],f=g/n*u%1;d.lerpColors(x,m,f);let p=Math.floor(d.r*255),b=Math.floor(d.g*255),w=Math.floor(d.b*255);for(let C=0;C<i;C++){let T=(g*i+C)*4;l[T+0]=p,l[T+1]=b,l[T+2]=w,l[T+3]=255}}let h=new zu(l,i,n);return h.needsUpdate=!0,h}var Uu=class{stage;code;constructor(e,t){this.stage=e,this.code=t}},Gu=class{loaded=new Map;async loadShader(e){let t=await Fu(e);return JSON.parse(t)}async load(e,t){if(this.loaded.has(t))return new Promise((r,s)=>{let a=this.loaded.get(t);a?r(a):s("Shader not found")});let i=await Fu(t),n=new Uu(e,i);return this.loaded.set(t,n),n}},TT=new Gu;function $s(o,e){let t=o.elements;e||(e=[]),e.length=0;for(let i=0;i<16;i+=4){let n=t[i],r=t[i+1],s=t[i+2],a=t[i+3],c=new $n(n,r,s,a);e.push(c)}return e}var Bu=[],Hf=[];function Wu(o,e){if(Bu.length===0)for(let t=0;t<27;t++)Bu.push(0);e||(e=Bu);for(let t=0;t<27;t++)Hf[t]=e[t];e=Hf,o.unity_SHAr={value:new $n(e[9],e[3],e[6],e[0])},o.unity_SHBr={value:new $n(e[12],e[15],e[18],e[21])},o.unity_SHAg={value:new $n(e[10],e[4],e[7],e[1])},o.unity_SHBg={value:new $n(e[13],e[16],e[19],e[22])},o.unity_SHAb={value:new $n(e[11],e[5],e[8],e[2])},o.unity_SHBb={value:new $n(e[14],e[17],e[20],e[23])},o.unity_SHC={value:new $n(e[24],e[25],e[26],1)}}var Vu=class{vertexShader;fragmentShader;technique;constructor(e,t,i){this.vertexShader=e,this.fragmentShader=t,this.technique=i}};async function Gf(o,e){if(!o)return console.error("Can not find technique: no shader data"),null;let t=o.programs[e],i=t.vertexShader,n=t.fragmentShader;if(i!==void 0&&n!==void 0){let r=o.shaders[i],s=o.shaders[n];if(r.uri&&s.uri||r.code&&s.code){if(!r.code&&r.uri&&await Ff(r),!s.code&&s.uri&&await Ff(s),!r.code||!s.code)return null;let a=o.techniques[e];return new Vu(r.code,s.code,a)}}return console.error("Shader technique not found",e),null}async function Ff(o){let e=o.uri;if(!!e)if(e.endsWith(".glsl")){let i=await new Sv().loadAsync(e);o.code=i.toString()}else o.code=kv(o.uri)}function kv(o){return decodeURIComponent(Array.prototype.map.call(atob(o),function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))}var Nu=P("debugenvlight"),Qu=(n=>(n[n.Skybox=0]="Skybox",n[n.Trilight=1]="Trilight",n[n.Flat=3]="Flat",n[n.Custom=4]="Custom",n))(Qu||{});var Tl=class{context;constructor(e){this.context=e,this.context.pre_update_callbacks.push(this.preUpdate.bind(this))}sceneLightSettings;preUpdate(){let e=this.context.time;this._timevec4.x=e.time,this._timevec4.y=Math.sin(e.time),this._timevec4.z=Math.cos(e.time),this._timevec4.w=e.deltaTime}_timevec4=new Mv;get timeVec4(){return this._timevec4}get environmentIntensity(){return this.sceneLightSettings?this.sceneLightSettings.ambientIntensity:1}registerSceneLightSettings(e){this.sceneLightSettings=e}registerReflection(e,t){let i=new Xu(this.context,t,1);this._lighting[e]=i}getReflection(e){return this._lighting[e]}enableReflection(e){switch(Nu&&console.log(this.sceneLightSettings?Qu[this.sceneLightSettings.ambientMode]:"Unknown ambient mode"),this.sceneLightSettings?.ambientMode){case 0:case 4:let t=this.getReflection(e);if(t&&t.Source){let i=this.context.scene,n=t.Source;n.encoding=Cl,n.mapping=El,i.environment=n;return}break}if(this.sceneLightSettings?.environmentReflectionSource===1)switch(this.sceneLightSettings?.ambientMode){case 1:if(this.sceneLightSettings.ambientTrilight){let t=this.sceneLightSettings.ambientTrilight,i=Uf(t[0],t[1],t[2],64,64);i.encoding=Cl,i.mapping=El,this.context.scene.environment=i}else console.error("Missing ambient trilight",this.sceneLightSettings.sourceId);return;case 3:if(this.sceneLightSettings.ambientLight){let t=wl(this.sceneLightSettings.ambientLight,64);t.encoding=Cl,t.mapping=El,this.context.scene.environment=t}else console.error("Missing ambientlight",this.sceneLightSettings.sourceId);return;default:return}}disableReflection(){let e=this.context.scene;e.environment=null}async getSceneLightingData(e){return Nu&&console.log("GET SCENE LIGHT DATA"),this._waitPromise?this._waitPromise:(this._waitPromise=new Promise((t,i)=>{let n=setInterval(async()=>{let r=this.getReflection(e);r&&(clearInterval(n),t(r.getSphericalHarmonicsArray(this.sceneLightSettings?.ambientIntensity??1)))},10)}),this._waitPromise)}_waitPromise;_lighting={}},Xu=class{get Source(){return this._source}get Array(){return this._sphericalHarmonicsArray}_context;_source;_sphericalHarmonics=null;_sphericalHarmonicsArray;_ambientScale=1;_lightProbe;constructor(e,t,i=1){this._context=e,this._source=t,this._ambientScale=i,t.mapping=El,t.encoding=Cl}getSphericalHarmonicsArray(e=1){if(this._sphericalHarmonicsArray?.length&&this._source)return{array:this._sphericalHarmonicsArray,texture:this._source,lightProbe:this._lightProbe};try{let t=this._source,i=null;if(t){Nu&&console.log("GENERATING LIGHT PROBE",t);let n=Math.min(t.image.width,512);i=new Iv(n).fromEquirectangularTexture(this._context.renderer,t),this._source=i.texture}if(this._sphericalHarmonicsArray=[],i){let n=Av.fromCubeRenderTarget(this._context.renderer,i);this._lightProbe=n;let r=this._ambientScale*(e*e*Math.PI*.5)-1;this._sphericalHarmonics=n.sh,this._sphericalHarmonicsArray=this._sphericalHarmonics.toArray();let s=e/(Math.PI*.5);for(let a=0;a<this._sphericalHarmonicsArray.length;a++)this._sphericalHarmonicsArray[a]*=s;if(n.sh.scale(r),this._source)return{array:this._sphericalHarmonicsArray,texture:this._source,lightProbe:n}}}catch(t){console.error(t)}return null}};import{Object3D as Dv}from"three";var Vr=P("debugaddressables"),Rl=class{_context;constructor(e){this._context=e,this._context.pre_update_callbacks.push(this.preUpdate.bind(this))}preUpdate(){}_assetReferences={};findAssetReference(e){return this._assetReferences[e]||null}registerAssetReference(e){return e.uri&&(this._assetReferences[e.uri]?console.warn("Asset reference already registered",e):this._assetReferences[e.uri]=e),e}},Fo=class{static getOrCreate(e,t,i){let n=Ii(e,t);Vr&&console.log("GetOrCreate Addressable from",e,t,"FinalPath=",n);let r=i.addressables,s=r.findAssetReference(n);if(s)return s;let a=new Fo(n,i.hash);return r.registerAssetReference(a),a}get asset(){return this._glbRoot??this._asset}set asset(e){this._asset=e}_loading;get uri(){return this._uri}get rawAsset(){return this._asset}_asset;_glbRoot;_uri;_progressListeners=[];_hash;_hashedUri;_isLoadingRawBinary=!1;_rawBinary;constructor(e,t){this._uri=e,this._hash=t,e.includes("?v=")?this._hashedUri=e:this._hashedUri=t?e+"?v="+t:e,Xp(this._uri,this.onResolvePrefab.bind(this))}async onResolvePrefab(e){return e===this.uri&&(this.mustLoad&&await this.loadAssetAsync(),this.asset)?this.asset:null}get mustLoad(){return!this.asset||this.asset.__destroyed===!0}isLoaded(){return this._rawBinary||this.asset!==void 0}unload(){this.asset&&(Vr&&console.log("Unload",this.asset),this.asset.scene?oi(this.asset.scene):oi(this.asset)),this.asset=null}async preload(){if(!this.mustLoad||this._isLoadingRawBinary)return null;if(this._rawBinary!==void 0)return this._rawBinary;this._isLoadingRawBinary=!0,Vr&&console.log("Preload",this._hashedUri);let e=await kf(this._hashedUri,t=>{this.raiseProgressEvent(t)});return this._rawBinary=e?.buffer??null,this._isLoadingRawBinary=!1,this._rawBinary}async loadAssetAsync(e){if(!this.mustLoad)return;if(e&&this._progressListeners.push(e),this._loading!==void 0)return this._loading;let t=G.Current;this._rawBinary?(this._loading=Ye().parseSync(t,this._rawBinary,this.uri,null),this.raiseProgressEvent(new ProgressEvent("progress",{loaded:this._rawBinary.byteLength,total:this._rawBinary.byteLength}))):(Vr&&console.log("Load async",this.uri),this._loading=Ye().loadSync(t,this._hashedUri,null,!0,n=>{this.raiseProgressEvent(n)}));let i=await this._loading;if(this._progressListeners.length=0,this._glbRoot=this.tryGetActualGameObjectRoot(i),this._loading=void 0,i)return vn(t),i.scene!==void 0&&(this.asset=i),this.asset}async instantiate(e){return this.onInstantiate(e,!1)}async instantiateSynced(e,t=!0){return this.onInstantiate(e,!0,t)}beginListenDownload(e){this._progressListeners.indexOf(e)<0&&this._progressListeners.push(e)}endListenDownload(e){let t=this._progressListeners.indexOf(e);t>=0&&this._progressListeners.splice(t,1)}raiseProgressEvent(e){for(let t of this._progressListeners)t(this,e)}async onInstantiate(e,t=!1,i){let n=G.Current;if(e||(e=n.scene),this.mustLoad&&await this.loadAssetAsync(),Vr&&console.log("Instantiate",this.uri,"parent:",e),this.asset){Vr&&console.log("Add to scene",this.asset);let r=e instanceof Ue?e:null;if(r||(r=new Ue),typeof e=="object"&&(e instanceof Dv?r.parent=e:Object.assign(r,e)),Fo.currentlyInstantiating.indexOf(this.uri)>=0)return console.error("Recursive instantiation of",this.uri),null;try{if(Fo.currentlyInstantiating.push(this.uri),t){r.context=n;let s=this.asset;s.guid=this.uri;let a=el(s,r,void 0,i);if(a)return a}else{let s=Fr(this.asset,r);if(s)return s}}finally{n.post_render_callbacks.push(()=>Fo.currentlyInstantiating.pop())}}else Vr&&console.warn("Failed to load asset",this.uri);return null}tryGetActualGameObjectRoot(e){if(e&&e.scene){let t=e.scene;return t.isGroup&&t.children.length===1&&t.children[0].name+"glb"===t.name?t.children[0]:t}return null}},tt=Fo;I(tt,"currentlyInstantiating",[]);var qu=class extends Li{constructor(){super([tt])}onSerialize(e,t){if(e&&e.uri!==void 0&&typeof e.uri=="string")return e.uri}onDeserialize(e,t){return typeof e=="string"?t.context?t.gltfId?tt.getOrCreate(t.gltfId,e,t.context):(console.error("Missing spurce id"),null):(console.error("Missing context"),null):null}};new qu;var Sl=class extends EventTarget{context;get hasFocus(){return document.hasFocus()}get isVisible(){return this._isVisible}_isVisible=!0;constructor(e){super(),this.context=e,window.addEventListener("visibilitychange",this.onVisiblityChanged.bind(this),!1)}onVisiblityChanged(e){switch(e.target.visibilityState){case"hidden":this._isVisible=!1,this.dispatchEvent(new Event("application-hidden"));break;case"visible":this._isVisible=!0,this.dispatchEvent(new Event("application-visible"));break}}};import{FloatType as Lv,HalfFloatType as jv,LinearEncoding as Hv,sRGBEncoding as Fv}from"three";var Vf="NEEDLE_lightmaps",Bv=P("debuglightmapsextension"),ea=(i=>(i[i.Lightmap=0]="Lightmap",i[i.Skybox=1]="Skybox",i[i.Reflection=2]="Reflection",i))(ea||{}),Pl=class{get name(){return Vf}parser;registry;source;constructor(e,t,i){this.parser=e,this.registry=t,this.source=i}afterRoot(e){let t=this.parser.json.extensions;if(t){let i=t[Vf];if(i){let n=i.textures;return n?.length?(Bv&&console.log(i),new Promise(async(r,s)=>{let a=[];for(let c of n)if(c.pointer){let u=Eo(this.parser,c.pointer).then(l=>{let d=l;d?.isTexture&&(this.registry?(c.type!==0?d.encoding=Fv:d.encoding=Hv,c.type===1&&(d.type==Lv||d.type==jv)&&(d.flipY=!0),this.registry.registerTexture(this.source,c.type,d,c.index)):console.log(ea[c.type],c.pointer,d))});a.push(u)}await Promise.all(a),r()})):null}}return null}};import*as Bi from"three";var zf=!!P("debuglightmaps"),Ol=class{_context;_lightmaps=new Map;constructor(e){this._context=e}registerTexture(e,t,i,n){zf&&console.log("Registering ",ea[t],i,e),this._lightmaps.has(e)||this._lightmaps.set(e,new Map);let r=this._lightmaps.get(e),s=r?.get(t)??[];s.length<n&&(s.length=n+1),s[n]=i,r?.set(t,s)}tryGetLightmap(e,t=0){return this.tryGet(e,0,t)}tryGetSkybox(e){return this.tryGet(e,1,0)}tryGetReflection(e){return this.tryGet(e,2,0)}tryGet(e,t,i){if(!e)return zf&&console.warn("Missing source id"),null;let n=this._lightmaps.get(e)?.get(t)??null;return!n?.length||n.length<=i?null:n[i]}};Bi.ShaderChunk.lights_fragment_maps=Bi.ShaderChunk.lights_fragment_maps.replace("vec4 lightMapTexel = texture2D( lightMap, vUv2 );",`
151
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis`,e))),_u&&console.log("FIND",e),e!=null){for(let i=0;i<o.userData.components.length;i++){let n=o.userData.components[i];if(e===null||n.constructor.name===e.name||n.constructor.name===e)if(_u&&console.log("MATCH BY NAME",n),t)t.push(n);else return n}for(let i=0;i<o.userData.components.length;i++){let n=o.userData.components[i],r=Object.getPrototypeOf(n.constructor);do{if(r===e)if(_u&&console.log("MATCH BY PROTOYPE",r),t)t.push(n);else return n;r=Object.getPrototypeOf(r)}while(r)}return t}}}function Ur(o,e){return tf(o,e)}function ko(o,e,t){return t||(t=[]),tf(o,e,t)}function qn(o,e,t){let i=Ur(o,e);if(t===!1&&i?.enabled===!1)return null;if(i)return i;for(let n=0;n<o?.children?.length;n++){let r=qn(o.children[n],e);if(r)return r}return null}function Mo(o,e,t){t||(t=[]),ko(o,e,t);for(let i=0;i<o?.children?.length;i++)Mo(o.children[i],e,t);return t}function Oo(o,e){if(!o)return null;if(Array.isArray(o)){for(let i=0;i<o.length;i++){let n=Hb(o[i]),r=Oo(n,e);if(r)return r}return null}let t=Ur(o,e);return t||(o.parent?Oo(o.parent,e):null)}function Ys(o,e,t){return t||(t=[]),o?(ko(o,e,t),o.parent?Ys(o.parent,e,t):t):t}function nf(o,e,t){if(!o)return null;if(!e&&(e=G.Current,!e))return console.error("Can not search object without any needle context or scene!!!"),null;let i=e;if(i.isScene||(i=e?.scene),!i)return null;for(let n in i.children){let r=i.children[n];if(t===!1&&r[ji]===!1)continue;if(r.constructor==o)return r;let s=qn(r,o);if(s)return s}return null}function rf(o,e,t){if(!o)return e;if(!t&&(t=G.Current,!t))return console.error("Can not search object without any needle context or scene!!!"),e;let i=t.isScene===!0||t.isObject3D===!0?t:t?.scene;if(!i)return e;for(let n in i.children){let r=i.children[n];if(r.constructor==o)return r;Mo(r,o,e)}return e}function Io(o){o&&o.isObject3D===!0&&Kp(o,dt)}dt.prototype.SetActive=function(o){this.visible=o};dt.prototype.addNewComponent=function(o){return Ht(this,new o)};dt.prototype.removeComponent=function(o){return nl(this,o)};dt.prototype.getOrAddComponent=function(o){return rl(this,o)};dt.prototype.getComponent=function(o){return Ur(this,o)};dt.prototype.getComponents=function(o,e){return ko(this,o,e)};dt.prototype.getComponentInChildren=function(o){return qn(this,o)};dt.prototype.getComponentsInChildren=function(o,e){return Mo(this,o,e)};dt.prototype.getComponentInParent=function(o){return Oo(this,o)};dt.prototype.getComponentsInParent=function(o,e){return Ys(this,o,e)};Object.getOwnPropertyDescriptor(dt.prototype,"activeSelf")||Object.defineProperty(dt.prototype,"activeSelf",{get:function(){return bn(this)},set:function(o){Ao(this,o,!0)}});Jp(dt);var sl=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),re=class{static isUsingInstancing(e){return e.__isUsingInstancing===!0}static markDirty(e,t=!0){if(!!e&&(this.isUsingInstancing(e)&&(e[sl]=!0,e.matrixWorldNeedsUpdate=!0),t))for(let i of e.children)re.markDirty(i,!0)}};var Gr=P("debuggetcomponent"),Fb=(u=>(u[u.None=0]="None",u[u.HideInHierarchy=1]="HideInHierarchy",u[u.HideInInspector=2]="HideInInspector",u[u.DontSaveInEditor=4]="DontSaveInEditor",u[u.NotEditable=8]="NotEditable",u[u.DontSaveInBuild=16]="DontSaveInBuild",u[u.DontUnloadUnusedAsset=32]="DontUnloadUnusedAsset",u[u.DontSave=52]="DontSave",u[u.HideAndDontSave=61]="HideAndDontSave",u))(Fb||{}),Ue=class{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context},Ks=Symbol("isActive");function bn(o){let e=o.visible||al(o);return o[Ks]===void 0&&(o[Ks]=!0),o[Ks]&&e}function Ao(o,e,t=!0){return typeof e=="number"&&(e=e>.5),o[Ks]=e,t&&(o.visible=e),o[Ks]}function sf(o){return o[ji]||al(o)}function af(o,e){o.__isUsingInstancing=e}function al(o){return re.isUsingInstancing(o)}function Fr(o,e){return dn(o,e,!0,!0)}function oi(o,e=!0,t=!0){let i=o;if(i.isComponent){i.__internalDisable(),i.__internalDestroy();return}let n=o;if(Gr&&console.log(n),e&&n.children)for(let s of n.children)oi(s,e,!1);let r=n.userData.components;if(r){let s=r.length;for(let a=0;a<r.length;a++){let c=r[a];c.__internalDisable(),c.__internalDestroy(),r.length<s&&(s=r.length,a--)}}t&&n.removeFromParent()}function si(o,e,t=!0){if(!!o){if(o.isObject3D||new Error("Expected Object3D but got "+o),o.userData?.components)for(let i=0;i<o.userData.components.length;i++){let n=o.userData.components[i];if(n?.isComponent===!0){let r=e(n);if(r!==void 0)return r}}if(t&&o.children)for(let i=0;i<o.children.length;i++){let n=o.children[i];if(!n)continue;let r=si(n,e,t);if(r!==void 0)return r}}}function Br(o,e=null){if(o===null)return null;let t=null;e!==null&&(e.x!==void 0?(t=new Ue,t.position=e):t=e);let i=G.Current;t?.context&&(i=t.context),Gr&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new Se(Date.now()));let n=[],r={},s={},a=lf(i,o,t,n,r,s);a&&(Ub(r),Bb(s,r)),Gr&&(Xs(o,!0),Xs(a,!0));let c={};for(let u in n){let l=n[u],d=l.guid;t&&t.idProvider&&(l.guid=t.idProvider.generateUUID(),c[d]=l.guid,Gr&&console.log(l.name,l.guid)),ol(l,i),l.__internalNewInstanceCreated&&l.__internalNewInstanceCreated()}for(let u in n){let l=n[u];l.resolveGuids&&l.resolveGuids(c),l.enabled!==!1&&(l.enabled=!0)}return vn(i),a}function lf(o,e,t,i,n,r){if(!e)return null;let s=e.userData;e.userData={};let a=e.children;e.children=[];let c;if(c=e.clone(!1),Io(c),e.userData=s,e.children=a,n[e.uuid]={original:e,clone:c},e.type==="SkinnedMesh"&&(r[e.uuid]={original:e,clone:c}),t?.visible!==void 0&&(c.visible=t.visible),t?.idProvider){c.uuid=t.idProvider.generateUUID();let l=c;l&&(l.guid=c.uuid)}e.animations&&e.animations.length>0&&(c.animations=[...e.animations]);let u=e.parent;if(u&&u.add(c),t?.position?te(c,t.position):c.position.copy(e.position),t?.rotation?$e(c,t.rotation):c.quaternion.copy(e.quaternion),t?.scale?c.scale.copy(t.scale):c.scale.copy(e.scale),t?.parent&&t.parent!=="scene"){let l=null;if(typeof t.parent=="string"?l=dn(t.parent,o.scene,!0):l=t.parent,l){let d=t.keepWorldPosition===!0?l.attach:l.add;d?d.call(l,c):console.error("Invalid parent object",l,"received when instantiating:",e)}else console.warn("could not find parent:",t.parent)}for(let[l,d]of Object.entries(e.userData))l!=="components"&&(c.userData[l]=d);if(e.userData?.components){let l=e.userData.components,d=[];c.userData.components=d;for(let h=0;h<l.length;h++){let g=l[h],E=Object.create(g);jt(E,g),d.push(E),E.gameObject=c,i.push(E)}}t&&(t.position=void 0,t.rotation=void 0,t.scale=void 0,t.parent=void 0);for(let l in e.children){let d=e.children[l],h=lf(o,d,t,i,n,r);h&&c.add(h)}return c}function Bb(o,e){for(let t in o){let i=o[t],n=i.original,r=n.skeleton,s=i.clone;if(!r){console.warn("Skinned mesh has no skeleton?",i);continue}let a=r.bones,c=s.skeleton.clone();s.skeleton=c,s.bindMatrix.clone().copy(n.bindMatrix),s.bindMatrixInverse.copy(n.bindMatrixInverse);let u=[];c.bones=u;for(let l=0;l<a.length;l++){let d=a[l],g=e[d.uuid].clone;u.push(g)}}for(let t in o){let i=o[t].clone;i.skeleton.update(),i.bind(i.skeleton,i.bindMatrix),i.updateMatrixWorld(!0)}}function Ub(o){for(let e in o){let i=o[e].clone;if(i.userData?.components)for(let n=0;n<i.userData.components.length;n++){let r=i.userData.components[n],s=Object.entries(r);for(let[a,c]of s)if(Array.isArray(c)){let u=[];r[a]=u;for(let l=0;l<c.length;l++){let d=c[l];if(typeof d!="object"){u.push(d);continue}let h=of(r,a,d,o);h!==void 0?u.push(h):u.push(d)}}else if(typeof c=="object"){let u=of(r,a,c,o);u!==void 0&&(r[a]=u)}}}}function of(o,e,t,i){if(t!=null){if(t.isComponent===!0){let n=t.gameObject;if(n){let r=n.uuid,s=i[r]?.clone;if(!s){Gr&&console.log("reference did not change",e,o,t);return}let a=n.userData.components.indexOf(t);if(a>=0)return Gr&&console.log(e,r),s.userData.components[a];console.warn("could not find component",e,t)}}else if(t.isObject3D===!0){if(e==="gameObject")return;let n=t;if(n){let r=n.uuid,s=i[r]?.clone;if(s)return Gr&&console.log(e,"old",t,"new",s),s}}else if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone()}}import yn,{ActiveEvents as lv,CoefficientCombineRule as _n,Collider as cv,ColliderDesc as Js,EventQueue as uv,JointData as dv,RigidBody as hv,RigidBodyType as Cu,World as pv}from"@dimforge/rapier3d-compat";import{BufferAttribute as Gb,Line as Vb,BoxGeometry as hf,EdgesGeometry as zb,Color as Wb,LineSegments as Nb,LineBasicMaterial as Xb,Mesh as xu,SphereGeometry as Qb,Vector3 as wu,Quaternion as qb,CylinderGeometry as Yb}from"three";var et=new wu,cf=new wu,uf=new qb,Yn=8947848,Et=class{static DrawRay(e,t,i=Yn,n=0,r=!0){let s=Ge.getLine(n),a=s.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),et.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+et.x,e.y+et.y,e.z+et.z),a.needsUpdate=!0,s.material.color.set(i),s.material.depthTest=r}static DrawDirection(e,t,i=Yn,n=0,r=!0,s=1){let a=Ge.getLine(n),c=a.geometry.getAttribute("position");c.setXYZ(0,e.x,e.y,e.z),t.w!==void 0?(et.set(0,0,-s),uf.set(t.x,t.y,t.z,t.w),et.applyQuaternion(uf)):(et.set(t.x,t.y,t.z),et.multiplyScalar(s)),c.setXYZ(1,e.x+et.x,e.y+et.y,e.z+et.z),c.needsUpdate=!0,a.material.color.set(i),a.material.depthTest=r}static DrawLine(e,t,i=Yn,n=0,r=!0){let s=Ge.getLine(n),a=s.geometry.getAttribute("position");a.setXYZ(0,e.x,e.y,e.z),a.setXYZ(1,t.x,t.y,t.z),a.needsUpdate=!0,s.material.color.set(i),s.material.depthTest=r}static DrawWireSphere(e,t,i=Yn,n=0,r=!0){let s=Ge.getSphere(t,n,!0);fn(s,e.x,e.y,e.z),s.material.color.set(i),s.material.depthTest=r}static DrawSphere(e,t,i=Yn,n=0,r=!0){let s=Ge.getSphere(t,n,!1);fn(s,e.x,e.y,e.z),s.material.color.set(i),s.material.depthTest=r}static DrawBox(e,t,i=Yn,n=0,r=!0){let s=Ge.getBox(n);s.position.set(e.x,e.y,e.z),s.scale.set(t.x,t.y,t.z),s.material.color.set(i),s.material.depthTest=r,s.material.wireframe=!0}static DrawBox3(e,t=Yn,i=0,n=!0){let r=Ge.getBox(i);r.position.copy(e.getCenter(et)),r.scale.copy(e.getSize(et)),r.material.color.set(t),r.material.depthTest=n,r.material.wireframe=!0}static DrawArrow(e,t,i=Yn,n=0,r=!0,s=!1){let a=Ge.getArrowHead(n);a.position.set(t.x,t.y,t.z),a.quaternion.setFromUnitVectors(this._up.set(0,1,0),et.set(t.x,t.y,t.z).sub(cf.set(e.x,e.y,e.z)).normalize());let u=et.set(t.x,t.y,t.z).sub(cf.set(e.x,e.y,e.z)).length()*.1;a.scale.set(u,u,u),a.material.color.set(i),a.material.depthTest=r,a.material.wireframe=s,this.DrawLine(e,t,i,n,r)}};I(Et,"_up",new wu(0,1,0));var Kb=new hf(1,1,1);function ll(o=null){let e=new Wb(o??14540253),t=new zb(Kb);return new Nb(t,new Xb({color:e}))}var df=Symbol("GizmoCache"),Ge=class{static getBox(e){let t=this.boxesCache.pop();if(!t){let i=new hf(1,1,1);t=new xu(i)}return this.registerTimedObject(G.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new Vb;let i=t.geometry.getAttribute("position");i||(i=new Gb(new Float32Array(2*3),3),t.geometry.setAttribute("position",i))}return this.registerTimedObject(G.Current,t,e,this.linesCache),t}static getSphere(e,t,i){let n=this.spheresCache.pop();return n||(n=new xu(new Qb(.5,8,8))),n.scale.set(e,e,e),n.material.wireframe=i,this.registerTimedObject(G.Current,n,t,this.spheresCache),n}static getArrowHead(e){let t=this.arrowHeadsCache.pop();return t||(t=new xu(new Yb(0,.5,1,8))),this.registerTimedObject(G.Current,t,e,this.arrowHeadsCache),t}static registerTimedObject(e,t,i,n){if(!this.contextPostRenderCallbacks.get(e)){let r=()=>{this.onPostRender(e,this.timedObjectsBuffer,this.timesBuffer)};this.contextPostRenderCallbacks.set(e,r),e.post_render_callbacks.push(r)}t[df]=n,this.timedObjectsBuffer.push(t),this.timesBuffer.push(G.Current.time.time+i),e.scene.add(t)}static onPostRender(e,t,i){let n=e.time.time;for(let r=0;r<t.length;r++)if(n>i[r]){let s=t[r];s[df].push(s),e.scene.remove(s),t.splice(r,1),i.splice(r,1)}}};I(Ge,"linesCache",[]),I(Ge,"spheresCache",[]),I(Ge,"boxesCache",[]),I(Ge,"arrowHeadsCache",[]),I(Ge,"timedObjectsBuffer",new Array),I(Ge,"timesBuffer",new Array),I(Ge,"contextPostRenderCallbacks",new Map);var Do=P("debugphysics"),Tu=P("debugphysicscolliders"),Ru=P("debugcollisions"),fv=P("showcolliders"),Lo=Symbol("needle component"),Ft=Symbol("physics body"),mv=Symbol("rigidbody"),xe=class{ray=void 0;cam=void 0;screenPoint=void 0;raycaster=void 0;results=void 0;targets=void 0;recursive=!0;minDistance=void 0;maxDistance=void 0;lineThreshold=void 0;layerMask=void 0;ignore=void 0;screenPointFromOffset(e,t){this.screenPoint===void 0&&(this.screenPoint=new av),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setMask(e){this.layerMask||(this.layerMask=new Su);let t=this.layerMask;t?t.mask=e:this.layerMask=e}};I(xe,"AllLayers",4294967295);var Pu=class{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}},Vr=class{raycaster=new ov;defaultRaycastOptions=new xe;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:0},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new Su;sphereOverlap(e,t,i=!0){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;let n=new sv(e,t),r=this.sphereMask;r.enableAll(),r.disable(2);for(let s of this.context.scene.children)this.onSphereOverlap(s,n,r,this.sphereResults,i);return this.sphereResults.sort((s,a)=>s.distance-a.distance)}tempBoundingBox=new $b;onSphereOverlap(e,t,i,n,r){if(e.type==="Mesh"&&e.layers.test(i)){let s=e,a=s.geometry;if(a.boundingBox||a.computeBoundingBox(),a.boundingBox){s.matrixWorldNeedsUpdate&&s.updateMatrixWorld();let c=this.tempBoundingBox.copy(a.boundingBox).applyMatrix4(s.matrixWorld);if(t.intersectsBox(c)){let l=B(e).distanceTo(t.center),d=new Pu(e,l,t.center.clone());if(n.push(d),!r)return}}}if(e.children)for(let s of e.children){let a=n.length;if(this.onSphereOverlap(s,t,i,n,r),a!=n.length&&!r)return}}raycastFromRay(e,t=null){let i=t??this.defaultRaycastOptions;return i.ray=e,this.raycast(i)}raycast(e=null){e||(e=this.defaultRaycastOptions);let t=e.screenPoint??this.context.input.mousePositionRC,i=e.raycaster??this.raycaster;if(i.near=e.minDistance??0,i.far=e.maxDistance??1/0,i.params=this.defaultThresholds,e.lineThreshold?i.params.Line={threshold:e.lineThreshold}:i.params.Line={threshold:0},e.ray)i.ray.copy(e.ray);else{let a=e.cam??this.context.mainCamera;if(!a)return console.error("Can not perform raycast - no main camera found"),this.defaultRaycastOptions.results&&(this.defaultRaycastOptions.results.length=0),this.defaultRaycastOptions.results??[];i.setFromCamera(t,a)}let n=e.targets;n||(n=this.targetBuffer,n[0]=this.context.scene);let r=e.results;r||(this.defaultRaycastOptions.results||(this.defaultRaycastOptions.results=new Array),r=this.defaultRaycastOptions.results),e.layerMask!==void 0?e.layerMask instanceof Su?i.layers.mask=e.layerMask.mask:i.layers.mask=e.layerMask:(i.layers.enableAll(),i.layers.disable(2)),r.length=0,i.intersectObjects(n,e.recursive,r);let s=e.ignore;return s!==void 0&&s.length>0&&(r=r.filter(a=>!s.includes(a.object))),r}rapierRay=new yn.Ray({x:0,y:0,z:0},{x:0,y:0,z:1});raycastVectorsBuffer=new Mi(()=>new Eu,10);raycastPhysicsFast(e,t=void 0,i=1/0,n=!0){let r=this.getPhysicsRay(this.rapierRay,e,t);if(!r)return null;let s=this.world?.castRay(r,i,n);if(s){let a=r.pointAt(s.toi),c=this.raycastVectorsBuffer.get();return c.set(a.x,a.y,a.z),{point:c,collider:s.collider[Lo]}}return null}getPhysicsRay(e,t,i=void 0){let n=this.context.mainCamera;if(t.z===void 0){if(!n)return console.error("Can not perform raycast from 2d point - no main camera found"),null;let a=this.raycastVectorsBuffer.get();(t.x>1||t.y>1||t.y<-1||t.x<-1)&&this.context.input.convertScreenspaceToRaycastSpace(t),a.set(t.x,t.y,-1),a.unproject(n),t=a}let r=t;e.origin.x=r.x,e.origin.y=r.y,e.origin.z=r.z;let s=this.raycastVectorsBuffer.get();if(i)s.set(i.x,i.y,i.z);else{if(!n)return console.error("Can not perform raycast - no camera found"),null;s.set(e.origin.x,e.origin.y,e.origin.z);let a=B(n);s.sub(a)}return s.normalize(),e.dir.x=s.x,e.dir.y=s.y,e.dir.z=s.z,e}_tempPosition=new Eu;_tempQuaternion=new rv;_tempScale=new Eu;_tempMatrix=new nv;_isUpdatingPhysicsWorld=!1;get isUpdating(){return this._isUpdatingPhysicsWorld}context;world;_hasCreatedWorld=!1;eventQueue;collisionHandler;objects=[];bodies=[];_meshCache=new Map;constructor(e){this.context=e}async createWorld(){if(this._hasCreatedWorld){console.error("Invalid call to create physics world: world is already created");return}this._hasCreatedWorld=!0,Vr._didLoadPhysicsEngine||(await yn.init().then(()=>yn),Vr._didLoadPhysicsEngine=!0);let e={x:0,y:-9.81,z:0};this.world=new pv(e)}clearCaches(){this._meshCache.clear()}addBoxCollider(e,t,i){let n=e.gameObject,r=Ae(n,this._tempPosition).multiply(i);r.multiplyScalar(.5);let s=Js.cuboid(r.x,r.y,r.z);this.createCollider(e,s,t)}addSphereCollider(e,t,i){let n=e.gameObject,r=Ae(n,this._tempPosition).multiplyScalar(i),s=Js.ball(r.x);this.createCollider(e,s,t)}addCapsuleCollider(e,t,i,n){let r=e.gameObject,s=Ae(r,this._tempPosition);Do&&console.log("capsule scale",s,i,n);let a=Js.capsule(i*.5*s.y-n,n*s.x);this.createCollider(e,a,t)}addMeshCollider(e,t,i,n){let r=t.geometry;if(!r){Do&&console.warn("Missing mesh geometry",t.name);return}let s=r.getAttribute("position").array,a=r.index?.array;if(Math.abs(n.x-1)>1e-4||Math.abs(n.y-1)>1e-4||Math.abs(n.z-1)>1e-4){let u=r.uuid+"_"+n.x+"_"+n.y+"_"+n.z+"_"+i;if(this._meshCache.has(u))s=this._meshCache.get(u);else{console.warn("Your model is using scaled mesh colliders which is not optimal for performance",t.name,Object.assign({},n),t);let l=new Float32Array(s.length);for(let d=0;d<s.length;d+=3)l[d]=s[d]*n.x,l[d+1]=s[d+1]*n.y,l[d+2]=s[d+2]*n.z;s=l,this._meshCache.set(u,l)}}let c=i?Js.convexMesh(s):Js.trimesh(s,a);c&&this.createCollider(e,c).setMassProperties(1,{x:0,y:0,z:0},{x:0,y:0,z:0},{x:0,y:0,z:0,w:1})}createCollider(e,t,i){if(!this.world)throw new Error("Physics world not initialized");let n=this._tempMatrix,{rigidBody:r,useExplicitMassProperties:s}=this.getRigidbody(e,this._tempMatrix);n.decompose(this._tempPosition,this._tempQuaternion,this._tempScale),Ae(e.gameObject,this._tempScale),i&&(i.multiply(this._tempScale),this._tempPosition.x-=i.x,this._tempPosition.y+=i.y,this._tempPosition.z+=i.z),t.setTranslation(this._tempPosition.x,this._tempPosition.y,this._tempPosition.z),t.setRotation(this._tempQuaternion),t.setSensor(e.isTrigger);let a=e.sharedMaterial;if(a){switch(_n,t.setRestitution(a.bounciness),a.bounceCombine){case 0:t.setRestitutionCombineRule(_n.Average);break;case 3:t.setRestitutionCombineRule(_n.Max);break;case 2:t.setRestitutionCombineRule(_n.Min);break;case 1:t.setRestitutionCombineRule(_n.Multiply);break}switch(t.setFriction(a.dynamicFriction),a.frictionCombine){case 0:t.setFrictionCombineRule(_n.Average);break;case 3:t.setFrictionCombineRule(_n.Max);break;case 2:t.setFrictionCombineRule(_n.Min);break;case 1:t.setFrictionCombineRule(_n.Multiply);break}}let c=this.world.createCollider(t,r);return c[Lo]=e,e[Ft]=c,c.setActiveEvents(lv.COLLISION_EVENTS),this.objects.push(e),this.bodies.push(c),c}getRigidbody(e,t){if(!this.world)throw new Error("Physics world not initialized");let i=null,n=!1;if(e.attachedRigidbody){let r=e.attachedRigidbody;if(i=r[Ft],n=!0,!i){let s=r.isKinematic&&!Tu;Do&&console.log("Create rigidbody",s);let a=s?yn.RigidBodyDesc.kinematicPositionBased():yn.RigidBodyDesc.dynamic(),c=B(e.attachedRigidbody.gameObject);a.setTranslation(c.x,c.y,c.z),a.setRotation(me(e.attachedRigidbody.gameObject)),i=this.world.createRigidBody(a),this.bodies.push(i),this.objects.push(r)}i[Lo]=r,r[Ft]=i,this.internalUpdateProperties(r,i),this.getRigidbodyRelativeMatrix(e.gameObject,r.gameObject,t)}else{let r=yn.RigidBodyDesc.kinematicPositionBased(),s=B(e.gameObject);r.setTranslation(s.x,s.y,s.z),r.setRotation(me(e.gameObject)),i=this.world.createRigidBody(r),t.identity(),i[Lo]=null}return e[mv]=i,{rigidBody:i,useExplicitMassProperties:n}}removeBody(e){let t=e[Ft];if(e[Ft]=null,t&&this.world){let i=this.objects.findIndex(n=>n===e);if(i>=0){let n=this.bodies[i];if(this.bodies.splice(i,1),this.objects.splice(i,1),n instanceof cv){let r=n;this.world?.removeCollider(r,!0);let s=r.parent();s&&s.numColliders()<=0&&this.world?.removeRigidBody(s)}else n instanceof hv}}}updateBody(e,t,i){if(!(e.destroyed||!e.gameObject)&&!(!t&&!i))if(e.isCollider===!0)console.warn("TODO: implement updating collider position");else{let n=e,r=n[Ft];r&&this.syncPhysicsBody(n.gameObject,r,t,i)}}updateProperties(e){let t=e[Ft];t&&this.internalUpdateProperties(e,t)}internal_getRigidbody(e){return e[Ft]}internalUpdateProperties(e,t){t.enableCcd(e.collisionDetectionMode!==0),t.setLinearDamping(e.drag),t.setAngularDamping(e.angularDrag),t.setGravityScale(e.useGravity?e.gravityScale:0,!0),t.setEnabledRotations(!e.lockRotationX,!e.lockRotationY,!e.lockRotationZ,!0),t.setEnabledTranslations(!e.lockPositionX,!e.lockPositionY,!e.lockPositionZ,!0),e.isKinematic?t.setBodyType(yn.RigidBodyType.KinematicPositionBased):t.setBodyType(yn.RigidBodyType.Dynamic)}lines;step(e){!this.world||(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new uv(!1)),e&&(this.world.timestep=H.lerp(this.world.timestep,e,.8)),this.world.step(this.eventQueue),this._isUpdatingPhysicsWorld=!1,this.updateDebugRendering(this.world))}updateDebugRendering(e){if(Do||Tu||fv){if(!this.lines){let i=new tv({color:2258688}),n=new ev;this.lines=new iv(n,i),this.context.scene.add(this.lines)}let t=e.debugRender();this.lines.geometry.setAttribute("position",new pf(t.vertices,3)),this.lines.geometry.setAttribute("color",new pf(t.colors,4))}}postStep(){!this.world||(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new Ou(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()))}syncObjects(){if(!Tu)for(let e=0;e<this.bodies.length;e++){let t=this.objects[e],i=this.bodies[e],n=t;if(n?.isCollider===!0&&!n.attachedRigidbody){let c=i.parent();c&&this.syncPhysicsBody(t.gameObject,c,!0,!0);continue}let r=i.translation(),s=i.rotation(),a=t.center;if(a&&a.isVector3){this._tempQuaternion.set(s.x,s.y,s.z,s.w);let c=this._tempPosition.copy(a).applyQuaternion(this._tempQuaternion),u=Ae(t.gameObject);c.multiply(u),r.x-=c.x,r.y-=c.y,r.z-=c.z}fn(t.gameObject,r.x,r.y,r.z),kp(t.gameObject,s.x,s.y,s.z,s.w)}}syncPhysicsBody(e,t,i,n){let r=B(e,this._tempPosition),s=me(e,this._tempQuaternion);switch(t.bodyType()){case Cu.Fixed:case Cu.KinematicPositionBased:case Cu.KinematicVelocityBased:i&&t.setNextKinematicTranslation(r),n&&t.setNextKinematicRotation(s);break;default:i&&t.setTranslation(r,!1),n&&t.setRotation(s,!1);break}t.wakeUp()}getRigidbodyRelativeMatrix(e,t,i,n){if(n===void 0&&(n=Vr._matricesBuffer,n.length=0),e===t){let r=Ae(e,this._tempPosition);i.makeScale(r.x,r.y,r.z);for(let s=n.length-1;s>=0;s--)i.multiply(n[s]);return i}return n.push(e.matrix),e.parent&&this.getRigidbodyRelativeMatrix(e.parent,t,i,n),i}addFixedJoint(e,t){if(!this.world){console.error("Physics world not initialized");return}let i=e[Ft],n=t[Ft];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let r=dv.fixed(Vr.centerConnectionPos,Vr.centerConnectionRot,this._tempPosition,this._tempQuaternion),s=this.world.createImpulseJoint(r,i,n,!0);Do&&console.log("ADD FIXED JOINT",s)}addHingeJoint(e,t,i,n){if(!this.world){console.error("Physics world not initialized");return}let r=e[Ft],s=t[Ft];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let a=yn.JointData.revolute(i,this._tempPosition,n),c=this.world.createImpulseJoint(a,r,s,!0);Do&&console.log("ADD HINGE JOINT",c)}calculateJointRelativeMatrices(e,t,i){e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let n=e.matrixWorld,r=t.matrixWorld;n.elements[0]=1,n.elements[5]=1,n.elements[10]=1,r.elements[0]=1,r.elements[5]=1,r.elements[10]=1,i.copy(r).premultiply(n.invert()).invert()}},Kn=Vr;I(Kn,"_didLoadPhysicsEngine",!1),I(Kn,"_matricesBuffer",[]),I(Kn,"centerConnectionPos",{x:0,y:0,z:0}),I(Kn,"centerConnectionRot",{x:0,y:0,z:0,w:1});var Ou=class{world;eventQueue;constructor(e,t){this.world=e,this.eventQueue=t}activeCollisions=[];activeCollisionsStay=[];activeTriggers=[];handleCollisionEvents(){!this.eventQueue||!this.world||this.eventQueue.drainCollisionEvents((e,t,i)=>{let n=this.world.getCollider(e),r=this.world.getCollider(t),s=n[Lo],a=r[Lo];Ru&&console.log("EVT",s.name,a.name,i,n,r),s&&a&&(i?(this.onCollisionStarted(s,n,a,r),this.onCollisionStarted(a,r,s,n)):(this.onCollisionEnded(s,a),this.onCollisionEnded(a,s)))})}update(){this.onHandleCollisionStay()}onCollisionStarted(e,t,i,n){let r=null;if(e.isTrigger||i.isTrigger)si(e.gameObject,s=>{s.onTriggerEnter&&s.onTriggerEnter(i),this.activeTriggers.push({collider:e,component:s,otherCollider:i})});else{let s=e.gameObject;this.world.contactPair(t,n,(a,c)=>{si(s,u=>{let l=u.onCollisionEnter||u.onCollisionStay||u.onCollisionExit;if(l||Ru){if(!r){let d=[],h=a.normal();for(let g=0;g<a.numSolverContacts();g++){let E=a.solverContactPoint(g),_=a.contactImpulse(g);if(E){let x=a.contactDist(g),m=a.solverContactFriction(g),f=new Ka(E,x,h,_,m);d.push(f),Ru&&Et.DrawDirection(E,h,16711680,3,!0)}}r=new Qs(s,i,d)}if(l){let d={collider:e,component:u,collision:r};this.activeCollisions.push(d),u.onCollisionStay&&this.activeCollisionsStay.push(d),u.onCollisionEnter?.call(u,r)}}})})}}onHandleCollisionStay(){for(let e of this.activeCollisionsStay){let t=e.component;if(t.activeAndEnabled&&t.onCollisionStay){let i=e.collision;t.onCollisionStay(i)}}for(let e of this.activeTriggers){let t=e.component;if(t.activeAndEnabled&&t.onTriggerStay){let i=e.otherCollider;t.onTriggerStay(i)}}}onCollisionEnded(e,t){for(let i=0;i<this.activeCollisions.length;i++){let n=this.activeCollisions[i];if(n.collider===e&&n.collision.collider===t){let s=n.component;if(this.activeCollisions.splice(i,1),i--,s.activeAndEnabled&&s.onCollisionExit){let a=n.collision;s.onCollisionExit(a)}}}for(let i=0;i<this.activeCollisionsStay.length;i++){let n=this.activeCollisionsStay[i];if(n.collider===e&&n.collision.collider===t){let s=n.component;if(this.activeCollisionsStay.splice(i,1),i--,s.activeAndEnabled&&s.onCollisionExit){let a=n.collision;s.onCollisionExit(a)}}}for(let i=0;i<this.activeTriggers.length;i++){let n=this.activeTriggers[i];if(n.collider===e&&n.otherCollider===t){let s=n.component;if(this.activeTriggers.splice(i,1),i--,s.activeAndEnabled&&s.onTriggerExit){let a=n.otherCollider;s.onTriggerExit(a)}}}}};import{Clock as gv}from"three";var ff=P("timescale"),mf=1;typeof ff=="number"&&(mf=ff);var cl=class{deltaTime=0;time=0;timeScale=1;frame=0;get realtimeSinceStartup(){return this.clock.elapsedTime}get frameCount(){return this.frame}get smoothedFps(){return this._smoothedFps}clock=new gv;_smoothedFps=0;_fpsSamples=[];_fpsSampleIndex=0;update(){this.deltaTime=this.clock.getDelta(),this.deltaTime=Math.min(.1,this.deltaTime),this.deltaTime*=mf*this.timeScale,this.deltaTime<=0&&(this.deltaTime=1e-12),this.frame+=1,this.time+=this.deltaTime,this._fpsSamples.length<30?this._fpsSamples.push(this.deltaTime):this._fpsSamples[this._fpsSampleIndex++%30]=this.deltaTime;let e=0;for(let t=0;t<this._fpsSamples.length;t++)e+=this._fpsSamples[t];this._smoothedFps=1/(e/this._fpsSamples.length)}};import{WebsocketBuilder as vv}from"websocket-ts";var Hi=new Int32Array(2),ul=new Float32Array(Hi.buffer),dl=new Float64Array(Hi.buffer),jo=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var qe=class{constructor(e,t){this.low=e|0,this.high=t|0}static create(e,t){return e==0&&t==0?qe.ZERO:new qe(e,t)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(e){return this.low==e.low&&this.high==e.high}};qe.ZERO=new qe(0,0);var Zs;(function(o){o[o.UTF8_BYTES=1]="UTF8_BYTES",o[o.UTF16_STRING=2]="UTF16_STRING"})(Zs||(Zs={}));var Fi=class{constructor(e){this.bytes_=e,this.position_=0}static allocate(e){return new Fi(new Uint8Array(e))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(e){this.position_=e}capacity(){return this.bytes_.length}readInt8(e){return this.readUint8(e)<<24>>24}readUint8(e){return this.bytes_[e]}readInt16(e){return this.readUint16(e)<<16>>16}readUint16(e){return this.bytes_[e]|this.bytes_[e+1]<<8}readInt32(e){return this.bytes_[e]|this.bytes_[e+1]<<8|this.bytes_[e+2]<<16|this.bytes_[e+3]<<24}readUint32(e){return this.readInt32(e)>>>0}readInt64(e){return new qe(this.readInt32(e),this.readInt32(e+4))}readUint64(e){return new qe(this.readUint32(e),this.readUint32(e+4))}readFloat32(e){return Hi[0]=this.readInt32(e),ul[0]}readFloat64(e){return Hi[jo?0:1]=this.readInt32(e),Hi[jo?1:0]=this.readInt32(e+4),dl[0]}writeInt8(e,t){this.bytes_[e]=t}writeUint8(e,t){this.bytes_[e]=t}writeInt16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8}writeUint16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8}writeInt32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24}writeUint32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24}writeInt64(e,t){this.writeInt32(e,t.low),this.writeInt32(e+4,t.high)}writeUint64(e,t){this.writeUint32(e,t.low),this.writeUint32(e+4,t.high)}writeFloat32(e,t){ul[0]=t,this.writeInt32(e,Hi[0])}writeFloat64(e,t){dl[0]=t,this.writeInt32(e,Hi[jo?0:1]),this.writeInt32(e+4,Hi[jo?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+4+4)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let e="";for(let t=0;t<4;t++)e+=String.fromCharCode(this.readInt8(this.position_+4+t));return e}__offset(e,t){let i=e-this.readInt32(e);return t<this.readInt16(i)?this.readInt16(i+t):0}__union(e,t){return e.bb_pos=t+this.readInt32(t),e.bb=this,e}__string(e,t){e+=this.readInt32(e);let i=this.readInt32(e),n="",r=0;if(e+=4,t===Zs.UTF8_BYTES)return this.bytes_.subarray(e,e+i);for(;r<i;){let s,a=this.readUint8(e+r++);if(a<192)s=a;else{let c=this.readUint8(e+r++);if(a<224)s=(a&31)<<6|c&63;else{let u=this.readUint8(e+r++);if(a<240)s=(a&15)<<12|(c&63)<<6|u&63;else{let l=this.readUint8(e+r++);s=(a&7)<<18|(c&63)<<12|(u&63)<<6|l&63}}}s<65536?n+=String.fromCharCode(s):(s-=65536,n+=String.fromCharCode((s>>10)+55296,(s&(1<<10)-1)+56320))}return n}__union_with_string(e,t){return typeof e=="string"?this.__string(t):this.__union(e,t)}__indirect(e){return e+this.readInt32(e)}__vector(e){return e+this.readInt32(e)+4}__vector_len(e){return this.readInt32(e+this.readInt32(e))}__has_identifier(e){if(e.length!=4)throw new Error("FlatBuffers: file identifier must be length "+4);for(let t=0;t<4;t++)if(e.charCodeAt(t)!=this.readInt8(this.position()+4+t))return!1;return!0}createLong(e,t){return qe.create(e,t)}createScalarList(e,t){let i=[];for(let n=0;n<t;++n)e(n)!==null&&i.push(e(n));return i}createObjList(e,t){let i=[];for(let n=0;n<t;++n){let r=e(n);r!==null&&i.push(r.unpack())}return i}};var Ct=class{constructor(e){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null;let t;e?t=e:t=1024,this.bb=Fi.allocate(t),this.space=t}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(e){this.force_defaults=e}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(e,t){e>this.minalign&&(this.minalign=e);let i=~(this.bb.capacity()-this.space+t)+1&e-1;for(;this.space<i+e+t;){let n=this.bb.capacity();this.bb=Ct.growByteBuffer(this.bb),this.space+=this.bb.capacity()-n}this.pad(i)}pad(e){for(let t=0;t<e;t++)this.bb.writeInt8(--this.space,0)}writeInt8(e){this.bb.writeInt8(this.space-=1,e)}writeInt16(e){this.bb.writeInt16(this.space-=2,e)}writeInt32(e){this.bb.writeInt32(this.space-=4,e)}writeInt64(e){this.bb.writeInt64(this.space-=8,e)}writeFloat32(e){this.bb.writeFloat32(this.space-=4,e)}writeFloat64(e){this.bb.writeFloat64(this.space-=8,e)}addInt8(e){this.prep(1,0),this.writeInt8(e)}addInt16(e){this.prep(2,0),this.writeInt16(e)}addInt32(e){this.prep(4,0),this.writeInt32(e)}addInt64(e){this.prep(8,0),this.writeInt64(e)}addFloat32(e){this.prep(4,0),this.writeFloat32(e)}addFloat64(e){this.prep(8,0),this.writeFloat64(e)}addFieldInt8(e,t,i){(this.force_defaults||t!=i)&&(this.addInt8(t),this.slot(e))}addFieldInt16(e,t,i){(this.force_defaults||t!=i)&&(this.addInt16(t),this.slot(e))}addFieldInt32(e,t,i){(this.force_defaults||t!=i)&&(this.addInt32(t),this.slot(e))}addFieldInt64(e,t,i){(this.force_defaults||!t.equals(i))&&(this.addInt64(t),this.slot(e))}addFieldFloat32(e,t,i){(this.force_defaults||t!=i)&&(this.addFloat32(t),this.slot(e))}addFieldFloat64(e,t,i){(this.force_defaults||t!=i)&&(this.addFloat64(t),this.slot(e))}addFieldOffset(e,t,i){(this.force_defaults||t!=i)&&(this.addOffset(t),this.slot(e))}addFieldStruct(e,t,i){t!=i&&(this.nested(t),this.slot(e))}nested(e){if(e!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")}notNested(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")}slot(e){this.vtable!==null&&(this.vtable[e]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(e){let t=e.capacity();if(t&3221225472)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");let i=t<<1,n=Fi.allocate(i);return n.setPosition(i-t),n.bytes().set(e.bytes(),i-t),n}addOffset(e){this.prep(4,0),this.writeInt32(this.offset()-e+4)}startObject(e){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=e;for(let t=0;t<e;t++)this.vtable[t]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);let e=this.offset(),t=this.vtable_in_use-1;for(;t>=0&&this.vtable[t]==0;t--);let i=t+1;for(;t>=0;t--)this.addInt16(this.vtable[t]!=0?e-this.vtable[t]:0);let n=2;this.addInt16(e-this.object_start);let r=(i+n)*2;this.addInt16(r);let s=0,a=this.space;e:for(t=0;t<this.vtables.length;t++){let c=this.bb.capacity()-this.vtables[t];if(r==this.bb.readInt16(c)){for(let u=2;u<r;u+=2)if(this.bb.readInt16(a+u)!=this.bb.readInt16(c+u))continue e;s=this.vtables[t];break}}return s?(this.space=this.bb.capacity()-e,this.bb.writeInt32(this.space,s-e)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-e,this.offset()-e)),this.isNested=!1,e}finish(e,t,i){let n=i?4:0;if(t){let r=t;if(this.prep(this.minalign,4+4+n),r.length!=4)throw new Error("FlatBuffers: file identifier must be length "+4);for(let s=4-1;s>=0;s--)this.writeInt8(r.charCodeAt(s))}this.prep(this.minalign,4+n),this.addOffset(e),n&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(e,t){this.finish(e,t,!0)}requiredField(e,t){let i=this.bb.capacity()-e,n=i-this.bb.readInt32(i);if(!(this.bb.readInt16(n+t)!=0))throw new Error("FlatBuffers: field "+t+" must be set")}startVector(e,t,i){this.notNested(),this.vector_num_elems=t,this.prep(4,e*t),this.prep(i,e*t)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(e){if(!e)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(e))return this.string_maps.get(e);let t=this.createString(e);return this.string_maps.set(e,t),t}createString(e){if(!e)return 0;let t;if(e instanceof Uint8Array)t=e;else{t=[];let i=0;for(;i<e.length;){let n,r=e.charCodeAt(i++);if(r<55296||r>=56320)n=r;else{let s=e.charCodeAt(i++);n=(r<<10)+s+(65536-(55296<<10)-56320)}n<128?t.push(n):(n<2048?t.push(n>>6&31|192):(n<65536?t.push(n>>12&15|224):t.push(n>>18&7|240,n>>12&63|128),t.push(n>>6&63|128)),t.push(n&63|128))}}this.addInt8(0),this.startVector(1,t.length,1),this.bb.setPosition(this.space-=t.length);for(let i=0,n=this.space,r=this.bb.bytes();i<t.length;i++)r[n++]=t[i];return this.endVector()}createLong(e,t){return qe.create(e,t)}createObjectOffset(e){return e===null?0:typeof e=="string"?this.createString(e):e.pack(this)}createObjectOffsetList(e){let t=[];for(let i=0;i<e.length;++i){let n=e[i];if(n!==null)t.push(this.createObjectOffset(n));else throw new Error("FlatBuffers: Argument for createObjectOffsetList cannot contain null.")}return t}createStructOffsetList(e,t){return t(this,e.length),this.createObjectOffsetList(e),this.endVector()}};var gf={};function Fo(o,e){gf[o]=e}function bf(o){let e=o.getBufferIdentifier(),t=gf[e];return t(o)}function vf(o){return typeof o.guid=="function"?o.guid():null}var Mu=La(pl(),1);var fl=class{get isHost(){return this._host!==void 0}_host;_client;_clientData;constructor(){this.onEnable()}onEnable(){let e="HOST-5980e65c-8438-453e-8b35-f13c736dcd81";this.trySetupHost(e)}trySetupHost(e){let t=new Mu.default(e);t.on("error",i=>{console.error(i),this._host=void 0,this.trySetupClient(e)}),t.on("open",i=>{this._host=new Au(t)})}trySetupClient(e){this._client=new Mu.default,this._client.on("error",t=>{console.error("Client error",t)}),this._client.on("open",t=>{console.log("client connected",t),this._clientData=this._client.connect(e,{metadata:{id:t}}),this._clientData.on("open",()=>{console.log("Connected to host")}),this._clientData.on("data",i=>{console.log("<<",i)})})}},Iu=class{_peer;constructor(e){this._peer=e}};var Au=class extends Iu{get isHost(){return!0}_connections=[];constructor(e){super(e),console.log("I AM THE HOST"),this._peer?.on("connection",this.onConnection.bind(this)),this._peer.on("close",()=>{this.broadcast("BYE")}),setInterval(()=>{this.broadcast("HELLO")},2e3)}onConnection(e){console.log("host connection",e),e.on("open",()=>{this._connections.push(e),this.broadcastConnection(e)})}broadcastConnection(e){let t=this._connections.map(i=>i.metadata?.id).filter(i=>i!==void 0);this.broadcast({type:"connection-list",connections:t})}broadcast(e){if(e!=null){console.log(">>",e);for(let t in this._peer.connections){let i=this._peer.connections[t];if(!!i)if(Array.isArray(i))for(let n of i)!n||n.send(e);else console.warn(i)}}}};var ml="wss://needle-tiny-starter.glitch.me/socket",ht=!!P("debugnet"),gl=!!(ht||P("debugowner"));var Zn=class{guid;connection;get hasOwnership(){return this._hasOwnership}get isOwned(){return this._isOwned}get isConnected(){return this.connection.isConnected}_hasOwnership=!1;_isOwned=void 0;_gainSubscription;_lostSubscription;_hasOwnerResponse;constructor(e,t){this.connection=e,this.guid=t,this._gainSubscription=this.onGainedOwnership.bind(this),this._lostSubscription=this.onLostOwnership.bind(this),e.beginListen("lost-ownership",this._lostSubscription),e.beginListen("gained-ownership-broadcast",this._gainSubscription),this._hasOwnerResponse=this.onHasOwnerResponse.bind(this),e.beginListen("response-has-owner",this._hasOwnerResponse)}_isWaitingForOwnershipResponseCallback=null;updateIsOwned(){this.connection.send("request-has-owner",{guid:this.guid})}onHasOwnerResponse(e){e.guid===this.guid&&(this._isOwned=e.value)}requestOwnershipIfNotOwned(){return this._isWaitingForOwnershipResponseCallback!==null?this:(this._isWaitingForOwnershipResponseCallback=this.waitForHasOwnershipRequestResponse.bind(this),this.connection.beginListen("response-has-owner",this._isWaitingForOwnershipResponseCallback),this.connection.send("request-has-owner",{guid:this.guid}),this)}waitForHasOwnershipRequestResponse(e){e.guid===this.guid&&(this._isWaitingForOwnershipResponseCallback&&(this.connection.stopListening("response-has-owner",this._isWaitingForOwnershipResponseCallback),this._isWaitingForOwnershipResponseCallback=null),this._isOwned=e.value,e.value||(gl&&console.log("request ownership",this.guid),this.requestOwnership()))}requestOwnershipAsync(){return new Promise((e,t)=>{this.requestOwnership();let i=0,n=()=>{if(i++>10)return t("Timeout");setTimeout(()=>{this.hasOwnership?e(this):n()},100)};n()})}requestOwnership(){return gl&&console.log("Request ownership",this.guid),this.connection.send("request-ownership",{guid:this.guid}),this}freeOwnership(){return this.connection.send("remove-ownership",{guid:this.guid}),this._isWaitingForOwnershipResponseCallback&&(this.connection.stopListening("response-has-owner",this._isWaitingForOwnershipResponseCallback),this._isWaitingForOwnershipResponseCallback=null),this}destroy(){this.connection.stopListening("gained-ownership",this._gainSubscription),this.connection.stopListening("lost-ownership",this._lostSubscription),this.connection.stopListening("response-has-owner",this._hasOwnerResponse),this._isWaitingForOwnershipResponseCallback&&(this.connection.stopListening("response-has-owner",this._isWaitingForOwnershipResponseCallback),this._isWaitingForOwnershipResponseCallback=null)}onGainedOwnership(e){e.guid===this.guid&&(this._isOwned=!0,this.connection.connectionId===e.owner?(gl&&console.log("GAINED OWNERSHIP",this.guid),this._hasOwnership=!0):this._hasOwnership=!1)}onLostOwnership(e){e===this.guid&&(gl&&console.log("LOST OWNERSHIP",this.guid),this._hasOwnership=!1,this._isOwned=!1)}},bl=class{context;_peer=null;constructor(e){this.context=e}get peer(){return this._peer||(this._peer=new fl),this._peer}tryGetState(e){return e==="invalid"?null:this._state[e]}get connectionId(){return this._connectionId}get isDebugEnabled(){return ht}get isConnected(){return this.connected}get currentRoomName(){return this._currentRoomName}get allowEditing(){return this._currentRoomAllowEditing}get currentRoomViewId(){return this._currentRoomViewId}get isInRoom(){return this._isInRoom}get currentLatency(){return this._currentDelay}userIsInRoom(e){return this._currentInRoom.indexOf(e)!==-1}_usersInRoomCopy=[];usersInRoom(e=null){e||(e=this._usersInRoomCopy),e.length=0;for(let t of this._currentInRoom)e.push(t);return e}joinRoom(e,t=!1){this.connect(),ht&&console.log("join: "+e),this.send("join-room",{room:e,viewOnly:t},0)}leaveRoom(e=null){if(e||(e=this.currentRoomName),!e){console.error("Can not leave unknown room");return}this.send("leave-room",{room:e})}send(e,t=null,i=2){if(t===null&&(t={}),i===2){this._defaultMessagesBuffer.push({key:e,value:t});return}return this.sendWithWebsocket(e,t,i)}sendDeleteRemoteState(e){this.send("delete-state",{guid:e,dontSave:!0}),delete this._state[e]}sendDeleteRemoteStateAll(){this.send("delete-all-state"),this._state={}}sendBinary(e){ht&&console.log("<< bin",e.length),this._ws?.send(e)}_defaultMessagesBuffer=[];_defaultMessagesBufferArray=[];sendBufferedMessagesNow(){if(!this._ws)return;this._defaultMessagesBufferArray.length=0;let e=Object.keys(this._defaultMessagesBuffer).length;for(let i in this._defaultMessagesBuffer){let n=this._defaultMessagesBuffer[i];if(e<=1){this.sendWithWebsocket(n.key,n.value,3);break}let r=this.toMessage(n.key,n.value);this._defaultMessagesBufferArray.push(r)}if(this._defaultMessagesBuffer.length=0,this._defaultMessagesBufferArray.length>0&&ht&&console.log("SEND BUFFERED",this._defaultMessagesBufferArray.length),this._defaultMessagesBufferArray.length<=0)return;let t=JSON.stringify(this._defaultMessagesBufferArray);this._ws?.send(t)}beginListen(e,t){return this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t),t}stopListening(e,t){if(!t||!this._listeners[e])return;let i=this._listeners[e].indexOf(t);i>=0&&this._listeners[e].splice(i,1)}beginListenBinrary(e,t){return this._listenersBinary[e]||(this._listenersBinary[e]=[]),this._listenersBinary[e].push(t),t}stopListenBinary(e,t){if(!this._listenersBinary[e])return;let i=this._listenersBinary[e].indexOf(t);i>=0&&this._listenersBinary[e].splice(i,1)}netWebSocketUrlProvider;registerProvider(e){this.netWebSocketUrlProvider=e}connect(){if(this.connected)return;ht&&console.log("connecting");let e=this.netWebSocketUrlProvider?.getWebsocketUrl();e?ml=e:hp()&&(ml="wss://"+window.location.host+"/socket"),this.connectWebsocket()}_listeners={};_listenersBinary={};connected=!1;channelId;_connectionId=null;_isConnectingToWebsocket=!1;_ws;_waitingForSocket={};_isInRoom=!1;_currentRoomName=null;_currentRoomViewId=null;_currentRoomAllowEditing=!0;_currentInRoom=[];_state={};_currentDelay=-1;connectWebsocket(){if(this._isConnectingToWebsocket)return;this._isConnectingToWebsocket=!0,console.log("Connecting to "+ml);let e=new vv(ml).onOpen(()=>{this._ws=e,this._isConnectingToWebsocket=!1,this.connected=!0,console.log("Connected to websocket"),this.onSendQueued(0)}).onClose(t=>{this.connected=!1,this._isInRoom=!1}).onError((t,i)=>{console.error(t,i)}).onMessage(this.onMessage.bind(this)).onRetry(()=>{console.log("websocket connection retry")}).build()}onMessage(e,t){let i=t.data;try{if(typeof i!="string"){i.size&&this.handleIncomingBinaryMessage(i);return}let n=JSON.parse(i);if(Array.isArray(n))for(let r of n)this.handleIncomingStringMessage(r);else this.handleIncomingStringMessage(n);return}catch{ht&&i==="pong"&&console.log("<<",i)}}async handleIncomingBinaryMessage(e){let t=await e.arrayBuffer();var i=new Uint8Array(t);let n=new Fi(i),r=n.getBufferIdentifier(),s=this._listenersBinary[r],a=bf(n),c=vf(a);if(c&&typeof c=="string"&&(this._state[c]=a),!s)return;let u=a??n;for(let l of s)l(u)}handleIncomingStringMessage(e){if(ht&&console.log("<<",e.key??e),e.key)switch(e.key){case"connection-start-info":if(e.data){let s=e.data;s&&(console.assert(s.id!==void 0&&s.id!==null&&s.id.length>0,"server did not send connection id",s.id),console.log("Your id is: "+s.id,this.context.alias??""),this._connectionId=s.id)}else console.warn("Expected connection id in "+e.key);break;case"joined-room":if(ht&&console.log(e),e){this._isInRoom=!0;let s=e;this._currentRoomName=s.room,this._currentRoomViewId=s.viewId,this._currentRoomAllowEditing=s.allowEditing??!0,console.log("Room view id",this._currentRoomViewId),this._currentInRoom.length=0,this._currentInRoom.push(...s.inRoom),ht&&console.log("joined room with",this._currentInRoom,this.context.alias??"")}this.onSendQueued(1);break;case"left-room":e.room===this.currentRoomName&&(this._isInRoom=!1,this._currentRoomName=null,this._currentInRoom.length=0);break;case"user-joined-room":if(e.data){let s=e.data;this._currentInRoom.push(s.userId),ht&&console.log(s.userId+" joined","now in room:",this._currentInRoom)}break;case"user-left-room":if(e.data){let s=e.data,a=this._currentInRoom.indexOf(s.userId);a>=0&&(console.log(s.userId+" left",this.context.alias??""),this._currentInRoom.splice(a,1)),s.userId===this.connectionId&&console.log("you left the room")}break;case"all-room-state-deleted":ht&&console.log("RECEIVED all-room-state-deleted"),this._state={};break;case"ping":case"pong":let r=e.data?.time;r&&(this._currentDelay=this.context.time.time-r),ht&&console.log("Current latency: "+this._currentDelay.toFixed(1)+" sec","Clients in room: "+this._currentInRoom?.length);break}let t=this._listeners[e.key];if(t)for(let n of t)n(e.data);let i=e.data;i&&(this._state[i.guid]=i)}toMessage(e,t){return{key:e,data:t}}sendWithWebsocket(e,t,i=1){if(!this._ws){let r=this._waitingForSocket[i]||[];r.push(()=>this.sendWithWebsocket(e,t,i)),this._waitingForSocket[i]=r;return}let n=JSON.stringify(this.toMessage(e,t));ht&&console.log(">>",e),this._ws.send(n)}onSendQueued(e){let t=this._waitingForSocket[e];if(t){for(let i of t)i();t.length=0}}};import{EffectComposer as ny}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as ry}from"three/examples/jsm/postprocessing/RenderPass.js";import*as $n from"three";var Pf=La(Sf(),1),vl=class{success;filename;hash;size;url;constructor(e,t,i,n){this.success=e,this.filename=t,this.hash=i,this.size=n}};async function Of(o,e){let t=await o.arrayBuffer(),i=kf(t),n=o.name.split(".").pop(),r=i+"."+n,s=o.name.split(".").shift();console.assert(s!==void 0);let a={alias:s,filename:r},u=await(await fetch(e+"/exists",{method:"POST",body:JSON.stringify(a)})).json();if(u.success||console.warn("exists check did fail"),u.exists)return console.log("file already exists",i),new vl(!0,r,i,o.size);console.log("begin uploading file",s,o.size);let l=new FormData;l.append("file",o);let d={};d.filesize=o.size,s&&(d.alias=s);let g=await(await fetch(e+"/upload/file",{method:"POST",body:l,headers:d})).json();if(g?.success===!1)return g.message!==void 0?console.error("Upload failed:",g.message):console.error("Upload failed"),null;console.assert(g.hash_sum===i,"hash sum did not match","received:",g.hash_sum,"expected:",i),g.success&&console.log("successfully uploaded",i,g.id);let E=new vl(g.success,r,i,o.size);return E.url=e,E}function kf(o){return(0,Pf.default)(new Uint8Array(o))}async function yl(o,e,t,i,n=!1){try{let r=await fetch(i+"/download/file",{method:"POST",body:o});if(r.status!==200)return console.error("download failed",r),null;let s=await r.blob(),a=await s.arrayBuffer();n||console.assert(s.size===t,"size mismatch","expected:",t,"got:",s.size);let c=kf(a);return n||console.assert(c===e,"hash mismatch, downloaded file is invalid"),s.arrayBuffer()}catch(r){console.error(r)}return null}async function Mf(o,e){let t=await fetch(o),i=t.body?.getReader(),n=t.headers.get("Content-Length"),r=n?parseInt(n):0;if(!i)return null;let s=0,a=[];for(;;){let{done:l,value:d}=await i.read();if(d&&(a.push(d),s+=d.length,e.call(null,new ProgressEvent("progress",{loaded:s,total:r}))),l)break}let c=new Uint8Array(s),u=0;for(let l of a)c.set(l,u),u+=l.length;return c}function _l(o,e,t){console.warn("Adding components on object has been temporarily disabled")}var Af,If=null;function Ye(){return Af}function xl(o){If!==o&&(If=o,Af=new o)}var ju=class{guid;file_name;file_hash;file_size;position;seed;sender;serverUrl;parentGuid;boundsSize;constructor(e,t,i,n,r,s,a,c){this.seed=t,this.guid=i,this.file_name=n,this.file_hash=r,this.file_size=s,this.position=a,this.sender=e,this.serverUrl=c}};async function Fu(o,e,t){let i=o.name;return i.endsWith(".gltf")||i.endsWith(".glb")?new Promise((n,r)=>{let s=new FileReader;s.readAsDataURL(o),s.onloadend=async a=>{let c=s.result,u=il(),l=new Se(u),d=await Ye().loadSync(e,c,l,!0);if(d&&d.scene){let h=d.scene;if(!h.guid){let g=new Se(u);h.guid=g.generateUUID()}t&&wv(e.connection,o,u,h,t),_l(h,l,d),n(d)}}}):(console.warn("Unsupported file type: "+i),console.log(o),null)}async function Df(o,e){return new Promise(async(t,i)=>{let n=il(),r=new Se(n),s=await Ye().loadSync(e,o.toString(),r,!0);if(s&&s.scene){let a=s.scene;_l(a,r,s),t(s)}else console.warn("Unsupported file type: "+o.toString())})}function Lf(o){o.connection.beginListen("file-spawned",async e=>{if(e.sender!==o.connection.connectionId){console.log("received file event",e),Ev(e,o);let t=null;try{t=await yl(e.file_name,e.file_hash,e.file_size,e.serverUrl)}finally{Cv(e,o)}if(t){let i=new Se(e.seed),n=await Ye().parseSync(o,t,null,i);if(n&&n.scene){let r=n.scene;if(_l(r,i,n),e.parentGuid){let s=Fr(e.parentGuid,o.scene);"add"in s&&s.add(r)}r.parent||o.scene.add(r),e.position!==null&&r.position.copy(e.position)}}else console.error("download didnt return file")}})}async function wv(o,e,t,i,n){if(!o.connectionId){console.error("Can not upload file - no connection id");return}if(!i.guid){console.error("Can not upload file - no guid",i,i.guid);return}let r=await Of(e,n);if(!r)return;if(!r.filename){console.error("Can not send upload event - no filename",e.name);return}if(!r.hash){console.error("Can not send upload event - no hash",e.name);return}let s=new ju(o.connectionId,t,i.guid,r.filename,r.hash,e.size,i.position,r.url??n);i.parent&&(s.parentGuid=i.parent.guid),o.send("file-spawned",s)}var Hu={};function Ev(o,e){let t=new $n.BoxGeometry,i=new $n.Mesh(t,new $n.MeshBasicMaterial({color:65280})),n=new $n.BoxHelper(i,5592405);if(Hu[o.guid]=n,e.scene.add(n),o.parentGuid){let r=Fr(o.parentGuid,e.scene);r&&r.add(n)}o.position&&n.position.copy(o.position)}function Cv(o,e){let t=o.guid,i=Hu[t];i&&(delete Hu[t],i.removeFromParent())}import*as jf from"three";var ET=P("debugassets");var wl=class{constructor(){window.addEventListener("unhandledrejection",e=>{if(e.defaultPrevented)return;let t=e?.reason?.path;if(t){let i=t[0];i&&i.tagName==="IMG"&&(console.warn(`Could not load image:
152
+ `+i.src),e.preventDefault())}})}texturesLoader=new jf.TextureLoader;textures={};texturesLoading={};async loadTexture(e){if(this.textures[e])return this.textures[e];if(this.texturesLoading[e])return await this.texturesLoading[e];let t=this.texturesLoader.loadAsync(e);this.texturesLoading[e]=t;let i=await t;return delete this.texturesLoading[e],this.textures[e]=i,i}getTexture(e){return this._textures.get(e)||null}findTexture(e){for(let t of this._textures.values())if(t.name===e)return t;return null}findMesh(e){for(let t of this._meshes.values())if(t.name===e)return t;return null}findMaterial(e){for(let t of this._materials.values())if(t.name===e)return t;return null}async registerGltf(e){}registerAsset(e){}_materials=new Map;_meshes=new Map;_textures=new Map};import*as Yf from"three/examples/jsm/libs/stats.module.js";import{Vector4 as Iv,EquirectangularReflectionMapping as Cl,sRGBEncoding as Tl,WebGLCubeRenderTarget as Av}from"three";import{LightProbeGenerator as Dv}from"three/examples/jsm/lights/LightProbeGenerator.js";import*as Hf from"three";var Rv=new Hf.FileLoader;async function Bu(o){return new Promise((e,t)=>{Rv.load(o,e,void 0,t)})}import{Vector4 as er,FileLoader as Pv,DataTexture as Wu,RGBAFormat as Ov,Color as kv}from"three";var $s=new Uint8Array(4);$s[0]=255;$s[1]=255;$s[2]=255;$s[3]=255;var Uf=new Wu($s,1,1,Ov);function El(o,e=1){let t="alpha"in o,i=e*e,n=new Uint8Array(4*i),r=Math.floor(o.r*255),s=Math.floor(o.g*255),a=Math.floor(o.b*255);for(let u=0;u<i;u++){let l=u*4;n[l+0]=r,n[l+1]=s,n[l+2]=a,t?n[l+3]=Math.floor(o.alpha*255):n[l+3]=255}let c=new Wu(n,e,e);return c.needsUpdate=!0,c}function Gf(o,e,t,i=1,n=3){let a=i*n,c=[o,e,t],u=c.length,l=new Uint8Array(4*u*a),d=new kv;for(let g=0;g<n;g++){let E=Math.floor(g/n*u),_=H.clamp(E+1,0,u-1),x=c[E],m=c[_],f=g/n*u%1;d.lerpColors(x,m,f);let p=Math.floor(d.r*255),b=Math.floor(d.g*255),w=Math.floor(d.b*255);for(let C=0;C<i;C++){let T=(g*i+C)*4;l[T+0]=p,l[T+1]=b,l[T+2]=w,l[T+3]=255}}let h=new Wu(l,i,n);return h.needsUpdate=!0,h}var Gu=class{stage;code;constructor(e,t){this.stage=e,this.code=t}},Vu=class{loaded=new Map;async loadShader(e){let t=await Bu(e);return JSON.parse(t)}async load(e,t){if(this.loaded.has(t))return new Promise((r,s)=>{let a=this.loaded.get(t);a?r(a):s("Shader not found")});let i=await Bu(t),n=new Gu(e,i);return this.loaded.set(t,n),n}},PT=new Vu;function ea(o,e){let t=o.elements;e||(e=[]),e.length=0;for(let i=0;i<16;i+=4){let n=t[i],r=t[i+1],s=t[i+2],a=t[i+3],c=new er(n,r,s,a);e.push(c)}return e}var Uu=[],Ff=[];function Nu(o,e){if(Uu.length===0)for(let t=0;t<27;t++)Uu.push(0);e||(e=Uu);for(let t=0;t<27;t++)Ff[t]=e[t];e=Ff,o.unity_SHAr={value:new er(e[9],e[3],e[6],e[0])},o.unity_SHBr={value:new er(e[12],e[15],e[18],e[21])},o.unity_SHAg={value:new er(e[10],e[4],e[7],e[1])},o.unity_SHBg={value:new er(e[13],e[16],e[19],e[22])},o.unity_SHAb={value:new er(e[11],e[5],e[8],e[2])},o.unity_SHBb={value:new er(e[14],e[17],e[20],e[23])},o.unity_SHC={value:new er(e[24],e[25],e[26],1)}}var zu=class{vertexShader;fragmentShader;technique;constructor(e,t,i){this.vertexShader=e,this.fragmentShader=t,this.technique=i}};async function Vf(o,e){if(!o)return console.error("Can not find technique: no shader data"),null;let t=o.programs[e],i=t.vertexShader,n=t.fragmentShader;if(i!==void 0&&n!==void 0){let r=o.shaders[i],s=o.shaders[n];if(r.uri&&s.uri||r.code&&s.code){if(!r.code&&r.uri&&await Bf(r),!s.code&&s.uri&&await Bf(s),!r.code||!s.code)return null;let a=o.techniques[e];return new zu(r.code,s.code,a)}}return console.error("Shader technique not found",e),null}async function Bf(o){let e=o.uri;if(!!e)if(e.endsWith(".glsl")){let i=await new Pv().loadAsync(e);o.code=i.toString()}else o.code=Mv(o.uri)}function Mv(o){return decodeURIComponent(Array.prototype.map.call(atob(o),function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))}var Xu=P("debugenvlight"),qu=(n=>(n[n.Skybox=0]="Skybox",n[n.Trilight=1]="Trilight",n[n.Flat=3]="Flat",n[n.Custom=4]="Custom",n))(qu||{});var Rl=class{context;constructor(e){this.context=e,this.context.pre_update_callbacks.push(this.preUpdate.bind(this))}sceneLightSettings;preUpdate(){let e=this.context.time;this._timevec4.x=e.time,this._timevec4.y=Math.sin(e.time),this._timevec4.z=Math.cos(e.time),this._timevec4.w=e.deltaTime}_timevec4=new Iv;get timeVec4(){return this._timevec4}get environmentIntensity(){return this.sceneLightSettings?this.sceneLightSettings.ambientIntensity:1}registerSceneLightSettings(e){this.sceneLightSettings=e}registerReflection(e,t){let i=new Qu(this.context,t,1);this._lighting[e]=i}getReflection(e){return this._lighting[e]}enableReflection(e){switch(Xu&&console.log(this.sceneLightSettings?qu[this.sceneLightSettings.ambientMode]:"Unknown ambient mode"),this.sceneLightSettings?.ambientMode){case 0:case 4:let t=this.getReflection(e);if(t&&t.Source){let i=this.context.scene,n=t.Source;n.encoding=Tl,n.mapping=Cl,i.environment=n;return}break}if(this.sceneLightSettings?.environmentReflectionSource===1)switch(this.sceneLightSettings?.ambientMode){case 1:if(this.sceneLightSettings.ambientTrilight){let t=this.sceneLightSettings.ambientTrilight,i=Gf(t[0],t[1],t[2],64,64);i.encoding=Tl,i.mapping=Cl,this.context.scene.environment=i}else console.error("Missing ambient trilight",this.sceneLightSettings.sourceId);return;case 3:if(this.sceneLightSettings.ambientLight){let t=El(this.sceneLightSettings.ambientLight,64);t.encoding=Tl,t.mapping=Cl,this.context.scene.environment=t}else console.error("Missing ambientlight",this.sceneLightSettings.sourceId);return;default:return}}disableReflection(){let e=this.context.scene;e.environment=null}async getSceneLightingData(e){return Xu&&console.log("GET SCENE LIGHT DATA"),this._waitPromise?this._waitPromise:(this._waitPromise=new Promise((t,i)=>{let n=setInterval(async()=>{let r=this.getReflection(e);r&&(clearInterval(n),t(r.getSphericalHarmonicsArray(this.sceneLightSettings?.ambientIntensity??1)))},10)}),this._waitPromise)}_waitPromise;_lighting={}},Qu=class{get Source(){return this._source}get Array(){return this._sphericalHarmonicsArray}_context;_source;_sphericalHarmonics=null;_sphericalHarmonicsArray;_ambientScale=1;_lightProbe;constructor(e,t,i=1){this._context=e,this._source=t,this._ambientScale=i,t.mapping=Cl,t.encoding=Tl}getSphericalHarmonicsArray(e=1){if(this._sphericalHarmonicsArray?.length&&this._source)return{array:this._sphericalHarmonicsArray,texture:this._source,lightProbe:this._lightProbe};try{let t=this._source,i=null;if(t){Xu&&console.log("GENERATING LIGHT PROBE",t);let n=Math.min(t.image.width,512);i=new Av(n).fromEquirectangularTexture(this._context.renderer,t),this._source=i.texture}if(this._sphericalHarmonicsArray=[],i){let n=Dv.fromCubeRenderTarget(this._context.renderer,i);this._lightProbe=n;let r=this._ambientScale*(e*e*Math.PI*.5)-1;this._sphericalHarmonics=n.sh,this._sphericalHarmonicsArray=this._sphericalHarmonics.toArray();let s=e/(Math.PI*.5);for(let a=0;a<this._sphericalHarmonicsArray.length;a++)this._sphericalHarmonicsArray[a]*=s;if(n.sh.scale(r),this._source)return{array:this._sphericalHarmonicsArray,texture:this._source,lightProbe:n}}}catch(t){console.error(t)}return null}};import{Object3D as Lv}from"three";var zr=P("debugaddressables"),Sl=class{_context;constructor(e){this._context=e,this._context.pre_update_callbacks.push(this.preUpdate.bind(this))}preUpdate(){}_assetReferences={};findAssetReference(e){return this._assetReferences[e]||null}registerAssetReference(e){return e.uri&&(this._assetReferences[e.uri]?console.warn("Asset reference already registered",e):this._assetReferences[e.uri]=e),e}},Bo=class{static getOrCreate(e,t,i){let n=Ii(e,t);zr&&console.log("GetOrCreate Addressable from",e,t,"FinalPath=",n);let r=i.addressables,s=r.findAssetReference(n);if(s)return s;let a=new Bo(n,i.hash);return r.registerAssetReference(a),a}get asset(){return this._glbRoot??this._asset}set asset(e){this._asset=e}_loading;get uri(){return this._uri}get rawAsset(){return this._asset}_asset;_glbRoot;_uri;_progressListeners=[];_hash;_hashedUri;_isLoadingRawBinary=!1;_rawBinary;constructor(e,t){this._uri=e,this._hash=t,e.includes("?v=")?this._hashedUri=e:this._hashedUri=t?e+"?v="+t:e,Qp(this._uri,this.onResolvePrefab.bind(this))}async onResolvePrefab(e){return e===this.uri&&(this.mustLoad&&await this.loadAssetAsync(),this.asset)?this.asset:null}get mustLoad(){return!this.asset||this.asset.__destroyed===!0}isLoaded(){return this._rawBinary||this.asset!==void 0}unload(){this.asset&&(zr&&console.log("Unload",this.asset),this.asset.scene?oi(this.asset.scene):oi(this.asset)),this.asset=null}async preload(){if(!this.mustLoad||this._isLoadingRawBinary)return null;if(this._rawBinary!==void 0)return this._rawBinary;this._isLoadingRawBinary=!0,zr&&console.log("Preload",this._hashedUri);let e=await Mf(this._hashedUri,t=>{this.raiseProgressEvent(t)});return this._rawBinary=e?.buffer??null,this._isLoadingRawBinary=!1,this._rawBinary}async loadAssetAsync(e){if(!this.mustLoad)return;if(e&&this._progressListeners.push(e),this._loading!==void 0)return this._loading;let t=G.Current;this._rawBinary?(this._loading=Ye().parseSync(t,this._rawBinary,this.uri,null),this.raiseProgressEvent(new ProgressEvent("progress",{loaded:this._rawBinary.byteLength,total:this._rawBinary.byteLength}))):(zr&&console.log("Load async",this.uri),this._loading=Ye().loadSync(t,this._hashedUri,null,!0,n=>{this.raiseProgressEvent(n)}));let i=await this._loading;if(this._progressListeners.length=0,this._glbRoot=this.tryGetActualGameObjectRoot(i),this._loading=void 0,i)return vn(t),i.scene!==void 0&&(this.asset=i),this.asset}async instantiate(e){return this.onInstantiate(e,!1)}async instantiateSynced(e,t=!0){return this.onInstantiate(e,!0,t)}beginListenDownload(e){this._progressListeners.indexOf(e)<0&&this._progressListeners.push(e)}endListenDownload(e){let t=this._progressListeners.indexOf(e);t>=0&&this._progressListeners.splice(t,1)}raiseProgressEvent(e){for(let t of this._progressListeners)t(this,e)}async onInstantiate(e,t=!1,i){let n=G.Current;if(e||(e=n.scene),this.mustLoad&&await this.loadAssetAsync(),zr&&console.log("Instantiate",this.uri,"parent:",e),this.asset){zr&&console.log("Add to scene",this.asset);let r=e instanceof Ue?e:null;if(r||(r=new Ue),typeof e=="object"&&(e instanceof Lv?r.parent=e:Object.assign(r,e)),Bo.currentlyInstantiating.indexOf(this.uri)>=0)return console.error("Recursive instantiation of",this.uri),null;try{if(Bo.currentlyInstantiating.push(this.uri),t){r.context=n;let s=this.asset;s.guid=this.uri;let a=tl(s,r,void 0,i);if(a)return a}else{let s=Br(this.asset,r);if(s)return s}}finally{n.post_render_callbacks.push(()=>Bo.currentlyInstantiating.pop())}}else zr&&console.warn("Failed to load asset",this.uri);return null}tryGetActualGameObjectRoot(e){if(e&&e.scene){let t=e.scene;return t.isGroup&&t.children.length===1&&t.children[0].name+"glb"===t.name?t.children[0]:t}return null}},tt=Bo;I(tt,"currentlyInstantiating",[]);var Yu=class extends Li{constructor(){super([tt])}onSerialize(e,t){if(e&&e.uri!==void 0&&typeof e.uri=="string")return e.uri}onDeserialize(e,t){return typeof e=="string"?t.context?t.gltfId?tt.getOrCreate(t.gltfId,e,t.context):(console.error("Missing spurce id"),null):(console.error("Missing context"),null):null}};new Yu;var Pl=class extends EventTarget{context;get hasFocus(){return document.hasFocus()}get isVisible(){return this._isVisible}_isVisible=!0;constructor(e){super(),this.context=e,window.addEventListener("visibilitychange",this.onVisiblityChanged.bind(this),!1)}onVisiblityChanged(e){switch(e.target.visibilityState){case"hidden":this._isVisible=!1,this.dispatchEvent(new Event("application-hidden"));break;case"visible":this._isVisible=!0,this.dispatchEvent(new Event("application-visible"));break}}};import{FloatType as jv,HalfFloatType as Hv,LinearEncoding as Fv,sRGBEncoding as Bv}from"three";var zf="NEEDLE_lightmaps",Uv=P("debuglightmapsextension"),ta=(i=>(i[i.Lightmap=0]="Lightmap",i[i.Skybox=1]="Skybox",i[i.Reflection=2]="Reflection",i))(ta||{}),Ol=class{get name(){return zf}parser;registry;source;constructor(e,t,i){this.parser=e,this.registry=t,this.source=i}afterRoot(e){let t=this.parser.json.extensions;if(t){let i=t[zf];if(i){let n=i.textures;return n?.length?(Uv&&console.log(i),new Promise(async(r,s)=>{let a=[];for(let c of n)if(c.pointer){let u=Co(this.parser,c.pointer).then(l=>{let d=l;d?.isTexture&&(this.registry?(c.type!==0?d.encoding=Bv:d.encoding=Fv,c.type===1&&(d.type==jv||d.type==Hv)&&(d.flipY=!0),this.registry.registerTexture(this.source,c.type,d,c.index)):console.log(ta[c.type],c.pointer,d))});a.push(u)}await Promise.all(a),r()})):null}}return null}};import*as Bi from"three";var Wf=!!P("debuglightmaps"),kl=class{_context;_lightmaps=new Map;constructor(e){this._context=e}registerTexture(e,t,i,n){Wf&&console.log("Registering ",ta[t],i,e),this._lightmaps.has(e)||this._lightmaps.set(e,new Map);let r=this._lightmaps.get(e),s=r?.get(t)??[];s.length<n&&(s.length=n+1),s[n]=i,r?.set(t,s)}tryGetLightmap(e,t=0){return this.tryGet(e,0,t)}tryGetSkybox(e){return this.tryGet(e,1,0)}tryGetReflection(e){return this.tryGet(e,2,0)}tryGet(e,t,i){if(!e)return Wf&&console.warn("Missing source id"),null;let n=this._lightmaps.get(e)?.get(t)??null;return!n?.length||n.length<=i?null:n[i]}};Bi.ShaderChunk.lights_fragment_maps=Bi.ShaderChunk.lights_fragment_maps.replace("vec4 lightMapTexel = texture2D( lightMap, vUv2 );",`
153
153
 
154
154
  vec2 lUv = vUv2.xy * lightmapScaleOffset.xy + vec2(lightmapScaleOffset.z, (1. - (lightmapScaleOffset.y + lightmapScaleOffset.w)));
155
155
  vec4 lightMapTexel = texture2D( lightMap, lUv);
@@ -173,7 +173,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
173
173
  irradiance += 0.;
174
174
  #else
175
175
  irradiance += getLightProbeIrradiance( lightProbe, geometry.normal );
176
- #endif`);Bi.UniformsLib.lightmap.lightmapScaleOffset={value:new Bi.Vector4(1,1,0,0)};var Uv=P("debugplayerview");var Yu=class{userId;context;viewDevice="browser";get currentObject(){return this._object}set currentObject(e){this._object=e}get isConnected(){return this.context.connection.userIsInRoom(this.userId)}removed=!1;_object;constructor(e,t){this.userId=e,this.context=t}},kl=class{context;playerViews=new Map;constructor(e){this.context=e}setPlayerView(e,t,i){let n=this.playerViews.get(e);n||(n=new Yu(e,this.context),this.playerViews.set(e,n)),n.viewDevice=i,n.currentObject=t,n.removed=!1}getPlayerView(e){if(!e)return;if(!this.context.connection.userIsInRoom(e)){this.playerViews.delete(e);return}return this.playerViews.get(e)}removePlayerView(e,t){let i=this.playerViews.get(e);i?.viewDevice===t&&(Uv&&console.log("REMOVE",e),i.removed=!0,this.playerViews.delete(e))}};var Ku={};rp(Ku,{Behaviour:()=>M,Component:()=>Tt,GameObject:()=>R});import*as it from"three";var R=class extends it.Object3D{guid;static setActive(e,t,i=!0,n=!0){!e||(Io(e,t,n),Ro(e),t&&i&&Ka(G.Current,e))}static isActiveSelf(e){return bn(e)}static isActiveInHierarchy(e){return of(e)}static markAsInstancedRendered(e,t){sf(e,t)}static isUsingInstancing(e){return sl(e)}static foreachComponent(e,t,i=!0){return si(e,t,i)}static instantiateSynced(e,t){return e?el(e,t):null}static instantiate(e,t=null){return Fr(e,t)}static destroySynced(e,t,i=!0){if(!e)return;let n=e;t=t??G.Current,So(n,t.connection,i)}static destroy(e,t=!0,i=!0){return oi(e,t,i)}static add(e,t,i){if(!(!e||!t)){if(e===t){console.warn("Can not add object to self",e);return}i||(i=G.Current),t.add(e),Io(e,!0),Ro(e),i?R.foreachComponent(e,n=>{pu(n,i),!n.__internalDidAwakeAndStart&&i.new_script_start.includes(n)===!1&&i.new_script_start.push(n)},!0):console.warn("Missing context")}}static remove(e){!e||(e.parent?.remove(e),Io(e,!1),Ro(e),R.foreachComponent(e,t=>{Ap(t)},!0))}static invokeOnChildren(e,t,...i){this.invoke(e,t,!0,i)}static invoke(e,t,i=!1,...n){!e||this.foreachComponent(e,r=>{let s=r[t];s&&typeof s=="function"&&s.bind(r)(...n)},i)}static addNewComponent(e,t,i=!0){let n=new t;return Ht(e,n,i),n}static addComponent(e,t){if(t.gameObject==null)throw new Error("Did you mean to create a new component? Use addNewComponent");Zp(e,t)}static removeComponent(e){return il(e.gameObject,e),e}static getOrAddComponent(e,t){return nl(e,t)}static getComponent(e,t){return e===null?null:Br(e,t)}static getComponents(e,t,i=null){return e===null?i??[]:Oo(e,t,i)}static findByGuid(e,t){return Hr(e,t)}static findObjectOfType(e,t,i=!0){return tf(e,t??G.Current,i)}static findObjectsOfType(e,t){let i=[];return nf(e,i,t),i}static getComponentInChildren(e,t){return Qn(e,t)}static getComponentsInChildren(e,t,i=null){return ko(e,t,i??void 0)}static getComponentInParent(e,t){return Po(e,t)}static getComponentsInParent(e,t,i=null){return qs(e,t,i)}static getAllComponents(e){return[...e.userData?.components]}static*iterateComponents(e){let t=e?.userData?.components;if(t&&Array.isArray(t))for(let i=0;i<t.length;i++)yield t[i]}},li=class{get isComponent(){return!0}__context;get context(){return this.__context??G.Current}set context(e){this.__context=e}get scene(){return this.context.scene}get layer(){return this.gameObject?.userData?.layer}get name(){return this.gameObject?.userData.name}__name;set name(e){this.gameObject?(this.gameObject.userData||(this.gameObject.userData={}),this.gameObject.userData.name=e,this.__name=e):this.__name=e}get tag(){return this.gameObject?.userData.tag}set tag(e){this.gameObject&&(this.gameObject.userData.tag=e)}get static(){return this.gameObject?.userData.static}get hideFlags(){return this.gameObject?.userData.hideFlags}get activeAndEnabled(){return!(this.destroyed||this.__isEnabled===!1||!this.__isActiveInHierarchy)}get __isActive(){return this.gameObject.visible}get __isActiveInHierarchy(){if(!this.gameObject)return!1;let e=this.gameObject[ji];return e===void 0?!0:e}set __isActiveInHierarchy(e){!this.gameObject||(this.gameObject[ji]=e)}gameObject;guid="invalid";sourceId;awake(){}onEnable(){}onDisable(){}onDestroy(){this.__destroyed=!0}startCoroutine(e,t=1){return this.context.registerCoroutineUpdate(this,e,t)}stopCoroutine(e,t=1){this.context.unregisterCoroutineUpdate(e,t)}get destroyed(){return this.__destroyed}destroy(){this.__destroyed||this.__internalDestroy()}__didAwake=!1;__didStart=!1;__didEnable=!1;__isEnabled=void 0;__destroyed=!1;get __internalDidAwakeAndStart(){return this.__didAwake&&this.__didStart}constructor(){this.__internalNewInstanceCreated()}__internalNewInstanceCreated(){this.__didAwake=!1,this.__didStart=!1,this.__didEnable=!1,this.__isEnabled=void 0,this.__destroyed=!1}__internalAwake(){this.__didAwake||(this.__didAwake=!0,this.awake())}__internalStart(){this.__didStart||(this.__didStart=!0,this.start&&this.start())}__internalEnable(){return this.__didEnable?!1:(this.__didEnable=!0,this.onEnable(),this.__isEnabled=!0,!0)}__internalDisable(){!this.__didEnable||(this.__didEnable=!1,this.onDisable(),this.__isEnabled=!1)}__internalDestroy(){this.__destroyed||(this.__destroyed=!0,this.destroy?.call(this),$p(this))}get enabled(){return this.__isEnabled??!0}set enabled(e){if(typeof e=="number"&&(e>=.5?e=!0:e=!1),!this.__didAwake){this.__isEnabled=e;return}e?this.__internalEnable():this.__internalDisable()}_worldPosition=void 0;_worldQuaternion=void 0;_worldEuler=void 0;_worldRotation=void 0;get worldPosition(){return this._worldPosition||(this._worldPosition=new it.Vector3),B(this.gameObject,this._worldPosition),this._worldPosition}set worldPosition(e){te(this.gameObject,e)}setWorldPosition(e,t,i){li._worldPositionBuffer.set(e,t,i),this.worldPosition=li._worldPositionBuffer}get worldQuaternion(){return this._worldQuaternion||(this._worldQuaternion=new it.Quaternion),me(this.gameObject,this._worldQuaternion)}set worldQuaternion(e){$e(this.gameObject,e)}setWorldQuaternion(e,t,i,n){li._worldQuaternionBuffer.set(e,t,i,n),this.worldQuaternion=li._worldQuaternionBuffer}get worldEuler(){return this._worldEuler||(this._worldEuler=new it.Euler),this._worldEuler.setFromQuaternion(this.worldQuaternion),this._worldEuler}set worldEuler(e){this._worldQuaternion||(this._worldQuaternion=new it.Quaternion),this._worldQuaternion?.setFromEuler(e),this.worldQuaternion=this._worldQuaternion}get worldRotation(){let e=this.worldEuler;this._worldRotation||(this._worldRotation=new it.Vector3);let t=this._worldRotation;return t.set(e.x,e.y,e.z),t.x=H.toDegrees(t.x),t.y=H.toDegrees(t.y),t.z=H.toDegrees(t.z),t}set worldRotation(e){this.setWorldRotation(e.x,e.y,e.z,!0)}setWorldRotation(e,t,i,n=!0){n&&(e=H.toRadians(e),t=H.toRadians(t),i=H.toRadians(i)),li._worldEulerBuffer.set(e,t,i),li._worldQuaternionBuffer.setFromEuler(li._worldEulerBuffer),this.worldQuaternion=li._worldQuaternionBuffer}get forward(){return li._forward.set(0,0,-1).applyQuaternion(this.worldQuaternion)}_eventListeners=new Map;addEventListener(e,t){this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push(t)}removeEventListener(e,t){if(!this._eventListeners[e])return;let i=this._eventListeners[e].indexOf(t);i>=0&&this._eventListeners[e].splice(i,1)}dispatchEvent(e){if(!this._eventListeners[e.type])return!1;let t=this._eventListeners[e.type];for(let i=0;i<t.length;i++)t[i](e);return!1}},Tt=li;I(Tt,"_worldPositionBuffer",new it.Vector3),I(Tt,"_worldQuaternionBuffer",new it.Quaternion),I(Tt,"_worldEulerBuffer",new it.Euler),I(Tt,"_tempQuaternionBuffer2",new it.Quaternion),I(Tt,"_forward",new it.Vector3);var M=class extends Tt{};var Bo=function(o){return y(o)},y=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=Wf(o);else for(let e=0;e<o.length;e++){let t=o[e];o[e]=Wf(t)}return function(e,t){Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});let i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function Wf(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}import{Color as Gv}from"three";var Q=class extends Gv{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(e,t,i),this.alpha=n}clone(){let e=super.clone();return e.alpha=this.alpha,e}copy(e){return super.copy(e),"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){let i=e;return i.alpha&&(this.alpha=H.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){let n=e,r=t;return n.alpha&&r.alpha&&(this.alpha=H.lerp(n.alpha,r.alpha,i)),super.lerpColors(e,t,i)}multiply(e){let t=e;return t.alpha&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}};import{EquirectangularReflectionMapping as Vv,OrthographicCamera as zv,PerspectiveCamera as Ju,Ray as Wv,sRGBEncoding as Nv,Vector3 as Nf}from"three";var Ml=P("debugcam"),Xf=P("debugscreenpointtoray"),Il=class extends M{get isCamera(){return!0}get aspect(){return this._cam instanceof Ju?this._cam.aspect:this.context.domWidth/this.context.domHeight}get fieldOfView(){return this._fov}set fieldOfView(e){let t=this._fov!=e;this._fov=e,t&&this._cam&&this._cam instanceof Ju&&(this._cam.fov=this._fov,this._cam.updateProjectionMatrix())}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){let t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&t&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){let t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&t&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;get clearFlags(){return this._clearFlags}set clearFlags(e){e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;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}_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}_backgroundIntensity;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){if(!!e){if(this._backgroundColor)this._backgroundColor.copy(e);else{if(!e.clone)return;this._backgroundColor=e.clone()}e.alpha===void 0&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera()}}_backgroundColor;_fov=60;_cam=null;_clearFlags=2;_skybox;get cam(){return this.activeAndEnabled&&this.buildCamera(),this._cam}screenPointToRay(e,t,i){let n=this.cam,r=Il._origin;r.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(r),Xf&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",r.x.toFixed(2),r.y.toFixed(2),"isInXR:"+this.context.isInXR),r.z=-1,r.unproject(n);let s=Il._direction.set(r.x,r.y,r.z),a=B(n);return s.sub(a),s.normalize(),i?(i.set(a,s),i):new Wv(a.clone(),s.clone())}awake(){this.sourceId||console.warn("Camera has no source - the camera should be exported inside a gltf",this.name),Xf&&window.addEventListener("pointerdown",e=>{let t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));let n=this.screenPointToRay(t,i),r="#"+Math.floor(Math.random()*16777215).toString(16);Et.DrawRay(n.origin,n.direction,r,10)})}onEnable(){Ml&&console.log(this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&this.context.setCurrentCamera(this),this.applyClearFlagsIfIsActiveCamera()}onDisable(){this.context.removeCamera(this)}buildCamera(){if(this._cam)return;let e=this.gameObject.isCamera,t=null;if(e?(t=this.gameObject,t?.layers.enableAll()):t=this.gameObject.children[0],t&&t.isCamera)t.type==="PerspectiveCamera"&&(t.fov=this._fov,t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new Ju(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),t.fov=this.fieldOfView,this.gameObject.add(t);else{let i=this.orthographicSize*100;t=new zv(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(){if(Ml&&Fe("apply Camera clear flags"),this._cam&&this.context.mainCameraComponent===this)switch(this._clearFlags){case 1:if(this.environmentIsTransparent()&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}this.enableSkybox(),this._backgroundBlurriness!==void 0&&(this.context.scene.backgroundBlurriness=this._backgroundBlurriness),this._backgroundIntensity!==void 0&&(this.context.scene.backgroundIntensity=this._backgroundIntensity);break;case 2:if(this._backgroundColor){let e=this._backgroundColor.alpha;this.environmentIsTransparent()&&(e=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.renderer.setClearColor(this._backgroundColor,e)}break;case 4:this.context.scene.background=null,this.context.renderer.setClearColor(0,0);break}}environmentIsTransparent(){let e=this.context.renderer.xr?.getSession();if(!e)return!1;let t=e.environmentBlendMode;Ml&&Fe("Environment blend mode: "+t+" on "+navigator.userAgent);let i=t==="additive"||t==="alpha-blend";if(this.context.xrSessionMode==="immersive-ar"&&t==="opaque"){if(navigator.userAgent?.includes("OculusBrowser"))return!0;if(navigator.userAgent?.includes("Mozilla")&&navigator.userAgent?.includes("Mobile WebXRViewer/v2"))return!0}return i}enableSkybox(){this._skybox||(this._skybox=new Zu(this)),this._skybox.enable()}},Z=Il;I(Z,"_origin",new Nf),I(Z,"_direction",new Nf),v([y()],Z.prototype,"fieldOfView",1),v([y()],Z.prototype,"nearClipPlane",1),v([y()],Z.prototype,"farClipPlane",1),v([y()],Z.prototype,"clearFlags",1),v([y()],Z.prototype,"orthographic",2),v([y()],Z.prototype,"orthographicSize",2),v([y()],Z.prototype,"ARBackgroundAlpha",2),v([y()],Z.prototype,"cullingMask",1),v([y()],Z.prototype,"backgroundBlurriness",1),v([y()],Z.prototype,"backgroundIntensity",1),v([y(Q)],Z.prototype,"backgroundColor",1);var Zu=class{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}enable(){this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),this._skybox?this.context.scene.background!==this._skybox&&(Ml&&console.log("Set skybox",this._camera,this._skybox),this._skybox.encoding=Nv,this._skybox.mapping=Vv,this.context.scene.background=this._skybox):console.warn("Failed to load/find skybox texture",this)}};import{Object3D as Qv}from"three";var xn=class extends M{constraintActive=!0;locked=!1;sources=[]};v([y(Qv)],xn.prototype,"sources",2);import{Box3 as qv,Vector2 as Yv,Vector3 as Al}from"three";import{OrbitControls as Kv}from"three/examples/jsm/controls/OrbitControls.js";var Dl=P("freecam"),Jv={LEFT:"",UP:"",RIGHT:"",BOTTOM:""},$u,nt=class extends M{get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener("start",e)}autoRotate=!1;autoRotateSpeed=1;enableKeys=!0;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;enablePan=!0;lookAtConstraint=null;lookAtConstraint01=1;middleClickToFocus=!0;doubleClickToFocus=!0;useSlerp=!0;debugLog=!1;targetLerpSpeed=5;_lookTargetPosition;_controls=null;_cameraObject=null;_lerpToTargetPosition=!1;_lerpCameraToTarget=!1;_cameraTargetPosition=null;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;awake(){this._lookTargetPosition=new Al,this._startedListeningToKeyEvents=!1}onEnable(){this._enableTime=this.context.time.time;let t=R.getComponent(this.gameObject,Z)?.cam;this._controls||(console.assert(t!=null,"Missing camera",this),t&&(this._cameraObject=t),this._controls=new Kv(t,this.context.renderer.domElement),$u===void 0&&($u={...this._controls.keys})),this._controls&&(Dl&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,xo()&&(this.doubleClickToFocus=!0)),this._controls.enableDamping=this.enableDamping,this._controls.keys=this.enableKeys?$u:Jv,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,t?.type==="PerspectiveCamera"?Dl||(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom):Dl||(this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom),this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._startedListeningToKeyEvents||(this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(window.document.body)))}onDisable(){this._controls&&(this._controls.enabled=!1,this._controls.autoRotate=!1)}onDestroy(){this._controls?.dispose()}start(){if(this._controls){let e=R.getComponent(this.gameObject,Z);if(e&&!this.setFromTargetPosition()){this.debugLog&&console.log("NO TARGET");let t=new Al(0,0,-1).applyMatrix4(e.cam.matrixWorld);this.setTarget(t,!0)}}this.startCoroutine(this.startRaycastDelayed())}*startRaycastDelayed(){if(yield,!this.setFromTargetPosition()){let e=new xe;e.screenPoint=new Yv(0,0),e.lineThreshold=.1;let t=this.context.physics.raycast(e);t.length>0&&this.setTarget(t[0].point,!0)}}onBeforeRender(){if(!this._controls)return;(this.context.input.getPointerDown(0)||this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2))&&(this._inputs+=1),this._inputs>0&&(this.autoRotate=!1,this._controls.autoRotate=!1,this._lerpCameraToTarget=!1,this._lerpToTargetPosition=!1),this._inputs=0;let e=this.middleClickToFocus&&this.context.input.getPointerClicked(1);if(e||=this.doubleClickToFocus&&this.context.input.getPointerDoubleClicked(0)&&this.context.time.time-this._enableTime>.3,e?this.setTargetFromRaycast():(this.context.input.getPointerDown(0)||this.context.input.mouseWheelChanged)&&(this._lerpToTargetPosition=!1,this._lerpCameraToTarget=!1),this._lerpToTargetPosition||this._lerpCameraToTarget){let t=this.context.time.deltaTime*this.targetLerpSpeed;if(this._lerpCameraToTarget&&this._cameraTargetPosition&&this._cameraObject){if(this.useSlerp){let i=this._cameraObject?.position;Sp(i,this._cameraTargetPosition,t)}else this._cameraObject?.position.lerp(this._cameraTargetPosition,t);this._cameraObject.position.distanceTo(this._cameraTargetPosition)<1e-4&&(this._lerpCameraToTarget=!1)}this._lerpToTargetPosition&&(this.lerpTarget(this._lookTargetPosition,t),this._lookTargetPosition.distanceTo(this._controls.target)<1e-5&&(this._lerpToTargetPosition=!1))}!Dl&&this.lookAtConstraint?.locked&&this.setFromTargetPosition(0,this.lookAtConstraint01),this._controls&&!this.context.isInXR&&(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!0,this._controls.update())}setCameraTarget(e,t=!1){e?(this._lerpCameraToTarget=!0,this._cameraTargetPosition=e.clone(),t&&this._cameraTargetPosition&&this.controllerObject?.position.copy(this._cameraTargetPosition)):this._lerpCameraToTarget=!1}setFromTargetPosition(e=0,t=1){if(!this._controls)return!1;let i=this.lookAtConstraint?.sources;if(i&&i.length>0){let n=i[e];if(n)return n.getWorldPosition(this._lookTargetPosition),this.lerpTarget(this._lookTargetPosition,t),!0}return!1}setTarget(e=null,t=!1){!this._controls||(e!==null&&this._lookTargetPosition.copy(e),t?this._controls.target.copy(this._lookTargetPosition):this._lerpToTargetPosition=!0)}lerpTarget(e,t){!this._controls||this._controls.target.lerp(e,t)}distanceToTarget(e){return this._controls?this._controls.target.distanceTo(e):-1}setTargetFromRaycast(){if(!this.controls)return;let e=this.context.physics.raycast();for(let t of e)if(t.distance>0&&R.isActiveInHierarchy(t.object)){if(this._lookTargetPosition.copy(t.point),this._lerpToTargetPosition=!0,this._cameraTargetPosition=null,this.context.mainCamera){this._lerpCameraToTarget=!0;let i=B(this.context.mainCamera);this._cameraTargetPosition=i.clone().sub(this.controls.target).add(this._lookTargetPosition),this._cameraObject?.parent?.worldToLocal(this._cameraTargetPosition)}break}}fitCameraToObjects(e,t=1.5){let i=this._cameraObject,n=this._controls;if(!i||!n)return;let r=new Al,s=new Al,a=new qv;a.makeEmpty();for(let g of e)a.expandByObject(g);a.getSize(r),a.getCenter(s);let u=Math.max(r.x,r.y,r.z)/(2*Math.atan(Math.PI*i.fov/360)),l=u/i.aspect,d=t*Math.max(u,l),h=n.target.clone().sub(i.position).normalize().multiplyScalar(d);n.maxDistance=d*10,n.minDistance=d*.01,n.target.copy(s),i.near=d/100,i.far=d*100,i.updateProjectionMatrix(),i.position.copy(n.target).sub(h),n.update()}};v([y(xn)],nt.prototype,"lookAtConstraint",2);import{Object3D as Zv,Vector3 as $v}from"three";function Qf(o,e){let t=e,i=new Zv;o.add(i);let n=new Z,r=Ht(i,n,!0);r.sourceId=t,r.clearFlags=2,r.backgroundColor=new Q(.5,.5,.5,1);let s=Ht(i,new nt,!1);return s.sourceId=t,i.position.x=-2,i.position.y=2,i.position.z=2,Pp(i,new $v(0,0,0)),r}var ry=P("debugSetup"),oy=P("stats"),sy=P("debugactive"),Ll={};var Rt=(a=>(a[a.EarlyUpdate=0]="EarlyUpdate",a[a.Update=1]="Update",a[a.LateUpdate=2]="LateUpdate",a[a.OnBeforeRender=3]="OnBeforeRender",a[a.OnAfterRender=4]="OnAfterRender",a[a.PrePhysicsStep=9]="PrePhysicsStep",a[a.PostPhysicsStep=10]="PostPhysicsStep",a))(Rt||{});function rl(o,e){if(!o)return;let t=e?.new_scripts??G.Current.new_scripts;t.includes(o)||t.push(o)}var pt=class{static get Current(){return this._current}static set Current(e){this._current=e}name;alias;isManagedExternally=!1;isPaused=!1;runInBackground=!1;hash;domElement;get resolutionScaleFactor(){return this._resolutionScaleFactor}set resolutionScaleFactor(e){if(e!==this._resolutionScaleFactor&&typeof e=="number"){if(e<=0){console.error("Invalid resolution scale factor",e);return}this._resolutionScaleFactor=e,this.updateSize()}}_resolutionScaleFactor=1;_boundingClientRectFrame=-1;_boundingClientRect=null;_domX;_domY;calculateBoundingClientRect(){if(this.isInAR){this._domX=0,this._domY=0;return}this._boundingClientRectFrame!==this.time.frame&&(this._boundingClientRectFrame=this.time.frame,this._boundingClientRect=this.domElement.getBoundingClientRect(),this._domX=this._boundingClientRect.x,this._domY=this._boundingClientRect.y)}get domWidth(){return this.isInAR?window.innerWidth:this.domElement.clientWidth}get domHeight(){return this.isInAR?window.innerHeight:this.domElement.clientHeight}get domX(){return this.calculateBoundingClientRect(),this._domX}get domY(){return this.calculateBoundingClientRect(),this._domY}get isInXR(){return this.renderer.xr?.isPresenting||!1}xrSessionMode=void 0;get isInVR(){return this.xrSessionMode==="immersive-vr"}get isInAR(){return this.xrSessionMode==="immersive-ar"}get xrSession(){return this.renderer.xr?.getSession()}get arOverlayElement(){let e=this.domElement;return typeof e.getAROverlayContainer=="function"?e.getAROverlayContainer():this.domElement}get currentFrameEvent(){return this._currentFrameEvent}_currentFrameEvent=-1;scene;renderer;composer=null;scripts=[];scripts_pausedChanged=[];scripts_earlyUpdate=[];scripts_update=[];scripts_lateUpdate=[];scripts_onBeforeRender=[];scripts_onAfterRender=[];scripts_WithCorroutines=[];coroutines={};get mainCamera(){if(this.mainCameraComponent){let e=this.mainCameraComponent;return e.cam||e.buildCamera(),e.cam}return null}mainCameraComponent;post_setup_callbacks=[];pre_update_callbacks=[];pre_render_callbacks=[];post_render_callbacks=[];new_scripts=[];new_script_start=[];new_scripts_pre_setup_callbacks=[];new_scripts_post_setup_callbacks=[];application;time;input;physics;connection;assets;mainLight=null;rendererData;addressables;lightmaps;players;_sizeChanged=!1;_isCreated=!1;_isVisible=!1;_stats=oy?qf.default():null;constructor(e){if(this.name=e?.name||"",this.alias=e?.alias,this.domElement=e?.domElement||document.body,this.hash=e?.hash,e?.renderer)this.renderer=e.renderer,this.isManagedExternally=!0;else{let r=P("postfx");this.renderer=new ty({antialias:!0}),this.renderer.toneMappingExposure=1,this.renderer.toneMapping=Pe.NoToneMapping,this.renderer.setClearColor(new Pe.Color("lightgrey"),0),this.renderer.antialias=!0,this.renderer.alpha=!1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=Pe.PCFSoftShadowMap,this.renderer.setSize(this.domWidth,this.domHeight),this.renderer.outputEncoding=Pe.sRGBEncoding,this.renderer.physicallyCorrectLights=!0,this.composer=r?new iy(this.renderer):null}this.scene=new Pe.Scene,this.application=new Sl(this),this.time=new ll,this.input=new Na(this),this.physics=new Yn(this),this.connection=new gl(this),this.assets=new xl,this.rendererData=new Tl(this),this.addressables=new Rl(this),this.lightmaps=new Ol(this),this.players=new kl(this);let t=()=>this._sizeChanged=!0;window.addEventListener("resize",t),this._disposeCallbacks.push(()=>window.removeEventListener("resize",t));let i=new ResizeObserver(r=>this._sizeChanged=!0);i.observe(this.domElement),this._disposeCallbacks.push(()=>i.disconnect());let n=new IntersectionObserver(r=>{this._isVisible=r[0].isIntersecting});n.observe(this.domElement),this._disposeCallbacks.push(()=>n.disconnect())}_disposeCallbacks=[];updateSize(){if(!this.isManagedExternally&&!this.renderer.xr.isPresenting){this._sizeChanged=!1;let e=this.resolutionScaleFactor,t=this.domWidth*e,i=this.domHeight*e,n=this.mainCamera;this.updateAspect(n),this.renderer.setSize(t,i),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",this.composer&&(this.composer.setSize?.call(this.composer,t,i),this.composer.setPixelRatio?.call(this.composer,window.devicePixelRatio))}}updateAspect(e,t,i){if(!e)return;t===void 0&&(t=this.domWidth),i===void 0&&(i=this.domHeight);let n=e.aspect;e.aspect=t/i,n!==e.aspect&&e.updateProjectionMatrix()}onCreate(e,t){return this._isCreated?(console.warn("Context already created"),null):(this._isCreated=!0,this.internalOnCreate(e,t))}onDestroy(){if(!!this._isCreated){this._isCreated=!1,oi(this.scene,!0),this.renderer?.setAnimationLoop(null),this.isManagedExternally||this.renderer?.dispose();for(let e of this._disposeCallbacks)try{e()}catch(t){console.error("Error in on dispose callback:",t,e)}this.domElement?.parentElement&&this.domElement.parentElement.removeChild(this.domElement)}}registerCoroutineUpdate(e,t,i){return this.coroutines[i]||(this.coroutines[i]=[]),this.coroutines[i].push({comp:e,main:t}),t}unregisterCoroutineUpdate(e,t){if(!this.coroutines[t])return;let i=this.coroutines[t].findIndex(n=>n.main===e);i>=0&&this.coroutines[t].splice(i,1)}stopAllCoroutinesFrom(e){for(let t in this.coroutines){let i=this.coroutines[t];for(let n=i.length-1;n>=0;n--)i[n].comp===e&&i.splice(n,1)}}_cameraStack=[];setCurrentCamera(e){if(!e)return;if(e.cam||e.buildCamera(),!e.cam){console.warn("Camera component is missing camera",e);return}let t=this._cameraStack.indexOf(e);t>=0&&this._cameraStack.splice(t,1),this._cameraStack.push(e),this.mainCameraComponent=e;let i=e.cam;i.isPerspectiveCamera&&this.updateAspect(i),this.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}removeCamera(e){if(!e)return;let t=this._cameraStack.indexOf(e);if(t>=0&&this._cameraStack.splice(t,1),this.mainCameraComponent===e&&(this.mainCameraComponent=void 0,this._cameraStack.length>0)){let i=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(i)}}_onBeforeRenderListeners={};addBeforeRenderListener(e,t){if(!this._onBeforeRenderListeners[e.uuid]){this._onBeforeRenderListeners[e.uuid]=[];let i=(n,r,s,a,c,u)=>{let l=this._onBeforeRenderListeners[e.uuid];if(!!l)for(let d=0;d<l.length;d++){let h=l[d];h(n,r,s,a,c,u)}};e.onBeforeRender=i}this._onBeforeRenderListeners[e.uuid].push(t)}removeBeforeRenderListener(e,t){if(this._onBeforeRenderListeners[e.uuid]){let i=this._onBeforeRenderListeners[e.uuid],n=i.indexOf(t);n>=0&&i.splice(n,1)}}_requireDepthTexture=!1;_requireColorTexture=!1;_renderTarget;_isRendering=!1;get isRendering(){return this._isRendering}setRequireDepth(e){this._requireDepthTexture=e}setRequireColor(e){this._requireColorTexture=e}get depthTexture(){return this._renderTarget?.depthTexture||null}get opaqueColorTexture(){return this._renderTarget?.texture||null}get isVisibleToUser(){if(this.isInXR)return!0;if(!this._isVisible)return!1;let e=getComputedStyle(this.domElement);return e.visibility!=="hidden"&&e.display!=="none"&&e.opacity!=="0"}async internalOnCreate(e,t){await this.physics.createWorld();let i=!0;try{pt.Current=this,e&&await e(this,t)}catch(n){console.error(n),i=!1}if(!!i){this.isManagedExternally||this.domElement.prepend(this.renderer.domElement),Wp(this),zp(this),Df(this),pt._current=this;for(let n=0;n<this.new_scripts.length;n++){let r=this.new_scripts[n];if(r.gameObject!==void 0&&r.gameObject!==null){r.gameObject.userData===void 0&&(r.gameObject.userData={}),r.gameObject.userData.components===void 0&&(r.gameObject.userData.components=[]);let s=r.gameObject.userData.components;s.includes(r)||s.push(r)}}if(this.post_setup_callbacks)for(let n=0;n<this.post_setup_callbacks.length;n++)pt._current=this,await this.post_setup_callbacks[n](this);if(!this.mainCamera){pt._current=this;let n=null;si(this.scene,r=>{let s=r;if(s?.isCamera){if(jr(s.gameObject),!s.activeAndEnabled)return;if(s.tag==="MainCamera")return n=s,!0;n=s}}),n?this.setCurrentCamera(n):(console.error("MISSING camera",this),Qf(this.scene,"unknown"))}if(pt._current=this,vn(this),!this.isManagedExternally&&this.composer&&this.mainCamera){let n=new ny(this.scene,this.mainCamera);this.renderer.setSize(this.domWidth,this.domHeight),this.composer.addPass(n),this.composer.setSize(this.domWidth,this.domHeight)}this._sizeChanged=!0,this._stats&&(this._stats.showPanel(1),this.domElement.appendChild(this._stats.dom)),this.renderer.setAnimationLoop(this.render.bind(this)),ry&&Ns(this.scene,!0)}}render(e,t){if(this._currentFrameEvent=-1,this.onHandlePaused())return;for(this._stats?.begin(),pt._current=this,this.time.update(),vn(this),Ro(),Ka(this);this._cameraStack.length>0&&(!this.mainCameraComponent||this.mainCameraComponent.destroyed);){this._cameraStack.splice(this._cameraStack.length-1,1);let r=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(r)}if(this.pre_update_callbacks)for(let r in this.pre_update_callbacks)this.pre_update_callbacks[r]();this._currentFrameEvent=0;for(let r=0;r<this.scripts_earlyUpdate.length;r++){let s=this.scripts_earlyUpdate[r];!s.activeAndEnabled||s.earlyUpdate!==void 0&&(pt._current=this,s.earlyUpdate())}if(this.executeCoroutines(0),this.onHandlePaused())return;this._currentFrameEvent=1;for(let r=0;r<this.scripts_update.length;r++){let s=this.scripts_update[r];!s.activeAndEnabled||s.update!==void 0&&(pt._current=this,s.update())}if(this.executeCoroutines(1),this.onHandlePaused())return;this._currentFrameEvent=2;for(let r=0;r<this.scripts_lateUpdate.length;r++){let s=this.scripts_lateUpdate[r];!s.activeAndEnabled||s.lateUpdate!==void 0&&(pt._current=this,s.lateUpdate())}if(this.executeCoroutines(2),this.onHandlePaused())return;let i=1,n=this.time.deltaTime/i;for(let r=0;r<i;r++)this._currentFrameEvent=9,this.executeCoroutines(9),this.physics.step(n),this._currentFrameEvent=10,this.executeCoroutines(10);if(this.physics.postStep(),!this.onHandlePaused()){if(this.isVisibleToUser){this._currentFrameEvent=3;for(let r=0;r<this.scripts_onBeforeRender.length;r++){let s=this.scripts_onBeforeRender[r];!s.activeAndEnabled||s.onBeforeRender!==void 0&&(pt._current=this,s.onBeforeRender(t))}if(this.executeCoroutines(3),this._sizeChanged&&this.updateSize(),this.pre_render_callbacks)for(let r in this.pre_render_callbacks)this.pre_render_callbacks[r]();this.isManagedExternally||(this._currentFrameEvent=-10,this.renderNow(),this._currentFrameEvent=4);for(let r=0;r<this.scripts_onAfterRender.length;r++){let s=this.scripts_onAfterRender[r];!s.activeAndEnabled||s.onAfterRender!==void 0&&(pt._current=this,s.onAfterRender())}if(this.executeCoroutines(4),this.post_render_callbacks)for(let r in this.post_render_callbacks)this.post_render_callbacks[r]()}this._currentFrameEvent=-1,this.connection.sendBufferedMessagesNow(),this._stats?.end()}}renderNow(e){return!e&&(e=this.mainCamera,!e)?!1:(this._isRendering=!0,this.renderRequiredTextures(),this.composer&&!this.isInXR?this.composer.render():this.mainCamera&&this.renderer.render(this.scene,e),this._isRendering=!1,!0)}_wasPaused=!1;onHandlePaused(){let e=this.evaluatePaused();if(this._wasPaused!==e){sy&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){let i=this.scripts_pausedChanged[t];!i.activeAndEnabled||i.onPausedChanged!==void 0&&(pt._current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new Pe.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){let i=new ey(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new Pe.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=Pe.NearestFilter,this._renderTarget.texture.magFilter=Pe.NearestFilter,this._renderTarget.texture.format=Pe.RGBAFormat)}let e=this._renderTarget;e.texture&&(e.texture.encoding=this.renderer.outputEncoding);let t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){let i=this.coroutines[e];for(let n=0;n<i.length;n++){let r=i[n];if(!r.comp||r.comp.destroyed||!r.main||r.comp.enabled===!1){i.splice(n,1),--n;continue}let a=r.chained;if(a&&a.length>0){let d=a[a.length-1].next();if(d.done&&a.pop(),t(d)&&(r.chained||(r.chained=[]),r.chained.push(d.value)),!d.done)continue}let c=r.main.next();if(c.done===!0){i.splice(n,1),--n;continue}let u=c.value;if(t(u)){if(u.next().done)continue;r.chained||(r.chained=[]),r.chained.push(u)}}}function t(i){return!!(i&&i.next&&i.return)}}},G=pt;I(G,"_current");var ay=P("debugaroverlay"),Ui="ar",Yf="quit-ar",jl=class{get ARContainer(){return this.arContainer}constructor(){this.closeARCallback=this.onRequestedEndAR.bind(this)}arContainer=null;closeARCallback;currentSession=null;registeredCloseEventElements=[];_createdAROnlyElements=[];_reparentedObjects=[];requestEndAR(){this.onRequestedEndAR()}onBegin(e,t,i){this.currentSession=i,this.arContainer=t,e.domElement.querySelectorAll(`.${Ui}`).forEach(s=>{!s||s!==this.arContainer&&(this._reparentedObjects.push({el:s,previousParent:s.parentElement}),this.arContainer?.appendChild(s))});let r=t.getElementsByClassName(Yf);if(!r||r.length<=0)console.warn(`Missing quit AR elements, creating fallback X button. Use class name '${Yf}' to override.`),this.createFallbackCloseARButton(this.arContainer);else for(let s=0;s<r.length;s++){let a=r[s];!a||(a.addEventListener("click",this.closeARCallback),this.registeredCloseEventElements.push(a))}}onEnd(e){for(let t of this._createdAROnlyElements)t.remove&&t.remove();for(let t of this._reparentedObjects){let i=t.el;t.previousParent?.appendChild(i)}this._reparentedObjects.length=0,La()&&setTimeout(()=>{let t=e.renderer.domElement;t&&e.domElement.insertBefore(t,e.domElement.firstChild);let i=document.querySelectorAll("*");for(var n=0;n<i.length;n++){let r=i[n];r&&r._displayChanged!==void 0&&r._displayWas!==void 0&&(r.style.display=r._displayWas)}},10)}findOrCreateARContainer(e){if(e.classList.contains(Ui))return e;if(e.children)for(let n=0;n<e.children.length;n++){let r=e.children[n];if(!(!r||!r.classList)&&r.classList.contains(Ui))return r}let t=document.getElementsByClassName(Ui);if(t&&t.length>0)return t[0];ay&&console.log("No overlay container found in document - generating new ony");let i=document.createElement("div");return i.classList.add(Ui),i.style.position="absolute",i.style.width="100%",i.style.height="100%",i.style.display="flex",i.style.visibility="visible",e.appendChild(i)}onRequestedEndAR(){if(!!this.currentSession){this.currentSession.end(),this.currentSession=null;for(let e of this.registeredCloseEventElements)e.removeEventListener("click",this.closeARCallback);this.registeredCloseEventElements.length=0}}createFallbackCloseARButton(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("width","38px"),t.setAttribute("height","38px"),t.style.position="absolute",t.style.right="20px",t.style.top="40px",t.style.zIndex="9999",t.style.pointerEvents="auto",t.addEventListener("click",this.closeARCallback),e.appendChild(t),this._createdAROnlyElements.push(t);var i=document.createElementNS("http://www.w3.org/2000/svg","path");i.setAttribute("d","M 12,12 L 28,28 M 28,12 12,28"),i.setAttribute("stroke","#ddd"),i.setAttribute("stroke-width","3px"),t.appendChild(i),this._createdAROnlyElements.push(i)}};var ly=P("debugdebug"),Kf=P("noerrors"),ed=new Map,jS=new RegExp(" at .+/(.+?.ts)","g"),Us=(i=>(i[i.Log=0]="Log",i[i.Warn=1]="Warn",i[i.Error=2]="Error",i))(Us||{});function tu(){return Zf}function Jf(){if(Kf)return;if(ut()){ly&&console.log(window.location.hostname);let e=console.error;console.error=(...t)=>{e.apply(console,t),Gs(2,t,null,null),td()},window.addEventListener("error",t=>{!t||(Gs(2,t.error,t.filename,t.lineno),td())},!0),window.addEventListener("unhandledrejection",t=>{!t||(Gs(2,t.reason.message,t.reason.stack),td())})}}var Zf=0;function td(){Zf+=1}function Gs(o,e,t,i){if(Kf)return;let r=G.Current?.domElement??document.querySelector("needle-engine");if(!!r){if(Array.isArray(e)){let s="";for(let a=0;a<e.length;a++)typeof e[a]!="object"&&(a>0&&(s+=" "),s+=e[a]);e=s}cy(o,r,e)}}var id=new Set;function cy(o,e,t){let i=dy(e);if(i.childElementCount>=20||id.has(t))return;id.add(t);let n=py(o,t);i.prepend(n),setTimeout(()=>{id.delete(t),hy(n)},1e4)}var uy=`
176
+ #endif`);Bi.UniformsLib.lightmap.lightmapScaleOffset={value:new Bi.Vector4(1,1,0,0)};var Gv=P("debugplayerview");var Ku=class{userId;context;viewDevice="browser";get currentObject(){return this._object}set currentObject(e){this._object=e}get isConnected(){return this.context.connection.userIsInRoom(this.userId)}removed=!1;_object;constructor(e,t){this.userId=e,this.context=t}},Ml=class{context;playerViews=new Map;constructor(e){this.context=e}setPlayerView(e,t,i){let n=this.playerViews.get(e);n||(n=new Ku(e,this.context),this.playerViews.set(e,n)),n.viewDevice=i,n.currentObject=t,n.removed=!1}getPlayerView(e){if(!e)return;if(!this.context.connection.userIsInRoom(e)){this.playerViews.delete(e);return}return this.playerViews.get(e)}removePlayerView(e,t){let i=this.playerViews.get(e);i?.viewDevice===t&&(Gv&&console.log("REMOVE",e),i.removed=!0,this.playerViews.delete(e))}};var Ju={};op(Ju,{Behaviour:()=>M,Component:()=>Tt,GameObject:()=>R});import*as it from"three";var R=class extends it.Object3D{guid;static setActive(e,t,i=!0,n=!0){!e||(Ao(e,t,n),So(e),t&&i&&Ja(G.Current,e))}static isActiveSelf(e){return bn(e)}static isActiveInHierarchy(e){return sf(e)}static markAsInstancedRendered(e,t){af(e,t)}static isUsingInstancing(e){return al(e)}static foreachComponent(e,t,i=!0){return si(e,t,i)}static instantiateSynced(e,t){return e?tl(e,t):null}static instantiate(e,t=null){return Br(e,t)}static destroySynced(e,t,i=!0){if(!e)return;let n=e;t=t??G.Current,Po(n,t.connection,i)}static destroy(e,t=!0,i=!0){return oi(e,t,i)}static add(e,t,i){if(!(!e||!t)){if(e===t){console.warn("Can not add object to self",e);return}i||(i=G.Current),t.add(e),Ao(e,!0),So(e),i?R.foreachComponent(e,n=>{fu(n,i),!n.__internalDidAwakeAndStart&&i.new_script_start.includes(n)===!1&&i.new_script_start.push(n)},!0):console.warn("Missing context")}}static remove(e){!e||(e.parent?.remove(e),Ao(e,!1),So(e),R.foreachComponent(e,t=>{Dp(t)},!0))}static invokeOnChildren(e,t,...i){this.invoke(e,t,!0,i)}static invoke(e,t,i=!1,...n){!e||this.foreachComponent(e,r=>{let s=r[t];s&&typeof s=="function"&&s.bind(r)(...n)},i)}static addNewComponent(e,t,i=!0){let n=new t;return Ht(e,n,i),n}static addComponent(e,t){if(t.gameObject==null)throw new Error("Did you mean to create a new component? Use addNewComponent");$p(e,t)}static removeComponent(e){return nl(e.gameObject,e),e}static getOrAddComponent(e,t){return rl(e,t)}static getComponent(e,t){return e===null?null:Ur(e,t)}static getComponents(e,t,i=null){return e===null?i??[]:ko(e,t,i)}static findByGuid(e,t){return Fr(e,t)}static findObjectOfType(e,t,i=!0){return nf(e,t??G.Current,i)}static findObjectsOfType(e,t){let i=[];return rf(e,i,t),i}static getComponentInChildren(e,t){return qn(e,t)}static getComponentsInChildren(e,t,i=null){return Mo(e,t,i??void 0)}static getComponentInParent(e,t){return Oo(e,t)}static getComponentsInParent(e,t,i=null){return Ys(e,t,i)}static getAllComponents(e){return[...e.userData?.components]}static*iterateComponents(e){let t=e?.userData?.components;if(t&&Array.isArray(t))for(let i=0;i<t.length;i++)yield t[i]}},li=class{get isComponent(){return!0}__context;get context(){return this.__context??G.Current}set context(e){this.__context=e}get scene(){return this.context.scene}get layer(){return this.gameObject?.userData?.layer}get name(){return this.gameObject?.userData.name}__name;set name(e){this.gameObject?(this.gameObject.userData||(this.gameObject.userData={}),this.gameObject.userData.name=e,this.__name=e):this.__name=e}get tag(){return this.gameObject?.userData.tag}set tag(e){this.gameObject&&(this.gameObject.userData.tag=e)}get static(){return this.gameObject?.userData.static}get hideFlags(){return this.gameObject?.userData.hideFlags}get activeAndEnabled(){return!(this.destroyed||this.__isEnabled===!1||!this.__isActiveInHierarchy)}get __isActive(){return this.gameObject.visible}get __isActiveInHierarchy(){if(!this.gameObject)return!1;let e=this.gameObject[ji];return e===void 0?!0:e}set __isActiveInHierarchy(e){!this.gameObject||(this.gameObject[ji]=e)}gameObject;guid="invalid";sourceId;awake(){}onEnable(){}onDisable(){}onDestroy(){this.__destroyed=!0}startCoroutine(e,t=1){return this.context.registerCoroutineUpdate(this,e,t)}stopCoroutine(e,t=1){this.context.unregisterCoroutineUpdate(e,t)}get destroyed(){return this.__destroyed}destroy(){this.__destroyed||this.__internalDestroy()}__didAwake=!1;__didStart=!1;__didEnable=!1;__isEnabled=void 0;__destroyed=!1;get __internalDidAwakeAndStart(){return this.__didAwake&&this.__didStart}constructor(){this.__internalNewInstanceCreated()}__internalNewInstanceCreated(){this.__didAwake=!1,this.__didStart=!1,this.__didEnable=!1,this.__isEnabled=void 0,this.__destroyed=!1}__internalAwake(){this.__didAwake||(this.__didAwake=!0,this.awake())}__internalStart(){this.__didStart||(this.__didStart=!0,this.start&&this.start())}__internalEnable(){return this.__didEnable?!1:(this.__didEnable=!0,this.onEnable(),this.__isEnabled=!0,!0)}__internalDisable(){!this.__didEnable||(this.__didEnable=!1,this.onDisable(),this.__isEnabled=!1)}__internalDestroy(){this.__destroyed||(this.__destroyed=!0,this.destroy?.call(this),ef(this))}get enabled(){return this.__isEnabled??!0}set enabled(e){if(typeof e=="number"&&(e>=.5?e=!0:e=!1),!this.__didAwake){this.__isEnabled=e;return}e?this.__internalEnable():this.__internalDisable()}_worldPosition=void 0;_worldQuaternion=void 0;_worldEuler=void 0;_worldRotation=void 0;get worldPosition(){return this._worldPosition||(this._worldPosition=new it.Vector3),B(this.gameObject,this._worldPosition),this._worldPosition}set worldPosition(e){te(this.gameObject,e)}setWorldPosition(e,t,i){li._worldPositionBuffer.set(e,t,i),this.worldPosition=li._worldPositionBuffer}get worldQuaternion(){return this._worldQuaternion||(this._worldQuaternion=new it.Quaternion),me(this.gameObject,this._worldQuaternion)}set worldQuaternion(e){$e(this.gameObject,e)}setWorldQuaternion(e,t,i,n){li._worldQuaternionBuffer.set(e,t,i,n),this.worldQuaternion=li._worldQuaternionBuffer}get worldEuler(){return this._worldEuler||(this._worldEuler=new it.Euler),this._worldEuler.setFromQuaternion(this.worldQuaternion),this._worldEuler}set worldEuler(e){this._worldQuaternion||(this._worldQuaternion=new it.Quaternion),this._worldQuaternion?.setFromEuler(e),this.worldQuaternion=this._worldQuaternion}get worldRotation(){let e=this.worldEuler;this._worldRotation||(this._worldRotation=new it.Vector3);let t=this._worldRotation;return t.set(e.x,e.y,e.z),t.x=H.toDegrees(t.x),t.y=H.toDegrees(t.y),t.z=H.toDegrees(t.z),t}set worldRotation(e){this.setWorldRotation(e.x,e.y,e.z,!0)}setWorldRotation(e,t,i,n=!0){n&&(e=H.toRadians(e),t=H.toRadians(t),i=H.toRadians(i)),li._worldEulerBuffer.set(e,t,i),li._worldQuaternionBuffer.setFromEuler(li._worldEulerBuffer),this.worldQuaternion=li._worldQuaternionBuffer}get forward(){return li._forward.set(0,0,-1).applyQuaternion(this.worldQuaternion)}_eventListeners=new Map;addEventListener(e,t){this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push(t)}removeEventListener(e,t){if(!this._eventListeners[e])return;let i=this._eventListeners[e].indexOf(t);i>=0&&this._eventListeners[e].splice(i,1)}dispatchEvent(e){if(!this._eventListeners[e.type])return!1;let t=this._eventListeners[e.type];for(let i=0;i<t.length;i++)t[i](e);return!1}},Tt=li;I(Tt,"_worldPositionBuffer",new it.Vector3),I(Tt,"_worldQuaternionBuffer",new it.Quaternion),I(Tt,"_worldEulerBuffer",new it.Euler),I(Tt,"_tempQuaternionBuffer2",new it.Quaternion),I(Tt,"_forward",new it.Vector3);var M=class extends Tt{};var Uo=function(o){return y(o)},y=function(o){if(o===void 0&&(o=null),!Array.isArray(o))o=Nf(o);else for(let e=0;e<o.length;e++){let t=o[e];o[e]=Nf(t)}return function(e,t){Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});let i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function Nf(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}import{Color as Vv}from"three";var Q=class extends Vv{alpha=1;get isRGBAColor(){return!0}set a(e){this.alpha=e}get a(){return this.alpha}constructor(e,t,i,n){super(e,t,i),this.alpha=n}clone(){let e=super.clone();return e.alpha=this.alpha,e}copy(e){return super.copy(e),"alpha"in e&&typeof e.alpha=="number"?this.alpha=e.alpha:typeof e.a=="number"&&(this.alpha=e.a),this}lerp(e,t){let i=e;return i.alpha&&(this.alpha=H.lerp(this.alpha,i.alpha,t)),super.lerp(e,t)}lerpColors(e,t,i){let n=e,r=t;return n.alpha&&r.alpha&&(this.alpha=H.lerp(n.alpha,r.alpha,i)),super.lerpColors(e,t,i)}multiply(e){let t=e;return t.alpha&&(this.alpha=this.alpha*t.alpha),super.multiply(e)}};import{EquirectangularReflectionMapping as zv,OrthographicCamera as Wv,PerspectiveCamera as Zu,Ray as Nv,sRGBEncoding as Xv,Vector3 as Xf}from"three";var Il=P("debugcam"),Qf=P("debugscreenpointtoray"),Al=class extends M{get isCamera(){return!0}get aspect(){return this._cam instanceof Zu?this._cam.aspect:this.context.domWidth/this.context.domHeight}get fieldOfView(){return this._fov}set fieldOfView(e){let t=this._fov!=e;this._fov=e,t&&this._cam&&this._cam instanceof Zu&&(this._cam.fov=this._fov,this._cam.updateProjectionMatrix())}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){let t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&t&&(this._cam.near=e,this._cam.updateProjectionMatrix())}_nearClipPlane=.1;get farClipPlane(){return this._farClipPlane}set farClipPlane(e){let t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&t&&(this._cam.far=e,this._cam.updateProjectionMatrix())}_farClipPlane=1e3;get clearFlags(){return this._clearFlags}set clearFlags(e){e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}orthographic=!1;orthographicSize=5;ARBackgroundAlpha=0;set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}_cullingMask=4294967295;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}_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}_backgroundIntensity;get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){if(!!e){if(this._backgroundColor)this._backgroundColor.copy(e);else{if(!e.clone)return;this._backgroundColor=e.clone()}e.alpha===void 0&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera()}}_backgroundColor;_fov=60;_cam=null;_clearFlags=2;_skybox;get cam(){return this.activeAndEnabled&&this.buildCamera(),this._cam}screenPointToRay(e,t,i){let n=this.cam,r=Al._origin;r.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(r),Qf&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",r.x.toFixed(2),r.y.toFixed(2),"isInXR:"+this.context.isInXR),r.z=-1,r.unproject(n);let s=Al._direction.set(r.x,r.y,r.z),a=B(n);return s.sub(a),s.normalize(),i?(i.set(a,s),i):new Nv(a.clone(),s.clone())}awake(){this.sourceId||console.warn("Camera has no source - the camera should be exported inside a gltf",this.name),Qf&&window.addEventListener("pointerdown",e=>{let t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));let n=this.screenPointToRay(t,i),r="#"+Math.floor(Math.random()*16777215).toString(16);Et.DrawRay(n.origin,n.direction,r,10)})}onEnable(){Il&&console.log(this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&this.context.setCurrentCamera(this),this.applyClearFlagsIfIsActiveCamera()}onDisable(){this.context.removeCamera(this)}buildCamera(){if(this._cam)return;let e=this.gameObject.isCamera,t=null;if(e?(t=this.gameObject,t?.layers.enableAll()):t=this.gameObject.children[0],t&&t.isCamera)t.type==="PerspectiveCamera"&&(t.fov=this._fov,t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new Zu(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),t.fov=this.fieldOfView,this.gameObject.add(t);else{let i=this.orthographicSize*100;t=new Wv(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(){if(Il&&Fe("apply Camera clear flags"),this._cam&&this.context.mainCameraComponent===this)switch(this._clearFlags){case 1:if(this.environmentIsTransparent()&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}this.enableSkybox(),this._backgroundBlurriness!==void 0&&(this.context.scene.backgroundBlurriness=this._backgroundBlurriness),this._backgroundIntensity!==void 0&&(this.context.scene.backgroundIntensity=this._backgroundIntensity);break;case 2:if(this._backgroundColor){let e=this._backgroundColor.alpha;this.environmentIsTransparent()&&(e=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.renderer.setClearColor(this._backgroundColor,e)}break;case 4:this.context.scene.background=null,this.context.renderer.setClearColor(0,0);break}}environmentIsTransparent(){let e=this.context.renderer.xr?.getSession();if(!e)return!1;let t=e.environmentBlendMode;Il&&Fe("Environment blend mode: "+t+" on "+navigator.userAgent);let i=t==="additive"||t==="alpha-blend";if(this.context.xrSessionMode==="immersive-ar"&&t==="opaque"){if(navigator.userAgent?.includes("OculusBrowser"))return!0;if(navigator.userAgent?.includes("Mozilla")&&navigator.userAgent?.includes("Mobile WebXRViewer/v2"))return!0}return i}enableSkybox(){this._skybox||(this._skybox=new $u(this)),this._skybox.enable()}},Z=Al;I(Z,"_origin",new Xf),I(Z,"_direction",new Xf),v([y()],Z.prototype,"fieldOfView",1),v([y()],Z.prototype,"nearClipPlane",1),v([y()],Z.prototype,"farClipPlane",1),v([y()],Z.prototype,"clearFlags",1),v([y()],Z.prototype,"orthographic",2),v([y()],Z.prototype,"orthographicSize",2),v([y()],Z.prototype,"ARBackgroundAlpha",2),v([y()],Z.prototype,"cullingMask",1),v([y()],Z.prototype,"backgroundBlurriness",1),v([y()],Z.prototype,"backgroundIntensity",1),v([y(Q)],Z.prototype,"backgroundColor",1);var $u=class{_camera;_skybox;get context(){return this._camera?.context}constructor(e){this._camera=e}enable(){this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),this._skybox?this.context.scene.background!==this._skybox&&(Il&&console.log("Set skybox",this._camera,this._skybox),this._skybox.encoding=Xv,this._skybox.mapping=zv,this.context.scene.background=this._skybox):console.warn("Failed to load/find skybox texture",this)}};import{Object3D as qv}from"three";var xn=class extends M{constraintActive=!0;locked=!1;sources=[]};v([y(qv)],xn.prototype,"sources",2);import{Box3 as Yv,Vector2 as Kv,Vector3 as Dl}from"three";import{OrbitControls as Jv}from"three/examples/jsm/controls/OrbitControls.js";var Ll=P("freecam"),Zv={LEFT:"",UP:"",RIGHT:"",BOTTOM:""},ed,nt=class extends M{get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(e){this.controls?.addEventListener("start",e)}autoRotate=!1;autoRotateSpeed=1;enableKeys=!0;enableDamping=!0;dampingFactor=.1;enableZoom=!0;minZoom=0;maxZoom=1/0;enablePan=!0;lookAtConstraint=null;lookAtConstraint01=1;middleClickToFocus=!0;doubleClickToFocus=!0;useSlerp=!0;debugLog=!1;targetLerpSpeed=5;_lookTargetPosition;_controls=null;_cameraObject=null;_lerpToTargetPosition=!1;_lerpCameraToTarget=!1;_cameraTargetPosition=null;_inputs=0;_enableTime=0;_startedListeningToKeyEvents=!1;awake(){this._lookTargetPosition=new Dl,this._startedListeningToKeyEvents=!1}onEnable(){this._enableTime=this.context.time.time;let t=R.getComponent(this.gameObject,Z)?.cam;this._controls||(console.assert(t!=null,"Missing camera",this),t&&(this._cameraObject=t),this._controls=new Jv(t,this.context.renderer.domElement),ed===void 0&&(ed={...this._controls.keys})),this._controls&&(Ll&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,wo()&&(this.doubleClickToFocus=!0)),this._controls.enableDamping=this.enableDamping,this._controls.keys=this.enableKeys?ed:Zv,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,t?.type==="PerspectiveCamera"?Ll||(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom):Ll||(this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom),this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._startedListeningToKeyEvents||(this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(window.document.body)))}onDisable(){this._controls&&(this._controls.enabled=!1,this._controls.autoRotate=!1)}onDestroy(){this._controls?.dispose()}start(){if(this._controls){let e=R.getComponent(this.gameObject,Z);if(e&&!this.setFromTargetPosition()){this.debugLog&&console.log("NO TARGET");let t=new Dl(0,0,-1).applyMatrix4(e.cam.matrixWorld);this.setTarget(t,!0)}}this.startCoroutine(this.startRaycastDelayed())}*startRaycastDelayed(){if(yield,!this.setFromTargetPosition()){let e=new xe;e.screenPoint=new Kv(0,0),e.lineThreshold=.1;let t=this.context.physics.raycast(e);t.length>0&&this.setTarget(t[0].point,!0)}}onBeforeRender(){if(!this._controls)return;(this.context.input.getPointerDown(0)||this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2))&&(this._inputs+=1),this._inputs>0&&(this.autoRotate=!1,this._controls.autoRotate=!1,this._lerpCameraToTarget=!1,this._lerpToTargetPosition=!1),this._inputs=0;let e=this.middleClickToFocus&&this.context.input.getPointerClicked(1);if(e||=this.doubleClickToFocus&&this.context.input.getPointerDoubleClicked(0)&&this.context.time.time-this._enableTime>.3,e?this.setTargetFromRaycast():(this.context.input.getPointerDown(0)||this.context.input.mouseWheelChanged)&&(this._lerpToTargetPosition=!1,this._lerpCameraToTarget=!1),this._lerpToTargetPosition||this._lerpCameraToTarget){let t=this.context.time.deltaTime*this.targetLerpSpeed;if(this._lerpCameraToTarget&&this._cameraTargetPosition&&this._cameraObject){if(this.useSlerp){let i=this._cameraObject?.position;Pp(i,this._cameraTargetPosition,t)}else this._cameraObject?.position.lerp(this._cameraTargetPosition,t);this._cameraObject.position.distanceTo(this._cameraTargetPosition)<1e-4&&(this._lerpCameraToTarget=!1)}this._lerpToTargetPosition&&(this.lerpTarget(this._lookTargetPosition,t),this._lookTargetPosition.distanceTo(this._controls.target)<1e-5&&(this._lerpToTargetPosition=!1))}!Ll&&this.lookAtConstraint?.locked&&this.setFromTargetPosition(0,this.lookAtConstraint01),this._controls&&!this.context.isInXR&&(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!0,this._controls.update())}setCameraTarget(e,t=!1){e?(this._lerpCameraToTarget=!0,this._cameraTargetPosition=e.clone(),t&&this._cameraTargetPosition&&this.controllerObject?.position.copy(this._cameraTargetPosition)):this._lerpCameraToTarget=!1}setFromTargetPosition(e=0,t=1){if(!this._controls)return!1;let i=this.lookAtConstraint?.sources;if(i&&i.length>0){let n=i[e];if(n)return n.getWorldPosition(this._lookTargetPosition),this.lerpTarget(this._lookTargetPosition,t),!0}return!1}setTarget(e=null,t=!1){!this._controls||(e!==null&&this._lookTargetPosition.copy(e),t?this._controls.target.copy(this._lookTargetPosition):this._lerpToTargetPosition=!0)}lerpTarget(e,t){!this._controls||this._controls.target.lerp(e,t)}distanceToTarget(e){return this._controls?this._controls.target.distanceTo(e):-1}setTargetFromRaycast(){if(!this.controls)return;let e=this.context.physics.raycast();for(let t of e)if(t.distance>0&&R.isActiveInHierarchy(t.object)){if(this._lookTargetPosition.copy(t.point),this._lerpToTargetPosition=!0,this._cameraTargetPosition=null,this.context.mainCamera){this._lerpCameraToTarget=!0;let i=B(this.context.mainCamera);this._cameraTargetPosition=i.clone().sub(this.controls.target).add(this._lookTargetPosition),this._cameraObject?.parent?.worldToLocal(this._cameraTargetPosition)}break}}fitCameraToObjects(e,t=1.5){let i=this._cameraObject,n=this._controls;if(!i||!n)return;let r=new Dl,s=new Dl,a=new Yv;a.makeEmpty();for(let g of e)a.expandByObject(g);a.getSize(r),a.getCenter(s);let u=Math.max(r.x,r.y,r.z)/(2*Math.atan(Math.PI*i.fov/360)),l=u/i.aspect,d=t*Math.max(u,l),h=n.target.clone().sub(i.position).normalize().multiplyScalar(d);n.maxDistance=d*10,n.minDistance=d*.01,n.target.copy(s),i.near=d/100,i.far=d*100,i.updateProjectionMatrix(),i.position.copy(n.target).sub(h),n.update()}};v([y(xn)],nt.prototype,"lookAtConstraint",2);import{Object3D as $v,Vector3 as ey}from"three";function qf(o,e){let t=e,i=new $v;o.add(i);let n=new Z,r=Ht(i,n,!0);r.sourceId=t,r.clearFlags=2,r.backgroundColor=new Q(.5,.5,.5,1);let s=Ht(i,new nt,!1);return s.sourceId=t,i.position.x=-2,i.position.y=2,i.position.z=2,Op(i,new ey(0,0,0)),r}var oy=P("debugSetup"),sy=P("stats"),ay=P("debugactive"),jl={};var Rt=(a=>(a[a.EarlyUpdate=0]="EarlyUpdate",a[a.Update=1]="Update",a[a.LateUpdate=2]="LateUpdate",a[a.OnBeforeRender=3]="OnBeforeRender",a[a.OnAfterRender=4]="OnAfterRender",a[a.PrePhysicsStep=9]="PrePhysicsStep",a[a.PostPhysicsStep=10]="PostPhysicsStep",a))(Rt||{});function ol(o,e){if(!o)return;let t=e?.new_scripts??G.Current.new_scripts;t.includes(o)||t.push(o)}var pt=class{static get Current(){return this._current}static set Current(e){this._current=e}name;alias;isManagedExternally=!1;isPaused=!1;runInBackground=!1;hash;domElement;get resolutionScaleFactor(){return this._resolutionScaleFactor}set resolutionScaleFactor(e){if(e!==this._resolutionScaleFactor&&typeof e=="number"){if(e<=0){console.error("Invalid resolution scale factor",e);return}this._resolutionScaleFactor=e,this.updateSize()}}_resolutionScaleFactor=1;_boundingClientRectFrame=-1;_boundingClientRect=null;_domX;_domY;calculateBoundingClientRect(){if(this.isInAR){this._domX=0,this._domY=0;return}this._boundingClientRectFrame!==this.time.frame&&(this._boundingClientRectFrame=this.time.frame,this._boundingClientRect=this.domElement.getBoundingClientRect(),this._domX=this._boundingClientRect.x,this._domY=this._boundingClientRect.y)}get domWidth(){return this.isInAR?window.innerWidth:this.domElement.clientWidth}get domHeight(){return this.isInAR?window.innerHeight:this.domElement.clientHeight}get domX(){return this.calculateBoundingClientRect(),this._domX}get domY(){return this.calculateBoundingClientRect(),this._domY}get isInXR(){return this.renderer.xr?.isPresenting||!1}xrSessionMode=void 0;get isInVR(){return this.xrSessionMode==="immersive-vr"}get isInAR(){return this.xrSessionMode==="immersive-ar"}get xrSession(){return this.renderer.xr?.getSession()}get arOverlayElement(){let e=this.domElement;return typeof e.getAROverlayContainer=="function"?e.getAROverlayContainer():this.domElement}get currentFrameEvent(){return this._currentFrameEvent}_currentFrameEvent=-1;scene;renderer;composer=null;scripts=[];scripts_pausedChanged=[];scripts_earlyUpdate=[];scripts_update=[];scripts_lateUpdate=[];scripts_onBeforeRender=[];scripts_onAfterRender=[];scripts_WithCorroutines=[];coroutines={};get mainCamera(){if(this.mainCameraComponent){let e=this.mainCameraComponent;return e.cam||e.buildCamera(),e.cam}return null}mainCameraComponent;post_setup_callbacks=[];pre_update_callbacks=[];pre_render_callbacks=[];post_render_callbacks=[];new_scripts=[];new_script_start=[];new_scripts_pre_setup_callbacks=[];new_scripts_post_setup_callbacks=[];application;time;input;physics;connection;assets;mainLight=null;rendererData;addressables;lightmaps;players;_sizeChanged=!1;_isCreated=!1;_isVisible=!1;_stats=sy?Yf.default():null;constructor(e){if(this.name=e?.name||"",this.alias=e?.alias,this.domElement=e?.domElement||document.body,this.hash=e?.hash,e?.renderer)this.renderer=e.renderer,this.isManagedExternally=!0;else{let r=P("postfx");this.renderer=new iy({antialias:!0}),this.renderer.toneMappingExposure=1,this.renderer.toneMapping=Pe.NoToneMapping,this.renderer.setClearColor(new Pe.Color("lightgrey"),0),this.renderer.antialias=!0,this.renderer.alpha=!1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=Pe.PCFSoftShadowMap,this.renderer.setSize(this.domWidth,this.domHeight),this.renderer.outputEncoding=Pe.sRGBEncoding,this.renderer.physicallyCorrectLights=!0,this.composer=r?new ny(this.renderer):null}this.scene=new Pe.Scene,this.application=new Pl(this),this.time=new cl,this.input=new Xa(this),this.physics=new Kn(this),this.connection=new bl(this),this.assets=new wl,this.rendererData=new Rl(this),this.addressables=new Sl(this),this.lightmaps=new kl(this),this.players=new Ml(this);let t=()=>this._sizeChanged=!0;window.addEventListener("resize",t),this._disposeCallbacks.push(()=>window.removeEventListener("resize",t));let i=new ResizeObserver(r=>this._sizeChanged=!0);i.observe(this.domElement),this._disposeCallbacks.push(()=>i.disconnect());let n=new IntersectionObserver(r=>{this._isVisible=r[0].isIntersecting});n.observe(this.domElement),this._disposeCallbacks.push(()=>n.disconnect())}_disposeCallbacks=[];updateSize(){if(!this.isManagedExternally&&!this.renderer.xr.isPresenting){this._sizeChanged=!1;let e=this.resolutionScaleFactor,t=this.domWidth*e,i=this.domHeight*e,n=this.mainCamera;this.updateAspect(n),this.renderer.setSize(t,i),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",this.composer&&(this.composer.setSize?.call(this.composer,t,i),this.composer.setPixelRatio?.call(this.composer,window.devicePixelRatio))}}updateAspect(e,t,i){if(!e)return;t===void 0&&(t=this.domWidth),i===void 0&&(i=this.domHeight);let n=e.aspect;e.aspect=t/i,n!==e.aspect&&e.updateProjectionMatrix()}onCreate(e,t){return this._isCreated?(console.warn("Context already created"),null):(this._isCreated=!0,this.internalOnCreate(e,t))}onDestroy(){if(!!this._isCreated){this._isCreated=!1,oi(this.scene,!0),this.renderer?.setAnimationLoop(null),this.isManagedExternally||this.renderer?.dispose();for(let e of this._disposeCallbacks)try{e()}catch(t){console.error("Error in on dispose callback:",t,e)}this.domElement?.parentElement&&this.domElement.parentElement.removeChild(this.domElement)}}registerCoroutineUpdate(e,t,i){return this.coroutines[i]||(this.coroutines[i]=[]),this.coroutines[i].push({comp:e,main:t}),t}unregisterCoroutineUpdate(e,t){if(!this.coroutines[t])return;let i=this.coroutines[t].findIndex(n=>n.main===e);i>=0&&this.coroutines[t].splice(i,1)}stopAllCoroutinesFrom(e){for(let t in this.coroutines){let i=this.coroutines[t];for(let n=i.length-1;n>=0;n--)i[n].comp===e&&i.splice(n,1)}}_cameraStack=[];setCurrentCamera(e){if(!e)return;if(e.cam||e.buildCamera(),!e.cam){console.warn("Camera component is missing camera",e);return}let t=this._cameraStack.indexOf(e);t>=0&&this._cameraStack.splice(t,1),this._cameraStack.push(e),this.mainCameraComponent=e;let i=e.cam;i.isPerspectiveCamera&&this.updateAspect(i),this.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}removeCamera(e){if(!e)return;let t=this._cameraStack.indexOf(e);if(t>=0&&this._cameraStack.splice(t,1),this.mainCameraComponent===e&&(this.mainCameraComponent=void 0,this._cameraStack.length>0)){let i=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(i)}}_onBeforeRenderListeners={};addBeforeRenderListener(e,t){if(!this._onBeforeRenderListeners[e.uuid]){this._onBeforeRenderListeners[e.uuid]=[];let i=(n,r,s,a,c,u)=>{let l=this._onBeforeRenderListeners[e.uuid];if(!!l)for(let d=0;d<l.length;d++){let h=l[d];h(n,r,s,a,c,u)}};e.onBeforeRender=i}this._onBeforeRenderListeners[e.uuid].push(t)}removeBeforeRenderListener(e,t){if(this._onBeforeRenderListeners[e.uuid]){let i=this._onBeforeRenderListeners[e.uuid],n=i.indexOf(t);n>=0&&i.splice(n,1)}}_requireDepthTexture=!1;_requireColorTexture=!1;_renderTarget;_isRendering=!1;get isRendering(){return this._isRendering}setRequireDepth(e){this._requireDepthTexture=e}setRequireColor(e){this._requireColorTexture=e}get depthTexture(){return this._renderTarget?.depthTexture||null}get opaqueColorTexture(){return this._renderTarget?.texture||null}get isVisibleToUser(){if(this.isInXR)return!0;if(!this._isVisible)return!1;let e=getComputedStyle(this.domElement);return e.visibility!=="hidden"&&e.display!=="none"&&e.opacity!=="0"}async internalOnCreate(e,t){await this.physics.createWorld();let i=!0;try{pt.Current=this,e&&await e(this,t)}catch(n){console.error(n),i=!1}if(!!i){this.isManagedExternally||this.domElement.prepend(this.renderer.domElement),Np(this),Wp(this),Lf(this),pt._current=this;for(let n=0;n<this.new_scripts.length;n++){let r=this.new_scripts[n];if(r.gameObject!==void 0&&r.gameObject!==null){r.gameObject.userData===void 0&&(r.gameObject.userData={}),r.gameObject.userData.components===void 0&&(r.gameObject.userData.components=[]);let s=r.gameObject.userData.components;s.includes(r)||s.push(r)}}if(this.post_setup_callbacks)for(let n=0;n<this.post_setup_callbacks.length;n++)pt._current=this,await this.post_setup_callbacks[n](this);if(!this.mainCamera){pt._current=this;let n=null;si(this.scene,r=>{let s=r;if(s?.isCamera){if(Hr(s.gameObject),!s.activeAndEnabled)return;if(s.tag==="MainCamera")return n=s,!0;n=s}}),n?this.setCurrentCamera(n):(console.error("MISSING camera",this),qf(this.scene,"unknown"))}if(pt._current=this,vn(this),!this.isManagedExternally&&this.composer&&this.mainCamera){let n=new ry(this.scene,this.mainCamera);this.renderer.setSize(this.domWidth,this.domHeight),this.composer.addPass(n),this.composer.setSize(this.domWidth,this.domHeight)}this._sizeChanged=!0,this._stats&&(this._stats.showPanel(1),this.domElement.appendChild(this._stats.dom)),this.renderer.setAnimationLoop(this.render.bind(this)),oy&&Xs(this.scene,!0)}}render(e,t){if(this._currentFrameEvent=-1,this.onHandlePaused())return;for(this._stats?.begin(),pt._current=this,this.time.update(),vn(this),So(),Ja(this);this._cameraStack.length>0&&(!this.mainCameraComponent||this.mainCameraComponent.destroyed);){this._cameraStack.splice(this._cameraStack.length-1,1);let r=this._cameraStack[this._cameraStack.length-1];this.setCurrentCamera(r)}if(this.pre_update_callbacks)for(let r in this.pre_update_callbacks)this.pre_update_callbacks[r]();this._currentFrameEvent=0;for(let r=0;r<this.scripts_earlyUpdate.length;r++){let s=this.scripts_earlyUpdate[r];!s.activeAndEnabled||s.earlyUpdate!==void 0&&(pt._current=this,s.earlyUpdate())}if(this.executeCoroutines(0),this.onHandlePaused())return;this._currentFrameEvent=1;for(let r=0;r<this.scripts_update.length;r++){let s=this.scripts_update[r];!s.activeAndEnabled||s.update!==void 0&&(pt._current=this,s.update())}if(this.executeCoroutines(1),this.onHandlePaused())return;this._currentFrameEvent=2;for(let r=0;r<this.scripts_lateUpdate.length;r++){let s=this.scripts_lateUpdate[r];!s.activeAndEnabled||s.lateUpdate!==void 0&&(pt._current=this,s.lateUpdate())}if(this.executeCoroutines(2),this.onHandlePaused())return;let i=1,n=this.time.deltaTime/i;for(let r=0;r<i;r++)this._currentFrameEvent=9,this.executeCoroutines(9),this.physics.step(n),this._currentFrameEvent=10,this.executeCoroutines(10);if(this.physics.postStep(),!this.onHandlePaused()){if(this.isVisibleToUser){this._currentFrameEvent=3;for(let r=0;r<this.scripts_onBeforeRender.length;r++){let s=this.scripts_onBeforeRender[r];!s.activeAndEnabled||s.onBeforeRender!==void 0&&(pt._current=this,s.onBeforeRender(t))}if(this.executeCoroutines(3),this._sizeChanged&&this.updateSize(),this.pre_render_callbacks)for(let r in this.pre_render_callbacks)this.pre_render_callbacks[r]();this.isManagedExternally||(this._currentFrameEvent=-10,this.renderNow(),this._currentFrameEvent=4);for(let r=0;r<this.scripts_onAfterRender.length;r++){let s=this.scripts_onAfterRender[r];!s.activeAndEnabled||s.onAfterRender!==void 0&&(pt._current=this,s.onAfterRender())}if(this.executeCoroutines(4),this.post_render_callbacks)for(let r in this.post_render_callbacks)this.post_render_callbacks[r]()}this._currentFrameEvent=-1,this.connection.sendBufferedMessagesNow(),this._stats?.end()}}renderNow(e){return!e&&(e=this.mainCamera,!e)?!1:(this._isRendering=!0,this.renderRequiredTextures(),this.composer&&!this.isInXR?this.composer.render():this.mainCamera&&this.renderer.render(this.scene,e),this._isRendering=!1,!0)}_wasPaused=!1;onHandlePaused(){let e=this.evaluatePaused();if(this._wasPaused!==e){ay&&console.log("Paused?",e,"context:"+this.alias);for(let t=0;t<this.scripts_pausedChanged.length;t++){let i=this.scripts_pausedChanged[t];!i.activeAndEnabled||i.onPausedChanged!==void 0&&(pt._current=this,i.onPausedChanged(e,this._wasPaused))}}return this._wasPaused=e,e}evaluatePaused(){return this.isInXR?!1:this.isPaused?!0:this.runInBackground?!1:!this.isVisibleToUser}renderRequiredTextures(){if(!this.mainCamera||!this._requireDepthTexture&&!this._requireColorTexture)return;if(!this._renderTarget){if(this._renderTarget=new Pe.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){let i=new ty(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new Pe.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=Pe.NearestFilter,this._renderTarget.texture.magFilter=Pe.NearestFilter,this._renderTarget.texture.format=Pe.RGBAFormat)}let e=this._renderTarget;e.texture&&(e.texture.encoding=this.renderer.outputEncoding);let t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(e),this.renderer.render(this.scene,this.mainCamera),this.renderer.setRenderTarget(t)}executeCoroutines(e){if(this.coroutines[e]){let i=this.coroutines[e];for(let n=0;n<i.length;n++)try{let r=i[n];if(!r.comp||r.comp.destroyed||!r.main||r.comp.enabled===!1){i.splice(n,1),--n;continue}let a=r.chained;if(a&&a.length>0){let d=a[a.length-1].next();if(d.done&&a.pop(),t(d)&&(r.chained||(r.chained=[]),r.chained.push(d.value)),!d.done)continue}let c=r.main.next();if(c.done===!0){i.splice(n,1),--n;continue}let u=c.value;if(t(u)){if(u.next().done)continue;r.chained||(r.chained=[]),r.chained.push(u)}}catch(r){console.error(r)}}function t(i){return!!(i&&i.next&&i.return)}}},G=pt;I(G,"_current");var ly=P("debugaroverlay"),Ui="ar",Kf="quit-ar",Hl=class{get ARContainer(){return this.arContainer}constructor(){this.closeARCallback=this.onRequestedEndAR.bind(this)}arContainer=null;closeARCallback;currentSession=null;registeredCloseEventElements=[];_createdAROnlyElements=[];_reparentedObjects=[];requestEndAR(){this.onRequestedEndAR()}onBegin(e,t,i){this.currentSession=i,this.arContainer=t,e.domElement.querySelectorAll(`.${Ui}`).forEach(s=>{!s||s!==this.arContainer&&(this._reparentedObjects.push({el:s,previousParent:s.parentElement}),this.arContainer?.appendChild(s))});let r=t.getElementsByClassName(Kf);if(!r||r.length<=0)console.warn(`Missing quit AR elements, creating fallback X button. Use class name '${Kf}' to override.`),this.createFallbackCloseARButton(this.arContainer);else for(let s=0;s<r.length;s++){let a=r[s];!a||(a.addEventListener("click",this.closeARCallback),this.registeredCloseEventElements.push(a))}}onEnd(e){for(let t of this._createdAROnlyElements)t.remove&&t.remove();for(let t of this._reparentedObjects){let i=t.el;t.previousParent?.appendChild(i)}this._reparentedObjects.length=0,ja()&&setTimeout(()=>{let t=e.renderer.domElement;t&&e.domElement.insertBefore(t,e.domElement.firstChild);let i=document.querySelectorAll("*");for(var n=0;n<i.length;n++){let r=i[n];r&&r._displayChanged!==void 0&&r._displayWas!==void 0&&(r.style.display=r._displayWas)}},10)}findOrCreateARContainer(e){if(e.classList.contains(Ui))return e;if(e.children)for(let n=0;n<e.children.length;n++){let r=e.children[n];if(!(!r||!r.classList)&&r.classList.contains(Ui))return r}let t=document.getElementsByClassName(Ui);if(t&&t.length>0)return t[0];ly&&console.log("No overlay container found in document - generating new ony");let i=document.createElement("div");return i.classList.add(Ui),i.style.position="absolute",i.style.width="100%",i.style.height="100%",i.style.display="flex",i.style.visibility="visible",e.appendChild(i)}onRequestedEndAR(){if(!!this.currentSession){this.currentSession.end(),this.currentSession=null;for(let e of this.registeredCloseEventElements)e.removeEventListener("click",this.closeARCallback);this.registeredCloseEventElements.length=0}}createFallbackCloseARButton(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("width","38px"),t.setAttribute("height","38px"),t.style.position="absolute",t.style.right="20px",t.style.top="40px",t.style.zIndex="9999",t.style.pointerEvents="auto",t.addEventListener("click",this.closeARCallback),e.appendChild(t),this._createdAROnlyElements.push(t);var i=document.createElementNS("http://www.w3.org/2000/svg","path");i.setAttribute("d","M 12,12 L 28,28 M 28,12 12,28"),i.setAttribute("stroke","#ddd"),i.setAttribute("stroke-width","3px"),t.appendChild(i),this._createdAROnlyElements.push(i)}};var cy=P("debugdebug"),Jf=P("noerrors"),td=new Map,BS=new RegExp(" at .+/(.+?.ts)","g"),Gs=(i=>(i[i.Log=0]="Log",i[i.Warn=1]="Warn",i[i.Error=2]="Error",i))(Gs||{});function iu(){return $f}function Zf(){if(Jf)return;if(ut()){cy&&console.log(window.location.hostname);let e=console.error;console.error=(...t)=>{e.apply(console,t),Vs(2,t,null,null),id()},window.addEventListener("error",t=>{!t||(Vs(2,t.error,t.filename,t.lineno),id())},!0),window.addEventListener("unhandledrejection",t=>{!t||(Vs(2,t.reason.message,t.reason.stack),id())})}}var $f=0;function id(){$f+=1}function Vs(o,e,t,i){if(Jf)return;let r=G.Current?.domElement??document.querySelector("needle-engine");if(!!r){if(Array.isArray(e)){let s="";for(let a=0;a<e.length;a++)typeof e[a]!="object"&&(a>0&&(s+=" "),s+=e[a]);e=s}uy(o,r,e)}}var nd=new Set;function uy(o,e,t){let i=hy(e);if(i.childElementCount>=20||nd.has(t))return;nd.add(t);let n=fy(o,t);i.prepend(n),setTimeout(()=>{nd.delete(t),py(n)},1e4)}var dy=`
177
177
 
178
178
  @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
179
179
 
@@ -210,9 +210,9 @@ a:hover {
210
210
  color: rgba(255,100,120, 1);
211
211
  }
212
212
 
213
- `;function dy(o){if(ed.has(o))return ed.get(o);{let e=document.createElement("div");e.classList.add(Ui),e.classList.add("desktop"),e.classList.add("debug-container"),e.style.position="absolute",e.style.top="0",e.style.right="5px",e.style.paddingTop="0px",e.style.maxWidth="70%",e.style.maxHeight="calc(100% - 5px)",e.style.zIndex="1000",e.style.pointerEvents="scroll",e.style.display="flex",e.style.alignItems="end",e.style.flexDirection="column",e.style.color="white",e.style.overflow="auto",o.appendChild(e),ed.set(o,e);let t=document.createElement("style");return t.innerHTML=uy,e.appendChild(t),e}}var $f=Symbol("logtype"),Hl=new Map;function hy(o){o.remove();let e=o[$f],t=Hl.get(e)??[];t.push(o),Hl.set(e,t)}function py(o,e){if(Hl.has(o)){let i=Hl.get(o);if(i.length>0){let n=i.pop();return n.innerHTML=e,n}}let t=document.createElement("div");switch(t.style.marginRight="5px",t.style.padding=".5em",t.style.backgroundColor="rgba(0,0,0,.9)",t.style.marginTop="5px",t.style.marginBottom="3px",t.style.borderRadius="8px",t.style.pointerEvents="all",t.style.userSelect="text",t.style.maxWidth="250px",t.style.whiteSpace="pre-wrap",t.style["backdrop-filter"]="blur(10px)",t.style.backgroundColor="rgba(20,20,20,.8)",t.style.boxShadow="inset 0 0 80px rgba(0,0,0,.2), 0 0 5px rgba(0,0,0,.2)",t.style.border="1px solid rgba(160,160,160,.2)",t[$f]=o,o){case 0:t.classList.add("log"),t.style.color="rgba(200,200,200,.7)",t.style.backgroundColor="rgba(40,40,40,.7)";break;case 1:t.classList.add("warn"),t.style.color="rgb(255, 255, 150)",t.style.backgroundColor="rgba(50,50,20,.8)";break;case 2:t.classList.add("error"),t.style.color="rgb(255, 50, 50",t.style.backgroundColor="rgba(50,20,20,.8)";break}return t.title="Open the browser console (F12) for more information",t.innerHTML=e,t}var ci=function(o,e){return function(t,i,n){fy(t,i,n,o,e)}};function fy(o,e,t,i,n){if(!(!n&&!i&&!o.onValidate)){if(t!==void 0){console.error("Invalid usage of validate decorator. Only fields can be validated.",o,e,t),Fe("Invalid usage of validate decorator. Only fields can be validated. Property: "+e,2);return}if(o.__internalAwake){let r=Symbol(e),s=o.__internalAwake;o.__internalAwake=function(){this[r]===void 0&&(this[r]=this[e],Object.defineProperty(this,e,{set:function(a){if(this[Wa]===!0)this[r]=a;else{i?.call(this,a);let c=this[r];this[r]=a,this.onValidate?.call(this,e,c)}},get:function(){return n?.call(this),this[r]}})),s.call(this)}}}}import{AnimationClip as my,MathUtils as gy}from"three";var Uo=class{_name;get name(){return this._name}_nameHash;get nameHash(){return this._nameHash}_normalizedTime;get normalizedTime(){return this._normalizedTime}_length;get length(){return this._length}_speed;get speed(){return this._speed}constructor(e,t,i,n){this._name=e.name,this._nameHash=e.hash,this._normalizedTime=t,this._length=i,this._speed=n}};function em(o,e){return{name:"",isLooping:!1,guid:e?.generateUUID()??gy.generateUUID(),index:-1,clip:new my(o,1,[])}}import{AnimationClip as by,AnimationMixer as vy,AxesHelper as yy,Euler as tm,LoopOnce as _y,Quaternion as ui,Vector3 as ta}from"three";import*as Bl from"three";var Gi=P("debuganimatorcontroller"),nd=P("debugrootmotion"),hi=class{Play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){if(t<0)t=0;else if(t>=this.model.layers.length){console.warn("invalid layer");return}let s=this.model.layers[t].stateMachine;for(let a of s.states)if(a.name===e||a.hash===e){Gi&&console.log("transition to ",a),this.transitionTo(a,n,i);return}console.warn("Could not find "+e+" to play")}Reset(){this.setStartTransition()}SetBool(e,t){let i=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(n=>n[i]===e).forEach(n=>n.value=t)}GetBool(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.find(i=>i[t]===e)?.value??!1}SetFloat(e,t){let i=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(n=>n[i]===e).forEach(n=>n.value=t)}GetFloat(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.find(i=>i[t]===e)?.value??0}SetInteger(e,t){let i=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(n=>n[i]===e).forEach(n=>n.value=t)}GetInteger(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.find(i=>i[t]===e)?.value??0}SetTrigger(e){Gi&&console.log("SET TRIGGER",e);let t=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(i=>i[t]===e).forEach(i=>i.value=!0)}ResetTrigger(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(i=>i[t]===e).forEach(i=>i.value=!1)}IsInTransition(){return this._activeStates.length>1}SetSpeed(e){this._speed=e}FindState(e){if(!e)return null;for(let t of this.model.layers)for(let i of t.stateMachine.states)if(i.name===e)return i;return null}normalizedStartOffset=0;_speed=1;animator;model;get context(){return this.animator?.context}bind(e){this.animator=e,this._mixer=new vy(this.animator.gameObject),this.createActions(this.animator)}clone(){let e=Bs(this.model,(i,n,r)=>r==null?!0:!(r.type==="Object3D"||r.isObject3D===!0||Mp(r)||r.tracks!==void 0));return console.assert(e!==this.model),new hi(e)}update(){if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates();let e=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&this.rootMotionHandler?.onBeforeUpdate(),this._mixer.update(e),this.animator.applyRootMotion&&this.rootMotionHandler?.onAfterUpdate()}_mixer;_activeState;constructor(e){this.model=e,Gi&&console.log(this)}_activeStates=[];updateActiveStates(){for(let e=0;e<this._activeStates.length;e++){let t=this._activeStates[e],i=t.motion;if(!i.action)this._activeStates.splice(e,1),e--;else{let n=i.action;n.getEffectiveWeight()<=0&&!n.isRunning()&&(Gi&&console.debug("REMOVE",t.name,n.getEffectiveWeight(),n.isRunning(),n.isScheduled()),this._activeStates.splice(e,1),e--)}}}setStartTransition(){for(let e of this.model.layers){let t=e.stateMachine;t.defaultState===void 0&&(Gi&&console.warn("AnimatorController default state is undefined, will assign state 0 as default",e),t.defaultState=0);let i=t.states[t.defaultState];this.transitionTo(i,0,this.normalizedStartOffset)}}evaluateTransitions(){let t=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;t=!0}let i=this._activeState,n=i.motion.action,r=0;for(let a of i.transitions){if(++r,!a.hasExitTime&&a.conditions.length<=0)continue;let c=!0;for(let u of a.conditions)if(!this.evaluateCondition(u)){c=!1;break}if(!!c){for(let u of a.conditions){let l=this.model.parameters.find(d=>d.name===u.parameter);l?.type===9&&(l.value=!1)}if(n){let u=i.motion.clip.duration,l=u<=0?1:n.time/u;if(a.hasExitTime?l>=a.exitTime:!0){n.clampWhenFinished=!0,Gi&&console.log("transition to "+a.destinationState,a,l,a.exitTime,a.hasExitTime),this.transitionTo(a.destinationState,a.duration,a.offset);return}}else{this.transitionTo(a.destinationState,a.duration,a.offset);return}}}let s=!1;if(i.motion.isLooping&&n&&n.time>=n.getClip().duration&&(s=!0,n.reset(),n.time=0,n.play()),!s&&i&&!t&&n&&this.animator&&i.behaviours){let a=n?.getClip().duration,c=n.time/a,u=new Uo(this._activeState,c,a,this._speed);for(let l of i.behaviours)l.instance&&l.instance.onStateUpdate?.call(l.instance,this.animator,u,0)}}getState(e,t){return typeof e=="number"&&(e==-1&&(e=this.model.layers[t].stateMachine.defaultState,e===void 0&&(Gi&&console.warn("AnimatorController default state is undefined: ",this.model,"Layer: "+t),e=0)),e=this.model.layers[t].stateMachine.states[e]),e}transitionTo(e,t,i){if(!this.animator)return;let n=0;if(e=this.getState(e,n),!e?.motion||!e.motion.clip)return;let r=this._activeState===e;if(r){let u=e.motion;!u.action_loopback&&u.clip&&(this._mixer.uncacheAction(u.clip,this.animator.gameObject),u.action_loopback=this.createAction(u.clip))}if(this._activeState?.behaviours&&this._activeState.motion.action){let u=this._activeState?.motion.clip.duration,l=this._activeState.motion.action.time/u,d=new Uo(this._activeState,l,u,this._speed);for(let h of this._activeState.behaviours)h.instance?.onStateExit?.call(h.instance,this.animator,d,n)}let s=this._activeState?.motion.action;s&&s.fadeOut(t),r&&(e.motion.action=e.motion.action_loopback,e.motion.action_loopback=s);let a=this._activeState;this._activeState=e;let c=e.motion?.action;if(c){i=Math.max(0,Math.min(1,i)),c.isRunning()&&c.stop(),c.reset(),c.timeScale=this._speed,c.enabled=!0;let u=e.motion.clip.duration;if(c.time=i*u,c.clampWhenFinished=!0,c.setLoop(_y,0),t>0?c.fadeIn(t):c.setEffectiveWeight(1),c.play(),this.rootMotionHandler&&this.rootMotionHandler.onStart(c),this._activeStates.includes(e)||this._activeStates.push(e),this._activeState.behaviours){let l=new Uo(e,i,u,this._speed);for(let d of this._activeState.behaviours)d.instance?.onStateEnter?.call(d.instance,this.animator,l,n)}}else console.warn("No action",e.motion,this);Gi&&console.log("TRANSITION FROM "+a?.name+" TO "+e.name,t,s,c,c?.getEffectiveTimeScale(),c?.getEffectiveWeight(),c?.isRunning(),c?.isScheduled(),c?.paused)}createAction(e){if(this._mixer.existingAction(e)&&this._mixer.uncacheAction(e,this.animator?.gameObject),this.animator?.applyRootMotion){this.rootMotionHandler||(this.rootMotionHandler=new rd(this));let i=this.animator.gameObject;return this.rootMotionHandler.createClip(this._mixer,i,e)}else return this._mixer.clipAction(e)}evaluateCondition(e){let t=this.model.parameters.find(i=>i.name===e.parameter);if(!t)return!1;switch(e.mode){case 1:return t.value===!0;case 2:return t.value===!1;case 3:return t.value>e.threshold;case 4:return t.value<e.threshold;case 6:return t.value===e.threshold;case 7:return t.value!==e.threshold}return!1}createActions(e){for(let t of this.model.layers){let i=t.stateMachine;for(let n=0;n<i.states.length;n++){let r=i.states[n];r.transitions||(r.transitions=[]);for(let s of r.transitions)s.conditions||(s.conditions=[]);if(r.motion||(r.motion=em(r.name)),this.animator&&r.motion.clips){let s=r.motion.clips?.find(a=>a.node.name===this.animator?.gameObject?.name);r.motion.clip=s?.clip}if(!r.motion.clip){let s=new by(void 0,void 0,[]);r.motion.clip=s}if(r.motion?.clip){let s=r.motion.clip,a=this.createAction(s);r.motion.action=a}if(r.behaviours&&Array.isArray(r.behaviours))for(let s of r.behaviours){if(!s?.typeName)continue;let a=O.get(s.typeName),c=new a;c.isStateMachineBehaviour&&(c._context=this.context??void 0,jt(c,s.properties),s.instance=c),Gi&&console.log("Created animator controller behaviour",r.name,s.typeName,s.properties,c)}}}}*enumerateActions(){for(let e of this.model.layers){let t=e.stateMachine;for(let i=0;i<t.states.length;i++){let n=t.states[i];n?.motion&&(n.motion.action&&(yield n.motion.action),n.motion.action_loopback&&(yield n.motion.action_loopback))}}}rootMotionHandler},Fl=class{track;createdInterpolant;originalEvaluate;customEvaluate;constructor(e,t){this.track=e;let i=e,n=i.createInterpolant.bind(e);i.createInterpolant=()=>(i.createInterpolant=n,this.createdInterpolant=n(),this.originalEvaluate=this.createdInterpolant.evaluate.bind(this.createdInterpolant),this.customEvaluate=r=>{if(!this.originalEvaluate)return;let s=this.originalEvaluate(r);return t(r,s)},this.createdInterpolant.evaluate=this.customEvaluate,this.createdInterpolant)}evaluate(e){this.customEvaluate&&this.customEvaluate(e)}dispose(){this.createdInterpolant&&this.originalEvaluate&&(this.createdInterpolant.evaluate=this.originalEvaluate),this.track=void 0,this.createdInterpolant=null,this.originalEvaluate=void 0,this.customEvaluate=void 0}},we=class{set action(e){this._action=e}get action(){return this._action}_action;root;clip;positionWrapper=null;rotationWrapper=null;context;positionChange=new ta;rotationChange=new ui;constructor(e,t,i,n,r){if(this.context=e,this.root=t,this.clip=i,we.firstKeyframeRotation[i.uuid]||(we.firstKeyframeRotation[i.uuid]=new Bl.Quaternion),r){let s=r.values;we.firstKeyframeRotation[i.uuid].set(s[0],s[1],s[2],s[3])}we.spaceRotation[i.uuid]||(we.spaceRotation[i.uuid]=new ui),we.effectiveSpaceRotation[i.uuid]||(we.effectiveSpaceRotation[i.uuid]=new ui),we.clipOffsetRotation[i.uuid]=new ui,r&&we.clipOffsetRotation[i.uuid].set(r.values[0],r.values[1],r.values[2],r.values[3]).invert(),this.handlePosition(i,n),this.handleRotation(i,r)}onStart(e){if(e.getClip()!==this.clip)return;let t=we.lastObjRotation[this.root.uuid];we.spaceRotation[this.clip.uuid].copy(t);{let i=new Bl.Euler().setFromQuaternion(t);console.log("START",this.clip.name,H.toDegrees(i.y))}}getClipRotationOffset(){return we.clipOffsetRotation[this.clip.uuid]}handlePosition(e,t){if(t){let i=this.root;nd&&i.add(new yy),we.lastObjPosition[i.uuid]||(we.lastObjPosition[i.uuid]=new ta);let n=new ta,r=new ta,s=0;this.positionWrapper=new Fl(t,(a,c)=>{let u=this.action.getEffectiveWeight();if(nd&&i.position.length()>8&&i.position.set(0,i.position.y,0),a>s){n.set(c[0],c[1],c[2]),n.sub(r),n.multiplyScalar(u),n.applyQuaternion(this.getClipRotationOffset());let l=this.clip.uuid;n.applyQuaternion(we.spaceRotation[l]),this.positionChange.copy(n)}return r.fromArray(c),s=a,c[0]=0,c[1]=0,c[2]=0,c})}}handleRotation(e,t){if(t){if(nd){let a=t.values,c=new tm().setFromQuaternion(new ui(a[0],a[1],a[2],a[3]));console.log(e.name,t.name,"FIRST ROTATION IN TRACK",H.toDegrees(c.y));let u=t.values.length-4,l=new ui().set(a[u],a[u+1],a[u+2],a[u+3]),d=new tm().setFromQuaternion(l);console.log(e.name,t.name,"LAST ROTATION IN TRACK",H.toDegrees(d.y))}let i=this.root;we.lastObjRotation[i.uuid]||(we.lastObjRotation[i.uuid]=new ui);let n=0,r=new ui,s=new ui;this.rotationWrapper=new Fl(t,(a,c)=>(a>n&&(s.set(c[0],c[1],c[2],c[3]),r.invert(),s.multiply(r),this.rotationChange.copy(s)),r.fromArray(c),n=a,c[0]=0,c[1]=0,c[2]=0,c[3]=1,c))}}onBeforeUpdate(){this.positionChange.set(0,0,0),this.rotationChange.set(0,0,0,1)}onAfterUpdate(){let e=this.action.getEffectiveWeight();this.positionChange.multiplyScalar(e),this.rotationChange.slerp(we.identityQuaternion,1-e)}},di=we;I(di,"lastObjPosition",{}),I(di,"lastObjRotation",{}),I(di,"firstKeyframeRotation",{}),I(di,"spaceRotation",{}),I(di,"effectiveSpaceRotation",{}),I(di,"clipOffsetRotation",{}),I(di,"identityQuaternion",new ui);var rd=class{controller;handler=[];root;constructor(e){this.controller=e}createClip(e,t,i){this.root=t;let n="";t&&"name"in t&&(n=t.name);let r=this.findRootTrack(i,".position"),s=this.findRootTrack(i,".quaternion"),a=new di(this.controller.context,t,i,r,s);this.handler.push(a);let c=e.clipAction(i);return a.action=c,c}onStart(e){for(let t of this.handler)t.onStart(e)}onBeforeUpdate(){for(let e of this.handler)e.onBeforeUpdate()}summedPosition=new ta;summedRotation=new ui;onAfterUpdate(){this.summedPosition.set(0,0,0),this.summedRotation.set(0,0,0,1);for(let e of this.handler)e.onAfterUpdate(),this.summedPosition.add(e.positionChange),this.summedRotation.multiply(e.rotationChange);this.root.position.add(this.summedPosition),this.root.quaternion.multiply(this.summedRotation),di.lastObjRotation[this.root.uuid].copy(this.root.quaternion)}findRootTrack(e,t){let i=e.tracks;for(let n of i)if(n.name.endsWith(t))return n;return null}};var im=P("debuganimator"),Ee=class extends M{applyRootMotion=!1;hasRootMotion=!1;keepAnimatorControllerStateOnDisable=!1;set runtimeAnimatorController(e){this._animatorController&&this._animatorController.model===e||(e?e instanceof hi?this._animatorController=e:(im&&console.log("Assign animator controller",e,this),this._animatorController=new hi(e)):this._animatorController=null)}get runtimeAnimatorController(){return this._animatorController}Play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){this.runtimeAnimatorController?.Play(e,t,i,n)}Reset(){this._animatorController?.Reset()}SetBool(e,t){this.runtimeAnimatorController?.SetBool(e,t)}GetBool(e){return this.runtimeAnimatorController?.GetBool(e)??!1}SetFloat(e,t){this.runtimeAnimatorController?.SetFloat(e,t)}GetFloat(e){return this.runtimeAnimatorController?.GetFloat(e)??-1}SetInteger(e,t){this.runtimeAnimatorController?.SetInteger(e,t)}GetInteger(e){return this.runtimeAnimatorController?.GetInteger(e)??-1}SetTrigger(e){this.runtimeAnimatorController?.SetTrigger(e)}ResetTrigger(e){this.runtimeAnimatorController?.ResetTrigger(e)}IsInTransition(){return this.runtimeAnimatorController?.IsInTransition()??!1}SetSpeed(e){e!==this.speed&&(this.speed=e,this._animatorController?.SetSpeed(e))}set minMaxSpeed(e){this.speed=H.lerp(e.x,e.y,Math.random())}set minMaxOffsetNormalized(e){this.normalizedStartOffset=H.lerp(e.x,e.y,Math.random()),this.runtimeAnimatorController&&(this.runtimeAnimatorController.normalizedStartOffset=this.normalizedStartOffset)}speed=1;normalizedStartOffset=0;_animatorController=null;awake(){if(im&&console.log("ANIMATOR",this.name,this),!!this.gameObject&&this.runtimeAnimatorController){let e=this.runtimeAnimatorController.clone();console.assert(this.runtimeAnimatorController!==e),this.runtimeAnimatorController=e,console.assert(this.runtimeAnimatorController===e),this.runtimeAnimatorController.bind(this),this.runtimeAnimatorController.SetSpeed(this.speed),this.runtimeAnimatorController.normalizedStartOffset=this.normalizedStartOffset}}onDisable(){this.keepAnimatorControllerStateOnDisable||this._animatorController?.Reset()}onBeforeRender(){this._animatorController&&this._animatorController.update()}};v([y()],Ee.prototype,"applyRootMotion",2),v([y()],Ee.prototype,"hasRootMotion",2),v([y()],Ee.prototype,"keepAnimatorControllerStateOnDisable",2),v([y()],Ee.prototype,"runtimeAnimatorController",1);import*as zr from"three";import{AnimationClip as xy}from"three";var Ul=P("debuganimation"),rt=class extends M{playAutomatically=!0;randomStartTime=!0;minMaxSpeed;minMaxOffsetNormalized;loop=!0;clampWhenFinished=!1;_tempAnimationClipBeforeGameObjectExisted=null;get clip(){return this.animations?.length?this.animations[0]:null}set clip(e){if(!this.__didAwake){Ul&&console.log("Assign clip during serialization",e),this._tempAnimationClipBeforeGameObjectExisted=e;return}!e||(Ul&&console.log("Assign clip",e,Boolean(this.gameObject)),this.gameObject.animations||(this.gameObject.animations=[]),!this.animations.includes(e)&&(this.animations.length>0?this.animations.splice(0,0,e):this.animations.push(e)))}set clips(e){this.animations=e}set animations(e){Ul&&console.log("assign animations",e),this.gameObject.animations=e}get animations(){return this.gameObject.animations}get currentAction(){return this._currentActions[0]}get currentActions(){return this._currentActions}mixer=void 0;get actions(){return this._actions}set actions(e){this._actions=e}_actions=[];_currentActions=[];_handles=[];awake(){Ul&&console.log(this),this._tempAnimationClipBeforeGameObjectExisted&&(this.clip=this._tempAnimationClipBeforeGameObjectExisted,this._tempAnimationClipBeforeGameObjectExisted=null),this.playAutomatically&&this.init()}onEnable(){if(this.playAutomatically&&this.animations?.length>0&&this.currentActions.length<=0){let e=Math.floor(Math.random()*this.actions.length);this.play(e)}}start(){this.randomStartTime&&this.currentAction&&(this.currentAction.time=Math.random()*this.currentAction.getClip().duration)}update(){if(!!this.mixer){this.mixer.update(this.context.time.deltaTime);for(let e of this._handles)e._update();this._handles?.length>0&&re.markDirty(this.gameObject)}}getAction(e){return this.actions?.find(t=>t.getClip().name===e)}get isPlaying(){for(let e=0;e<this._currentActions.length;e++)if(this._currentActions[e].isRunning())return!0;return!1}play(e,t){if(this.init(),!this.mixer)return;e===void 0&&(e=0);let i=e;if(typeof e=="number"){if(e>=this.animations.length)return;i=this.animations[e]}else typeof e=="string"&&(i=this.animations.find(r=>r.name===e));if(!i){console.error("Could not find clip",e);return}t||(t={}),t.minMaxOffsetNormalized||(t.minMaxOffsetNormalized=this.minMaxOffsetNormalized),t.minMaxSpeed||(t.minMaxSpeed=this.minMaxSpeed),t.loop||(t.loop=this.loop),t.clampWhenFinished||(t.clampWhenFinished=this.clampWhenFinished);for(let r of this.actions)if(r.getClip()===i)return this.internalOnPlay(r,t);let n=this.mixer.clipAction(i);return this.actions.push(n),this.internalOnPlay(n,t)}internalOnPlay(e,t){var i=this.currentAction;if(i===e&&i.isRunning()&&i.time<i.getClip().duration){let a=this.tryFindHandle(e);if(a)return a.getPromise()}let n=t?.exclusive??!0;t?.fadeDuration?(n&&i?.fadeOut(t.fadeDuration),e.fadeIn(t.fadeDuration)):n&&i?.stop(),e.reset(),e.enabled=!0,e.time=0,e.timeScale=1;let r=e.getClip();t?.minMaxOffsetNormalized&&(e.time=H.lerp(t.minMaxOffsetNormalized.x,t.minMaxOffsetNormalized.y,Math.random())*r.duration),t?.minMaxSpeed&&(e.timeScale=H.lerp(t.minMaxSpeed.x,t.minMaxSpeed.y,Math.random())),t?.clampWhenFinished&&(e.clampWhenFinished=!0),t?.startTime!==void 0&&(e.time=t.startTime),t?.loop!==void 0?e.loop=t.loop?zr.LoopRepeat:zr.LoopOnce:e.loop=zr.LoopOnce,e.play();let s=new od(e,this.mixer,t,a=>{this._handles.splice(this._handles.indexOf(s),1)});return this._handles.push(s),s.getPromise()}tryFindHandle(e){for(let t of this._handles)if(t.action===e)return t}_didInit=!1;init(){this._didInit||(this._didInit=!0,this.gameObject&&(this.actions=[],this.mixer=new zr.AnimationMixer(this.gameObject)))}};v([y()],rt.prototype,"playAutomatically",2),v([y()],rt.prototype,"randomStartTime",2),v([y()],rt.prototype,"loop",2),v([y()],rt.prototype,"clampWhenFinished",2),v([y(xy)],rt.prototype,"clips",1);var od=class{mixer;action;promise=null;resolve=null;reject=null;_options;_resolveCallback=null;_rejectCallback=null;_loopCallback;_finishedCallback;_resolvedOrRejectedCallback;constructor(e,t,i,n){this.action=e,this.mixer=t,this._resolvedOrRejectedCallback=n,this._options=i}getPromise(){return this.promise?this.promise:(this.promise=new Promise((e,t)=>{this._resolveCallback=e,this._rejectCallback=t,this.resolve=this.onResolve.bind(this),this.reject=this.onReject.bind(this)}),this._loopCallback=this.onLoop.bind(this),this._finishedCallback=this.onFinished.bind(this),this.mixer.addEventListener("loop",this._loopCallback),this.mixer.addEventListener("finished",this._finishedCallback),this.promise)}_update(){!this._options||this._options.endTime!==void 0&&this.action.time>this._options.endTime&&(this._options.loop===!0?this.action.time=this._options.startTime??0:(this.action.time=this._options.endTime,this.action.timeScale=0,this.onResolve()))}onResolve(){this.dispose(),this._resolvedOrRejectedCallback?.call(this,this),this._resolveCallback?.call(this,this.action)}onReject(e){this.dispose(),this._resolvedOrRejectedCallback?.call(this,this),this._rejectCallback?.call(this,e)}onLoop(e){}onFinished(e){e.action===this.action&&this.onResolve()}dispose(){this._loopCallback&&this.mixer.removeEventListener("loop",this._loopCallback),this._finishedCallback&&this.mixer.removeEventListener("finished",this._finishedCallback),this._loopCallback=void 0,this._finishedCallback=void 0}};import{GLTFLoader as Uw}from"three/examples/jsm/loaders/GLTFLoader.js";import{DRACOLoader as sd}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as nm}from"three/examples/jsm/loaders/KTX2Loader.js";var ia=P("debugdecoders"),pi,er;function ad(o){o!==void 0&&typeof o=="string"&&(pi||(pi=new sd),ia&&console.log("Setting draco decoder path to",o),pi.setDecoderPath(o))}function ld(o){o!==void 0&&typeof o=="string"&&(pi||(pi=new sd),ia&&console.log("Setting draco decoder type to",o),pi.setDecoderConfig({type:o}))}function cd(o){o!==void 0&&typeof o=="string"&&(er||(er=new nm),ia&&console.log("Setting ktx2 transcoder path to",o),er.setTranscoderPath(o))}function wn(o,e){pi||(pi=new sd,pi.setDecoderPath("./include/draco/"),pi.setDecoderConfig({type:"js"}),ia&&console.log("Setting draco decoder path to","./include/draco/")),er||(er=new nm,er.setTranscoderPath("./include/ktx2/"),ia&&console.log("Setting ktx2 transcoder path to","./include/ktx2/"),e.renderer&&er.detectSupport(e.renderer)),o.setDRACOLoader(pi),o.setKTX2Loader(er)}import*as X from"three";import{RawShaderMaterial as Ey}from"three";var En=P("debugshaders"),Go="NEEDLE_techniques_webgl";var ud=class{objectToWorldMatrix=new X.Matrix4;worldToObjectMatrix=new X.Matrix4;objectToWorld=new Array;worldToObject=new Array;updateFrom(e){this.objectToWorldMatrix.copy(e.matrixWorld),$s(this.objectToWorldMatrix,this.objectToWorld),this.worldToObjectMatrix.copy(e.matrixWorld).invert(),$s(this.worldToObjectMatrix,this.worldToObject)}};var ce=class extends Ey{identifier;onBeforeRenderSceneCallback=this.onBeforeRenderScene.bind(this);clone(){let e=super.clone();return om(e),e}constructor(e,...t){super(...t),this.identifier=e,En&&console.log(this),this.type="NEEDLE_CUSTOM_SHADER",this.uniforms[this._objToWorldName]||(this.uniforms[this._objToWorldName]={value:[]}),this.uniforms[this._worldToObjectName]||(this.uniforms[this._worldToObjectName]={value:[]}),this.uniforms[this._viewProjectionName]||(this.uniforms[this._viewProjectionName]={value:[]}),this.uniforms[this._sphericalHarmonicsName]&&this.waitForLighting(),(this.depthTextureUniform||this.opaqueTextureUniform)&&G.Current.pre_render_callbacks.push(this.onBeforeRenderSceneCallback)}dispose(){super.dispose();let e=G.Current.pre_render_callbacks.indexOf(this.onBeforeRenderSceneCallback);e>=0&&G.Current.pre_render_callbacks.splice(e,1)}async waitForLighting(){let e=G.Current;if(!e){console.error("Missing context");return}let t=await e.rendererData.getSceneLightingData(this.identifier);if(!t||!t.array){console.warn("Missing lighting data for custom shader, getSceneLightingData did not return anything");return}En&&console.log(t);let i=t.array,n=t.texture;this.uniforms.unity_SpecCube0={value:n},Wu(this.uniforms,i);let r=Math.sqrt(Math.PI*.5);this.uniforms.unity_SpecCube0_HDR={value:new X.Vector4(r,r,r,r)},En&&console.log("Set environment lighting",this.uniforms)}_sphericalHarmonicsName="unity_SpecCube0";_objToWorldName="hlslcc_mtx4x4unity_ObjectToWorld";_worldToObjectName="hlslcc_mtx4x4unity_WorldToObject";_viewProjectionName="hlslcc_mtx4x4unity_MatrixVP";_viewMatrixName="hlslcc_mtx4x4unity_MatrixV";_rendererData=new ud;get depthTextureUniform(){if(!!this.uniforms)return this.uniforms._CameraDepthTexture}get opaqueTextureUniform(){if(!!this.uniforms)return this.uniforms._CameraOpaqueTexture}onBeforeRenderScene(){this.opaqueTextureUniform&&G.Current.setRequireColor(!0),this.depthTextureUniform&&G.Current.setRequireDepth(!0)}onBeforeRender(e,t,i,n,r,s){n.attributes.tangent||n.computeTangents(),this.onUpdateUniforms(i,r)}onUpdateUniforms(e,t){let i=G.Current;e&&(ce.viewProjection&&this.uniforms[this._viewProjectionName]&&(ce.viewProjection.copy(e.projectionMatrix).multiply(e.matrixWorldInverse),$s(ce.viewProjection,ce._viewProjectionValues)),ce.viewMatrix&&this.uniforms[this._viewMatrixName]&&(ce.viewMatrix.copy(e.matrixWorldInverse),$s(ce.viewMatrix,ce._viewMatrixValues)),this.uniforms[ce._worldSpaceCameraPosName]&&ce._worldSpaceCameraPos.setFromMatrixPosition(e.matrixWorld)),this.uniforms._TimeParameters?this.uniforms._TimeParameters.value=i.rendererData.timeVec4:this.uniforms._Time&&(this.uniforms._Time.value=i.rendererData.timeVec4);let n=i.mainLight;if(n){let a=B(n.gameObject,ce._mainLightPosition);this.uniforms._MainLightPosition={value:a.normalize()},ce._mainLightColor.set(n.color.r,n.color.g,n.color.b,0),this.uniforms._MainLightColor={value:ce._mainLightColor};let c=n.intensity;ce._lightData.z=c,this.uniforms.unity_LightData={value:ce._lightData}}if(e&&(ce.viewProjection&&this.uniforms[this._viewProjectionName]&&(this.uniforms[this._viewProjectionName].value=ce._viewProjectionValues),ce.viewMatrix&&this.uniforms[this._viewMatrixName]&&(this.uniforms[this._viewMatrixName].value=ce._viewMatrixValues),this.uniforms[ce._worldSpaceCameraPosName]&&(this.uniforms[ce._worldSpaceCameraPosName]={value:ce._worldSpaceCameraPos}),i.mainCameraComponent)){if(this.uniforms._ProjectionParams){let a=this.uniforms._ProjectionParams.value;a.x=1,a.y=i.mainCameraComponent.nearClipPlane,a.z=i.mainCameraComponent.farClipPlane,a.w=1/a.z,this.uniforms._ProjectionParams.value=a}if(this.uniforms._ZBufferParams){let a=this.uniforms._ZBufferParams.value,c=i.mainCameraComponent;a.x=1-c.farClipPlane/c.nearClipPlane,a.y=c.farClipPlane/c.nearClipPlane,a.z=a.x/c.farClipPlane,a.w=a.y/c.farClipPlane,this.uniforms._ZBufferParams.value=a}if(this.uniforms._ScreenParams){let a=this.uniforms._ScreenParams.value;a.x=i.domWidth,a.y=i.domHeight,a.z=1+1/a.x,a.w=1+1/a.y,this.uniforms._ScreenParams.value=a}}let r=this.depthTextureUniform;r&&(r.value=i.depthTexture);let s=this.opaqueTextureUniform;if(s&&(s.value=i.opaqueColorTexture),t){let a=this._rendererData;a.updateFrom(t),this.uniforms[this._worldToObjectName].value=a.worldToObject,this.uniforms[this._objToWorldName].value=a.objectToWorld}this.uniformsNeedUpdate=!0}},Ut=ce;I(Ut,"viewProjection",new X.Matrix4),I(Ut,"_viewProjectionValues",[]),I(Ut,"viewMatrix",new X.Matrix4),I(Ut,"_viewMatrixValues",[]),I(Ut,"_worldSpaceCameraPosName","_WorldSpaceCameraPos"),I(Ut,"_worldSpaceCameraPos",new X.Vector3),I(Ut,"_mainLightColor",new X.Vector4),I(Ut,"_mainLightPosition",new X.Vector3),I(Ut,"_lightData",new X.Vector4);var Gl=class{get name(){return Go}parser;identifier;constructor(e,t){this.parser=e,this.identifier=t}loadMaterial(e){let t=this.parser.json.materials[e];if(!t)return En&&console.log(e,this.parser.json.materials),null;if(!t.extensions||!t.extensions[Go])return En&&console.log("material "+e+" does not use NEEDLE_techniques_webgl"),null;let i=t.extensions[Go].technique;if(i<0)return null;let n=this.parser.json.extensions[Go];if(!n)return null;En&&console.log(n);let r=n.techniques[i];return r?new Promise(async(s,a)=>{let c=await Gf(n,r.program),u=c?.fragmentShader,l=c?.vertexShader;if(!u||!l)return a();En&&console.log("loadMaterial",t,c);let d={},h=r.uniforms;l.includes("_Time")&&(d._Time={value:new X.Vector4(0,0,0,0)});for(let m in h){let f=m;switch(f){case"_TimeParameters":let p=new X.Vector4;d[f]={value:p};break;case"hlslcc_mtx4x4unity_MatrixV":case"hlslcc_mtx4x4unity_MatrixVP":d[f]={value:[]};break;case"_MainLightPosition":case"_MainLightColor":case"_WorldSpaceCameraPos":d[f]={value:[0,0,0,1]};break;case"unity_OrthoParams":break;case"unity_SpecCube0":d[f]={value:null};break;default:case"_ScreenParams":case"_ZBufferParams":case"_ProjectionParams":d[f]={value:[0,0,0,0]};break;case"_CameraOpaqueTexture":case"_CameraDepthTexture":d[f]={value:null};break}}let g=!1;if(t.extensions&&t.extensions[Go]){let m=t.extensions[Go];if(m.technique===i){En&&console.log(t.name,"Material Properties",m);for(let f in m.values){let p=m.values[f];if(typeof p=="string"){if(p.startsWith("/textures/")){let b=p.substring(10),w=Number.parseInt(b);if(w>=0){let C=await this.parser.getDependency("texture",w);C&&(C.encoding=X.LinearEncoding,C.needsUpdate=!0),d[f]={value:C};continue}}switch(f){case"alphaMode":p==="BLEND"&&(g=!0);continue}}if(Array.isArray(p)&&p.length===4){d[f]={value:new X.Vector4(p[0],p[1],p[2],p[3])};continue}d[f]={value:p}}}}let E=new Ut(this.identifier,{name:t.name??"",uniforms:d,vertexShader:l,fragmentShader:u,lights:!1});switch(d._Cull?.value){case 0:E.side=X.DoubleSide;break;case 1:E.side=X.BackSide;break;case 2:E.side=X.FrontSide;break;default:E.side=X.FrontSide;break}switch(d._ZTest?.value){case 3:E.depthTest=!0,E.depthFunc=X.EqualDepth;break;case 6:E.depthTest=!0,E.depthFunc=X.NotEqualDepth;break;case 2:E.depthTest=!0,E.depthFunc=X.LessDepth;break;case 4:E.depthTest=!0,E.depthFunc=X.LessEqualDepth;break;case 5:E.depthTest=!0,E.depthFunc=X.GreaterDepth;break;case 7:E.depthTest=!0,E.depthFunc=X.GreaterEqualDepth;break;case 8:E.depthTest=!1,E.depthFunc=X.AlwaysDepth;break}E.transparent=g,g&&(E.depthWrite=!1),Wu(d),E.onUpdateUniforms();for(let m in h){let f=m,p=h[m].type;if(d[f]?.value===void 0)switch(p){case 35678:d[f]={value:Bf},console.warn("Missing/unassigned texture, fallback to white: "+f);break;default:console.warn("TODO: EXPECTED UNIFORM / fallback NOT SET: "+f,h[m]);break}}En&&console.log(E.uuid,d),om(E),s(E)}):null}};function om(o){if(o.uniforms)for(let e in o.uniforms)Object.getOwnPropertyDescriptor(o,e)||Object.defineProperty(o,e,{get:()=>o.uniforms[e].value,set:t=>{o.uniforms[e].value=t,o.needsUpdate=!0}})}var tr=pe,Vl="$___Export_Components",Cy="NEEDLE_components",dd=class{[Lr]},hd=class{node;nodeIndex;nodeDef;constructor(e,t,i){this.node=e,this.nodeIndex=t,this.nodeDef=i}},Vo=class{get name(){return Cy}parser;nodeToObjectMap={};exportContext;objectToNodeMap={};context;writer;registerExport(e){e.register(t=>{if("serializeUserData"in t){let i=t.serializeUserData.bind(t);this.writer=t,t.serializeUserData=(n,r)=>{try{this.serializeUserData(n,r),i(n,r)}finally{this.afterSerializeUserData(n,r)}}}return this})}beforeParse(){this.exportContext={},this.objectToNodeMap={}}serializeUserData(e,t){let i=e.userData?.components;!i||i.length<=0||(delete e.userData.components,e[Vl]=i)}afterSerializeUserData(e,t){if(e.type==="Scene"&&tr&&console.log("DONE",JSON.stringify(t)),e[Vl]===void 0)return;let i=e[Vl];delete e[Vl],i!==null&&(e.userData.components=i)}writeNode(e,t){let i=this.writer.json.nodes.length;console.log(e.name,i,e.uuid);let n=new hd(e,i,t);this.exportContext[i]=n,this.objectToNodeMap[e.uuid]=i}afterParse(e){tr&&console.log("AFTER",e);for(let t in this.exportContext){let i=this.exportContext[t],n=i.node,r=i.nodeDef,s=i.nodeIndex,a=n.userData?.components;if(!a||a.length<=0)continue;let c=new dd;r.extensions=r.extensions||{},r.extensions[this.name]=c,this.context.object=n,this.context.nodeId=s,this.context.objectToNode=this.objectToNodeMap;let u=[];for(let l of a){this.context.target=l;let d=Ye().writeBuiltinComponentData(l,this.context);d!==null&&u.push(d)}u.length>0&&(c[Lr]=u,tr&&console.log("DID WRITE",n,"nodeIndex",s,u))}}beforeRoot(){return tr&&console.log("BEGIN LOAD"),this.nodeToObjectMap={},null}async afterRoot(e){let t=e.parser,i=t?.extensions;if(!i)return;let n=i[this.name];tr&&console.log("After root",e,this.parser,i);let r=[];if(n===!0){let s=t.json.nodes;for(let a=0;a<s.length;a++){let c=await t.getDependency("node",a);this.nodeToObjectMap[a]=c}for(let a=0;a<s.length;a++){let c=s[a],u=a,l=c.extensions;if(!l)continue;let d=l[this.name];if(!d)continue;tr&&console.log("NODE",c);let h=this.nodeToObjectMap[u];if(!h){console.error("Could not find object for node index: "+u,c,t);continue}Mo(h),r.push(this.createComponents(h,d))}}await Promise.all(r)}async createComponents(e,t){if(!t)return;let i=t[Lr];if(i){let n=new Array;tr&&console.log(e.name,i);for(let r in i){let s=i[r];tr&&console.log("Serialized data",JSON.parse(JSON.stringify(s))),s&&this.parser&&n.push(Eo(this.parser,s)),e.userData=e.userData||{},e.userData[Lr]=e.userData[Lr]||[],e.userData[Lr].push(s)}await Promise.all(n)}}};import{EXRLoader as Ty}from"three/examples/jsm/loaders/EXRLoader.js";var pd=P("debugexr"),zl=class{parser;name;constructor(e){this.parser=e,this.name="EXT_texture_exr",pd&&console.log(e)}loadTexture(e){let t=this.name,i=this.parser,r=i.json.textures[e];if(pd&&console.log("EXT_texture_exr.loadTexture",e,r),!r.extensions||!r.extensions[t])return null;let s=r.extensions[t],a=new Ty(i.options.manager);return pd&&console.log("EXT_texture_exr.loadTexture",s,a),i.loadTextureImage(e,s.source,a)}};window.addEventListener("unhandledrejection",o=>{});var sm="NEEDLE_gameobject_data",Wl=class{get name(){return sm}parser;constructor(e){this.parser=e}afterRoot(e){let t=[];for(let i=0;i<this.parser.json.nodes.length;i++){let n=this.parser.json.nodes[i];if(n&&n.extensions){let r=n.extensions[sm];if(r){let s=this.findAndApplyExtensionData(i,r);t.push(s)}}}return Promise.all(t).then(()=>{})}async findAndApplyExtensionData(e,t){let i=await this.parser.getDependency("node",e);i&&this.applyExtensionData(i,t)}applyExtensionData(e,t){e.userData.layer=t.layers,e.layers.disableAll(),e.layers.set(t.layers),e.userData.tag=t.tag,e.userData.hideFlags=t.hideFlags,e.userData.static=t.static,e.visible=t.activeSelf,e.guid=t.guid}};import{AmbientLight as Ry,Color as am,HemisphereLight as Sy}from"three";var lm="NEEDLE_lighting_settings",zo=P("debugenvlight"),Nl=class{get name(){return lm}parser;sourceId;context;constructor(e,t,i){this.parser=e,this.sourceId=t,this.context=i}afterRoot(e){let t=this.parser.json.extensions;if(t){let i=t[lm];if(i){zo&&console.log(i);let n=R.addNewComponent(e.scene,fd,!1);n.sourceId=this.sourceId,n.ambientIntensity=i.ambientIntensity,n.ambientLight=new am().fromArray(i.ambientLight),Array.isArray(i.ambientTrilight)&&(n.ambientTrilight=i.ambientTrilight.map(r=>new am().fromArray(r))),n.ambientMode=i.ambientMode,n.environmentReflectionSource=i.environmentReflectionSource,this.context&&this.context.rendererData.registerSceneLightSettings(n)}}return null}},fd=class extends M{ambientMode=0;ambientLight;ambientTrilight;ambientIntensity=1;environmentReflectionSource=0;_hasReflection=!1;_ambientLightObj;_lightProbeObj;awake(){if(this.sourceId){let e=this.environmentReflectionSource===0?1:2,t=this.context.lightmaps.tryGet(this.sourceId,e,0);this._hasReflection=t!=null,t&&this.context.rendererData.registerReflection(this.sourceId,t)}zo&&window.addEventListener("keydown",e=>{switch(e.key){case"l":this.enabled=!this.enabled;break}})}onEnable(){let e=this.context.mainCameraComponent?.sourceId===this.sourceId;if(zo&&console.log("Enable scene lighting",this.sourceId,e,this,this.context.mainCameraComponent?.sourceId),e||zo&&console.warn("This is no active?!",this.context.mainCameraComponent?.sourceId),this.ambientMode==3)this.ambientLight&&!this._ambientLightObj&&(this._ambientLightObj=new Ry(this.ambientLight,Math.PI*this.ambientIntensity)),this._ambientLightObj&&this.gameObject.add(this._ambientLightObj),this._lightProbeObj&&this._lightProbeObj.removeFromParent();else if(this.ambientMode===1){if(this.ambientTrilight){let t=this.ambientTrilight[0],i=this.ambientTrilight[this.ambientTrilight.length-1],n=new Sy(i,t,this.ambientIntensity);this.gameObject.add(n)}}else this._ambientLightObj&&this._ambientLightObj.removeFromParent(),this._lightProbeObj?this.enabled&&this.destroyed&&this._lightProbeObj&&this.scene.add(this._lightProbeObj):this.sourceId&&this.context.rendererData.getSceneLightingData(this.sourceId).then(t=>{zo&&console.log(t),t&&(this._lightProbeObj=t.lightProbe,this.enabled&&!this.destroyed&&this._lightProbeObj&&this.scene.add(this._lightProbeObj))});this.sourceId&&this.context.rendererData.enableReflection(this.sourceId)}onDisable(){zo&&console.log("disable",this.sourceId,this),this._lightProbeObj&&this._lightProbeObj.removeFromParent(),this._ambientLightObj&&this._ambientLightObj.removeFromParent(),this.sourceId&&this.context.rendererData.disableReflection()}};import{NeverStencilFunc as Py,LessStencilFunc as Oy,EqualStencilFunc as ky,LessEqualStencilFunc as My,GreaterStencilFunc as Iy,NotEqualStencilFunc as Ay,GreaterEqualStencilFunc as Dy,AlwaysStencilFunc as Ly,ZeroStencilOp as jy,KeepStencilOp as Hy,ReplaceStencilOp as Fy,IncrementStencilOp as By,DecrementStencilOp as Uy,IncrementWrapStencilOp as Gy,DecrementWrapStencilOp as Vy,InvertStencilOp as zy}from"three";var md=P("debugstencil");function Wy(o,e){return(o&1<<e.layer)!=0}var Wr=class{static applyStencil(e){if(!e)return;let t=e.sourceId;if(md&&console.log(t,Wr.stencils),!t)return;let i=Wr.stencils[t];if(!!i)for(let n=i.length-1;n>=0;n--){let r=i[n];if(Wy(r.layer,e)){md&&console.log(r);let s=e.sharedMaterial?.clone();s&&(e.sharedMaterial=s,e.gameObject.renderOrder=r.event*1e3+r.index*50,s.stencilWrite=!0,s.stencilWriteMask=255,s.stencilFuncMask=255,s.stencilRef=r.value,s.stencilFunc=r.compareFunc,s.stencilZPass=r.passOp,s.stencilFail=r.failOp,s.stencilZFail=r.zFailOp);break}}}parser;source;constructor(e,t){this.parser=e,this.source=t}afterRoot(e){let t=this.parser.json.extensions;if(t){let i=t[Xy];if(i){md&&console.log(i);let n=i.stencil;if(n&&Array.isArray(n))for(let r of n){let s={...r};s.compareFunc=Ny(s.compareFunc),s.passOp=gd(s.passOp),s.failOp=gd(s.failOp),s.zFailOp=gd(s.zFailOp),Wr.stencils[this.source]||(Wr.stencils[this.source]=[]),Wr.stencils[this.source].push(s)}}}return null}},Nr=Wr;I(Nr,"stencils",{});function gd(o){switch(o){case 0:return Hy;case 1:return jy;case 2:return Fy;case 3:return By;case 4:return Uy;case 6:return Gy;case 7:return Vy;case 5:return zy}return 0}function Ny(o){switch(o){case 1:return Py;case 2:return Oy;case 3:return ky;case 4:return My;case 5:return Iy;case 6:return Ay;case 7:return Dy;case 8:return Ly}return 0}var Xy="NEEDLE_render_objects";import{TextureLoader as Qy}from"three";import{GLTFLoader as qy}from"three/examples/jsm/loaders/GLTFLoader.js";var bd="NEEDLE_progressive",Ve=P("debugprogressive"),yd=new Map,vd=!1;Ve&&window.addEventListener("keyup",o=>{o.key==="p"&&(yd.forEach((e,t)=>{Object.entries(e).forEach(([i,n])=>{vd?t[i]=n.lod0:t[i]=n.original,t.needsUpdate=!0})}),vd=!vd)});var na=class{static assignTextureLOD(e,t,i,n=0){if(!!i)for(let r of Object.keys(i)){let s=i[r];s?.isTexture===!0&&(Ve&&console.log(`-----------
214
- `,"FIND",i.name,r,s?.name,s?.userData,s,i),na.getOrLoadTexture(e,t,i,r,s,n).then(a=>{if(a?.isTexture===!0&&(Ve&&console.log("Assign LOD",i.name,r,a.name,a.guid,i,"Prev:",s,"Now:",a,`
215
- --------------`),i[r]=a,a.needsUpdate=!0,i.needsUpdate=!0,Ve)){let c=yd.get(i);c||(c={},yd.set(i,c));let u=c[r];u||(u=c[r]={original:s,lod0:a}),u.lod0=a}}))}}get name(){return bd}parser;sourceId;context;constructor(e,t,i){this.parser=e,this.sourceId=t,this.context=i}_loading=[];afterRoot(e){return Ve&&console.log("AFTER",this.sourceId,e),this.parser.json.textures?.forEach((t,i)=>{if(t?.extensions){let n=t?.extensions[bd];if(n){let r=this.parser.getDependency("texture",i);this._loading.splice(this._loading.indexOf(i),1),r.then(s=>{Ve&&console.log("register texture",s.name,s.uuid,n),s.userData.deferred=n,na.cache.set(s.uuid,n)})}}}),null}static async getOrLoadTexture(e,t,i,n,r,s){let a=r.uuid,c=na.cache.get(a);if(c){Ve&&console.log(a,c.uri,c.guid);let u=Ii(t,c.uri);if(u.endsWith(".glb")||u.endsWith(".gltf")){if(!c.guid)return console.warn("missing pointer for glb/gltf texture",c),null;let l=u+"_"+c.guid;if(this.resolved[l])return Ve&&console.log("Texture has already been loaded: "+l,i.name,n,r.name),this.resolved[l];let d=this.onProgressiveLoadStart(e,t,u,i,n);try{if(this.currentlyLoading[l]!==void 0)return Ve&&console.log("Already loading:",i.name+"."+n,l),await this.currentlyLoading[l];let h=new Promise(async(E,_)=>{let x=new qy;wn(x,e),Ve&&console.log("Load "+u,i.name,n,c.guid),Ve&&await _o(Math.random()*1e3);let m=await x.loadAsync(u),f=m.parser;Ve&&console.log("Loading finished "+u,i.name,n,c.guid);let p=-1,b=!1;for(let C of m.parser.json.textures)if(p++,C?.extensions){let T=C?.extensions[bd];if(T?.guid&&T.guid===c.guid){b=!0;break}}if(!b)return E(null);let w=await f.getDependency("texture",p);w.encoding=r.encoding,w&&(w.guid=c.guid),this.resolved[l]=w,Ve&&console.log(i.name,n,'change "'+r.name+'" \u2192 "'+w.name+'"',u,p,w,i,l),E(w)});return this.currentlyLoading[l]=h,await h}finally{delete this.currentlyLoading[l],this.onProgressiveLoadEnd(d)}}else{let l=this.onProgressiveLoadStart(e,t,u,i,n);try{Ve&&console.log("Load texture from uri: "+u);let h=await new Qy().loadAsync(u);return h?(h.guid=c.guid,h.flipY=!1,h.needsUpdate=!0,h.encoding=r.encoding,Ve&&console.log(c,h)):Ve&&console.warn("failed loading",u),h}finally{this.onProgressiveLoadEnd(l)}}}else Ve&&console.warn("unknown uuid",r.name,r.uuid,r);return null}static beginListenStart(e,t){this._progressiveEventListeners.has(e)||this._progressiveEventListeners.set(e,new Xl),this._progressiveEventListeners.get(e).start.push(t)}static stopListenStart(e,t){if(!this._progressiveEventListeners.has(e))return;let i=this._progressiveEventListeners.get(e).start,n=i.indexOf(t);n>=0&&i.splice(n,1)}static beginListenEnd(e,t){this._progressiveEventListeners.has(e)||this._progressiveEventListeners.set(e,new Xl),this._progressiveEventListeners.get(e).end.push(t)}static stopListenEnd(e,t){if(!this._progressiveEventListeners.has(e))return;let i=this._progressiveEventListeners.get(e).end,n=i.indexOf(t);n>=0&&i.splice(n,1)}static onProgressiveLoadStart(e,t,i,n,r){this._currentProgressiveLoadingInfo.has(e)||this._currentProgressiveLoadingInfo.set(e,[]);let s=new _d(e,t,i,n,r),a=this._currentProgressiveLoadingInfo.get(e),c=this._progressiveEventListeners.get(e);return c&&c.onStart(s),a.push(s),s}static onProgressiveLoadEnd(e){if(!e)return;let t=e.context;if(!this._currentProgressiveLoadingInfo.has(t))return;let i=this._currentProgressiveLoadingInfo.get(t),n=i.indexOf(e);if(n<0)return;i.splice(n,1);let r=this._progressiveEventListeners.get(t);r&&r.onEnd(e)}},fi=na;I(fi,"cache",new Map),I(fi,"resolved",{}),I(fi,"currentlyLoading",{}),I(fi,"_progressiveEventListeners",new Map),I(fi,"_currentProgressiveLoadingInfo",new Map);var _d=class{context;source;uri;material;slot;constructor(e,t,i,n,r){this.context=e,this.source=t,this.uri=i,this.material=n,this.slot=r}},Xl=class{start=[];end=[];onStart(e){for(let t of this.start)t(e)}onEnd(e){for(let t of this.end)t(e)}};function wd(o){let e=new Vo;return o.register(t=>(e.parser=t,e)),e}var xd=class{resolvePath(e){return e.includes("/extensions/builtin_components/")?e.replace("/extensions/builtin_components/","/userData/components/"):e.includes("extensions/builtin_components/")?e.replace("extensions/builtin_components/","/userData/components/"):e}};function cm(o,e,t){o.register(n=>new Wl(n)),o.register(n=>new Ua(n)),o.register(n=>new Pl(n,e.lightmaps,t)),o.register(n=>new Nl(n,t,e)),o.register(n=>new Gl(n,t)),o.register(n=>new Nr(n,t)),o.register(n=>new fi(n,t,e)),o.register(n=>new zl(n));let i=o.setAnimationPointerResolver;typeof i=="function"&&i.bind(o)(new xd)}var Gh={};rp(Gh,{AlignmentConstraint:()=>ir,Animation:()=>rt,AnimationCurve:()=>mi,AnimationExtension:()=>nr,AnimationTrackHandler:()=>rr,Animator:()=>Ee,AnimatorController:()=>hi,AttachedObject:()=>vt,AudioListener:()=>gi,AudioSource:()=>oe,AudioTrackHandler:()=>or,AvatarBlink_Simple:()=>Qi,AvatarEyeLook_Rotation:()=>qi,AvatarLoader:()=>sr,AvatarMarker:()=>le,AvatarModel:()=>Jr,Avatar_Brain_LookAt:()=>Pn,Avatar_MouthShapes:()=>dr,Avatar_MustacheShake:()=>is,Avatar_POI:()=>ve,AxesHelper:()=>In,BaseUIComponent:()=>ze,BasicIKConstraint:()=>ns,BoxCollider:()=>fr,BoxGizmo:()=>yi,BoxHelperComponent:()=>We,Button:()=>qt,CallInfo:()=>bi,Camera:()=>Z,Canvas:()=>Ne,CanvasGroup:()=>jn,CapsuleCollider:()=>Xt,CharacterController:()=>Yi,CharacterControllerInput:()=>Ci,Collider:()=>Ot,ColorAdjustments:()=>br,ColorBySpeedModule:()=>Ti,ColorOverLifetimeModule:()=>Hn,ControlTrackHandler:()=>Sn,Deletable:()=>us,DeleteBox:()=>oo,DeviceFlag:()=>so,DragControls:()=>Ji,DropListener:()=>vr,Duplicatable:()=>Zi,EmissionModule:()=>xt,EventList:()=>de,EventListEvent:()=>qr,EventSystem:()=>Ke,EventTrigger:()=>ao,FieldWithDefault:()=>hs,FixedJoint:()=>fs,FlyControls:()=>ms,GltfExport:()=>$t,GltfExportBox:()=>gs,Gradient:()=>Ri,Graphic:()=>_t,GraphicRaycaster:()=>bs,GridHelper:()=>Gn,GridLayoutGroup:()=>_s,GroundProjectedEnv:()=>tn,HingeJoint:()=>yr,HorizontalLayoutGroup:()=>ys,Image:()=>Dn,InheritVelocityModule:()=>Jt,InputField:()=>kt,Interactable:()=>Vt,Keyboard:()=>xs,LODGroup:()=>_r,LODModel:()=>nn,LayoutGroup:()=>Vn,Light:()=>Qe,LimitVelocityOverLifetimeModule:()=>ue,LogStats:()=>Es,LookAtConstraint:()=>xn,MainModule:()=>ye,MaskableGraphic:()=>An,MeshCollider:()=>$r,MeshRenderer:()=>lo,MinMaxCurve:()=>U,MinMaxGradient:()=>Me,NestedGltf:()=>po,Networking:()=>Si,NoiseModule:()=>K,ObjectRaycaster:()=>uo,OffsetConstraint:()=>rn,OrbitControls:()=>nt,ParticleBurst:()=>Fn,ParticleSubEmitter:()=>xr,ParticleSystem:()=>be,ParticleSystemRenderer:()=>on,PlayableDirector:()=>Tn,PlayerColor:()=>Pi,PointerEventData:()=>_i,RGBAColor:()=>Q,RawImage:()=>io,Raycaster:()=>co,Rect:()=>to,RectTransform:()=>yt,ReflectionProbe:()=>Zt,RegisteredAnimationInfo:()=>Xr,RemoteSkybox:()=>Oi,Renderer:()=>ae,RendererLightmap:()=>Un,Rigidbody:()=>J,RotationBySpeedModule:()=>Xe,RotationOverLifetimeModule:()=>Je,ScreenCapture:()=>Cr,ShadowCatcher:()=>Tr,ShapeModule:()=>ie,SignalAsset:()=>Yr,SignalReceiver:()=>Cn,SignalReceiverEvent:()=>Kr,SignalTrackHandler:()=>Rn,Size:()=>os,SizeBySpeedModule:()=>ke,SizeOverLifetimeModule:()=>Kt,SkinnedMeshRenderer:()=>ps,SmoothFollow:()=>Mt,SpatialHtml:()=>Ss,SpatialTrigger:()=>zn,SpatialTriggerReceiver:()=>It,SpectatorCamera:()=>Ps,SphereCollider:()=>pr,Sprite:()=>ei,SpriteRenderer:()=>sn,SpriteSheet:()=>an,SubEmitterSystem:()=>wr,SyncedCamera:()=>Sr,SyncedRoom:()=>ki,SyncedTransform:()=>Pt,TeleportTarget:()=>Zr,TestRunner:()=>ks,TestSimulateUserData:()=>Ms,Text:()=>Ie,TextureSheetAnimationModule:()=>_e,ToneMapping:()=>gr,TrailModule:()=>ee,TransformData:()=>Qr,TransformGizmo:()=>mo,UIRaycastUtils:()=>wi,UIRootComponent:()=>Mn,USDZExporter:()=>Pr,UsageMarker:()=>zt,VRUserState:()=>Nt,VelocityOverLifetimeModule:()=>He,VerticalLayoutGroup:()=>vs,VideoPlayer:()=>Re,Voip:()=>ot,Volume:()=>ro,VolumeComponent:()=>Ki,VolumeParameter:()=>ls,VolumeProfile:()=>mr,WebAR:()=>ur,WebARSessionRoot:()=>gt,WebXR:()=>V,WebXRAvatar:()=>Gt,WebXRController:()=>se,WebXRSync:()=>kn,XRFlag:()=>Ce,XRGrabModel:()=>go,XRGrabRendering:()=>Is,XRRig:()=>cr,XRState:()=>St,__Ignore:()=>Ra});import{Vector3 as Yy}from"three";var ir=class extends M{from;to;width=0;centered=!0;_centerPos;awake(){this._centerPos=new Yy}update(){if(!this.from||!this.to)return;let e=B(this.from).clone(),t=B(this.to).clone(),i=e.distanceTo(t);this._centerPos.copy(e),this._centerPos.add(t),this._centerPos.multiplyScalar(.5),te(this.gameObject,this.centered?this._centerPos:e),this.gameObject.lookAt(B(this.to).clone()),this.gameObject.scale.set(this.width,this.width,i)}};v([y(R)],ir.prototype,"from",2),v([y(R)],ir.prototype,"to",2);var Vi=class{time;value;inTangent;inWeight;outTangent;outWeight;weightedMode};v([y()],Vi.prototype,"time",2),v([y()],Vi.prototype,"value",2),v([y()],Vi.prototype,"inTangent",2),v([y()],Vi.prototype,"inWeight",2),v([y()],Vi.prototype,"outTangent",2),v([y()],Vi.prototype,"outWeight",2),v([y()],Vi.prototype,"weightedMode",2);var mi=class{keys;get duration(){return!this.keys||this.keys.length==0?0:this.keys[this.keys.length-1].time}evaluate(e){if(!this.keys||this.keys.length==0)return 0;if(this.keys[0].time>=e)return this.keys[0].value;for(let t=0;t<this.keys.length;t++){let i=this.keys[t];if(i.time<=e)if(t+1<this.keys.length){let r=this.keys[t+1];if(r.time<e)continue;let s=H.remap(e,i.time,r.time,0,1);return H.lerp(i.value,r.value,s)}else return i.value}return this.keys[this.keys.length-1].value}};v([y(Vi)],mi.prototype,"keys",2);import{Matrix4 as Ky,Vector3 as um,Quaternion as Jy}from"three";import{buildMatrix as Zy}from"three/examples/jsm/exporters/USDZExporter.js";var Wo=P("debugusdzanimation"),Xr=class{get start(){return this.ext.getStartTime01(this.root,this.clip)}get duration(){return this.clip.duration}ext;root;clip;constructor(e,t,i){this.ext=e,this.root=t,this.clip=i}},Qr=class{clip;pos;rot;scale;get frameRate(){return 60}ext;root;target;constructor(e,t,i,n){this.ext=e,this.root=t,this.target=i,this.clip=n}addTrack(e){e.name.endsWith("position")&&(this.pos=e),e.name.endsWith("quaternion")&&(this.rot=e),e.name.endsWith("scale")&&(this.scale=e)}getFrames(){return Math.max(this.pos?.times?.length??0,this.rot?.times?.length??0,this.scale?.times?.length??0)}getDuration(){let e=this.pos?.times??this.rot?.times??this.scale?.times;return e?e[e.length-1]:0}getStartTime(e){let t=0;for(let i=0;i<e.length;i++){let n=e[i];if(n===this)return t;t+=n.getDuration()}return t}},nr=class{get extensionName(){return"animation"}dict=new Map;rootTargetMap=new Map;getStartTime01(e,t){let i=this.rootTargetMap.get(e);if(!i)return 1/0;let n=-1;for(let r of i){let s=this.dict.get(r),a=0;if(s?.length){for(let c of s){if(c.clip===t)break;a+=c.getDuration()}n=Math.max(n,a)}else console.warn("No animation found on root",e,t,s)}return n}registerAnimation(e,t){if(!t||!e)return null;this.rootTargetMap.has(e)||this.rootTargetMap.set(e,[]);for(let n of t.tracks){let r=n.name.split(".")[2],s=e.getObjectByName(r);if(!s){console.warn("no object found for track",n.name,"using "+e.name+" instead");continue}this.dict.has(s)||this.dict.set(s,[]);let a=this.dict.get(s);if(!a)continue;let c=a.find(l=>l.clip===t);c||(c=new Qr(this,e,s,t),a.push(c)),c.addTrack(n);let u=this.rootTargetMap.get(e);u?.includes(s)||u?.push(s)}return new Xr(this,e,t)}onAfterHierarchy(e){Wo&&console.log(this.dict)}serializers=[];onAfterBuildDocument(e){for(let t of this.serializers){let i=t.model?.parent,n=i?.isDynamic===!0;Wo&&console.log(n,t.model?.parent),n&&t.registerCallback(i)}}onExportObject(e,t,i){R.foreachComponent(e,r=>{let s=r;typeof s.createAnimation=="function"&&s.createAnimation(this,t,i)},!1);let n=new Ed(e,this.dict);this.serializers.push(n),n.registerCallback(t)}},Ed=class{object;dict;model;callback;constructor(e,t){this.object=e,this.dict=t}registerCallback(e){this.model&&this.callback&&this.model.removeEventListener("serialize",this.callback),this.callback||(this.callback=this.onSerialize.bind(this)),Wo&&console.log("REPARENT",e),this.model=e,this.model.addEventListener("serialize",this.callback)}onSerialize(e,t){Wo&&console.log("SERIALIZE",this.model.name,this.object.type);let i=this.object,n=this.dict.get(i);if(!n)return;let r=new Ky,s=new um,a=new Jy,c=new um(1,1,1);e.appendLine("matrix4d xformOp:transform.timeSamples = {"),e.indent++;for(let u of n){let l=u.pos?.times;if((!l||u.rot&&u.rot.times?.length>l?.length)&&(l=u.rot?.times),(!l||u.scale&&u.scale.times?.length>l?.length)&&(l=u.scale?.times),!l){console.error("got an animated object but no time values??",i,u);continue}let d=u.getStartTime(n);Wo&&e.appendLine(u.clip.name+": start="+d.toFixed(3)+", length="+u.getDuration().toFixed(3)+", frames="+u.getFrames());let h=u.pos?.createInterpolant(),g=u.rot?.createInterpolant(),E=u.scale?.createInterpolant();h||s.set(i.position.x,i.position.y,i.position.z),g||a.set(i.quaternion.x,i.quaternion.y,i.quaternion.z,i.quaternion.w),E||c.set(i.scale.x,i.scale.y,i.scale.z);for(let _=0;_<l.length;_++){let x=l[_];if(h){let f=h.evaluate(x);s.set(f[0],f[1],f[2])}if(g){let f=g.evaluate(x);a.set(f[0],f[1],f[2],f[3])}if(E){let f=E.evaluate(x);f.set(f[0],f[1],f[2])}r.compose(s,a,c);let m=`${(d+x)*u.frameRate}: ${Zy(r)},`;Wo&&(m="#"+_+" "+m),e.appendLine(m)}}e.indent--,e.appendLine("}")}};import*as fm from"three";import*as dm from"three";import*as ra from"three";import{PositionalAudioHelper as $y}from"three/examples/jsm/helpers/PositionalAudioHelper.js";var ft=P("debugaudio");var De=class extends M{static get userInteractionRegistered(){return De._didCallBeginWaitForUserInteraction||(De._didCallBeginWaitForUserInteraction=!0,De._beginWaitForUserInteraction()),De._userInteractionRegistered}static registerWaitForAllowAudio(e){if(e!==null){if(this._userInteractionRegistered){e();return}this.callbacks.indexOf(e)===-1&&this.callbacks.push(e),De._didCallBeginWaitForUserInteraction||(De._didCallBeginWaitForUserInteraction=!0,De._beginWaitForUserInteraction())}}static _beginWaitForUserInteraction(e=null){if(this._userInteractionRegistered){e&&e();return}e!==null&&this.registerWaitForAllowAudio(e);let i=(()=>{if(i!=null&&!De._userInteractionRegistered){De._userInteractionRegistered=!0,console.log("registered interaction, can play audio now"),document.removeEventListener("pointerdown",i),document.removeEventListener("click",i),document.removeEventListener("dragstart",i),document.removeEventListener("touchstart",i);for(let n of this.callbacks)n();this.callbacks.length=0}}).bind(this);document.addEventListener("pointerdown",i),document.addEventListener("click",i),document.addEventListener("dragstart",i),document.addEventListener("touchstart",i)}clip="";playOnAwake=!1;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)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&(ft&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}_volume=1;rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;get Sound(){if(!this.sound&&De._userInteractionRegistered){let e=R.getComponent(this.context.mainCamera,gi)??R.findObjectOfType(gi,this.context);e?.listener&&(this.sound=new ra.PositionalAudio(e.listener),this.gameObject.add(this.sound))}return this.sound}get ShouldPlay(){return this.shouldPlay}_focusCallback;awake(){this.audioLoader=new ra.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),window.addEventListener("visibilitychange",e=>{switch(document.visibilityState){case"hidden":this.wasPlaying=this.isPlaying,this.pause();break;case"visible":this.wasPlaying&&this.play();break}}),this._focusCallback=()=>{this.enabled&&this.playOnAwake&&!this.isPlaying&&De._userInteractionRegistered&&this.play()},this.context.application.addEventListener("application-visible",this._focusCallback)}onDestroy(){this.context.application.removeEventListener("application-visible",this._focusCallback)}onEnable(){De._userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():De._beginWaitForUserInteraction(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.loadAndPlay(this.clip)})}onDisable(){this.stop()}lerp=(e,t,i)=>e*(1-i)+t*i;onLoaded(e){ft&&console.log("audio buffer loaded"),De.registerWaitForAllowAudio(()=>{ft&&console.log("finished loading",e);let t=this.Sound;if(!t){console.warn("Failed getting sound",this.name);return}t.isPlaying&&t.stop(),t.setBuffer(e),t.loop=this._loop,t.setVolume(this.volume),t.autoplay=this.shouldPlay,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),ft&&console.log(this.name,this.shouldPlay,De.userInteractionRegistered,this),this.shouldPlay&&De._userInteractionRegistered&&this.play()})}applySpatialDistanceSettings(){let e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;let t=this.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(ft&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:break}this.spatialBlend>0?ft&&!this.helper&&(this.helper=new $y(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}loadAndPlay(e){if(e&&(this.clip=e),this.clip&&(ft&&console.log(this.clip),this.clip.endsWith(".mp3")||this.clip.endsWith(".wav"))){if(this.audioLoader||(this.audioLoader=new ra.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===this.clip){ft&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=this.clip,ft&&console.log("load audio",this.clip),this.audioLoader.load(this.clip,this.onLoaded.bind(this),()=>{},console.error)}}play(e=void 0){if(!this.audioLoader||!this.sound||e&&e!==this.clip){this.loadAndPlay(e);return}this.shouldPlay=!0,this._hasEnded=!1,ft&&console.log("play",this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying&&this.sound.play()}pause(){ft&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,this.sound.pause())}stop(){ft&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,ft&&console.log(this._lastContextTime),this.sound.stop())}_lastContextTime=0;get isPlaying(){return this.sound?.isPlaying??!1}set isPlaying(e){}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;let t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}_hasEnded=!0;_needUpdateSpatialDistanceSettings=!1;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,ft&&console.log("Audio clip ended",this.clip),this.sound.dispatchEvent({type:"ended",target:this}))}},oe=De;I(oe,"_didCallBeginWaitForUserInteraction",!1),I(oe,"callbacks",[]),I(oe,"_userInteractionRegistered",!1),v([y()],oe.prototype,"clip",2),v([y()],oe.prototype,"playOnAwake",2),v([y()],oe.prototype,"loop",1),v([y()],oe.prototype,"spatialBlend",1),v([y()],oe.prototype,"minDistance",1),v([y()],oe.prototype,"maxDistance",1),v([y()],oe.prototype,"volume",1),v([y()],oe.prototype,"rollOffMode",2);var gi=class extends M{get listener(){return this._listener==null&&(this._listener=new dm.AudioListener),this._listener}_listener=null;awake(){oe.registerWaitForAllowAudio(()=>{let e=this.listener;if(e==null||e.parent)return;let t=R.getComponentInParent(this.gameObject,Z);t?t.cam.add(e):this.gameObject.add(e)})}};var bi=class{method;enabled;constructor(e,t){this.method=e,this.enabled=t!==void 0?t:!0}invoke(...e){if(this.enabled!==!1){if(!this.method){console.warn("No function. Please check you assigned a method to invoke on export",this);return}this.method(...e)}}},e_=o=>/^[A-Z]*$/.test(o),qr=class extends Event{args},de=class{target;key;setEventTarget(e,t){if(this.key=e,this.target=t,this.key!==void 0){let i="",n=!1;for(let r of this.key)n&&e_(r)&&(i+="-"),n=!0,i+=r.toLowerCase();this.key=i}}_isInvoking=!1;methods=[];constructor(e){this.methods=e??[]}invoke(...e){if(this._isInvoking){console.warn("Circular event invocation detected. Please check your event listeners for circular references.",this);return}this._isInvoking=!0;try{for(let t of this.methods)t.invoke(...e);if(typeof this.target=="object"&&typeof this.key=="string"){let t=this.target.dispatchEvent;if(typeof t=="function"){let i=new qr(this.key);i.args=e,t.call(this.target,i)}}}finally{this._isInvoking=!1}}addEventListener(e){return this.methods.push(new bi(e,!0)),e}removeEventListener(e){if(!!e)for(let t=this.methods.length-1;t>=0;t--)this.methods[t].method===e&&(this.methods[t].enabled=!1,this.methods.splice(t,1))}removeAllEventListeners(){this.methods.length=0}};var Yr=class{guid},Kr=class{signal;reaction;$serializedTypes={signal:Yr,reaction:de}},Cn=class extends M{events;start(){console.log(this)}invoke(e){if(!this.events||!Array.isArray(this.events))return;let t=typeof e=="object"?e.guid:e;for(let i of this.events)if(i.signal.guid===t)try{if(i.reaction){if(!i.reaction.invoke){console.warn("Missing invoke - possibly a serialization error",i,this);continue}}else{console.warn("Missing reaction for signal",i,this);continue}i.reaction.invoke()}catch(n){console.error(n)}}};v([y(Kr)],Cn.prototype,"events",2);var pm=P("debugtimeline");var Ql=class extends M{static registerCreateTrack(e,t){this.createTrackFunctions[e]=t}playableAsset;playOnAwake;extrapolationMode=1;get isPlaying(){return this._isPlaying}get isPaused(){return this._isPaused}get time(){return this._time}set time(e){this._time=e}get duration(){return this._duration}set duration(e){this._duration=e}get weight(){return this._weight}set weight(e){this._weight=e}_visibilityChangeEvt;_clonedPlayableAsset=!1;awake(){pm&&console.log(this,this.playableAsset?.tracks),this.rebuildGraph(),this.isValid()||console.warn("PlayableDirector is not valid",this.playableAsset,this.playableAsset?.tracks,Array.isArray(this.playableAsset?.tracks),this)}onEnable(){for(let e of this._audioTracks)e.onEnable?.();for(let e of this._customTracks)e.onEnable?.();this.playOnAwake&&this.play(),this._visibilityChangeEvt||(this._visibilityChangeEvt=()=>{switch(document.visibilityState){case"hidden":this.setAudioTracksAllowPlaying(!1);break;case"visible":this.setAudioTracksAllowPlaying(!0);break}}),window.addEventListener("visibilitychange",this._visibilityChangeEvt)}onDisable(){this.stop();for(let e of this._audioTracks)e.onDisable?.();for(let e of this._customTracks)e.onDisable?.();this._visibilityChangeEvt&&window.removeEventListener("visibilitychange",this._visibilityChangeEvt)}onDestroy(){for(let e of this._audioTracks)e.onDestroy?.()}rebuildGraph(){!this.isValid()||(this.resolveBindings(),this.updateTimelineDuration(),this.setupAndCreateTrackHandlers())}play(){!this.isValid()||(this._isPaused=!1,!this._isPlaying&&(this._isPlaying=!0,this._internalUpdateRoutine=this.startCoroutine(this.internalUpdate())))}pause(){this._isPaused=!0}stop(){this._isPlaying&&(this._time=0,this._isPlaying=!1,this._isPaused=!1,this.evaluate()),this._isPlaying=!1,this._isPaused=!1,this._internalUpdateRoutine&&this.stopCoroutine(this._internalUpdateRoutine),this._internalUpdateRoutine=null}evaluate(){if(!this.isValid())return;let e=this._time;switch(this.extrapolationMode){case 0:e=Math.min(e,this._duration);break;case 1:e%=this._duration;break;case 2:if(e>this._duration){this.stop();return}break}this.internalEvaluate(e)}isValid(){return this.playableAsset&&this.playableAsset.tracks&&Array.isArray(this.playableAsset.tracks)}*forEachTrack(){for(let e of this._allTracks)for(let t of e)yield t}get audioTracks(){return this._audioTracks}_guidsMap;resolveGuids(e){this._guidsMap=e}_isPlaying=!1;_internalUpdateRoutine;_isPaused=!1;_time=0;_duration=0;_weight=1;_animationTracks=[];_audioTracks=[];_signalTracks=[];_controlTracks=[];_customTracks=[];_allTracks=[this._animationTracks,this._audioTracks,this._signalTracks,this._controlTracks,this._customTracks];*internalUpdate(){for(;this._isPlaying&&this.activeAndEnabled;)!this._isPaused&&this._isPlaying&&(this._time+=this.context.time.deltaTime,this.evaluate()),yield}internalEvaluate(e){for(let t of this.playableAsset.tracks)if(!t.muted)switch(t.type){case"ActivationTrack":for(let i=0;i<t.outputs.length;i++){let n=t.outputs[i];if(typeof n=="object"){let r=!1;for(let a of t.clips)a.start<=e&&e<=a.end&&(r=!0);let s=n;s.visible!==void 0&&(s.visible=r)}}break}for(let t of this._animationTracks)t.evaluate(e);for(let t of this._audioTracks)t.evaluate(e);for(let t of this._signalTracks)t.evaluate(e);for(let t of this._controlTracks)t.evaluate(e);for(let t of this._customTracks)t.evaluate(e)}resolveBindings(){if(this._clonedPlayableAsset||(this._clonedPlayableAsset=!0,this.playableAsset=Bs(this.playableAsset)),!this.playableAsset||!this.playableAsset.tracks)return;let e=this.findRoot(this.gameObject);for(let t of this.playableAsset.tracks)for(let i=t.outputs.length-1;i>=0;i--){let n=t.outputs[i];if(typeof n=="string"){this._guidsMap&&this._guidsMap[n]&&(n=this._guidsMap[n]);let r=R.findByGuid(n,e);r===null||typeof r!="object"?(t.outputs.splice(i,1),console.warn("Failed to resolve binding",n,t.name,t.type)):(pm&&console.log("Resolved binding",n,"to",r),t.outputs[i]=r,r instanceof Ee)}else if(n===null){if(t.outputs.splice(i,1),Ql.createTrackFunctions[t.type])continue;t.type!=="AudioTrack"&&t.type!=="ControlTrack"&&t.type!=="MarkerTrack"&&console.warn("Missing binding",n,t.name,t.type,this.name,this.playableAsset.name)}}}findRoot(e){return e.parent?this.findRoot(e.parent):e}updateTimelineDuration(){if(this._duration=0,!(!this.playableAsset||!this.playableAsset.tracks)){for(let e of this.playableAsset.tracks)if(e.muted!==!0)for(let t of e.clips)t.end>this._duration&&(this._duration=t.end)}}setupAndCreateTrackHandlers(){if(this._animationTracks.length=0,this._audioTracks.length=0,this._signalTracks.length=0,!this.playableAsset)return;let e=[];for(let t of this.playableAsset.tracks){let i=t.type,n=Ql.createTrackFunctions[i];if(n!=null){let r=n(this,t);if(typeof r.evaluate=="function"){r.director=this,r.track=t,this._customTracks.push(r);continue}}if(t.type==="AnimationTrack"){if(t.clips.length<=0)continue;for(let r=t.outputs.length-1;r>=0;r--){let s=t.outputs[r];typeof s.enabled=="boolean"&&(s.enabled=!1);let a=s?.gameObject?.animations;if(a){let c=new rr;c.trackOffset=t.trackOffset,c.director=this,c.track=t;for(let u=0;u<t.clips.length;u++){let l=t.clips[u],d=l.asset;if(!d){console.error("MISSING anim model?","clip#"+u,l,t,this.playableAsset,this.name);continue}let h=d.clip,g=h;if((typeof g=="string"||typeof g=="number")&&(g=a.find(_=>_.name===h)),!g){console.warn("Could not find animationClip for model",l,t.name,this.name,this.playableAsset?.name);continue}c.mixer||(c.mixer=new fm.AnimationMixer(s.gameObject)),c.clips.push(g),c.mixer.uncacheAction(g),c.createHooks(l.asset,g);let E=c.mixer.clipAction(g);c.actions.push(E),c.models.push(l)}this._animationTracks.push(c)}}}else if(t.type==="AudioTrack"){if(t.clips.length<=0)continue;e.push(t)}else if(t.type==="MarkerTrack"){let r=new Rn;r.director=this,r.track=t;for(let s of t.markers)switch(s.type){case"SignalEmitter":r.models.push(s),r.didTrigger.push(!1);break}if(r!==null&&r.models.length>0){let s=R.getComponent(this.gameObject,Cn);s&&(r.receivers.push(s),this._signalTracks.push(r))}}else if(t.type==="SignalTrack"){let r=new Rn;r.director=this,r.track=t;for(let s of t.markers)r.models.push(s),r.didTrigger.push(!1);for(let s of t.outputs)r.receivers.push(s);this._signalTracks.push(r)}else if(t.type==="ControlTrack"){let r=new Sn;r.director=this,r.track=t;for(let s of t.clips)r.models.push(s);r.resolveSourceObjects(this.context),this._controlTracks.push(r)}}oe.registerWaitForAllowAudio(()=>{let t=R.findObjectOfType(gi,this.context);if(!!t)for(let i of e){let n=new or;n.director=this,n.track=i,n.listener=t.listener;for(let r=0;r<i.clips.length;r++){let s=i.clips[r];n.addModel(s)}this._audioTracks.push(n)}})}setAudioTracksAllowPlaying(e){for(let t of this._audioTracks)t.onAllowAudioChanged(e)}},Tn=Ql;I(Tn,"createTrackFunctions",{});import*as $ from"three";import{Quaternion as i_,Vector3 as n_}from"three";var No=P("debugtimeline"),Xo=class{director;track;get muted(){return this.track.muted}set muted(e){e!==this.track.muted&&(this.track.muted=e,this.onMuteChanged?.call(this))}*forEachClip(e=!1){if(!!this.track?.clips)if(e)for(let t=this.track.clips.length-1;t>=0;t--)yield this.track.clips[t];else for(let t of this.track.clips)yield t}getClipTime(e,t){return t.clipIn+(e-t.start)*t.timeScale}getClipTimeNormalized(e,t){return(e-t.start)/t.duration}evaluateWeight(e,t,i,n=!0){if(t<0||t>=i.length)return 0;let r=i[t];if(n||e>=r.start&&e<=r.end){let s=1,a=!1;if(r.easeInDuration>0){let c=Math.min((e-r.start)/r.easeInDuration,1);s*=c}if(r.easeOutDuration>0&&!a){let c=Math.min((r.end-e)/r.easeOutDuration,1);s*=c}return s}return 0}},Cd=class{clip;rootPositionOffset;rootQuaternionOffset;get hasOffsets(){return this.rootPositionOffset!==void 0||this.rootQuaternionOffset!==void 0}rootStartPosition;rootEndPosition;rootStartQuaternion;rootEndQuaternion;constructor(e){let t=e.getClip();this.clip=t;let i=e.getRoot(),n=i.name+".position",r=i.name+".quaternion";No&&console.log(t.name,t.tracks,n);for(let s of t.tracks)if(!(s.times.length<=0)){if(s.name.endsWith(n))this.rootStartPosition=new $.Vector3().fromArray(s.values,0),this.rootEndPosition=new $.Vector3().fromArray(s.values,s.values.length-3),this.rootPositionOffset=this.rootEndPosition.clone().sub(this.rootStartPosition),No&&console.log(this.rootPositionOffset);else if(s.name.endsWith(r)&&(this.rootStartQuaternion=new $.Quaternion().fromArray(s.values,0),this.rootEndQuaternion=new $.Quaternion().fromArray(s.values,s.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),No)){let a=new $.Euler().setFromQuaternion(this.rootQuaternionOffset);console.log("ROT",a)}}}},rr=class extends Xo{models=[];trackOffset;target;mixer;clips=[];actions=[];_actionOffsets=[];_didBind=!1;createHooks(e,t){if(t.tracks?.length<=0){console.warn("No tracks in AnimationClip",t);return}let i=t.tracks[0].name.split("."),n=i[i.length-2],r=n+".position",s=n+".quaternion",a=!1,c=!1;for(let u of t.tracks)u.name.endsWith(r)?(a=!0,this.createPositionInterpolant(t,e,u)):u.name.endsWith(s)&&(c=!0,this.createRotationInterpolant(t,e,u));if(!a||!c){let u=this.mixer?.getRoot(),l=t.tracks[0],d=l.name.lastIndexOf("."),h=l.name.substring(0,d),g=h.substring(h.lastIndexOf(".")+1),E=u.getObjectByName(g);if(E)if(a){if(!c){let _=t.tracks[0].name.substring(0,d)+".quaternion";No&&console.warn("Create quaternion track",g,E);let x=E.quaternion,m=new $.QuaternionKeyframeTrack(_,[0,t.duration],[x.x,x.y,x.z,x.w,x.x,x.y,x.z,x.w]);t.tracks.push(m),this.createRotationInterpolant(t,e,m)}}else{let _=h+".position";No&&console.warn("Create position track",g,E);let x=E.position,m=new $.VectorKeyframeTrack(_,[0,t.duration],[x.x,x.y,x.z,x.x,x.y,x.z]);t.tracks.push(m),this.createPositionInterpolant(t,e,m)}}}bind(){if(!this._didBind){this._didBind=!0,No&&console.log(this.models),this.mixer?this.target=this.mixer.getRoot():console.warn("No mixer was assigned to animation track");for(let e of this.actions){let t=new Cd(e);this._actionOffsets.push(t)}for(let e of this.models){let t=e.asset,i=t.position,n=t.rotation;i.x!==void 0&&(i.isVector3||(t.position=new n_(i.x,i.y,i.z)),n.isQuaternion||(t.rotation=new i_(n.x,n.y,n.z,n.w)))}this.ensureTrackOffsets()}}ensureTrackOffsets(){if(this.trackOffset){let e=this.trackOffset.position;e&&(e.isVector3||(this.trackOffset.position=new $.Vector3(e.x,e.y,e.z)));let t=this.trackOffset.rotation;t&&(t.isQuaternion||(this.trackOffset.rotation=new $.Quaternion(t.x,t.y,t.z,t.w)))}}_useclipOffsets=!0;_totalOffsetPosition=new $.Vector3;_totalOffsetRotation=new $.Quaternion;_totalOffsetPosition2=new $.Vector3;_totalOffsetRotation2=new $.Quaternion;_summedPos=new $.Vector3;_tempPos=new $.Vector3;_summedRot=new $.Quaternion;_tempRot=new $.Quaternion;evaluate(e){if(this.track.muted||!this.mixer)return;this.bind(),this._totalOffsetPosition.set(0,0,0),this._totalOffsetRotation.set(0,0,0,1),this._totalOffsetPosition2.set(0,0,0),this._totalOffsetRotation2.set(0,0,0,1);let t=0,i=0,n=!1;for(let r=0;r<this.clips.length;r++){let s=this.models[r],a=this.actions[r],c=s.asset;a.weight=0;let u=e>=s.start&&e<=s.end,l=s.postExtrapolationMode,d=u;if(!d&&!n&&s.end<e&&s.postExtrapolationMode!==0){let h=r<this.clips.length-1?this.models[r+1]:null;(!h||h.start>e)&&(d=!0,n=!0)}if(d){let h=1;h*=this.evaluateWeight(e,r,this.models,d);let g=this.getClipTime(e,s),E=0,_=c.duration;if(u){if(c.loop)for(E+=Math.floor(g/(_+1e-6));g>_;)g-=_}else if(!u)switch(l){case 2:g%=_;break;case 3:let f=Math.floor(g/_)%2!==0;g%=_,f&&(g=_-g);break}a.time=g,a.timeScale=0;let x=h*this.director.weight;if(a.weight=x,a.clampWhenFinished=!0,a.isRunning()||a.play(),this._useclipOffsets){let m=t==0?this._totalOffsetPosition:this._totalOffsetPosition2,f=t==0?this._totalOffsetRotation:this._totalOffsetRotation2;t<1&&(i=1-h),t+=1;let p=this._summedPos.set(0,0,0),b=this._tempPos.set(0,0,0),w=this._summedRot.identity(),C=this._tempRot.identity(),T=c.rotation,S=new $.Quaternion;S.slerp(T,h);let A=this._actionOffsets[r];if(A.hasOffsets)for(let D=0;D<E;D++)A.rootPositionOffset?b.copy(A.rootPositionOffset):b.set(0,0,0),b.applyQuaternion(w).applyQuaternion(S),A.rootQuaternionOffset&&(C.copy(A.rootQuaternionOffset),w.multiply(C)),p.add(b);f.multiply(S),f.multiply(w),p.add(c.position),m.add(p)}}}this._useclipOffsets&&(this._totalOffsetPosition.lerp(this._totalOffsetPosition2,i),this._totalOffsetRotation.slerp(this._totalOffsetRotation2,i)),this.mixer.update(e)}createRotationInterpolant(e,t,i){let n=i.createInterpolant.bind(i),r=new $.Quaternion;this.ensureTrackOffsets();let s=this.trackOffset?.rotation;i.createInterpolant=()=>{let a=n(),c=a.evaluate.bind(a);return a.evaluate=u=>{let l=c(u);return r.set(l[0],l[1],l[2],l[3]),r.premultiply(this._totalOffsetRotation),s&&r.premultiply(s),l[0]=r.x,l[1]=r.y,l[2]=r.z,l[3]=r.w,l},a}}createPositionInterpolant(e,t,i){let n=i.createInterpolant.bind(i),r=new $.Vector3;this.ensureTrackOffsets();let s=this.trackOffset?.rotation,a=this.trackOffset?.position,c;i.createInterpolant=()=>{let u=n(),l=u.evaluate.bind(u);return u.evaluate=d=>{let h=l(d);return r.set(h[0],h[1],h[2]),t.removeStartOffset&&(c===void 0?(c=null,c=this._actionOffsets.find(g=>g.clip===e)?.rootStartPosition?.clone()):c?.isVector3&&r.sub(c)),r.applyQuaternion(this._totalOffsetRotation),r.add(this._totalOffsetPosition),s&&r.applyQuaternion(s),a&&(r.x-=a.x,r.y+=a.y,r.z+=a.z),h[0]=r.x,h[1]=r.y,h[2]=r.z,h},u}}},or=class extends Xo{models=[];listener;audio=[];audioContextTimeOffset=[];lastTime=0;getAudioFilePath(e){let t=this.director.sourceId;return Ii(t,e)}onAllowAudioChanged(e){for(let t=0;t<this.models.length;t++){let i=this.models[t];this.audio[t].setVolume(e?i.asset.volume:0)}}addModel(e){let t=this.getAudioFilePath(e.asset.clip),i=new $.Audio(this.listener);i.setVolume(e.asset.volume);let n=new $.AudioLoader;console.log(t,this.director.sourceId),n.load(t,r=>{i.setBuffer(r),i.loop=e.asset.loop,this.audio.push(i),this.models.push(e)})}onDisable(){for(let e of this.audio)e.isPlaying&&e.stop()}onMuteChanged(){if(this.muted)for(let e=0;e<this.audio.length;e++){let t=this.audio[e];t?.isPlaying&&t.stop()}}evaluate(e){if(!this.track.muted){for(let t=0;t<this.models.length;t++){let i=this.models[t],n=this.audio[t];if(e>=i.start&&e<=i.end){if(this.director.isPaused&&(n.isPlaying&&n.stop(),this.lastTime===e))continue;n.isPlaying||(n.offset=i.clipIn+(e-i.start)*i.timeScale,n.play());let r=i.asset.volume;if(i.easeInDuration>0){let s=Math.min((e-i.start)/i.easeInDuration,1);r*=s}if(i.easeOutDuration>0){let s=Math.min((i.end-e)/i.easeOutDuration,1);r*=s}n.setVolume(r*this.director.weight)}else n.isPlaying&&n.stop()}this.lastTime=e}}},Rn=class extends Xo{models=[];didTrigger=[];receivers=[];evaluate(e){if(!(this.receivers.length<=0)&&!this.track.muted)for(let t=0;t<this.models.length;t++){let i=this.models[t],n=this.didTrigger[t],r=i.time-e;if(i.retroActive?r<0:r<0&&Math.abs(r)<.1){if(!n){this.didTrigger[t]=!0;for(let a of this.receivers)!a||a.invoke(i.asset)}}else i.emitOnce||(this.didTrigger[t]=!1)}}},oa=class extends Xo{models=[];timelines=[];resolveSourceObjects(e){for(let t=this.models.length-1;t>=0;t--){let n=this.models[t].asset;if(typeof n.sourceObject=="string"){let r=n.sourceObject;oa.resolved[r]?n.sourceObject=oa.resolved[r]:(n.sourceObject=R.findByGuid(r,e.scene),oa.resolved[r]=n.sourceObject)}if(n.sourceObject){let r=R.getComponent(n.sourceObject,Tn);this.timelines.push(r),r&&n.updateDirector&&(r.playOnAwake=!1)}else{this.models.splice(t,1);continue}}}_previousActiveModel=null;evaluate(e){this._previousActiveModel=null;for(let t=0;t<this.models.length;t++){let i=this.models[t],n=i.asset;if(e>=i.start&&e<=i.end){this._previousActiveModel=i;let r=this.getClipTime(e,i);if(n.controlActivation){let s=n.sourceObject;s.visible=!0}if(n.updateDirector){let s=this.timelines[t];s&&(s.isPlaying&&s.pause(),s.time=r,s.evaluate())}}else{let r=this._previousActiveModel?.asset;if(n.controlActivation){let s=n.sourceObject;r?.sourceObject!==s&&(s.visible=!1)}}}}},Sn=oa;I(Sn,"resolved",{});import{BoxHelper as O_,BufferGeometry as k_,Color as Rm,Euler as M_,Layers as I_,Line as A_,Mesh as D_,MeshBasicMaterial as L_,Quaternion as oc,Ray as j_,SphereGeometry as H_,Vector2 as F_,Vector3 as Ei}from"three";import{OculusHandModel as B_}from"three/examples/jsm/webxr/OculusHandModel.js";import{OculusHandPointerModel as U_}from"three/examples/jsm/webxr/OculusHandPointerModel.js";import{XRControllerModelFactory as G_}from"three/examples/jsm/webxr/XRControllerModelFactory.js";import{GLTFLoader as V_}from"three/examples/jsm/loaders/GLTFLoader.js";import*as bm from"three";import{Quaternion as o_,Vector3 as Yl}from"three";import{GLTFLoader as r_}from"three/examples/jsm/loaders/GLTFLoader.js";import*as ql from"three";var sa=P("debugavatar"),Jr=class{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(r=>r.layers.set(2))}},sr=class{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){let r=new Ue;i=R.instantiate(dn(t,e.scene),r)}}else i=t;if(!i)return null;let n=this.findAvatar(i);return n.isValid?(sa&&console.log("[Custom Avatar] valid config",t,sa?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,sa?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(sa&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){let n=await fetch("./"+t),r=null;if(n.ok){let a=await n.blob();a&&(r=await a.arrayBuffer())}return!r&&(r=await vl(t,t,0,"no url here go away",!0),!r)?null:(await Ye().parseSync(e,r,null,0))?.scene??null}let i=new r_;return wn(i,e),new Promise((n,r)=>{let s=this.avatarRegistryUrl+"/"+t;i.load(s,async a=>{await Ye().createBuiltinComponents(e,s,a,null,void 0),n(a.scene)},a=>{sa&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){let t=e,i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]),r=this.findAvatarPart(i,["left","hand"]),s=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;let c=new ql.Vector3;new ql.Box3().setFromObject(n).getSize(c);let u=Math.max(c.x,c.y,c.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+u+" meters! Should be < 0.3m"),u>.3&&n.scale.multiplyScalar(1/u*.3)}return new Jr(t,n,r,s)}findAvatarPart(e,t){let i=e.name.toLowerCase(),n=!0;for(let r of t){if(!n)break;i.indexOf(r)===-1&&(n=!1)}if(n)return e;if(e.children)for(let r of e.children){let s=this.findAvatarPart(r,t);if(s)return s}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}};var Qo=P("debugflags");var Td=class{Mask=17;Has(e){return(this.Mask&e)!==0}Set(e){Qo&&console.warn("Set XR flag state to",e),this.Mask=e,Ce.Apply()}Enable(e){this.Mask|=e,Ce.Apply()}Disable(e){this.Mask&=~e,Ce.Apply()}Toggle(e){this.Mask^=e,Ce.Apply()}EnableAll(){this.Mask=-1,Ce.Apply()}DisableAll(){this.Mask=0,Ce.Apply()}},St=Td;I(St,"Global",new Td);var zi=class extends M{static Apply(){for(let e of this.registry)e.UpdateVisible(St.Global)}awake(){zi.registry.push(this)}onEnable(){zi.firstApply||(zi.firstApply=!0,zi.Apply())}onDestroy(){let e=zi.registry.indexOf(this);e>=0&&zi.registry.splice(e,1)}visibleIn;get isOn(){return this.gameObject.visible}UpdateVisible(e=null){let t,i=e;i&&typeof i=="number"&&(console.assert(typeof i=="number","XRFlag.UpdateVisible: state must be a number",i),Qo&&console.log(i),zi.buffer.Mask=i,e=zi.buffer);let n=e;if(n?(Qo&&console.warn(this.name,"use passed in mask",n.Mask,this.visibleIn),t=n.Has(this.visibleIn)):(Qo&&console.log(this.name,"use global mask"),St.Global.Has(this.visibleIn)),t!==void 0)if(t)Qo&&console.log(this.name,"is visible",this.gameObject.uuid),R.setActive(this.gameObject,!0);else{if(Qo&&console.log(this.name,"is not visible",this.gameObject.uuid),!this.gameObject.visible)return;this.gameObject.visible=!1}}},Ce=zi;I(Ce,"registry",[]),I(Ce,"firstApply"),I(Ce,"buffer",new St);import{Object3D as Rd}from"three";var ar=P("debugavatar"),vi=class extends M{static getAvatar(e){return e>=0&&e<vi.instances.length?vi.instances[e]:null}static onAvatarMarkerCreated(e){return vi._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return vi._onAvatarMarkerDestroyed.push(e),e}connectionId;avatar;awake(){vi.instances.push(this),ar&&console.log(this);for(let e of vi._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){vi.instances.splice(vi.instances.indexOf(this),1);for(let e of vi._onAvatarMarkerDestroyed)e({avatarMarker:this,gameObject:this.gameObject})}isLocalAvatar(){return this.connectionId===this.context.connection.connectionId}setVisible(e){this.avatar&&("setVisible"in this.avatar?this.avatar.setVisible(e):R.setActive(this.avatar,e))}},le=vi;I(le,"instances",[]),I(le,"_onNewAvatarMarkerAdded",[]),I(le,"_onAvatarMarkerDestroyed",[]);var aa=class{_isVisible=!0;setVisible(e){this._isVisible=e,this.updateVisibility()}get isWebXRAvatar(){return!0}guid;root=null;head=null;handLeft=null;handRight=null;lastUpdate=-1;isLocalAvatar=!1;flags=null;headScale=new Yl(1,1,1);handLeftScale=new Yl(1,1,1);handRightScale=new Yl(1,1,1);webxr;lastAvatarId=null;hasAvatarOverride=!1;context;avatarMarker=null;constructor(e,t,i){this.context=e,this.guid=t,this.webxr=i,this.setupCustomAvatar(this.webxr.defaultAvatar)}updateFlags(){if(!this.flags)return;let e=this.isLocalAvatar?8:16;this.context.isInVR?e|=4:this.context.isInAR?e|=2:e|=1;for(let t of this.flags)t.gameObject.visible=!0,t.UpdateVisible(e)}async setAvatarOverride(e){return this.hasAvatarOverride=e!==null,this.hasAvatarOverride&&this.lastAvatarId!==e&&(this.lastAvatarId=e,e!=null&&e.length>0)?await this.setupCustomAvatar(e):null}_headTarget=new Rd;_handLeftTarget=new Rd;_handRightTarget=new Rd;_canInterpolate=!1;tryUpdate(e,t){if(e.guid===this.guid&&(this.lastAvatarId!==e.avatarId&&e.avatarId&&e.avatarId.length>0&&(this.lastAvatarId=e.avatarId,this.setupCustomAvatar(e.avatarId)),this.lastUpdate=e.time,this.head)){let i=this.webxr.IsInAR?"handheld":"headset",n=this.head;this.context.players.setPlayerView(e.guid,n,i),re.markDirty(this.head),this._canInterpolate=!0;let r=this.isLocalAvatar?this.head:this._headTarget;if(r.position.set(e.position.x,e.position.y,e.position.z),r.quaternion.set(e.rotation.x,e.rotation.y,e.rotation.z,e.rotation.w),r.scale.set(e.scale,e.scale,e.scale),r.scale.multiply(this.headScale),this.handLeft){let s=this.isLocalAvatar?this.handLeft:this._handLeftTarget;s.position.set(e.posLeftHand.x,e.posLeftHand.y,e.posLeftHand.z),s.quaternion.set(e.rotLeftHand._x,e.rotLeftHand._y,e.rotLeftHand._z,e.rotLeftHand._w),s.quaternion.multiply(aa.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handLeftScale),re.markDirty(this.handLeft)}if(this.handRight){let s=this.isLocalAvatar?this.handRight:this._handRightTarget;s.position.set(e.posRightHand.x,e.posRightHand.y,e.posRightHand.z),s.quaternion.set(e.rotRightHand._x,e.rotRightHand._y,e.rotRightHand._z,e.rotRightHand._w),s.quaternion.multiply(aa.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handRightScale),re.markDirty(this.handRight)}}}update(){if(this.isLocalAvatar||!this._canInterpolate)return;let e=this.context.time.deltaTime/.1;this.head&&(this.head.position.lerp(this._headTarget.position,e),this.head.quaternion.slerp(this._headTarget.quaternion,e),this.head.scale.lerp(this._headTarget.scale,e)),this.handLeft&&this._handLeftTarget&&(this.handLeft.position.lerp(this._handLeftTarget.position,e),this.handLeft.quaternion.slerp(this._handLeftTarget.quaternion,e),this.handLeft.scale.lerp(this._handLeftTarget.scale,e)),this.handRight&&this._handRightTarget&&(this.handRight.position.lerp(this._handRightTarget.position,e),this.handRight.quaternion.slerp(this._handRightTarget.quaternion,e),this.handRight.scale.lerp(this._handRightTarget.scale,e))}destroy(){ar&&console.log("Destroy avatar",this.guid),this.root?.removeFromParent(),this.avatarMarker?.destroy(),this.lastAvatarId=null,this.head&&ve.Remove(this.context,this.head)}updateVisibility(){let e=this.root;e&&R.setActive(e,this._isVisible)}async setupCustomAvatar(e){if(ar&&console.log("LOAD",e,this),!e||typeof e=="string"&&e.length<=0)return!1;this.head&&ve.Remove(this.context,this.head);let t=e;if(t?.loadAssetAsync!==void 0){await t.loadAssetAsync();let n=t.asset;R.setActive(n,!1),e=R.instantiate(n),R.setActive(e,!0)}ar&&console.log(e);let i=await aa.loader.getOrCreateNewAvatarInstance(this.context,e);if(ar&&console.log(i,i?.isValid,this.lastAvatarId,e),i?.isValid){if(this.root=i.root,this.root.position.set(0,0,0),this.root.quaternion.set(0,0,0,1),this.root.scale.set(1,1,1),this.avatarMarker=R.addNewComponent(this.root,le),this.avatarMarker.connectionId=this.guid,this.avatarMarker.avatar=this,this.head&&this.head!==i.head&&this.head?.removeFromParent(),this.head=i.head,this.headScale.copy(this.head.scale),this.head&&!this.isLocalAvatar&&ve.Add(this.context,this.head,this.avatarMarker),i.leftHand&&this.handLeft?.removeFromParent(),this.handLeft=i.leftHand??this.handLeft,this.handLeft?this.handLeftScale.copy(this.handLeft.scale):this.handLeftScale.set(1,1,1),i.rigthHand&&this.handRight?.removeFromParent(),this.handRight=i.rigthHand??this.handRight,this.handRight?this.handRightScale.copy(this.handRight.scale):this.handRightScale.set(1,1,1),this.context.scene.add(this.root),this.flags==null&&(this.flags=[]),this.flags.length=0,this.flags.push(...R.getComponentsInChildren(this.root,Ce)),this.flags.length<=0&&this.head){let n=R.addNewComponent(this.head,Ce);n.visibleIn=20,this.flags.push(n),ar&&console.log("Added flag to head: "+n.visibleIn,this.head.name)}return ar&&console.log("[Avatar], is Local? ",this.isLocalAvatar,this.root),this.updateFlags(),this.updateVisibility(),!0}else return ar&&console.warn("build avatar failed"),!1}},Gt=aa;I(Gt,"loader",new sr),I(Gt,"invertRotation",new o_().setFromAxisAngle(new Yl(0,1,0),Math.PI));var ve=class{static Add(e,t,i=null){if(!!t){for(let n of this.Pois)if(n.obj===t)return;this.Pois.push({obj:t,avatar:i}),this.LastChangeTime=e.time.time}}static Remove(e,t){if(!!t){for(let i of this.Pois)if(i.obj===t){this.Pois.splice(this.Pois.indexOf(i),1),this.LastChangeTime=e?.time.time??G.Current?.time.time;return}}}};I(ve,"Pois",[]),I(ve,"LastChangeTime",0);var Sd=class{guid;position=new bm.Vector3},Pn=class extends M{set controlledTarget(e){this.target=e;let t=O.get("MoveRandom");if(t&&this.target){let i=R.getComponent(this.target,t);i&&i.destroy()}}target=null;avatar=null;_model=null;_targetModel=new Sd;_currentTargetObject=null;_lastUpdateTime=0;_lookDuration=0;_lastPoiChangedTime=0;awake(){if(this.avatar=R.getComponentInParent(this.gameObject,le),this.avatar){let e=R.getComponentInParent(this.gameObject,le);this._model=new Jn(this.context.connection,this.guid),e?.isLocalAvatar&&this._model.requestOwnership()}this.context.connection.beginListen("avatar-look-target-changed",e=>{this.target&&e&&e.guid===this.avatar?.guid&&te(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(ve.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=ve.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){let t=B(this._currentTargetObject);te(this.target,t),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(t))}}selectTarget(){if(this.context.time.time-this._lastUpdateTime>this._lookDuration){this._lastUpdateTime=this.context.time.time,this._lookDuration=Math.random()*.5+.2;let t=ve.Pois;if(t.length>0){let i=t[Math.floor(Math.random()*t.length)];if(i&&i.obj){if(i.avatar&&i.avatar===this.avatar)return;this._currentTargetObject=i.obj}}}}};var Vt=class extends M{canGrab=!0;onPointerClick(e){}},zt=class extends M{isUsed=!0;usedBy=null};import*as qo from"three";import{Matrix4 as s_,Vector3 as vm}from"three";var Pd=class{get isDirty(){return this.positionChanged||this.rotationChanged}positionChanged=!1;rotationChanged=!1;position;quaternion;_positionKeys=["x","y","z"];_quaternionKeys=["_x","_y","_z","_w"];reset(e=!1){if(this.positionChanged=!1,this.rotationChanged=!1,this.mute=!1,e){if(this.position)for(let t of this._positionKeys)delete this.position[t];if(this.quaternion)for(let t of this._quaternionKeys)delete this.quaternion[t]}}syncValues(){for(let e of this._positionKeys)this.position[e]=this.obj.position[e];for(let e of this._quaternionKeys)this.quaternion[e]=this.obj.quaternion[e]}mute=!1;applyValues(){if(this.positionChanged&&this.position)for(let e of this._positionKeys){let t=this.position[e];t!==void 0&&(this.obj.position[e]=t)}if(this.rotationChanged&&this.quaternion)for(let e of this._quaternionKeys){let t=this.quaternion[e];t!==void 0&&(this.obj.quaternion[e]=t)}}context;obj;_positionWatch;_rotationWatch;constructor(e,t){this.context=t,this.obj=e}start(e,t){this.reset(),e&&(this._positionWatch||(this._positionWatch=new hn(this.obj.position,["x","y","z"])),this._positionWatch.apply(),this.position={},this._positionWatch.subscribeWrite((r,s)=>{if(this.context.physics.isUpdating||this.mute)return;let a=this.position[s];Math.abs(a-r)<1e-5||(this.position[s]=r,this.positionChanged=!0)})),t&&(this._rotationWatch||(this._rotationWatch=new hn(this.obj.quaternion,["_x","_y","_z","_w"])),this._rotationWatch.apply(),this.quaternion={},this._rotationWatch.subscribeWrite((r,s)=>{if(this.context.physics.isUpdating||this.mute)return;let a=this.quaternion[s];Math.abs(a-r)<1e-5||(this.quaternion[s]=r,this.rotationChanged=!0)}));let i=this.obj.matrixWorld.multiplyMatrices.bind(this.obj.matrixWorld),n=new s_;this.obj.matrixWorld.multiplyMatrices=(r,s)=>(n.equals(r)||(this.positionChanged=!0,this.rotationChanged=!0,n.copy(r)),i(r,s))}stop(){this._positionWatch?.revoke(),this._rotationWatch?.revoke()}},Kl=class extends M{mass=1;useGravity=!0;constraints=0;isKinematic=!1;drag=0;angularDrag=1;detectCollisions=!0;sleepThreshold=.01;collisionDetectionMode=0;get lockPositionX(){return(this.constraints&2)!==0}get lockPositionY(){return(this.constraints&4)!==0}get lockPositionZ(){return(this.constraints&8)!==0}get lockRotationX(){return(this.constraints&16)!==0}get lockRotationY(){return(this.constraints&32)!==0}get lockRotationZ(){return(this.constraints&64)!==0}set lockPositionX(e){e?this.constraints|=2:this.constraints&=-3}set lockPositionY(e){e?this.constraints|=4:this.constraints&=-5}set lockPositionZ(e){e?this.constraints|=8:this.constraints&=-9}set lockRotationX(e){e?this.constraints|=16:this.constraints&=-17}set lockRotationY(e){e?this.constraints|=32:this.constraints&=-33}set lockRotationZ(e){e?this.constraints|=64:this.constraints&=-65}set gravityScale(e){this._gravityScale=e}get gravityScale(){return this._gravityScale}_gravityScale=1;_propertiesChanged=!1;_currentVelocity=new qo.Vector3;_smoothedVelocity=new qo.Vector3;_smoothedVelocityGetter=new qo.Vector3;_lastPosition=new qo.Vector3;_watch;awake(){this._watch=void 0,this._propertiesChanged=!1}onEnable(){this._watch||(this._watch=new Pd(this.gameObject,this.context)),this._watch.start(!0,!0),this.startCoroutine(this.beforePhysics(),2)}onDisable(){this._watch?.stop(),this.context.physics.removeBody(this)}onDestroy(){this.context.physics.removeBody(this)}onValidate(){this._propertiesChanged=!0}*beforePhysics(){for(;;)this._propertiesChanged&&(this._propertiesChanged=!1,this.context.physics.updateProperties(this)),this._watch?.isDirty?(this._watch.mute=!0,this._watch.applyValues(),this.context.physics.updateBody(this,this._watch.positionChanged,this._watch.rotationChanged),this._watch.reset()):this._watch?.syncValues(),this.captureVelocity(),yield}get body(){return this.context.physics.internal_getRigidbody(this)}teleport(e,t=!0){this._watch?.reset(!0),t?this.gameObject.position.set(e.x,e.y,e.z):this.setWorldPosition(e.x,e.y,e.z),this.resetForcesAndTorques(),this.resetVelocities()}resetForces(){this.body?.resetForces(!0)}resetTorques(){this.body?.resetTorques(!0)}resetVelocities(){this.setVelocity(0,0,0),this.setAngularVelocity(0,0,0)}resetForcesAndTorques(){this.resetForces(),this.resetTorques()}wakeUp(){this.body?.wakeUp()}applyForce(e,t){this.body?.addForce(e,!0)}applyImpulse(e){this.body?.applyImpulse(e,!0)}setForce(e,t,i){this.body?.resetForces(!0),this.body?.addForce({x:e,y:t,z:i},!0)}getVelocity(){let e=this.body?.linvel();return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setVelocity(e,t,i){if(e instanceof vm){let n=e;this.body?.setLinvel(n,!0);return}t===void 0||i===void 0||this.body?.setLinvel({x:e,y:t,z:i},!0)}setAngularVelocity(e,t,i){if(e instanceof vm){let n=e;this.body?.setAngvel(n,!0);return}t===void 0||i===void 0||this.body?.setAngvel({x:e,y:t,z:i},!0)}getAngularVelocity(){let e=this.body?.angvel();return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setTorque(e,t,i){this.setAngularVelocity(e,t,i)}get smoothedVelocity(){return this._smoothedVelocityGetter.copy(this._smoothedVelocity),this._smoothedVelocityGetter.multiplyScalar(1/this.context.time.deltaTime)}setBodyFromGameObject(e=null){}captureVelocity(){if(this.body){let e=B(this.gameObject);Kl.tempPosition.copy(e);let t=e.sub(this._lastPosition);this._lastPosition.copy(Kl.tempPosition),this._smoothedVelocity.lerp(t,this.context.time.deltaTime/.1)}}},J=Kl;I(J,"tempPosition",new qo.Vector3),v([ci(),y()],J.prototype,"mass",2),v([ci(),y()],J.prototype,"useGravity",2),v([ci(),y()],J.prototype,"constraints",2),v([ci(),y()],J.prototype,"isKinematic",2),v([ci(),y()],J.prototype,"drag",2),v([ci(),y()],J.prototype,"angularDrag",2),v([ci(),y()],J.prototype,"detectCollisions",2),v([ci(),y()],J.prototype,"sleepThreshold",2),v([ci(),y()],J.prototype,"collisionDetectionMode",2);import*as On from"three";var Te=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}x(){return this.bb.readFloat32(this.bb_pos)}y(){return this.bb.readFloat32(this.bb_pos+4)}z(){return this.bb.readFloat32(this.bb_pos+8)}static sizeOf(){return 12}static createVec3(e,t,i,n){return e.prep(4,12),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}};var Yo=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}position(e){return(e||new Te).__init(this.bb_pos,this.bb)}rotation(e){return(e||new Te).__init(this.bb_pos+12,this.bb)}scale(e){return(e||new Te).__init(this.bb_pos+24,this.bb)}static sizeOf(){return 36}static createTransform(e,t,i,n,r,s,a,c,u,l){return e.prep(4,36),e.prep(4,12),e.writeFloat32(l),e.writeFloat32(u),e.writeFloat32(c),e.prep(4,12),e.writeFloat32(a),e.writeFloat32(s),e.writeFloat32(r),e.prep(4,12),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}};var Wt=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSyncedTransformModel(e,t){return(t||new Wt).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSyncedTransformModel(e,t){return e.setPosition(e.position()+4),(t||new Wt).__init(e.readInt32(e.position())+e.position(),e)}guid(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}fast(){let e=this.bb.__offset(this.bb_pos,6);return e?!!this.bb.readInt8(this.bb_pos+e):!1}transform(e){let t=this.bb.__offset(this.bb_pos,8);return t?(e||new Yo).__init(this.bb_pos+t,this.bb):null}dontSave(){let e=this.bb.__offset(this.bb_pos,10);return e?!!this.bb.readInt8(this.bb_pos+e):!1}static startSyncedTransformModel(e){e.startObject(4)}static addGuid(e,t){e.addFieldOffset(0,t,0)}static addFast(e,t){e.addFieldInt8(1,+t,0)}static addTransform(e,t){e.addFieldStruct(2,t,0)}static addDontSave(e,t){e.addFieldInt8(3,+t,0)}static endSyncedTransformModel(e){return e.endObject()}static finishSyncedTransformModelBuffer(e,t){e.finish(t)}static finishSizePrefixedSyncedTransformModelBuffer(e,t){e.finish(t,void 0,!0)}};var lr=P("debugsync"),Ko="STRS";Ho(Ko,Wt.getRootAsSyncedTransformModel);var Wi=new Ct;function Od(o,e,t=!0){Wi.clear();let i=Wi.createString(o);Wt.startSyncedTransformModel(Wi),Wt.addGuid(Wi,i),Wt.addFast(Wi,t);let n=e.worldPosition,r=e.worldEuler,s=e.gameObject.scale;Wt.addTransform(Wi,Yo.createTransform(Wi,n.x,n.y,n.z,r.x,r.y,r.z,s.x,s.y,s.z));let a=Wt.endSyncedTransformModel(Wi);return Wi.finish(a,Ko),Wi.asUint8Array()}var Pt=class extends M{overridePhysics=!0;interpolatePosition=!0;interpolateRotation=!0;fastMode=!1;syncDestroy=!1;_model=null;_needsUpdate=!0;rb=null;_wasKinematic=!1;_receivedDataBefore=!1;_targetPosition;_targetRotation;_receivedFastUpdate=!1;_shouldRequestOwnership=!1;requestOwnership(){lr&&console.log("Request ownership"),this._model?this._model.requestOwnership():(this._shouldRequestOwnership=!0,this._needsUpdate=!0)}hasOwnership(){return this._model?.hasOwnership??void 0}isOwned(){return this._model?.isOwned}joinedRoomCallback=null;receivedDataCallback=null;awake(){lr&&console.log("new instance",this.guid,this),this._receivedDataBefore=!1,this._targetPosition=new On.Vector3,this._targetRotation=new On.Quaternion,this.lastWorldPos=new On.Vector3,this.lastWorldRotation=new On.Quaternion,this.rb=R.getComponentInChildren(this.gameObject,J),this.rb&&(this._wasKinematic=this.rb.isKinematic),this.receivedUpdate=!0,this._model=new Jn(this.context.connection,this.guid),this.context.connection.isConnected&&this.tryGetLastState(),this.joinedRoomCallback=this.tryGetLastState.bind(this),this.context.connection.beginListen("joined-room",this.joinedRoomCallback),this.receivedDataCallback=this.onReceivedData.bind(this),this.context.connection.beginListenBinrary(Ko,this.receivedDataCallback)}onDestroy(){this.syncDestroy&&Vp(this.guid,this.context.connection),this._model=null,this.context.connection.stopListening("joined-room",this.joinedRoomCallback),this.context.connection.stopListenBinary(Ko,this.receivedDataCallback)}tryGetLastState(){let e=this.context.connection.tryGetState(this.guid);e&&this.onReceivedData(e)}tempEuler=new On.Euler;onReceivedData(e){if(!this.destroyed&&typeof e.guid=="function"&&e.guid()===this.guid){lr&&console.log("new data",this.context.connection.connectionId,this.context.time.frameCount,this.guid,e),this.receivedUpdate=!0,this._receivedFastUpdate=e.fast();let t=e.transform();if(t){re.markDirty(this.gameObject,!0);let i=t.position();i&&(this.interpolatePosition&&this._targetPosition?.set(i.x(),i.y(),i.z()),(!this.interpolatePosition||!this._receivedDataBefore)&&this.setWorldPosition(i.x(),i.y(),i.z()));let n=t.rotation();n&&(this.tempEuler.set(n.x(),n.y(),n.z()),this.interpolateRotation&&this._targetRotation.setFromEuler(this.tempEuler),(!this.interpolateRotation||!this._receivedDataBefore)&&kp(this.gameObject,this.tempEuler))}this._receivedDataBefore=!0}}onEnable(){this.lastWorldPos.copy(this.worldPosition),this.lastWorldRotation.copy(this.worldQuaternion),this._needsUpdate=!0,this._model&&this._model.updateIsOwned()}onDisable(){this._model&&this._model.freeOwnership()}receivedUpdate=!1;lastWorldPos;lastWorldRotation;onBeforeRender(){if(!this.activeAndEnabled||!this.context.connection.isConnected)return;if(!this.context.connection.isInRoom||!this._model){lr&&console.log("no model or room",this.name,this.guid,this.context.connection.isInRoom);return}this._shouldRequestOwnership&&(this._shouldRequestOwnership=!1,this._model.requestOwnership());let e=this.worldPosition,t=this.worldQuaternion;if(this._model.isOwned&&!this.receivedUpdate){let r=e.distanceTo(this.lastWorldPos),s=t.angleTo(this.lastWorldRotation),a=this._model.hasOwnership||this.fastMode?1e-4:.001;(r>a||s>a)&&(this._model.hasOwnership?this._needsUpdate=!0:(lr&&console.log(this.guid,"reset because not owned but",this.gameObject.name,this.lastWorldPos),this.worldPosition=this.lastWorldPos,e.copy(this.lastWorldPos),this.worldQuaternion=this.lastWorldRotation,t.copy(this.lastWorldRotation),re.markDirty(this.gameObject,!0),this._needsUpdate=!1))}if(this._model&&!this._model.hasOwnership&&this._model.isOwned&&this._receivedDataBefore){let s=this._receivedFastUpdate||this.fastMode?.5:.3,a=!1;if(this.interpolatePosition&&this._targetPosition){let c=this.worldPosition;c.lerp(this._targetPosition,s),this.worldPosition=c,a=!0}if(this.interpolateRotation&&this._targetRotation){let c=this.worldQuaternion;c.slerp(this._targetRotation,s),this.worldQuaternion=c,a=!0}a&&re.markDirty(this.gameObject,!0)}if(this.receivedUpdate=!1,this.lastWorldPos.copy(e),this.lastWorldRotation.copy(t),!this._model)return;if(!this._model||this._model.hasOwnership===void 0||!this._model.hasOwnership){this.rb&&(this.rb.isKinematic=this._model.isOwned??!1,this.rb.setVelocity(0,0,0));return}this.rb&&(this._wasKinematic!==void 0&&(lr&&console.log("reset kinematic",this.rb.name,this._wasKinematic),this.rb.isKinematic=this._wasKinematic),this.gameObject.position.distanceTo(new On.Vector3(0,0,0))>1e3&&(lr&&console.log("RESET",this.name),this.gameObject.position.set(0,1,0),this.rb.setVelocity(0,0,0)));let i=10,n=this.rb||this.fastMode;if(this._needsUpdate&&(i<=0||i>0&&this.context.time.frameCount%i===0||n)){lr&&console.log("send update",this.context.connection.connectionId,this.guid,this.gameObject.name,this.gameObject.guid),this.overridePhysics&&this.rb,this._needsUpdate=!1;let r=Od(this.guid,this,!!n);this.context.connection.sendBinary(r)}}};import*as rc from"three-mesh-ui";import{Euler as f_,EventDispatcher as m_,Group as g_,Matrix4 as b_,Mesh as v_,MeshBasicMaterial as y_,Object3D as Em,Quaternion as tc,RingGeometry as __,Vector3 as Cm}from"three";var Jl=class{static createButton(e,t={}){let i=document.createElement("button"),n=!1;function r(){if(t.domOverlay===void 0){var u=document.createElement("div");u.style.display="none",document.body.appendChild(u);var l=document.createElementNS("http://www.w3.org/2000/svg","svg");l.setAttribute("width",38),l.setAttribute("height",38),l.style.position="absolute",l.style.right="20px",l.style.top="20px",l.addEventListener("click",function(){h.end()}),u.appendChild(l);var d=document.createElementNS("http://www.w3.org/2000/svg","path");d.setAttribute("d","M 12,12 L 28,28 M 28,12 12,28"),d.setAttribute("stroke","#fff"),d.setAttribute("stroke-width",2),l.appendChild(d),t.optionalFeatures===void 0&&(t.optionalFeatures=[]),t.optionalFeatures.push("dom-overlay"),t.domOverlay={root:u},n=!0}t.optionalFeatures===void 0&&(t.optionalFeatures=[]),t.optionalFeatures.push("local-floor"),t.optionalFeatures.push("hand-tracking"),t.optionalFeatures.push("layers");let h=null,g=null;async function E(x){if(/WebXRViewer\//i.test(navigator.userAgent))if(t.domOverlay?.root){let f=t.domOverlay.root;g=f.parentElement,g&&(console.log("Reparent DOM Overlay to body",f,f.style.display),f.style.display="",f.style.visibility="",document.body.appendChild(f))}else console.warn("WebXRViewer: No DOM Overlay found");x.addEventListener("end",_),await e.xr.setSession(x),i.textContent="STOP AR",n&&(t.domOverlay.root.style.display=""),h=x}function _(){h.removeEventListener("end",_),i.textContent="START AR",g&&g.appendChild(t.domOverlay.root),n&&(t.domOverlay.root.style.display="none"),h=null}i.style.display="",i.style.cursor="pointer",i.style.left="calc(50% - 50px)",i.style.width="100px",i.textContent="START AR",i.onmouseenter=function(){i.style.opacity="1.0"},i.onmouseleave=function(){i.style.opacity="0.5"},i.onclick=function(){h===null?navigator.xr.requestSession("immersive-ar",t).then(E):h.end()}}function s(){i.disabled=!0,i.style.display="",i.style.cursor="auto",i.style.left="calc(50% - 75px)",i.style.width="150px",i.onmouseenter=null,i.onmouseleave=null,i.onclick=null}function a(){s(),i.textContent="AR NOT SUPPORTED"}function c(u){u.style.position="absolute",u.style.bottom="20px",u.style.padding="12px 6px",u.style.border="1px solid #fff",u.style.borderRadius="4px",u.style.background="rgba(0,0,0,0.1)",u.style.color="#fff",u.style.font="normal 13px sans-serif",u.style.textAlign="center",u.style.opacity="0.5",u.style.outline="none",u.style.zIndex="999"}if("xr"in navigator)return i.id="ARButton",i.style.display="none",c(i),navigator.xr.isSessionSupported("immersive-ar").then(function(u){u?r():a()}).catch(a),i;{let u=document.createElement("a");return window.isSecureContext===!1?(u.href=document.location.href.replace(/^http:/,"https:"),u.innerHTML="WEBXR NEEDS HTTPS"):(u.href="https://immersiveweb.dev/",u.innerHTML="WEBXR NOT AVAILABLE"),u.style.left="calc(50% - 90px)",u.style.width="180px",u.style.textDecoration="none",c(u),u}}};var Zl=class{static createButton(e,t){t&&console.error('THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.');let i=document.createElement("button");function n(){let c=null;async function u(d){d.addEventListener("end",l),await e.xr.setSession(d),i.textContent="EXIT VR",c=d}function l(){c.removeEventListener("end",l),i.textContent="ENTER VR",c=null}i.style.display="",i.style.cursor="pointer",i.style.left="calc(50% - 50px)",i.style.width="100px",i.textContent="ENTER VR",i.onmouseenter=function(){i.style.opacity="1.0"},i.onmouseleave=function(){i.style.opacity="0.5"},i.onclick=function(){if(c===null){let d={optionalFeatures:["local-floor","bounded-floor","hand-tracking","high-fixed-foveation-level","layers"]};navigator.xr.requestSession("immersive-vr",d).then(u)}else c.end()}}function r(){i.disabled=!0,i.style.display="",i.style.cursor="auto",i.style.left="calc(50% - 75px)",i.style.width="150px",i.onmouseenter=null,i.onmouseleave=null,i.onclick=null}function s(){r(),i.textContent="VR NOT SUPPORTED"}function a(c){c.style.position="absolute",c.style.bottom="20px",c.style.padding="12px 6px",c.style.border="1px solid #fff",c.style.borderRadius="4px",c.style.background="rgba(0,0,0,0.1)",c.style.color="#fff",c.style.font="normal 13px sans-serif",c.style.textAlign="center",c.style.opacity="0.5",c.style.outline="none",c.style.zIndex="999"}if("xr"in navigator)return i.id="VRButton",i.style.display="none",a(i),navigator.xr.isSessionSupported("immersive-vr").then(function(c){c?n():s(),Zl.xrSessionIsGranted&&(console.log("XR session is granted - will enter immersive web now"),i.click())}),i;{let c=document.createElement("a");return window.isSecureContext===!1?(c.href=document.location.href.replace(/^http:/,"https:"),c.innerHTML="WEBXR NEEDS HTTPS"):(c.href="https://immersiveweb.dev/",c.innerHTML="WEBXR NOT AVAILABLE"),c.style.left="calc(50% - 90px)",c.style.width="180px",c.style.textDecoration="none",a(c),c}}static registerSessionGrantedListener(){if("xr"in navigator){if(/WebXRViewer\//i.test(navigator.userAgent))return;navigator.xr.addEventListener("sessiongranted",()=>{Zl.xrSessionIsGranted=!0})}}},Zo=Zl;I(Zo,"xrSessionIsGranted",!1);Zo.registerSessionGrantedListener();import*as $l from"three";var ym=Da(hl(),1);import{AudioAnalyser as a_}from"three";var $o="noVoip",mt=P("debugvoip"),l_=P("voip");var kd=class{id;constructor(e){this.id=e}};var Md=class{peer;voip;userId;peerId;call=null;callErrorListener=null;stream=null;constructor(e,t,i,n){this.voip=e,this.peer=t,this.userId=i,this.peerId=n}close(){mt&&console.log("close voip call"),this.callErrorListener&&this.peer.off("error",this.callErrorListener),this.call&&this.call.open&&this.call.close(),this.stream?.getTracks().forEach(function(e){e.stop()})}updateMute(e){if(!this.stream)return;let t=this.stream?.getAudioTracks();for(let i of t)i.enabled=!e}async startVoipCall(){if(!await ot.HasMicrophonePermissions()){console.warn("no permission to use microphone, can not start call");return}mt&&console.log("start voip call"),this.stream=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1}),this.updateMute(this.voip.muteOutput),mt&&console.log(this.stream),this.call=this.peer.call(this.peerId,this.stream,{metadata:{userId:this.userId}}),this.call.on("error",t=>{console.error(t)}),this.call.on("stream",t=>{mt&&console.log("received stream from remote again",t)}),this.peer.on("close",this.onCallClose.bind(this)),this.callErrorListener=t=>{t.message.includes(this.peerId)?(console.log("Could not connect to "+this.peerId),this.callErrorListener&&this.peer.off("error",this.callErrorListener),this.call&&this.call.close(),this.stream?.getTracks().forEach(function(i){i.stop()}),this.stream=null):console.error(t)},this.peer.on("error",this.callErrorListener)}onCallClose(e){mt&&console.log("call closed",e)}},Id=class{get currentStream(){return this.stream}get currentAudio(){return this.audio}get currentAnalyzer(){return this.analyzer}voip;call;audio=null;stream=null;obj;analyzer=null;waitingForStart=!1;closed=!1;audioElement=null;constructor(e,t,i){this.voip=e,this.obj=t,this.call=i}openAudioStream(e){let t=e.getAudioTracks();for(let i of t)if(i.kind==="audio"&&i.readyState==="live"){this.open(i);return}console.warn("failed finding valid audio stream to begin call")}open(e){console.assert(e.kind==="audio","invalid track kind, expected audio but received "+e.kind),!this.waitingForStart&&(this.waitingForStart=!0,oe.userInteractionRegistered||mt&&console.log("Incoming call, waiting for user interaction before opening audio"),oe.registerWaitForAllowAudio(async()=>{if(this.call.open&&!this.closed){mt&&console.log("Setup audio and begin listening"),this.stream=new MediaStream([e]);let t=new $l.AudioListener;this.audio=new $l.Audio(t),this.audio.setVolume(this.voip.muteInput?0:1),this.audio.setMediaStreamSource(this.stream);let i=document.createElement("audio");this.audioElement=i,i.style.display="none",document.body.appendChild(i),i.srcObject=this.stream,i.sinkId!==void 0&&navigator.mediaDevices.enumerateDevices().then(n=>{if(!!i){console.log(n);for(let r of n)if(r.label==="Speakerphone"){i.sinkId=r.deviceId;break}}}),mt&&console.log("call is setup, you should hear something now"),this.analyzer=new a_(this.audio,32)}}))}close(){this.closed=!0,this.call?.open&&this.call.close(),this.audio?.disconnect(),this.stream?.getTracks().forEach(e=>{e.stop()}),this.stream=null,this.audioElement&&this.audioElement.remove()}},ot=class extends M{requireParam=!1;set muteInput(e){if(e===this._inputMuted||(this._inputMuted=e,!this.currentIncomingCalls))return;let t=this._inputMuted?0:1;for(let i in this.currentIncomingCalls)this.currentIncomingCalls[i]?.currentAudio?.setVolume(t)}get muteInput(){return this._inputMuted}set muteOutput(e){if(e!==this._outputMuted&&(this._outputMuted=e,!!this.connections))for(let t in this.connections)this.connections[t]?.updateMute(e)}get muteOutput(){return this._outputMuted}getFrequency(e){if(e===null){for(let i in this.currentIncomingCalls){let n=this.currentIncomingCalls[i];if(n&&n.currentAnalyzer)return n.currentAnalyzer.getAverageFrequency()}return null}let t=this.currentIncomingCalls[e];return t&&t.currentAnalyzer?t.currentAnalyzer.getAverageFrequency():null}peer=null;model=null;connections={};currentIncomingCalls={};_inputMuted=!1;_outputMuted=!1;awake(){if(P($o)){console.log("VOIP is disabled by url parameter: "+$o);return}if(this.requireParam&&!l_){console.debug("VOIP must be enabled explicitly by url parameter");return}if(wo()&&ja()){console.log("VOIP is currently not supported on Safari iOS");return}this.peer=new ym.default,navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia,this.context.connection.beginListen("joined-room",e=>{navigator.mediaDevices.getUserMedia({audio:!0,video:!1})}),this.context.connection.beginListen("peer-update-id",e=>{if(e.id!==this.context.connection.connectionId){let t=this.connections[e.id];if(t&&t.close(),this.peer&&this.context.connection.connectionId){let i=new Md(this,this.peer,this.context.connection.connectionId,e.peerId);this.connections[e.id]=i,i.startVoipCall()}}}),this.context.connection.beginListen("user-left-room",e=>{let{userId:t}=e,i=this.connections[t];this.connections[t]=null,i&&i.close();let n=this.currentIncomingCalls[t];mt&&console.log("UserLeftRoom",e,t,n),n&&(n.close(),this.currentIncomingCalls[t]=null)}),this.peer.on("open",this.onOpenPeerConnection.bind(this))}onEnable(){}onDisable(){console.log("TODO: close all");for(let e in this.currentIncomingCalls)try{this.currentIncomingCalls[e]?.close(),this.connections[e]?.close()}catch(t){console.error(t)}}async onOpenPeerConnection(e){mt&&console.log("Peer connection established and received id"),this.model=new kd(e),this.context.connection.send("peer-update-id",this.model,1),this.peer&&(this.peer.on("call",this.onReceiveCall.bind(this)),this.peer.on("connection",function(t){mt&&console.log("CONNECTION",t),t.on("data",function(i){mt&&console.log("Received",i)})}))}async onReceiveCall(e){let{metadata:t}=e;console.assert(t.userId);let{userId:i}=t,{peer:n}=e,r=this.currentIncomingCalls[i];if(r&&r.close(),mt&&console.log("received call"),await ot.HasMicrophonePermissions()){let s=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1});e.answer(s)}else e.answer(null);this.currentIncomingCalls[i]=new Id(this,this.gameObject,e),e.on("stream",s=>{mt&&console.log("receive caller stream, will setup audio now"),this.currentIncomingCalls[i]?.openAudioStream(s)}),e.on("error",console.error)}static async HasMicrophonePermissions(){return(await navigator.permissions.query({name:"microphone"})).state!=="denied"}};import{Matrix4 as la}from"three";var gt=class extends M{webAR=null;get rig(){return this.webAR?.webxr.Rig}invertForward=!1;get arScale(){return this._arScale}set arScale(e){e!==this._arScale&&(this._arScale=e,this.setScale(e))}_initalMatrix=new la;_selectStartFn=this.onSelectStart.bind(this);_selectEndFn=this.onSelectEnd.bind(this);start(){let e=R.findObjectOfType(V);e&&(e.Rig.updateMatrix(),this._initalMatrix.copy(e.Rig.matrix))}_arScale=5;_rig=null;_startPose=null;_placementPose=null;_isTouching=!1;_rigStartPose=null;onBegin(e){this._placementPose=null,this.gameObject.visible=!1,this.gameObject.matrixAutoUpdate=!1,this._startPose=this.gameObject.matrix.clone(),this._rigStartPose=this.rig?.matrix.clone(),e.addEventListener("selectstart",this._selectStartFn),e.addEventListener("selectend",this._selectEndFn),this.gameObject.visible=!1,this.rig&&(this.rig.matrixAutoUpdate=!0,this._initalMatrix.decompose(this.rig.position,this.rig.quaternion,this.rig.scale))}onUpdate(e,t,i){return i&&!this._placementPose&&this._isTouching?(this.webAR&&this.webAR.setReticleActive(!1),this.placeAt(e,new la().fromArray(i.transform.matrix).invert()),!0):!1}placeAt(e,t){this._placementPose||(this._placementPose=new la),this._placementPose.copy(t);let i=this.gameObject.matrixWorld.clone().invert();if(this._placementPose.premultiply(i),e){if(this.invertForward){let n=new la().makeRotationY(Math.PI);this._placementPose.premultiply(n)}this._rig=e,this.setScale(this.arScale)}else this._rig=null;this.gameObject.visible=!0}onEnd(e,t){this._placementPose=null,this.gameObject.visible=!1,this.gameObject.matrixAutoUpdate=!1,this._startPose&&this.gameObject.matrix.copy(this._startPose),e&&(e.matrixAutoUpdate=!0,this._rigStartPose&&this._rigStartPose.decompose(e.position,e.quaternion,e.scale)),re.markDirty(this.gameObject,!0),setTimeout(()=>{this.gameObject.matrixAutoUpdate=!0,this.gameObject.visible=!0},100)}onSelectStart(){this._isTouching=!0}onSelectEnd(){this._isTouching=!1}setScale(e){let t=this._rig;!t||!this._placementPose||(this._rigStartPose||(this._rigStartPose=t.matrix.clone()),t.matrixAutoUpdate=!1,t.matrix.multiplyMatrices(new la().makeScale(e,e,e),this._placementPose),t.matrix.decompose(t.position,t.quaternion,t.scale),t.updateMatrixWorld(),console.log("Place",t.position))}};v([y()],gt.prototype,"invertForward",2),v([y()],gt.prototype,"arScale",1);import{Object3D as u_}from"three";import*as _m from"three";import{Color as c_}from"three";var yi=class extends M{objectBounds=!1;color;isGizmo=!0;_gizmoObject=null;_boxHelper=null;onEnable(){this.isGizmo&&!Di||(this._gizmoObject||(this.objectBounds&&this.gameObject.isMesh===!0?this._gizmoObject=new _m.BoxHelper(this.gameObject,this.color??16776960):(this.objectBounds=!1,this._gizmoObject=al(this.color??16776960))),this.objectBounds?(this.scene.add(this._gizmoObject),this._boxHelper=this._gizmoObject,this.startCoroutine(this.syncObjectBounds(),3)):this.gameObject.add(this._gizmoObject))}onDisable(){this._gizmoObject&&this.gameObject.remove(this._gizmoObject)}*syncObjectBounds(){for(;this._boxHelper;)this._boxHelper?.update(),yield}};v([y()],yi.prototype,"objectBounds",2),v([y(c_)],yi.prototype,"color",2),v([y()],yi.prototype,"isGizmo",2);var d_=P("debugrig"),cr=class extends M{awake(){if(d_){let e=new u_;e.position.y+=.5,this.gameObject.add(e);let t=e.addNewComponent(yi);t&&(t.isGizmo=!1)}}};import{Quaternion as ca,Vector3 as ec,Vector4 as h_}from"three";var Ni=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}x(){return this.bb.readFloat32(this.bb_pos)}y(){return this.bb.readFloat32(this.bb_pos+4)}z(){return this.bb.readFloat32(this.bb_pos+8)}w(){return this.bb.readFloat32(this.bb_pos+12)}static sizeOf(){return 16}static createVec4(e,t,i,n,r){return e.prep(4,16),e.writeFloat32(r),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}};var Oe=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsVrUserStateBuffer(e,t){return(t||new Oe).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsVrUserStateBuffer(e,t){return e.setPosition(e.position()+4),(t||new Oe).__init(e.readInt32(e.position())+e.position(),e)}guid(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}time(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}avatarId(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__string(this.bb_pos+t,e):null}position(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}rotation(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Ni).__init(this.bb_pos+t,this.bb):null}scale(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readFloat32(this.bb_pos+e):0}posLeftHand(e){let t=this.bb.__offset(this.bb_pos,16);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}posRightHand(e){let t=this.bb.__offset(this.bb_pos,18);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}rotLeftHand(e){let t=this.bb.__offset(this.bb_pos,20);return t?(e||new Ni).__init(this.bb_pos+t,this.bb):null}rotRightHand(e){let t=this.bb.__offset(this.bb_pos,22);return t?(e||new Ni).__init(this.bb_pos+t,this.bb):null}static startVrUserStateBuffer(e){e.startObject(10)}static addGuid(e,t){e.addFieldOffset(0,t,0)}static addTime(e,t){e.addFieldInt64(1,t,e.createLong(0,0))}static addAvatarId(e,t){e.addFieldOffset(2,t,0)}static addPosition(e,t){e.addFieldStruct(3,t,0)}static addRotation(e,t){e.addFieldStruct(4,t,0)}static addScale(e,t){e.addFieldFloat32(5,t,0)}static addPosLeftHand(e,t){e.addFieldStruct(6,t,0)}static addPosRightHand(e,t){e.addFieldStruct(7,t,0)}static addRotLeftHand(e,t){e.addFieldStruct(8,t,0)}static addRotRightHand(e,t){e.addFieldStruct(9,t,0)}static endVrUserStateBuffer(e){return e.endObject()}static finishVrUserStateBufferBuffer(e,t){e.finish(t)}static finishSizePrefixedVrUserStateBufferBuffer(e,t){e.finish(t,void 0,!0)}};var xm=P("debugxr"),ua=P("debugavatar");var Dd="VRUS";Ho(Dd,Oe.getRootAsVrUserStateBuffer);function Ad(){return new Date().getTime()}function p_(o){let e=o&4294967295,t=o/Math.pow(2,32)&1048575;return qe.create(e,t)}var da=class{guid;time;avatarId;position=new ec;rotation=new h_;scale=1;posLeftHand=new ec;posRightHand=new ec;rotLeftHand=new ca;rotRightHand=new ca;constructor(e){this.guid=e}update(e,t,i,n,r){this.time=Ad(),this.avatarId=r,this.position.set(t.x,t.y,t.z),e&&this.position.applyMatrix4(e.matrixWorld);let s=da.quat0,a=da.quat1;s.set(i.x,i.y,i.z,i.w),s=s.multiplyQuaternions(s,da.invertRotation),e&&(e.getWorldQuaternion(a),s.multiplyQuaternions(a,s)),this.rotation.set(s.x,s.y,s.z,s.w),this.scale=e.scale.x;let c=n.LeftController?.controllerGrip;c&&(c.getWorldPosition(this.posLeftHand),c.getWorldQuaternion(this.rotLeftHand));let u=n.RightController?.controllerGrip;if(u&&(u.getWorldPosition(this.posRightHand),u.getWorldQuaternion(this.rotRightHand)),n.LeftController?.hand?.visible){let l=n.LeftController.wrist;l&&(l.getWorldPosition(this.posLeftHand),l.getWorldQuaternion(this.rotLeftHand))}if(n.RightController?.hand?.visible){let l=n.RightController.wrist;l&&(l.getWorldPosition(this.posRightHand),l.getWorldQuaternion(this.rotRightHand))}}sendAsBuffer(e,t){e.clear();let i=e.createString(this.guid),n=e.createString(this.avatarId);Oe.startVrUserStateBuffer(e),Oe.addGuid(e,i),Oe.addTime(e,p_(this.time)),Oe.addAvatarId(e,n),Oe.addPosition(e,Te.createVec3(e,this.position.x,this.position.y,this.position.z)),Oe.addRotation(e,Ni.createVec4(e,this.rotation.x,this.rotation.y,this.rotation.z,this.rotation.w)),Oe.addScale(e,this.scale),Oe.addPosLeftHand(e,Te.createVec3(e,this.posLeftHand.x,this.posLeftHand.y,this.posLeftHand.z)),Oe.addPosRightHand(e,Te.createVec3(e,this.posRightHand.x,this.posRightHand.y,this.posRightHand.z)),Oe.addRotLeftHand(e,Ni.createVec4(e,this.rotLeftHand.x,this.rotLeftHand.y,this.rotLeftHand.z,this.rotLeftHand.w)),Oe.addRotRightHand(e,Ni.createVec4(e,this.rotRightHand.x,this.rotRightHand.y,this.rotRightHand.z,this.rotRightHand.w));let r=Oe.endVrUserStateBuffer(e);e.finish(r,Dd);let s=e.asUint8Array();t.sendBinary(s)}setFromBuffer(e,t){if(!e)return;this.guid=e,this.time=t.time().toFloat64();let i=t.avatarId();i&&(this.avatarId=i);let n=t.position();n&&this.position.set(n.x(),n.y(),n.z());let r=t.rotation();r&&this.rotation.set(r.x(),r.y(),r.z(),r.w());let s=t.posLeftHand();s&&this.posLeftHand.set(s.x(),s.y(),s.z());let a=t.posRightHand();a&&this.posRightHand.set(a.x(),a.y(),a.z());let c=t.rotLeftHand();c&&this.rotLeftHand.set(c.x(),c.y(),c.z(),c.w());let u=t.rotRightHand();u&&this.rotRightHand.set(u.x(),u.y(),u.z(),u.w()),this.scale=t.scale()}},Nt=da;I(Nt,"invertRotation",new ca().setFromAxisAngle(new ec(0,1,0),Math.PI)),I(Nt,"quat0",new ca),I(Nt,"quat1",new ca);var kn=class extends M{webXR=null;debugAvatarUser=null;voip=null;async awake(){if(this.webXR||(this.webXR=R.getComponent(this.gameObject,V)),this.webXR||(this.webXR=R.findObjectOfType(V,this.context)),!this.webXR&&(console.log("Missing webxr component"),this.webXR=R.findObjectOfType(V,this.context),!this.webXR)){console.error("Could not find webxr component");return}if(this.voip||(this.voip=R.findObjectOfType(ot,this.context)),ua){let e="debug-avatar-"+ua,t=new Gt(this.context,e,this.webXR);if(this.debugAvatarUser=t,typeof ua=="string"&&ua.length>0)if(await t.setAvatarOverride(ua)){let i=new Nt(e);i.position.y+=1;let n=.5;i.posLeftHand.y+=n,i.posLeftHand.x+=n,i.posRightHand.y+=n,i.posRightHand.x-=n,t.tryUpdate(i,0)}else t.destroy()}}onEnable(){if(!this.webXR&&(this.webXR=R.getComponent(this.gameObject,V),!this.webXR)){console.warn("Missing webxr component on "+this.gameObject.name);return}this.eventSub_WebXRStartEvent=this.onXRSessionStart.bind(this),V.addEventListener("xrStarted",this.eventSub_WebXRStartEvent),this.eventSub_WebXRUpdateEvent=this.onXRSessionUpdate.bind(this),V.addEventListener("xrUpdate",this.eventSub_WebXRUpdateEvent),this.eventSub_WebXREndEvent=this.onXRSessionEnded.bind(this),V.addEventListener("xrStopped",this.eventSub_WebXREndEvent),this.eventSub_ConnectionEvent=this.onConnected.bind(this),this.context.connection.beginListen("joined-room",this.eventSub_ConnectionEvent),this.context.connection.beginListen("webxr-user-joined",e=>{console.log("webxr user joined evt")}),this.context.connection.beginListen("webxr-user-left",e=>{let t=e.id!==null&&e.id!==void 0;!t||(console.log("webxr user left evt"),t&&(this.avatars[e.id]?.destroy(),this.avatars[e.id]=void 0))}),this.context.connection.beginListenBinrary(Dd,e=>{let t=e.guid();if(!t)return;let i=e.time().toFloat64(),n=this.tempState;n.setFromBuffer(t,e),this.onTryGetAvatar(t,i)?.tryUpdate(n,i)}),this.context.connection.beginListen("vr-session-update",e=>{let t=e.guid,i=e.time;this.onTryGetAvatar(t,i)?.tryUpdate(e,i)})}tempState=new Nt("");onTryGetAvatar(e,t){if(e===this.context.connection.connectionId)return null;let i=new Date().getTime()-t;if(i>5e3)return xm&&console.log("old data",i,e),null;let n=this.avatars[e];if(n===void 0)try{console.log("create new avatar");let r=new Gt(this.context,e,this.webXR);n=r,this.avatars[e]=r}catch(r){this.avatars[e]=null,console.error(r)}return n}onDisable(){this.eventSub_ConnectionEvent&&this.context.connection.stopListening("joined-room",this.eventSub_ConnectionEvent),V.removeEventListener("xrStarted",this.eventSub_WebXRStartEvent),V.removeEventListener("xrUpdate",this.eventSub_WebXRUpdateEvent),V.removeEventListener("xrStopped",this.eventSub_WebXREndEvent)}update(){let e=Ad();this.debugAvatarUser&&(this.debugAvatarUser.lastUpdate=e),this.detectPotentiallyDisconnectedAvatarsAndRemove();for(let t in this.avatars){let i=this.avatars[t];!i||i.update()}}_removeAvatarsList=[];detectPotentiallyDisconnectedAvatarsAndRemove(){let e=Ad();for(let t in this.avatars){let i=this.avatars[t];if(!i){this._removeAvatarsList.push(t);continue}e-i.lastUpdate>1e4&&(console.log("avatar timed out (didnt receive any updates in a while) - destroying it now"),i.destroy(),this.avatars[t]=void 0)}for(let t of this._removeAvatarsList)delete this.avatars[t];this._removeAvatarsList.length=0}buildLocalAvatar(){if(this.localAvatar)return;let e=this.context.connection?.connectionId??this.k_LocalAvatarNoNetworkingGuid;this.localAvatar=new Gt(this.context,e,this.webXR),this.localAvatar.isLocalAvatar=!0,this.localAvatar.setAvatarOverride(this.getAvatarId()),this.avatars[this.localAvatar.guid]=this.localAvatar}eventSub_ConnectionEvent=null;eventSub_WebXRStartEvent=null;eventSub_WebXREndEvent=null;eventSub_WebXRUpdateEvent=null;avatars={};localAvatar=null;k_LocalAvatarNoNetworkingGuid="local";onConnected(){xm&&console.log("Hey you are connected as "+this.context.connection.connectionId),this.localAvatar?.guid===this.k_LocalAvatarNoNetworkingGuid&&(this.localAvatar&&(this.localAvatar?.destroy(),this.avatars[this.localAvatar.guid]=void 0),this.localAvatar=null,this.xrState=null,this.ownership?.freeOwnership(),this.ownership=null)}onXRSessionStart(e){if(console.log("XR session started"),this.context.connection.send("webxr-user-joined",{id:this.context.connection.connectionId,mode:"vr"}),this.localAvatar&&(this.localAvatar?.destroy(),this.avatars[this.localAvatar.guid]=void 0,this.localAvatar=null),this.xrState=null,this.ownership?.freeOwnership(),this.ownership=null,this.avatars)for(let t in this.avatars)this.avatars[t]?.updateFlags()}onXRSessionEnded(e){console.log("XR session ended"),this.context.connection.send("webxr-user-left",{id:this.context.connection.connectionId,mode:"vr"}),this.localAvatar&&(this.localAvatar?.destroy(),this.avatars[this.localAvatar.guid]=void 0,this.localAvatar=null)}ownership=null;xrState=null;builder=new Ct(1024);onXRSessionUpdate(e){this.xrState??=new Nt(this.context.connection.connectionId??this.k_LocalAvatarNoNetworkingGuid),this.ownership??=new Jn(this.context.connection,this.context.connection.connectionId??this.k_LocalAvatarNoNetworkingGuid),this.ownership.guid=this.context.connection.connectionId??this.k_LocalAvatarNoNetworkingGuid,this.buildLocalAvatar();let{frame:t,xr:i,rig:n}=e,r=t.getViewerPose(i.getReferenceSpace());if(!r)return;let s=r?.transform,a=s.position,c=s.orientation;this.xrState.update(n,a,c,this.webXR,this.getAvatarId()),this.localAvatar&&(this.context.connection.connectionId&&(this.localAvatar.guid=this.context.connection.connectionId),this.localAvatar.tryUpdate(this.xrState,0)),!(this.ownership&&!this.ownership.hasOwnership&&this.context.connection.isConnected&&(this.context.time.frameCount%120===0&&this.ownership.requestOwnership(),!this.ownership.hasOwnership))&&(!this.context.connection.isConnected||!this.context.connection.connectionId||this.xrState.sendAsBuffer(this.builder,this.context.connection))}getAvatarId(){return P("avatar")??null}};async function x_(){return La()?!0:"xr"in navigator?await navigator.xr.isSessionSupported("immersive-ar")===!0:!1}async function w_(){return"xr"in navigator?await navigator.xr.isSessionSupported("immersive-vr")===!0:!1}var ic=!1,nc=!1;x_().then(o=>ic=o);w_().then(o=>nc=o);var Le=class extends M{enableVR=!0;enableAR=!0;defaultAvatar;handModelPath="";createVRButton=!0;createARButton=!0;static get IsInWebXR(){return this._isInXr}static get XRSupported(){return"xr"in navigator&&(ic||nc)}static get IsARSupported(){return ic}static get IsVRSupported(){return nc}static addEventListener(e,t){return this.events.addEventListener(e,t),t}static removeEventListener(e,t){return this.events.removeEventListener(e,t),t}static createVRButton(e,t){Le.XRSupported?e.__internalAwake():console.warn("WebXR is not supported on this device");let i=Zo.createButton(e.context.renderer);return i.classList.add("webxr-ar-button"),i.classList.add("webxr-button"),this.resetButtonStyles(i),(t?.registerClick??!0)&&i.addEventListener("click",e.onClickedVRButton.bind(e)),i}static createARButton(e,t){e.__internalAwake();let i=e.webAR?.getAROverlayContainer(),n={};i?(n.domOverlay={root:i},n.optionalFeatures=["hit-test","dom-overlay"]):console.warn("No dom overlay root found, HTML overlays on top of screen-based AR will not work."),n.optionalFeatures.push("plane-detection"),n.optionalFeatures.push("anchors");let r=Jl.createButton(e.context.renderer,n);return r.classList.add("webxr-ar-button"),r.classList.add("webxr-button"),Le.resetButtonStyles(r),(t?.registerClick??!0)&&r.addEventListener("click",e.onClickedARButton.bind(e)),r}static resetButtonStyles(e){!e||(e.style.position="",e.style.bottom="",e.style.left="")}endSession(){let e=this.context.renderer.xr.getSession();e&&e.end()}get Rig(){return this.rig||this.ensureRig(),this.rig}controllers=[];get Controllers(){return this.controllers}get LeftController(){return this.controllers.length>0&&this.controllers[0].input?.handedness==="left"?this.controllers[0]:this.controllers.length>1&&this.controllers[1].input?.handedness==="left"?this.controllers[1]:null}get RightController(){return this.controllers.length>0&&this.controllers[0].input?.handedness==="right"?this.controllers[0]:this.controllers.length>1&&this.controllers[1].input?.handedness==="right"?this.controllers[1]:null}get ARButton(){return this._arButton}get VRButton(){return this._vrButton}get IsInVR(){return this._isInVR}get IsInAR(){return this._isInAR}rig;isInit=!1;_requestedAR=!1;_requestedVR=!1;_isInAR=!1;_isInVR=!1;_arButton;_vrButton;webAR=null;awake(){if(this.defaultAvatar&&typeof this.defaultAvatar=="string"&&(this.defaultAvatar=tt.getOrCreate(this.sourceId??"/",this.defaultAvatar,this.context)),!R.findObjectOfType(kn,this.context)){let e=R.addNewComponent(this.gameObject,kn,!1);e.webXR=this}this.webAR=new ur(this)}onEnable(){if(this.isInit||!this.enableAR&&!this.enableVR)return;this.isInit=!0,this.context.renderer.xr.enabled=!0;let e=Le.XRSupported,t,i,n=document.createElement("div");n.classList.add("webxr-buttons"),this.context.domElement.append(n),this.enableAR&&this.createARButton&&ic&&(t=Le.createARButton(this),this._arButton=t,n.appendChild(t)),this.createVRButton&&this.enableVR&&nc&&(i=Le.createVRButton(this),this._vrButton=i,n.appendChild(i)),setTimeout(()=>{Le.resetButtonStyles(i),Le.resetButtonStyles(t)},1e3)}_transformOrientation=new tc;get TransformOrientation(){return this._transformOrientation}_currentHeadPose=null;get HeadPose(){return this._currentHeadPose}onBeforeRender(e){if(!e)return;let t=this.context.renderer.xr.getSession();if(t){let i=e.getViewerPose(this.context.renderer.xr.getReferenceSpace());if(!i)return;this._currentHeadPose=i;let n=i?.transform;n&&this._transformOrientation.set(n.orientation.x,n.orientation.y,n.orientation.z,n.orientation.w),Le._isInXr===!1&&t&&this.onEnterXR(t,e);for(let r of this.controllers)r.onUpdate(t);this._isInAR&&this.webAR?.onUpdate(t,e)}Le.events.dispatchEvent({type:"xrUpdate",frame:e,xr:this.context.renderer.xr,rig:this.rig})}onClickedARButton(){this._isInAR||(this._requestedAR=!0,this._requestedVR=!1,this.captureStateBeforeXR())}onClickedVRButton(){if(!this._isInVR){if(this._requestedVR){this.onExitXR(null);return}this._requestedAR=!1,this._requestedVR=!0,this.captureStateBeforeXR(),this.ensureRig();for(let e=0;e<2;e++)se.Create(this,e,this.gameObject,0);Le.events.dispatchEvent({type:"requestVRSession"})}}captureStateBeforeXR(){this.context.mainCamera&&(this._originalCameraPosition.copy(B(this.context.mainCamera)),this._originalCameraRotation.copy(me(this.context.mainCamera)),this._originalCameraParent=this.context.mainCamera.parent),this.Rig&&(this._originalXRRigParent=this.Rig.parent,this._originalXRRigPosition.copy(this.Rig.position),this._originalXRRigRotation.copy(this.Rig.quaternion))}ensureRig(){if(!this.rig){let e=R.findObjectOfType(cr,this.context);e?this.rig=e.gameObject:(this.rig=new g_,this.rig.rotateY(Math.PI),this.rig.name="XRRig",this.context.scene.add(this.rig))}}_originalCameraParent=null;_originalCameraPosition=new Cm;_originalCameraRotation=new tc;_originalXRRigParent=null;_originalXRRigPosition=new Cm;_originalXRRigRotation=new tc;onEnterXR(e,t){console.log("[XR] session begin",e),Le._isInXr=!0,this.ensureRig();let i=this.context.renderer.xr.getReferenceSpace();if(i&&this.rig){let a=t.getViewerPose(i)?.transform.orientation;if(a){let c=new tc(a.x,a.y,a.z,a.w),u=new f_().setFromQuaternion(c);this.rig.rotateY(u.y)}}let n=this.context.renderer.xr;if(this.context.mainCamera){let s=n.getCamera(this.context.mainCamera);for(let a of s.cameras)a.layers.enableAll();this.rig.add(this.context.mainCamera),this._requestedAR&&this.context.scene.add(this.rig)}let r=this._requestedAR?2:4;switch(St.Global.Set(r),r){case 2:this.context.xrSessionMode="immersive-ar",this._isInAR=!0,this.webAR?.onBegin(e);break;case 4:this.context.xrSessionMode="immersive-vr",this._isInVR=!0,this.onEnterVR(e);break}e.addEventListener("end",()=>{console.log("[XR] session end"),Le._isInXr=!1,this.onExitXR(e)}),this.onEnterXR_HandleMirrorWindow(e),Le.events.dispatchEvent({type:"xrStarted",session:e})}onExitXR(e){let t=this._isInAR;this._isInAR&&e&&this.webAR?.onEnd(e),this._isInAR=!1,this._isInVR=!1,this._requestedAR=!1,this._requestedVR=!1,this.context.xrSessionMode=void 0,this.xrMirrorWindow&&(this.xrMirrorWindow.close(),this.xrMirrorWindow=null),this.destroyControllers(),this.context.mainCamera&&(this._originalCameraParent?.add(this.context.mainCamera),te(this.context.mainCamera,this._originalCameraPosition),$e(this.context.mainCamera,this._originalCameraRotation),this.context.mainCamera.scale.set(1,1,1)),t&&(this._originalXRRigParent?.add(this.rig),this.rig.position.copy(this._originalXRRigPosition),this.rig.quaternion.copy(this._originalXRRigRotation)),St.Global.Set(17),Le.events.dispatchEvent({type:"xrStopped",session:e})}onEnterVR(e){}destroyControllers(){for(let e=this.controllers.length-1;e>=0;e-=1)this.controllers[e]?.destroy();this.controllers.length=0}xrMirrorWindow=null;onEnterXR_HandleMirrorWindow(e){!P("mirror")||setTimeout(()=>{if(!Le.IsInWebXR)return;let t=new URL(window.location.href);yo(t.searchParams,$o,1),yo(t.searchParams,"isMirror",1);let i=t.toString();this.xrMirrorWindow=window.open(i,"webxr sync","popup=yes"),this.xrMirrorWindow&&(this.xrMirrorWindow.onload=()=>{this.xrMirrorWindow&&(this.xrMirrorWindow.onbeforeunload=()=>{Le.IsInWebXR&&e.end()})})},1e3)}},V=Le;I(V,"_isInXr",!1),I(V,"events",new m_),v([y()],V.prototype,"enableVR",2),v([y()],V.prototype,"enableAR",2),v([y(tt)],V.prototype,"defaultAvatar",2),v([y()],V.prototype,"handModelPath",2),v([y()],V.prototype,"createVRButton",2),v([y()],V.prototype,"createARButton",2);var es=class{get webxr(){return this._webxr}_webxr;reticle=null;reticleParent=null;hitTestSource=null;reticleActive=!0;previousBackground=null;previousEnvironment=null;sessionRoot=null;_previousParent=null;get context(){return this.webxr.context}constructor(e){this._webxr=e}arDomOverlay=null;arOverlayElement=null;noHitTestAvailable=!1;didPlaceARSessionRoot=!1;getAROverlayContainer(){this.arDomOverlay=this.webxr.context.domElement;let e=this.arDomOverlay;return e.getAROverlayContainer?this.arOverlayElement=e.getAROverlayContainer():this.arOverlayElement=this.arDomOverlay,this.arOverlayElement}setReticleActive(e){this.reticleActive=e}async onBegin(e){let t=this.webxr.context;this.reticleActive=!0,this.didPlaceARSessionRoot=!1,this.getAROverlayContainer();let i=navigator.userAgent?.includes("OculusBrowser")?0:1,n=i===1?4:2;for(let s=0;s<n;s++)se.Create(this.webxr,s,this.webxr.gameObject,i);(!this.sessionRoot||this.sessionRoot.destroyed||!this.sessionRoot.activeAndEnabled)&&(this.sessionRoot=R.findObjectOfType(gt,t)),this.previousBackground=t.scene.background,this.previousEnvironment=t.scene.environment,t.scene.background=null,e.requestReferenceSpace("viewer").then(s=>{e.requestHitTestSource?.call(e,{space:s})?.then(a=>{this.hitTestSource=a}).catch(a=>{this.noHitTestAvailable=!0,console.warn("WebXR: Hit test not supported",a)})}),!this.reticle&&this.sessionRoot&&(this.reticle=new v_(new __(.07,.09,32).rotateX(-Math.PI/2),new y_),this.reticle.name="AR Placement reticle",this.reticle.matrixAutoUpdate=!1,this.reticle.visible=!1,this.reticleParent=new Em,this.reticleParent.name="AR Reticle Parent",this.reticleParent.matrixAutoUpdate=!1,this.reticleParent.add(this.reticle),this.webxr.scene?(this.context.scene.add(this.reticleParent),this.context.scene.visible=!0):console.warn("Could not found WebXR Rig")),this._previousParent=this.webxr.gameObject,es.tempWebXRObject||(es.tempWebXRObject=new Em),this.context.scene.add(es.tempWebXRObject),R.addComponent(es.tempWebXRObject,this.webxr),this.sessionRoot?(this.sessionRoot.webAR=this,this.sessionRoot?.onBegin(e)):console.warn("No WebARSessionRoot found in scene");let r=this.context.domElement;r?.onEnterAR?.call(r,e,this.arOverlayElement),this.context.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}onEnd(e){this._previousParent&&(R.addComponent(this._previousParent,this.webxr),this._previousParent=null),this.hitTestSource=null;let t=this.webxr.context;t.scene.background=this.previousBackground,t.scene.environment=this.previousEnvironment,this.sessionRoot&&this.sessionRoot.onEnd(this.webxr.Rig,e);let i=this.context.domElement;i.onExitAR?.call(i,e),this.context.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}onUpdate(e,t){if(this.noHitTestAvailable===!0){if(this.reticle&&(this.reticle.visible=!1),!this.didPlaceARSessionRoot){this.didPlaceARSessionRoot=!0;let n=this.webxr.Rig,r=E_.clone();this.sessionRoot?.placeAt(n,r)}return}if(!this.hitTestSource)return;let i=t.getHitTestResults(this.hitTestSource);if(i.length){let n=i[0],r=this.webxr.context.renderer.xr.getReferenceSpace();if(r){let s=n.getPose(r);if(this.sessionRoot){let a=this.sessionRoot.onUpdate(this.webxr.Rig,e,s);this.didPlaceARSessionRoot=a}if(this.reticle&&(this.reticle.visible=this.reticleActive,this.reticleActive&&s)){let a=s.transform.matrix;this.reticle.matrix.fromArray(a),this.webxr.Rig&&this.reticle.matrix.premultiply(this.webxr.Rig.matrix)}}}else this.sessionRoot?.onUpdate(this.webxr.Rig,e,null),this.reticle&&(this.reticle.visible=!1)}},ur=es;I(ur,"tempWebXRObject");var E_=new b_().identity().makeTranslation(0,0,0);var _i=class{used=!1;Use(){this.used=!0}StopPropagation(){this.event?.stopImmediatePropagation()}inputSource;object;isDown;isUp;isPressed;isClicked;event;constructor(e){this.event=e}};import{Object3D as T_}from"three";var R_=P("debugeventsystem"),Xi=class extends M{static createIfNoneExists(e){this.didSearchEventSystem||(this.didSearchEventSystem=!0,Xi.systems.length<=0&&Xi.systems.push(...R.findObjectsOfType(Xi,e)));for(let i of Xi.systems)if(i.context===e)return;let t=new T_;R.addNewComponent(t,Xi),e.scene.add(t)}static get systems(){let e=G.Current;return this._eventSystemMap.has(e)||this._eventSystemMap.set(e,[]),this._eventSystemMap.get(e)}static ensureUpdateMeshUI(e,t){xi.update(e,t)}static markUIDirty(e){xi.markDirty()}static get instance(){return this.systems[0]}orbitControl=null;orbitControlWasEnabled=!1;raycaster=[];constructor(){super(),Xi.systems.push(this)}onDestroy(){Xi.systems.splice(Xi.systems.indexOf(this),1)}start(){}register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){let t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}_selectStartFn;_selectEndFn;_selectUpdateFn;onEnable(){let e=new Map;this._selectStartFn??=(i,n)=>{if(!n.grab)return;xi.resetLastSelected();let r=new _i;r.inputSource=i,r.isDown=i.selectionDown,r.isUp=i.selectionUp,r.isPressed=i.selectionPressed,r.isClicked=!1,e.set(i,n.grab),n.grab&&!this.handleEvents(n.grab,r)&&(n.grab=null)},this._selectEndFn??=(i,n)=>{if(!n.grab)return;let r=new _i;r.inputSource=i,r.isDown=i.selectionDown,r.isUp=i.selectionUp,r.isPressed=i.selectionPressed,r.isClicked=i.selectionClick,this.handleEvents(n.grab,r);let s=e.get(i);if(e.set(i,null),s)for(let a=0;a<this.raisedPointerDownEvents.length;a++){let c=this.raisedPointerDownEvents[a];this.raisedPointerDownObjects[a]===s&&c&&(c.onPointerUp?.call(c,r),this.raisedPointerDownEvents.splice(a,1),this.raisedPointerDownObjects.splice(a,1),a--)}};let t=new xe;this._selectUpdateFn??=i=>{t.ray=i.getRay();let n=this.performRaycast(t);if(!n)return;let r=new _i;r.inputSource=i,this.handleIntersections(n,r)},se.addEventListener("select-start",this._selectStartFn),se.addEventListener("select-end",this._selectEndFn),se.addEventListener("update",this._selectUpdateFn),this.context.pre_update_callbacks.push(this.onBeforeUpdate.bind(this)),this.context.input.addEventListener("pointerdown",this.onPointerDown.bind(this))}onDisable(){se.removeEventListener("select-start",this._selectStartFn),se.removeEventListener("select-end",this._selectEndFn),se.removeEventListener("update",this._selectUpdateFn)}onPointerDown(){this.onBeforeUpdate()}lastPointerEvent=null;objectsHoveredThisFrame=[];objectsHoveredLastFrame=[];raisedPointerDownEvents=[];raisedPointerDownObjects=[];_didMove=!1;onBeforeUpdate(){if(this.objectsHoveredThisFrame.length=0,this.resetMeshUIStates(),V.IsInWebXR||this.context.input.isKeyPressed("Alt"))return;if(!this._didMove){let r=this.context.input.getPointerPositionRC(0);if(r&&r.x===0&&r.y===0)return;this._didMove=!0}let e=this.performRaycast(null),t=new _i(this.context.input.getPointerEvent(0));if(t.inputSource=this.context.input,t.isClicked=this.context.input.mouseClick,t.isDown=this.context.input.mouseDown,t.isUp=this.context.input.mouseUp,t.isPressed=this.context.input.mousePressed,this.lastPointerEvent=t,!e)return;let i=null,n=null;this.context.input.mouseDown&&this.currentActiveMeshUIComponents.length>0&&this.context.mainCameraComponent&&(i=R.getComponent(this.context.mainCameraComponent.gameObject,nt)??null,i&&(n=i.enabled,i.enabled=!1)),this.handleIntersections(e,t),i&&(this.orbitControl=i,this.orbitControl?.enabled?(this.orbitControlWasEnabled=this.orbitControl.enabled,this.orbitControl.enabled=!1):this.orbitControl&&!this.context.input.mousePressed&&(this.orbitControl.enabled=this.orbitControlWasEnabled,this.orbitControl=null))}_tempComponentsArray=[];onBeforeRender(){if(this.lastPointerEvent)this.lastPointerEvent.used=!1;else return;if(this.lastPointerEvent.isUp){for(let t of this.raisedPointerDownEvents)t.onPointerUp&&t.onPointerUp(this.lastPointerEvent);this.raisedPointerDownEvents.length=0,this.raisedPointerDownObjects.length=0}for(let t of this.objectsHoveredLastFrame)if(this.objectsHoveredThisFrame.indexOf(t)<0){this._tempComponentsArray.length=0;let i=R.getComponentsInParent(t,M,this._tempComponentsArray);this.lastPointerEvent.object=t;for(let n=0;n<i.length;n++){let r=i[n];if(!r.gameObject||r.destroyed)continue;let s=r;s.onPointerExit&&s.onPointerExit(this.lastPointerEvent)}}let e=this.objectsHoveredLastFrame;this.objectsHoveredLastFrame=this.objectsHoveredThisFrame,this.objectsHoveredThisFrame=e}_sortedHits=[];performRaycast(e){if(!this.raycaster)return null;this._sortedHits.length=0;for(let t of this.raycaster){if(!t.activeAndEnabled)continue;let i=t.performRaycast(e);i&&i.length>0&&this._sortedHits.push(...i)}return this._sortedHits.sort((t,i)=>t.distance-i.distance),this._sortedHits}handleIntersections(e,t){if(!e||e.length<=0)return!1;e=this.sortCandidates(e);for(let i of e){let{object:n}=i;if(this.handleEvents(n,t))return!0}return!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t<e.length;t++){let i=e[t],n=i.object;if(n.material&&n.material.depthTest===!1){this._noDepthTestingResults.push(i);continue}this._sortingBuffer.push(i)}for(let t of this._sortingBuffer)this._noDepthTestingResults.push(t);return this._noDepthTestingResults}handleEventsArray=[];out={};handleEvents(e,t){if(!this.testIsVisible(e))return t.isClicked&&R_&&console.log("not allowed",e),!1;let i=e;t.object=e,this.lastPointerEvent=t;let n=e.parent,r=!1,s=t.isClicked??!1,a=null;if(n&&n.isUI){let c=(t.isPressed||t.isClicked)??!1;if(n[bt]){let u=n[bt].gameObject;if(u){if(!wi.isInteractable(u,this.out))return this.out.canvasGroup?.interactable??!1;a=this.out.canvasGroup??null;let d=this.handleMeshUIIntersection(e,c);e=u,r=!0}}if(!r&&this.handleMeshUiObjectWithoutShadowDom(n,c))return!0}if(this.objectsHoveredThisFrame.push(e),a===null||a.interactable){let c=this.objectsHoveredLastFrame.indexOf(e)>=0;this.handleEventsArray.length=0;let u=R.getComponentsInParent(e,M,this.handleEventsArray);for(let l=0;l<u.length;l++){if(t.used)return!0;if(u[l].destroyed)continue;let d=u[l];d.interactable!==!1&&(d.onPointerEnter&&(c||d.onPointerEnter(t)),t.isDown&&d.onPointerDown&&!this.raisedPointerDownEvents.includes(d)&&(d.onPointerDown(t),this.raisedPointerDownEvents.push(d),this.raisedPointerDownObjects.push(i)),t.isUp&&d.onPointerUp&&d.onPointerUp(t),t.isClicked&&d.onPointerClick&&d.onPointerClick(t))}}return!0}handleMeshUiObjectWithoutShadowDom(e,t){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,t)}currentActiveMeshUIComponents=[];handleMeshUIIntersection(e,t){let i=xi.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&xi.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){let t=this.currentActiveMeshUIComponents[e];xi.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?R.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}},Ke=Xi;I(Ke,"_eventSystemMap",new Map),I(Ke,"didSearchEventSystem",!1);var xi=class{static markDirty(){this.needsUpdate=!0}static update(e,t){for(let i of this.lastUpdateFrame)if(i.context===t){if(t.time.frameCount===i.frame)return;i.frame=t.time.frameCount,(this.needsUpdate||t.time.frameCount<30)&&(this.needsUpdate=!1,e.update());return}this.lastUpdateFrame=[{context:t,frame:t.time.frameCount}],e.update()}static updateState(e,t){let i=null;if(e&&(i=this.findBlockInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;t?(this.lastSelected=i,i.states.pressed&&i.setState("pressed")):i.states.hovered&&i.setState("hovered"),this.needsUpdate=!0}return i}static resetLastSelected(){let e=this.lastSelected;!e||(this.lastSelected=null,this.resetState(e))}static resetState(e){if(!e)return;e.interactable===!1?e.states.disabled&&e.setState("disabled"):e===this.lastSelected&&e.states.selected?e.setState("selected"):e.setState("normal"),this.needsUpdate=!0}static findBlockInParent(e){return e?e.isBlock&&Object.keys(e.states).length>0?e:this.findBlockInParent(e.parent):null}};I(xi,"lastSelected",null),I(xi,"lastUpdateFrame",[]),I(xi,"needsUpdate",!1);import{AxesHelper as P_}from"three";var ts="./include";rc.Block.prototype.interactable={get(){return this.interactive},set(o){this.interactable=o}};var bt=Symbol("shadowDomOwner"),ze=class extends M{isRoot(){return this.Root?.gameObject===this.gameObject}markDirty(){Ke.markUIDirty(this.context)}shadowComponent=null;_controlsChildLayout=!0;get controlsChildLayout(){return this._controlsChildLayout}set controlsChildLayout(e){this._controlsChildLayout=e,this.shadowComponent&&(this.shadowComponent.autoLayout=e)}_root=void 0;get Root(){return this._root===void 0&&(this._root=R.getComponentInParent(this.gameObject,Mn)),this._root}_parentComponent=void 0;onEnable(){super.onEnable()}addShadowComponent(e,t){this.removeShadowComponent();let i=this.isRoot()?this.gameObject:this.gameObject.parent;if(this._parentComponent=R.getComponentInParent(i,ze),!this._parentComponent){console.warn(`Component "${this.name}" doesn't have a UI parent anywhere. Do you have a UI element outside a Canvas?`,this);return}e.name=this.name+" ("+(this.constructor.name??"UI")+")",e.autoLayout=this._parentComponent.controlsChildLayout,e[bt]=this,e.traverse(r=>{r[bt]===void 0&&(r[bt]=this)});let n=!1;if(this.Root?.gameObject===this.gameObject)this.gameObject.add(e);else{let r=this._parentComponent.shadowComponent;r&&(r?.add(e),n=!0)}this.shadowComponent=e,t&&t.shadowComponent&&this.shadowComponent&&t.shadowComponent.add(this.shadowComponent),Di&&e.add(new P_(.5)),this.onAfterAddedToScene(),n&&rc.update()}set(e){}traverseOwnedShadowComponents(e,t,i){if(!!e&&e[bt]===t){i(e);for(let n of e.children)this.traverseOwnedShadowComponents(n,t,i)}}removeShadowComponent(){this.shadowComponent&&this.shadowComponent.removeFromParent()}onAfterAddedToScene(){}setInteractable(e){this.shadowComponent&&(this.shadowComponent.interactable=e)}},Mn=class extends ze{awake(){super.awake()}};var wi=class{static getObject(e){let t=e[bt];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;let i=this.tryFindCanvasGroup(e);if(i?.isCanvasGroup===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;let n=si(e,r=>{if(r.isGraphic===!0)return r},!1);return t&&n?.isGraphic===!0&&(t.graphic=n),n?.raycastTarget!==!1}static tryFindCanvasGroup(e){if(!e)return null;let t=si(e,i=>{let n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}};var ha=P("debugwebxrcontroller");var Zr=class extends M{},je=class extends M{static CreateRaycastLine(){let e=new A_(this.geometry),t=e.material;return t.color=this.raycastColor,e.layers.set(2),e.name="line",e.scale.z=1,e}static CreateRaycastHitPoint(){let e=new H_(.5,22,22),t=new L_({color:this.raycastColor}),i=new D_(e,t);return i.visible=!1,i.layers.set(2),i}static Create(e,t,i,n){let r=i?R.addNewComponent(i,je,!1):new je;r.webXR=e,r.index=t,r.type=n;let s=e.context;r.controller=s.renderer.xr.getController(t),r.controllerGrip=s.renderer.xr.getControllerGrip(t),r.controllerModel=this.Factory.createControllerModel(r.controller),r.controllerGrip.add(r.controllerModel),r.hand=s.renderer.xr.getHand(t);let a=new V_;wn(a,s),r.webXR.handModelPath&&r.webXR.handModelPath!==""?a.setPath(Ii(e.sourceId,r.webXR.handModelPath)):a.setPath("https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/");let c=new B_(r.hand,a);return r.hand.add(c),r.hand.traverse(u=>u.layers.set(2)),r.handPointerModel=new U_(r.hand,r.controller),r.controller.addEventListener("connected",u=>{r.setControllerLayers(r.controllerModel,2),r.setControllerLayers(r.controllerGrip,2),r.setControllerLayers(r.hand,2),setTimeout(()=>{r.setControllerLayers(r.controllerModel,2),r.setControllerLayers(r.controllerGrip,2),r.setControllerLayers(r.hand,2)},1e3)}),r.hand.addEventListener("connected",u=>{if(u.data.hand){e.Rig&&e.Rig.add(r.hand),r.type=0,r.handPointerModel.traverse(h=>h.layers.set(2)),r.handPointerModel.pointerObject?.traverse(h=>h.layers.set(2));let d=r.hand.joints;if(d)for(let h of Object.keys(d)){let g=d[h];g.parent||r.hand.add(g)}}}),r}static addEventListener(e,t){let i=this.eventSubs[e]??[];i.push(t),this.eventSubs[e]=i}static removeEventListener(e,t){if(!t)return;let i=this.eventSubs[e]??[],n=i.indexOf(t);n>=0&&i.splice(n,1),this.eventSubs[e]=i}webXR;index=-1;controllerModel;controller;controllerGrip;hand;handPointerModel;grabbed=null;input=null;type=0;showRaycastLine=!0;get isUsingHands(){let e=this.input?.hand;return e!=null}get wrist(){if(!this.hand)return null;let e=this.hand.joints;return e?e.wrist:null}_wristQuaternion=null;getWristQuaternion(){let e=this.wrist;return e?(this._wristQuaternion||(this._wristQuaternion=new oc),me(e).multiply(this._wristQuaternion.setFromEuler(new M_(-Math.PI/4,0,0)))):null}movementVector=new Ei;worldRot=new oc;joystick=new F_;didRotate=!1;didTeleport=!1;didChangeScale=!1;lastHit=null;raycastLine=null;_raycastHitPoint=null;_connnectedCallback=null;_disconnectedCallback=null;_selectStartEvt=null;_selectEndEvt=null;get selectionDown(){return this._selectionPressed&&!this._selectionPressedLastFrame}get selectionUp(){return!this._selectionPressed&&this._selectionPressedLastFrame}get selectionPressed(){return this._selectionPressed}get selectionClick(){return this._selectionEndTime-this._selectionStartTime<.3}get raycastHitPoint(){return this._raycastHitPoint}_selectionPressed=!1;_selectionPressedLastFrame=!1;_selectionStartTime=0;_selectionEndTime=0;get useSmoothing(){return this._useSmoothing}_useSmoothing=!0;awake(){if(!this.controller){console.warn("Missing Controller!!!",this);return}this._connnectedCallback=this.onSourceConnected.bind(this),this._disconnectedCallback=this.onSourceDisconnected.bind(this),this._selectStartEvt=this.onSelectStart.bind(this),this._selectEndEvt=this.onSelectEnd.bind(this),this.type===1&&(this.controllerGrip.addEventListener("connected",this._connnectedCallback),this.controllerGrip.addEventListener("disconnected",this._disconnectedCallback),this.controller.addEventListener("selectstart",this._selectStartEvt),this.controller.addEventListener("selectend",this._selectEndEvt)),this.type===0&&(this.controller.addEventListener("selectstart",this._selectStartEvt),this.controller.addEventListener("selectend",this._selectEndEvt))}onDestroy(){this.type===1&&(this.controllerGrip.removeEventListener("connected",this._connnectedCallback),this.controllerGrip.removeEventListener("disconnected",this._disconnectedCallback),this.controller.removeEventListener("selectstart",this._selectStartEvt),this.controller.removeEventListener("selectend",this._selectEndEvt)),this.type===0&&(this.controller.removeEventListener("selectstart",this._selectStartEvt),this.controller.removeEventListener("selectend",this._selectEndEvt)),this.hand?.clear(),this.controllerGrip?.clear(),this.controller?.clear()}onEnable(){this.hand&&(this.hand.name="Hand"),this.controllerGrip&&(this.controllerGrip.name="ControllerGrip"),this.controller&&(this.controller.name="Controller"),this.raycastLine&&(this.raycastLine.name="RaycastLine;"),this.webXR.Controllers.indexOf(this)<0&&this.webXR.Controllers.push(this),this.raycastLine||(this.raycastLine=je.CreateRaycastLine()),this._raycastHitPoint||(this._raycastHitPoint=je.CreateRaycastHitPoint()),this.webXR.Rig?.add(this.hand),this.webXR.Rig?.add(this.controllerGrip),this.webXR.Rig?.add(this.controller),this.webXR.Rig?.add(this.raycastLine),this.raycastLine?.add(this._raycastHitPoint),this._raycastHitPoint.visible=!1,this.hand.add(this.handPointerModel),ha&&console.log("ADDED TO RIG",this.webXR.Rig)}onDisable(){this.hand?.removeFromParent(),this.controllerGrip?.removeFromParent(),this.controller?.removeFromParent(),this.raycastLine?.removeFromParent(),this._raycastHitPoint?.removeFromParent();let e=this.webXR.Controllers.indexOf(this);e>=0&&this.webXR.Controllers.splice(e,1)}_isConnected=!1;onSourceConnected(e){if(this._isConnected){console.warn("Received connected event for controller that is already connected",this.index,e);return}this._isConnected=!0,this.input=e.data,this.type===1&&(this.onSelectStart(),this.createPointerEvent("down"))}onSourceDisconnected(e){if(!this._isConnected){console.warn("Received discnnected event for controller that is not connected",e);return}this._isConnected=!1,this.type===1&&(this.onSelectEnd(),this.createPointerEvent("up")),this.input=null}createPointerEvent(e){switch(e){case"down":this.context.input.createPointerDown({clientX:0,clientY:0,button:this.index,pointerType:"touch"});break;case"move":break;case"up":this.context.input.createPointerUp({clientX:0,clientY:0,button:this.index,pointerType:"touch"});break}}rayRotation=new oc;update(){this.context.time.frameCount%60===0&&(this.setControllerLayers(this.controller,2),this.setControllerLayers(this.controllerGrip,2),this.setControllerLayers(this.hand,2));let e=je.eventSubs["update"];if(e&&e.length>0)for(let n of e)n(this);let t=1;this.type===0?t=this.context.time.deltaTime/.1:this.isUsingHands&&this.handPointerModel.pinched&&(t=this.context.time.deltaTime/.3),this.rayRotation.slerp(me(this.controller),this.useSmoothing?t:1);let i=B(this.controller);if(this.isUsingHands&&this.handPointerModel.cursorObject&&(this.handPointerModel.cursorObject.visible=!1),this.raycastLine){let n=this.showRaycastLine&&this.type!==1;if(this.type===1)this.raycastLine.visible=!1;else if(this.isUsingHands){this.raycastLine.visible=!this.grabbed&&n,te(this.raycastLine,i);let r=this.hand.joints;if(r&&r.wrist&&this.grabbed&&this.grabbed.isCloseGrab){let a=this.getWristQuaternion();a&&this.rayRotation.copy(a)}$e(this.raycastLine,this.rayRotation)}else this.raycastLine.visible=n,$e(this.raycastLine,this.rayRotation),te(this.raycastLine,i)}this.lastHit=this.updateLastHit(),this.grabbed&&this.grabbed.update(),this._selectionPressedLastFrame=this._selectionPressed,this.selectStartCallback&&this.selectStartCallback()}_pinchStartTime=void 0;onUpdate(e){if(this.lastHit=null,!e||e.inputSources.length<=this.index){this.input=null;return}if(this.type===0&&(this.input=e.inputSources[this.index]),!this.input)return;let t=this.webXR.Rig;if(!t)return;this._didNotEndSelection&&!this.handPointerModel.pinched&&(this._didNotEndSelection=!1,this.onSelectEnd()),this.updateStick(this.input);let i=this.input?.gamepad?.buttons;switch(this.input.handedness){case"left":let n=3*je.MovementSpeedFactor,r=2,s=H.clamp01(this.joystick.length()*2),a=this.joystick.x>0?1:-1,c=Math.pow(this.joystick.x,r);c*=a,c*=s;let u=this.joystick.y>0?1:-1,l=Math.pow(this.joystick.y,r);l*=u,c*=s,t.getWorldQuaternion(this.worldRot),this.movementVector.set(c,0,l),this.movementVector.applyQuaternion(this.webXR.TransformOrientation),this.movementVector.y=0,this.movementVector.applyQuaternion(this.worldRot),this.movementVector.multiplyScalar(n*this.context.time.deltaTime),t.position.add(this.movementVector),this.isUsingHands&&this.runTeleport(t,i);break;case"right":let d=this.joystick.x,h=Math.abs(d);if(h<.4)this.didRotate=!1;else if(h>.5&&!this.didRotate){let g=d>0?-1:1;t.rotateY(H.toRadians(30*g)),this.didRotate=!0}this.runTeleport(t,i);break}}runTeleport(e,t){let i=-this.joystick.y;if(this.hand?.visible&&!this.grabbed){let a=this.handPointerModel.isPinched();a&&this._pinchStartTime===void 0&&(this._pinchStartTime=this.context.time.time),a&&this._pinchStartTime&&this.context.time.time-this._pinchStartTime>.8&&(i=this.handPointerModel.isPinched()?1:0),a||(this._pinchStartTime=void 0)}else this._pinchStartTime=void 0;let n=i>.5&&this.webXR.IsInVR,r=this.webXR.Rig?this.webXR.Rig?.scale?.x<.999:!1,s=null;if(t&&this.input&&!this.input.hand)for(let a=0;a<t.length;a++){let c=t[a];if(a===4)if(c.pressed&&!this.didChangeScale&&this.webXR.IsInVR){this.didChangeScale=!0;let u=this.webXR.Rig;if(u)if(r){r=!1,u.scale.set(1,1,1),s=1,je.MovementSpeedFactor=1;let l=this.context.mainCamera;je.PreviousCameraFarDistance&&(l.far=je.PreviousCameraFarDistance)}else{r=!0,n=!0,s=.1,je.MovementSpeedFactor=s*2;let l=this.context.mainCamera;je.PreviousCameraFarDistance=l.far,l.far/=s}}else c.pressed||(this.didChangeScale=!1)}if(n){if(!this.didTeleport){let a=this.raycast();if(this.didTeleport=!0,a&&a.length>0){let c=a[0];if(r||this.isValidTeleportTarget(c.object)){let u=c.point;te(e,u)}}}}else i<.1&&(this.didTeleport=!1);s!==null&&(e.scale.set(s,s,s),e.updateMatrixWorld())}isValidTeleportTarget(e){return R.getComponentInParent(e,Zr)!=null}updateStick(e){!e||!e.gamepad||e.gamepad.axes?.length<4||(this.joystick.x=e.gamepad.axes[2],this.joystick.y=e.gamepad.axes[3])}updateLastHit(){let e=this.raycast(),t=e?e[0]:null;this.lastHit=t;let i=1;if(this.webXR.Rig&&(i/=this.webXR.Rig.scale.x),this.raycastLine){this.raycastLine.scale.z=i*(this.lastHit?.distance??9999);let n=this.raycastLine.material;t!=null?n.color=je.raycastColor:n.color=je.raycastNoHitColor}if(this._raycastHitPoint){if(this.lastHit!=null){this._raycastHitPoint.position.z=-1;let n=H.clamp(this.lastHit.distance*.01*i,.015,.1);this._raycastHitPoint.scale.set(n,n,n)}this._raycastHitPoint.visible=this.lastHit!==null&&this.lastHit!==void 0}return t}onSelectStart(){!this.context.connection.allowEditing||(this.selectStartCallback=()=>this.onHandleSelectStart())}selectStartCallback=null;lastSelectStartObject=null;onHandleSelectStart(){this.selectStartCallback=null,this._selectionPressed=!0,this._selectionStartTime=this.context.time.time,this._selectionEndTime=1e3;let e=null,t=!1;if(this.isUsingHands?(e=this.overlap(),e.length<=0?(e=this.raycast(),t=!1):t=!0):e=this.raycast(),ha&&console.log("onHandleSelectStart","close grab? "+t,"intersections",e),e&&e.length>0)for(let i of e){let n=i.object;this.lastSelectStartObject=n;let r={selected:n,grab:n},s=je.eventSubs["select-start"];if(s&&s.length>0)for(let a of s)a(this,r);r.grab!==n&&ha&&console.log("Grabbed object changed","original",n,"new",r.grab),r.grab&&(this.grabbed=vt.TryTake(this,r.grab,i,t));break}else{let i=je.eventSubs["select-start"],n={selected:null,grab:null};if(i&&i.length>0)for(let r of i)r(this,n)}}_didNotEndSelection=!1;onSelectEnd(){if(this.isUsingHands&&this.handPointerModel.pinched){this._didNotEndSelection=!0;return}if(!this._selectionPressed)return;this.selectStartCallback=null,this._selectionPressed=!1,this._selectionEndTime=this.context.time.time;let e={grab:this.grabbed?.selected??this.lastSelectStartObject},t=je.eventSubs["select-end"];if(t&&t.length>0)for(let i of t)i(this,e);this.grabbed&&(this.grabbed.free(),this.grabbed=null)}testIsVisible(e){return!(!e||R.isActiveInHierarchy(e)===!1||wi.isInteractable(e)===!1)}setControllerLayers(e,t){if(!!e&&(e.layers.set(t),e.children))for(let i of e.children)this.grabbed?.selected===i||this.grabbed?.selectedMesh===i||this.setControllerLayers(i,t)}getRay(){let e=new j_;return e.origin.copy(B(this.controller)),e.direction.set(0,0,-1).applyQuaternion(this.rayRotation),e}closeGrabBoundingBoxHelper;overlap(){let e=this.isUsingHands&&this.handPointerModel?this.handPointerModel.pointerObject:this.controllerGrip;if(ha&&(!this.closeGrabBoundingBoxHelper&&e&&(this.closeGrabBoundingBoxHelper=new O_(e,16776960),this.scene.add(this.closeGrabBoundingBoxHelper)),this.closeGrabBoundingBoxHelper&&e&&this.closeGrabBoundingBoxHelper.setFromObject(e)),!e)return new Array;let t=B(e).clone();return this.context.physics.sphereOverlap(t,.02)}raycast(){let e=new xe;e.layerMask=new I_,e.layerMask.set(0),e.layerMask.disable(2),e.ray=this.getRay();let t=this.context.physics.raycast(e);for(let i=0;i<t.length;i++){let n=t[i],r=n.object;if(!this.testIsVisible(r)){t.splice(i,1),i--;continue}n.object=wi.getObject(r);break}return t}},se=je;I(se,"Factory",new G_),I(se,"raycastColor",new Rm(.9,.3,.3)),I(se,"raycastNoHitColor",new Rm(.6,.6,.6)),I(se,"geometry",new k_().setFromPoints([new Ei(0,0,0),new Ei(0,0,-1)])),I(se,"handModels",{}),I(se,"eventSubs",{}),I(se,"PreviousCameraFarDistance"),I(se,"MovementSpeedFactor",1);var st=class{static AddEventListener(e,t){return st.Events[e]||(st.Events[e]=[]),st.Events[e].push(t),t}static RemoveEventListener(e,t){if(!t||!st.Events[e])return;let i=st.Events[e].indexOf(t);i>=0&&st.Events[e].splice(i,1)}static Register(e){this.Current.find(t=>t===e)||this.Current.push(e)}static Remove(e){let t=this.Current.indexOf(e);t>=0&&this.Current.splice(t,1)}static TryTake(e,t,i,n){let r=R.getComponentInParent(t,Vt);if(r)t=r.gameObject;else return ha&&console.warn("Prevented taking object that is not interactable",t),null;let s=t,a=R.getComponentInParent(t,Pt);a&&(a.requestOwnership(),s=a.gameObject);for(let u of this.Current)if(u.selected===s)return u.controller===e||(u.free(),u.Take(e,s,t,a,r,i,n)),u;let c=new st;return c.Take(e,s,t,a,r,i,n),c}sync=null;selected=null;selectedParent=null;selectedMesh=null;controller=null;grabTime=0;grabUUID="";isCloseGrab=!1;originalMaterial=null;usageMarker=null;rigidbodies=null;didReparent=!1;grabDistance=0;interactable=null;positionSource=null;Take(e,t,i,n,r,s,a){if(console.assert(t!==null,"Expected object to be taken but was",t),e.isUsingHands?this.positionSource=a?e.wrist:e.controller:this.positionSource=e.controller,!this.positionSource)return console.warn("No position source"),this;let c={controller:e,take:t,hit:i,sync:n,interactable:r};st.Events.WillTake?.forEach(g=>g(this,c));let u=i;u?.material&&(this.originalMaterial=u.material,Array.isArray(u.material)||(u.material=u.material.clone(),u.material&&u.material.emissive&&(u.material.emissive.b=.2))),this.selected=t,this.selectedParent||(this.selectedParent=t.parent),this.selectedMesh=u,this.controller=e,this.interactable=r,this.isCloseGrab=a,this.didReparent=!1,this.sync=n,this.grabTime=e.context.time.time,this.grabUUID=Date.now().toString(),this.usageMarker=R.addNewComponent(this.selected,zt),this.rigidbodies=R.getComponentsInChildren(this.selected,J),B(this.positionSource,this.lastControllerWorldPos);let l=()=>a?this.lastControllerWorldPos.clone():s.point.clone();this.grabDistance=l().distanceTo(this.lastControllerWorldPos),this.totalChangeAlongDirection=0,this.localPositionOffsetToGrab=this.selected.worldToLocal(l());let d=e.isUsingHands&&a?this.controller.getWristQuaternion().clone():e.rayRotation.clone();me(this.selected,this.localQuaternionToGrab).premultiply(d.invert());let h=this.controller.webXR.Rig;return h&&this.rigPositionLastFrame.copy(B(h)),ve.Add(e.context,this.selected),st.Register(this),this.sync&&(this.sync.fastMode=!0),st.Events.DidTake?.forEach(g=>g(this,c)),this}free(){if(!this.selected)return;let e={controller:this.controller,take:this.selected,hit:this.selected,sync:this.sync,interactable:null};st.Events.WillFree?.forEach(n=>n(this,e)),ve.Remove(this.controller.context,this.selected),st.Remove(this),this.sync&&(this.sync.fastMode=!1);let t=this.selectedMesh;t&&this.originalMaterial&&t.material&&(t.material=this.originalMaterial);let i=this.selected;if(this.didReparent&&i.parent){let n=this.selectedParent;n?n.attach(i):this.controller?.context.scene.attach(i)}if(this.usageMarker?.destroy(),this.controller&&(this.controller.grabbed=null),this.selected=null,this.selectedParent=null,this.selectedMesh=null,this.sync=null,this.rigidbodies)for(let n of this.rigidbodies)n.wakeUp(),n.setVelocity(n.smoothedVelocity);this.rigidbodies=null,this.localPositionOffsetToGrab=null,this.quaternionLerp=null,st.Events.DidFree?.forEach(n=>n(this,e))}grabPoint=new Ei;localPositionOffsetToGrab=null;localPositionOffsetToGrab_worldSpace=new Ei;localQuaternionToGrab=new oc(0,0,0,1);targetDir=null;quaternionLerp=null;controllerDir=new Ei;controllerWorldPos=new Ei;lastControllerWorldPos=new Ei;controllerPosDelta=new Ei;totalChangeAlongDirection=0;rigPositionLastFrame=new Ei;controllerMovementSinceLastFrame(){if(!this.positionSource||!this.controller)return 0;this.controllerDir.set(0,0,-1),this.controllerDir.applyQuaternion(this.controller.rayRotation),B(this.positionSource,this.controllerWorldPos),this.controllerPosDelta.copy(this.controllerWorldPos),this.controllerPosDelta.sub(this.lastControllerWorldPos),this.lastControllerWorldPos.copy(this.controllerWorldPos);let e=this.controller.webXR.Rig;if(e){let i=B(e),n=this.rigPositionLastFrame.sub(i);this.controllerPosDelta.add(n),this.rigPositionLastFrame.copy(i)}return this.controllerDir.dot(this.controllerPosDelta)}update(){if(this.rigidbodies)for(let e of this.rigidbodies)e.resetVelocities();if(this.sync&&this.controller&&this.controller.context.connection.isInRoom&&this.controller.context.time.time-this.grabTime>3&&this.sync.hasOwnership()===!1&&(console.log("no ownership, will leave",this.sync.guid),this.free()),!(this.interactable&&!this.interactable.canGrab)){if(!this.didReparent&&this.selected&&this.controller){let e=this.controller.webXR.Rig?.scale.x??1;this.totalChangeAlongDirection+=this.controllerMovementSinceLastFrame();let t=1;this.controller.type===0&&(t=Math.max(0,1+this.totalChangeAlongDirection*2/e),t=t*t*t),this.grabDistance/e<.8&&(t=1),this.targetDir||(this.targetDir=new Ei),this.targetDir.set(0,0,-this.grabDistance*t);let i=this.targetDir.applyQuaternion(this.controller.rayRotation).add(this.controllerWorldPos),n=this.controller.rayRotation.clone().multiplyQuaternions(this.controller.rayRotation,this.localQuaternionToGrab);this.quaternionLerp||(this.quaternionLerp=n.clone()),this.quaternionLerp.slerp(n,this.controller.useSmoothing?this.controller.context.time.deltaTime/.03:1),$e(this.selected,this.quaternionLerp),this.selected.updateWorldMatrix(!1,!1),this.grabPoint.copy(i),this.localPositionOffsetToGrab&&(this.localPositionOffsetToGrab_worldSpace.copy(this.localPositionOffsetToGrab),this.selected.localToWorld(this.localPositionOffsetToGrab_worldSpace).sub(B(this.selected)),i.sub(this.localPositionOffsetToGrab_worldSpace)),te(this.selected,i)}if(this.rigidbodies!=null)for(let e of this.rigidbodies)e.wakeUp();re.markDirty(this.selected,!0)}}},vt=st;I(vt,"Events",{}),I(vt,"Current",[]);import{Object3D as Sm}from"three";var z_=P("debugmouth"),dr=class extends M{idle=[];talking=[];marker=null;voip=null;lastMouthChangeTime=0;mouthChangeLength=0;awake(){setTimeout(()=>{this.voip=R.findObjectOfType(ot,this.context),this.marker||(this.marker=R.getComponentInParent(this.gameObject,le))},3e3)}update(){if(!this.voip||this.context.time.frameCount%10!==0)return;let e=this.marker?.connectionId??null;if(!e){z_&&(e=null);return}let t=this.voip.getFrequency(e)??0;this.updateLips(t)}updateLips(e){if(this.context.time.time-this.lastMouthChangeTime>this.mouthChangeLength){if(this.mouthChangeLength=.05+Math.random()*.1,this.talking&&this.talking.length>0&&e>30){this.lastMouthChangeTime=this.context.time.time;let t=Math.floor(Math.random()*this.talking.length);this.setMouthShapeActive(this.talking,t)}else if(this.idle.length>0&&this.context.time.time-this.lastMouthChangeTime>.5){this.lastMouthChangeTime=this.context.time.time;let t=Math.floor(Math.random()*this.idle.length);this.setMouthShapeActive(this.idle,t)}}}setMouthShapeActive(e,t){if(!!e){e!=this.idle?this.idle.map(i=>i.visible=!1):this.talking.map(i=>i.visible=!1);for(let i=0;i<e.length;i++){let n=e[i];n&&(n.visible=i===t)}}}};v([y(Sm)],dr.prototype,"idle",2),v([y(Sm)],dr.prototype,"talking",2);var is=class extends M{voip=null;marker=null;_startPosition=null;awake(){this.voip=R.findObjectOfType(ot,this.context),this.marker=R.getComponentInParent(this.gameObject,le)}update(){if(!this.voip||!this.marker||this.context.time.frameCount%10!==0)return;let e=this.marker.connectionId,t=this.voip.getFrequency(e);if(t==null)return;this._startPosition||(this._startPosition=this.gameObject.position.clone());let i=t/100;this.gameObject.position.y=this._startPosition.y+i*.07}};import{Object3D as W_}from"three";var Qi=class extends M{eyes=[];lastBlinkTime=0;blinkLength=0;eyesOpen=!0;state=null;awake(){this.state=R.getComponentInParent(this.gameObject,Ce)}update(){if(!this.gameObject||!this.gameObject.visible||!this.eyes||!Array.isArray(this.eyes)||this.eyes.length===0)return;if(this.context.time.time-this.lastBlinkTime>this.blinkLength){if(this.lastBlinkTime=this.context.time.time,this.state&&!this.state.isOn||!this.activeAndEnabled)return;if(this.eyesOpen=!this.eyesOpen,this.blinkLength=Math.random(),this.eyesOpen?(this.blinkLength*=3,this.blinkLength+=.5,Math.random()<.1&&(this.blinkLength=.1+Math.random()*.2)):(this.blinkLength*=Math.random()*.2,this.blinkLength+=.1),Math.random()<.1&&(this.blinkLength*=3),this.blinkLength=Math.max(.2,this.blinkLength),this.blinkLength=Math.min(3,this.blinkLength),this.eyes)for(let t of this.eyes)t&&(t.visible=this.eyesOpen)}}};v([y(W_)],Qi.prototype,"eyes",2),v([y()],Qi.prototype,"lastBlinkTime",2),v([y()],Qi.prototype,"blinkLength",2),v([y()],Qi.prototype,"eyesOpen",2);import*as sc from"three";import{Object3D as Ld}from"three";var jd=class extends M{head=null;eyes=null;target=null;brain=null;awake(){this.brain||(this.brain=R.getComponentInParent(this.gameObject,Pn)),this.brain||(console.log("No look at brain found, adding it now"),this.brain=R.addNewComponent(this.gameObject,Pn)),this.brain&&this.target&&(this.brain.controlledTarget=this.target)}vec=new sc.Vector3;currentTargetPoint=new sc.Vector3;update(){let e=this.target;if(e&&this.head){let t=this.eyes;if(t){let i=B(e);this.currentTargetPoint.lerp(i,this.context.time.deltaTime/.1);let n=B(this.head),r=this.vec.copy(this.currentTargetPoint).sub(n).normalize();if(r.length()<.1)return;let s=jd.forward;if(s.set(0,0,1),s.applyQuaternion(me(this.head)),s.dot(r)>.45)for(let c=0;c<t.length;c++)t[c].lookAt(this.currentTargetPoint)}}}},qi=jd;I(qi,"forward",new sc.Vector3(0,0,1)),v([y(Ld)],qi.prototype,"head",2),v([y(Ld)],qi.prototype,"eyes",2),v([y(Ld)],qi.prototype,"target",2);import{AxesHelper as N_}from"three";var In=class extends M{length=1;depthTest=!0;isGizmo=!0;_axes=null;onEnable(){if(this.isGizmo&&!Di)return;this._axes||(this._axes=new N_(this.length)),this.gameObject.add(this._axes);let e=this._axes.material;e&&e.depthTest!==void 0&&(e.depthTest=this.depthTest)}onDisable(){!this._axes||this.gameObject.remove(this._axes)}};v([y()],In.prototype,"length",2),v([y()],In.prototype,"depthTest",2),v([y()],In.prototype,"isGizmo",2);import*as Pm from"three";var ns=class extends M{from;to;hint;desiredDistance=1;onEnable(){}update(){if(!this.from||!this.to||!this.hint)return;let e=B(this.to).clone(),t=B(this.from).clone(),i=e.distanceTo(t),n=e.clone();n.sub(t);let r=t.clone();r.add(e),r.multiplyScalar(.5);let s=B(this.hint).clone();s.sub(r);let a=new Pm.Vector3;a.crossVectors(s,n),a.crossVectors(n,a),a.normalize();let c=i*.5,u=Math.max(this.desiredDistance,c),l=Math.sqrt(u*u-c*c),d=a.clone();d.multiplyScalar(l),d.add(r),te(this.gameObject,d);let h=r.clone();h.sub(a),this.gameObject.lookAt(h)}};import{Mesh as X_,Vector3 as hr}from"three";var Ot=class extends M{get isCollider(){return!0}attachedRigidbody=null;isTrigger=!1;sharedMaterial;awake(){super.awake(),this.attachedRigidbody||(this.attachedRigidbody=this.gameObject.getComponentInParent(J))}start(){this.attachedRigidbody||(this.attachedRigidbody=this.gameObject.getComponentInParent(J))}onEnable(){this.attachedRigidbody||(this.attachedRigidbody=this.gameObject.getComponentInParent(J))}onDisable(){this.context.physics.removeBody(this)}};v([y(J)],Ot.prototype,"attachedRigidbody",2),v([y()],Ot.prototype,"isTrigger",2),v([y()],Ot.prototype,"sharedMaterial",2);var pr=class extends Ot{radius=.5;center=new hr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addSphereCollider(this,this.center,this.radius)}};v([y()],pr.prototype,"radius",2),v([y(hr)],pr.prototype,"center",2);var fr=class extends Ot{size=new hr(1,1,1);center=new hr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addBoxCollider(this,this.center,this.size)}};v([y(hr)],fr.prototype,"size",2),v([y(hr)],fr.prototype,"center",2);var $r=class extends Ot{sharedMesh;convex=!1;onEnable(){super.onEnable(),this.sharedMesh?.isMesh||this.gameObject instanceof X_&&(this.sharedMesh=this.gameObject),this.sharedMesh?.isMesh&&this.context.physics.addMeshCollider(this,this.sharedMesh,this.convex,Ae(this.gameObject))}};v([y()],$r.prototype,"convex",2);var Xt=class extends Ot{center=new hr(0,0,0);radius=.5;height=2;onEnable(){super.onEnable(),this.context.physics.addCapsuleCollider(this,this.center,this.height,this.radius)}};v([y(hr)],Xt.prototype,"center",2),v([y()],Xt.prototype,"radius",2),v([y()],Xt.prototype,"height",2);import*as eo from"three";var Q_=P("gizmos"),q_=P("debugboxhelper"),Qt=class extends M{box=null;_lastMatrixUpdateFrame=-1;isInBox(e,t){if(!e)return;if(this.box||(this.box=new eo.Box3),e.type==="Mesh")Qt.testBox.setFromObject(e);else if(e.type==="Group"){if(Qt.testBox.makeEmpty(),e.children.length>0)for(let n=0;n<e.children.length;n++)e.children[n].type==="Mesh"&&Qt.testBox.expandByObject(e)}else{let n=B(e,Qt._position),r=Ae(e,Qt._size);t!==void 0&&r.multiplyScalar(t),Qt.testBox.setFromCenterAndSize(n,r)}this.updateBox();let i=this.box?.intersectsBox(Qt.testBox);return i&&q_&&Et.DrawBox3(Qt.testBox,16711680,5),i}intersects(e){return e?this.updateBox(!1).intersectsBox(e):!1}updateBox(e=!1){if(this.box||(this.box=new eo.Box3),e||this.context.time.frameCount!=this._lastMatrixUpdateFrame){let t=this._lastMatrixUpdateFrame<0;this._lastMatrixUpdateFrame=this.context.time.frameCount;let i=t,n=B(this.gameObject,Qt._position,i),r=Ae(this.gameObject,Qt._size);this.box.setFromCenterAndSize(n,r)}return this.box}_helper=null;_color=null;awake(){this._helper=null,this._color=null,this.box=null}showHelper(e=null,t=!1){if(!(!Q_&&!t)){if(this._helper){e&&this._color?.set(e),this.gameObject.add(this._helper);return}this._helper=al(e),this.gameObject.add(this._helper)}}},We=Qt;I(We,"testBox",new eo.Box3),I(We,"_position",new eo.Vector3),I(We,"_size",new eo.Vector3(.01,.01,.01));import{Color as $_,Texture as Lm}from"three";import{LinearEncoding as J_,sRGBEncoding as Z_}from"three";import*as Bd from"three-mesh-ui";import{Matrix4 as Y_,Object3D as K_,Vector2 as Am,Vector3 as Fd}from"three";import{FrontSide as Om,DoubleSide as km}from"three";function Hd(o){let e=o[bt];return e||(o.parent?Hd(o.parent):null)}function rs(o,e){if(!o)return;let t=o.material;t?.isMaterial===!0&&(t.depthTest=!e.renderOnTop,t.side=e.doubleSided??!0?km:Om,t.depthWrite=e.depthWrite??!1,t.shadowSide=e.doubleSided?km:Om,o.castShadow=e.castShadows?e.castShadows:!1,o.receiveShadow=e.receiveShadows?e.receiveShadows:!1);for(let i of o.children)rs(i,e)}function ac(o,e,t){o[e]===void 0&&console.warn("Field",e,"is undefined on",o);let i=Proxy.revocable(o[e],{set(s,a,c,u){let l=s[a],d=Reflect.set(s,a,c,u);return t(c,l),d}}),n=i.revoke,r=o[e];return i.revoke=()=>{o[e]=r,n()},o[e]=i.proxy,i}var Mm=Symbol("Scheduled action");function Im(o,e,t=3){let i=o[Mm];i||(i=o[Mm]={});let n=e.name;i[t]||(i[t]={});let r=i[t];if(r[n])return;function*a(){e?.call(o),r[n]=null}let c=o.startCoroutine(a(),t);r[n]=c}var Dm=P("debugui"),os=class{width;height},to=class{x;y;width;height},yt=class extends ze{offset=.01;get translation(){return this.gameObject.position}get rotation(){return this.gameObject.quaternion}get scale(){return this.gameObject.scale}_anchoredPosition;get anchoredPosition(){return this._anchoredPosition||(this._anchoredPosition=new Fd),this._anchoredPosition}rect;sizeDelta;anchoredPosition3D;pivot;lastMatrix;rectBlock;_transformNeedsUpdate=!1;awake(){super.awake(),this.lastMatrix=new Y_,this.rectBlock=new K_,this.rectBlock.position.z=.1,this.rectBlock.name=this.name,this._anchoredPosition||(this._anchoredPosition=new Fd),ac(this,"_anchoredPosition",()=>{this._transformNeedsUpdate=!0})}onEnable(){super.onEnable(),this.addShadowComponent(this.rectBlock),this._transformNeedsUpdate=!0}onDisable(){super.onDisable(),this.removeShadowComponent()}applyTransform(){let e=this.shadowComponent;!e||(this._transformNeedsUpdate=!1,this.isRoot()?e.rotation.y=Math.PI:(e.position.copy(this.gameObject.position),e.position.x*=-1,e.position.z*=-1,e.position.z-=this.offset,e.quaternion.copy(this.gameObject.quaternion),e.rotation.x*=-1,e.rotation.z*=-1,e.scale.copy(this.gameObject.scale)),this.applyAnchoring(e.position),this.lastMatrix.copy(this.gameObject.matrix))}markDirty(){this._transformNeedsUpdate=!0}onBeforeRender(){(this._transformNeedsUpdate||this.lastMatrix.equals(this.gameObject.matrix)===!1)&&(Dm&&console.log("updating",this.name),this.applyTransform()),Ke.ensureUpdateMeshUI(Bd,this.context)}applyAnchoring(e){if(this.pivot&&this.sizeDelta){let t=this.pivot.x*2-1,i=this.pivot.y*2-1;i-=this.anchoredPosition.y*.05;let n=this.sizeDelta.x*t,r=this.sizeDelta.y*i;e.x-=n*.5,e.y-=r*.5}}getBasicOptions(){let e={width:this.rect.width,height:this.rect.height,offset:this.offset,backgroundOpacity:0,borderWidth:0,borderRadius:0,borderOpacity:0};return this.ensureValidSize(e),e}ensureValidSize(e,t=1e-4){return e.width<=0&&(e.width=t),e.height<=0&&(e.height=1e-4),e}_createdBlocks=[];createNewBlock(e){e={...this.getBasicOptions(),...e},Dm&&console.log(this.name,e);let t=new Bd.Block(e);return this._createdBlocks.push(t),t}};v([y(to)],yt.prototype,"rect",2),v([y(Am)],yt.prototype,"sizeDelta",2),v([y(Fd)],yt.prototype,"anchoredPosition3D",2),v([y(Am)],yt.prototype,"pivot",2);var pa=class extends ze{get isGraphic(){return!0}get color(){return this._color||(this._color=new Q(1,1,1,1)),this._color}set color(e){(!this._color||this._color.r!==e.r||this._color.g!==e.g||this._color.b!==e.b||this._color.alpha!==e.alpha)&&(this._color||(this._color=new Q(1,1,1,1)),this._color.copy(e))}onColorChanged(){let e=this.color;this.setOptions({backgroundColor:e,backgroundOpacity:e.alpha,borderOpacity:e.alpha})}get m_Color(){return this._color}raycastTarget=!0;uiObject=null;_color=null;_rect=null;get rectTransform(){return this._rect||(this._rect=R.getComponent(this.gameObject,yt)),this._rect}setState(e){this.makePanel(),this.uiObject&&this.uiObject.setState(e)}setupState(e){this.makePanel(),this.uiObject&&this.uiObject.setupState(e)}setOptions(e){this.makePanel(),this.uiObject&&(this.uiObject.set(e),(e.backgroundColor!==void 0||e.backgroundOpacity!==void 0)&&this.uiObject.updateBackgroundMaterial?.call(this.uiObject))}awake(){super.awake(),this.makePanel(),ac(this,"_color",()=>Im(this,this.onColorChanged))}onEnable(){super.onEnable(),this.uiObject&&(this.rectTransform.shadowComponent?.add(this.uiObject),this.addShadowComponent(this.uiObject,this.rectTransform))}onDisable(){super.onDisable(),this.uiObject&&this.removeShadowComponent()}_currentlyCreatingPanel=!1;makePanel(){if(this.uiObject||this._currentlyCreatingPanel)return;this._currentlyCreatingPanel=!0;let e={backgroundColor:this.color,backgroundOpacity:this.color.alpha,offset:1};this.onBeforeCreate(e),this.onCreate(e),this.controlsChildLayout=!1,this._currentlyCreatingPanel=!1,this.onAfterCreated()}onBeforeCreate(e){}onCreate(e){this.uiObject=this.rectTransform.createNewBlock(e),this.uiObject.name=this.name}onAfterCreated(){}async setTexture(e){if(!!e&&(this.setOptions({backgroundOpacity:0}),e)){if(e.encoding===Z_)if(pa.textureCache.has(e))e=pa.textureCache.get(e);else{let t=e.clone();t.encoding=J_,pa.textureCache.set(e,t),e=t}this.setOptions({backgroundTexture:e,borderRadius:0,backgroundOpacity:this.color.alpha,backgroundSize:"stretch"})}}onAfterAddedToScene(){super.onAfterAddedToScene(),this.shadowComponent&&(this.shadowComponent.offset=this.shadowComponent.position.z)}},_t=pa;I(_t,"textureCache",new Map),v([y(Q)],_t.prototype,"color",1),v([y()],_t.prototype,"raycastTarget",2);var An=class extends _t{_flippedObject=!1;onAfterCreated(){this.uiObject&&!this._flippedObject&&(this._flippedObject=!0,this.uiObject.scale.y*=-1)}};var lc=class{texture;rect};v([y(Lm)],lc.prototype,"texture",2);var Dn=class extends An{get sprite(){return this._sprite}set sprite(e){this._sprite!==e&&(this._sprite=e,this.onAfterCreated())}_sprite;isBuiltinSprite(){switch(this.sprite?.texture?.name){case"InputFieldBackground":case"UISprite":case"Background":return!0}return this.sprite?.texture?.image?.width===32&&this.sprite?.texture?.image?.height===32}onBeforeCreate(e){this.isBuiltinSprite()&&(e.borderRadius=5,e.borderColor=new $_(.4,.4,.4),e.borderOpacity=this.color.alpha,e.borderWidth=.3)}onAfterCreated(){!this.__didAwake||(super.onAfterCreated(),!this.isBuiltinSprite()&&this.setTexture(this.sprite?.texture))}};v([y(lc)],Dn.prototype,"sprite",1);var io=class extends An{get mainTexture(){return this._mainTexture}set mainTexture(e){this._mainTexture!==e&&(this._mainTexture=e,this.onAfterCreated())}_mainTexture;onAfterCreated(){!this.__didAwake||(super.onAfterCreated(),this.setTexture(this.mainTexture))}};v([y(Lm)],io.prototype,"mainTexture",1);var ss=P("debugbutton");var Ln=class{colorMultiplier;disabledColor;fadeDuration;highlightedColor;normalColor;pressedColor;selectedColor};v([y()],Ln.prototype,"colorMultiplier",2),v([y(Q)],Ln.prototype,"disabledColor",2),v([y()],Ln.prototype,"fadeDuration",2),v([y(Q)],Ln.prototype,"highlightedColor",2),v([y(Q)],Ln.prototype,"normalColor",2),v([y(Q)],Ln.prototype,"pressedColor",2),v([y(Q)],Ln.prototype,"selectedColor",2);var qt=class extends M{onClick;_isHovered=!1;onPointerEnter(e){ss&&console.log("Button Enter",this.animationTriggers?.highlightedTrigger,this.animator),this._isHovered=!0,this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this.animationTriggers.highlightedTrigger):this.transition===1&&this.colors&&this._image?.setState("hovered"),this.context.input.setCursorPointer()}onPointerExit(){ss&&console.log("Button Exit",this.animationTriggers?.highlightedTrigger,this.animator),this._isHovered=!1,this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this.animationTriggers.normalTrigger):this.transition===1&&this.colors&&this._image?.setState("normal"),this.context.input.setCursorNormal()}onPointerDown(e){ss&&console.log("Button Down",this.animationTriggers?.highlightedTrigger,this.animator),this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this.animationTriggers.pressedTrigger):this.transition===1&&this.colors&&this._image?.setState("pressed")}onPointerUp(e){ss&&console.log("Button Down",this.animationTriggers?.highlightedTrigger,this.animator),this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this._isHovered?this.animationTriggers.highlightedTrigger:this.animationTriggers.normalTrigger):this.transition===1&&this.colors&&this._image?.setState(this._isHovered?"hovered":"normal")}onPointerClick(e){ss&&console.trace("Button Click",this.onClick),this.onClick?.invoke()}colors;transition;animationTriggers;animator;set interactable(e){this._interactable=e,this._image&&(this._image.setInteractable(e),e?this._image.setState("normal"):this._image.setState("disabled"))}get interactable(){return this._interactable}_interactable=!0;set_interactable(e){this.interactable=e}awake(){super.awake(),ss&&console.log(this),this.init()}start(){this._image?.setInteractable(this.interactable)}onEnable(){super.onEnable()}_requestedAnimatorTrigger;*setAnimatorTriggerAtEndOfFrame(e){this._requestedAnimatorTrigger=e,yield,yield,this._requestedAnimatorTrigger==e&&this.animator?.SetTrigger(e)}_isInit=!1;_image;init(){this._isInit||(this._isInit=!0,this._image=R.getComponent(this.gameObject,Dn),this._image&&(this.stateSetup(this._image),this.interactable?this._image.setState("normal"):this._image.setState("disabled")))}stateSetup(e){e.setInteractable(this.interactable);let t=this.getFinalColor(e.color,this.colors?.normalColor),i={state:"normal",attributes:{backgroundColor:t,backgroundOpacity:t.alpha}};e.setupState(i);let n=this.getFinalColor(e.color,this.colors?.highlightedColor),r={state:"hovered",attributes:{backgroundColor:n,backgroundOpacity:n.alpha}};e.setupState(r);let s=this.getFinalColor(e.color,this.colors?.pressedColor),a={state:"pressed",attributes:{backgroundColor:s,backgroundOpacity:s.alpha}};e.setupState(a);let c=this.getFinalColor(e.color,this.colors?.selectedColor),u={state:"selected",attributes:{backgroundColor:c,backgroundOpacity:c.alpha}};e.setupState(u);let l=this.getFinalColor(e.color,this.colors?.disabledColor),d={state:"disabled",attributes:{backgroundColor:l,backgroundOpacity:l.alpha}};e.setupState(d)}getFinalColor(e,t){return t?e.clone().multiply(t):e.clone()}};v([y(de)],qt.prototype,"onClick",2),v([y()],qt.prototype,"colors",2),v([y()],qt.prototype,"transition",2),v([y()],qt.prototype,"animationTriggers",2),v([y(Ee)],qt.prototype,"animator",2),v([y()],qt.prototype,"interactable",1);var Ud=class extends Mn{set renderOnTop(e){e!==this._renderOnTop&&(this._renderOnTop=e,this.onRenderSettingsChanged())}get renderOnTop(){return this._renderOnTop}_renderOnTop=!1;set depthWrite(e){this._depthWrite!==e&&(this._depthWrite=e,this.onRenderSettingsChanged())}get depthWrite(){return this._depthWrite}_depthWrite=!1;set doubleSided(e){this._doubleSided!==e&&(this._doubleSided=e,this.onRenderSettingsChanged())}get doubleSided(){return this._doubleSided}_doubleSided=!0;set castShadows(e){this._castShadows!==e&&(this._castShadows=e,this.onRenderSettingsChanged())}get castShadows(){return this._castShadows}_castShadows=!0;set receiveShadows(e){this._receiveShadows!==e&&(this._receiveShadows=e,this.onRenderSettingsChanged())}get receiveShadows(){return this._receiveShadows}_receiveShadows=!0;get renderMode(){return this._renderMode}set renderMode(e){this._renderMode!==e&&(this._renderMode=e,this.onRenderSettingsChanged())}_renderMode=-1;_rootCanvas;set rootCanvas(e){this._rootCanvas instanceof Ud||(this._rootCanvas=e)}get rootCanvas(){return this._rootCanvas}_scaleFactor=1;get scaleFactor(){return this._scaleFactor}set scaleFactor(e){this._scaleFactor=e}awake(){this.shadowComponent=this.gameObject,super.awake()}onEnable(){super.onEnable(),this._updateRenderSettingsRoutine=void 0,this.onRenderSettingsChanged()}previousAspect=-1;onBeforeRender(){this.isScreenSpace&&this.context.mainCameraComponent&&this.context.mainCameraComponent.aspect!==this.previousAspect&&(this.previousAspect=this.context.mainCameraComponent.aspect,this.updateRenderMode())}_updateRenderSettingsRoutine;onRenderSettingsChanged(){this._updateRenderSettingsRoutine||(this._updateRenderSettingsRoutine=this.startCoroutine(this._updateRenderSettingsDelayed(),3))}*_updateRenderSettingsDelayed(){if(yield,this._updateRenderSettingsRoutine=void 0,this.shadowComponent){this.updateRenderMode(),rs(this.shadowComponent,this);for(let e of R.getComponentsInChildren(this.gameObject,ze))rs(e.shadowComponent,this)}}_activeRenderMode=-1;get isScreenSpace(){return this._activeRenderMode===1||this._activeRenderMode===0}updateRenderMode(){if(this.renderMode!==this._activeRenderMode)switch(this.renderMode){case 0:case 1:let e=this.context.mainCameraComponent;if(!e)return;let t=this.gameObject;e.gameObject?.add(t);let n=e.farClipPlane;t.position.x=0,t.position.y=0,t.position.z=-n;let r=Math.tan(H.toRadians(e.fieldOfView)*n)*(e.aspect*1.333333),s=r*(this.context.domHeight/this.context.domWidth);t.scale.x=-r,t.scale.y=s;break;case 2:break}}},Ne=Ud;v([y()],Ne.prototype,"renderOnTop",1),v([y()],Ne.prototype,"depthWrite",1),v([y()],Ne.prototype,"doubleSided",1),v([y()],Ne.prototype,"castShadows",1),v([y()],Ne.prototype,"receiveShadows",1),v([y()],Ne.prototype,"renderMode",1),v([y(Ne)],Ne.prototype,"rootCanvas",1),v([y()],Ne.prototype,"scaleFactor",1);var jn=class extends M{get alpha(){return this._alpha}set alpha(e){e!==this._alpha&&(this._alpha=e,this.markDirty())}get isCanvasGroup(){return!0}_alpha=1;interactable=!0;blocksRaycasts=!0;_isDirty=!1;markDirty(){this._isDirty||(this._isDirty=!0,this.startCoroutine(this.applyChangesDelayed(),3))}*applyChangesDelayed(){this._isDirty=!1,this.applyChangesNow()}_buffer=[];applyChangesNow(){for(let e of R.getComponentsInChildren(this.gameObject,_t,this._buffer)){let t=e.color;t.alpha=this._alpha,e.color=t}}};v([y()],jn.prototype,"alpha",1),v([y()],jn.prototype,"interactable",2),v([y()],jn.prototype,"blocksRaycasts",2);import{Quaternion as ax,Ray as lx,Vector3 as no}from"three";import*as jm from"three";import{Color as tx,Object3D as ix,Texture as nx,WebGLRenderTarget as rx}from"three";import{WebGLRenderTarget as ex}from"three";var as=class extends ex{};var Vd=class extends Li{constructor(){super([tx,Q])}onDeserialize(e){if(e!=null)return e.a!==void 0?new Q(e.r,e.g,e.b,e.a):e.alpha!==void 0?new Q(e.r,e.g,e.b,e.alpha):new jm.Color(e.r,e.g,e.b)}onSerialize(e){if(e!=null)return e.a!==void 0?{r:e.r,g:e.g,b:e.b,a:e.a}:{r:e.r,g:e.g,b:e.b}}},aL=new Vd,zd=class extends Li{constructor(){super(ix)}onSerialize(e,t){if(t.objectToNode!==void 0&&e.uuid){let i=t.objectToNode[e.uuid];return pe&&console.log(i,e.name,e.uuid),{node:i}}}onDeserialize(e,t){if(e){if(e.node!==void 0&&t.nodeToObject){let i=t.nodeToObject[e.node];return pe&&console.log("Deserialized object reference?",e,i,t?.nodeToObject),i||console.warn("Did not find node: "+e.node,t.nodeToObject,t.object),i}else if(e.guid){if(!t.context){console.error("Missing context");return}let i,n=t.gltf?.scene;return n&&(i=R.findByGuid(e.guid,n)),i||(i=R.findByGuid(e.guid,t.context.scene)),i?pe&&console.log("Deserialized object reference?",e,i,t?.nodeToObject):((Ha()||pe)&&console.warn("Could not resolve object reference",t.path,e,t.target,t.context.scene),e.could_not_resolve=!0),i}}}},ox=new zd,Wd=class extends Li{constructor(){super([Tt,M])}onSerialize(e,t){if(e?.guid)return{guid:e.guid}}onDeserialize(e,t){if(e?.guid){pe&&console.log(e.guid,t.root,t.object,t.target);let i=this.findObjectForGuid(e.guid,t.root);if(i||t.context&&(i=this.findObjectForGuid(e.guid,t.context?.scene),i))return i;(Ha()||pe)&&console.warn("Could not resolve component reference",t.path,e,t.target),e.could_not_resolve=!0;return}}findObjectForGuid(e,t){if(t.guid===e)return t;let i=R.foreachComponent(t,n=>{if(n.guid===e)return n},!1);if(i!==void 0)return i;for(let n=0;n<t.children.length;n++){let r=t.children[n],s=this.findObjectForGuid(e,r);if(s)return s}}},Gd=new Wd,Nd=class extends Li{constructor(){super([de])}onSerialize(e,t){console.log("TODO: SERIALIZE EVENT")}onDeserialize(e,t){if(typeof e=="function")return new de([new bi(e,!0)]);if(e&&e.type==="EventList"){pe&&console.log("DESERIALIZE EVENT",e);let i=new Array;if(e.calls&&Array.isArray(e.calls))for(let s of e.calls){pe&&console.log(s);let a=Gd.findObjectForGuid(s.target,t.root);!a&&t.context?.scene&&(a=Gd.findObjectForGuid(s.target,t.context?.scene));let c=s.method?.length>0;if(a&&c){let h=()=>console.warn(`Could not find method ${s.method} on object ${a.name}`,a,typeof a[s.method]);if(typeof a[s.method]!="function"){let g=!1;s.method.startsWith("set_")&&s.method.length>4&&(s.method=s.method.substring(4),a[s.method]!==void 0&&(g=!0)),!g&&(Ha()||pe)&&h()}}let u,l=s.argument;s.argument!==void 0?(typeof l=="object"&&(l=ox.onDeserialize(s.argument,t),l||(l=Gd.onDeserialize(s.argument,t))),u=new bi(c?(...h)=>d(...h):void 0,s.enabled)):u=new bi(c?(...h)=>d(...h):void 0,s.enabled);let d=(...h)=>{let g=a[s.method];typeof g=="function"?l!==void 0?g?.call(a,l):g?.call(a,...h):a[s.method]=l};if(u.method||(u.__debuginfo=t.object?.name),!a||!u.method){let h=t.object?"Current object: "+t.object.name+", "+t.object.guid:null;a?console.warn('EventList method not found: "'+s.method+'" on',a):console.warn("EventList is missing target - will be ignored",s.target,h,e)}else i.push(u)}let n=new de(i);pe&&console.log(n);let r=t.target;return r!==void 0&&t.path!==void 0&&n.setEventTarget(t.path,r),n}}},lL=new Nd,Xd=class extends Li{constructor(){super([as,rx])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof nx&&t.type===as){let i=e,n=new as(i.image.width,i.image.height);return n.texture=i,n}}};new Xd;var Yi=class extends M{center=new no(0,0,0);radius=.5;height=2;_rigidbody=null;get rigidbody(){return this._rigidbody?this._rigidbody:(this._rigidbody=this.gameObject.getComponent(J),this._rigidbody||(this._rigidbody=this.gameObject.addNewComponent(J)),this.rigidbody)}onEnable(){let e=this.rigidbody,t=this.gameObject.getComponent(Xt);t||(t=this.gameObject.addNewComponent(Xt)),t.center.copy(this.center),t.radius=this.radius,t.height=this.height,this.gameObject.rotation.x=0,this.gameObject.rotation.z=0,e.lockRotationX=!0,e.lockRotationY=!0,e.lockRotationZ=!0}move(e){this.gameObject.position.add(e)}_activeGroundCollisions=new Set;onCollisionEnter(e){for(let t of e.contacts)if(t.normal.y>.1){this._activeGroundCollisions.add(e);break}}onCollisionExit(e){this._activeGroundCollisions.delete(e)}get isGrounded(){return this._activeGroundCollisions.size>0}};v([y(no)],Yi.prototype,"center",2),v([y()],Yi.prototype,"radius",2),v([y()],Yi.prototype,"height",2);var Ci=class extends M{controller;movementSpeed=2;rotationSpeed=2;jumpForce=1;animator;lookForward=!0;_currentSpeed=new no(0,0,0);_currentAngularSpeed=new no(0,0,0);_temp=new no(0,0,0);_jumpCount=0;_currentRotation;awake(){this._currentRotation=new ax}update(){this.controller?.isGrounded&&(this._jumpCount=0,this.animator?.SetBool("doubleJump",!1));let e=this.context.input.isKeyPressed("w"),t=this.context.input.isKeyPressed("s"),i=this.context.input.isKeyPressed("a"),n=this.context.input.isKeyPressed("d"),r=this.context.input.isKeyDown(" "),s=e?1:0+t?-1:0;this._currentSpeed.z+=s*this.movementSpeed*this.context.time.deltaTime,this.animator?.SetBool("running",s!=0),this.animator?.SetBool("jumping",this.controller?.isGrounded===!0&&r),this._temp.copy(this._currentSpeed),this._temp.applyQuaternion(this.gameObject.quaternion),this.controller?this.controller.move(this._temp):this.gameObject.position.add(this._temp);let a=i?1:0+n?-1:0;if(this._currentAngularSpeed.y+=H.toRadians(a*this.rotationSpeed)*this.context.time.deltaTime,this.lookForward&&Math.abs(this._currentAngularSpeed.y)<.01){let c=this.context.mainCameraComponent.forward;c.y=0,c.normalize(),this._currentRotation.setFromUnitVectors(new no(0,0,1),c),this.gameObject.quaternion.slerp(this._currentRotation,this.context.time.deltaTime*10)}if(this.gameObject.rotateY(this._currentAngularSpeed.y),this._currentSpeed.multiplyScalar(1-this.context.time.deltaTime*10),this._currentAngularSpeed.y*=1-this.context.time.deltaTime*10,this.controller&&r&&this.jumpForce>0){let c=this.controller?.isGrounded;if(!this.controller?.isGrounded&&this._jumpCount===1&&(c=!0,this.animator?.SetBool("doubleJump",!0)),c){this._jumpCount+=1;let u=this.controller.rigidbody,l=this._jumpCount===2?2:1;u.applyImpulse(new no(0,1,0).multiplyScalar(this.jumpForce*l))}}if(this.controller){let c=this.controller?.rigidbody.getVelocity().y;if(c<-1){this._raycastOptions.ray||(this._raycastOptions.ray=new lx),this._raycastOptions.ray.origin.copy(B(this.gameObject)),this._raycastOptions.ray.direction.set(0,-1,0);let u=this.layer;this.gameObject.layers.disableAll(),this.gameObject.layers.set(2);let l=this.context.physics.raycast(this._raycastOptions);this.gameObject.layers.set(u),(l.length&&l[0].distance>2||c<-10)&&this.animator?.SetBool("falling",!0)}else this.animator?.SetBool("falling",!1)}}_raycastOptions=new xe};v([y(Yi)],Ci.prototype,"controller",2),v([y()],Ci.prototype,"movementSpeed",2),v([y()],Ci.prototype,"rotationSpeed",2),v([y()],Ci.prototype,"jumpForce",2),v([y(Ee)],Ci.prototype,"animator",2);import{LinearToneMapping as Qd,ACESFilmicToneMapping as Hm,ReinhardToneMapping as cx}from"three";var cc=P("debugvolume"),Bm=(i=>(i[i.None=0]="None",i[i.Neutral=1]="Neutral",i[i.ACES=2]="ACES",i))(Bm||{}),ls=class{overrideState=!1;value=0},Ki=class{active=!1;parameters},gr=class extends Ki{mode;get isToneMapping(){return!0}},br=class extends Ki{postExposure};function ux(o){return"mode"in o?gr:"postExposure"in o?br:Ki}var Fm=Symbol("volumeprofile"),mr=class{components;apply(e){this.onUpdate(e,!1)}unapply(e){this.onUpdate(e,!0)}onUpdate(e,t){if(!this.components)return;let i=e.renderer,r=i[Fm]!==void 0;if(t){if(!r)return}else i[Fm]=this;for(let s of this.components)if(s instanceof gr){let a=s;if(!s.active||t){e.renderer.toneMapping=Qd;continue}cc&&console.log("VOLUME:",Bm[a.mode?.value??0]);let c=a.mode;switch((c?.overrideState?c?.value:0)??0){case 0:e.renderer.toneMapping=Qd;break;case 1:e.renderer.toneMapping=cx;break;case 2:e.renderer.toneMapping=Hm;break}}else if(s instanceof br){let a=s;cc&&console.log(a.postExposure);let c=1;a.postExposure&&(c=Math.pow(2,a.postExposure.value)),e.renderer.toneMapping,Hm;let u=a.postExposure?.overrideState&&!t;e.renderer.toneMappingExposure=u?c:1,e.renderer.toneMapping||(e.renderer.toneMapping=Qd)}}};v([y([o=>ux(o),Ki])],mr.prototype,"components",2);var ro=class extends M{sharedProfile;awake(){cc&&(console.log(this),console.log("Press P to toggle post processing"),window.addEventListener("keydown",e=>{e.key==="p"&&(console.log("Toggle volume: "+this.name,!this.enabled),this.enabled=!this.enabled)}))}onEnable(){cc&&console.log("APPLY VOLUME",this),this.sharedProfile?.apply(this.context)}onDisable(){this.sharedProfile?.unapply(this.context)}};v([y(mr)],ro.prototype,"sharedProfile",2);import{Matrix4 as Um,Quaternion as dx,Vector3 as Ze,Vector2 as Gm,Euler as hx}from"three";import{createNoise4D as px}from"simplex-noise";var fx=P("debugparticles");var Ri=class{alphaKeys;colorKeys;get duration(){return 1}evaluate(e,t){let i,n=0,r=null,s=0;for(let a=0;a<this.alphaKeys.length;a++){let c=this.alphaKeys[a];(c.time<e||!i)&&(i=c,n=a)}for(let a=0;a<this.colorKeys.length;a++){let c=this.colorKeys[a];(c.time<e||!r)&&(r=c,s=a)}if(r)if(s+1<this.colorKeys.length){let c=this.colorKeys[s+1],u=H.remap(e,r.time,c.time,0,1);t.r=H.lerp(r.color.r,c.color.r,u),t.g=H.lerp(r.color.g,c.color.g,u),t.b=H.lerp(r.color.b,c.color.b,u)}else t.r=r.color.r,t.g=r.color.g,t.b=r.color.b;if(i)if(n+1<this.alphaKeys.length){let c=this.alphaKeys[n+1],u=H.remap(e,i.time,c.time,0,1);t.alpha=H.lerp(i.alpha,c.alpha,u)}else t.alpha=i.alpha;return t}};v([y()],Ri.prototype,"alphaKeys",2),v([y()],Ri.prototype,"colorKeys",2);var Vm=(w=>(w[w.Sphere=0]="Sphere",w[w.SphereShell=1]="SphereShell",w[w.Hemisphere=2]="Hemisphere",w[w.HemisphereShell=3]="HemisphereShell",w[w.Cone=4]="Cone",w[w.Box=5]="Box",w[w.Mesh=6]="Mesh",w[w.ConeShell=7]="ConeShell",w[w.ConeVolume=8]="ConeVolume",w[w.ConeVolumeShell=9]="ConeVolumeShell",w[w.Circle=10]="Circle",w[w.CircleEdge=11]="CircleEdge",w[w.SingleSidedEdge=12]="SingleSidedEdge",w[w.MeshRenderer=13]="MeshRenderer",w[w.SkinnedMeshRenderer=14]="SkinnedMeshRenderer",w[w.BoxShell=15]="BoxShell",w[w.BoxEdge=16]="BoxEdge",w[w.Donut=17]="Donut",w[w.Rectangle=18]="Rectangle",w[w.Sprite=19]="Sprite",w[w.SpriteRenderer=20]="SpriteRenderer",w))(Vm||{});var U=class{mode;constant;constantMin;constantMax;curve;curveMin;curveMax;curveMultiplier;evaluate(e,t){let i=t===void 0?Math.random():t;switch(this.mode){case 0:return this.constant;case 1:return e=H.clamp01(e),this.curve.evaluate(e)*this.curveMultiplier;case 2:let n=e*this.curveMin.duration,r=e*this.curveMax.duration;return H.lerp(this.curveMin.evaluate(n),this.curveMax.evaluate(r),i%1)*this.curveMultiplier;case 3:return H.lerp(this.constantMin,this.constantMax,i%1);default:this.curveMax.evaluate(e)*this.curveMultiplier;break}return 0}};v([y()],U.prototype,"mode",2),v([y()],U.prototype,"constant",2),v([y()],U.prototype,"constantMin",2),v([y()],U.prototype,"constantMax",2),v([y(mi)],U.prototype,"curve",2),v([y(mi)],U.prototype,"curveMin",2),v([y(mi)],U.prototype,"curveMax",2),v([y()],U.prototype,"curveMultiplier",2);var Yt=class{mode;color;colorMin;colorMax;gradient;gradientMin;gradientMax;evaluate(e,t){let i=t===void 0?Math.random():t;switch(this.mode){case 0:return this.color;case 1:return this.gradient.evaluate(e,Yt._temp),Yt._temp;case 2:return Yt._temp.lerpColors(this.colorMin,this.colorMax,i);case 3:return this.gradientMin.evaluate(e,Yt._temp),this.gradientMax.evaluate(e,Yt._temp2),Yt._temp.lerp(Yt._temp2,i)}return Yt._temp.set(16711935),Yt._temp.alpha=1,Yt._temp}},Me=Yt;I(Me,"_temp",new Q(0,0,0,1)),I(Me,"_temp2",new Q(0,0,0,1)),v([y(Q)],Me.prototype,"color",2),v([y(Q)],Me.prototype,"colorMin",2),v([y(Q)],Me.prototype,"colorMax",2),v([y(Ri)],Me.prototype,"gradient",2),v([y(Ri)],Me.prototype,"gradientMin",2),v([y(Ri)],Me.prototype,"gradientMax",2);var ye=class{cullingMode;duration;emitterVelocityMode;flipRotation;gravityModifier;gravityModifierMultiplier;loop;maxParticles;playOnAwake;prewarm;ringBufferLoopRange;ringBufferMode;scalingMode;simulationSpace;simulationSpeed;startColor;startDelay;startDelayMultiplier;startLifetime;startLifetimeMultiplier;startRotation;startRotationMultiplier;startRotation3D;startRotationX;startRotationXMultiplier;startRotationY;startRotationYMultiplier;startRotationZ;startRotationZMultiplier;startSize;startSize3D;startSizeMultiplier;startSizeX;startSizeXMultiplier;startSizeY;startSizeYMultiplier;startSizeZ;startSizeZMultiplier;startSpeed;startSpeedMultiplier;stopAction;useUnscaledTime};v([y(U)],ye.prototype,"gravityModifier",2),v([y(Me)],ye.prototype,"startColor",2),v([y(U)],ye.prototype,"startDelay",2),v([y(U)],ye.prototype,"startLifetime",2),v([y(U)],ye.prototype,"startRotation",2),v([y(U)],ye.prototype,"startRotationX",2),v([y(U)],ye.prototype,"startRotationY",2),v([y(U)],ye.prototype,"startRotationZ",2),v([y(U)],ye.prototype,"startSize",2),v([y(U)],ye.prototype,"startSizeX",2),v([y(U)],ye.prototype,"startSizeY",2),v([y(U)],ye.prototype,"startSizeZ",2),v([y(U)],ye.prototype,"startSpeed",2);var Fn=class{cycleCount;maxCount;minCount;probability;repeatInterval;time;count;_performed=0;reset(){this._performed=0}run(e){if(e<=this.time)return this.reset(),0;let t=0;if(this.cycleCount===0||this._performed<this.cycleCount){let i=this.time+this.repeatInterval*this._performed;if(e>=i&&(this._performed+=1,Math.random()<this.probability))switch(this.count.mode){case 0:t=this.count.constant;break;case 3:t=H.lerp(this.count.constantMin,this.count.constantMax,Math.random());break;case 1:t=this.count.curve.evaluate(Math.random());break;case 2:let n=Math.random();t=H.lerp(this.count.curveMin.evaluate(n),this.count.curveMax.evaluate(n),Math.random());break}}return t}},xt=class{enabled;get burstCount(){return this.bursts?.length??0}bursts;rateOverTime;rateOverTimeMultiplier;rateOverDistance;rateOverDistanceMultiplier;system;reset(){this.bursts?.forEach(e=>e.reset())}getBurst(){let e=0;if(this.burstCount>0)for(let t=0;t<this.burstCount;t++){let i=this.bursts[t];i.time>=this.system.time&&i.reset(),e+=Math.round(i.run(this.system.time))}return e}};v([y()],xt.prototype,"enabled",2),v([y()],xt.prototype,"bursts",2),v([y(U)],xt.prototype,"rateOverTime",2),v([y()],xt.prototype,"rateOverTimeMultiplier",2),v([y(U)],xt.prototype,"rateOverDistance",2),v([y()],xt.prototype,"rateOverDistanceMultiplier",2);var Hn=class{enabled;color};v([y(Me)],Hn.prototype,"color",2);var Kt=class{enabled;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_time=0;_temp=new Ze;evaluate(e,t,i){if(t||(t=this._temp),!this.enabled)return t.x=t.y=t.z=1,t;if(this.separateAxes)t.x=this.x.evaluate(e,i)*this.xMultiplier,t.y=this.y.evaluate(e,i)*this.yMultiplier,t.z=this.z.evaluate(e,i)*this.zMultiplier;else{let n=this.size.evaluate(e,i)*this.sizeMultiplier;t.x=n}return t}};v([y(U)],Kt.prototype,"size",2),v([y(U)],Kt.prototype,"x",2),v([y(U)],Kt.prototype,"y",2),v([y(U)],Kt.prototype,"z",2);var cs=class{get type(){return Vm[this.shapeType]}initialize(e){this.getPosition(),e.position.copy(this._vector)}toJSON(){return this}clone(){return new cs}shapeType=5;enabled=!0;alignToDirection=!1;angle=0;arc=360;arcSpread;arcSpeedMultiplier;arcMode;boxThickness;position;rotation;_rotation=new hx;scale;radius;radiusThickness;sphericalDirectionAmount;randomDirectionAmount;randomPositionAmount;system;_space;_worldSpaceMatrix=new Um;_worldSpaceMatrixInverse=new Um;update(e,t,i,n){this.system=e,this._space=i,i===1&&(this._worldSpaceMatrix.copy(n.matrixWorld),this._worldSpaceMatrix.elements[0]=1,this._worldSpaceMatrix.elements[5]=1,this._worldSpaceMatrix.elements[10]=1,this._worldSpaceMatrixInverse.copy(this._worldSpaceMatrix).invert())}updateRotation(){let e=this.rotation.x!==0||this.rotation.y!==0||this.rotation.z!==0;return e&&(this._rotation.x=H.toRadians(this.rotation.x),this._rotation.y=-H.toRadians(this.rotation.y),this._rotation.z=-H.toRadians(this.rotation.z)),e}_vector=new Ze(0,0,0);_temp=new Ze(0,0,0);get vector(){return this._vector}getPosition(){this._vector.set(0,0,0);let e=this._temp.copy(this.position),t=this._space===1;t&&e.applyQuaternion(this.system.worldQuaternion);let i=this.radius;if(t&&(i*=this.system.worldScale.x),this.enabled){switch(this.shapeType){case 5:this._vector.x=Math.random()*this.scale.x-this.scale.x/2,this._vector.y=Math.random()*this.scale.y-this.scale.y/2,this._vector.z=Math.random()*this.scale.z-this.scale.z/2,this._vector.add(e);break;case 4:this.randomConePoint(this.position,this.angle,i,this.radiusThickness,this.arc,this.arcMode,this._vector);break;case 0:this.randomSpherePoint(this.position,i,this.radiusThickness,this.arc,this._vector,this.scale);break;case 10:this._temp.copy(this.scale),this._temp.z=0,this.randomSpherePoint(this.position,i,this.radiusThickness,this.arc,this._vector,this._temp);break;default:this._vector.set(0,0,0);break}this.randomizePosition(this._vector,this.randomPositionAmount)}this.updateRotation()&&this._vector.applyEuler(this._rotation),t&&(this._vector.applyQuaternion(this.system.worldQuaternion),this._vector.add(this.system.worldPos))}_dir=new Ze;getDirection(e){if(!this.enabled)return this._dir.set(0,0,1),this._dir;switch(this.shapeType){case 5:this._dir.set(0,0,1);break;case 4:this._dir.set(0,0,1);break;case 10:case 0:let t=e.x,i=e.y,n=e.z;this._dir.set(t,i,n),this._dir.sub(this.position);break;default:this._dir.set(0,0,1);break}return this._space===1&&this._dir.applyMatrix4(this._worldSpaceMatrixInverse),this.updateRotation()&&this._dir.applyEuler(this._rotation),this._dir.normalize(),this.spherizeDirection(this._dir,this.sphericalDirectionAmount),this.randomizeDirection(this._dir,this.randomDirectionAmount),fx&&(Et.DrawSphere(e,.01,8925952,.5,!0),Et.DrawDirection(e,this._dir,8925952,.5,!0)),this._dir}randomizePosition(e,t){if(t<=0)return;let i=cs._tempVec;i.set(Math.random()*2-1,Math.random()*2-1,Math.random()*2-1),i.x*=t*this.scale.x,i.y*=t*this.scale.y,i.z*=t*this.scale.z,e.add(i)}randomizeDirection(e,t){if(t===0)return;let i=cs._randomQuat,n=cs._tempVec;n.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),i.setFromAxisAngle(n,t*Math.random()*Math.PI),e.applyQuaternion(i)}spherizeDirection(e,t){if(t===0)return;let i=Math.random()*Math.PI*2,n=Math.acos(1-Math.random()*2),r=Math.sin(n)*Math.cos(i),s=Math.sin(n)*Math.sin(i),a=Math.cos(n),c=new Ze(r,s,a);e.lerp(c,t)}randomSpherePoint(e,t,i,n,r,s){let a=Math.random(),c=Math.random(),u=2*Math.PI*a*(n/360),l=Math.acos(2*c-1),d=H.lerp(1,1-Math.pow(1-Math.random(),Math.PI),i)*t,h=e.x+s.x*(-d*Math.sin(l)*Math.cos(u)),g=e.y+s.y*(d*Math.sin(l)*Math.sin(u)),E=e.z+s.z*(d*Math.cos(l));r.x=h,r.y=g,r.z=E}_loopTime=0;_loopDirection=1;randomConePoint(e,t,i,n,r,s,a){let c=0,u=0;switch(s){case 0:c=Math.random(),u=Math.random();break;case 2:this._loopTime>1&&(this._loopDirection=-1),this._loopTime<0&&(this._loopDirection=1);case 1:c=.5,u=Math.random(),this._loopTime+=this.system.deltaTime*this._loopDirection;break}let l=2*Math.PI*c*(r/360);switch(s){case 2:case 1:l+=Math.PI+.5,l+=this._loopTime*Math.PI*2,l%=H.toRadians(r);break}let d=Math.acos(2*u-1),h=H.lerp(1,1-Math.pow(1-Math.random(),Math.PI),n)*i,g=e.x+-h*Math.sin(d)*Math.cos(l),E=e.y+h*Math.sin(d)*Math.sin(l),_=e.z;a.x=g*this.scale.x,a.y=E*this.scale.y,a.z=_*this.scale.z}},ie=cs;I(ie,"_randomQuat",new dx),I(ie,"_tempVec",new Ze),v([y()],ie.prototype,"shapeType",2),v([y()],ie.prototype,"enabled",2),v([y()],ie.prototype,"alignToDirection",2),v([y()],ie.prototype,"angle",2),v([y()],ie.prototype,"arc",2),v([y()],ie.prototype,"arcSpread",2),v([y()],ie.prototype,"arcSpeedMultiplier",2),v([y()],ie.prototype,"arcMode",2),v([y(Ze)],ie.prototype,"boxThickness",2),v([y(Ze)],ie.prototype,"position",2),v([y(Ze)],ie.prototype,"rotation",2),v([y(Ze)],ie.prototype,"scale",2),v([y()],ie.prototype,"radius",2),v([y()],ie.prototype,"radiusThickness",2),v([y()],ie.prototype,"sphericalDirectionAmount",2),v([y()],ie.prototype,"randomDirectionAmount",2),v([y()],ie.prototype,"randomPositionAmount",2);var K=class{damping;enabled;frequency;octaveCount;octaveMultiplier;octaveScale;positionAmount;quality;remap;remapEnabled;remapMultiplier;remapX;remapXMultiplier;remapY;remapYMultiplier;remapZ;remapZMultiplier;scrollSpeedMultiplier;separateAxes;strengthMultiplier;strengthX;strengthXMultiplier;strengthY;strengthYMultiplier;strengthZ;strengthZMultiplier;_noise;_time=0;update(e){this._time+=e.time.deltaTime*this.scrollSpeedMultiplier}_temp=new Ze;apply(e,t,i,n,r,s){if(!this.enabled)return;this._noise||(this._noise=px(()=>0));let a=this._temp.set(t.x,t.y,t.z).multiplyScalar(this.frequency),c=this._noise(a.x,a.y,a.z,this._time),u=this._noise(a.x,a.y,a.z,this._time+1e3*this.frequency),l=this._noise(a.x,a.y,a.z,this._time+2e3*this.frequency);this._temp.set(c,u,l).normalize();let d=r/s,h=this.positionAmount.evaluate(d);this.separateAxes?(this._temp.x*=h*this.strengthXMultiplier,this._temp.y*=h*this.strengthYMultiplier,this._temp.z*=h*this.strengthZMultiplier):(this.strengthX&&(h*=this.strengthX.evaluate(d)*1.5),this._temp.multiplyScalar(h)),i.x+=this._temp.x,i.y+=this._temp.y,i.z+=this._temp.z}};v([y()],K.prototype,"damping",2),v([y()],K.prototype,"enabled",2),v([y()],K.prototype,"frequency",2),v([y()],K.prototype,"octaveCount",2),v([y()],K.prototype,"octaveMultiplier",2),v([y()],K.prototype,"octaveScale",2),v([y(U)],K.prototype,"positionAmount",2),v([y()],K.prototype,"quality",2),v([y(U)],K.prototype,"remap",2),v([y()],K.prototype,"remapEnabled",2),v([y()],K.prototype,"remapMultiplier",2),v([y(U)],K.prototype,"remapX",2),v([y()],K.prototype,"remapXMultiplier",2),v([y(U)],K.prototype,"remapY",2),v([y()],K.prototype,"remapYMultiplier",2),v([y(U)],K.prototype,"remapZ",2),v([y()],K.prototype,"remapZMultiplier",2),v([y()],K.prototype,"scrollSpeedMultiplier",2),v([y()],K.prototype,"separateAxes",2),v([y()],K.prototype,"strengthMultiplier",2),v([y(U)],K.prototype,"strengthX",2),v([y()],K.prototype,"strengthXMultiplier",2),v([y(U)],K.prototype,"strengthY",2),v([y()],K.prototype,"strengthYMultiplier",2),v([y(U)],K.prototype,"strengthZ",2),v([y()],K.prototype,"strengthZMultiplier",2);var ee=class{enabled;attachRibbonToTransform=!1;colorOverLifetime;colorOverTrail;dieWithParticles=!0;inheritParticleColor=!0;lifetime;lifetimeMultiplier;minVertexDistance=.2;mode=0;ratio=1;ribbonCount=1;shadowBias=0;sizeAffectsLifetime=!1;sizeAffectsWidth=!1;splitSubEmitterRibbons=!1;textureMode=0;widthOverTrail;widthOverTrailMultiplier;worldSpace=!1;getWidth(e,t,i){let n=this.widthOverTrail.evaluate(i);return i===0&&(n=e),e*=n,e}getColor(e,t,i){let n=this.colorOverTrail.evaluate(i),r=this.colorOverLifetime.evaluate(t);e.x*=n.r*r.r,e.y*=n.g*r.g,e.z*=n.b*r.b,e.w*=n.alpha*r.alpha}};v([y()],ee.prototype,"enabled",2),v([y()],ee.prototype,"attachRibbonToTransform",2),v([y(Me)],ee.prototype,"colorOverLifetime",2),v([y(Me)],ee.prototype,"colorOverTrail",2),v([y()],ee.prototype,"dieWithParticles",2),v([y()],ee.prototype,"inheritParticleColor",2),v([y(U)],ee.prototype,"lifetime",2),v([y()],ee.prototype,"lifetimeMultiplier",2),v([y()],ee.prototype,"minVertexDistance",2),v([y()],ee.prototype,"mode",2),v([y()],ee.prototype,"ratio",2),v([y()],ee.prototype,"ribbonCount",2),v([y()],ee.prototype,"shadowBias",2),v([y()],ee.prototype,"sizeAffectsLifetime",2),v([y()],ee.prototype,"sizeAffectsWidth",2),v([y()],ee.prototype,"splitSubEmitterRibbons",2),v([y()],ee.prototype,"textureMode",2),v([y(U)],ee.prototype,"widthOverTrail",2),v([y()],ee.prototype,"widthOverTrailMultiplier",2),v([y()],ee.prototype,"worldSpace",2);var He=class{enabled;space=0;speedModifier;speedModifierMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_system;update(e){this._system=e}_temp=new Ze;apply(e,t,i,n,r,s){if(!this.enabled)return;let a=r/s,c=this.speedModifier.evaluate(a)*this.speedModifierMultiplier,u=this.x.evaluate(a),l=this.y.evaluate(a),d=this.z.evaluate(a);this._temp.set(-u,l,d),this._system&&(this.space===1&&this._temp.applyQuaternion(this._system.worldQuaternionInverted),this._system.main.simulationSpace===1&&this._temp.applyQuaternion(this._system.worldQuaternion)),i.x+=this._temp.x,i.y+=this._temp.y,i.z+=this._temp.z,i.x*=c,i.y*=c,i.z*=c}};v([y()],He.prototype,"enabled",2),v([y()],He.prototype,"space",2),v([y(U)],He.prototype,"speedModifier",2),v([y()],He.prototype,"speedModifierMultiplier",2),v([y(U)],He.prototype,"x",2),v([y()],He.prototype,"xMultiplier",2),v([y(U)],He.prototype,"y",2),v([y()],He.prototype,"yMultiplier",2),v([y(U)],He.prototype,"z",2),v([y()],He.prototype,"zMultiplier",2);var _e=class{animation;enabled;cycleCount;frameOverTime;frameOverTimeMultiplier;numTilesX;numTilesY;startFrame;startFrameMultiplier;rowMode;rowIndex;spriteCount;timeMode;sampleOnceAtStart(){if(this.timeMode===0)switch(this.frameOverTime.mode){case 0:case 3:return!0}return!1}getStartIndex(){return this.sampleOnceAtStart()?this.frameOverTime.evaluate(Math.random()):0}evaluate(e){if(!this.sampleOnceAtStart())return this.getIndex(e)}getIndex(e){let t=this.numTilesX*this.numTilesY,i=this.frameOverTime.evaluate(e%1);return i*=this.frameOverTimeMultiplier,i*=t,i=i%t,i=Math.floor(i),i}};v([y()],_e.prototype,"animation",2),v([y()],_e.prototype,"enabled",2),v([y()],_e.prototype,"cycleCount",2),v([y(U)],_e.prototype,"frameOverTime",2),v([y()],_e.prototype,"frameOverTimeMultiplier",2),v([y()],_e.prototype,"numTilesX",2),v([y()],_e.prototype,"numTilesY",2),v([y(U)],_e.prototype,"startFrame",2),v([y()],_e.prototype,"startFrameMultiplier",2),v([y()],_e.prototype,"rowMode",2),v([y()],_e.prototype,"rowIndex",2),v([y()],_e.prototype,"spriteCount",2),v([y()],_e.prototype,"timeMode",2);var Je=class{enabled;separateAxes;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t){return this.enabled?this.separateAxes?0:this.z.evaluate(e,t)*-1:0}};v([y()],Je.prototype,"enabled",2),v([y()],Je.prototype,"separateAxes",2),v([y(U)],Je.prototype,"x",2),v([y()],Je.prototype,"xMultiplier",2),v([y(U)],Je.prototype,"y",2),v([y()],Je.prototype,"yMultiplier",2),v([y(U)],Je.prototype,"z",2),v([y()],Je.prototype,"zMultiplier",2);var Xe=class{enabled;range;separateAxes;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t){if(!this.enabled)return 0;if(!this.separateAxes){let i=H.lerp(this.range.x,this.range.y,t);return this.z.evaluate(i)*-1}return 0}};v([y()],Xe.prototype,"enabled",2),v([y()],Xe.prototype,"range",2),v([y()],Xe.prototype,"separateAxes",2),v([y(U)],Xe.prototype,"x",2),v([y()],Xe.prototype,"xMultiplier",2),v([y(U)],Xe.prototype,"y",2),v([y()],Xe.prototype,"yMultiplier",2),v([y(U)],Xe.prototype,"z",2),v([y()],Xe.prototype,"zMultiplier",2);var ue=class{enabled;dampen;drag;dragMultiplier;limit;limitMultiplier;separateAxes;limitX;limitXMultiplier;limitY;limitYMultiplier;limitZ;limitZMultiplier;multiplyDragByParticleSize=!1;multiplyDragByParticleVelocity=!1;space;_temp=new Ze;_temp2=new Ze;apply(e,t,i,n,r,s,a){if(!!this.enabled){let c=this.limit.evaluate(r)*this.limitMultiplier;if(t.length()>c){this._temp.copy(t).normalize().multiplyScalar(c);let l=this.dampen*.5;t.x=H.lerp(t.x,this._temp.x,l),t.y=H.lerp(t.y,this._temp.y,l),t.z=H.lerp(t.z,this._temp.z,l),i.x=H.lerp(i.x,this._temp.x,l),i.y=H.lerp(i.y,this._temp.y,l),i.z=H.lerp(i.z,this._temp.z,l)}}}};v([y()],ue.prototype,"enabled",2),v([y()],ue.prototype,"dampen",2),v([y(U)],ue.prototype,"drag",2),v([y()],ue.prototype,"dragMultiplier",2),v([y(U)],ue.prototype,"limit",2),v([y()],ue.prototype,"limitMultiplier",2),v([y()],ue.prototype,"separateAxes",2),v([y(U)],ue.prototype,"limitX",2),v([y()],ue.prototype,"limitXMultiplier",2),v([y(U)],ue.prototype,"limitY",2),v([y()],ue.prototype,"limitYMultiplier",2),v([y(U)],ue.prototype,"limitZ",2),v([y()],ue.prototype,"limitZMultiplier",2),v([y()],ue.prototype,"multiplyDragByParticleSize",2),v([y()],ue.prototype,"multiplyDragByParticleVelocity",2),v([y()],ue.prototype,"space",2);var Jt=class{enabled;curve;curveMultiplier;mode;system;_lastWorldPosition;_velocity=new Ze;_temp=new Ze;update(e){!this.enabled||this.system.worldspace!==!1&&(this._lastWorldPosition?(this._velocity.copy(this.system.worldPos).sub(this._lastWorldPosition).multiplyScalar(1/this.system.deltaTime),this._lastWorldPosition.copy(this.system.worldPos)):(this._velocity.set(0,0,0),this._lastWorldPosition=this.system.worldPos.clone()))}applyInitial(e){if(!!this.enabled&&this.system.worldspace!==!1&&this.mode===0){let t=this.curve.evaluate(Math.random(),Math.random());this._temp.copy(this._velocity).multiplyScalar(t),e.add(this._temp)}}applyCurrent(e,t,i){if(!!this.enabled&&this.system.worldspace!==!1&&this.mode===1){let n=this.curve.evaluate(t,i);this._temp.copy(this._velocity).multiplyScalar(n),e.add(this._temp)}}};v([y()],Jt.prototype,"enabled",2),v([y(U)],Jt.prototype,"curve",2),v([y()],Jt.prototype,"curveMultiplier",2),v([y()],Jt.prototype,"mode",2);var ke=class{enabled;range;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t,i,n){let r=e.length(),s=H.remap(r,this.range.x,this.range.y,0,1),a=this.size.evaluate(s,i);return n*a}};v([y()],ke.prototype,"enabled",2),v([y(Gm)],ke.prototype,"range",2),v([y()],ke.prototype,"separateAxes",2),v([y(U)],ke.prototype,"size",2),v([y()],ke.prototype,"sizeMultiplier",2),v([y(U)],ke.prototype,"x",2),v([y()],ke.prototype,"xMultiplier",2),v([y(U)],ke.prototype,"y",2),v([y()],ke.prototype,"yMultiplier",2),v([y(U)],ke.prototype,"z",2),v([y()],ke.prototype,"zMultiplier",2);var Ti=class{enabled;range;color;evaluate(e,t,i){let n=e.length(),r=H.remap(n,this.range.x,this.range.y,0,1),s=this.color.evaluate(r,t);i.x*=s.r,i.y*=s.g,i.z*=s.b,i.w*=s.alpha}};v([y()],Ti.prototype,"enabled",2),v([y(Gm)],Ti.prototype,"range",2),v([y(Me)],Ti.prototype,"color",2);var oo=class extends We{},us=class extends M{deleteBoxes=[];awake(){this.deleteBoxes=R.findObjectsOfType(oo,this.context)}update(){for(let e of this.deleteBoxes){let t=this.gameObject;e.isInBox(t)===!0&&(R.getComponentInParent(this.gameObject,zt)||So(this.gameObject,this.context.connection))}}};var so=class extends M{visibleOn;onEnable(){this.apply()}apply(){this.test()||R.setActive(this.gameObject,!1)}test(){return this.visibleOn<0?!0:mx()?(this.visibleOn&2)!==0:(this.visibleOn&1)!==0}};v([y()],so.prototype,"visibleOn",2);var uc;function mx(){if(uc===!0||uc===!1)return uc;let o=!1;return function(e){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(o=!0)}(navigator.userAgent||navigator.vendor||window.opera),uc=o,o}import*as Y from"three";var qd=!1;var Bn=class extends Vt{static get HasAnySelected(){return this._active>0}transformSelf=!0;orbit=null;selectStartEventListener=[];selectEndEventListener=[];constructor(){super(),this.selectStartEventListener=[],this.selectEndEventListener=[],this._dragDelta=new Y.Vector2}addDragEventListener(e,t){switch(e){case"selectstart":this.selectStartEventListener.push(t);break;case"selectend":this.selectEndEventListener.push(t);break}}_dragHelper=null;start(){this.orbit=R.findObjectOfType(nt,this.context)}_draggingRigidbodies=[];allowEdit(e=null){return this.context.connection.allowEditing}onPointerEnter(e){if(!this.allowEdit(this.gameObject)||V.IsInWebXR)return;let t=R.getComponentInParent(e.object,Bn);!t||t!==this||(Bn.lastHovered=e.object,this.context.domElement.style.cursor="pointer")}onPointerExit(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||Bn.lastHovered===e.object&&(this.context.domElement.style.cursor="auto")}_waitingForDragStart=null;onPointerDown(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||(Bn._active+=1,this._dragDelta.set(0,0),this._didDrag=!1,this._waitingForDragStart=e,e.StopPropagation(),this.orbit&&(this.orbit.enabled=!1))}onPointerUp(e){this._waitingForDragStart=null,this.allowEdit(this.gameObject)&&(Bn._active>0&&(Bn._active-=1),!V.IsInWebXR&&(this.onDragEnd(e),e.StopPropagation(),this.orbit&&(this.orbit.enabled=!0)))}update(){if(!V.IsInWebXR){if(this._waitingForDragStart){if(!this._didDrag){let t=this.context.input.getPointerPositionDelta(0);if(t&&this._dragDelta.add(t),this._dragDelta.length()>2)this._didDrag=!0;else return}let e=this._waitingForDragStart;this._waitingForDragStart=null,this.onDragStart(e)}this._dragHelper&&this._dragHelper.hasSelected&&this.onUpdateDrag(),this._isDragging&&this._dragHelper?.hasSelected===!1&&this.onDragEnd(null)}}_isDragging=!1;_marker=null;_dragDelta;_didDrag=!1;onDragStart(e){if(!this._dragHelper)if(this.context.mainCamera)this._dragHelper=new dc(this.context.mainCamera);else return;if(!e||!e.object)return;let t=R.getComponentInParent(e.object,Bn);if(!t||t!==this)return;let i=e.object;this.transformSelf&&(i=this.gameObject);let n={selected:i,attached:i};for(let c of this.selectStartEventListener)c(this,n);if(!n.attached)return;n.attached,i=n.attached,this._isDragging=!0,this._dragHelper.setSelected(i,this.context),this.orbit&&(this.orbit.enabled=!1);let r=R.getComponentInChildren(i,Pt);qd&&console.log("DRAG START",r,i),r&&(r.fastMode=!0,r?.requestOwnership()),this._marker=R.addNewComponent(i,zt),this._draggingRigidbodies.length=0;let s=R.getComponentsInChildren(i,J);s&&this._draggingRigidbodies.push(...s);let a=Qc();R.invokeOnChildren(this._dragHelper.selected,a("onDragStart"))}onUpdateDrag(){if(!!this._dragHelper){this._dragHelper.onUpdate(this.context);for(let e of this._draggingRigidbodies)e.wakeUp(),e.resetVelocities()}}onDragEnd(e){if(!this||!this._isDragging||(this._isDragging=!1,!this._dragHelper))return;for(let n of this._draggingRigidbodies)n.setVelocity(n.smoothedVelocity);this._draggingRigidbodies.length=0;let t=this._dragHelper.selected;if(qd&&console.log("DRAG END",t,t?.visible),this._dragHelper.setSelected(null,this.context),this.orbit&&(this.orbit.enabled=!0),e?.object){let n=R.getComponentInChildren(e.object,Pt);n&&(n.fastMode=!1),this._marker&&this._marker.destroy()}for(let n of this.selectEndEventListener)n(this);let i=Qc();R.invokeOnChildren(t,i("onDragEnd"))}},Ji=Bn;I(Ji,"_active",0),I(Ji,"lastHovered");var Yd=class{get hasSelected(){return this._selected!==null&&this._selected!==void 0}get selected(){return this._selected}_selected=null;_context=null;_camera;_cameraPlane=new Y.Plane;_hasGroundPlane=!1;_groundPlane=new Y.Plane;_groundOffset=new Y.Vector3;_groundOffsetFactor=0;_groundDistance=0;_groundPlanePoint=new Y.Vector3;_raycaster=new Y.Raycaster;_cameraPlaneOffset=new Y.Vector3;_intersection=new Y.Vector3;_worldPosition=new Y.Vector3;_inverseMatrix=new Y.Matrix4;_rbs=[];_groundLine;_groundMarker;constructor(e){this._camera=e;let t=new Y.Line(Yd.geometry),i=t.material;i.color=new Y.Color(.4,.4,.4),t.layers.set(2),t.name="line",t.scale.y=1,this._groundLine=t;let n=new Y.SphereGeometry(.5,22,22),r=new Y.MeshBasicMaterial({color:i.color}),s=new Y.Mesh(n,r);s.visible=!1,s.layers.set(2),this._groundMarker=s}setSelected(e,t){if(this._selected&&t)for(let i of this._rbs)i.wakeUp(),i.setVelocity(0,0,0);if(this._selected&&ve.Remove(t,this._selected),this._selected=e,this._context=t,this._rbs.length=0,e?(t.scene.add(this._groundLine),t.scene.add(this._groundMarker)):(this._groundLine.removeFromParent(),this._groundMarker.removeFromParent()),this._selected){if(!t){console.error("DragHelper: no context");return}ve.Add(t,this._selected,null),this._groundOffsetFactor=0,this._hasGroundPlane=!0,this._groundOffset.set(0,0,0),this._requireUpdateGroundPlane=!0,this.onUpdateScreenSpacePlane()}}_groundOffsetVector=new Y.Vector3(0,1,0);_requireUpdateGroundPlane=!0;_didDragOnGroundPlaneLastFrame=!1;onUpdate(e){if(!this._context)return;let t=" ",i="d",n="s",r=this._context?.input.isKeyPressed(t)||this._context?.input.isKeyPressed(i),s=this._context.input.getTouchesPressedCount()>=2||r;if(s){let c=this._context.input.getPointerPositionDelta(0);c&&(this._groundOffsetVector.set(0,1,0),this._selected?.rotateOnWorldAxis(this._groundOffsetVector,c.x*this._context.time.deltaTime))}let a=this._context.input.getPointerPositionRC(0);if(!!a&&(this._raycaster.setFromCamera(a,this._camera),this._selected)){qd&&console.log("UPDATE DRAG",this._selected),this._groundOffsetVector.set(0,1,0);let c=B(this._camera).clone().sub(B(this._selected)).normalize(),u=Math.abs(c.dot(this._groundOffsetVector)),l=this._context?.input.isKeyPressed(t)||this._context?.input.isKeyPressed(i),d=!s&&u>.2&&!l&&this._context.input.getPointerPressedCount()<=1,h=this._didDragOnGroundPlaneLastFrame!==d;if(this._didDragOnGroundPlaneLastFrame=d,this._hasGroundPlane||(this._requireUpdateGroundPlane=!0),(this._requireUpdateGroundPlane||!d||h)&&this.onUpdateGroundPlane(),this._requireUpdateGroundPlane=!1,this._hasGroundPlane)if(this._raycaster.ray.intersectPlane(this._groundPlane,this._intersection)){let g=this._intersection.y;if(this._groundPlanePoint.copy(this._intersection).sub(this._groundOffset),this._groundPlanePoint.y=g,d){this._groundOffsetVector.set(0,1,0);let E=this._intersection.sub(this._groundOffset).add(this._groundOffsetVector.multiplyScalar(this._groundOffsetFactor));this.onUpdateWorldPosition(E,this._groundPlanePoint,!1),this.onDidUpdate();return}}else this._groundPlanePoint.set(0,99999,0);h&&this.onUpdateScreenSpacePlane(),this._requireUpdateGroundPlane=!0,this._raycaster.ray.intersectPlane(this._cameraPlane,this._intersection)&&(this.onUpdateWorldPosition(this._intersection.sub(this._cameraPlaneOffset),this._groundPlanePoint,!0),this.onDidUpdate())}}onUpdateWorldPosition(e,t,i){if(!!this._selected){if(i){let n=B(this._selected);n.y=e.y,e=n}if(te(this._selected,e),te(this._groundLine,e),this._hasGroundPlane?this._groundLine.scale.y=this._groundDistance:this._groundLine.scale.y=1e3,this._groundMarker.visible=t!==null,t){let n=B(this._camera).distanceTo(t)*.01;this._groundMarker.scale.set(n,n,n),te(this._groundMarker,t)}}}onUpdateScreenSpacePlane(){if(!this._selected||!this._context)return;let e=this._context.input.getPointerPositionRC(0);!e||(this._raycaster.setFromCamera(e,this._camera),this._cameraPlane.setFromNormalAndCoplanarPoint(this._camera.getWorldDirection(this._cameraPlane.normal),this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)),this._raycaster.ray.intersectPlane(this._cameraPlane,this._intersection)&&this._selected.parent&&(this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert(),this._cameraPlaneOffset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld))))}onUpdateGroundPlane(){if(!this._selected||!this._context)return;let e=B(this._selected),t=new Y.Ray(new Y.Vector3(0,.1,0).add(e),new Y.Vector3(0,-1,0)),i=new xe;i.ignore=[this._selected];let n=this._context.physics.raycastFromRay(t,i);for(let r=0;r<n.length;r++){let s=n[r];if(!s.face||this.contains(this._selected,s.object))continue;let a=new Y.Vector3(0,1,0);this._groundPlane.setFromNormalAndCoplanarPoint(a,s.point);break}this._hasGroundPlane=!0,this._groundPlane.setFromNormalAndCoplanarPoint(t.direction.multiplyScalar(-1),t.origin),this._raycaster.ray.intersectPlane(this._groundPlane,this._intersection),this._groundDistance=this._intersection.distanceTo(e),this._groundOffset.copy(this._intersection).sub(e)}onDidUpdate(){re.markDirty(this._selected);for(let e of this._rbs)e.wakeUp(),e.resetForcesAndTorques(),e.setAngularVelocity(0,0,0)}contains(e,t){if(e===t)return!0;if(e.children){for(let i of e.children)if(this.contains(i,t))return!0}return!1}},dc=Yd;I(dc,"geometry",new Y.BufferGeometry().setFromPoints([new Y.Vector3(0,0,0),new Y.Vector3(0,-1,0)]));var Si=class extends M{url=null;urlParameterName=null;localhost=null;awake(){this.context.connection.registerProvider(this)}getWebsocketUrl(){let e=this.url?Si.GetUrl(this.url,this.localhost):null;if(this.urlParameterName){let r=P(this.urlParameterName);r&&typeof r=="string"&&(e=r)}if(!e)return null;let i=new RegExp("(((https?)|(?<socket_prefix>wss?))://)?(www.)?(?<url>.+)","gm").exec(e);return i?.groups?i?.groups.socket_prefix?e:"wss://"+i?.groups.url:null}static GetUrl(e,t){let i=e,n=Si.IsLocalNetwork()&&t;return n&&(i=t),e?.startsWith("/")&&(i=(n?i:window.location.origin)+e),i}static IsLocalNetwork(e=window.location.hostname){return ut(e)}};var vr=class extends M{filesBackendUrl;localhost;_dragOver;_drop;onEnable(){this.filesBackendUrl=this.filesBackendUrl?Si.GetUrl(this.filesBackendUrl,this.localhost):void 0,this._dragOver=this.onDrag.bind(this),this._drop=this.onDrop.bind(this),this.context.domElement.addEventListener("dragover",this._dragOver),this.context.domElement.addEventListener("drop",this._drop)}onDisable(){this.context.domElement.removeEventListener("dragover",this._dragOver),this.context.domElement.removeEventListener("drop",this._drop)}onDrag(e){e.preventDefault()}async addFiles(e){for(let t of e){if(!t)continue;console.log("Register file "+t.name+" to",this.filesBackendUrl,t);let i=await Hu(t,this.context,this.filesBackendUrl);this.dispatchEvent(new CustomEvent("file-dropped",{detail:t})),i&&this.addObject(void 0,i)}}async onDrop(e){if(console.log(e),!e.dataTransfer)return;e.preventDefault();let t=e.dataTransfer.items;if(!!t)for(let i in t){let n=t[i];if(n.kind==="file"){let r=n.getAsFile();if(!r)continue;console.log("Register file "+r.name+" to",this.filesBackendUrl,r);let s=await Hu(r,this.context,this.filesBackendUrl);this.dispatchEvent(new CustomEvent("file-dropped",{detail:r})),s&&this.addObject(e,s)}else n.kind==="string"&&n.type=="text/plain"&&n.getAsString(async r=>{console.log("dropped url",r);try{let s=new URL(r);if(!s)return;let a=await Af(s,this.context);a&&this.addObject(e,a)}catch{console.log("dropped string is not a valid URL!",r)}})}}async addObject(e,t){console.log("Dropped",t);let i=t.scene;if(e!==void 0){let n=new xe;n.setMask(16777215),n.screenPointFromOffset(e.offsetX,e.offsetY);let r=this.context.physics.raycast(n);if(r&&r.length>0)for(let s of r){i.position.copy(s.point);break}}this.gameObject.add(i),this.dispatchEvent(new CustomEvent("object-added",{detail:t}))}};v([y()],vr.prototype,"filesBackendUrl",2),v([y()],vr.prototype,"localhost",2);import{Vector3 as gx,Quaternion as bx,Object3D as zm}from"three";var Zi=class extends Vt{parent=null;object=null;limitCount=10;limitInterval=60;_currentCount=0;_startPosition=null;_startQuaternion=null;awake(){if(this.object){if(this.object===this.gameObject){console.error("Can not duplicate self");return}this.object.visible=!1,this._startPosition=this.object.position?.clone()??new gx(0,0,0),this._startQuaternion=this.object.quaternion?.clone()??new bx(0,0,0,1)}let e=R.getComponentInParent(this.gameObject,Ji);e?e.addDragEventListener("selectstart",(t,i)=>{if(this._currentCount>=this.limitCount){i.attached=null;return}let n=this.handleDuplication(i.selected);n&&(console.assert(n!==i.selected,"Duplicated object is original"),i.attached=n)}):console.warn("Could no find drag controls in parent",this.name),se.addEventListener("select-start",(t,i)=>{if(this._currentCount>=this.limitCount){i.grab=null;return}let n=this.handleDuplication(i.selected);n&&(i.grab=n)}),this.cloneLimitIntervalFn()}cloneLimitIntervalFn(){this.destroyed||(this._currentCount>0&&(this._currentCount-=1),setTimeout(()=>{this.cloneLimitIntervalFn()},this.limitInterval/this.limitCount*1e3))}handleDuplication(e){if(this._currentCount>=this.limitCount||!this.object)return null;if(e===this.gameObject||this.handleMultiObject(e)){if(this.object===this.gameObject)return null;this.object.visible=!0,this._startPosition&&this.object.position.copy(this._startPosition),this._startQuaternion&&this.object.quaternion.copy(this._startQuaternion);let t=new Ue;this.parent||(this.parent=this.gameObject.parent),this.parent&&(t.parent=this.parent.guid??this.parent.userData?.guid,t.keepWorldPosition=!0),t.position=this.worldPosition,t.rotation=this.worldQuaternion,t.context=this.context,this._currentCount+=1;let i=R.instantiateSynced(this.object,t);return console.assert(i!==this.object,"Duplicated object is original"),this.object.visible=!1,this._startPosition&&this.object.position.clone().copy(this._startPosition),this._startQuaternion&&this.object.quaternion.clone().copy(this._startQuaternion),i}return null}handleMultiObject(e){return this.gameObject.type==="Group"||this.gameObject.type==="Object3D"?this.isInChildren(this.gameObject,e):!1}isInChildren(e,t){if(!e)return!1;if(e===t)return!0;if(e.children){for(let i of e.children)if(this.isInChildren(i,t))return!0}return!1}};v([y(zm)],Zi.prototype,"parent",2),v([y(zm)],Zi.prototype,"object",2),v([y()],Zi.prototype,"limitCount",2),v([y()],Zi.prototype,"limitInterval",2);var fa=class{eventID;callback};v([y()],fa.prototype,"eventID",2),v([y(de)],fa.prototype,"callback",2);var ao=class extends M{triggers;invoke(e){if(!!this.triggers)for(let t of this.triggers)t.eventID===e&&t.callback.invoke()}onPointerClick(e){this.invoke(4)}onPointerEnter(e){this.invoke(0)}onPointerExit(e){this.invoke(1)}onPointerDown(e){this.invoke(2)}onPointerUp(e){this.invoke(3)}};v([y(fa)],ao.prototype,"triggers",2);import*as en from"three";import*as ma from"three";var Un=class{get lightmap(){return this.lightmapTexture}set lightmap(e){e!==this.lightmapTexture&&(this.lightmapTexture=e,this.setupLightmap())}lightmapIndex=-1;lightmapScaleOffset=new ma.Vector4(1,1,0,0);context;gameObject;lightmapTexture=null;lightmapScaleOffsetUniform={value:new ma.Vector4(1,1,0,0)};lightmapUniform={value:null};beforeRenderCallback;constructor(e,t){this.gameObject=e,this.context=t}init(e,t,i,n=!1){if(console.assert(this.gameObject!==void 0&&this.gameObject!==null,"Missing gameobject",this),this.lightmapIndex=e,this.lightmapIndex<0)return;this.lightmapScaleOffset=t,this.lightmapTexture=i,n&&this.setLightmapDebugMaterial(),this.setupLightmap()}bindOnBeforeRender(){this.beforeRenderCallback=this.onBeforeRenderThreeComplete.bind(this),this.context.addBeforeRenderListener(this.gameObject,this.beforeRenderCallback)}onBeforeRenderThreeComplete(e,t,i,n,r,s){this.onBeforeRenderThree(r)}setupLightmap(){if(this.gameObject.type==="Object3D")return;if(this.gameObject.type==="Group"){console.warn("Lightmap on multimaterial object is not supported yet... please ask kindly for implementation.");return}console.assert(this.gameObject.type==="Mesh","Lightmap only works on meshes",this);let e=this.gameObject;e.geometry.getAttribute("uv2")||e.geometry.setAttribute("uv2",e.geometry.getAttribute("uv"));let t=this.gameObject.material.clone();if(this.gameObject.material=t,this.gameObject.material.onBeforeCompile=(i,n)=>{i.uniforms.lightmap=this.lightmapUniform,i.uniforms.lightmapScaleOffset=this.lightmapScaleOffsetUniform},this.lightmapIndex>=0){let i=this.lightmapTexture,n=this.gameObject.material;n&&i&&(n.uniforms||(n.uniforms={}),n.lightMap=i,n.uniforms.lightmap={value:i})}}onBeforeRenderThree(e){let t=e.uniforms;t&&t.lightmap&&(this.lightmapScaleOffsetUniform.value=this.lightmapScaleOffset,this.lightmapUniform.value=this.lightmapTexture,t.lightmap=this.lightmapUniform,t.lightmapScaleOffset=this.lightmapScaleOffsetUniform)}setLightmapDebugMaterial(){this.gameObject.material=new ma.ShaderMaterial({vertexShader:`
213
+ `;function hy(o){if(td.has(o))return td.get(o);{let e=document.createElement("div");e.classList.add(Ui),e.classList.add("desktop"),e.classList.add("debug-container"),e.style.position="absolute",e.style.top="0",e.style.right="5px",e.style.paddingTop="0px",e.style.maxWidth="70%",e.style.maxHeight="calc(100% - 5px)",e.style.zIndex="1000",e.style.pointerEvents="scroll",e.style.display="flex",e.style.alignItems="end",e.style.flexDirection="column",e.style.color="white",e.style.overflow="auto",o.appendChild(e),td.set(o,e);let t=document.createElement("style");return t.innerHTML=dy,e.appendChild(t),e}}var em=Symbol("logtype"),Fl=new Map;function py(o){o.remove();let e=o[em],t=Fl.get(e)??[];t.push(o),Fl.set(e,t)}function fy(o,e){if(Fl.has(o)){let i=Fl.get(o);if(i.length>0){let n=i.pop();return n.innerHTML=e,n}}let t=document.createElement("div");switch(t.style.marginRight="5px",t.style.padding=".5em",t.style.backgroundColor="rgba(0,0,0,.9)",t.style.marginTop="5px",t.style.marginBottom="3px",t.style.borderRadius="8px",t.style.pointerEvents="all",t.style.userSelect="text",t.style.maxWidth="250px",t.style.whiteSpace="pre-wrap",t.style["backdrop-filter"]="blur(10px)",t.style.backgroundColor="rgba(20,20,20,.8)",t.style.boxShadow="inset 0 0 80px rgba(0,0,0,.2), 0 0 5px rgba(0,0,0,.2)",t.style.border="1px solid rgba(160,160,160,.2)",t[em]=o,o){case 0:t.classList.add("log"),t.style.color="rgba(200,200,200,.7)",t.style.backgroundColor="rgba(40,40,40,.7)";break;case 1:t.classList.add("warn"),t.style.color="rgb(255, 255, 150)",t.style.backgroundColor="rgba(50,50,20,.8)";break;case 2:t.classList.add("error"),t.style.color="rgb(255, 50, 50",t.style.backgroundColor="rgba(50,20,20,.8)";break}return t.title="Open the browser console (F12) for more information",t.innerHTML=e,t}var ci=function(o,e){return function(t,i,n){my(t,i,n,o,e)}};function my(o,e,t,i,n){if(!(!n&&!i&&!o.onValidate)){if(t!==void 0){console.error("Invalid usage of validate decorator. Only fields can be validated.",o,e,t),Fe("Invalid usage of validate decorator. Only fields can be validated. Property: "+e,2);return}if(o.__internalAwake){let r=Symbol(e),s=o.__internalAwake;o.__internalAwake=function(){this[r]===void 0&&(this[r]=this[e],Object.defineProperty(this,e,{set:function(a){if(this[Na]===!0)this[r]=a;else{i?.call(this,a);let c=this[r];this[r]=a,this.onValidate?.call(this,e,c)}},get:function(){return n?.call(this),this[r]}})),s.call(this)}}}}import{AnimationClip as gy,MathUtils as by}from"three";var Go=class{_name;get name(){return this._name}_nameHash;get nameHash(){return this._nameHash}_normalizedTime;get normalizedTime(){return this._normalizedTime}_length;get length(){return this._length}_speed;get speed(){return this._speed}constructor(e,t,i,n){this._name=e.name,this._nameHash=e.hash,this._normalizedTime=t,this._length=i,this._speed=n}};function tm(o,e){return{name:"",isLooping:!1,guid:e?.generateUUID()??by.generateUUID(),index:-1,clip:new gy(o,1,[])}}import{AnimationClip as vy,AnimationMixer as yy,AxesHelper as _y,Euler as im,LoopOnce as xy,Quaternion as ui,Vector3 as ia}from"three";import*as Ul from"three";var Gi=P("debuganimatorcontroller"),rd=P("debugrootmotion"),hi=class{Play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){if(t<0)t=0;else if(t>=this.model.layers.length){console.warn("invalid layer");return}let s=this.model.layers[t].stateMachine;for(let a of s.states)if(a.name===e||a.hash===e){Gi&&console.log("transition to ",a),this.transitionTo(a,n,i);return}console.warn("Could not find "+e+" to play")}Reset(){this.setStartTransition()}SetBool(e,t){let i=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(n=>n[i]===e).forEach(n=>n.value=t)}GetBool(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.find(i=>i[t]===e)?.value??!1}SetFloat(e,t){let i=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(n=>n[i]===e).forEach(n=>n.value=t)}GetFloat(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.find(i=>i[t]===e)?.value??0}SetInteger(e,t){let i=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(n=>n[i]===e).forEach(n=>n.value=t)}GetInteger(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.find(i=>i[t]===e)?.value??0}SetTrigger(e){Gi&&console.log("SET TRIGGER",e);let t=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(i=>i[t]===e).forEach(i=>i.value=!0)}ResetTrigger(e){let t=typeof e=="string"?"name":"hash";return this.model?.parameters.filter(i=>i[t]===e).forEach(i=>i.value=!1)}IsInTransition(){return this._activeStates.length>1}SetSpeed(e){this._speed=e}FindState(e){if(!e)return null;for(let t of this.model.layers)for(let i of t.stateMachine.states)if(i.name===e)return i;return null}normalizedStartOffset=0;_speed=1;animator;model;get context(){return this.animator?.context}bind(e){this.animator=e,this._mixer=new yy(this.animator.gameObject),this.createActions(this.animator)}clone(){let e=Us(this.model,(i,n,r)=>r==null?!0:!(r.type==="Object3D"||r.isObject3D===!0||Ip(r)||r.tracks!==void 0));return console.assert(e!==this.model),new hi(e)}update(){if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates();let e=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&this.rootMotionHandler?.onBeforeUpdate(),this._mixer.update(e),this.animator.applyRootMotion&&this.rootMotionHandler?.onAfterUpdate()}_mixer;_activeState;constructor(e){this.model=e,Gi&&console.log(this)}_activeStates=[];updateActiveStates(){for(let e=0;e<this._activeStates.length;e++){let t=this._activeStates[e],i=t.motion;if(!i.action)this._activeStates.splice(e,1),e--;else{let n=i.action;n.getEffectiveWeight()<=0&&!n.isRunning()&&(Gi&&console.debug("REMOVE",t.name,n.getEffectiveWeight(),n.isRunning(),n.isScheduled()),this._activeStates.splice(e,1),e--)}}}setStartTransition(){for(let e of this.model.layers){let t=e.stateMachine;t.defaultState===void 0&&(Gi&&console.warn("AnimatorController default state is undefined, will assign state 0 as default",e),t.defaultState=0);let i=t.states[t.defaultState];this.transitionTo(i,0,this.normalizedStartOffset)}}evaluateTransitions(){let t=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;t=!0}let i=this._activeState,n=i.motion.action,r=0;for(let a of i.transitions){if(++r,!a.hasExitTime&&a.conditions.length<=0)continue;let c=!0;for(let u of a.conditions)if(!this.evaluateCondition(u)){c=!1;break}if(!!c){for(let u of a.conditions){let l=this.model.parameters.find(d=>d.name===u.parameter);l?.type===9&&(l.value=!1)}if(n){let u=i.motion.clip.duration,l=u<=0?1:n.time/u;if(a.hasExitTime?l>=a.exitTime:!0){n.clampWhenFinished=!0,Gi&&console.log("transition to "+a.destinationState,a,l,a.exitTime,a.hasExitTime),this.transitionTo(a.destinationState,a.duration,a.offset);return}}else{this.transitionTo(a.destinationState,a.duration,a.offset);return}}}let s=!1;if(i.motion.isLooping&&n&&n.time>=n.getClip().duration&&(s=!0,n.reset(),n.time=0,n.play()),!s&&i&&!t&&n&&this.animator&&i.behaviours){let a=n?.getClip().duration,c=n.time/a,u=new Go(this._activeState,c,a,this._speed);for(let l of i.behaviours)l.instance&&l.instance.onStateUpdate?.call(l.instance,this.animator,u,0)}}getState(e,t){return typeof e=="number"&&(e==-1&&(e=this.model.layers[t].stateMachine.defaultState,e===void 0&&(Gi&&console.warn("AnimatorController default state is undefined: ",this.model,"Layer: "+t),e=0)),e=this.model.layers[t].stateMachine.states[e]),e}transitionTo(e,t,i){if(!this.animator)return;let n=0;if(e=this.getState(e,n),!e?.motion||!e.motion.clip)return;let r=this._activeState===e;if(r){let u=e.motion;!u.action_loopback&&u.clip&&(this._mixer.uncacheAction(u.clip,this.animator.gameObject),u.action_loopback=this.createAction(u.clip))}if(this._activeState?.behaviours&&this._activeState.motion.action){let u=this._activeState?.motion.clip.duration,l=this._activeState.motion.action.time/u,d=new Go(this._activeState,l,u,this._speed);for(let h of this._activeState.behaviours)h.instance?.onStateExit?.call(h.instance,this.animator,d,n)}let s=this._activeState?.motion.action;s&&s.fadeOut(t),r&&(e.motion.action=e.motion.action_loopback,e.motion.action_loopback=s);let a=this._activeState;this._activeState=e;let c=e.motion?.action;if(c){i=Math.max(0,Math.min(1,i)),c.isRunning()&&c.stop(),c.reset(),c.timeScale=this._speed,c.enabled=!0;let u=e.motion.clip.duration;if(c.time=i*u,c.clampWhenFinished=!0,c.setLoop(xy,0),t>0?c.fadeIn(t):c.setEffectiveWeight(1),c.play(),this.rootMotionHandler&&this.rootMotionHandler.onStart(c),this._activeStates.includes(e)||this._activeStates.push(e),this._activeState.behaviours){let l=new Go(e,i,u,this._speed);for(let d of this._activeState.behaviours)d.instance?.onStateEnter?.call(d.instance,this.animator,l,n)}}else console.warn("No action",e.motion,this);Gi&&console.log("TRANSITION FROM "+a?.name+" TO "+e.name,t,s,c,c?.getEffectiveTimeScale(),c?.getEffectiveWeight(),c?.isRunning(),c?.isScheduled(),c?.paused)}createAction(e){if(this._mixer.existingAction(e)&&this._mixer.uncacheAction(e,this.animator?.gameObject),this.animator?.applyRootMotion){this.rootMotionHandler||(this.rootMotionHandler=new od(this));let i=this.animator.gameObject;return this.rootMotionHandler.createClip(this._mixer,i,e)}else return this._mixer.clipAction(e)}evaluateCondition(e){let t=this.model.parameters.find(i=>i.name===e.parameter);if(!t)return!1;switch(e.mode){case 1:return t.value===!0;case 2:return t.value===!1;case 3:return t.value>e.threshold;case 4:return t.value<e.threshold;case 6:return t.value===e.threshold;case 7:return t.value!==e.threshold}return!1}createActions(e){for(let t of this.model.layers){let i=t.stateMachine;for(let n=0;n<i.states.length;n++){let r=i.states[n];r.transitions||(r.transitions=[]);for(let s of r.transitions)s.conditions||(s.conditions=[]);if(r.motion||(r.motion=tm(r.name)),this.animator&&r.motion.clips){let s=r.motion.clips?.find(a=>a.node.name===this.animator?.gameObject?.name);r.motion.clip=s?.clip}if(!r.motion.clip){let s=new vy(void 0,void 0,[]);r.motion.clip=s}if(r.motion?.clip){let s=r.motion.clip,a=this.createAction(s);r.motion.action=a}if(r.behaviours&&Array.isArray(r.behaviours))for(let s of r.behaviours){if(!s?.typeName)continue;let a=O.get(s.typeName),c=new a;c.isStateMachineBehaviour&&(c._context=this.context??void 0,jt(c,s.properties),s.instance=c),Gi&&console.log("Created animator controller behaviour",r.name,s.typeName,s.properties,c)}}}}*enumerateActions(){for(let e of this.model.layers){let t=e.stateMachine;for(let i=0;i<t.states.length;i++){let n=t.states[i];n?.motion&&(n.motion.action&&(yield n.motion.action),n.motion.action_loopback&&(yield n.motion.action_loopback))}}}rootMotionHandler},Bl=class{track;createdInterpolant;originalEvaluate;customEvaluate;constructor(e,t){this.track=e;let i=e,n=i.createInterpolant.bind(e);i.createInterpolant=()=>(i.createInterpolant=n,this.createdInterpolant=n(),this.originalEvaluate=this.createdInterpolant.evaluate.bind(this.createdInterpolant),this.customEvaluate=r=>{if(!this.originalEvaluate)return;let s=this.originalEvaluate(r);return t(r,s)},this.createdInterpolant.evaluate=this.customEvaluate,this.createdInterpolant)}evaluate(e){this.customEvaluate&&this.customEvaluate(e)}dispose(){this.createdInterpolant&&this.originalEvaluate&&(this.createdInterpolant.evaluate=this.originalEvaluate),this.track=void 0,this.createdInterpolant=null,this.originalEvaluate=void 0,this.customEvaluate=void 0}},we=class{set action(e){this._action=e}get action(){return this._action}_action;root;clip;positionWrapper=null;rotationWrapper=null;context;positionChange=new ia;rotationChange=new ui;constructor(e,t,i,n,r){if(this.context=e,this.root=t,this.clip=i,we.firstKeyframeRotation[i.uuid]||(we.firstKeyframeRotation[i.uuid]=new Ul.Quaternion),r){let s=r.values;we.firstKeyframeRotation[i.uuid].set(s[0],s[1],s[2],s[3])}we.spaceRotation[i.uuid]||(we.spaceRotation[i.uuid]=new ui),we.effectiveSpaceRotation[i.uuid]||(we.effectiveSpaceRotation[i.uuid]=new ui),we.clipOffsetRotation[i.uuid]=new ui,r&&we.clipOffsetRotation[i.uuid].set(r.values[0],r.values[1],r.values[2],r.values[3]).invert(),this.handlePosition(i,n),this.handleRotation(i,r)}onStart(e){if(e.getClip()!==this.clip)return;let t=we.lastObjRotation[this.root.uuid];we.spaceRotation[this.clip.uuid].copy(t);{let i=new Ul.Euler().setFromQuaternion(t);console.log("START",this.clip.name,H.toDegrees(i.y))}}getClipRotationOffset(){return we.clipOffsetRotation[this.clip.uuid]}handlePosition(e,t){if(t){let i=this.root;rd&&i.add(new _y),we.lastObjPosition[i.uuid]||(we.lastObjPosition[i.uuid]=new ia);let n=new ia,r=new ia,s=0;this.positionWrapper=new Bl(t,(a,c)=>{let u=this.action.getEffectiveWeight();if(rd&&i.position.length()>8&&i.position.set(0,i.position.y,0),a>s){n.set(c[0],c[1],c[2]),n.sub(r),n.multiplyScalar(u),n.applyQuaternion(this.getClipRotationOffset());let l=this.clip.uuid;n.applyQuaternion(we.spaceRotation[l]),this.positionChange.copy(n)}return r.fromArray(c),s=a,c[0]=0,c[1]=0,c[2]=0,c})}}handleRotation(e,t){if(t){if(rd){let a=t.values,c=new im().setFromQuaternion(new ui(a[0],a[1],a[2],a[3]));console.log(e.name,t.name,"FIRST ROTATION IN TRACK",H.toDegrees(c.y));let u=t.values.length-4,l=new ui().set(a[u],a[u+1],a[u+2],a[u+3]),d=new im().setFromQuaternion(l);console.log(e.name,t.name,"LAST ROTATION IN TRACK",H.toDegrees(d.y))}let i=this.root;we.lastObjRotation[i.uuid]||(we.lastObjRotation[i.uuid]=new ui);let n=0,r=new ui,s=new ui;this.rotationWrapper=new Bl(t,(a,c)=>(a>n&&(s.set(c[0],c[1],c[2],c[3]),r.invert(),s.multiply(r),this.rotationChange.copy(s)),r.fromArray(c),n=a,c[0]=0,c[1]=0,c[2]=0,c[3]=1,c))}}onBeforeUpdate(){this.positionChange.set(0,0,0),this.rotationChange.set(0,0,0,1)}onAfterUpdate(){let e=this.action.getEffectiveWeight();this.positionChange.multiplyScalar(e),this.rotationChange.slerp(we.identityQuaternion,1-e)}},di=we;I(di,"lastObjPosition",{}),I(di,"lastObjRotation",{}),I(di,"firstKeyframeRotation",{}),I(di,"spaceRotation",{}),I(di,"effectiveSpaceRotation",{}),I(di,"clipOffsetRotation",{}),I(di,"identityQuaternion",new ui);var od=class{controller;handler=[];root;constructor(e){this.controller=e}createClip(e,t,i){this.root=t;let n="";t&&"name"in t&&(n=t.name);let r=this.findRootTrack(i,".position"),s=this.findRootTrack(i,".quaternion"),a=new di(this.controller.context,t,i,r,s);this.handler.push(a);let c=e.clipAction(i);return a.action=c,c}onStart(e){for(let t of this.handler)t.onStart(e)}onBeforeUpdate(){for(let e of this.handler)e.onBeforeUpdate()}summedPosition=new ia;summedRotation=new ui;onAfterUpdate(){this.summedPosition.set(0,0,0),this.summedRotation.set(0,0,0,1);for(let e of this.handler)e.onAfterUpdate(),this.summedPosition.add(e.positionChange),this.summedRotation.multiply(e.rotationChange);this.root.position.add(this.summedPosition),this.root.quaternion.multiply(this.summedRotation),di.lastObjRotation[this.root.uuid].copy(this.root.quaternion)}findRootTrack(e,t){let i=e.tracks;for(let n of i)if(n.name.endsWith(t))return n;return null}};var nm=P("debuganimator"),Ee=class extends M{applyRootMotion=!1;hasRootMotion=!1;keepAnimatorControllerStateOnDisable=!1;set runtimeAnimatorController(e){this._animatorController&&this._animatorController.model===e||(e?e instanceof hi?this._animatorController=e:(nm&&console.log("Assign animator controller",e,this),this._animatorController=new hi(e)):this._animatorController=null)}get runtimeAnimatorController(){return this._animatorController}Play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){this.runtimeAnimatorController?.Play(e,t,i,n)}Reset(){this._animatorController?.Reset()}SetBool(e,t){this.runtimeAnimatorController?.SetBool(e,t)}GetBool(e){return this.runtimeAnimatorController?.GetBool(e)??!1}SetFloat(e,t){this.runtimeAnimatorController?.SetFloat(e,t)}GetFloat(e){return this.runtimeAnimatorController?.GetFloat(e)??-1}SetInteger(e,t){this.runtimeAnimatorController?.SetInteger(e,t)}GetInteger(e){return this.runtimeAnimatorController?.GetInteger(e)??-1}SetTrigger(e){this.runtimeAnimatorController?.SetTrigger(e)}ResetTrigger(e){this.runtimeAnimatorController?.ResetTrigger(e)}IsInTransition(){return this.runtimeAnimatorController?.IsInTransition()??!1}SetSpeed(e){e!==this.speed&&(this.speed=e,this._animatorController?.SetSpeed(e))}set minMaxSpeed(e){this.speed=H.lerp(e.x,e.y,Math.random())}set minMaxOffsetNormalized(e){this.normalizedStartOffset=H.lerp(e.x,e.y,Math.random()),this.runtimeAnimatorController&&(this.runtimeAnimatorController.normalizedStartOffset=this.normalizedStartOffset)}speed=1;normalizedStartOffset=0;_animatorController=null;awake(){if(nm&&console.log("ANIMATOR",this.name,this),!!this.gameObject&&this.runtimeAnimatorController){let e=this.runtimeAnimatorController.clone();console.assert(this.runtimeAnimatorController!==e),this.runtimeAnimatorController=e,console.assert(this.runtimeAnimatorController===e),this.runtimeAnimatorController.bind(this),this.runtimeAnimatorController.SetSpeed(this.speed),this.runtimeAnimatorController.normalizedStartOffset=this.normalizedStartOffset}}onDisable(){this.keepAnimatorControllerStateOnDisable||this._animatorController?.Reset()}onBeforeRender(){this._animatorController&&this._animatorController.update()}};v([y()],Ee.prototype,"applyRootMotion",2),v([y()],Ee.prototype,"hasRootMotion",2),v([y()],Ee.prototype,"keepAnimatorControllerStateOnDisable",2),v([y()],Ee.prototype,"runtimeAnimatorController",1);import*as Wr from"three";import{AnimationClip as wy}from"three";var Gl=P("debuganimation"),rt=class extends M{playAutomatically=!0;randomStartTime=!0;minMaxSpeed;minMaxOffsetNormalized;loop=!0;clampWhenFinished=!1;_tempAnimationClipBeforeGameObjectExisted=null;get clip(){return this.animations?.length?this.animations[0]:null}set clip(e){if(!this.__didAwake){Gl&&console.log("Assign clip during serialization",e),this._tempAnimationClipBeforeGameObjectExisted=e;return}!e||(Gl&&console.log("Assign clip",e,Boolean(this.gameObject)),this.gameObject.animations||(this.gameObject.animations=[]),!this.animations.includes(e)&&(this.animations.length>0?this.animations.splice(0,0,e):this.animations.push(e)))}set clips(e){this.animations=e}set animations(e){Gl&&console.log("assign animations",e),this.gameObject.animations=e}get animations(){return this.gameObject.animations}get currentAction(){return this._currentActions[0]}get currentActions(){return this._currentActions}mixer=void 0;get actions(){return this._actions}set actions(e){this._actions=e}_actions=[];_currentActions=[];_handles=[];awake(){Gl&&console.log(this),this._tempAnimationClipBeforeGameObjectExisted&&(this.clip=this._tempAnimationClipBeforeGameObjectExisted,this._tempAnimationClipBeforeGameObjectExisted=null),this.playAutomatically&&this.init()}onEnable(){if(this.playAutomatically&&this.animations?.length>0&&this.currentActions.length<=0){let e=Math.floor(Math.random()*this.actions.length);this.play(e)}}start(){this.randomStartTime&&this.currentAction&&(this.currentAction.time=Math.random()*this.currentAction.getClip().duration)}update(){if(!!this.mixer){this.mixer.update(this.context.time.deltaTime);for(let e of this._handles)e._update();this._handles?.length>0&&re.markDirty(this.gameObject)}}getAction(e){return this.actions?.find(t=>t.getClip().name===e)}get isPlaying(){for(let e=0;e<this._currentActions.length;e++)if(this._currentActions[e].isRunning())return!0;return!1}play(e,t){if(this.init(),!this.mixer)return;e===void 0&&(e=0);let i=e;if(typeof e=="number"){if(e>=this.animations.length)return;i=this.animations[e]}else typeof e=="string"&&(i=this.animations.find(r=>r.name===e));if(!i){console.error("Could not find clip",e);return}t||(t={}),t.minMaxOffsetNormalized||(t.minMaxOffsetNormalized=this.minMaxOffsetNormalized),t.minMaxSpeed||(t.minMaxSpeed=this.minMaxSpeed),t.loop||(t.loop=this.loop),t.clampWhenFinished||(t.clampWhenFinished=this.clampWhenFinished);for(let r of this.actions)if(r.getClip()===i)return this.internalOnPlay(r,t);let n=this.mixer.clipAction(i);return this.actions.push(n),this.internalOnPlay(n,t)}internalOnPlay(e,t){var i=this.currentAction;if(i===e&&i.isRunning()&&i.time<i.getClip().duration){let a=this.tryFindHandle(e);if(a)return a.getPromise()}let n=t?.exclusive??!0;t?.fadeDuration?(n&&i?.fadeOut(t.fadeDuration),e.fadeIn(t.fadeDuration)):n&&i?.stop(),e.reset(),e.enabled=!0,e.time=0,e.timeScale=1;let r=e.getClip();t?.minMaxOffsetNormalized&&(e.time=H.lerp(t.minMaxOffsetNormalized.x,t.minMaxOffsetNormalized.y,Math.random())*r.duration),t?.minMaxSpeed&&(e.timeScale=H.lerp(t.minMaxSpeed.x,t.minMaxSpeed.y,Math.random())),t?.clampWhenFinished&&(e.clampWhenFinished=!0),t?.startTime!==void 0&&(e.time=t.startTime),t?.loop!==void 0?e.loop=t.loop?Wr.LoopRepeat:Wr.LoopOnce:e.loop=Wr.LoopOnce,e.play();let s=new sd(e,this.mixer,t,a=>{this._handles.splice(this._handles.indexOf(s),1)});return this._handles.push(s),s.getPromise()}tryFindHandle(e){for(let t of this._handles)if(t.action===e)return t}_didInit=!1;init(){this._didInit||(this._didInit=!0,this.gameObject&&(this.actions=[],this.mixer=new Wr.AnimationMixer(this.gameObject)))}};v([y()],rt.prototype,"playAutomatically",2),v([y()],rt.prototype,"randomStartTime",2),v([y()],rt.prototype,"loop",2),v([y()],rt.prototype,"clampWhenFinished",2),v([y(wy)],rt.prototype,"clips",1);var sd=class{mixer;action;promise=null;resolve=null;reject=null;_options;_resolveCallback=null;_rejectCallback=null;_loopCallback;_finishedCallback;_resolvedOrRejectedCallback;constructor(e,t,i,n){this.action=e,this.mixer=t,this._resolvedOrRejectedCallback=n,this._options=i}getPromise(){return this.promise?this.promise:(this.promise=new Promise((e,t)=>{this._resolveCallback=e,this._rejectCallback=t,this.resolve=this.onResolve.bind(this),this.reject=this.onReject.bind(this)}),this._loopCallback=this.onLoop.bind(this),this._finishedCallback=this.onFinished.bind(this),this.mixer.addEventListener("loop",this._loopCallback),this.mixer.addEventListener("finished",this._finishedCallback),this.promise)}_update(){!this._options||this._options.endTime!==void 0&&this.action.time>this._options.endTime&&(this._options.loop===!0?this.action.time=this._options.startTime??0:(this.action.time=this._options.endTime,this.action.timeScale=0,this.onResolve()))}onResolve(){this.dispose(),this._resolvedOrRejectedCallback?.call(this,this),this._resolveCallback?.call(this,this.action)}onReject(e){this.dispose(),this._resolvedOrRejectedCallback?.call(this,this),this._rejectCallback?.call(this,e)}onLoop(e){}onFinished(e){e.action===this.action&&this.onResolve()}dispose(){this._loopCallback&&this.mixer.removeEventListener("loop",this._loopCallback),this._finishedCallback&&this.mixer.removeEventListener("finished",this._finishedCallback),this._loopCallback=void 0,this._finishedCallback=void 0}};import{GLTFLoader as zw}from"three/examples/jsm/loaders/GLTFLoader.js";import{DRACOLoader as ad}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as rm}from"three/examples/jsm/loaders/KTX2Loader.js";var na=P("debugdecoders"),pi,tr;function ld(o){o!==void 0&&typeof o=="string"&&(pi||(pi=new ad),na&&console.log("Setting draco decoder path to",o),pi.setDecoderPath(o))}function cd(o){o!==void 0&&typeof o=="string"&&(pi||(pi=new ad),na&&console.log("Setting draco decoder type to",o),pi.setDecoderConfig({type:o}))}function ud(o){o!==void 0&&typeof o=="string"&&(tr||(tr=new rm),na&&console.log("Setting ktx2 transcoder path to",o),tr.setTranscoderPath(o))}function wn(o,e){pi||(pi=new ad,pi.setDecoderPath("./include/draco/"),pi.setDecoderConfig({type:"js"}),na&&console.log("Setting draco decoder path to","./include/draco/")),tr||(tr=new rm,tr.setTranscoderPath("./include/ktx2/"),na&&console.log("Setting ktx2 transcoder path to","./include/ktx2/"),e.renderer&&tr.detectSupport(e.renderer)),o.setDRACOLoader(pi),o.setKTX2Loader(tr)}import*as X from"three";import{RawShaderMaterial as Cy}from"three";var En=P("debugshaders"),Vo="NEEDLE_techniques_webgl";var dd=class{objectToWorldMatrix=new X.Matrix4;worldToObjectMatrix=new X.Matrix4;objectToWorld=new Array;worldToObject=new Array;updateFrom(e){this.objectToWorldMatrix.copy(e.matrixWorld),ea(this.objectToWorldMatrix,this.objectToWorld),this.worldToObjectMatrix.copy(e.matrixWorld).invert(),ea(this.worldToObjectMatrix,this.worldToObject)}};var ce=class extends Cy{identifier;onBeforeRenderSceneCallback=this.onBeforeRenderScene.bind(this);clone(){let e=super.clone();return sm(e),e}constructor(e,...t){super(...t),this.identifier=e,En&&console.log(this),this.type="NEEDLE_CUSTOM_SHADER",this.uniforms[this._objToWorldName]||(this.uniforms[this._objToWorldName]={value:[]}),this.uniforms[this._worldToObjectName]||(this.uniforms[this._worldToObjectName]={value:[]}),this.uniforms[this._viewProjectionName]||(this.uniforms[this._viewProjectionName]={value:[]}),this.uniforms[this._sphericalHarmonicsName]&&this.waitForLighting(),(this.depthTextureUniform||this.opaqueTextureUniform)&&G.Current.pre_render_callbacks.push(this.onBeforeRenderSceneCallback)}dispose(){super.dispose();let e=G.Current.pre_render_callbacks.indexOf(this.onBeforeRenderSceneCallback);e>=0&&G.Current.pre_render_callbacks.splice(e,1)}async waitForLighting(){let e=G.Current;if(!e){console.error("Missing context");return}let t=await e.rendererData.getSceneLightingData(this.identifier);if(!t||!t.array){console.warn("Missing lighting data for custom shader, getSceneLightingData did not return anything");return}En&&console.log(t);let i=t.array,n=t.texture;this.uniforms.unity_SpecCube0={value:n},Nu(this.uniforms,i);let r=Math.sqrt(Math.PI*.5);this.uniforms.unity_SpecCube0_HDR={value:new X.Vector4(r,r,r,r)},En&&console.log("Set environment lighting",this.uniforms)}_sphericalHarmonicsName="unity_SpecCube0";_objToWorldName="hlslcc_mtx4x4unity_ObjectToWorld";_worldToObjectName="hlslcc_mtx4x4unity_WorldToObject";_viewProjectionName="hlslcc_mtx4x4unity_MatrixVP";_viewMatrixName="hlslcc_mtx4x4unity_MatrixV";_rendererData=new dd;get depthTextureUniform(){if(!!this.uniforms)return this.uniforms._CameraDepthTexture}get opaqueTextureUniform(){if(!!this.uniforms)return this.uniforms._CameraOpaqueTexture}onBeforeRenderScene(){this.opaqueTextureUniform&&G.Current.setRequireColor(!0),this.depthTextureUniform&&G.Current.setRequireDepth(!0)}onBeforeRender(e,t,i,n,r,s){n.attributes.tangent||n.computeTangents(),this.onUpdateUniforms(i,r)}onUpdateUniforms(e,t){let i=G.Current;e&&(ce.viewProjection&&this.uniforms[this._viewProjectionName]&&(ce.viewProjection.copy(e.projectionMatrix).multiply(e.matrixWorldInverse),ea(ce.viewProjection,ce._viewProjectionValues)),ce.viewMatrix&&this.uniforms[this._viewMatrixName]&&(ce.viewMatrix.copy(e.matrixWorldInverse),ea(ce.viewMatrix,ce._viewMatrixValues)),this.uniforms[ce._worldSpaceCameraPosName]&&ce._worldSpaceCameraPos.setFromMatrixPosition(e.matrixWorld)),this.uniforms._TimeParameters?this.uniforms._TimeParameters.value=i.rendererData.timeVec4:this.uniforms._Time&&(this.uniforms._Time.value=i.rendererData.timeVec4);let n=i.mainLight;if(n){let a=B(n.gameObject,ce._mainLightPosition);this.uniforms._MainLightPosition={value:a.normalize()},ce._mainLightColor.set(n.color.r,n.color.g,n.color.b,0),this.uniforms._MainLightColor={value:ce._mainLightColor};let c=n.intensity;ce._lightData.z=c,this.uniforms.unity_LightData={value:ce._lightData}}if(e&&(ce.viewProjection&&this.uniforms[this._viewProjectionName]&&(this.uniforms[this._viewProjectionName].value=ce._viewProjectionValues),ce.viewMatrix&&this.uniforms[this._viewMatrixName]&&(this.uniforms[this._viewMatrixName].value=ce._viewMatrixValues),this.uniforms[ce._worldSpaceCameraPosName]&&(this.uniforms[ce._worldSpaceCameraPosName]={value:ce._worldSpaceCameraPos}),i.mainCameraComponent)){if(this.uniforms._ProjectionParams){let a=this.uniforms._ProjectionParams.value;a.x=1,a.y=i.mainCameraComponent.nearClipPlane,a.z=i.mainCameraComponent.farClipPlane,a.w=1/a.z,this.uniforms._ProjectionParams.value=a}if(this.uniforms._ZBufferParams){let a=this.uniforms._ZBufferParams.value,c=i.mainCameraComponent;a.x=1-c.farClipPlane/c.nearClipPlane,a.y=c.farClipPlane/c.nearClipPlane,a.z=a.x/c.farClipPlane,a.w=a.y/c.farClipPlane,this.uniforms._ZBufferParams.value=a}if(this.uniforms._ScreenParams){let a=this.uniforms._ScreenParams.value;a.x=i.domWidth,a.y=i.domHeight,a.z=1+1/a.x,a.w=1+1/a.y,this.uniforms._ScreenParams.value=a}}let r=this.depthTextureUniform;r&&(r.value=i.depthTexture);let s=this.opaqueTextureUniform;if(s&&(s.value=i.opaqueColorTexture),t){let a=this._rendererData;a.updateFrom(t),this.uniforms[this._worldToObjectName].value=a.worldToObject,this.uniforms[this._objToWorldName].value=a.objectToWorld}this.uniformsNeedUpdate=!0}},Ut=ce;I(Ut,"viewProjection",new X.Matrix4),I(Ut,"_viewProjectionValues",[]),I(Ut,"viewMatrix",new X.Matrix4),I(Ut,"_viewMatrixValues",[]),I(Ut,"_worldSpaceCameraPosName","_WorldSpaceCameraPos"),I(Ut,"_worldSpaceCameraPos",new X.Vector3),I(Ut,"_mainLightColor",new X.Vector4),I(Ut,"_mainLightPosition",new X.Vector3),I(Ut,"_lightData",new X.Vector4);var Vl=class{get name(){return Vo}parser;identifier;constructor(e,t){this.parser=e,this.identifier=t}loadMaterial(e){let t=this.parser.json.materials[e];if(!t)return En&&console.log(e,this.parser.json.materials),null;if(!t.extensions||!t.extensions[Vo])return En&&console.log("material "+e+" does not use NEEDLE_techniques_webgl"),null;let i=t.extensions[Vo].technique;if(i<0)return null;let n=this.parser.json.extensions[Vo];if(!n)return null;En&&console.log(n);let r=n.techniques[i];return r?new Promise(async(s,a)=>{let c=await Vf(n,r.program),u=c?.fragmentShader,l=c?.vertexShader;if(!u||!l)return a();En&&console.log("loadMaterial",t,c);let d={},h=r.uniforms;l.includes("_Time")&&(d._Time={value:new X.Vector4(0,0,0,0)});for(let m in h){let f=m;switch(f){case"_TimeParameters":let p=new X.Vector4;d[f]={value:p};break;case"hlslcc_mtx4x4unity_MatrixV":case"hlslcc_mtx4x4unity_MatrixVP":d[f]={value:[]};break;case"_MainLightPosition":case"_MainLightColor":case"_WorldSpaceCameraPos":d[f]={value:[0,0,0,1]};break;case"unity_OrthoParams":break;case"unity_SpecCube0":d[f]={value:null};break;default:case"_ScreenParams":case"_ZBufferParams":case"_ProjectionParams":d[f]={value:[0,0,0,0]};break;case"_CameraOpaqueTexture":case"_CameraDepthTexture":d[f]={value:null};break}}let g=!1;if(t.extensions&&t.extensions[Vo]){let m=t.extensions[Vo];if(m.technique===i){En&&console.log(t.name,"Material Properties",m);for(let f in m.values){let p=m.values[f];if(typeof p=="string"){if(p.startsWith("/textures/")){let b=p.substring(10),w=Number.parseInt(b);if(w>=0){let C=await this.parser.getDependency("texture",w);C&&(C.encoding=X.LinearEncoding,C.needsUpdate=!0),d[f]={value:C};continue}}switch(f){case"alphaMode":p==="BLEND"&&(g=!0);continue}}if(Array.isArray(p)&&p.length===4){d[f]={value:new X.Vector4(p[0],p[1],p[2],p[3])};continue}d[f]={value:p}}}}let E=new Ut(this.identifier,{name:t.name??"",uniforms:d,vertexShader:l,fragmentShader:u,lights:!1});switch(d._Cull?.value){case 0:E.side=X.DoubleSide;break;case 1:E.side=X.BackSide;break;case 2:E.side=X.FrontSide;break;default:E.side=X.FrontSide;break}switch(d._ZTest?.value){case 3:E.depthTest=!0,E.depthFunc=X.EqualDepth;break;case 6:E.depthTest=!0,E.depthFunc=X.NotEqualDepth;break;case 2:E.depthTest=!0,E.depthFunc=X.LessDepth;break;case 4:E.depthTest=!0,E.depthFunc=X.LessEqualDepth;break;case 5:E.depthTest=!0,E.depthFunc=X.GreaterDepth;break;case 7:E.depthTest=!0,E.depthFunc=X.GreaterEqualDepth;break;case 8:E.depthTest=!1,E.depthFunc=X.AlwaysDepth;break}E.transparent=g,g&&(E.depthWrite=!1),Nu(d),E.onUpdateUniforms();for(let m in h){let f=m,p=h[m].type;if(d[f]?.value===void 0)switch(p){case 35678:d[f]={value:Uf},console.warn("Missing/unassigned texture, fallback to white: "+f);break;default:console.warn("TODO: EXPECTED UNIFORM / fallback NOT SET: "+f,h[m]);break}}En&&console.log(E.uuid,d),sm(E),s(E)}):null}};function sm(o){if(o.uniforms)for(let e in o.uniforms)Object.getOwnPropertyDescriptor(o,e)||Object.defineProperty(o,e,{get:()=>o.uniforms[e].value,set:t=>{o.uniforms[e].value=t,o.needsUpdate=!0}})}var ir=pe,zl="$___Export_Components",Ty="NEEDLE_components",hd=class{[jr]},pd=class{node;nodeIndex;nodeDef;constructor(e,t,i){this.node=e,this.nodeIndex=t,this.nodeDef=i}},zo=class{get name(){return Ty}parser;nodeToObjectMap={};exportContext;objectToNodeMap={};context;writer;registerExport(e){e.register(t=>{if("serializeUserData"in t){let i=t.serializeUserData.bind(t);this.writer=t,t.serializeUserData=(n,r)=>{try{this.serializeUserData(n,r),i(n,r)}finally{this.afterSerializeUserData(n,r)}}}return this})}beforeParse(){this.exportContext={},this.objectToNodeMap={}}serializeUserData(e,t){let i=e.userData?.components;!i||i.length<=0||(delete e.userData.components,e[zl]=i)}afterSerializeUserData(e,t){if(e.type==="Scene"&&ir&&console.log("DONE",JSON.stringify(t)),e[zl]===void 0)return;let i=e[zl];delete e[zl],i!==null&&(e.userData.components=i)}writeNode(e,t){let i=this.writer.json.nodes.length;console.log(e.name,i,e.uuid);let n=new pd(e,i,t);this.exportContext[i]=n,this.objectToNodeMap[e.uuid]=i}afterParse(e){ir&&console.log("AFTER",e);for(let t in this.exportContext){let i=this.exportContext[t],n=i.node,r=i.nodeDef,s=i.nodeIndex,a=n.userData?.components;if(!a||a.length<=0)continue;let c=new hd;r.extensions=r.extensions||{},r.extensions[this.name]=c,this.context.object=n,this.context.nodeId=s,this.context.objectToNode=this.objectToNodeMap;let u=[];for(let l of a){this.context.target=l;let d=Ye().writeBuiltinComponentData(l,this.context);d!==null&&u.push(d)}u.length>0&&(c[jr]=u,ir&&console.log("DID WRITE",n,"nodeIndex",s,u))}}beforeRoot(){return ir&&console.log("BEGIN LOAD"),this.nodeToObjectMap={},null}async afterRoot(e){let t=e.parser,i=t?.extensions;if(!i)return;let n=i[this.name];ir&&console.log("After root",e,this.parser,i);let r=[];if(n===!0){let s=t.json.nodes;for(let a=0;a<s.length;a++){let c=await t.getDependency("node",a);this.nodeToObjectMap[a]=c}for(let a=0;a<s.length;a++){let c=s[a],u=a,l=c.extensions;if(!l)continue;let d=l[this.name];if(!d)continue;ir&&console.log("NODE",c);let h=this.nodeToObjectMap[u];if(!h){console.error("Could not find object for node index: "+u,c,t);continue}Io(h),r.push(this.createComponents(h,d))}}await Promise.all(r)}async createComponents(e,t){if(!t)return;let i=t[jr];if(i){let n=new Array;ir&&console.log(e.name,i);for(let r in i){let s=i[r];ir&&console.log("Serialized data",JSON.parse(JSON.stringify(s))),s&&this.parser&&n.push(Co(this.parser,s)),e.userData=e.userData||{},e.userData[jr]=e.userData[jr]||[],e.userData[jr].push(s)}await Promise.all(n)}}};import{EXRLoader as Ry}from"three/examples/jsm/loaders/EXRLoader.js";var fd=P("debugexr"),Wl=class{parser;name;constructor(e){this.parser=e,this.name="EXT_texture_exr",fd&&console.log(e)}loadTexture(e){let t=this.name,i=this.parser,r=i.json.textures[e];if(fd&&console.log("EXT_texture_exr.loadTexture",e,r),!r.extensions||!r.extensions[t])return null;let s=r.extensions[t],a=new Ry(i.options.manager);return fd&&console.log("EXT_texture_exr.loadTexture",s,a),i.loadTextureImage(e,s.source,a)}};window.addEventListener("unhandledrejection",o=>{});var am="NEEDLE_gameobject_data",Nl=class{get name(){return am}parser;constructor(e){this.parser=e}afterRoot(e){let t=[];for(let i=0;i<this.parser.json.nodes.length;i++){let n=this.parser.json.nodes[i];if(n&&n.extensions){let r=n.extensions[am];if(r){let s=this.findAndApplyExtensionData(i,r);t.push(s)}}}return Promise.all(t).then(()=>{})}async findAndApplyExtensionData(e,t){let i=await this.parser.getDependency("node",e);i&&this.applyExtensionData(i,t)}applyExtensionData(e,t){e.userData.layer=t.layers,e.layers.disableAll(),e.layers.set(t.layers),e.userData.tag=t.tag,e.userData.hideFlags=t.hideFlags,e.userData.static=t.static,e.visible=t.activeSelf,e.guid=t.guid}};import{AmbientLight as Sy,Color as lm,HemisphereLight as Py}from"three";var cm="NEEDLE_lighting_settings",Wo=P("debugenvlight"),Xl=class{get name(){return cm}parser;sourceId;context;constructor(e,t,i){this.parser=e,this.sourceId=t,this.context=i}afterRoot(e){let t=this.parser.json.extensions;if(t){let i=t[cm];if(i){Wo&&console.log(i);let n=R.addNewComponent(e.scene,md,!1);n.sourceId=this.sourceId,n.ambientIntensity=i.ambientIntensity,n.ambientLight=new lm().fromArray(i.ambientLight),Array.isArray(i.ambientTrilight)&&(n.ambientTrilight=i.ambientTrilight.map(r=>new lm().fromArray(r))),n.ambientMode=i.ambientMode,n.environmentReflectionSource=i.environmentReflectionSource,this.context&&this.context.rendererData.registerSceneLightSettings(n)}}return null}},md=class extends M{ambientMode=0;ambientLight;ambientTrilight;ambientIntensity=1;environmentReflectionSource=0;_hasReflection=!1;_ambientLightObj;_lightProbeObj;awake(){if(this.sourceId){let e=this.environmentReflectionSource===0?1:2,t=this.context.lightmaps.tryGet(this.sourceId,e,0);this._hasReflection=t!=null,t&&this.context.rendererData.registerReflection(this.sourceId,t)}Wo&&window.addEventListener("keydown",e=>{switch(e.key){case"l":this.enabled=!this.enabled;break}})}onEnable(){let e=this.context.mainCameraComponent?.sourceId===this.sourceId;if(Wo&&console.log("Enable scene lighting",this.sourceId,e,this,this.context.mainCameraComponent?.sourceId),e||Wo&&console.warn("This is no active?!",this.context.mainCameraComponent?.sourceId),this.ambientMode==3)this.ambientLight&&!this._ambientLightObj&&(this._ambientLightObj=new Sy(this.ambientLight,Math.PI*this.ambientIntensity)),this._ambientLightObj&&this.gameObject.add(this._ambientLightObj),this._lightProbeObj&&this._lightProbeObj.removeFromParent();else if(this.ambientMode===1){if(this.ambientTrilight){let t=this.ambientTrilight[0],i=this.ambientTrilight[this.ambientTrilight.length-1],n=new Py(i,t,this.ambientIntensity);this.gameObject.add(n)}}else this._ambientLightObj&&this._ambientLightObj.removeFromParent(),this._lightProbeObj?this.enabled&&this.destroyed&&this._lightProbeObj&&this.scene.add(this._lightProbeObj):this.sourceId&&this.context.rendererData.getSceneLightingData(this.sourceId).then(t=>{Wo&&console.log(t),t&&(this._lightProbeObj=t.lightProbe,this.enabled&&!this.destroyed&&this._lightProbeObj&&this.scene.add(this._lightProbeObj))});this.sourceId&&this.context.rendererData.enableReflection(this.sourceId)}onDisable(){Wo&&console.log("disable",this.sourceId,this),this._lightProbeObj&&this._lightProbeObj.removeFromParent(),this._ambientLightObj&&this._ambientLightObj.removeFromParent(),this.sourceId&&this.context.rendererData.disableReflection()}};import{NeverStencilFunc as Oy,LessStencilFunc as ky,EqualStencilFunc as My,LessEqualStencilFunc as Iy,GreaterStencilFunc as Ay,NotEqualStencilFunc as Dy,GreaterEqualStencilFunc as Ly,AlwaysStencilFunc as jy,ZeroStencilOp as Hy,KeepStencilOp as Fy,ReplaceStencilOp as By,IncrementStencilOp as Uy,DecrementStencilOp as Gy,IncrementWrapStencilOp as Vy,DecrementWrapStencilOp as zy,InvertStencilOp as Wy}from"three";var gd=P("debugstencil");function Ny(o,e){return(o&1<<e.layer)!=0}var Nr=class{static applyStencil(e){if(!e)return;let t=e.sourceId;if(gd&&console.log(t,Nr.stencils),!t)return;let i=Nr.stencils[t];if(!!i)for(let n=i.length-1;n>=0;n--){let r=i[n];if(Ny(r.layer,e)){gd&&console.log(r);let s=e.sharedMaterial?.clone();s&&(e.sharedMaterial=s,e.gameObject.renderOrder=r.event*1e3+r.index*50,s.stencilWrite=!0,s.stencilWriteMask=255,s.stencilFuncMask=255,s.stencilRef=r.value,s.stencilFunc=r.compareFunc,s.stencilZPass=r.passOp,s.stencilFail=r.failOp,s.stencilZFail=r.zFailOp);break}}}parser;source;constructor(e,t){this.parser=e,this.source=t}afterRoot(e){let t=this.parser.json.extensions;if(t){let i=t[Qy];if(i){gd&&console.log(i);let n=i.stencil;if(n&&Array.isArray(n))for(let r of n){let s={...r};s.compareFunc=Xy(s.compareFunc),s.passOp=bd(s.passOp),s.failOp=bd(s.failOp),s.zFailOp=bd(s.zFailOp),Nr.stencils[this.source]||(Nr.stencils[this.source]=[]),Nr.stencils[this.source].push(s)}}}return null}},Xr=Nr;I(Xr,"stencils",{});function bd(o){switch(o){case 0:return Fy;case 1:return Hy;case 2:return By;case 3:return Uy;case 4:return Gy;case 6:return Vy;case 7:return zy;case 5:return Wy}return 0}function Xy(o){switch(o){case 1:return Oy;case 2:return ky;case 3:return My;case 4:return Iy;case 5:return Ay;case 6:return Dy;case 7:return Ly;case 8:return jy}return 0}var Qy="NEEDLE_render_objects";import{TextureLoader as qy}from"three";import{GLTFLoader as Yy}from"three/examples/jsm/loaders/GLTFLoader.js";var vd="NEEDLE_progressive",Ve=P("debugprogressive"),_d=new Map,yd=!1;Ve&&window.addEventListener("keyup",o=>{o.key==="p"&&(_d.forEach((e,t)=>{Object.entries(e).forEach(([i,n])=>{yd?t[i]=n.lod0:t[i]=n.original,t.needsUpdate=!0})}),yd=!yd)});var ra=class{static assignTextureLOD(e,t,i,n=0){if(!!i)for(let r of Object.keys(i)){let s=i[r];s?.isTexture===!0&&(Ve&&console.log(`-----------
214
+ `,"FIND",i.name,r,s?.name,s?.userData,s,i),ra.getOrLoadTexture(e,t,i,r,s,n).then(a=>{if(a?.isTexture===!0&&(Ve&&console.log("Assign LOD",i.name,r,a.name,a.guid,i,"Prev:",s,"Now:",a,`
215
+ --------------`),i[r]=a,a.needsUpdate=!0,i.needsUpdate=!0,Ve)){let c=_d.get(i);c||(c={},_d.set(i,c));let u=c[r];u||(u=c[r]={original:s,lod0:a}),u.lod0=a}}))}}get name(){return vd}parser;sourceId;context;constructor(e,t,i){this.parser=e,this.sourceId=t,this.context=i}_loading=[];afterRoot(e){return Ve&&console.log("AFTER",this.sourceId,e),this.parser.json.textures?.forEach((t,i)=>{if(t?.extensions){let n=t?.extensions[vd];if(n){let r=this.parser.getDependency("texture",i);this._loading.splice(this._loading.indexOf(i),1),r.then(s=>{Ve&&console.log("register texture",s.name,s.uuid,n),s.userData.deferred=n,ra.cache.set(s.uuid,n)})}}}),null}static async getOrLoadTexture(e,t,i,n,r,s){let a=r.uuid,c=ra.cache.get(a);if(c){Ve&&console.log(a,c.uri,c.guid);let u=Ii(t,c.uri);if(u.endsWith(".glb")||u.endsWith(".gltf")){if(!c.guid)return console.warn("missing pointer for glb/gltf texture",c),null;let l=u+"_"+c.guid;if(this.resolved[l])return Ve&&console.log("Texture has already been loaded: "+l,i.name,n,r.name),this.resolved[l];let d=this.onProgressiveLoadStart(e,t,u,i,n);try{if(this.currentlyLoading[l]!==void 0)return Ve&&console.log("Already loading:",i.name+"."+n,l),await this.currentlyLoading[l];let h=new Promise(async(E,_)=>{let x=new Yy;wn(x,e),Ve&&console.log("Load "+u,i.name,n,c.guid),Ve&&await xo(Math.random()*1e3);let m=await x.loadAsync(u),f=m.parser;Ve&&console.log("Loading finished "+u,i.name,n,c.guid);let p=-1,b=!1;for(let C of m.parser.json.textures)if(p++,C?.extensions){let T=C?.extensions[vd];if(T?.guid&&T.guid===c.guid){b=!0;break}}if(!b)return E(null);let w=await f.getDependency("texture",p);w.encoding=r.encoding,w&&(w.guid=c.guid),this.resolved[l]=w,Ve&&console.log(i.name,n,'change "'+r.name+'" \u2192 "'+w.name+'"',u,p,w,i,l),E(w)});return this.currentlyLoading[l]=h,await h}finally{delete this.currentlyLoading[l],this.onProgressiveLoadEnd(d)}}else{let l=this.onProgressiveLoadStart(e,t,u,i,n);try{Ve&&console.log("Load texture from uri: "+u);let h=await new qy().loadAsync(u);return h?(h.guid=c.guid,h.flipY=!1,h.needsUpdate=!0,h.encoding=r.encoding,Ve&&console.log(c,h)):Ve&&console.warn("failed loading",u),h}finally{this.onProgressiveLoadEnd(l)}}}else Ve&&console.warn("unknown uuid",r.name,r.uuid,r);return null}static beginListenStart(e,t){this._progressiveEventListeners.has(e)||this._progressiveEventListeners.set(e,new Ql),this._progressiveEventListeners.get(e).start.push(t)}static stopListenStart(e,t){if(!this._progressiveEventListeners.has(e))return;let i=this._progressiveEventListeners.get(e).start,n=i.indexOf(t);n>=0&&i.splice(n,1)}static beginListenEnd(e,t){this._progressiveEventListeners.has(e)||this._progressiveEventListeners.set(e,new Ql),this._progressiveEventListeners.get(e).end.push(t)}static stopListenEnd(e,t){if(!this._progressiveEventListeners.has(e))return;let i=this._progressiveEventListeners.get(e).end,n=i.indexOf(t);n>=0&&i.splice(n,1)}static onProgressiveLoadStart(e,t,i,n,r){this._currentProgressiveLoadingInfo.has(e)||this._currentProgressiveLoadingInfo.set(e,[]);let s=new xd(e,t,i,n,r),a=this._currentProgressiveLoadingInfo.get(e),c=this._progressiveEventListeners.get(e);return c&&c.onStart(s),a.push(s),s}static onProgressiveLoadEnd(e){if(!e)return;let t=e.context;if(!this._currentProgressiveLoadingInfo.has(t))return;let i=this._currentProgressiveLoadingInfo.get(t),n=i.indexOf(e);if(n<0)return;i.splice(n,1);let r=this._progressiveEventListeners.get(t);r&&r.onEnd(e)}},fi=ra;I(fi,"cache",new Map),I(fi,"resolved",{}),I(fi,"currentlyLoading",{}),I(fi,"_progressiveEventListeners",new Map),I(fi,"_currentProgressiveLoadingInfo",new Map);var xd=class{context;source;uri;material;slot;constructor(e,t,i,n,r){this.context=e,this.source=t,this.uri=i,this.material=n,this.slot=r}},Ql=class{start=[];end=[];onStart(e){for(let t of this.start)t(e)}onEnd(e){for(let t of this.end)t(e)}};function Ed(o){let e=new zo;return o.register(t=>(e.parser=t,e)),e}var wd=class{resolvePath(e){return e.includes("/extensions/builtin_components/")?e.replace("/extensions/builtin_components/","/userData/components/"):e.includes("extensions/builtin_components/")?e.replace("extensions/builtin_components/","/userData/components/"):e}};function um(o,e,t){o.register(n=>new Nl(n)),o.register(n=>new Ga(n)),o.register(n=>new Ol(n,e.lightmaps,t)),o.register(n=>new Xl(n,t,e)),o.register(n=>new Vl(n,t)),o.register(n=>new Xr(n,t)),o.register(n=>new fi(n,t,e)),o.register(n=>new Wl(n));let i=o.setAnimationPointerResolver;typeof i=="function"&&i.bind(o)(new wd)}var Vh={};op(Vh,{AlignmentConstraint:()=>nr,Animation:()=>rt,AnimationCurve:()=>mi,AnimationExtension:()=>rr,AnimationTrackHandler:()=>or,Animator:()=>Ee,AnimatorController:()=>hi,AttachedObject:()=>vt,AudioListener:()=>gi,AudioSource:()=>oe,AudioTrackHandler:()=>sr,AvatarBlink_Simple:()=>Qi,AvatarEyeLook_Rotation:()=>qi,AvatarLoader:()=>ar,AvatarMarker:()=>le,AvatarModel:()=>Zr,Avatar_Brain_LookAt:()=>Pn,Avatar_MouthShapes:()=>hr,Avatar_MustacheShake:()=>ns,Avatar_POI:()=>ve,AxesHelper:()=>In,BaseUIComponent:()=>ze,BasicIKConstraint:()=>rs,BoxCollider:()=>mr,BoxGizmo:()=>yi,BoxHelperComponent:()=>We,Button:()=>qt,CallInfo:()=>bi,Camera:()=>Z,Canvas:()=>Ne,CanvasGroup:()=>jn,CapsuleCollider:()=>Xt,CharacterController:()=>Yi,CharacterControllerInput:()=>Ci,Collider:()=>Ot,ColorAdjustments:()=>vr,ColorBySpeedModule:()=>Ti,ColorOverLifetimeModule:()=>Hn,ControlTrackHandler:()=>Sn,Deletable:()=>ds,DeleteBox:()=>so,DeviceFlag:()=>ao,DragControls:()=>Ji,DropListener:()=>yr,Duplicatable:()=>Zi,EmissionModule:()=>xt,EventList:()=>de,EventListEvent:()=>Yr,EventSystem:()=>Ke,EventTrigger:()=>lo,FieldWithDefault:()=>ps,FixedJoint:()=>ms,FlyControls:()=>gs,Fog:()=>Gn,GltfExport:()=>$t,GltfExportBox:()=>bs,Gradient:()=>Ri,Graphic:()=>_t,GraphicRaycaster:()=>vs,GridHelper:()=>Vn,GridLayoutGroup:()=>xs,GroundProjectedEnv:()=>tn,HingeJoint:()=>_r,HorizontalLayoutGroup:()=>_s,Image:()=>Dn,InheritVelocityModule:()=>Jt,InputField:()=>kt,Interactable:()=>Vt,Keyboard:()=>ws,LODGroup:()=>xr,LODModel:()=>nn,LayoutGroup:()=>zn,Light:()=>Qe,LimitVelocityOverLifetimeModule:()=>ue,LogStats:()=>Cs,LookAtConstraint:()=>xn,MainModule:()=>ye,MaskableGraphic:()=>An,MeshCollider:()=>eo,MeshRenderer:()=>co,MinMaxCurve:()=>U,MinMaxGradient:()=>Me,NestedGltf:()=>fo,Networking:()=>Si,NoiseModule:()=>K,ObjectRaycaster:()=>ho,OffsetConstraint:()=>rn,OrbitControls:()=>nt,ParticleBurst:()=>Fn,ParticleSubEmitter:()=>wr,ParticleSystem:()=>be,ParticleSystemRenderer:()=>on,PlayableDirector:()=>Tn,PlayerColor:()=>Pi,PointerEventData:()=>_i,RGBAColor:()=>Q,RawImage:()=>no,Raycaster:()=>uo,Rect:()=>io,RectTransform:()=>yt,ReflectionProbe:()=>Zt,RegisteredAnimationInfo:()=>Qr,RemoteSkybox:()=>Oi,Renderer:()=>ae,RendererLightmap:()=>Un,Rigidbody:()=>J,RotationBySpeedModule:()=>Xe,RotationOverLifetimeModule:()=>Je,ScreenCapture:()=>Tr,ShadowCatcher:()=>Rr,ShapeModule:()=>ie,SignalAsset:()=>Kr,SignalReceiver:()=>Cn,SignalReceiverEvent:()=>Jr,SignalTrackHandler:()=>Rn,Size:()=>ss,SizeBySpeedModule:()=>ke,SizeOverLifetimeModule:()=>Kt,SkinnedMeshRenderer:()=>fs,SmoothFollow:()=>Mt,SpatialHtml:()=>Ps,SpatialTrigger:()=>Wn,SpatialTriggerReceiver:()=>It,SpectatorCamera:()=>Os,SphereCollider:()=>fr,Sprite:()=>ei,SpriteRenderer:()=>sn,SpriteSheet:()=>an,SubEmitterSystem:()=>Er,SyncedCamera:()=>Pr,SyncedRoom:()=>ki,SyncedTransform:()=>Pt,TeleportTarget:()=>$r,TestRunner:()=>Ms,TestSimulateUserData:()=>Is,Text:()=>Ie,TextureSheetAnimationModule:()=>_e,ToneMapping:()=>br,TrailModule:()=>ee,TransformData:()=>qr,TransformGizmo:()=>go,UIRaycastUtils:()=>wi,UIRootComponent:()=>Mn,USDZExporter:()=>Or,UsageMarker:()=>zt,VRUserState:()=>Nt,VelocityOverLifetimeModule:()=>He,VerticalLayoutGroup:()=>ys,VideoPlayer:()=>Re,Voip:()=>ot,Volume:()=>oo,VolumeComponent:()=>Ki,VolumeParameter:()=>cs,VolumeProfile:()=>gr,WebAR:()=>dr,WebARSessionRoot:()=>gt,WebXR:()=>V,WebXRAvatar:()=>Gt,WebXRController:()=>se,WebXRSync:()=>kn,XRFlag:()=>Ce,XRGrabModel:()=>bo,XRGrabRendering:()=>As,XRRig:()=>ur,XRState:()=>St,__Ignore:()=>Sa});import{Vector3 as Ky}from"three";var nr=class extends M{from;to;width=0;centered=!0;_centerPos;awake(){this._centerPos=new Ky}update(){if(!this.from||!this.to)return;let e=B(this.from).clone(),t=B(this.to).clone(),i=e.distanceTo(t);this._centerPos.copy(e),this._centerPos.add(t),this._centerPos.multiplyScalar(.5),te(this.gameObject,this.centered?this._centerPos:e),this.gameObject.lookAt(B(this.to).clone()),this.gameObject.scale.set(this.width,this.width,i)}};v([y(R)],nr.prototype,"from",2),v([y(R)],nr.prototype,"to",2);var Vi=class{time;value;inTangent;inWeight;outTangent;outWeight;weightedMode};v([y()],Vi.prototype,"time",2),v([y()],Vi.prototype,"value",2),v([y()],Vi.prototype,"inTangent",2),v([y()],Vi.prototype,"inWeight",2),v([y()],Vi.prototype,"outTangent",2),v([y()],Vi.prototype,"outWeight",2),v([y()],Vi.prototype,"weightedMode",2);var mi=class{keys;get duration(){return!this.keys||this.keys.length==0?0:this.keys[this.keys.length-1].time}evaluate(e){if(!this.keys||this.keys.length==0)return 0;if(this.keys[0].time>=e)return this.keys[0].value;for(let t=0;t<this.keys.length;t++){let i=this.keys[t];if(i.time<=e)if(t+1<this.keys.length){let r=this.keys[t+1];if(r.time<e)continue;let s=H.remap(e,i.time,r.time,0,1);return H.lerp(i.value,r.value,s)}else return i.value}return this.keys[this.keys.length-1].value}};v([y(Vi)],mi.prototype,"keys",2);import{Matrix4 as Jy,Vector3 as dm,Quaternion as Zy}from"three";import{buildMatrix as $y}from"three/examples/jsm/exporters/USDZExporter.js";var No=P("debugusdzanimation"),Qr=class{get start(){return this.ext.getStartTime01(this.root,this.clip)}get duration(){return this.clip.duration}ext;root;clip;constructor(e,t,i){this.ext=e,this.root=t,this.clip=i}},qr=class{clip;pos;rot;scale;get frameRate(){return 60}ext;root;target;constructor(e,t,i,n){this.ext=e,this.root=t,this.target=i,this.clip=n}addTrack(e){e.name.endsWith("position")&&(this.pos=e),e.name.endsWith("quaternion")&&(this.rot=e),e.name.endsWith("scale")&&(this.scale=e)}getFrames(){return Math.max(this.pos?.times?.length??0,this.rot?.times?.length??0,this.scale?.times?.length??0)}getDuration(){let e=this.pos?.times??this.rot?.times??this.scale?.times;return e?e[e.length-1]:0}getStartTime(e){let t=0;for(let i=0;i<e.length;i++){let n=e[i];if(n===this)return t;t+=n.getDuration()}return t}},rr=class{get extensionName(){return"animation"}dict=new Map;rootTargetMap=new Map;getStartTime01(e,t){let i=this.rootTargetMap.get(e);if(!i)return 1/0;let n=-1;for(let r of i){let s=this.dict.get(r),a=0;if(s?.length){for(let c of s){if(c.clip===t)break;a+=c.getDuration()}n=Math.max(n,a)}else console.warn("No animation found on root",e,t,s)}return n}registerAnimation(e,t){if(!t||!e)return null;this.rootTargetMap.has(e)||this.rootTargetMap.set(e,[]);for(let n of t.tracks){let r=n.name.split(".")[2],s=e.getObjectByName(r);if(!s){console.warn("no object found for track",n.name,"using "+e.name+" instead");continue}this.dict.has(s)||this.dict.set(s,[]);let a=this.dict.get(s);if(!a)continue;let c=a.find(l=>l.clip===t);c||(c=new qr(this,e,s,t),a.push(c)),c.addTrack(n);let u=this.rootTargetMap.get(e);u?.includes(s)||u?.push(s)}return new Qr(this,e,t)}onAfterHierarchy(e){No&&console.log(this.dict)}serializers=[];onAfterBuildDocument(e){for(let t of this.serializers){let i=t.model?.parent,n=i?.isDynamic===!0;No&&console.log(n,t.model?.parent),n&&t.registerCallback(i)}}onExportObject(e,t,i){R.foreachComponent(e,r=>{let s=r;typeof s.createAnimation=="function"&&s.createAnimation(this,t,i)},!1);let n=new Cd(e,this.dict);this.serializers.push(n),n.registerCallback(t)}},Cd=class{object;dict;model;callback;constructor(e,t){this.object=e,this.dict=t}registerCallback(e){this.model&&this.callback&&this.model.removeEventListener("serialize",this.callback),this.callback||(this.callback=this.onSerialize.bind(this)),No&&console.log("REPARENT",e),this.model=e,this.model.addEventListener("serialize",this.callback)}onSerialize(e,t){No&&console.log("SERIALIZE",this.model.name,this.object.type);let i=this.object,n=this.dict.get(i);if(!n)return;let r=new Jy,s=new dm,a=new Zy,c=new dm(1,1,1);e.appendLine("matrix4d xformOp:transform.timeSamples = {"),e.indent++;for(let u of n){let l=u.pos?.times;if((!l||u.rot&&u.rot.times?.length>l?.length)&&(l=u.rot?.times),(!l||u.scale&&u.scale.times?.length>l?.length)&&(l=u.scale?.times),!l){console.error("got an animated object but no time values??",i,u);continue}let d=u.getStartTime(n);No&&e.appendLine(u.clip.name+": start="+d.toFixed(3)+", length="+u.getDuration().toFixed(3)+", frames="+u.getFrames());let h=u.pos?.createInterpolant(),g=u.rot?.createInterpolant(),E=u.scale?.createInterpolant();h||s.set(i.position.x,i.position.y,i.position.z),g||a.set(i.quaternion.x,i.quaternion.y,i.quaternion.z,i.quaternion.w),E||c.set(i.scale.x,i.scale.y,i.scale.z);for(let _=0;_<l.length;_++){let x=l[_];if(h){let f=h.evaluate(x);s.set(f[0],f[1],f[2])}if(g){let f=g.evaluate(x);a.set(f[0],f[1],f[2],f[3])}if(E){let f=E.evaluate(x);f.set(f[0],f[1],f[2])}r.compose(s,a,c);let m=`${(d+x)*u.frameRate}: ${$y(r)},`;No&&(m="#"+_+" "+m),e.appendLine(m)}}e.indent--,e.appendLine("}")}};import*as mm from"three";import*as hm from"three";import*as oa from"three";import{PositionalAudioHelper as e_}from"three/examples/jsm/helpers/PositionalAudioHelper.js";var ft=P("debugaudio");var De=class extends M{static get userInteractionRegistered(){return De._didCallBeginWaitForUserInteraction||(De._didCallBeginWaitForUserInteraction=!0,De._beginWaitForUserInteraction()),De._userInteractionRegistered}static registerWaitForAllowAudio(e){if(e!==null){if(this._userInteractionRegistered){e();return}this.callbacks.indexOf(e)===-1&&this.callbacks.push(e),De._didCallBeginWaitForUserInteraction||(De._didCallBeginWaitForUserInteraction=!0,De._beginWaitForUserInteraction())}}static _beginWaitForUserInteraction(e=null){if(this._userInteractionRegistered){e&&e();return}e!==null&&this.registerWaitForAllowAudio(e);let i=(()=>{if(i!=null&&!De._userInteractionRegistered){De._userInteractionRegistered=!0,console.log("registered interaction, can play audio now"),document.removeEventListener("pointerdown",i),document.removeEventListener("click",i),document.removeEventListener("dragstart",i),document.removeEventListener("touchstart",i);for(let n of this.callbacks)n();this.callbacks.length=0}}).bind(this);document.addEventListener("pointerdown",i),document.addEventListener("click",i),document.addEventListener("dragstart",i),document.addEventListener("touchstart",i)}clip="";playOnAwake=!1;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)}_spatialBlend=0;_minDistance=1;_maxDistance=100;get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&(ft&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}_volume=1;rollOffMode=0;_loop=!1;sound=null;helper=null;wasPlaying=!1;audioLoader=null;shouldPlay=!1;_lastClipStartedLoading=null;get Sound(){if(!this.sound&&De._userInteractionRegistered){let e=R.getComponent(this.context.mainCamera,gi)??R.findObjectOfType(gi,this.context);e?.listener&&(this.sound=new oa.PositionalAudio(e.listener),this.gameObject.add(this.sound))}return this.sound}get ShouldPlay(){return this.shouldPlay}_focusCallback;awake(){this.audioLoader=new oa.AudioLoader,this.playOnAwake&&(this.shouldPlay=!0),window.addEventListener("visibilitychange",e=>{switch(document.visibilityState){case"hidden":this.wasPlaying=this.isPlaying,this.pause();break;case"visible":this.wasPlaying&&this.play();break}}),this._focusCallback=()=>{this.enabled&&this.playOnAwake&&!this.isPlaying&&De._userInteractionRegistered&&this.play()},this.context.application.addEventListener("application-visible",this._focusCallback)}onDestroy(){this.context.application.removeEventListener("application-visible",this._focusCallback)}onEnable(){De._userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():De._beginWaitForUserInteraction(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.loadAndPlay(this.clip)})}onDisable(){this.stop()}lerp=(e,t,i)=>e*(1-i)+t*i;onLoaded(e){ft&&console.log("audio buffer loaded"),De.registerWaitForAllowAudio(()=>{ft&&console.log("finished loading",e);let t=this.Sound;if(!t){console.warn("Failed getting sound",this.name);return}t.isPlaying&&t.stop(),t.setBuffer(e),t.loop=this._loop,t.setVolume(this.volume),t.autoplay=this.shouldPlay,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),ft&&console.log(this.name,this.shouldPlay,De.userInteractionRegistered,this),this.shouldPlay&&De._userInteractionRegistered&&this.play()})}applySpatialDistanceSettings(){let e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;let t=this.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(ft&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:break}this.spatialBlend>0?ft&&!this.helper&&(this.helper=new e_(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}loadAndPlay(e){if(e&&(this.clip=e),this.clip&&(ft&&console.log(this.clip),this.clip.endsWith(".mp3")||this.clip.endsWith(".wav"))){if(this.audioLoader||(this.audioLoader=new oa.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===this.clip){ft&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=this.clip,ft&&console.log("load audio",this.clip),this.audioLoader.load(this.clip,this.onLoaded.bind(this),()=>{},console.error)}}play(e=void 0){if(!this.audioLoader||!this.sound||e&&e!==this.clip){this.loadAndPlay(e);return}this.shouldPlay=!0,this._hasEnded=!1,ft&&console.log("play",this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying&&this.sound.play()}pause(){ft&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,this.sound.pause())}stop(){ft&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,ft&&console.log(this._lastContextTime),this.sound.stop())}_lastContextTime=0;get isPlaying(){return this.sound?.isPlaying??!1}set isPlaying(e){}get time(){return this.sound?.source?this.sound.source?.context.currentTime-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;let t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}_hasEnded=!0;_needUpdateSpatialDistanceSettings=!1;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,ft&&console.log("Audio clip ended",this.clip),this.sound.dispatchEvent({type:"ended",target:this}))}},oe=De;I(oe,"_didCallBeginWaitForUserInteraction",!1),I(oe,"callbacks",[]),I(oe,"_userInteractionRegistered",!1),v([y()],oe.prototype,"clip",2),v([y()],oe.prototype,"playOnAwake",2),v([y()],oe.prototype,"loop",1),v([y()],oe.prototype,"spatialBlend",1),v([y()],oe.prototype,"minDistance",1),v([y()],oe.prototype,"maxDistance",1),v([y()],oe.prototype,"volume",1),v([y()],oe.prototype,"rollOffMode",2);var gi=class extends M{get listener(){return this._listener==null&&(this._listener=new hm.AudioListener),this._listener}_listener=null;awake(){oe.registerWaitForAllowAudio(()=>{let e=this.listener;if(e==null||e.parent)return;let t=R.getComponentInParent(this.gameObject,Z);t?t.cam.add(e):this.gameObject.add(e)})}};var bi=class{method;enabled;constructor(e,t){this.method=e,this.enabled=t!==void 0?t:!0}invoke(...e){if(this.enabled!==!1){if(!this.method){console.warn("No function. Please check you assigned a method to invoke on export",this);return}this.method(...e)}}},t_=o=>/^[A-Z]*$/.test(o),Yr=class extends Event{args},de=class{target;key;setEventTarget(e,t){if(this.key=e,this.target=t,this.key!==void 0){let i="",n=!1;for(let r of this.key)n&&t_(r)&&(i+="-"),n=!0,i+=r.toLowerCase();this.key=i}}_isInvoking=!1;methods=[];constructor(e){this.methods=e??[]}invoke(...e){if(this._isInvoking){console.warn("Circular event invocation detected. Please check your event listeners for circular references.",this);return}this._isInvoking=!0;try{for(let t of this.methods)t.invoke(...e);if(typeof this.target=="object"&&typeof this.key=="string"){let t=this.target.dispatchEvent;if(typeof t=="function"){let i=new Yr(this.key);i.args=e,t.call(this.target,i)}}}finally{this._isInvoking=!1}}addEventListener(e){return this.methods.push(new bi(e,!0)),e}removeEventListener(e){if(!!e)for(let t=this.methods.length-1;t>=0;t--)this.methods[t].method===e&&(this.methods[t].enabled=!1,this.methods.splice(t,1))}removeAllEventListeners(){this.methods.length=0}};var Kr=class{guid},Jr=class{signal;reaction;$serializedTypes={signal:Kr,reaction:de}},Cn=class extends M{events;start(){console.log(this)}invoke(e){if(!this.events||!Array.isArray(this.events))return;let t=typeof e=="object"?e.guid:e;for(let i of this.events)if(i.signal.guid===t)try{if(i.reaction){if(!i.reaction.invoke){console.warn("Missing invoke - possibly a serialization error",i,this);continue}}else{console.warn("Missing reaction for signal",i,this);continue}i.reaction.invoke()}catch(n){console.error(n)}}};v([y(Jr)],Cn.prototype,"events",2);var fm=P("debugtimeline");var ql=class extends M{static registerCreateTrack(e,t){this.createTrackFunctions[e]=t}playableAsset;playOnAwake;extrapolationMode=1;get isPlaying(){return this._isPlaying}get isPaused(){return this._isPaused}get time(){return this._time}set time(e){this._time=e}get duration(){return this._duration}set duration(e){this._duration=e}get weight(){return this._weight}set weight(e){this._weight=e}_visibilityChangeEvt;_clonedPlayableAsset=!1;awake(){fm&&console.log(this,this.playableAsset?.tracks),this.rebuildGraph(),this.isValid()||console.warn("PlayableDirector is not valid",this.playableAsset,this.playableAsset?.tracks,Array.isArray(this.playableAsset?.tracks),this)}onEnable(){for(let e of this._audioTracks)e.onEnable?.();for(let e of this._customTracks)e.onEnable?.();this.playOnAwake&&this.play(),this._visibilityChangeEvt||(this._visibilityChangeEvt=()=>{switch(document.visibilityState){case"hidden":this.setAudioTracksAllowPlaying(!1);break;case"visible":this.setAudioTracksAllowPlaying(!0);break}}),window.addEventListener("visibilitychange",this._visibilityChangeEvt)}onDisable(){this.stop();for(let e of this._audioTracks)e.onDisable?.();for(let e of this._customTracks)e.onDisable?.();this._visibilityChangeEvt&&window.removeEventListener("visibilitychange",this._visibilityChangeEvt)}onDestroy(){for(let e of this._audioTracks)e.onDestroy?.()}rebuildGraph(){!this.isValid()||(this.resolveBindings(),this.updateTimelineDuration(),this.setupAndCreateTrackHandlers())}play(){!this.isValid()||(this._isPaused=!1,!this._isPlaying&&(this._isPlaying=!0,this._internalUpdateRoutine=this.startCoroutine(this.internalUpdate())))}pause(){this._isPaused=!0}stop(){this._isPlaying&&(this._time=0,this._isPlaying=!1,this._isPaused=!1,this.evaluate()),this._isPlaying=!1,this._isPaused=!1,this._internalUpdateRoutine&&this.stopCoroutine(this._internalUpdateRoutine),this._internalUpdateRoutine=null}evaluate(){if(!this.isValid())return;let e=this._time;switch(this.extrapolationMode){case 0:e=Math.min(e,this._duration);break;case 1:e%=this._duration;break;case 2:if(e>this._duration){this.stop();return}break}this.internalEvaluate(e)}isValid(){return this.playableAsset&&this.playableAsset.tracks&&Array.isArray(this.playableAsset.tracks)}*forEachTrack(){for(let e of this._allTracks)for(let t of e)yield t}get audioTracks(){return this._audioTracks}_guidsMap;resolveGuids(e){this._guidsMap=e}_isPlaying=!1;_internalUpdateRoutine;_isPaused=!1;_time=0;_duration=0;_weight=1;_animationTracks=[];_audioTracks=[];_signalTracks=[];_controlTracks=[];_customTracks=[];_allTracks=[this._animationTracks,this._audioTracks,this._signalTracks,this._controlTracks,this._customTracks];*internalUpdate(){for(;this._isPlaying&&this.activeAndEnabled;)!this._isPaused&&this._isPlaying&&(this._time+=this.context.time.deltaTime,this.evaluate()),yield}internalEvaluate(e){for(let t of this.playableAsset.tracks)if(!t.muted)switch(t.type){case"ActivationTrack":for(let i=0;i<t.outputs.length;i++){let n=t.outputs[i];if(typeof n=="object"){let r=!1;for(let a of t.clips)a.start<=e&&e<=a.end&&(r=!0);let s=n;s.visible!==void 0&&(s.visible=r)}}break}for(let t of this._animationTracks)t.evaluate(e);for(let t of this._audioTracks)t.evaluate(e);for(let t of this._signalTracks)t.evaluate(e);for(let t of this._controlTracks)t.evaluate(e);for(let t of this._customTracks)t.evaluate(e)}resolveBindings(){if(this._clonedPlayableAsset||(this._clonedPlayableAsset=!0,this.playableAsset=Us(this.playableAsset)),!this.playableAsset||!this.playableAsset.tracks)return;let e=this.findRoot(this.gameObject);for(let t of this.playableAsset.tracks)for(let i=t.outputs.length-1;i>=0;i--){let n=t.outputs[i];if(typeof n=="string"){this._guidsMap&&this._guidsMap[n]&&(n=this._guidsMap[n]);let r=R.findByGuid(n,e);r===null||typeof r!="object"?(t.outputs.splice(i,1),console.warn("Failed to resolve binding",n,t.name,t.type)):(fm&&console.log("Resolved binding",n,"to",r),t.outputs[i]=r,r instanceof Ee)}else if(n===null){if(t.outputs.splice(i,1),ql.createTrackFunctions[t.type])continue;t.type!=="AudioTrack"&&t.type!=="ControlTrack"&&t.type!=="MarkerTrack"&&console.warn("Missing binding",n,t.name,t.type,this.name,this.playableAsset.name)}}}findRoot(e){return e.parent?this.findRoot(e.parent):e}updateTimelineDuration(){if(this._duration=0,!(!this.playableAsset||!this.playableAsset.tracks)){for(let e of this.playableAsset.tracks)if(e.muted!==!0)for(let t of e.clips)t.end>this._duration&&(this._duration=t.end)}}setupAndCreateTrackHandlers(){if(this._animationTracks.length=0,this._audioTracks.length=0,this._signalTracks.length=0,!this.playableAsset)return;let e=[];for(let t of this.playableAsset.tracks){let i=t.type,n=ql.createTrackFunctions[i];if(n!=null){let r=n(this,t);if(typeof r.evaluate=="function"){r.director=this,r.track=t,this._customTracks.push(r);continue}}if(t.type==="AnimationTrack"){if(t.clips.length<=0)continue;for(let r=t.outputs.length-1;r>=0;r--){let s=t.outputs[r];typeof s.enabled=="boolean"&&(s.enabled=!1);let a=s?.gameObject?.animations;if(a){let c=new or;c.trackOffset=t.trackOffset,c.director=this,c.track=t;for(let u=0;u<t.clips.length;u++){let l=t.clips[u],d=l.asset;if(!d){console.error("MISSING anim model?","clip#"+u,l,t,this.playableAsset,this.name);continue}let h=d.clip,g=h;if((typeof g=="string"||typeof g=="number")&&(g=a.find(_=>_.name===h)),!g){console.warn("Could not find animationClip for model",l,t.name,this.name,this.playableAsset?.name);continue}c.mixer||(c.mixer=new mm.AnimationMixer(s.gameObject)),c.clips.push(g),c.mixer.uncacheAction(g),c.createHooks(l.asset,g);let E=c.mixer.clipAction(g);c.actions.push(E),c.models.push(l)}this._animationTracks.push(c)}}}else if(t.type==="AudioTrack"){if(t.clips.length<=0)continue;e.push(t)}else if(t.type==="MarkerTrack"){let r=new Rn;r.director=this,r.track=t;for(let s of t.markers)switch(s.type){case"SignalEmitter":r.models.push(s),r.didTrigger.push(!1);break}if(r!==null&&r.models.length>0){let s=R.getComponent(this.gameObject,Cn);s&&(r.receivers.push(s),this._signalTracks.push(r))}}else if(t.type==="SignalTrack"){let r=new Rn;r.director=this,r.track=t;for(let s of t.markers)r.models.push(s),r.didTrigger.push(!1);for(let s of t.outputs)r.receivers.push(s);this._signalTracks.push(r)}else if(t.type==="ControlTrack"){let r=new Sn;r.director=this,r.track=t;for(let s of t.clips)r.models.push(s);r.resolveSourceObjects(this.context),this._controlTracks.push(r)}}oe.registerWaitForAllowAudio(()=>{let t=R.findObjectOfType(gi,this.context);if(!!t)for(let i of e){let n=new sr;n.director=this,n.track=i,n.listener=t.listener;for(let r=0;r<i.clips.length;r++){let s=i.clips[r];n.addModel(s)}this._audioTracks.push(n)}})}setAudioTracksAllowPlaying(e){for(let t of this._audioTracks)t.onAllowAudioChanged(e)}},Tn=ql;I(Tn,"createTrackFunctions",{});import*as $ from"three";import{Quaternion as n_,Vector3 as r_}from"three";var Xo=P("debugtimeline"),Qo=class{director;track;get muted(){return this.track.muted}set muted(e){e!==this.track.muted&&(this.track.muted=e,this.onMuteChanged?.call(this))}*forEachClip(e=!1){if(!!this.track?.clips)if(e)for(let t=this.track.clips.length-1;t>=0;t--)yield this.track.clips[t];else for(let t of this.track.clips)yield t}getClipTime(e,t){return t.clipIn+(e-t.start)*t.timeScale}getClipTimeNormalized(e,t){return(e-t.start)/t.duration}evaluateWeight(e,t,i,n=!0){if(t<0||t>=i.length)return 0;let r=i[t];if(n||e>=r.start&&e<=r.end){let s=1,a=!1;if(r.easeInDuration>0){let c=Math.min((e-r.start)/r.easeInDuration,1);s*=c}if(r.easeOutDuration>0&&!a){let c=Math.min((r.end-e)/r.easeOutDuration,1);s*=c}return s}return 0}},Td=class{clip;rootPositionOffset;rootQuaternionOffset;get hasOffsets(){return this.rootPositionOffset!==void 0||this.rootQuaternionOffset!==void 0}rootStartPosition;rootEndPosition;rootStartQuaternion;rootEndQuaternion;constructor(e){let t=e.getClip();this.clip=t;let i=e.getRoot(),n=i.name+".position",r=i.name+".quaternion";Xo&&console.log(t.name,t.tracks,n);for(let s of t.tracks)if(!(s.times.length<=0)){if(s.name.endsWith(n))this.rootStartPosition=new $.Vector3().fromArray(s.values,0),this.rootEndPosition=new $.Vector3().fromArray(s.values,s.values.length-3),this.rootPositionOffset=this.rootEndPosition.clone().sub(this.rootStartPosition),Xo&&console.log(this.rootPositionOffset);else if(s.name.endsWith(r)&&(this.rootStartQuaternion=new $.Quaternion().fromArray(s.values,0),this.rootEndQuaternion=new $.Quaternion().fromArray(s.values,s.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),Xo)){let a=new $.Euler().setFromQuaternion(this.rootQuaternionOffset);console.log("ROT",a)}}}},or=class extends Qo{models=[];trackOffset;target;mixer;clips=[];actions=[];_actionOffsets=[];_didBind=!1;createHooks(e,t){if(t.tracks?.length<=0){console.warn("No tracks in AnimationClip",t);return}let i=t.tracks[0].name.split("."),n=i[i.length-2],r=n+".position",s=n+".quaternion",a=!1,c=!1;for(let u of t.tracks)u.name.endsWith(r)?(a=!0,this.createPositionInterpolant(t,e,u)):u.name.endsWith(s)&&(c=!0,this.createRotationInterpolant(t,e,u));if(!a||!c){let u=this.mixer?.getRoot(),l=t.tracks[0],d=l.name.lastIndexOf("."),h=l.name.substring(0,d),g=h.substring(h.lastIndexOf(".")+1),E=u.getObjectByName(g);if(E)if(a){if(!c){let _=t.tracks[0].name.substring(0,d)+".quaternion";Xo&&console.warn("Create quaternion track",g,E);let x=E.quaternion,m=new $.QuaternionKeyframeTrack(_,[0,t.duration],[x.x,x.y,x.z,x.w,x.x,x.y,x.z,x.w]);t.tracks.push(m),this.createRotationInterpolant(t,e,m)}}else{let _=h+".position";Xo&&console.warn("Create position track",g,E);let x=E.position,m=new $.VectorKeyframeTrack(_,[0,t.duration],[x.x,x.y,x.z,x.x,x.y,x.z]);t.tracks.push(m),this.createPositionInterpolant(t,e,m)}}}bind(){if(!this._didBind){this._didBind=!0,Xo&&console.log(this.models),this.mixer?this.target=this.mixer.getRoot():console.warn("No mixer was assigned to animation track");for(let e of this.actions){let t=new Td(e);this._actionOffsets.push(t)}for(let e of this.models){let t=e.asset,i=t.position,n=t.rotation;i.x!==void 0&&(i.isVector3||(t.position=new r_(i.x,i.y,i.z)),n.isQuaternion||(t.rotation=new n_(n.x,n.y,n.z,n.w)))}this.ensureTrackOffsets()}}ensureTrackOffsets(){if(this.trackOffset){let e=this.trackOffset.position;e&&(e.isVector3||(this.trackOffset.position=new $.Vector3(e.x,e.y,e.z)));let t=this.trackOffset.rotation;t&&(t.isQuaternion||(this.trackOffset.rotation=new $.Quaternion(t.x,t.y,t.z,t.w)))}}_useclipOffsets=!0;_totalOffsetPosition=new $.Vector3;_totalOffsetRotation=new $.Quaternion;_totalOffsetPosition2=new $.Vector3;_totalOffsetRotation2=new $.Quaternion;_summedPos=new $.Vector3;_tempPos=new $.Vector3;_summedRot=new $.Quaternion;_tempRot=new $.Quaternion;evaluate(e){if(this.track.muted||!this.mixer)return;this.bind(),this._totalOffsetPosition.set(0,0,0),this._totalOffsetRotation.set(0,0,0,1),this._totalOffsetPosition2.set(0,0,0),this._totalOffsetRotation2.set(0,0,0,1);let t=0,i=0,n=!1;for(let r=0;r<this.clips.length;r++){let s=this.models[r],a=this.actions[r],c=s.asset;a.weight=0;let u=e>=s.start&&e<=s.end,l=s.postExtrapolationMode,d=u;if(!d&&!n&&s.end<e&&s.postExtrapolationMode!==0){let h=r<this.clips.length-1?this.models[r+1]:null;(!h||h.start>e)&&(d=!0,n=!0)}if(d){let h=1;h*=this.evaluateWeight(e,r,this.models,d);let g=this.getClipTime(e,s),E=0,_=c.duration;if(u){if(c.loop)for(E+=Math.floor(g/(_+1e-6));g>_;)g-=_}else if(!u)switch(l){case 2:g%=_;break;case 3:let f=Math.floor(g/_)%2!==0;g%=_,f&&(g=_-g);break}a.time=g,a.timeScale=0;let x=h*this.director.weight;if(a.weight=x,a.clampWhenFinished=!0,a.isRunning()||a.play(),this._useclipOffsets){let m=t==0?this._totalOffsetPosition:this._totalOffsetPosition2,f=t==0?this._totalOffsetRotation:this._totalOffsetRotation2;t<1&&(i=1-h),t+=1;let p=this._summedPos.set(0,0,0),b=this._tempPos.set(0,0,0),w=this._summedRot.identity(),C=this._tempRot.identity(),T=c.rotation,S=new $.Quaternion;S.slerp(T,h);let A=this._actionOffsets[r];if(A.hasOffsets)for(let D=0;D<E;D++)A.rootPositionOffset?b.copy(A.rootPositionOffset):b.set(0,0,0),b.applyQuaternion(w).applyQuaternion(S),A.rootQuaternionOffset&&(C.copy(A.rootQuaternionOffset),w.multiply(C)),p.add(b);f.multiply(S),f.multiply(w),p.add(c.position),m.add(p)}}}this._useclipOffsets&&(this._totalOffsetPosition.lerp(this._totalOffsetPosition2,i),this._totalOffsetRotation.slerp(this._totalOffsetRotation2,i)),this.mixer.update(e)}createRotationInterpolant(e,t,i){let n=i.createInterpolant.bind(i),r=new $.Quaternion;this.ensureTrackOffsets();let s=this.trackOffset?.rotation;i.createInterpolant=()=>{let a=n(),c=a.evaluate.bind(a);return a.evaluate=u=>{let l=c(u);return r.set(l[0],l[1],l[2],l[3]),r.premultiply(this._totalOffsetRotation),s&&r.premultiply(s),l[0]=r.x,l[1]=r.y,l[2]=r.z,l[3]=r.w,l},a}}createPositionInterpolant(e,t,i){let n=i.createInterpolant.bind(i),r=new $.Vector3;this.ensureTrackOffsets();let s=this.trackOffset?.rotation,a=this.trackOffset?.position,c;i.createInterpolant=()=>{let u=n(),l=u.evaluate.bind(u);return u.evaluate=d=>{let h=l(d);return r.set(h[0],h[1],h[2]),t.removeStartOffset&&(c===void 0?(c=null,c=this._actionOffsets.find(g=>g.clip===e)?.rootStartPosition?.clone()):c?.isVector3&&r.sub(c)),r.applyQuaternion(this._totalOffsetRotation),r.add(this._totalOffsetPosition),s&&r.applyQuaternion(s),a&&(r.x-=a.x,r.y+=a.y,r.z+=a.z),h[0]=r.x,h[1]=r.y,h[2]=r.z,h},u}}},sr=class extends Qo{models=[];listener;audio=[];audioContextTimeOffset=[];lastTime=0;getAudioFilePath(e){let t=this.director.sourceId;return Ii(t,e)}onAllowAudioChanged(e){for(let t=0;t<this.models.length;t++){let i=this.models[t];this.audio[t].setVolume(e?i.asset.volume:0)}}addModel(e){let t=this.getAudioFilePath(e.asset.clip),i=new $.Audio(this.listener);i.setVolume(e.asset.volume);let n=new $.AudioLoader;console.log(t,this.director.sourceId),n.load(t,r=>{i.setBuffer(r),i.loop=e.asset.loop,this.audio.push(i),this.models.push(e)})}onDisable(){for(let e of this.audio)e.isPlaying&&e.stop()}onMuteChanged(){if(this.muted)for(let e=0;e<this.audio.length;e++){let t=this.audio[e];t?.isPlaying&&t.stop()}}evaluate(e){if(!this.track.muted){for(let t=0;t<this.models.length;t++){let i=this.models[t],n=this.audio[t];if(e>=i.start&&e<=i.end){if(this.director.isPaused&&(n.isPlaying&&n.stop(),this.lastTime===e))continue;n.isPlaying||(n.offset=i.clipIn+(e-i.start)*i.timeScale,n.play());let r=i.asset.volume;if(i.easeInDuration>0){let s=Math.min((e-i.start)/i.easeInDuration,1);r*=s}if(i.easeOutDuration>0){let s=Math.min((i.end-e)/i.easeOutDuration,1);r*=s}n.setVolume(r*this.director.weight)}else n.isPlaying&&n.stop()}this.lastTime=e}}},Rn=class extends Qo{models=[];didTrigger=[];receivers=[];evaluate(e){if(!(this.receivers.length<=0)&&!this.track.muted)for(let t=0;t<this.models.length;t++){let i=this.models[t],n=this.didTrigger[t],r=i.time-e;if(i.retroActive?r<0:r<0&&Math.abs(r)<.1){if(!n){this.didTrigger[t]=!0;for(let a of this.receivers)!a||a.invoke(i.asset)}}else i.emitOnce||(this.didTrigger[t]=!1)}}},sa=class extends Qo{models=[];timelines=[];resolveSourceObjects(e){for(let t=this.models.length-1;t>=0;t--){let n=this.models[t].asset;if(typeof n.sourceObject=="string"){let r=n.sourceObject;sa.resolved[r]?n.sourceObject=sa.resolved[r]:(n.sourceObject=R.findByGuid(r,e.scene),sa.resolved[r]=n.sourceObject)}if(n.sourceObject){let r=R.getComponent(n.sourceObject,Tn);this.timelines.push(r),r&&n.updateDirector&&(r.playOnAwake=!1)}else{this.models.splice(t,1);continue}}}_previousActiveModel=null;evaluate(e){this._previousActiveModel=null;for(let t=0;t<this.models.length;t++){let i=this.models[t],n=i.asset;if(e>=i.start&&e<=i.end){this._previousActiveModel=i;let r=this.getClipTime(e,i);if(n.controlActivation){let s=n.sourceObject;s.visible=!0}if(n.updateDirector){let s=this.timelines[t];s&&(s.isPlaying&&s.pause(),s.time=r,s.evaluate())}}else{let r=this._previousActiveModel?.asset;if(n.controlActivation){let s=n.sourceObject;r?.sourceObject!==s&&(s.visible=!1)}}}}},Sn=sa;I(Sn,"resolved",{});import{BoxHelper as k_,BufferGeometry as M_,Color as Sm,Euler as I_,Layers as A_,Line as D_,Mesh as L_,MeshBasicMaterial as j_,Quaternion as sc,Ray as H_,SphereGeometry as F_,Vector2 as B_,Vector3 as Ei}from"three";import{OculusHandModel as U_}from"three/examples/jsm/webxr/OculusHandModel.js";import{OculusHandPointerModel as G_}from"three/examples/jsm/webxr/OculusHandPointerModel.js";import{XRControllerModelFactory as V_}from"three/examples/jsm/webxr/XRControllerModelFactory.js";import{GLTFLoader as z_}from"three/examples/jsm/loaders/GLTFLoader.js";import*as vm from"three";import{Quaternion as s_,Vector3 as Kl}from"three";import{GLTFLoader as o_}from"three/examples/jsm/loaders/GLTFLoader.js";import*as Yl from"three";var aa=P("debugavatar"),Zr=class{root;head;leftHand;rigthHand;get isValid(){return this.head!==null&&this.head!==void 0}constructor(e,t,i,n){this.root=e,this.head=t,this.leftHand=i,this.rigthHand=n,this.root?.traverse(r=>r.layers.set(2))}},ar=class{avatarRegistryUrl=null;async getOrCreateNewAvatarInstance(e,t){if(!t)return console.error("Can not create avatar: failed to provide id or root object"),null;let i=null;if(typeof t=="string"){if(i=await this.loadAvatar(e,t),!i){let r=new Ue;i=R.instantiate(dn(t,e.scene),r)}}else i=t;if(!i)return null;let n=this.findAvatar(i);return n.isValid?(aa&&console.log("[Custom Avatar] valid config",t,aa?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,aa?n:""),null)}async loadAvatar(e,t){if(console.assert(t!=null&&typeof t=="string","Avatar id must not be null"),t.length<=0||!t)return null;if(aa&&console.log("[Custom Avatar] "+t+", loading..."),t.endsWith(".glb")||(t+=".glb"),this.avatarRegistryUrl===null){let n=await fetch("./"+t),r=null;if(n.ok){let a=await n.blob();a&&(r=await a.arrayBuffer())}return!r&&(r=await yl(t,t,0,"no url here go away",!0),!r)?null:(await Ye().parseSync(e,r,null,0))?.scene??null}let i=new o_;return wn(i,e),new Promise((n,r)=>{let s=this.avatarRegistryUrl+"/"+t;i.load(s,async a=>{await Ye().createBuiltinComponents(e,s,a,null,void 0),n(a.scene)},a=>{aa&&console.log("[Custom Avatar] "+a.loaded/a.total*100+"% loaded of "+a.total/1024+"kB")},a=>{console.error("[Custom Avatar] Error when loading: "+a),n(null)})})}cacheModel(e,t){}findAvatar(e){let t=e,i=t;i.children.length==1&&(i=e.children[0]);let n=this.findAvatarPart(i,["head"]),r=this.findAvatarPart(i,["left","hand"]),s=this.findAvatarPart(i,["right","hand"]);if(!n){n=t;let c=new Yl.Vector3;new Yl.Box3().setFromObject(n).getSize(c);let u=Math.max(c.x,c.y,c.z);console.warn("[Custom Avatar] Normalizing head scale, it's too big: "+u+" meters! Should be < 0.3m"),u>.3&&n.scale.multiplyScalar(1/u*.3)}return new Zr(t,n,r,s)}findAvatarPart(e,t){let i=e.name.toLowerCase(),n=!0;for(let r of t){if(!n)break;i.indexOf(r)===-1&&(n=!1)}if(n)return e;if(e.children)for(let r of e.children){let s=this.findAvatarPart(r,t);if(s)return s}return null}handleCustomAvatarErrors(e){if(!e.ok)throw Error(e.statusText);return e}};var qo=P("debugflags");var Rd=class{Mask=17;Has(e){return(this.Mask&e)!==0}Set(e){qo&&console.warn("Set XR flag state to",e),this.Mask=e,Ce.Apply()}Enable(e){this.Mask|=e,Ce.Apply()}Disable(e){this.Mask&=~e,Ce.Apply()}Toggle(e){this.Mask^=e,Ce.Apply()}EnableAll(){this.Mask=-1,Ce.Apply()}DisableAll(){this.Mask=0,Ce.Apply()}},St=Rd;I(St,"Global",new Rd);var zi=class extends M{static Apply(){for(let e of this.registry)e.UpdateVisible(St.Global)}awake(){zi.registry.push(this)}onEnable(){zi.firstApply||(zi.firstApply=!0,zi.Apply())}onDestroy(){let e=zi.registry.indexOf(this);e>=0&&zi.registry.splice(e,1)}visibleIn;get isOn(){return this.gameObject.visible}UpdateVisible(e=null){let t,i=e;i&&typeof i=="number"&&(console.assert(typeof i=="number","XRFlag.UpdateVisible: state must be a number",i),qo&&console.log(i),zi.buffer.Mask=i,e=zi.buffer);let n=e;if(n?(qo&&console.warn(this.name,"use passed in mask",n.Mask,this.visibleIn),t=n.Has(this.visibleIn)):(qo&&console.log(this.name,"use global mask"),St.Global.Has(this.visibleIn)),t!==void 0)if(t)qo&&console.log(this.name,"is visible",this.gameObject.uuid),R.setActive(this.gameObject,!0);else{if(qo&&console.log(this.name,"is not visible",this.gameObject.uuid),!this.gameObject.visible)return;this.gameObject.visible=!1}}},Ce=zi;I(Ce,"registry",[]),I(Ce,"firstApply"),I(Ce,"buffer",new St);import{Object3D as Sd}from"three";var lr=P("debugavatar"),vi=class extends M{static getAvatar(e){return e>=0&&e<vi.instances.length?vi.instances[e]:null}static onAvatarMarkerCreated(e){return vi._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return vi._onAvatarMarkerDestroyed.push(e),e}connectionId;avatar;awake(){vi.instances.push(this),lr&&console.log(this);for(let e of vi._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){vi.instances.splice(vi.instances.indexOf(this),1);for(let e of vi._onAvatarMarkerDestroyed)e({avatarMarker:this,gameObject:this.gameObject})}isLocalAvatar(){return this.connectionId===this.context.connection.connectionId}setVisible(e){this.avatar&&("setVisible"in this.avatar?this.avatar.setVisible(e):R.setActive(this.avatar,e))}},le=vi;I(le,"instances",[]),I(le,"_onNewAvatarMarkerAdded",[]),I(le,"_onAvatarMarkerDestroyed",[]);var la=class{_isVisible=!0;setVisible(e){this._isVisible=e,this.updateVisibility()}get isWebXRAvatar(){return!0}guid;root=null;head=null;handLeft=null;handRight=null;lastUpdate=-1;isLocalAvatar=!1;flags=null;headScale=new Kl(1,1,1);handLeftScale=new Kl(1,1,1);handRightScale=new Kl(1,1,1);webxr;lastAvatarId=null;hasAvatarOverride=!1;context;avatarMarker=null;constructor(e,t,i){this.context=e,this.guid=t,this.webxr=i,this.setupCustomAvatar(this.webxr.defaultAvatar)}updateFlags(){if(!this.flags)return;let e=this.isLocalAvatar?8:16;this.context.isInVR?e|=4:this.context.isInAR?e|=2:e|=1;for(let t of this.flags)t.gameObject.visible=!0,t.UpdateVisible(e)}async setAvatarOverride(e){return this.hasAvatarOverride=e!==null,this.hasAvatarOverride&&this.lastAvatarId!==e&&(this.lastAvatarId=e,e!=null&&e.length>0)?await this.setupCustomAvatar(e):null}_headTarget=new Sd;_handLeftTarget=new Sd;_handRightTarget=new Sd;_canInterpolate=!1;tryUpdate(e,t){if(e.guid===this.guid&&(this.lastAvatarId!==e.avatarId&&e.avatarId&&e.avatarId.length>0&&(this.lastAvatarId=e.avatarId,this.setupCustomAvatar(e.avatarId)),this.lastUpdate=e.time,this.head)){let i=this.webxr.IsInAR?"handheld":"headset",n=this.head;this.context.players.setPlayerView(e.guid,n,i),re.markDirty(this.head),this._canInterpolate=!0;let r=this.isLocalAvatar?this.head:this._headTarget;if(r.position.set(e.position.x,e.position.y,e.position.z),r.quaternion.set(e.rotation.x,e.rotation.y,e.rotation.z,e.rotation.w),r.scale.set(e.scale,e.scale,e.scale),r.scale.multiply(this.headScale),this.handLeft){let s=this.isLocalAvatar?this.handLeft:this._handLeftTarget;s.position.set(e.posLeftHand.x,e.posLeftHand.y,e.posLeftHand.z),s.quaternion.set(e.rotLeftHand._x,e.rotLeftHand._y,e.rotLeftHand._z,e.rotLeftHand._w),s.quaternion.multiply(la.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handLeftScale),re.markDirty(this.handLeft)}if(this.handRight){let s=this.isLocalAvatar?this.handRight:this._handRightTarget;s.position.set(e.posRightHand.x,e.posRightHand.y,e.posRightHand.z),s.quaternion.set(e.rotRightHand._x,e.rotRightHand._y,e.rotRightHand._z,e.rotRightHand._w),s.quaternion.multiply(la.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handRightScale),re.markDirty(this.handRight)}}}update(){if(this.isLocalAvatar||!this._canInterpolate)return;let e=this.context.time.deltaTime/.1;this.head&&(this.head.position.lerp(this._headTarget.position,e),this.head.quaternion.slerp(this._headTarget.quaternion,e),this.head.scale.lerp(this._headTarget.scale,e)),this.handLeft&&this._handLeftTarget&&(this.handLeft.position.lerp(this._handLeftTarget.position,e),this.handLeft.quaternion.slerp(this._handLeftTarget.quaternion,e),this.handLeft.scale.lerp(this._handLeftTarget.scale,e)),this.handRight&&this._handRightTarget&&(this.handRight.position.lerp(this._handRightTarget.position,e),this.handRight.quaternion.slerp(this._handRightTarget.quaternion,e),this.handRight.scale.lerp(this._handRightTarget.scale,e))}destroy(){lr&&console.log("Destroy avatar",this.guid),this.root?.removeFromParent(),this.avatarMarker?.destroy(),this.lastAvatarId=null,this.head&&ve.Remove(this.context,this.head)}updateVisibility(){let e=this.root;e&&R.setActive(e,this._isVisible)}async setupCustomAvatar(e){if(lr&&console.log("LOAD",e,this),!e||typeof e=="string"&&e.length<=0)return!1;this.head&&ve.Remove(this.context,this.head);let t=e;if(t?.loadAssetAsync!==void 0){await t.loadAssetAsync();let n=t.asset;R.setActive(n,!1),e=R.instantiate(n),R.setActive(e,!0)}lr&&console.log(e);let i=await la.loader.getOrCreateNewAvatarInstance(this.context,e);if(lr&&console.log(i,i?.isValid,this.lastAvatarId,e),i?.isValid){if(this.root=i.root,this.root.position.set(0,0,0),this.root.quaternion.set(0,0,0,1),this.root.scale.set(1,1,1),this.avatarMarker=R.addNewComponent(this.root,le),this.avatarMarker.connectionId=this.guid,this.avatarMarker.avatar=this,this.head&&this.head!==i.head&&this.head?.removeFromParent(),this.head=i.head,this.headScale.copy(this.head.scale),this.head&&!this.isLocalAvatar&&ve.Add(this.context,this.head,this.avatarMarker),i.leftHand&&this.handLeft?.removeFromParent(),this.handLeft=i.leftHand??this.handLeft,this.handLeft?this.handLeftScale.copy(this.handLeft.scale):this.handLeftScale.set(1,1,1),i.rigthHand&&this.handRight?.removeFromParent(),this.handRight=i.rigthHand??this.handRight,this.handRight?this.handRightScale.copy(this.handRight.scale):this.handRightScale.set(1,1,1),this.context.scene.add(this.root),this.flags==null&&(this.flags=[]),this.flags.length=0,this.flags.push(...R.getComponentsInChildren(this.root,Ce)),this.flags.length<=0&&this.head){let n=R.addNewComponent(this.head,Ce);n.visibleIn=20,this.flags.push(n),lr&&console.log("Added flag to head: "+n.visibleIn,this.head.name)}return lr&&console.log("[Avatar], is Local? ",this.isLocalAvatar,this.root),this.updateFlags(),this.updateVisibility(),!0}else return lr&&console.warn("build avatar failed"),!1}},Gt=la;I(Gt,"loader",new ar),I(Gt,"invertRotation",new s_().setFromAxisAngle(new Kl(0,1,0),Math.PI));var ve=class{static Add(e,t,i=null){if(!!t){for(let n of this.Pois)if(n.obj===t)return;this.Pois.push({obj:t,avatar:i}),this.LastChangeTime=e.time.time}}static Remove(e,t){if(!!t){for(let i of this.Pois)if(i.obj===t){this.Pois.splice(this.Pois.indexOf(i),1),this.LastChangeTime=e?.time.time??G.Current?.time.time;return}}}};I(ve,"Pois",[]),I(ve,"LastChangeTime",0);var Pd=class{guid;position=new vm.Vector3},Pn=class extends M{set controlledTarget(e){this.target=e;let t=O.get("MoveRandom");if(t&&this.target){let i=R.getComponent(this.target,t);i&&i.destroy()}}target=null;avatar=null;_model=null;_targetModel=new Pd;_currentTargetObject=null;_lastUpdateTime=0;_lookDuration=0;_lastPoiChangedTime=0;awake(){if(this.avatar=R.getComponentInParent(this.gameObject,le),this.avatar){let e=R.getComponentInParent(this.gameObject,le);this._model=new Zn(this.context.connection,this.guid),e?.isLocalAvatar&&this._model.requestOwnership()}this.context.connection.beginListen("avatar-look-target-changed",e=>{this.target&&e&&e.guid===this.avatar?.guid&&te(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(ve.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=ve.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){let t=B(this._currentTargetObject);te(this.target,t),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(t))}}selectTarget(){if(this.context.time.time-this._lastUpdateTime>this._lookDuration){this._lastUpdateTime=this.context.time.time,this._lookDuration=Math.random()*.5+.2;let t=ve.Pois;if(t.length>0){let i=t[Math.floor(Math.random()*t.length)];if(i&&i.obj){if(i.avatar&&i.avatar===this.avatar)return;this._currentTargetObject=i.obj}}}}};var Vt=class extends M{canGrab=!0;onPointerClick(e){}},zt=class extends M{isUsed=!0;usedBy=null};import*as Yo from"three";import{Matrix4 as a_,Vector3 as ym}from"three";var Od=class{get isDirty(){return this.positionChanged||this.rotationChanged}positionChanged=!1;rotationChanged=!1;position;quaternion;_positionKeys=["x","y","z"];_quaternionKeys=["_x","_y","_z","_w"];reset(e=!1){if(this.positionChanged=!1,this.rotationChanged=!1,this.mute=!1,e){if(this.position)for(let t of this._positionKeys)delete this.position[t];if(this.quaternion)for(let t of this._quaternionKeys)delete this.quaternion[t]}}syncValues(){for(let e of this._positionKeys)this.position[e]=this.obj.position[e];for(let e of this._quaternionKeys)this.quaternion[e]=this.obj.quaternion[e]}mute=!1;applyValues(){if(this.positionChanged&&this.position)for(let e of this._positionKeys){let t=this.position[e];t!==void 0&&(this.obj.position[e]=t)}if(this.rotationChanged&&this.quaternion)for(let e of this._quaternionKeys){let t=this.quaternion[e];t!==void 0&&(this.obj.quaternion[e]=t)}}context;obj;_positionWatch;_rotationWatch;constructor(e,t){this.context=t,this.obj=e}start(e,t){this.reset(),e&&(this._positionWatch||(this._positionWatch=new hn(this.obj.position,["x","y","z"])),this._positionWatch.apply(),this.position={},this._positionWatch.subscribeWrite((r,s)=>{if(this.context.physics.isUpdating||this.mute)return;let a=this.position[s];Math.abs(a-r)<1e-5||(this.position[s]=r,this.positionChanged=!0)})),t&&(this._rotationWatch||(this._rotationWatch=new hn(this.obj.quaternion,["_x","_y","_z","_w"])),this._rotationWatch.apply(),this.quaternion={},this._rotationWatch.subscribeWrite((r,s)=>{if(this.context.physics.isUpdating||this.mute)return;let a=this.quaternion[s];Math.abs(a-r)<1e-5||(this.quaternion[s]=r,this.rotationChanged=!0)}));let i=this.obj.matrixWorld.multiplyMatrices.bind(this.obj.matrixWorld),n=new a_;this.obj.matrixWorld.multiplyMatrices=(r,s)=>(n.equals(r)||(this.positionChanged=!0,this.rotationChanged=!0,n.copy(r)),i(r,s))}stop(){this._positionWatch?.revoke(),this._rotationWatch?.revoke()}},Jl=class extends M{mass=1;useGravity=!0;constraints=0;isKinematic=!1;drag=0;angularDrag=1;detectCollisions=!0;sleepThreshold=.01;collisionDetectionMode=0;get lockPositionX(){return(this.constraints&2)!==0}get lockPositionY(){return(this.constraints&4)!==0}get lockPositionZ(){return(this.constraints&8)!==0}get lockRotationX(){return(this.constraints&16)!==0}get lockRotationY(){return(this.constraints&32)!==0}get lockRotationZ(){return(this.constraints&64)!==0}set lockPositionX(e){e?this.constraints|=2:this.constraints&=-3}set lockPositionY(e){e?this.constraints|=4:this.constraints&=-5}set lockPositionZ(e){e?this.constraints|=8:this.constraints&=-9}set lockRotationX(e){e?this.constraints|=16:this.constraints&=-17}set lockRotationY(e){e?this.constraints|=32:this.constraints&=-33}set lockRotationZ(e){e?this.constraints|=64:this.constraints&=-65}set gravityScale(e){this._gravityScale=e}get gravityScale(){return this._gravityScale}_gravityScale=1;_propertiesChanged=!1;_currentVelocity=new Yo.Vector3;_smoothedVelocity=new Yo.Vector3;_smoothedVelocityGetter=new Yo.Vector3;_lastPosition=new Yo.Vector3;_watch;awake(){this._watch=void 0,this._propertiesChanged=!1}onEnable(){this._watch||(this._watch=new Od(this.gameObject,this.context)),this._watch.start(!0,!0),this.startCoroutine(this.beforePhysics(),2)}onDisable(){this._watch?.stop(),this.context.physics.removeBody(this)}onDestroy(){this.context.physics.removeBody(this)}onValidate(){this._propertiesChanged=!0}*beforePhysics(){for(;;)this._propertiesChanged&&(this._propertiesChanged=!1,this.context.physics.updateProperties(this)),this._watch?.isDirty?(this._watch.mute=!0,this._watch.applyValues(),this.context.physics.updateBody(this,this._watch.positionChanged,this._watch.rotationChanged),this._watch.reset()):this._watch?.syncValues(),this.captureVelocity(),yield}get body(){return this.context.physics.internal_getRigidbody(this)}teleport(e,t=!0){this._watch?.reset(!0),t?this.gameObject.position.set(e.x,e.y,e.z):this.setWorldPosition(e.x,e.y,e.z),this.resetForcesAndTorques(),this.resetVelocities()}resetForces(){this.body?.resetForces(!0)}resetTorques(){this.body?.resetTorques(!0)}resetVelocities(){this.setVelocity(0,0,0),this.setAngularVelocity(0,0,0)}resetForcesAndTorques(){this.resetForces(),this.resetTorques()}wakeUp(){this.body?.wakeUp()}applyForce(e,t){this.body?.addForce(e,!0)}applyImpulse(e){this.body?.applyImpulse(e,!0)}setForce(e,t,i){this.body?.resetForces(!0),this.body?.addForce({x:e,y:t,z:i},!0)}getVelocity(){let e=this.body?.linvel();return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setVelocity(e,t,i){if(e instanceof ym){let n=e;this.body?.setLinvel(n,!0);return}t===void 0||i===void 0||this.body?.setLinvel({x:e,y:t,z:i},!0)}setAngularVelocity(e,t,i){if(e instanceof ym){let n=e;this.body?.setAngvel(n,!0);return}t===void 0||i===void 0||this.body?.setAngvel({x:e,y:t,z:i},!0)}getAngularVelocity(){let e=this.body?.angvel();return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setTorque(e,t,i){this.setAngularVelocity(e,t,i)}get smoothedVelocity(){return this._smoothedVelocityGetter.copy(this._smoothedVelocity),this._smoothedVelocityGetter.multiplyScalar(1/this.context.time.deltaTime)}setBodyFromGameObject(e=null){}captureVelocity(){if(this.body){let e=B(this.gameObject);Jl.tempPosition.copy(e);let t=e.sub(this._lastPosition);this._lastPosition.copy(Jl.tempPosition),this._smoothedVelocity.lerp(t,this.context.time.deltaTime/.1)}}},J=Jl;I(J,"tempPosition",new Yo.Vector3),v([ci(),y()],J.prototype,"mass",2),v([ci(),y()],J.prototype,"useGravity",2),v([ci(),y()],J.prototype,"constraints",2),v([ci(),y()],J.prototype,"isKinematic",2),v([ci(),y()],J.prototype,"drag",2),v([ci(),y()],J.prototype,"angularDrag",2),v([ci(),y()],J.prototype,"detectCollisions",2),v([ci(),y()],J.prototype,"sleepThreshold",2),v([ci(),y()],J.prototype,"collisionDetectionMode",2);import*as On from"three";var Te=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}x(){return this.bb.readFloat32(this.bb_pos)}y(){return this.bb.readFloat32(this.bb_pos+4)}z(){return this.bb.readFloat32(this.bb_pos+8)}static sizeOf(){return 12}static createVec3(e,t,i,n){return e.prep(4,12),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}};var Ko=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}position(e){return(e||new Te).__init(this.bb_pos,this.bb)}rotation(e){return(e||new Te).__init(this.bb_pos+12,this.bb)}scale(e){return(e||new Te).__init(this.bb_pos+24,this.bb)}static sizeOf(){return 36}static createTransform(e,t,i,n,r,s,a,c,u,l){return e.prep(4,36),e.prep(4,12),e.writeFloat32(l),e.writeFloat32(u),e.writeFloat32(c),e.prep(4,12),e.writeFloat32(a),e.writeFloat32(s),e.writeFloat32(r),e.prep(4,12),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}};var Wt=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSyncedTransformModel(e,t){return(t||new Wt).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSyncedTransformModel(e,t){return e.setPosition(e.position()+4),(t||new Wt).__init(e.readInt32(e.position())+e.position(),e)}guid(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}fast(){let e=this.bb.__offset(this.bb_pos,6);return e?!!this.bb.readInt8(this.bb_pos+e):!1}transform(e){let t=this.bb.__offset(this.bb_pos,8);return t?(e||new Ko).__init(this.bb_pos+t,this.bb):null}dontSave(){let e=this.bb.__offset(this.bb_pos,10);return e?!!this.bb.readInt8(this.bb_pos+e):!1}static startSyncedTransformModel(e){e.startObject(4)}static addGuid(e,t){e.addFieldOffset(0,t,0)}static addFast(e,t){e.addFieldInt8(1,+t,0)}static addTransform(e,t){e.addFieldStruct(2,t,0)}static addDontSave(e,t){e.addFieldInt8(3,+t,0)}static endSyncedTransformModel(e){return e.endObject()}static finishSyncedTransformModelBuffer(e,t){e.finish(t)}static finishSizePrefixedSyncedTransformModelBuffer(e,t){e.finish(t,void 0,!0)}};var cr=P("debugsync"),Jo="STRS";Fo(Jo,Wt.getRootAsSyncedTransformModel);var Wi=new Ct;function kd(o,e,t=!0){Wi.clear();let i=Wi.createString(o);Wt.startSyncedTransformModel(Wi),Wt.addGuid(Wi,i),Wt.addFast(Wi,t);let n=e.worldPosition,r=e.worldEuler,s=e.gameObject.scale;Wt.addTransform(Wi,Ko.createTransform(Wi,n.x,n.y,n.z,r.x,r.y,r.z,s.x,s.y,s.z));let a=Wt.endSyncedTransformModel(Wi);return Wi.finish(a,Jo),Wi.asUint8Array()}var Pt=class extends M{overridePhysics=!0;interpolatePosition=!0;interpolateRotation=!0;fastMode=!1;syncDestroy=!1;_model=null;_needsUpdate=!0;rb=null;_wasKinematic=!1;_receivedDataBefore=!1;_targetPosition;_targetRotation;_receivedFastUpdate=!1;_shouldRequestOwnership=!1;requestOwnership(){cr&&console.log("Request ownership"),this._model?this._model.requestOwnership():(this._shouldRequestOwnership=!0,this._needsUpdate=!0)}hasOwnership(){return this._model?.hasOwnership??void 0}isOwned(){return this._model?.isOwned}joinedRoomCallback=null;receivedDataCallback=null;awake(){cr&&console.log("new instance",this.guid,this),this._receivedDataBefore=!1,this._targetPosition=new On.Vector3,this._targetRotation=new On.Quaternion,this.lastWorldPos=new On.Vector3,this.lastWorldRotation=new On.Quaternion,this.rb=R.getComponentInChildren(this.gameObject,J),this.rb&&(this._wasKinematic=this.rb.isKinematic),this.receivedUpdate=!0,this._model=new Zn(this.context.connection,this.guid),this.context.connection.isConnected&&this.tryGetLastState(),this.joinedRoomCallback=this.tryGetLastState.bind(this),this.context.connection.beginListen("joined-room",this.joinedRoomCallback),this.receivedDataCallback=this.onReceivedData.bind(this),this.context.connection.beginListenBinrary(Jo,this.receivedDataCallback)}onDestroy(){this.syncDestroy&&zp(this.guid,this.context.connection),this._model=null,this.context.connection.stopListening("joined-room",this.joinedRoomCallback),this.context.connection.stopListenBinary(Jo,this.receivedDataCallback)}tryGetLastState(){let e=this.context.connection.tryGetState(this.guid);e&&this.onReceivedData(e)}tempEuler=new On.Euler;onReceivedData(e){if(!this.destroyed&&typeof e.guid=="function"&&e.guid()===this.guid){cr&&console.log("new data",this.context.connection.connectionId,this.context.time.frameCount,this.guid,e),this.receivedUpdate=!0,this._receivedFastUpdate=e.fast();let t=e.transform();if(t){re.markDirty(this.gameObject,!0);let i=t.position();i&&(this.interpolatePosition&&this._targetPosition?.set(i.x(),i.y(),i.z()),(!this.interpolatePosition||!this._receivedDataBefore)&&this.setWorldPosition(i.x(),i.y(),i.z()));let n=t.rotation();n&&(this.tempEuler.set(n.x(),n.y(),n.z()),this.interpolateRotation&&this._targetRotation.setFromEuler(this.tempEuler),(!this.interpolateRotation||!this._receivedDataBefore)&&Mp(this.gameObject,this.tempEuler))}this._receivedDataBefore=!0}}onEnable(){this.lastWorldPos.copy(this.worldPosition),this.lastWorldRotation.copy(this.worldQuaternion),this._needsUpdate=!0,this._model&&this._model.updateIsOwned()}onDisable(){this._model&&this._model.freeOwnership()}receivedUpdate=!1;lastWorldPos;lastWorldRotation;onBeforeRender(){if(!this.activeAndEnabled||!this.context.connection.isConnected)return;if(!this.context.connection.isInRoom||!this._model){cr&&console.log("no model or room",this.name,this.guid,this.context.connection.isInRoom);return}this._shouldRequestOwnership&&(this._shouldRequestOwnership=!1,this._model.requestOwnership());let e=this.worldPosition,t=this.worldQuaternion;if(this._model.isOwned&&!this.receivedUpdate){let r=e.distanceTo(this.lastWorldPos),s=t.angleTo(this.lastWorldRotation),a=this._model.hasOwnership||this.fastMode?1e-4:.001;(r>a||s>a)&&(this._model.hasOwnership?this._needsUpdate=!0:(cr&&console.log(this.guid,"reset because not owned but",this.gameObject.name,this.lastWorldPos),this.worldPosition=this.lastWorldPos,e.copy(this.lastWorldPos),this.worldQuaternion=this.lastWorldRotation,t.copy(this.lastWorldRotation),re.markDirty(this.gameObject,!0),this._needsUpdate=!1))}if(this._model&&!this._model.hasOwnership&&this._model.isOwned&&this._receivedDataBefore){let s=this._receivedFastUpdate||this.fastMode?.5:.3,a=!1;if(this.interpolatePosition&&this._targetPosition){let c=this.worldPosition;c.lerp(this._targetPosition,s),this.worldPosition=c,a=!0}if(this.interpolateRotation&&this._targetRotation){let c=this.worldQuaternion;c.slerp(this._targetRotation,s),this.worldQuaternion=c,a=!0}a&&re.markDirty(this.gameObject,!0)}if(this.receivedUpdate=!1,this.lastWorldPos.copy(e),this.lastWorldRotation.copy(t),!this._model)return;if(!this._model||this._model.hasOwnership===void 0||!this._model.hasOwnership){this.rb&&(this.rb.isKinematic=this._model.isOwned??!1,this.rb.setVelocity(0,0,0));return}this.rb&&(this._wasKinematic!==void 0&&(cr&&console.log("reset kinematic",this.rb.name,this._wasKinematic),this.rb.isKinematic=this._wasKinematic),this.gameObject.position.distanceTo(new On.Vector3(0,0,0))>1e3&&(cr&&console.log("RESET",this.name),this.gameObject.position.set(0,1,0),this.rb.setVelocity(0,0,0)));let i=10,n=this.rb||this.fastMode;if(this._needsUpdate&&(i<=0||i>0&&this.context.time.frameCount%i===0||n)){cr&&console.log("send update",this.context.connection.connectionId,this.guid,this.gameObject.name,this.gameObject.guid),this.overridePhysics&&this.rb,this._needsUpdate=!1;let r=kd(this.guid,this,!!n);this.context.connection.sendBinary(r)}}};import*as oc from"three-mesh-ui";import{Euler as m_,EventDispatcher as g_,Group as b_,Matrix4 as v_,Mesh as y_,MeshBasicMaterial as __,Object3D as Cm,Quaternion as ic,RingGeometry as x_,Vector3 as Tm}from"three";var Zl=class{static createButton(e,t={}){let i=document.createElement("button"),n=!1;function r(){if(t.domOverlay===void 0){var u=document.createElement("div");u.style.display="none",document.body.appendChild(u);var l=document.createElementNS("http://www.w3.org/2000/svg","svg");l.setAttribute("width",38),l.setAttribute("height",38),l.style.position="absolute",l.style.right="20px",l.style.top="20px",l.addEventListener("click",function(){h.end()}),u.appendChild(l);var d=document.createElementNS("http://www.w3.org/2000/svg","path");d.setAttribute("d","M 12,12 L 28,28 M 28,12 12,28"),d.setAttribute("stroke","#fff"),d.setAttribute("stroke-width",2),l.appendChild(d),t.optionalFeatures===void 0&&(t.optionalFeatures=[]),t.optionalFeatures.push("dom-overlay"),t.domOverlay={root:u},n=!0}t.optionalFeatures===void 0&&(t.optionalFeatures=[]),t.optionalFeatures.push("local-floor"),t.optionalFeatures.push("hand-tracking"),t.optionalFeatures.push("layers");let h=null,g=null;async function E(x){if(/WebXRViewer\//i.test(navigator.userAgent))if(t.domOverlay?.root){let f=t.domOverlay.root;g=f.parentElement,g&&(console.log("Reparent DOM Overlay to body",f,f.style.display),f.style.display="",f.style.visibility="",document.body.appendChild(f))}else console.warn("WebXRViewer: No DOM Overlay found");x.addEventListener("end",_),await e.xr.setSession(x),i.textContent="STOP AR",n&&(t.domOverlay.root.style.display=""),h=x}function _(){h.removeEventListener("end",_),i.textContent="START AR",g&&g.appendChild(t.domOverlay.root),n&&(t.domOverlay.root.style.display="none"),h=null}i.style.display="",i.style.cursor="pointer",i.style.left="calc(50% - 50px)",i.style.width="100px",i.textContent="START AR",i.onmouseenter=function(){i.style.opacity="1.0"},i.onmouseleave=function(){i.style.opacity="0.5"},i.onclick=function(){h===null?navigator.xr.requestSession("immersive-ar",t).then(E):h.end()}}function s(){i.disabled=!0,i.style.display="",i.style.cursor="auto",i.style.left="calc(50% - 75px)",i.style.width="150px",i.onmouseenter=null,i.onmouseleave=null,i.onclick=null}function a(){s(),i.textContent="AR NOT SUPPORTED"}function c(u){u.style.position="absolute",u.style.bottom="20px",u.style.padding="12px 6px",u.style.border="1px solid #fff",u.style.borderRadius="4px",u.style.background="rgba(0,0,0,0.1)",u.style.color="#fff",u.style.font="normal 13px sans-serif",u.style.textAlign="center",u.style.opacity="0.5",u.style.outline="none",u.style.zIndex="999"}if("xr"in navigator)return i.id="ARButton",i.style.display="none",c(i),navigator.xr.isSessionSupported("immersive-ar").then(function(u){u?r():a()}).catch(a),i;{let u=document.createElement("a");return window.isSecureContext===!1?(u.href=document.location.href.replace(/^http:/,"https:"),u.innerHTML="WEBXR NEEDS HTTPS"):(u.href="https://immersiveweb.dev/",u.innerHTML="WEBXR NOT AVAILABLE"),u.style.left="calc(50% - 90px)",u.style.width="180px",u.style.textDecoration="none",c(u),u}}};var $l=class{static createButton(e,t){t&&console.error('THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.');let i=document.createElement("button");function n(){let c=null;async function u(d){d.addEventListener("end",l),await e.xr.setSession(d),i.textContent="EXIT VR",c=d}function l(){c.removeEventListener("end",l),i.textContent="ENTER VR",c=null}i.style.display="",i.style.cursor="pointer",i.style.left="calc(50% - 50px)",i.style.width="100px",i.textContent="ENTER VR",i.onmouseenter=function(){i.style.opacity="1.0"},i.onmouseleave=function(){i.style.opacity="0.5"},i.onclick=function(){if(c===null){let d={optionalFeatures:["local-floor","bounded-floor","hand-tracking","high-fixed-foveation-level","layers"]};navigator.xr.requestSession("immersive-vr",d).then(u)}else c.end()}}function r(){i.disabled=!0,i.style.display="",i.style.cursor="auto",i.style.left="calc(50% - 75px)",i.style.width="150px",i.onmouseenter=null,i.onmouseleave=null,i.onclick=null}function s(){r(),i.textContent="VR NOT SUPPORTED"}function a(c){c.style.position="absolute",c.style.bottom="20px",c.style.padding="12px 6px",c.style.border="1px solid #fff",c.style.borderRadius="4px",c.style.background="rgba(0,0,0,0.1)",c.style.color="#fff",c.style.font="normal 13px sans-serif",c.style.textAlign="center",c.style.opacity="0.5",c.style.outline="none",c.style.zIndex="999"}if("xr"in navigator)return i.id="VRButton",i.style.display="none",a(i),navigator.xr.isSessionSupported("immersive-vr").then(function(c){c?n():s(),$l.xrSessionIsGranted&&(console.log("XR session is granted - will enter immersive web now"),i.click())}),i;{let c=document.createElement("a");return window.isSecureContext===!1?(c.href=document.location.href.replace(/^http:/,"https:"),c.innerHTML="WEBXR NEEDS HTTPS"):(c.href="https://immersiveweb.dev/",c.innerHTML="WEBXR NOT AVAILABLE"),c.style.left="calc(50% - 90px)",c.style.width="180px",c.style.textDecoration="none",a(c),c}}static registerSessionGrantedListener(){if("xr"in navigator){if(/WebXRViewer\//i.test(navigator.userAgent))return;navigator.xr.addEventListener("sessiongranted",()=>{$l.xrSessionIsGranted=!0})}}},$o=$l;I($o,"xrSessionIsGranted",!1);$o.registerSessionGrantedListener();import*as ec from"three";var _m=La(pl(),1);import{AudioAnalyser as l_}from"three";var es="noVoip",mt=P("debugvoip"),c_=P("voip");var Md=class{id;constructor(e){this.id=e}};var Id=class{peer;voip;userId;peerId;call=null;callErrorListener=null;stream=null;constructor(e,t,i,n){this.voip=e,this.peer=t,this.userId=i,this.peerId=n}close(){mt&&console.log("close voip call"),this.callErrorListener&&this.peer.off("error",this.callErrorListener),this.call&&this.call.open&&this.call.close(),this.stream?.getTracks().forEach(function(e){e.stop()})}updateMute(e){if(!this.stream)return;let t=this.stream?.getAudioTracks();for(let i of t)i.enabled=!e}async startVoipCall(){if(!await ot.HasMicrophonePermissions()){console.warn("no permission to use microphone, can not start call");return}mt&&console.log("start voip call"),this.stream=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1}),this.updateMute(this.voip.muteOutput),mt&&console.log(this.stream),this.call=this.peer.call(this.peerId,this.stream,{metadata:{userId:this.userId}}),this.call.on("error",t=>{console.error(t)}),this.call.on("stream",t=>{mt&&console.log("received stream from remote again",t)}),this.peer.on("close",this.onCallClose.bind(this)),this.callErrorListener=t=>{t.message.includes(this.peerId)?(console.log("Could not connect to "+this.peerId),this.callErrorListener&&this.peer.off("error",this.callErrorListener),this.call&&this.call.close(),this.stream?.getTracks().forEach(function(i){i.stop()}),this.stream=null):console.error(t)},this.peer.on("error",this.callErrorListener)}onCallClose(e){mt&&console.log("call closed",e)}},Ad=class{get currentStream(){return this.stream}get currentAudio(){return this.audio}get currentAnalyzer(){return this.analyzer}voip;call;audio=null;stream=null;obj;analyzer=null;waitingForStart=!1;closed=!1;audioElement=null;constructor(e,t,i){this.voip=e,this.obj=t,this.call=i}openAudioStream(e){let t=e.getAudioTracks();for(let i of t)if(i.kind==="audio"&&i.readyState==="live"){this.open(i);return}console.warn("failed finding valid audio stream to begin call")}open(e){console.assert(e.kind==="audio","invalid track kind, expected audio but received "+e.kind),!this.waitingForStart&&(this.waitingForStart=!0,oe.userInteractionRegistered||mt&&console.log("Incoming call, waiting for user interaction before opening audio"),oe.registerWaitForAllowAudio(async()=>{if(this.call.open&&!this.closed){mt&&console.log("Setup audio and begin listening"),this.stream=new MediaStream([e]);let t=new ec.AudioListener;this.audio=new ec.Audio(t),this.audio.setVolume(this.voip.muteInput?0:1),this.audio.setMediaStreamSource(this.stream);let i=document.createElement("audio");this.audioElement=i,i.style.display="none",document.body.appendChild(i),i.srcObject=this.stream,i.sinkId!==void 0&&navigator.mediaDevices.enumerateDevices().then(n=>{if(!!i){console.log(n);for(let r of n)if(r.label==="Speakerphone"){i.sinkId=r.deviceId;break}}}),mt&&console.log("call is setup, you should hear something now"),this.analyzer=new l_(this.audio,32)}}))}close(){this.closed=!0,this.call?.open&&this.call.close(),this.audio?.disconnect(),this.stream?.getTracks().forEach(e=>{e.stop()}),this.stream=null,this.audioElement&&this.audioElement.remove()}},ot=class extends M{requireParam=!1;set muteInput(e){if(e===this._inputMuted||(this._inputMuted=e,!this.currentIncomingCalls))return;let t=this._inputMuted?0:1;for(let i in this.currentIncomingCalls)this.currentIncomingCalls[i]?.currentAudio?.setVolume(t)}get muteInput(){return this._inputMuted}set muteOutput(e){if(e!==this._outputMuted&&(this._outputMuted=e,!!this.connections))for(let t in this.connections)this.connections[t]?.updateMute(e)}get muteOutput(){return this._outputMuted}getFrequency(e){if(e===null){for(let i in this.currentIncomingCalls){let n=this.currentIncomingCalls[i];if(n&&n.currentAnalyzer)return n.currentAnalyzer.getAverageFrequency()}return null}let t=this.currentIncomingCalls[e];return t&&t.currentAnalyzer?t.currentAnalyzer.getAverageFrequency():null}peer=null;model=null;connections={};currentIncomingCalls={};_inputMuted=!1;_outputMuted=!1;awake(){if(P(es)){console.log("VOIP is disabled by url parameter: "+es);return}if(this.requireParam&&!c_){console.debug("VOIP must be enabled explicitly by url parameter");return}if(Eo()&&Ha()){console.log("VOIP is currently not supported on Safari iOS");return}this.peer=new _m.default,navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia,this.context.connection.beginListen("joined-room",e=>{navigator.mediaDevices.getUserMedia({audio:!0,video:!1})}),this.context.connection.beginListen("peer-update-id",e=>{if(e.id!==this.context.connection.connectionId){let t=this.connections[e.id];if(t&&t.close(),this.peer&&this.context.connection.connectionId){let i=new Id(this,this.peer,this.context.connection.connectionId,e.peerId);this.connections[e.id]=i,i.startVoipCall()}}}),this.context.connection.beginListen("user-left-room",e=>{let{userId:t}=e,i=this.connections[t];this.connections[t]=null,i&&i.close();let n=this.currentIncomingCalls[t];mt&&console.log("UserLeftRoom",e,t,n),n&&(n.close(),this.currentIncomingCalls[t]=null)}),this.peer.on("open",this.onOpenPeerConnection.bind(this))}onEnable(){}onDisable(){console.log("TODO: close all");for(let e in this.currentIncomingCalls)try{this.currentIncomingCalls[e]?.close(),this.connections[e]?.close()}catch(t){console.error(t)}}async onOpenPeerConnection(e){mt&&console.log("Peer connection established and received id"),this.model=new Md(e),this.context.connection.send("peer-update-id",this.model,1),this.peer&&(this.peer.on("call",this.onReceiveCall.bind(this)),this.peer.on("connection",function(t){mt&&console.log("CONNECTION",t),t.on("data",function(i){mt&&console.log("Received",i)})}))}async onReceiveCall(e){let{metadata:t}=e;console.assert(t.userId);let{userId:i}=t,{peer:n}=e,r=this.currentIncomingCalls[i];if(r&&r.close(),mt&&console.log("received call"),await ot.HasMicrophonePermissions()){let s=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1});e.answer(s)}else e.answer(null);this.currentIncomingCalls[i]=new Ad(this,this.gameObject,e),e.on("stream",s=>{mt&&console.log("receive caller stream, will setup audio now"),this.currentIncomingCalls[i]?.openAudioStream(s)}),e.on("error",console.error)}static async HasMicrophonePermissions(){return(await navigator.permissions.query({name:"microphone"})).state!=="denied"}};import{Matrix4 as ca}from"three";var gt=class extends M{webAR=null;get rig(){return this.webAR?.webxr.Rig}invertForward=!1;get arScale(){return this._arScale}set arScale(e){e!==this._arScale&&(this._arScale=e,this.setScale(e))}_initalMatrix=new ca;_selectStartFn=this.onSelectStart.bind(this);_selectEndFn=this.onSelectEnd.bind(this);start(){let e=R.findObjectOfType(V);e&&(e.Rig.updateMatrix(),this._initalMatrix.copy(e.Rig.matrix))}_arScale=5;_rig=null;_startPose=null;_placementPose=null;_isTouching=!1;_rigStartPose=null;onBegin(e){this._placementPose=null,this.gameObject.visible=!1,this.gameObject.matrixAutoUpdate=!1,this._startPose=this.gameObject.matrix.clone(),this._rigStartPose=this.rig?.matrix.clone(),e.addEventListener("selectstart",this._selectStartFn),e.addEventListener("selectend",this._selectEndFn),this.gameObject.visible=!1,this.rig&&(this.rig.matrixAutoUpdate=!0,this._initalMatrix.decompose(this.rig.position,this.rig.quaternion,this.rig.scale))}onUpdate(e,t,i){return i&&!this._placementPose&&this._isTouching?(this.webAR&&this.webAR.setReticleActive(!1),this.placeAt(e,new ca().fromArray(i.transform.matrix).invert()),!0):!1}placeAt(e,t){this._placementPose||(this._placementPose=new ca),this._placementPose.copy(t);let i=this.gameObject.matrixWorld.clone().invert();if(this._placementPose.premultiply(i),e){if(this.invertForward){let n=new ca().makeRotationY(Math.PI);this._placementPose.premultiply(n)}this._rig=e,this.setScale(this.arScale)}else this._rig=null;this.gameObject.visible=!0}onEnd(e,t){this._placementPose=null,this.gameObject.visible=!1,this.gameObject.matrixAutoUpdate=!1,this._startPose&&this.gameObject.matrix.copy(this._startPose),e&&(e.matrixAutoUpdate=!0,this._rigStartPose&&this._rigStartPose.decompose(e.position,e.quaternion,e.scale)),re.markDirty(this.gameObject,!0),setTimeout(()=>{this.gameObject.matrixAutoUpdate=!0,this.gameObject.visible=!0},100)}onSelectStart(){this._isTouching=!0}onSelectEnd(){this._isTouching=!1}setScale(e){let t=this._rig;!t||!this._placementPose||(this._rigStartPose||(this._rigStartPose=t.matrix.clone()),t.matrixAutoUpdate=!1,t.matrix.multiplyMatrices(new ca().makeScale(e,e,e),this._placementPose),t.matrix.decompose(t.position,t.quaternion,t.scale),t.updateMatrixWorld(),console.log("Place",t.position))}};v([y()],gt.prototype,"invertForward",2),v([y()],gt.prototype,"arScale",1);import{Object3D as d_}from"three";import*as xm from"three";import{Color as u_}from"three";var yi=class extends M{objectBounds=!1;color;isGizmo=!0;_gizmoObject=null;_boxHelper=null;onEnable(){this.isGizmo&&!Di||(this._gizmoObject||(this.objectBounds&&this.gameObject.isMesh===!0?this._gizmoObject=new xm.BoxHelper(this.gameObject,this.color??16776960):(this.objectBounds=!1,this._gizmoObject=ll(this.color??16776960))),this.objectBounds?(this.scene.add(this._gizmoObject),this._boxHelper=this._gizmoObject,this.startCoroutine(this.syncObjectBounds(),3)):this.gameObject.add(this._gizmoObject))}onDisable(){this._gizmoObject&&this.gameObject.remove(this._gizmoObject)}*syncObjectBounds(){for(;this._boxHelper;)this._boxHelper?.update(),yield}};v([y()],yi.prototype,"objectBounds",2),v([y(u_)],yi.prototype,"color",2),v([y()],yi.prototype,"isGizmo",2);var h_=P("debugrig"),ur=class extends M{awake(){if(h_){let e=new d_;e.position.y+=.5,this.gameObject.add(e);let t=e.addNewComponent(yi);t&&(t.isGizmo=!1)}}};import{Quaternion as ua,Vector3 as tc,Vector4 as p_}from"three";var Ni=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}x(){return this.bb.readFloat32(this.bb_pos)}y(){return this.bb.readFloat32(this.bb_pos+4)}z(){return this.bb.readFloat32(this.bb_pos+8)}w(){return this.bb.readFloat32(this.bb_pos+12)}static sizeOf(){return 16}static createVec4(e,t,i,n,r){return e.prep(4,16),e.writeFloat32(r),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}};var Oe=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsVrUserStateBuffer(e,t){return(t||new Oe).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsVrUserStateBuffer(e,t){return e.setPosition(e.position()+4),(t||new Oe).__init(e.readInt32(e.position())+e.position(),e)}guid(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}time(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}avatarId(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__string(this.bb_pos+t,e):null}position(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}rotation(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Ni).__init(this.bb_pos+t,this.bb):null}scale(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readFloat32(this.bb_pos+e):0}posLeftHand(e){let t=this.bb.__offset(this.bb_pos,16);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}posRightHand(e){let t=this.bb.__offset(this.bb_pos,18);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}rotLeftHand(e){let t=this.bb.__offset(this.bb_pos,20);return t?(e||new Ni).__init(this.bb_pos+t,this.bb):null}rotRightHand(e){let t=this.bb.__offset(this.bb_pos,22);return t?(e||new Ni).__init(this.bb_pos+t,this.bb):null}static startVrUserStateBuffer(e){e.startObject(10)}static addGuid(e,t){e.addFieldOffset(0,t,0)}static addTime(e,t){e.addFieldInt64(1,t,e.createLong(0,0))}static addAvatarId(e,t){e.addFieldOffset(2,t,0)}static addPosition(e,t){e.addFieldStruct(3,t,0)}static addRotation(e,t){e.addFieldStruct(4,t,0)}static addScale(e,t){e.addFieldFloat32(5,t,0)}static addPosLeftHand(e,t){e.addFieldStruct(6,t,0)}static addPosRightHand(e,t){e.addFieldStruct(7,t,0)}static addRotLeftHand(e,t){e.addFieldStruct(8,t,0)}static addRotRightHand(e,t){e.addFieldStruct(9,t,0)}static endVrUserStateBuffer(e){return e.endObject()}static finishVrUserStateBufferBuffer(e,t){e.finish(t)}static finishSizePrefixedVrUserStateBufferBuffer(e,t){e.finish(t,void 0,!0)}};var wm=P("debugxr"),da=P("debugavatar");var Ld="VRUS";Fo(Ld,Oe.getRootAsVrUserStateBuffer);function Dd(){return new Date().getTime()}function f_(o){let e=o&4294967295,t=o/Math.pow(2,32)&1048575;return qe.create(e,t)}var ha=class{guid;time;avatarId;position=new tc;rotation=new p_;scale=1;posLeftHand=new tc;posRightHand=new tc;rotLeftHand=new ua;rotRightHand=new ua;constructor(e){this.guid=e}update(e,t,i,n,r){this.time=Dd(),this.avatarId=r,this.position.set(t.x,t.y,t.z),e&&this.position.applyMatrix4(e.matrixWorld);let s=ha.quat0,a=ha.quat1;s.set(i.x,i.y,i.z,i.w),s=s.multiplyQuaternions(s,ha.invertRotation),e&&(e.getWorldQuaternion(a),s.multiplyQuaternions(a,s)),this.rotation.set(s.x,s.y,s.z,s.w),this.scale=e.scale.x;let c=n.LeftController?.controllerGrip;c&&(c.getWorldPosition(this.posLeftHand),c.getWorldQuaternion(this.rotLeftHand));let u=n.RightController?.controllerGrip;if(u&&(u.getWorldPosition(this.posRightHand),u.getWorldQuaternion(this.rotRightHand)),n.LeftController?.hand?.visible){let l=n.LeftController.wrist;l&&(l.getWorldPosition(this.posLeftHand),l.getWorldQuaternion(this.rotLeftHand))}if(n.RightController?.hand?.visible){let l=n.RightController.wrist;l&&(l.getWorldPosition(this.posRightHand),l.getWorldQuaternion(this.rotRightHand))}}sendAsBuffer(e,t){e.clear();let i=e.createString(this.guid),n=e.createString(this.avatarId);Oe.startVrUserStateBuffer(e),Oe.addGuid(e,i),Oe.addTime(e,f_(this.time)),Oe.addAvatarId(e,n),Oe.addPosition(e,Te.createVec3(e,this.position.x,this.position.y,this.position.z)),Oe.addRotation(e,Ni.createVec4(e,this.rotation.x,this.rotation.y,this.rotation.z,this.rotation.w)),Oe.addScale(e,this.scale),Oe.addPosLeftHand(e,Te.createVec3(e,this.posLeftHand.x,this.posLeftHand.y,this.posLeftHand.z)),Oe.addPosRightHand(e,Te.createVec3(e,this.posRightHand.x,this.posRightHand.y,this.posRightHand.z)),Oe.addRotLeftHand(e,Ni.createVec4(e,this.rotLeftHand.x,this.rotLeftHand.y,this.rotLeftHand.z,this.rotLeftHand.w)),Oe.addRotRightHand(e,Ni.createVec4(e,this.rotRightHand.x,this.rotRightHand.y,this.rotRightHand.z,this.rotRightHand.w));let r=Oe.endVrUserStateBuffer(e);e.finish(r,Ld);let s=e.asUint8Array();t.sendBinary(s)}setFromBuffer(e,t){if(!e)return;this.guid=e,this.time=t.time().toFloat64();let i=t.avatarId();i&&(this.avatarId=i);let n=t.position();n&&this.position.set(n.x(),n.y(),n.z());let r=t.rotation();r&&this.rotation.set(r.x(),r.y(),r.z(),r.w());let s=t.posLeftHand();s&&this.posLeftHand.set(s.x(),s.y(),s.z());let a=t.posRightHand();a&&this.posRightHand.set(a.x(),a.y(),a.z());let c=t.rotLeftHand();c&&this.rotLeftHand.set(c.x(),c.y(),c.z(),c.w());let u=t.rotRightHand();u&&this.rotRightHand.set(u.x(),u.y(),u.z(),u.w()),this.scale=t.scale()}},Nt=ha;I(Nt,"invertRotation",new ua().setFromAxisAngle(new tc(0,1,0),Math.PI)),I(Nt,"quat0",new ua),I(Nt,"quat1",new ua);var kn=class extends M{webXR=null;debugAvatarUser=null;voip=null;async awake(){if(this.webXR||(this.webXR=R.getComponent(this.gameObject,V)),this.webXR||(this.webXR=R.findObjectOfType(V,this.context)),!this.webXR&&(console.log("Missing webxr component"),this.webXR=R.findObjectOfType(V,this.context),!this.webXR)){console.error("Could not find webxr component");return}if(this.voip||(this.voip=R.findObjectOfType(ot,this.context)),da){let e="debug-avatar-"+da,t=new Gt(this.context,e,this.webXR);if(this.debugAvatarUser=t,typeof da=="string"&&da.length>0)if(await t.setAvatarOverride(da)){let i=new Nt(e);i.position.y+=1;let n=.5;i.posLeftHand.y+=n,i.posLeftHand.x+=n,i.posRightHand.y+=n,i.posRightHand.x-=n,t.tryUpdate(i,0)}else t.destroy()}}onEnable(){if(!this.webXR&&(this.webXR=R.getComponent(this.gameObject,V),!this.webXR)){console.warn("Missing webxr component on "+this.gameObject.name);return}this.eventSub_WebXRStartEvent=this.onXRSessionStart.bind(this),V.addEventListener("xrStarted",this.eventSub_WebXRStartEvent),this.eventSub_WebXRUpdateEvent=this.onXRSessionUpdate.bind(this),V.addEventListener("xrUpdate",this.eventSub_WebXRUpdateEvent),this.eventSub_WebXREndEvent=this.onXRSessionEnded.bind(this),V.addEventListener("xrStopped",this.eventSub_WebXREndEvent),this.eventSub_ConnectionEvent=this.onConnected.bind(this),this.context.connection.beginListen("joined-room",this.eventSub_ConnectionEvent),this.context.connection.beginListen("webxr-user-joined",e=>{console.log("webxr user joined evt")}),this.context.connection.beginListen("webxr-user-left",e=>{let t=e.id!==null&&e.id!==void 0;!t||(console.log("webxr user left evt"),t&&(this.avatars[e.id]?.destroy(),this.avatars[e.id]=void 0))}),this.context.connection.beginListenBinrary(Ld,e=>{let t=e.guid();if(!t)return;let i=e.time().toFloat64(),n=this.tempState;n.setFromBuffer(t,e),this.onTryGetAvatar(t,i)?.tryUpdate(n,i)}),this.context.connection.beginListen("vr-session-update",e=>{let t=e.guid,i=e.time;this.onTryGetAvatar(t,i)?.tryUpdate(e,i)})}tempState=new Nt("");onTryGetAvatar(e,t){if(e===this.context.connection.connectionId)return null;let i=new Date().getTime()-t;if(i>5e3)return wm&&console.log("old data",i,e),null;let n=this.avatars[e];if(n===void 0)try{console.log("create new avatar");let r=new Gt(this.context,e,this.webXR);n=r,this.avatars[e]=r}catch(r){this.avatars[e]=null,console.error(r)}return n}onDisable(){this.eventSub_ConnectionEvent&&this.context.connection.stopListening("joined-room",this.eventSub_ConnectionEvent),V.removeEventListener("xrStarted",this.eventSub_WebXRStartEvent),V.removeEventListener("xrUpdate",this.eventSub_WebXRUpdateEvent),V.removeEventListener("xrStopped",this.eventSub_WebXREndEvent)}update(){let e=Dd();this.debugAvatarUser&&(this.debugAvatarUser.lastUpdate=e),this.detectPotentiallyDisconnectedAvatarsAndRemove();for(let t in this.avatars){let i=this.avatars[t];!i||i.update()}}_removeAvatarsList=[];detectPotentiallyDisconnectedAvatarsAndRemove(){let e=Dd();for(let t in this.avatars){let i=this.avatars[t];if(!i){this._removeAvatarsList.push(t);continue}e-i.lastUpdate>1e4&&(console.log("avatar timed out (didnt receive any updates in a while) - destroying it now"),i.destroy(),this.avatars[t]=void 0)}for(let t of this._removeAvatarsList)delete this.avatars[t];this._removeAvatarsList.length=0}buildLocalAvatar(){if(this.localAvatar)return;let e=this.context.connection?.connectionId??this.k_LocalAvatarNoNetworkingGuid;this.localAvatar=new Gt(this.context,e,this.webXR),this.localAvatar.isLocalAvatar=!0,this.localAvatar.setAvatarOverride(this.getAvatarId()),this.avatars[this.localAvatar.guid]=this.localAvatar}eventSub_ConnectionEvent=null;eventSub_WebXRStartEvent=null;eventSub_WebXREndEvent=null;eventSub_WebXRUpdateEvent=null;avatars={};localAvatar=null;k_LocalAvatarNoNetworkingGuid="local";onConnected(){wm&&console.log("Hey you are connected as "+this.context.connection.connectionId),this.localAvatar?.guid===this.k_LocalAvatarNoNetworkingGuid&&(this.localAvatar&&(this.localAvatar?.destroy(),this.avatars[this.localAvatar.guid]=void 0),this.localAvatar=null,this.xrState=null,this.ownership?.freeOwnership(),this.ownership=null)}onXRSessionStart(e){if(console.log("XR session started"),this.context.connection.send("webxr-user-joined",{id:this.context.connection.connectionId,mode:"vr"}),this.localAvatar&&(this.localAvatar?.destroy(),this.avatars[this.localAvatar.guid]=void 0,this.localAvatar=null),this.xrState=null,this.ownership?.freeOwnership(),this.ownership=null,this.avatars)for(let t in this.avatars)this.avatars[t]?.updateFlags()}onXRSessionEnded(e){console.log("XR session ended"),this.context.connection.send("webxr-user-left",{id:this.context.connection.connectionId,mode:"vr"}),this.localAvatar&&(this.localAvatar?.destroy(),this.avatars[this.localAvatar.guid]=void 0,this.localAvatar=null)}ownership=null;xrState=null;builder=new Ct(1024);onXRSessionUpdate(e){this.xrState??=new Nt(this.context.connection.connectionId??this.k_LocalAvatarNoNetworkingGuid),this.ownership??=new Zn(this.context.connection,this.context.connection.connectionId??this.k_LocalAvatarNoNetworkingGuid),this.ownership.guid=this.context.connection.connectionId??this.k_LocalAvatarNoNetworkingGuid,this.buildLocalAvatar();let{frame:t,xr:i,rig:n}=e,r=t.getViewerPose(i.getReferenceSpace());if(!r)return;let s=r?.transform,a=s.position,c=s.orientation;this.xrState.update(n,a,c,this.webXR,this.getAvatarId()),this.localAvatar&&(this.context.connection.connectionId&&(this.localAvatar.guid=this.context.connection.connectionId),this.localAvatar.tryUpdate(this.xrState,0)),!(this.ownership&&!this.ownership.hasOwnership&&this.context.connection.isConnected&&(this.context.time.frameCount%120===0&&this.ownership.requestOwnership(),!this.ownership.hasOwnership))&&(!this.context.connection.isConnected||!this.context.connection.connectionId||this.xrState.sendAsBuffer(this.builder,this.context.connection))}getAvatarId(){return P("avatar")??null}};async function w_(){return ja()?!0:"xr"in navigator?await navigator.xr.isSessionSupported("immersive-ar")===!0:!1}async function E_(){return"xr"in navigator?await navigator.xr.isSessionSupported("immersive-vr")===!0:!1}var nc=!1,rc=!1;w_().then(o=>nc=o);E_().then(o=>rc=o);var Le=class extends M{enableVR=!0;enableAR=!0;defaultAvatar;handModelPath="";createVRButton=!0;createARButton=!0;static get IsInWebXR(){return this._isInXr}static get XRSupported(){return"xr"in navigator&&(nc||rc)}static get IsARSupported(){return nc}static get IsVRSupported(){return rc}static addEventListener(e,t){return this.events.addEventListener(e,t),t}static removeEventListener(e,t){return this.events.removeEventListener(e,t),t}static createVRButton(e,t){Le.XRSupported?e.__internalAwake():console.warn("WebXR is not supported on this device");let i=$o.createButton(e.context.renderer);return i.classList.add("webxr-ar-button"),i.classList.add("webxr-button"),this.resetButtonStyles(i),(t?.registerClick??!0)&&i.addEventListener("click",e.onClickedVRButton.bind(e)),i}static createARButton(e,t){e.__internalAwake();let i=e.webAR?.getAROverlayContainer(),n={};i?(n.domOverlay={root:i},n.optionalFeatures=["hit-test","dom-overlay"]):console.warn("No dom overlay root found, HTML overlays on top of screen-based AR will not work."),n.optionalFeatures.push("plane-detection"),n.optionalFeatures.push("anchors");let r=Zl.createButton(e.context.renderer,n);return r.classList.add("webxr-ar-button"),r.classList.add("webxr-button"),Le.resetButtonStyles(r),(t?.registerClick??!0)&&r.addEventListener("click",e.onClickedARButton.bind(e)),r}static resetButtonStyles(e){!e||(e.style.position="",e.style.bottom="",e.style.left="")}endSession(){let e=this.context.renderer.xr.getSession();e&&e.end()}get Rig(){return this.rig||this.ensureRig(),this.rig}controllers=[];get Controllers(){return this.controllers}get LeftController(){return this.controllers.length>0&&this.controllers[0].input?.handedness==="left"?this.controllers[0]:this.controllers.length>1&&this.controllers[1].input?.handedness==="left"?this.controllers[1]:null}get RightController(){return this.controllers.length>0&&this.controllers[0].input?.handedness==="right"?this.controllers[0]:this.controllers.length>1&&this.controllers[1].input?.handedness==="right"?this.controllers[1]:null}get ARButton(){return this._arButton}get VRButton(){return this._vrButton}get IsInVR(){return this._isInVR}get IsInAR(){return this._isInAR}rig;isInit=!1;_requestedAR=!1;_requestedVR=!1;_isInAR=!1;_isInVR=!1;_arButton;_vrButton;webAR=null;awake(){if(this.defaultAvatar&&typeof this.defaultAvatar=="string"&&(this.defaultAvatar=tt.getOrCreate(this.sourceId??"/",this.defaultAvatar,this.context)),!R.findObjectOfType(kn,this.context)){let e=R.addNewComponent(this.gameObject,kn,!1);e.webXR=this}this.webAR=new dr(this)}onEnable(){if(this.isInit||!this.enableAR&&!this.enableVR)return;this.isInit=!0,this.context.renderer.xr.enabled=!0;let e=Le.XRSupported,t,i,n=document.createElement("div");n.classList.add("webxr-buttons"),this.context.domElement.append(n),this.enableAR&&this.createARButton&&nc&&(t=Le.createARButton(this),this._arButton=t,n.appendChild(t)),this.createVRButton&&this.enableVR&&rc&&(i=Le.createVRButton(this),this._vrButton=i,n.appendChild(i)),setTimeout(()=>{Le.resetButtonStyles(i),Le.resetButtonStyles(t)},1e3)}_transformOrientation=new ic;get TransformOrientation(){return this._transformOrientation}_currentHeadPose=null;get HeadPose(){return this._currentHeadPose}onBeforeRender(e){if(!e)return;let t=this.context.renderer.xr.getSession();if(t){let i=e.getViewerPose(this.context.renderer.xr.getReferenceSpace());if(!i)return;this._currentHeadPose=i;let n=i?.transform;n&&this._transformOrientation.set(n.orientation.x,n.orientation.y,n.orientation.z,n.orientation.w),Le._isInXr===!1&&t&&this.onEnterXR(t,e);for(let r of this.controllers)r.onUpdate(t);this._isInAR&&this.webAR?.onUpdate(t,e)}Le.events.dispatchEvent({type:"xrUpdate",frame:e,xr:this.context.renderer.xr,rig:this.rig})}onClickedARButton(){this._isInAR||(this._requestedAR=!0,this._requestedVR=!1,this.captureStateBeforeXR())}onClickedVRButton(){if(!this._isInVR){if(this._requestedVR){this.onExitXR(null);return}this._requestedAR=!1,this._requestedVR=!0,this.captureStateBeforeXR(),this.ensureRig();for(let e=0;e<2;e++)se.Create(this,e,this.gameObject,0);Le.events.dispatchEvent({type:"requestVRSession"})}}captureStateBeforeXR(){this.context.mainCamera&&(this._originalCameraPosition.copy(B(this.context.mainCamera)),this._originalCameraRotation.copy(me(this.context.mainCamera)),this._originalCameraParent=this.context.mainCamera.parent),this.Rig&&(this._originalXRRigParent=this.Rig.parent,this._originalXRRigPosition.copy(this.Rig.position),this._originalXRRigRotation.copy(this.Rig.quaternion))}ensureRig(){if(!this.rig){let e=R.findObjectOfType(ur,this.context);e?this.rig=e.gameObject:(this.rig=new b_,this.rig.rotateY(Math.PI),this.rig.name="XRRig",this.context.scene.add(this.rig))}}_originalCameraParent=null;_originalCameraPosition=new Tm;_originalCameraRotation=new ic;_originalXRRigParent=null;_originalXRRigPosition=new Tm;_originalXRRigRotation=new ic;onEnterXR(e,t){console.log("[XR] session begin",e),Le._isInXr=!0,this.ensureRig();let i=this.context.renderer.xr.getReferenceSpace();if(i&&this.rig){let a=t.getViewerPose(i)?.transform.orientation;if(a){let c=new ic(a.x,a.y,a.z,a.w),u=new m_().setFromQuaternion(c);this.rig.rotateY(u.y)}}let n=this.context.renderer.xr;if(this.context.mainCamera){let s=n.getCamera(this.context.mainCamera);for(let a of s.cameras)a.layers.enableAll();this.rig.add(this.context.mainCamera),this._requestedAR&&this.context.scene.add(this.rig)}let r=this._requestedAR?2:4;switch(St.Global.Set(r),r){case 2:this.context.xrSessionMode="immersive-ar",this._isInAR=!0,this.webAR?.onBegin(e);break;case 4:this.context.xrSessionMode="immersive-vr",this._isInVR=!0,this.onEnterVR(e);break}e.addEventListener("end",()=>{console.log("[XR] session end"),Le._isInXr=!1,this.onExitXR(e)}),this.onEnterXR_HandleMirrorWindow(e),Le.events.dispatchEvent({type:"xrStarted",session:e})}onExitXR(e){let t=this._isInAR;this._isInAR&&e&&this.webAR?.onEnd(e),this._isInAR=!1,this._isInVR=!1,this._requestedAR=!1,this._requestedVR=!1,this.context.xrSessionMode=void 0,this.xrMirrorWindow&&(this.xrMirrorWindow.close(),this.xrMirrorWindow=null),this.destroyControllers(),this.context.mainCamera&&(this._originalCameraParent?.add(this.context.mainCamera),te(this.context.mainCamera,this._originalCameraPosition),$e(this.context.mainCamera,this._originalCameraRotation),this.context.mainCamera.scale.set(1,1,1)),t&&(this._originalXRRigParent?.add(this.rig),this.rig.position.copy(this._originalXRRigPosition),this.rig.quaternion.copy(this._originalXRRigRotation)),St.Global.Set(17),Le.events.dispatchEvent({type:"xrStopped",session:e})}onEnterVR(e){}destroyControllers(){for(let e=this.controllers.length-1;e>=0;e-=1)this.controllers[e]?.destroy();this.controllers.length=0}xrMirrorWindow=null;onEnterXR_HandleMirrorWindow(e){!P("mirror")||setTimeout(()=>{if(!Le.IsInWebXR)return;let t=new URL(window.location.href);_o(t.searchParams,es,1),_o(t.searchParams,"isMirror",1);let i=t.toString();this.xrMirrorWindow=window.open(i,"webxr sync","popup=yes"),this.xrMirrorWindow&&(this.xrMirrorWindow.onload=()=>{this.xrMirrorWindow&&(this.xrMirrorWindow.onbeforeunload=()=>{Le.IsInWebXR&&e.end()})})},1e3)}},V=Le;I(V,"_isInXr",!1),I(V,"events",new g_),v([y()],V.prototype,"enableVR",2),v([y()],V.prototype,"enableAR",2),v([y(tt)],V.prototype,"defaultAvatar",2),v([y()],V.prototype,"handModelPath",2),v([y()],V.prototype,"createVRButton",2),v([y()],V.prototype,"createARButton",2);var ts=class{get webxr(){return this._webxr}_webxr;reticle=null;reticleParent=null;hitTestSource=null;reticleActive=!0;previousBackground=null;previousEnvironment=null;sessionRoot=null;_previousParent=null;get context(){return this.webxr.context}constructor(e){this._webxr=e}arDomOverlay=null;arOverlayElement=null;noHitTestAvailable=!1;didPlaceARSessionRoot=!1;getAROverlayContainer(){this.arDomOverlay=this.webxr.context.domElement;let e=this.arDomOverlay;return e.getAROverlayContainer?this.arOverlayElement=e.getAROverlayContainer():this.arOverlayElement=this.arDomOverlay,this.arOverlayElement}setReticleActive(e){this.reticleActive=e}async onBegin(e){let t=this.webxr.context;this.reticleActive=!0,this.didPlaceARSessionRoot=!1,this.getAROverlayContainer();let i=navigator.userAgent?.includes("OculusBrowser")?0:1,n=i===1?4:2;for(let s=0;s<n;s++)se.Create(this.webxr,s,this.webxr.gameObject,i);(!this.sessionRoot||this.sessionRoot.destroyed||!this.sessionRoot.activeAndEnabled)&&(this.sessionRoot=R.findObjectOfType(gt,t)),this.previousBackground=t.scene.background,this.previousEnvironment=t.scene.environment,t.scene.background=null,e.requestReferenceSpace("viewer").then(s=>{e.requestHitTestSource?.call(e,{space:s})?.then(a=>{this.hitTestSource=a}).catch(a=>{this.noHitTestAvailable=!0,console.warn("WebXR: Hit test not supported",a)})}),!this.reticle&&this.sessionRoot&&(this.reticle=new y_(new x_(.07,.09,32).rotateX(-Math.PI/2),new __),this.reticle.name="AR Placement reticle",this.reticle.matrixAutoUpdate=!1,this.reticle.visible=!1,this.reticleParent=new Cm,this.reticleParent.name="AR Reticle Parent",this.reticleParent.matrixAutoUpdate=!1,this.reticleParent.add(this.reticle),this.webxr.scene?(this.context.scene.add(this.reticleParent),this.context.scene.visible=!0):console.warn("Could not found WebXR Rig")),this._previousParent=this.webxr.gameObject,ts.tempWebXRObject||(ts.tempWebXRObject=new Cm),this.context.scene.add(ts.tempWebXRObject),R.addComponent(ts.tempWebXRObject,this.webxr),this.sessionRoot?(this.sessionRoot.webAR=this,this.sessionRoot?.onBegin(e)):console.warn("No WebARSessionRoot found in scene");let r=this.context.domElement;r?.onEnterAR?.call(r,e,this.arOverlayElement),this.context.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}onEnd(e){this._previousParent&&(R.addComponent(this._previousParent,this.webxr),this._previousParent=null),this.hitTestSource=null;let t=this.webxr.context;t.scene.background=this.previousBackground,t.scene.environment=this.previousEnvironment,this.sessionRoot&&this.sessionRoot.onEnd(this.webxr.Rig,e);let i=this.context.domElement;i.onExitAR?.call(i,e),this.context.mainCameraComponent?.applyClearFlagsIfIsActiveCamera()}onUpdate(e,t){if(this.noHitTestAvailable===!0){if(this.reticle&&(this.reticle.visible=!1),!this.didPlaceARSessionRoot){this.didPlaceARSessionRoot=!0;let n=this.webxr.Rig,r=C_.clone();this.sessionRoot?.placeAt(n,r)}return}if(!this.hitTestSource)return;let i=t.getHitTestResults(this.hitTestSource);if(i.length){let n=i[0],r=this.webxr.context.renderer.xr.getReferenceSpace();if(r){let s=n.getPose(r);if(this.sessionRoot){let a=this.sessionRoot.onUpdate(this.webxr.Rig,e,s);this.didPlaceARSessionRoot=a}if(this.reticle&&(this.reticle.visible=this.reticleActive,this.reticleActive&&s)){let a=s.transform.matrix;this.reticle.matrix.fromArray(a),this.webxr.Rig&&this.reticle.matrix.premultiply(this.webxr.Rig.matrix)}}}else this.sessionRoot?.onUpdate(this.webxr.Rig,e,null),this.reticle&&(this.reticle.visible=!1)}},dr=ts;I(dr,"tempWebXRObject");var C_=new v_().identity().makeTranslation(0,0,0);var _i=class{used=!1;Use(){this.used=!0}StopPropagation(){this.event?.stopImmediatePropagation()}inputSource;object;pointerId;isDown;isUp;isPressed;isClicked;event;constructor(e){this.event=e}};import{Object3D as R_}from"three";var S_=P("debugeventsystem"),Xi=class extends M{static createIfNoneExists(e){this.didSearchEventSystem||(this.didSearchEventSystem=!0,Xi.systems.length<=0&&Xi.systems.push(...R.findObjectsOfType(Xi,e)));for(let i of Xi.systems)if(i.context===e)return;let t=new R_;R.addNewComponent(t,Xi),e.scene.add(t)}static get systems(){let e=G.Current;return this._eventSystemMap.has(e)||this._eventSystemMap.set(e,[]),this._eventSystemMap.get(e)}static ensureUpdateMeshUI(e,t){xi.update(e,t)}static markUIDirty(e){xi.markDirty()}static get instance(){return this.systems[0]}orbitControl=null;orbitControlWasEnabled=!1;raycaster=[];constructor(){super(),Xi.systems.push(this)}onDestroy(){Xi.systems.splice(Xi.systems.indexOf(this),1)}start(){}register(e){e&&this.raycaster&&!this.raycaster.includes(e)&&this.raycaster?.push(e)}unregister(e){let t=this.raycaster?.indexOf(e);t!==void 0&&t!==-1&&this.raycaster?.splice(t,1)}_selectStartFn;_selectEndFn;_selectUpdateFn;_onBeforeUpdateFn;onEnable(){let e=new Map;this._selectStartFn??=(i,n)=>{if(!n.grab)return;xi.resetLastSelected();let r=new _i;r.inputSource=i,r.isDown=i.selectionDown,r.isUp=i.selectionUp,r.isPressed=i.selectionPressed,r.isClicked=!1,e.set(i,n.grab),n.grab&&!this.handleEvents(n.grab,r)&&(n.grab=null)},this._selectEndFn??=(i,n)=>{if(!n.grab)return;let r=new _i;r.inputSource=i,r.isDown=i.selectionDown,r.isUp=i.selectionUp,r.isPressed=i.selectionPressed,r.isClicked=i.selectionClick,this.handleEvents(n.grab,r);let s=e.get(i);if(e.set(i,null),s)for(let a=0;a<this.raisedPointerDownEvents.length;a++){let c=this.raisedPointerDownEvents[a];this.raisedPointerDownObjects[a]===s&&c&&(c.onPointerUp?.call(c,r),this.raisedPointerDownEvents.splice(a,1),this.raisedPointerDownObjects.splice(a,1),a--)}};let t=new xe;this._selectUpdateFn??=i=>{t.ray=i.getRay();let n=this.performRaycast(t);if(!n)return;let r=new _i;r.inputSource=i,this.handleIntersections(n,r)},se.addEventListener("select-start",this._selectStartFn),se.addEventListener("select-end",this._selectEndFn),se.addEventListener("update",this._selectUpdateFn),this._onBeforeUpdateFn??=this.onBeforeUpdate.bind(this),this.context.pre_update_callbacks.push(this._onBeforeUpdateFn),this.context.input.addEventListener("pointerdown",this._onBeforeUpdateFn)}onDisable(){se.removeEventListener("select-start",this._selectStartFn),se.removeEventListener("select-end",this._selectEndFn),se.removeEventListener("update",this._selectUpdateFn),this.context.pre_update_callbacks.splice(this.context.pre_update_callbacks.indexOf(this._onBeforeUpdateFn),1),this.context.input.removeEventListener("pointerdown",this._onBeforeUpdateFn)}lastPointerEvent=null;objectsHoveredThisFrame=[];objectsHoveredLastFrame=[];raisedPointerDownEvents=[];raisedPointerDownObjects=[];_didMove=!1;onBeforeUpdate(){if(this.objectsHoveredThisFrame.length=0,this.resetMeshUIStates(),V.IsInWebXR||this.context.input.isKeyPressed("Alt"))return;if(!this._didMove){let a=this.context.input.getPointerPositionRC(0);if(a&&a.x===0&&a.y===0)return;this._didMove=!0}let e=this.performRaycast(null),t=0;for(let a of this.context.input.foreachPointerId()){let c=this.context.input.getPointerDown(a),u=this.context.input.getPointerUp(a);if(c||u){t=a;break}}let i=this.context.input.getPointerEvent(t),n=new _i(i);if(n.inputSource=this.context.input,n.pointerId=t,n.isClicked=this.context.input.getPointerClicked(t),n.isDown=this.context.input.getPointerDown(t),n.isUp=this.context.input.getPointerUp(t),n.isPressed=this.context.input.getPointerPressed(t),this.lastPointerEvent=n,!e)return;let r=null,s=null;this.context.input.mouseDown&&this.currentActiveMeshUIComponents.length>0&&this.context.mainCameraComponent&&(r=R.getComponent(this.context.mainCameraComponent.gameObject,nt)??null,r&&(s=r.enabled,r.enabled=!1)),this.handleIntersections(e,n),r&&(this.orbitControl=r,this.orbitControl?.enabled?(this.orbitControlWasEnabled=this.orbitControl.enabled,this.orbitControl.enabled=!1):this.orbitControl&&!this.context.input.mousePressed&&(this.orbitControl.enabled=this.orbitControlWasEnabled,this.orbitControl=null))}_tempComponentsArray=[];onBeforeRender(){if(this.lastPointerEvent)this.lastPointerEvent.used=!1;else return;if(this.lastPointerEvent.isUp){for(let t of this.raisedPointerDownEvents)t.onPointerUp&&t.onPointerUp(this.lastPointerEvent);this.raisedPointerDownEvents.length=0,this.raisedPointerDownObjects.length=0}for(let t of this.objectsHoveredLastFrame)if(this.objectsHoveredThisFrame.indexOf(t)<0){this._tempComponentsArray.length=0;let i=R.getComponentsInParent(t,M,this._tempComponentsArray);this.lastPointerEvent.object=t;for(let n=0;n<i.length;n++){let r=i[n];if(!r.gameObject||r.destroyed)continue;let s=r;s.onPointerExit&&s.onPointerExit(this.lastPointerEvent)}}let e=this.objectsHoveredLastFrame;this.objectsHoveredLastFrame=this.objectsHoveredThisFrame,this.objectsHoveredThisFrame=e}_sortedHits=[];performRaycast(e){if(!this.raycaster)return null;this._sortedHits.length=0;for(let t of this.raycaster){if(!t.activeAndEnabled)continue;let i=t.performRaycast(e);i&&i.length>0&&this._sortedHits.push(...i)}return this._sortedHits.sort((t,i)=>t.distance-i.distance),this._sortedHits}handleIntersections(e,t){if(!e||e.length<=0)return!1;e=this.sortCandidates(e);for(let i of e){let{object:n}=i;if(this.handleEvents(n,t))return!0}return!1}_sortingBuffer=[];_noDepthTestingResults=[];sortCandidates(e){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let t=0;t<e.length;t++){let i=e[t],n=i.object;if(n.material&&n.material.depthTest===!1){this._noDepthTestingResults.push(i);continue}this._sortingBuffer.push(i)}for(let t of this._sortingBuffer)this._noDepthTestingResults.push(t);return this._noDepthTestingResults}handleEventsArray=[];out={};handleEvents(e,t){if(!this.testIsVisible(e))return t.isClicked&&S_&&console.log("not allowed",e),!1;let i=e;t.object=e,this.lastPointerEvent=t;let n=e.parent,r=!1,s=t.isClicked??!1,a=null;if(n&&n.isUI){let c=(t.isPressed||t.isClicked)??!1;if(n[bt]){let u=n[bt].gameObject;if(u){if(!wi.isInteractable(u,this.out))return this.out.canvasGroup?.interactable??!1;a=this.out.canvasGroup??null;let d=this.handleMeshUIIntersection(e,c);e=u,r=!0}}if(!r&&this.handleMeshUiObjectWithoutShadowDom(n,c))return!0}if(this.objectsHoveredThisFrame.push(e),a===null||a.interactable){let c=this.objectsHoveredLastFrame.indexOf(e)>=0;this.handleEventsArray.length=0;let u=R.getComponentsInParent(e,M,this.handleEventsArray);for(let l=0;l<u.length;l++){if(t.used)return!0;if(u[l].destroyed)continue;let d=u[l];d.interactable!==!1&&(d.onPointerEnter&&(c||d.onPointerEnter(t)),t.isDown&&d.onPointerDown&&!this.raisedPointerDownEvents.includes(d)&&(d.onPointerDown(t),this.raisedPointerDownEvents.push(d),this.raisedPointerDownObjects.push(i)),t.isUp&&d.onPointerUp&&d.onPointerUp(t),t.isClicked&&d.onPointerClick&&d.onPointerClick(t))}}return!0}handleMeshUiObjectWithoutShadowDom(e,t){return!e||!e.isUI?!0:this.handleMeshUIIntersection(e,t)}currentActiveMeshUIComponents=[];handleMeshUIIntersection(e,t){let i=xi.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&xi.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){let t=this.currentActiveMeshUIComponents[e];xi.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?R.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}},Ke=Xi;I(Ke,"_eventSystemMap",new Map),I(Ke,"didSearchEventSystem",!1);var xi=class{static markDirty(){this.needsUpdate=!0}static update(e,t){for(let i of this.lastUpdateFrame)if(i.context===t){if(t.time.frameCount===i.frame)return;i.frame=t.time.frameCount,(this.needsUpdate||t.time.frameCount<30)&&(this.needsUpdate=!1,e.update());return}this.lastUpdateFrame=[{context:t,frame:t.time.frameCount}],e.update()}static updateState(e,t){let i=null;if(e&&(i=this.findBlockInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;t?(this.lastSelected=i,i.states.pressed&&i.setState("pressed")):i.states.hovered&&i.setState("hovered"),this.needsUpdate=!0}return i}static resetLastSelected(){let e=this.lastSelected;!e||(this.lastSelected=null,this.resetState(e))}static resetState(e){if(!e)return;e.interactable===!1?e.states.disabled&&e.setState("disabled"):e===this.lastSelected&&e.states.selected?e.setState("selected"):e.setState("normal"),this.needsUpdate=!0}static findBlockInParent(e){return e?e.isBlock&&Object.keys(e.states).length>0?e:this.findBlockInParent(e.parent):null}};I(xi,"lastSelected",null),I(xi,"lastUpdateFrame",[]),I(xi,"needsUpdate",!1);import{AxesHelper as O_}from"three";var is="./include";oc.Block.prototype.interactable={get(){return this.interactive},set(o){this.interactable=o}};var bt=Symbol("shadowDomOwner"),ze=class extends M{isRoot(){return this.Root?.gameObject===this.gameObject}markDirty(){Ke.markUIDirty(this.context)}shadowComponent=null;_controlsChildLayout=!0;get controlsChildLayout(){return this._controlsChildLayout}set controlsChildLayout(e){this._controlsChildLayout=e,this.shadowComponent&&(this.shadowComponent.autoLayout=e)}_root=void 0;get Root(){return this._root===void 0&&(this._root=R.getComponentInParent(this.gameObject,Mn)),this._root}_parentComponent=void 0;onEnable(){super.onEnable()}addShadowComponent(e,t){this.removeShadowComponent();let i=this.isRoot()?this.gameObject:this.gameObject.parent;if(this._parentComponent=R.getComponentInParent(i,ze),!this._parentComponent){console.warn(`Component "${this.name}" doesn't have a UI parent anywhere. Do you have a UI element outside a Canvas?`,this);return}e.name=this.name+" ("+(this.constructor.name??"UI")+")",e.autoLayout=this._parentComponent.controlsChildLayout,e[bt]=this,e.traverse(r=>{r[bt]===void 0&&(r[bt]=this)});let n=!1;if(this.Root?.gameObject===this.gameObject)this.gameObject.add(e);else{let r=this._parentComponent.shadowComponent;r&&(r?.add(e),n=!0)}this.shadowComponent=e,t&&t.shadowComponent&&this.shadowComponent&&t.shadowComponent.add(this.shadowComponent),Di&&e.add(new O_(.5)),this.onAfterAddedToScene(),n&&oc.update()}set(e){}traverseOwnedShadowComponents(e,t,i){if(!!e&&e[bt]===t){i(e);for(let n of e.children)this.traverseOwnedShadowComponents(n,t,i)}}removeShadowComponent(){this.shadowComponent&&this.shadowComponent.removeFromParent()}onAfterAddedToScene(){}setInteractable(e){this.shadowComponent&&(this.shadowComponent.interactable=e)}},Mn=class extends ze{awake(){super.awake()}};var wi=class{static getObject(e){let t=e[bt];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;let i=this.tryFindCanvasGroup(e);if(i?.isCanvasGroup===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;let n=si(e,r=>{if(r.isGraphic===!0)return r},!1);return t&&n?.isGraphic===!0&&(t.graphic=n),n?.raycastTarget!==!1}static tryFindCanvasGroup(e){if(!e)return null;let t=si(e,i=>{let n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}};var pa=P("debugwebxrcontroller");var $r=class extends M{},je=class extends M{static CreateRaycastLine(){let e=new D_(this.geometry),t=e.material;return t.color=this.raycastColor,e.layers.set(2),e.name="line",e.scale.z=1,e}static CreateRaycastHitPoint(){let e=new F_(.5,22,22),t=new j_({color:this.raycastColor}),i=new L_(e,t);return i.visible=!1,i.layers.set(2),i}static Create(e,t,i,n){let r=i?R.addNewComponent(i,je,!1):new je;r.webXR=e,r.index=t,r.type=n;let s=e.context;r.controller=s.renderer.xr.getController(t),r.controllerGrip=s.renderer.xr.getControllerGrip(t),r.controllerModel=this.Factory.createControllerModel(r.controller),r.controllerGrip.add(r.controllerModel),r.hand=s.renderer.xr.getHand(t);let a=new z_;wn(a,s),r.webXR.handModelPath&&r.webXR.handModelPath!==""?a.setPath(Ii(e.sourceId,r.webXR.handModelPath)):a.setPath("https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/");let c=new U_(r.hand,a);return r.hand.add(c),r.hand.traverse(u=>u.layers.set(2)),r.handPointerModel=new G_(r.hand,r.controller),r.controller.addEventListener("connected",u=>{r.setControllerLayers(r.controllerModel,2),r.setControllerLayers(r.controllerGrip,2),r.setControllerLayers(r.hand,2),setTimeout(()=>{r.setControllerLayers(r.controllerModel,2),r.setControllerLayers(r.controllerGrip,2),r.setControllerLayers(r.hand,2)},1e3)}),r.hand.addEventListener("connected",u=>{if(u.data.hand){e.Rig&&e.Rig.add(r.hand),r.type=0,r.handPointerModel.traverse(h=>h.layers.set(2)),r.handPointerModel.pointerObject?.traverse(h=>h.layers.set(2));let d=r.hand.joints;if(d)for(let h of Object.keys(d)){let g=d[h];g.parent||r.hand.add(g)}}}),r}static addEventListener(e,t){let i=this.eventSubs[e]??[];i.push(t),this.eventSubs[e]=i}static removeEventListener(e,t){if(!t)return;let i=this.eventSubs[e]??[],n=i.indexOf(t);n>=0&&i.splice(n,1),this.eventSubs[e]=i}webXR;index=-1;controllerModel;controller;controllerGrip;hand;handPointerModel;grabbed=null;input=null;type=0;showRaycastLine=!0;get isUsingHands(){let e=this.input?.hand;return e!=null}get wrist(){if(!this.hand)return null;let e=this.hand.joints;return e?e.wrist:null}_wristQuaternion=null;getWristQuaternion(){let e=this.wrist;return e?(this._wristQuaternion||(this._wristQuaternion=new sc),me(e).multiply(this._wristQuaternion.setFromEuler(new I_(-Math.PI/4,0,0)))):null}movementVector=new Ei;worldRot=new sc;joystick=new B_;didRotate=!1;didTeleport=!1;didChangeScale=!1;lastHit=null;raycastLine=null;_raycastHitPoint=null;_connnectedCallback=null;_disconnectedCallback=null;_selectStartEvt=null;_selectEndEvt=null;get selectionDown(){return this._selectionPressed&&!this._selectionPressedLastFrame}get selectionUp(){return!this._selectionPressed&&this._selectionPressedLastFrame}get selectionPressed(){return this._selectionPressed}get selectionClick(){return this._selectionEndTime-this._selectionStartTime<.3}get raycastHitPoint(){return this._raycastHitPoint}_selectionPressed=!1;_selectionPressedLastFrame=!1;_selectionStartTime=0;_selectionEndTime=0;get useSmoothing(){return this._useSmoothing}_useSmoothing=!0;awake(){if(!this.controller){console.warn("Missing Controller!!!",this);return}this._connnectedCallback=this.onSourceConnected.bind(this),this._disconnectedCallback=this.onSourceDisconnected.bind(this),this._selectStartEvt=this.onSelectStart.bind(this),this._selectEndEvt=this.onSelectEnd.bind(this),this.type===1&&(this.controllerGrip.addEventListener("connected",this._connnectedCallback),this.controllerGrip.addEventListener("disconnected",this._disconnectedCallback),this.controller.addEventListener("selectstart",this._selectStartEvt),this.controller.addEventListener("selectend",this._selectEndEvt)),this.type===0&&(this.controller.addEventListener("selectstart",this._selectStartEvt),this.controller.addEventListener("selectend",this._selectEndEvt))}onDestroy(){this.type===1&&(this.controllerGrip.removeEventListener("connected",this._connnectedCallback),this.controllerGrip.removeEventListener("disconnected",this._disconnectedCallback),this.controller.removeEventListener("selectstart",this._selectStartEvt),this.controller.removeEventListener("selectend",this._selectEndEvt)),this.type===0&&(this.controller.removeEventListener("selectstart",this._selectStartEvt),this.controller.removeEventListener("selectend",this._selectEndEvt)),this.hand?.clear(),this.controllerGrip?.clear(),this.controller?.clear()}onEnable(){this.hand&&(this.hand.name="Hand"),this.controllerGrip&&(this.controllerGrip.name="ControllerGrip"),this.controller&&(this.controller.name="Controller"),this.raycastLine&&(this.raycastLine.name="RaycastLine;"),this.webXR.Controllers.indexOf(this)<0&&this.webXR.Controllers.push(this),this.raycastLine||(this.raycastLine=je.CreateRaycastLine()),this._raycastHitPoint||(this._raycastHitPoint=je.CreateRaycastHitPoint()),this.webXR.Rig?.add(this.hand),this.webXR.Rig?.add(this.controllerGrip),this.webXR.Rig?.add(this.controller),this.webXR.Rig?.add(this.raycastLine),this.raycastLine?.add(this._raycastHitPoint),this._raycastHitPoint.visible=!1,this.hand.add(this.handPointerModel),pa&&console.log("ADDED TO RIG",this.webXR.Rig)}onDisable(){this.hand?.removeFromParent(),this.controllerGrip?.removeFromParent(),this.controller?.removeFromParent(),this.raycastLine?.removeFromParent(),this._raycastHitPoint?.removeFromParent();let e=this.webXR.Controllers.indexOf(this);e>=0&&this.webXR.Controllers.splice(e,1)}_isConnected=!1;onSourceConnected(e){if(this._isConnected){console.warn("Received connected event for controller that is already connected",this.index,e);return}this._isConnected=!0,this.input=e.data,this.type===1&&(this.onSelectStart(),this.createPointerEvent("down"))}onSourceDisconnected(e){if(!this._isConnected){console.warn("Received discnnected event for controller that is not connected",e);return}this._isConnected=!1,this.type===1&&(this.onSelectEnd(),this.createPointerEvent("up")),this.input=null}createPointerEvent(e){switch(e){case"down":this.context.input.createPointerDown({clientX:0,clientY:0,button:this.index,pointerType:"touch"});break;case"move":break;case"up":this.context.input.createPointerUp({clientX:0,clientY:0,button:this.index,pointerType:"touch"});break}}rayRotation=new sc;update(){this.context.time.frameCount%60===0&&(this.setControllerLayers(this.controller,2),this.setControllerLayers(this.controllerGrip,2),this.setControllerLayers(this.hand,2));let e=je.eventSubs["update"];if(e&&e.length>0)for(let n of e)n(this);let t=1;this.type===0?t=this.context.time.deltaTime/.1:this.isUsingHands&&this.handPointerModel.pinched&&(t=this.context.time.deltaTime/.3),this.rayRotation.slerp(me(this.controller),this.useSmoothing?t:1);let i=B(this.controller);if(this.isUsingHands&&this.handPointerModel.cursorObject&&(this.handPointerModel.cursorObject.visible=!1),this.raycastLine){let n=this.showRaycastLine&&this.type!==1;if(this.type===1)this.raycastLine.visible=!1;else if(this.isUsingHands){this.raycastLine.visible=!this.grabbed&&n,te(this.raycastLine,i);let r=this.hand.joints;if(r&&r.wrist&&this.grabbed&&this.grabbed.isCloseGrab){let a=this.getWristQuaternion();a&&this.rayRotation.copy(a)}$e(this.raycastLine,this.rayRotation)}else this.raycastLine.visible=n,$e(this.raycastLine,this.rayRotation),te(this.raycastLine,i)}this.lastHit=this.updateLastHit(),this.grabbed&&this.grabbed.update(),this._selectionPressedLastFrame=this._selectionPressed,this.selectStartCallback&&this.selectStartCallback()}_pinchStartTime=void 0;onUpdate(e){if(this.lastHit=null,!e||e.inputSources.length<=this.index){this.input=null;return}if(this.type===0&&(this.input=e.inputSources[this.index]),!this.input)return;let t=this.webXR.Rig;if(!t)return;this._didNotEndSelection&&!this.handPointerModel.pinched&&(this._didNotEndSelection=!1,this.onSelectEnd()),this.updateStick(this.input);let i=this.input?.gamepad?.buttons;switch(this.input.handedness){case"left":let n=3*je.MovementSpeedFactor,r=2,s=H.clamp01(this.joystick.length()*2),a=this.joystick.x>0?1:-1,c=Math.pow(this.joystick.x,r);c*=a,c*=s;let u=this.joystick.y>0?1:-1,l=Math.pow(this.joystick.y,r);l*=u,c*=s,t.getWorldQuaternion(this.worldRot),this.movementVector.set(c,0,l),this.movementVector.applyQuaternion(this.webXR.TransformOrientation),this.movementVector.y=0,this.movementVector.applyQuaternion(this.worldRot),this.movementVector.multiplyScalar(n*this.context.time.deltaTime),t.position.add(this.movementVector),this.isUsingHands&&this.runTeleport(t,i);break;case"right":let d=this.joystick.x,h=Math.abs(d);if(h<.4)this.didRotate=!1;else if(h>.5&&!this.didRotate){let g=d>0?-1:1;t.rotateY(H.toRadians(30*g)),this.didRotate=!0}this.runTeleport(t,i);break}}runTeleport(e,t){let i=-this.joystick.y;if(this.hand?.visible&&!this.grabbed){let a=this.handPointerModel.isPinched();a&&this._pinchStartTime===void 0&&(this._pinchStartTime=this.context.time.time),a&&this._pinchStartTime&&this.context.time.time-this._pinchStartTime>.8&&(i=this.handPointerModel.isPinched()?1:0),a||(this._pinchStartTime=void 0)}else this._pinchStartTime=void 0;let n=i>.5&&this.webXR.IsInVR,r=this.webXR.Rig?this.webXR.Rig?.scale?.x<.999:!1,s=null;if(t&&this.input&&!this.input.hand)for(let a=0;a<t.length;a++){let c=t[a];if(a===4)if(c.pressed&&!this.didChangeScale&&this.webXR.IsInVR){this.didChangeScale=!0;let u=this.webXR.Rig;if(u)if(r){r=!1,u.scale.set(1,1,1),s=1,je.MovementSpeedFactor=1;let l=this.context.mainCamera;je.PreviousCameraFarDistance&&(l.far=je.PreviousCameraFarDistance)}else{r=!0,n=!0,s=.1,je.MovementSpeedFactor=s*2;let l=this.context.mainCamera;je.PreviousCameraFarDistance=l.far,l.far/=s}}else c.pressed||(this.didChangeScale=!1)}if(n){if(!this.didTeleport){let a=this.raycast();if(this.didTeleport=!0,a&&a.length>0){let c=a[0];if(r||this.isValidTeleportTarget(c.object)){let u=c.point;te(e,u)}}}}else i<.1&&(this.didTeleport=!1);s!==null&&(e.scale.set(s,s,s),e.updateMatrixWorld())}isValidTeleportTarget(e){return R.getComponentInParent(e,$r)!=null}updateStick(e){!e||!e.gamepad||e.gamepad.axes?.length<4||(this.joystick.x=e.gamepad.axes[2],this.joystick.y=e.gamepad.axes[3])}updateLastHit(){let e=this.raycast(),t=e?e[0]:null;this.lastHit=t;let i=1;if(this.webXR.Rig&&(i/=this.webXR.Rig.scale.x),this.raycastLine){this.raycastLine.scale.z=i*(this.lastHit?.distance??9999);let n=this.raycastLine.material;t!=null?n.color=je.raycastColor:n.color=je.raycastNoHitColor}if(this._raycastHitPoint){if(this.lastHit!=null){this._raycastHitPoint.position.z=-1;let n=H.clamp(this.lastHit.distance*.01*i,.015,.1);this._raycastHitPoint.scale.set(n,n,n)}this._raycastHitPoint.visible=this.lastHit!==null&&this.lastHit!==void 0}return t}onSelectStart(){!this.context.connection.allowEditing||(this.selectStartCallback=()=>this.onHandleSelectStart())}selectStartCallback=null;lastSelectStartObject=null;onHandleSelectStart(){this.selectStartCallback=null,this._selectionPressed=!0,this._selectionStartTime=this.context.time.time,this._selectionEndTime=1e3;let e=null,t=!1;if(this.isUsingHands?(e=this.overlap(),e.length<=0?(e=this.raycast(),t=!1):t=!0):e=this.raycast(),pa&&console.log("onHandleSelectStart","close grab? "+t,"intersections",e),e&&e.length>0)for(let i of e){let n=i.object;this.lastSelectStartObject=n;let r={selected:n,grab:n},s=je.eventSubs["select-start"];if(s&&s.length>0)for(let a of s)a(this,r);r.grab!==n&&pa&&console.log("Grabbed object changed","original",n,"new",r.grab),r.grab&&(this.grabbed=vt.TryTake(this,r.grab,i,t));break}else{let i=je.eventSubs["select-start"],n={selected:null,grab:null};if(i&&i.length>0)for(let r of i)r(this,n)}}_didNotEndSelection=!1;onSelectEnd(){if(this.isUsingHands&&this.handPointerModel.pinched){this._didNotEndSelection=!0;return}if(!this._selectionPressed)return;this.selectStartCallback=null,this._selectionPressed=!1,this._selectionEndTime=this.context.time.time;let e={grab:this.grabbed?.selected??this.lastSelectStartObject},t=je.eventSubs["select-end"];if(t&&t.length>0)for(let i of t)i(this,e);this.grabbed&&(this.grabbed.free(),this.grabbed=null)}testIsVisible(e){return!(!e||R.isActiveInHierarchy(e)===!1||wi.isInteractable(e)===!1)}setControllerLayers(e,t){if(!!e&&(e.layers.set(t),e.children))for(let i of e.children)this.grabbed?.selected===i||this.grabbed?.selectedMesh===i||this.setControllerLayers(i,t)}getRay(){let e=new H_;return e.origin.copy(B(this.controller)),e.direction.set(0,0,-1).applyQuaternion(this.rayRotation),e}closeGrabBoundingBoxHelper;overlap(){let e=this.isUsingHands&&this.handPointerModel?this.handPointerModel.pointerObject:this.controllerGrip;if(pa&&(!this.closeGrabBoundingBoxHelper&&e&&(this.closeGrabBoundingBoxHelper=new k_(e,16776960),this.scene.add(this.closeGrabBoundingBoxHelper)),this.closeGrabBoundingBoxHelper&&e&&this.closeGrabBoundingBoxHelper.setFromObject(e)),!e)return new Array;let t=B(e).clone();return this.context.physics.sphereOverlap(t,.02)}raycast(){let e=new xe;e.layerMask=new A_,e.layerMask.set(0),e.layerMask.disable(2),e.ray=this.getRay();let t=this.context.physics.raycast(e);for(let i=0;i<t.length;i++){let n=t[i],r=n.object;if(!this.testIsVisible(r)){t.splice(i,1),i--;continue}n.object=wi.getObject(r);break}return t}},se=je;I(se,"Factory",new V_),I(se,"raycastColor",new Sm(.9,.3,.3)),I(se,"raycastNoHitColor",new Sm(.6,.6,.6)),I(se,"geometry",new M_().setFromPoints([new Ei(0,0,0),new Ei(0,0,-1)])),I(se,"handModels",{}),I(se,"eventSubs",{}),I(se,"PreviousCameraFarDistance"),I(se,"MovementSpeedFactor",1);var st=class{static AddEventListener(e,t){return st.Events[e]||(st.Events[e]=[]),st.Events[e].push(t),t}static RemoveEventListener(e,t){if(!t||!st.Events[e])return;let i=st.Events[e].indexOf(t);i>=0&&st.Events[e].splice(i,1)}static Register(e){this.Current.find(t=>t===e)||this.Current.push(e)}static Remove(e){let t=this.Current.indexOf(e);t>=0&&this.Current.splice(t,1)}static TryTake(e,t,i,n){let r=R.getComponentInParent(t,Vt);if(r)t=r.gameObject;else return pa&&console.warn("Prevented taking object that is not interactable",t),null;let s=t,a=R.getComponentInParent(t,Pt);a&&(a.requestOwnership(),s=a.gameObject);for(let u of this.Current)if(u.selected===s)return u.controller===e||(u.free(),u.Take(e,s,t,a,r,i,n)),u;let c=new st;return c.Take(e,s,t,a,r,i,n),c}sync=null;selected=null;selectedParent=null;selectedMesh=null;controller=null;grabTime=0;grabUUID="";isCloseGrab=!1;originalMaterial=null;usageMarker=null;rigidbodies=null;didReparent=!1;grabDistance=0;interactable=null;positionSource=null;Take(e,t,i,n,r,s,a){if(console.assert(t!==null,"Expected object to be taken but was",t),e.isUsingHands?this.positionSource=a?e.wrist:e.controller:this.positionSource=e.controller,!this.positionSource)return console.warn("No position source"),this;let c={controller:e,take:t,hit:i,sync:n,interactable:r};st.Events.WillTake?.forEach(g=>g(this,c));let u=i;u?.material&&(this.originalMaterial=u.material,Array.isArray(u.material)||(u.material=u.material.clone(),u.material&&u.material.emissive&&(u.material.emissive.b=.2))),this.selected=t,this.selectedParent||(this.selectedParent=t.parent),this.selectedMesh=u,this.controller=e,this.interactable=r,this.isCloseGrab=a,this.didReparent=!1,this.sync=n,this.grabTime=e.context.time.time,this.grabUUID=Date.now().toString(),this.usageMarker=R.addNewComponent(this.selected,zt),this.rigidbodies=R.getComponentsInChildren(this.selected,J),B(this.positionSource,this.lastControllerWorldPos);let l=()=>a?this.lastControllerWorldPos.clone():s.point.clone();this.grabDistance=l().distanceTo(this.lastControllerWorldPos),this.totalChangeAlongDirection=0,this.localPositionOffsetToGrab=this.selected.worldToLocal(l());let d=e.isUsingHands&&a?this.controller.getWristQuaternion().clone():e.rayRotation.clone();me(this.selected,this.localQuaternionToGrab).premultiply(d.invert());let h=this.controller.webXR.Rig;return h&&this.rigPositionLastFrame.copy(B(h)),ve.Add(e.context,this.selected),st.Register(this),this.sync&&(this.sync.fastMode=!0),st.Events.DidTake?.forEach(g=>g(this,c)),this}free(){if(!this.selected)return;let e={controller:this.controller,take:this.selected,hit:this.selected,sync:this.sync,interactable:null};st.Events.WillFree?.forEach(n=>n(this,e)),ve.Remove(this.controller.context,this.selected),st.Remove(this),this.sync&&(this.sync.fastMode=!1);let t=this.selectedMesh;t&&this.originalMaterial&&t.material&&(t.material=this.originalMaterial);let i=this.selected;if(this.didReparent&&i.parent){let n=this.selectedParent;n?n.attach(i):this.controller?.context.scene.attach(i)}if(this.usageMarker?.destroy(),this.controller&&(this.controller.grabbed=null),this.selected=null,this.selectedParent=null,this.selectedMesh=null,this.sync=null,this.rigidbodies)for(let n of this.rigidbodies)n.wakeUp(),n.setVelocity(n.smoothedVelocity);this.rigidbodies=null,this.localPositionOffsetToGrab=null,this.quaternionLerp=null,st.Events.DidFree?.forEach(n=>n(this,e))}grabPoint=new Ei;localPositionOffsetToGrab=null;localPositionOffsetToGrab_worldSpace=new Ei;localQuaternionToGrab=new sc(0,0,0,1);targetDir=null;quaternionLerp=null;controllerDir=new Ei;controllerWorldPos=new Ei;lastControllerWorldPos=new Ei;controllerPosDelta=new Ei;totalChangeAlongDirection=0;rigPositionLastFrame=new Ei;controllerMovementSinceLastFrame(){if(!this.positionSource||!this.controller)return 0;this.controllerDir.set(0,0,-1),this.controllerDir.applyQuaternion(this.controller.rayRotation),B(this.positionSource,this.controllerWorldPos),this.controllerPosDelta.copy(this.controllerWorldPos),this.controllerPosDelta.sub(this.lastControllerWorldPos),this.lastControllerWorldPos.copy(this.controllerWorldPos);let e=this.controller.webXR.Rig;if(e){let i=B(e),n=this.rigPositionLastFrame.sub(i);this.controllerPosDelta.add(n),this.rigPositionLastFrame.copy(i)}return this.controllerDir.dot(this.controllerPosDelta)}update(){if(this.rigidbodies)for(let e of this.rigidbodies)e.resetVelocities();if(this.sync&&this.controller&&this.controller.context.connection.isInRoom&&this.controller.context.time.time-this.grabTime>3&&this.sync.hasOwnership()===!1&&(console.log("no ownership, will leave",this.sync.guid),this.free()),!(this.interactable&&!this.interactable.canGrab)){if(!this.didReparent&&this.selected&&this.controller){let e=this.controller.webXR.Rig?.scale.x??1;this.totalChangeAlongDirection+=this.controllerMovementSinceLastFrame();let t=1;this.controller.type===0&&(t=Math.max(0,1+this.totalChangeAlongDirection*2/e),t=t*t*t),this.grabDistance/e<.8&&(t=1),this.targetDir||(this.targetDir=new Ei),this.targetDir.set(0,0,-this.grabDistance*t);let i=this.targetDir.applyQuaternion(this.controller.rayRotation).add(this.controllerWorldPos),n=this.controller.rayRotation.clone().multiplyQuaternions(this.controller.rayRotation,this.localQuaternionToGrab);this.quaternionLerp||(this.quaternionLerp=n.clone()),this.quaternionLerp.slerp(n,this.controller.useSmoothing?this.controller.context.time.deltaTime/.03:1),$e(this.selected,this.quaternionLerp),this.selected.updateWorldMatrix(!1,!1),this.grabPoint.copy(i),this.localPositionOffsetToGrab&&(this.localPositionOffsetToGrab_worldSpace.copy(this.localPositionOffsetToGrab),this.selected.localToWorld(this.localPositionOffsetToGrab_worldSpace).sub(B(this.selected)),i.sub(this.localPositionOffsetToGrab_worldSpace)),te(this.selected,i)}if(this.rigidbodies!=null)for(let e of this.rigidbodies)e.wakeUp();re.markDirty(this.selected,!0)}}},vt=st;I(vt,"Events",{}),I(vt,"Current",[]);import{Object3D as Pm}from"three";var W_=P("debugmouth"),hr=class extends M{idle=[];talking=[];marker=null;voip=null;lastMouthChangeTime=0;mouthChangeLength=0;awake(){setTimeout(()=>{this.voip=R.findObjectOfType(ot,this.context),this.marker||(this.marker=R.getComponentInParent(this.gameObject,le))},3e3)}update(){if(!this.voip||this.context.time.frameCount%10!==0)return;let e=this.marker?.connectionId??null;if(!e){W_&&(e=null);return}let t=this.voip.getFrequency(e)??0;this.updateLips(t)}updateLips(e){if(this.context.time.time-this.lastMouthChangeTime>this.mouthChangeLength){if(this.mouthChangeLength=.05+Math.random()*.1,this.talking&&this.talking.length>0&&e>30){this.lastMouthChangeTime=this.context.time.time;let t=Math.floor(Math.random()*this.talking.length);this.setMouthShapeActive(this.talking,t)}else if(this.idle.length>0&&this.context.time.time-this.lastMouthChangeTime>.5){this.lastMouthChangeTime=this.context.time.time;let t=Math.floor(Math.random()*this.idle.length);this.setMouthShapeActive(this.idle,t)}}}setMouthShapeActive(e,t){if(!!e){e!=this.idle?this.idle.map(i=>i.visible=!1):this.talking.map(i=>i.visible=!1);for(let i=0;i<e.length;i++){let n=e[i];n&&(n.visible=i===t)}}}};v([y(Pm)],hr.prototype,"idle",2),v([y(Pm)],hr.prototype,"talking",2);var ns=class extends M{voip=null;marker=null;_startPosition=null;awake(){this.voip=R.findObjectOfType(ot,this.context),this.marker=R.getComponentInParent(this.gameObject,le)}update(){if(!this.voip||!this.marker||this.context.time.frameCount%10!==0)return;let e=this.marker.connectionId,t=this.voip.getFrequency(e);if(t==null)return;this._startPosition||(this._startPosition=this.gameObject.position.clone());let i=t/100;this.gameObject.position.y=this._startPosition.y+i*.07}};import{Object3D as N_}from"three";var Qi=class extends M{eyes=[];lastBlinkTime=0;blinkLength=0;eyesOpen=!0;state=null;awake(){this.state=R.getComponentInParent(this.gameObject,Ce)}update(){if(!this.gameObject||!this.gameObject.visible||!this.eyes||!Array.isArray(this.eyes)||this.eyes.length===0)return;if(this.context.time.time-this.lastBlinkTime>this.blinkLength){if(this.lastBlinkTime=this.context.time.time,this.state&&!this.state.isOn||!this.activeAndEnabled)return;if(this.eyesOpen=!this.eyesOpen,this.blinkLength=Math.random(),this.eyesOpen?(this.blinkLength*=3,this.blinkLength+=.5,Math.random()<.1&&(this.blinkLength=.1+Math.random()*.2)):(this.blinkLength*=Math.random()*.2,this.blinkLength+=.1),Math.random()<.1&&(this.blinkLength*=3),this.blinkLength=Math.max(.2,this.blinkLength),this.blinkLength=Math.min(3,this.blinkLength),this.eyes)for(let t of this.eyes)t&&(t.visible=this.eyesOpen)}}};v([y(N_)],Qi.prototype,"eyes",2),v([y()],Qi.prototype,"lastBlinkTime",2),v([y()],Qi.prototype,"blinkLength",2),v([y()],Qi.prototype,"eyesOpen",2);import*as ac from"three";import{Object3D as jd}from"three";var Hd=class extends M{head=null;eyes=null;target=null;brain=null;awake(){this.brain||(this.brain=R.getComponentInParent(this.gameObject,Pn)),this.brain||(console.log("No look at brain found, adding it now"),this.brain=R.addNewComponent(this.gameObject,Pn)),this.brain&&this.target&&(this.brain.controlledTarget=this.target)}vec=new ac.Vector3;currentTargetPoint=new ac.Vector3;update(){let e=this.target;if(e&&this.head){let t=this.eyes;if(t){let i=B(e);this.currentTargetPoint.lerp(i,this.context.time.deltaTime/.1);let n=B(this.head),r=this.vec.copy(this.currentTargetPoint).sub(n).normalize();if(r.length()<.1)return;let s=Hd.forward;if(s.set(0,0,1),s.applyQuaternion(me(this.head)),s.dot(r)>.45)for(let c=0;c<t.length;c++)t[c].lookAt(this.currentTargetPoint)}}}},qi=Hd;I(qi,"forward",new ac.Vector3(0,0,1)),v([y(jd)],qi.prototype,"head",2),v([y(jd)],qi.prototype,"eyes",2),v([y(jd)],qi.prototype,"target",2);import{AxesHelper as X_}from"three";var In=class extends M{length=1;depthTest=!0;isGizmo=!0;_axes=null;onEnable(){if(this.isGizmo&&!Di)return;this._axes||(this._axes=new X_(this.length)),this.gameObject.add(this._axes);let e=this._axes.material;e&&e.depthTest!==void 0&&(e.depthTest=this.depthTest)}onDisable(){!this._axes||this.gameObject.remove(this._axes)}};v([y()],In.prototype,"length",2),v([y()],In.prototype,"depthTest",2),v([y()],In.prototype,"isGizmo",2);import*as Om from"three";var rs=class extends M{from;to;hint;desiredDistance=1;onEnable(){}update(){if(!this.from||!this.to||!this.hint)return;let e=B(this.to).clone(),t=B(this.from).clone(),i=e.distanceTo(t),n=e.clone();n.sub(t);let r=t.clone();r.add(e),r.multiplyScalar(.5);let s=B(this.hint).clone();s.sub(r);let a=new Om.Vector3;a.crossVectors(s,n),a.crossVectors(n,a),a.normalize();let c=i*.5,u=Math.max(this.desiredDistance,c),l=Math.sqrt(u*u-c*c),d=a.clone();d.multiplyScalar(l),d.add(r),te(this.gameObject,d);let h=r.clone();h.sub(a),this.gameObject.lookAt(h)}};import{Mesh as Q_,Vector3 as pr}from"three";var Ot=class extends M{get isCollider(){return!0}attachedRigidbody=null;isTrigger=!1;sharedMaterial;awake(){super.awake(),this.attachedRigidbody||(this.attachedRigidbody=this.gameObject.getComponentInParent(J))}start(){this.attachedRigidbody||(this.attachedRigidbody=this.gameObject.getComponentInParent(J))}onEnable(){this.attachedRigidbody||(this.attachedRigidbody=this.gameObject.getComponentInParent(J))}onDisable(){this.context.physics.removeBody(this)}};v([y(J)],Ot.prototype,"attachedRigidbody",2),v([y()],Ot.prototype,"isTrigger",2),v([y()],Ot.prototype,"sharedMaterial",2);var fr=class extends Ot{radius=.5;center=new pr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addSphereCollider(this,this.center,this.radius)}};v([y()],fr.prototype,"radius",2),v([y(pr)],fr.prototype,"center",2);var mr=class extends Ot{size=new pr(1,1,1);center=new pr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addBoxCollider(this,this.center,this.size)}};v([y(pr)],mr.prototype,"size",2),v([y(pr)],mr.prototype,"center",2);var eo=class extends Ot{sharedMesh;convex=!1;onEnable(){super.onEnable(),this.sharedMesh?.isMesh||this.gameObject instanceof Q_&&(this.sharedMesh=this.gameObject),this.sharedMesh?.isMesh&&this.context.physics.addMeshCollider(this,this.sharedMesh,this.convex,Ae(this.gameObject))}};v([y()],eo.prototype,"convex",2);var Xt=class extends Ot{center=new pr(0,0,0);radius=.5;height=2;onEnable(){super.onEnable(),this.context.physics.addCapsuleCollider(this,this.center,this.height,this.radius)}};v([y(pr)],Xt.prototype,"center",2),v([y()],Xt.prototype,"radius",2),v([y()],Xt.prototype,"height",2);import*as to from"three";var q_=P("gizmos"),Y_=P("debugboxhelper"),Qt=class extends M{box=null;_lastMatrixUpdateFrame=-1;isInBox(e,t){if(!e)return;if(this.box||(this.box=new to.Box3),e.type==="Mesh")Qt.testBox.setFromObject(e);else if(e.type==="Group"){if(Qt.testBox.makeEmpty(),e.children.length>0)for(let n=0;n<e.children.length;n++)e.children[n].type==="Mesh"&&Qt.testBox.expandByObject(e)}else{let n=B(e,Qt._position),r=Ae(e,Qt._size);t!==void 0&&r.multiplyScalar(t),Qt.testBox.setFromCenterAndSize(n,r)}this.updateBox();let i=this.box?.intersectsBox(Qt.testBox);return i&&Y_&&Et.DrawBox3(Qt.testBox,16711680,5),i}intersects(e){return e?this.updateBox(!1).intersectsBox(e):!1}updateBox(e=!1){if(this.box||(this.box=new to.Box3),e||this.context.time.frameCount!=this._lastMatrixUpdateFrame){let t=this._lastMatrixUpdateFrame<0;this._lastMatrixUpdateFrame=this.context.time.frameCount;let i=t,n=B(this.gameObject,Qt._position,i),r=Ae(this.gameObject,Qt._size);this.box.setFromCenterAndSize(n,r)}return this.box}_helper=null;_color=null;awake(){this._helper=null,this._color=null,this.box=null}showHelper(e=null,t=!1){if(!(!q_&&!t)){if(this._helper){e&&this._color?.set(e),this.gameObject.add(this._helper);return}this._helper=ll(e),this.gameObject.add(this._helper)}}},We=Qt;I(We,"testBox",new to.Box3),I(We,"_position",new to.Vector3),I(We,"_size",new to.Vector3(.01,.01,.01));import{Color as ex,Texture as jm}from"three";import{LinearEncoding as Z_,sRGBEncoding as $_}from"three";import*as Ud from"three-mesh-ui";import{Matrix4 as K_,Object3D as J_,Vector2 as Dm,Vector3 as Bd}from"three";import{FrontSide as km,DoubleSide as Mm}from"three";function Fd(o){let e=o[bt];return e||(o.parent?Fd(o.parent):null)}function os(o,e){if(!o)return;let t=o.material;t?.isMaterial===!0&&(t.depthTest=!e.renderOnTop,t.side=e.doubleSided??!0?Mm:km,t.depthWrite=e.depthWrite??!1,t.shadowSide=e.doubleSided?Mm:km,o.castShadow=e.castShadows?e.castShadows:!1,o.receiveShadow=e.receiveShadows?e.receiveShadows:!1);for(let i of o.children)os(i,e)}function lc(o,e,t){o[e]===void 0&&console.warn("Field",e,"is undefined on",o);let i=Proxy.revocable(o[e],{set(s,a,c,u){let l=s[a],d=Reflect.set(s,a,c,u);return t(c,l),d}}),n=i.revoke,r=o[e];return i.revoke=()=>{o[e]=r,n()},o[e]=i.proxy,i}var Im=Symbol("Scheduled action");function Am(o,e,t=3){let i=o[Im];i||(i=o[Im]={});let n=e.name;i[t]||(i[t]={});let r=i[t];if(r[n])return;function*a(){e?.call(o),r[n]=null}let c=o.startCoroutine(a(),t);r[n]=c}var Lm=P("debugui"),ss=class{width;height},io=class{x;y;width;height},yt=class extends ze{offset=.01;get translation(){return this.gameObject.position}get rotation(){return this.gameObject.quaternion}get scale(){return this.gameObject.scale}_anchoredPosition;get anchoredPosition(){return this._anchoredPosition||(this._anchoredPosition=new Bd),this._anchoredPosition}rect;sizeDelta;anchoredPosition3D;pivot;lastMatrix;rectBlock;_transformNeedsUpdate=!1;awake(){super.awake(),this.lastMatrix=new K_,this.rectBlock=new J_,this.rectBlock.position.z=.1,this.rectBlock.name=this.name,this._anchoredPosition||(this._anchoredPosition=new Bd),lc(this,"_anchoredPosition",()=>{this._transformNeedsUpdate=!0})}onEnable(){super.onEnable(),this.addShadowComponent(this.rectBlock),this._transformNeedsUpdate=!0}onDisable(){super.onDisable(),this.removeShadowComponent()}applyTransform(){let e=this.shadowComponent;!e||(this._transformNeedsUpdate=!1,this.isRoot()?e.rotation.y=Math.PI:(e.position.copy(this.gameObject.position),e.position.x*=-1,e.position.z*=-1,e.position.z-=this.offset,e.quaternion.copy(this.gameObject.quaternion),e.rotation.x*=-1,e.rotation.z*=-1,e.scale.copy(this.gameObject.scale)),this.applyAnchoring(e.position),this.lastMatrix.copy(this.gameObject.matrix))}markDirty(){this._transformNeedsUpdate=!0}onBeforeRender(){(this._transformNeedsUpdate||this.lastMatrix.equals(this.gameObject.matrix)===!1)&&(Lm&&console.log("updating",this.name),this.applyTransform()),Ke.ensureUpdateMeshUI(Ud,this.context)}applyAnchoring(e){if(this.pivot&&this.sizeDelta){let t=this.pivot.x*2-1,i=this.pivot.y*2-1;i-=this.anchoredPosition.y*.05;let n=this.sizeDelta.x*t,r=this.sizeDelta.y*i;e.x-=n*.5,e.y-=r*.5}}getBasicOptions(){let e={width:this.rect.width,height:this.rect.height,offset:this.offset,backgroundOpacity:0,borderWidth:0,borderRadius:0,borderOpacity:0};return this.ensureValidSize(e),e}ensureValidSize(e,t=1e-4){return e.width<=0&&(e.width=t),e.height<=0&&(e.height=1e-4),e}_createdBlocks=[];createNewBlock(e){e={...this.getBasicOptions(),...e},Lm&&console.log(this.name,e);let t=new Ud.Block(e);return this._createdBlocks.push(t),t}};v([y(io)],yt.prototype,"rect",2),v([y(Dm)],yt.prototype,"sizeDelta",2),v([y(Bd)],yt.prototype,"anchoredPosition3D",2),v([y(Dm)],yt.prototype,"pivot",2);var fa=class extends ze{get isGraphic(){return!0}get color(){return this._color||(this._color=new Q(1,1,1,1)),this._color}set color(e){(!this._color||this._color.r!==e.r||this._color.g!==e.g||this._color.b!==e.b||this._color.alpha!==e.alpha)&&(this._color||(this._color=new Q(1,1,1,1)),this._color.copy(e))}onColorChanged(){let e=this.color;this.setOptions({backgroundColor:e,backgroundOpacity:e.alpha,borderOpacity:e.alpha})}get m_Color(){return this._color}raycastTarget=!0;uiObject=null;_color=null;_rect=null;get rectTransform(){return this._rect||(this._rect=R.getComponent(this.gameObject,yt)),this._rect}setState(e){this.makePanel(),this.uiObject&&this.uiObject.setState(e)}setupState(e){this.makePanel(),this.uiObject&&this.uiObject.setupState(e)}setOptions(e){this.makePanel(),this.uiObject&&(this.uiObject.set(e),(e.backgroundColor!==void 0||e.backgroundOpacity!==void 0)&&this.uiObject.updateBackgroundMaterial?.call(this.uiObject))}awake(){super.awake(),this.makePanel(),lc(this,"_color",()=>Am(this,this.onColorChanged))}onEnable(){super.onEnable(),this.uiObject&&(this.rectTransform.shadowComponent?.add(this.uiObject),this.addShadowComponent(this.uiObject,this.rectTransform))}onDisable(){super.onDisable(),this.uiObject&&this.removeShadowComponent()}_currentlyCreatingPanel=!1;makePanel(){if(this.uiObject||this._currentlyCreatingPanel)return;this._currentlyCreatingPanel=!0;let e={backgroundColor:this.color,backgroundOpacity:this.color.alpha,offset:1};this.onBeforeCreate(e),this.onCreate(e),this.controlsChildLayout=!1,this._currentlyCreatingPanel=!1,this.onAfterCreated()}onBeforeCreate(e){}onCreate(e){this.uiObject=this.rectTransform.createNewBlock(e),this.uiObject.name=this.name}onAfterCreated(){}async setTexture(e){if(!!e&&(this.setOptions({backgroundOpacity:0}),e)){if(e.encoding===$_)if(fa.textureCache.has(e))e=fa.textureCache.get(e);else{let t=e.clone();t.encoding=Z_,fa.textureCache.set(e,t),e=t}this.setOptions({backgroundTexture:e,borderRadius:0,backgroundOpacity:this.color.alpha,backgroundSize:"stretch"})}}onAfterAddedToScene(){super.onAfterAddedToScene(),this.shadowComponent&&(this.shadowComponent.offset=this.shadowComponent.position.z)}},_t=fa;I(_t,"textureCache",new Map),v([y(Q)],_t.prototype,"color",1),v([y()],_t.prototype,"raycastTarget",2);var An=class extends _t{_flippedObject=!1;onAfterCreated(){this.uiObject&&!this._flippedObject&&(this._flippedObject=!0,this.uiObject.scale.y*=-1)}};var cc=class{texture;rect};v([y(jm)],cc.prototype,"texture",2);var Dn=class extends An{get sprite(){return this._sprite}set sprite(e){this._sprite!==e&&(this._sprite=e,this.onAfterCreated())}_sprite;isBuiltinSprite(){switch(this.sprite?.texture?.name){case"InputFieldBackground":case"UISprite":case"Background":return!0}return this.sprite?.texture?.image?.width===32&&this.sprite?.texture?.image?.height===32}onBeforeCreate(e){this.isBuiltinSprite()&&(e.borderRadius=5,e.borderColor=new ex(.4,.4,.4),e.borderOpacity=this.color.alpha,e.borderWidth=.3)}onAfterCreated(){!this.__didAwake||(super.onAfterCreated(),!this.isBuiltinSprite()&&this.setTexture(this.sprite?.texture))}};v([y(cc)],Dn.prototype,"sprite",1);var no=class extends An{get mainTexture(){return this._mainTexture}set mainTexture(e){this._mainTexture!==e&&(this._mainTexture=e,this.onAfterCreated())}_mainTexture;onAfterCreated(){!this.__didAwake||(super.onAfterCreated(),this.setTexture(this.mainTexture))}};v([y(jm)],no.prototype,"mainTexture",1);var as=P("debugbutton");var Ln=class{colorMultiplier;disabledColor;fadeDuration;highlightedColor;normalColor;pressedColor;selectedColor};v([y()],Ln.prototype,"colorMultiplier",2),v([y(Q)],Ln.prototype,"disabledColor",2),v([y()],Ln.prototype,"fadeDuration",2),v([y(Q)],Ln.prototype,"highlightedColor",2),v([y(Q)],Ln.prototype,"normalColor",2),v([y(Q)],Ln.prototype,"pressedColor",2),v([y(Q)],Ln.prototype,"selectedColor",2);var qt=class extends M{onClick;_isHovered=!1;onPointerEnter(e){as&&console.log("Button Enter",this.animationTriggers?.highlightedTrigger,this.animator),this._isHovered=!0,this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this.animationTriggers.highlightedTrigger):this.transition===1&&this.colors&&this._image?.setState("hovered"),this.context.input.setCursorPointer()}onPointerExit(){as&&console.log("Button Exit",this.animationTriggers?.highlightedTrigger,this.animator),this._isHovered=!1,this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this.animationTriggers.normalTrigger):this.transition===1&&this.colors&&this._image?.setState("normal"),this.context.input.setCursorNormal()}onPointerDown(e){as&&console.log("Button Down",this.animationTriggers?.highlightedTrigger,this.animator),this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this.animationTriggers.pressedTrigger):this.transition===1&&this.colors&&this._image?.setState("pressed")}onPointerUp(e){as&&console.log("Button Down",this.animationTriggers?.highlightedTrigger,this.animator),this.transition==3&&this.animationTriggers&&this.animator?this.animator.SetTrigger(this._isHovered?this.animationTriggers.highlightedTrigger:this.animationTriggers.normalTrigger):this.transition===1&&this.colors&&this._image?.setState(this._isHovered?"hovered":"normal")}onPointerClick(e){as&&console.trace("Button Click",this.onClick),this.onClick?.invoke()}colors;transition;animationTriggers;animator;set interactable(e){this._interactable=e,this._image&&(this._image.setInteractable(e),e?this._image.setState("normal"):this._image.setState("disabled"))}get interactable(){return this._interactable}_interactable=!0;set_interactable(e){this.interactable=e}awake(){super.awake(),as&&console.log(this),this.init()}start(){this._image?.setInteractable(this.interactable)}onEnable(){super.onEnable()}_requestedAnimatorTrigger;*setAnimatorTriggerAtEndOfFrame(e){this._requestedAnimatorTrigger=e,yield,yield,this._requestedAnimatorTrigger==e&&this.animator?.SetTrigger(e)}_isInit=!1;_image;init(){this._isInit||(this._isInit=!0,this._image=R.getComponent(this.gameObject,Dn),this._image&&(this.stateSetup(this._image),this.interactable?this._image.setState("normal"):this._image.setState("disabled")))}stateSetup(e){e.setInteractable(this.interactable);let t=this.getFinalColor(e.color,this.colors?.normalColor),i={state:"normal",attributes:{backgroundColor:t,backgroundOpacity:t.alpha}};e.setupState(i);let n=this.getFinalColor(e.color,this.colors?.highlightedColor),r={state:"hovered",attributes:{backgroundColor:n,backgroundOpacity:n.alpha}};e.setupState(r);let s=this.getFinalColor(e.color,this.colors?.pressedColor),a={state:"pressed",attributes:{backgroundColor:s,backgroundOpacity:s.alpha}};e.setupState(a);let c=this.getFinalColor(e.color,this.colors?.selectedColor),u={state:"selected",attributes:{backgroundColor:c,backgroundOpacity:c.alpha}};e.setupState(u);let l=this.getFinalColor(e.color,this.colors?.disabledColor),d={state:"disabled",attributes:{backgroundColor:l,backgroundOpacity:l.alpha}};e.setupState(d)}getFinalColor(e,t){return t?e.clone().multiply(t):e.clone()}};v([y(de)],qt.prototype,"onClick",2),v([y()],qt.prototype,"colors",2),v([y()],qt.prototype,"transition",2),v([y()],qt.prototype,"animationTriggers",2),v([y(Ee)],qt.prototype,"animator",2),v([y()],qt.prototype,"interactable",1);var Gd=class extends Mn{set renderOnTop(e){e!==this._renderOnTop&&(this._renderOnTop=e,this.onRenderSettingsChanged())}get renderOnTop(){return this._renderOnTop}_renderOnTop=!1;set depthWrite(e){this._depthWrite!==e&&(this._depthWrite=e,this.onRenderSettingsChanged())}get depthWrite(){return this._depthWrite}_depthWrite=!1;set doubleSided(e){this._doubleSided!==e&&(this._doubleSided=e,this.onRenderSettingsChanged())}get doubleSided(){return this._doubleSided}_doubleSided=!0;set castShadows(e){this._castShadows!==e&&(this._castShadows=e,this.onRenderSettingsChanged())}get castShadows(){return this._castShadows}_castShadows=!0;set receiveShadows(e){this._receiveShadows!==e&&(this._receiveShadows=e,this.onRenderSettingsChanged())}get receiveShadows(){return this._receiveShadows}_receiveShadows=!0;get renderMode(){return this._renderMode}set renderMode(e){this._renderMode!==e&&(this._renderMode=e,this.onRenderSettingsChanged())}_renderMode=-1;_rootCanvas;set rootCanvas(e){this._rootCanvas instanceof Gd||(this._rootCanvas=e)}get rootCanvas(){return this._rootCanvas}_scaleFactor=1;get scaleFactor(){return this._scaleFactor}set scaleFactor(e){this._scaleFactor=e}awake(){this.shadowComponent=this.gameObject,super.awake()}onEnable(){super.onEnable(),this._updateRenderSettingsRoutine=void 0,this.onRenderSettingsChanged()}previousAspect=-1;onBeforeRender(){this.isScreenSpace&&this.context.mainCameraComponent&&this.context.mainCameraComponent.aspect!==this.previousAspect&&(this.previousAspect=this.context.mainCameraComponent.aspect,this.updateRenderMode())}_updateRenderSettingsRoutine;onRenderSettingsChanged(){this._updateRenderSettingsRoutine||(this._updateRenderSettingsRoutine=this.startCoroutine(this._updateRenderSettingsDelayed(),3))}*_updateRenderSettingsDelayed(){if(yield,this._updateRenderSettingsRoutine=void 0,this.shadowComponent){this.updateRenderMode(),os(this.shadowComponent,this);for(let e of R.getComponentsInChildren(this.gameObject,ze))os(e.shadowComponent,this)}}_activeRenderMode=-1;get isScreenSpace(){return this._activeRenderMode===1||this._activeRenderMode===0}updateRenderMode(){if(this.renderMode!==this._activeRenderMode)switch(this.renderMode){case 0:case 1:let e=this.context.mainCameraComponent;if(!e)return;let t=this.gameObject;e.gameObject?.add(t);let n=e.farClipPlane;t.position.x=0,t.position.y=0,t.position.z=-n;let r=Math.tan(H.toRadians(e.fieldOfView)*n)*(e.aspect*1.333333),s=r*(this.context.domHeight/this.context.domWidth);t.scale.x=-r,t.scale.y=s;break;case 2:break}}},Ne=Gd;v([y()],Ne.prototype,"renderOnTop",1),v([y()],Ne.prototype,"depthWrite",1),v([y()],Ne.prototype,"doubleSided",1),v([y()],Ne.prototype,"castShadows",1),v([y()],Ne.prototype,"receiveShadows",1),v([y()],Ne.prototype,"renderMode",1),v([y(Ne)],Ne.prototype,"rootCanvas",1),v([y()],Ne.prototype,"scaleFactor",1);var jn=class extends M{get alpha(){return this._alpha}set alpha(e){e!==this._alpha&&(this._alpha=e,this.markDirty())}get isCanvasGroup(){return!0}_alpha=1;interactable=!0;blocksRaycasts=!0;_isDirty=!1;markDirty(){this._isDirty||(this._isDirty=!0,this.startCoroutine(this.applyChangesDelayed(),3))}*applyChangesDelayed(){this._isDirty=!1,this.applyChangesNow()}_buffer=[];applyChangesNow(){for(let e of R.getComponentsInChildren(this.gameObject,_t,this._buffer)){let t=e.color;t.alpha=this._alpha,e.color=t}}};v([y()],jn.prototype,"alpha",1),v([y()],jn.prototype,"interactable",2),v([y()],jn.prototype,"blocksRaycasts",2);import{Quaternion as lx,Ray as cx,Vector3 as ro}from"three";import*as Hm from"three";import{Color as ix,Object3D as nx,Texture as rx,WebGLRenderTarget as ox}from"three";import{WebGLRenderTarget as tx}from"three";var ls=class extends tx{};var zd=class extends Li{constructor(){super([ix,Q])}onDeserialize(e){if(e!=null)return e.a!==void 0?new Q(e.r,e.g,e.b,e.a):e.alpha!==void 0?new Q(e.r,e.g,e.b,e.alpha):new Hm.Color(e.r,e.g,e.b)}onSerialize(e){if(e!=null)return e.a!==void 0?{r:e.r,g:e.g,b:e.b,a:e.a}:{r:e.r,g:e.g,b:e.b}}},uL=new zd,Wd=class extends Li{constructor(){super(nx)}onSerialize(e,t){if(t.objectToNode!==void 0&&e.uuid){let i=t.objectToNode[e.uuid];return pe&&console.log(i,e.name,e.uuid),{node:i}}}onDeserialize(e,t){if(e){if(e.node!==void 0&&t.nodeToObject){let i=t.nodeToObject[e.node];return pe&&console.log("Deserialized object reference?",e,i,t?.nodeToObject),i||console.warn("Did not find node: "+e.node,t.nodeToObject,t.object),i}else if(e.guid){if(!t.context){console.error("Missing context");return}let i,n=t.gltf?.scene;return n&&(i=R.findByGuid(e.guid,n)),i||(i=R.findByGuid(e.guid,t.context.scene)),i?pe&&console.log("Deserialized object reference?",e,i,t?.nodeToObject):((Fa()||pe)&&console.warn("Could not resolve object reference",t.path,e,t.target,t.context.scene),e.could_not_resolve=!0),i}}}},sx=new Wd,Nd=class extends Li{constructor(){super([Tt,M])}onSerialize(e,t){if(e?.guid)return{guid:e.guid}}onDeserialize(e,t){if(e?.guid){pe&&console.log(e.guid,t.root,t.object,t.target);let i=this.findObjectForGuid(e.guid,t.root);if(i||t.context&&(i=this.findObjectForGuid(e.guid,t.context?.scene),i))return i;(Fa()||pe)&&console.warn("Could not resolve component reference",t.path,e,t.target),e.could_not_resolve=!0;return}}findObjectForGuid(e,t){if(t.guid===e)return t;let i=R.foreachComponent(t,n=>{if(n.guid===e)return n},!1);if(i!==void 0)return i;for(let n=0;n<t.children.length;n++){let r=t.children[n],s=this.findObjectForGuid(e,r);if(s)return s}}},Vd=new Nd,Xd=class extends Li{constructor(){super([de])}onSerialize(e,t){console.log("TODO: SERIALIZE EVENT")}onDeserialize(e,t){if(typeof e=="function")return new de([new bi(e,!0)]);if(e&&e.type==="EventList"){pe&&console.log("DESERIALIZE EVENT",e);let i=new Array;if(e.calls&&Array.isArray(e.calls))for(let s of e.calls){pe&&console.log(s);let a=Vd.findObjectForGuid(s.target,t.root);!a&&t.context?.scene&&(a=Vd.findObjectForGuid(s.target,t.context?.scene));let c=s.method?.length>0;if(a&&c){let h=()=>console.warn(`Could not find method ${s.method} on object ${a.name}`,a,typeof a[s.method]);if(typeof a[s.method]!="function"){let g=!1;s.method.startsWith("set_")&&s.method.length>4&&(s.method=s.method.substring(4),a[s.method]!==void 0&&(g=!0)),!g&&(Fa()||pe)&&h()}}let u,l=s.argument;s.argument!==void 0?(typeof l=="object"&&(l=sx.onDeserialize(s.argument,t),l||(l=Vd.onDeserialize(s.argument,t))),u=new bi(c?(...h)=>d(...h):void 0,s.enabled)):u=new bi(c?(...h)=>d(...h):void 0,s.enabled);let d=(...h)=>{let g=a[s.method];typeof g=="function"?l!==void 0?g?.call(a,l):g?.call(a,...h):a[s.method]=l};if(u.method||(u.__debuginfo=t.object?.name),!a||!u.method){let h=t.object?"Current object: "+t.object.name+", "+t.object.guid:null;a?console.warn('EventList method not found: "'+s.method+'" on',a):console.warn("EventList is missing target - will be ignored",s.target,h,e)}else i.push(u)}let n=new de(i);pe&&console.log(n);let r=t.target;return r!==void 0&&t.path!==void 0&&n.setEventTarget(t.path,r),n}}},dL=new Xd,Qd=class extends Li{constructor(){super([ls,ox])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof rx&&t.type===ls){let i=e,n=new ls(i.image.width,i.image.height);return n.texture=i,n}}};new Qd;var Yi=class extends M{center=new ro(0,0,0);radius=.5;height=2;_rigidbody=null;get rigidbody(){return this._rigidbody?this._rigidbody:(this._rigidbody=this.gameObject.getComponent(J),this._rigidbody||(this._rigidbody=this.gameObject.addNewComponent(J)),this.rigidbody)}onEnable(){let e=this.rigidbody,t=this.gameObject.getComponent(Xt);t||(t=this.gameObject.addNewComponent(Xt)),t.center.copy(this.center),t.radius=this.radius,t.height=this.height,this.gameObject.rotation.x=0,this.gameObject.rotation.z=0,e.lockRotationX=!0,e.lockRotationY=!0,e.lockRotationZ=!0}move(e){this.gameObject.position.add(e)}_activeGroundCollisions=new Set;onCollisionEnter(e){for(let t of e.contacts)if(t.normal.y>.1){this._activeGroundCollisions.add(e);break}}onCollisionExit(e){this._activeGroundCollisions.delete(e)}get isGrounded(){return this._activeGroundCollisions.size>0}};v([y(ro)],Yi.prototype,"center",2),v([y()],Yi.prototype,"radius",2),v([y()],Yi.prototype,"height",2);var Ci=class extends M{controller;movementSpeed=2;rotationSpeed=2;jumpForce=1;animator;lookForward=!0;_currentSpeed=new ro(0,0,0);_currentAngularSpeed=new ro(0,0,0);_temp=new ro(0,0,0);_jumpCount=0;_currentRotation;awake(){this._currentRotation=new lx}update(){this.controller?.isGrounded&&(this._jumpCount=0,this.animator?.SetBool("doubleJump",!1));let e=this.context.input.isKeyPressed("w"),t=this.context.input.isKeyPressed("s"),i=this.context.input.isKeyPressed("a"),n=this.context.input.isKeyPressed("d"),r=this.context.input.isKeyDown(" "),s=e?1:0+t?-1:0;this._currentSpeed.z+=s*this.movementSpeed*this.context.time.deltaTime,this.animator?.SetBool("running",s!=0),this.animator?.SetBool("jumping",this.controller?.isGrounded===!0&&r),this._temp.copy(this._currentSpeed),this._temp.applyQuaternion(this.gameObject.quaternion),this.controller?this.controller.move(this._temp):this.gameObject.position.add(this._temp);let a=i?1:0+n?-1:0;if(this._currentAngularSpeed.y+=H.toRadians(a*this.rotationSpeed)*this.context.time.deltaTime,this.lookForward&&Math.abs(this._currentAngularSpeed.y)<.01){let c=this.context.mainCameraComponent.forward;c.y=0,c.normalize(),this._currentRotation.setFromUnitVectors(new ro(0,0,1),c),this.gameObject.quaternion.slerp(this._currentRotation,this.context.time.deltaTime*10)}if(this.gameObject.rotateY(this._currentAngularSpeed.y),this._currentSpeed.multiplyScalar(1-this.context.time.deltaTime*10),this._currentAngularSpeed.y*=1-this.context.time.deltaTime*10,this.controller&&r&&this.jumpForce>0){let c=this.controller?.isGrounded;if(!this.controller?.isGrounded&&this._jumpCount===1&&(c=!0,this.animator?.SetBool("doubleJump",!0)),c){this._jumpCount+=1;let u=this.controller.rigidbody,l=this._jumpCount===2?2:1;u.applyImpulse(new ro(0,1,0).multiplyScalar(this.jumpForce*l))}}if(this.controller){let c=this.controller?.rigidbody.getVelocity().y;if(c<-1){this._raycastOptions.ray||(this._raycastOptions.ray=new cx),this._raycastOptions.ray.origin.copy(B(this.gameObject)),this._raycastOptions.ray.direction.set(0,-1,0);let u=this.layer;this.gameObject.layers.disableAll(),this.gameObject.layers.set(2);let l=this.context.physics.raycast(this._raycastOptions);this.gameObject.layers.set(u),(l.length&&l[0].distance>2||c<-10)&&this.animator?.SetBool("falling",!0)}else this.animator?.SetBool("falling",!1)}}_raycastOptions=new xe};v([y(Yi)],Ci.prototype,"controller",2),v([y()],Ci.prototype,"movementSpeed",2),v([y()],Ci.prototype,"rotationSpeed",2),v([y()],Ci.prototype,"jumpForce",2),v([y(Ee)],Ci.prototype,"animator",2);import{LinearToneMapping as qd,ACESFilmicToneMapping as Fm,ReinhardToneMapping as ux}from"three";var uc=P("debugvolume"),Um=(i=>(i[i.None=0]="None",i[i.Neutral=1]="Neutral",i[i.ACES=2]="ACES",i))(Um||{}),cs=class{overrideState=!1;value=0},Ki=class{active=!1;parameters},br=class extends Ki{mode;get isToneMapping(){return!0}},vr=class extends Ki{postExposure};function dx(o){return"mode"in o?br:"postExposure"in o?vr:Ki}var Bm=Symbol("volumeprofile"),gr=class{components;apply(e){this.onUpdate(e,!1)}unapply(e){this.onUpdate(e,!0)}onUpdate(e,t){if(!this.components)return;let i=e.renderer,r=i[Bm]!==void 0;if(t){if(!r)return}else i[Bm]=this;for(let s of this.components)if(s instanceof br){let a=s;if(!s.active||t){e.renderer.toneMapping=qd;continue}uc&&console.log("VOLUME:",Um[a.mode?.value??0]);let c=a.mode;switch((c?.overrideState?c?.value:0)??0){case 0:e.renderer.toneMapping=qd;break;case 1:e.renderer.toneMapping=ux;break;case 2:e.renderer.toneMapping=Fm;break}}else if(s instanceof vr){let a=s;uc&&console.log(a.postExposure);let c=1;a.postExposure&&(c=Math.pow(2,a.postExposure.value)),e.renderer.toneMapping,Fm;let u=a.postExposure?.overrideState&&!t;e.renderer.toneMappingExposure=u?c:1,e.renderer.toneMapping||(e.renderer.toneMapping=qd)}}};v([y([o=>dx(o),Ki])],gr.prototype,"components",2);var oo=class extends M{sharedProfile;awake(){uc&&(console.log(this),console.log("Press P to toggle post processing"),window.addEventListener("keydown",e=>{e.key==="p"&&(console.log("Toggle volume: "+this.name,!this.enabled),this.enabled=!this.enabled)}))}onEnable(){uc&&console.log("APPLY VOLUME",this),this.sharedProfile?.apply(this.context)}onDisable(){this.sharedProfile?.unapply(this.context)}};v([y(gr)],oo.prototype,"sharedProfile",2);import{Matrix4 as Gm,Quaternion as hx,Vector3 as Ze,Vector2 as Vm,Euler as px}from"three";import{createNoise4D as fx}from"simplex-noise";var mx=P("debugparticles");var Ri=class{alphaKeys;colorKeys;get duration(){return 1}evaluate(e,t){let i,n=0,r=null,s=0;for(let a=0;a<this.alphaKeys.length;a++){let c=this.alphaKeys[a];(c.time<e||!i)&&(i=c,n=a)}for(let a=0;a<this.colorKeys.length;a++){let c=this.colorKeys[a];(c.time<e||!r)&&(r=c,s=a)}if(r)if(s+1<this.colorKeys.length){let c=this.colorKeys[s+1],u=H.remap(e,r.time,c.time,0,1);t.r=H.lerp(r.color.r,c.color.r,u),t.g=H.lerp(r.color.g,c.color.g,u),t.b=H.lerp(r.color.b,c.color.b,u)}else t.r=r.color.r,t.g=r.color.g,t.b=r.color.b;if(i)if(n+1<this.alphaKeys.length){let c=this.alphaKeys[n+1],u=H.remap(e,i.time,c.time,0,1);t.alpha=H.lerp(i.alpha,c.alpha,u)}else t.alpha=i.alpha;return t}};v([y()],Ri.prototype,"alphaKeys",2),v([y()],Ri.prototype,"colorKeys",2);var zm=(w=>(w[w.Sphere=0]="Sphere",w[w.SphereShell=1]="SphereShell",w[w.Hemisphere=2]="Hemisphere",w[w.HemisphereShell=3]="HemisphereShell",w[w.Cone=4]="Cone",w[w.Box=5]="Box",w[w.Mesh=6]="Mesh",w[w.ConeShell=7]="ConeShell",w[w.ConeVolume=8]="ConeVolume",w[w.ConeVolumeShell=9]="ConeVolumeShell",w[w.Circle=10]="Circle",w[w.CircleEdge=11]="CircleEdge",w[w.SingleSidedEdge=12]="SingleSidedEdge",w[w.MeshRenderer=13]="MeshRenderer",w[w.SkinnedMeshRenderer=14]="SkinnedMeshRenderer",w[w.BoxShell=15]="BoxShell",w[w.BoxEdge=16]="BoxEdge",w[w.Donut=17]="Donut",w[w.Rectangle=18]="Rectangle",w[w.Sprite=19]="Sprite",w[w.SpriteRenderer=20]="SpriteRenderer",w))(zm||{});var U=class{mode;constant;constantMin;constantMax;curve;curveMin;curveMax;curveMultiplier;evaluate(e,t){let i=t===void 0?Math.random():t;switch(this.mode){case 0:return this.constant;case 1:return e=H.clamp01(e),this.curve.evaluate(e)*this.curveMultiplier;case 2:let n=e*this.curveMin.duration,r=e*this.curveMax.duration;return H.lerp(this.curveMin.evaluate(n),this.curveMax.evaluate(r),i%1)*this.curveMultiplier;case 3:return H.lerp(this.constantMin,this.constantMax,i%1);default:this.curveMax.evaluate(e)*this.curveMultiplier;break}return 0}};v([y()],U.prototype,"mode",2),v([y()],U.prototype,"constant",2),v([y()],U.prototype,"constantMin",2),v([y()],U.prototype,"constantMax",2),v([y(mi)],U.prototype,"curve",2),v([y(mi)],U.prototype,"curveMin",2),v([y(mi)],U.prototype,"curveMax",2),v([y()],U.prototype,"curveMultiplier",2);var Yt=class{mode;color;colorMin;colorMax;gradient;gradientMin;gradientMax;evaluate(e,t){let i=t===void 0?Math.random():t;switch(this.mode){case 0:return this.color;case 1:return this.gradient.evaluate(e,Yt._temp),Yt._temp;case 2:return Yt._temp.lerpColors(this.colorMin,this.colorMax,i);case 3:return this.gradientMin.evaluate(e,Yt._temp),this.gradientMax.evaluate(e,Yt._temp2),Yt._temp.lerp(Yt._temp2,i)}return Yt._temp.set(16711935),Yt._temp.alpha=1,Yt._temp}},Me=Yt;I(Me,"_temp",new Q(0,0,0,1)),I(Me,"_temp2",new Q(0,0,0,1)),v([y(Q)],Me.prototype,"color",2),v([y(Q)],Me.prototype,"colorMin",2),v([y(Q)],Me.prototype,"colorMax",2),v([y(Ri)],Me.prototype,"gradient",2),v([y(Ri)],Me.prototype,"gradientMin",2),v([y(Ri)],Me.prototype,"gradientMax",2);var ye=class{cullingMode;duration;emitterVelocityMode;flipRotation;gravityModifier;gravityModifierMultiplier;loop;maxParticles;playOnAwake;prewarm;ringBufferLoopRange;ringBufferMode;scalingMode;simulationSpace;simulationSpeed;startColor;startDelay;startDelayMultiplier;startLifetime;startLifetimeMultiplier;startRotation;startRotationMultiplier;startRotation3D;startRotationX;startRotationXMultiplier;startRotationY;startRotationYMultiplier;startRotationZ;startRotationZMultiplier;startSize;startSize3D;startSizeMultiplier;startSizeX;startSizeXMultiplier;startSizeY;startSizeYMultiplier;startSizeZ;startSizeZMultiplier;startSpeed;startSpeedMultiplier;stopAction;useUnscaledTime};v([y(U)],ye.prototype,"gravityModifier",2),v([y(Me)],ye.prototype,"startColor",2),v([y(U)],ye.prototype,"startDelay",2),v([y(U)],ye.prototype,"startLifetime",2),v([y(U)],ye.prototype,"startRotation",2),v([y(U)],ye.prototype,"startRotationX",2),v([y(U)],ye.prototype,"startRotationY",2),v([y(U)],ye.prototype,"startRotationZ",2),v([y(U)],ye.prototype,"startSize",2),v([y(U)],ye.prototype,"startSizeX",2),v([y(U)],ye.prototype,"startSizeY",2),v([y(U)],ye.prototype,"startSizeZ",2),v([y(U)],ye.prototype,"startSpeed",2);var Fn=class{cycleCount;maxCount;minCount;probability;repeatInterval;time;count;_performed=0;reset(){this._performed=0}run(e){if(e<=this.time)return this.reset(),0;let t=0;if(this.cycleCount===0||this._performed<this.cycleCount){let i=this.time+this.repeatInterval*this._performed;if(e>=i&&(this._performed+=1,Math.random()<this.probability))switch(this.count.mode){case 0:t=this.count.constant;break;case 3:t=H.lerp(this.count.constantMin,this.count.constantMax,Math.random());break;case 1:t=this.count.curve.evaluate(Math.random());break;case 2:let n=Math.random();t=H.lerp(this.count.curveMin.evaluate(n),this.count.curveMax.evaluate(n),Math.random());break}}return t}},xt=class{enabled;get burstCount(){return this.bursts?.length??0}bursts;rateOverTime;rateOverTimeMultiplier;rateOverDistance;rateOverDistanceMultiplier;system;reset(){this.bursts?.forEach(e=>e.reset())}getBurst(){let e=0;if(this.burstCount>0)for(let t=0;t<this.burstCount;t++){let i=this.bursts[t];i.time>=this.system.time&&i.reset(),e+=Math.round(i.run(this.system.time))}return e}};v([y()],xt.prototype,"enabled",2),v([y()],xt.prototype,"bursts",2),v([y(U)],xt.prototype,"rateOverTime",2),v([y()],xt.prototype,"rateOverTimeMultiplier",2),v([y(U)],xt.prototype,"rateOverDistance",2),v([y()],xt.prototype,"rateOverDistanceMultiplier",2);var Hn=class{enabled;color};v([y(Me)],Hn.prototype,"color",2);var Kt=class{enabled;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_time=0;_temp=new Ze;evaluate(e,t,i){if(t||(t=this._temp),!this.enabled)return t.x=t.y=t.z=1,t;if(this.separateAxes)t.x=this.x.evaluate(e,i)*this.xMultiplier,t.y=this.y.evaluate(e,i)*this.yMultiplier,t.z=this.z.evaluate(e,i)*this.zMultiplier;else{let n=this.size.evaluate(e,i)*this.sizeMultiplier;t.x=n}return t}};v([y(U)],Kt.prototype,"size",2),v([y(U)],Kt.prototype,"x",2),v([y(U)],Kt.prototype,"y",2),v([y(U)],Kt.prototype,"z",2);var us=class{get type(){return zm[this.shapeType]}initialize(e){this.getPosition(),e.position.copy(this._vector)}toJSON(){return this}clone(){return new us}shapeType=5;enabled=!0;alignToDirection=!1;angle=0;arc=360;arcSpread;arcSpeedMultiplier;arcMode;boxThickness;position;rotation;_rotation=new px;scale;radius;radiusThickness;sphericalDirectionAmount;randomDirectionAmount;randomPositionAmount;system;_space;_worldSpaceMatrix=new Gm;_worldSpaceMatrixInverse=new Gm;update(e,t,i,n){this.system=e,this._space=i,i===1&&(this._worldSpaceMatrix.copy(n.matrixWorld),this._worldSpaceMatrix.elements[0]=1,this._worldSpaceMatrix.elements[5]=1,this._worldSpaceMatrix.elements[10]=1,this._worldSpaceMatrixInverse.copy(this._worldSpaceMatrix).invert())}updateRotation(){let e=this.rotation.x!==0||this.rotation.y!==0||this.rotation.z!==0;return e&&(this._rotation.x=H.toRadians(this.rotation.x),this._rotation.y=-H.toRadians(this.rotation.y),this._rotation.z=-H.toRadians(this.rotation.z)),e}_vector=new Ze(0,0,0);_temp=new Ze(0,0,0);get vector(){return this._vector}getPosition(){this._vector.set(0,0,0);let e=this._temp.copy(this.position),t=this._space===1;t&&e.applyQuaternion(this.system.worldQuaternion);let i=this.radius;if(t&&(i*=this.system.worldScale.x),this.enabled){switch(this.shapeType){case 5:this._vector.x=Math.random()*this.scale.x-this.scale.x/2,this._vector.y=Math.random()*this.scale.y-this.scale.y/2,this._vector.z=Math.random()*this.scale.z-this.scale.z/2,this._vector.add(e);break;case 4:this.randomConePoint(this.position,this.angle,i,this.radiusThickness,this.arc,this.arcMode,this._vector);break;case 0:this.randomSpherePoint(this.position,i,this.radiusThickness,this.arc,this._vector,this.scale);break;case 10:this._temp.copy(this.scale),this._temp.z=0,this.randomSpherePoint(this.position,i,this.radiusThickness,this.arc,this._vector,this._temp);break;default:this._vector.set(0,0,0);break}this.randomizePosition(this._vector,this.randomPositionAmount)}this.updateRotation()&&this._vector.applyEuler(this._rotation),t&&(this._vector.applyQuaternion(this.system.worldQuaternion),this._vector.add(this.system.worldPos))}_dir=new Ze;getDirection(e){if(!this.enabled)return this._dir.set(0,0,1),this._dir;switch(this.shapeType){case 5:this._dir.set(0,0,1);break;case 4:this._dir.set(0,0,1);break;case 10:case 0:let t=e.x,i=e.y,n=e.z;this._dir.set(t,i,n),this._dir.sub(this.position);break;default:this._dir.set(0,0,1);break}return this._space===1&&this._dir.applyMatrix4(this._worldSpaceMatrixInverse),this.updateRotation()&&this._dir.applyEuler(this._rotation),this._dir.normalize(),this.spherizeDirection(this._dir,this.sphericalDirectionAmount),this.randomizeDirection(this._dir,this.randomDirectionAmount),mx&&(Et.DrawSphere(e,.01,8925952,.5,!0),Et.DrawDirection(e,this._dir,8925952,.5,!0)),this._dir}randomizePosition(e,t){if(t<=0)return;let i=us._tempVec;i.set(Math.random()*2-1,Math.random()*2-1,Math.random()*2-1),i.x*=t*this.scale.x,i.y*=t*this.scale.y,i.z*=t*this.scale.z,e.add(i)}randomizeDirection(e,t){if(t===0)return;let i=us._randomQuat,n=us._tempVec;n.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),i.setFromAxisAngle(n,t*Math.random()*Math.PI),e.applyQuaternion(i)}spherizeDirection(e,t){if(t===0)return;let i=Math.random()*Math.PI*2,n=Math.acos(1-Math.random()*2),r=Math.sin(n)*Math.cos(i),s=Math.sin(n)*Math.sin(i),a=Math.cos(n),c=new Ze(r,s,a);e.lerp(c,t)}randomSpherePoint(e,t,i,n,r,s){let a=Math.random(),c=Math.random(),u=2*Math.PI*a*(n/360),l=Math.acos(2*c-1),d=H.lerp(1,1-Math.pow(1-Math.random(),Math.PI),i)*t,h=e.x+s.x*(-d*Math.sin(l)*Math.cos(u)),g=e.y+s.y*(d*Math.sin(l)*Math.sin(u)),E=e.z+s.z*(d*Math.cos(l));r.x=h,r.y=g,r.z=E}_loopTime=0;_loopDirection=1;randomConePoint(e,t,i,n,r,s,a){let c=0,u=0;switch(s){case 0:c=Math.random(),u=Math.random();break;case 2:this._loopTime>1&&(this._loopDirection=-1),this._loopTime<0&&(this._loopDirection=1);case 1:c=.5,u=Math.random(),this._loopTime+=this.system.deltaTime*this._loopDirection;break}let l=2*Math.PI*c*(r/360);switch(s){case 2:case 1:l+=Math.PI+.5,l+=this._loopTime*Math.PI*2,l%=H.toRadians(r);break}let d=Math.acos(2*u-1),h=H.lerp(1,1-Math.pow(1-Math.random(),Math.PI),n)*i,g=e.x+-h*Math.sin(d)*Math.cos(l),E=e.y+h*Math.sin(d)*Math.sin(l),_=e.z;a.x=g*this.scale.x,a.y=E*this.scale.y,a.z=_*this.scale.z}},ie=us;I(ie,"_randomQuat",new hx),I(ie,"_tempVec",new Ze),v([y()],ie.prototype,"shapeType",2),v([y()],ie.prototype,"enabled",2),v([y()],ie.prototype,"alignToDirection",2),v([y()],ie.prototype,"angle",2),v([y()],ie.prototype,"arc",2),v([y()],ie.prototype,"arcSpread",2),v([y()],ie.prototype,"arcSpeedMultiplier",2),v([y()],ie.prototype,"arcMode",2),v([y(Ze)],ie.prototype,"boxThickness",2),v([y(Ze)],ie.prototype,"position",2),v([y(Ze)],ie.prototype,"rotation",2),v([y(Ze)],ie.prototype,"scale",2),v([y()],ie.prototype,"radius",2),v([y()],ie.prototype,"radiusThickness",2),v([y()],ie.prototype,"sphericalDirectionAmount",2),v([y()],ie.prototype,"randomDirectionAmount",2),v([y()],ie.prototype,"randomPositionAmount",2);var K=class{damping;enabled;frequency;octaveCount;octaveMultiplier;octaveScale;positionAmount;quality;remap;remapEnabled;remapMultiplier;remapX;remapXMultiplier;remapY;remapYMultiplier;remapZ;remapZMultiplier;scrollSpeedMultiplier;separateAxes;strengthMultiplier;strengthX;strengthXMultiplier;strengthY;strengthYMultiplier;strengthZ;strengthZMultiplier;_noise;_time=0;update(e){this._time+=e.time.deltaTime*this.scrollSpeedMultiplier}_temp=new Ze;apply(e,t,i,n,r,s){if(!this.enabled)return;this._noise||(this._noise=fx(()=>0));let a=this._temp.set(t.x,t.y,t.z).multiplyScalar(this.frequency),c=this._noise(a.x,a.y,a.z,this._time),u=this._noise(a.x,a.y,a.z,this._time+1e3*this.frequency),l=this._noise(a.x,a.y,a.z,this._time+2e3*this.frequency);this._temp.set(c,u,l).normalize();let d=r/s,h=this.positionAmount.evaluate(d);this.separateAxes?(this._temp.x*=h*this.strengthXMultiplier,this._temp.y*=h*this.strengthYMultiplier,this._temp.z*=h*this.strengthZMultiplier):(this.strengthX&&(h*=this.strengthX.evaluate(d)*1.5),this._temp.multiplyScalar(h)),i.x+=this._temp.x,i.y+=this._temp.y,i.z+=this._temp.z}};v([y()],K.prototype,"damping",2),v([y()],K.prototype,"enabled",2),v([y()],K.prototype,"frequency",2),v([y()],K.prototype,"octaveCount",2),v([y()],K.prototype,"octaveMultiplier",2),v([y()],K.prototype,"octaveScale",2),v([y(U)],K.prototype,"positionAmount",2),v([y()],K.prototype,"quality",2),v([y(U)],K.prototype,"remap",2),v([y()],K.prototype,"remapEnabled",2),v([y()],K.prototype,"remapMultiplier",2),v([y(U)],K.prototype,"remapX",2),v([y()],K.prototype,"remapXMultiplier",2),v([y(U)],K.prototype,"remapY",2),v([y()],K.prototype,"remapYMultiplier",2),v([y(U)],K.prototype,"remapZ",2),v([y()],K.prototype,"remapZMultiplier",2),v([y()],K.prototype,"scrollSpeedMultiplier",2),v([y()],K.prototype,"separateAxes",2),v([y()],K.prototype,"strengthMultiplier",2),v([y(U)],K.prototype,"strengthX",2),v([y()],K.prototype,"strengthXMultiplier",2),v([y(U)],K.prototype,"strengthY",2),v([y()],K.prototype,"strengthYMultiplier",2),v([y(U)],K.prototype,"strengthZ",2),v([y()],K.prototype,"strengthZMultiplier",2);var ee=class{enabled;attachRibbonToTransform=!1;colorOverLifetime;colorOverTrail;dieWithParticles=!0;inheritParticleColor=!0;lifetime;lifetimeMultiplier;minVertexDistance=.2;mode=0;ratio=1;ribbonCount=1;shadowBias=0;sizeAffectsLifetime=!1;sizeAffectsWidth=!1;splitSubEmitterRibbons=!1;textureMode=0;widthOverTrail;widthOverTrailMultiplier;worldSpace=!1;getWidth(e,t,i){let n=this.widthOverTrail.evaluate(i);return i===0&&(n=e),e*=n,e}getColor(e,t,i){let n=this.colorOverTrail.evaluate(i),r=this.colorOverLifetime.evaluate(t);e.x*=n.r*r.r,e.y*=n.g*r.g,e.z*=n.b*r.b,e.w*=n.alpha*r.alpha}};v([y()],ee.prototype,"enabled",2),v([y()],ee.prototype,"attachRibbonToTransform",2),v([y(Me)],ee.prototype,"colorOverLifetime",2),v([y(Me)],ee.prototype,"colorOverTrail",2),v([y()],ee.prototype,"dieWithParticles",2),v([y()],ee.prototype,"inheritParticleColor",2),v([y(U)],ee.prototype,"lifetime",2),v([y()],ee.prototype,"lifetimeMultiplier",2),v([y()],ee.prototype,"minVertexDistance",2),v([y()],ee.prototype,"mode",2),v([y()],ee.prototype,"ratio",2),v([y()],ee.prototype,"ribbonCount",2),v([y()],ee.prototype,"shadowBias",2),v([y()],ee.prototype,"sizeAffectsLifetime",2),v([y()],ee.prototype,"sizeAffectsWidth",2),v([y()],ee.prototype,"splitSubEmitterRibbons",2),v([y()],ee.prototype,"textureMode",2),v([y(U)],ee.prototype,"widthOverTrail",2),v([y()],ee.prototype,"widthOverTrailMultiplier",2),v([y()],ee.prototype,"worldSpace",2);var He=class{enabled;space=0;speedModifier;speedModifierMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_system;update(e){this._system=e}_temp=new Ze;apply(e,t,i,n,r,s){if(!this.enabled)return;let a=r/s,c=this.speedModifier.evaluate(a)*this.speedModifierMultiplier,u=this.x.evaluate(a),l=this.y.evaluate(a),d=this.z.evaluate(a);this._temp.set(-u,l,d),this._system&&(this.space===1&&this._temp.applyQuaternion(this._system.worldQuaternionInverted),this._system.main.simulationSpace===1&&this._temp.applyQuaternion(this._system.worldQuaternion)),i.x+=this._temp.x,i.y+=this._temp.y,i.z+=this._temp.z,i.x*=c,i.y*=c,i.z*=c}};v([y()],He.prototype,"enabled",2),v([y()],He.prototype,"space",2),v([y(U)],He.prototype,"speedModifier",2),v([y()],He.prototype,"speedModifierMultiplier",2),v([y(U)],He.prototype,"x",2),v([y()],He.prototype,"xMultiplier",2),v([y(U)],He.prototype,"y",2),v([y()],He.prototype,"yMultiplier",2),v([y(U)],He.prototype,"z",2),v([y()],He.prototype,"zMultiplier",2);var _e=class{animation;enabled;cycleCount;frameOverTime;frameOverTimeMultiplier;numTilesX;numTilesY;startFrame;startFrameMultiplier;rowMode;rowIndex;spriteCount;timeMode;sampleOnceAtStart(){if(this.timeMode===0)switch(this.frameOverTime.mode){case 0:case 3:return!0}return!1}getStartIndex(){return this.sampleOnceAtStart()?this.frameOverTime.evaluate(Math.random()):0}evaluate(e){if(!this.sampleOnceAtStart())return this.getIndex(e)}getIndex(e){let t=this.numTilesX*this.numTilesY,i=this.frameOverTime.evaluate(e%1);return i*=this.frameOverTimeMultiplier,i*=t,i=i%t,i=Math.floor(i),i}};v([y()],_e.prototype,"animation",2),v([y()],_e.prototype,"enabled",2),v([y()],_e.prototype,"cycleCount",2),v([y(U)],_e.prototype,"frameOverTime",2),v([y()],_e.prototype,"frameOverTimeMultiplier",2),v([y()],_e.prototype,"numTilesX",2),v([y()],_e.prototype,"numTilesY",2),v([y(U)],_e.prototype,"startFrame",2),v([y()],_e.prototype,"startFrameMultiplier",2),v([y()],_e.prototype,"rowMode",2),v([y()],_e.prototype,"rowIndex",2),v([y()],_e.prototype,"spriteCount",2),v([y()],_e.prototype,"timeMode",2);var Je=class{enabled;separateAxes;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t){return this.enabled?this.separateAxes?0:this.z.evaluate(e,t)*-1:0}};v([y()],Je.prototype,"enabled",2),v([y()],Je.prototype,"separateAxes",2),v([y(U)],Je.prototype,"x",2),v([y()],Je.prototype,"xMultiplier",2),v([y(U)],Je.prototype,"y",2),v([y()],Je.prototype,"yMultiplier",2),v([y(U)],Je.prototype,"z",2),v([y()],Je.prototype,"zMultiplier",2);var Xe=class{enabled;range;separateAxes;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t){if(!this.enabled)return 0;if(!this.separateAxes){let i=H.lerp(this.range.x,this.range.y,t);return this.z.evaluate(i)*-1}return 0}};v([y()],Xe.prototype,"enabled",2),v([y()],Xe.prototype,"range",2),v([y()],Xe.prototype,"separateAxes",2),v([y(U)],Xe.prototype,"x",2),v([y()],Xe.prototype,"xMultiplier",2),v([y(U)],Xe.prototype,"y",2),v([y()],Xe.prototype,"yMultiplier",2),v([y(U)],Xe.prototype,"z",2),v([y()],Xe.prototype,"zMultiplier",2);var ue=class{enabled;dampen;drag;dragMultiplier;limit;limitMultiplier;separateAxes;limitX;limitXMultiplier;limitY;limitYMultiplier;limitZ;limitZMultiplier;multiplyDragByParticleSize=!1;multiplyDragByParticleVelocity=!1;space;_temp=new Ze;_temp2=new Ze;apply(e,t,i,n,r,s,a){if(!!this.enabled){let c=this.limit.evaluate(r)*this.limitMultiplier;if(t.length()>c){this._temp.copy(t).normalize().multiplyScalar(c);let l=this.dampen*.5;t.x=H.lerp(t.x,this._temp.x,l),t.y=H.lerp(t.y,this._temp.y,l),t.z=H.lerp(t.z,this._temp.z,l),i.x=H.lerp(i.x,this._temp.x,l),i.y=H.lerp(i.y,this._temp.y,l),i.z=H.lerp(i.z,this._temp.z,l)}}}};v([y()],ue.prototype,"enabled",2),v([y()],ue.prototype,"dampen",2),v([y(U)],ue.prototype,"drag",2),v([y()],ue.prototype,"dragMultiplier",2),v([y(U)],ue.prototype,"limit",2),v([y()],ue.prototype,"limitMultiplier",2),v([y()],ue.prototype,"separateAxes",2),v([y(U)],ue.prototype,"limitX",2),v([y()],ue.prototype,"limitXMultiplier",2),v([y(U)],ue.prototype,"limitY",2),v([y()],ue.prototype,"limitYMultiplier",2),v([y(U)],ue.prototype,"limitZ",2),v([y()],ue.prototype,"limitZMultiplier",2),v([y()],ue.prototype,"multiplyDragByParticleSize",2),v([y()],ue.prototype,"multiplyDragByParticleVelocity",2),v([y()],ue.prototype,"space",2);var Jt=class{enabled;curve;curveMultiplier;mode;system;_lastWorldPosition;_velocity=new Ze;_temp=new Ze;update(e){!this.enabled||this.system.worldspace!==!1&&(this._lastWorldPosition?(this._velocity.copy(this.system.worldPos).sub(this._lastWorldPosition).multiplyScalar(1/this.system.deltaTime),this._lastWorldPosition.copy(this.system.worldPos)):(this._velocity.set(0,0,0),this._lastWorldPosition=this.system.worldPos.clone()))}applyInitial(e){if(!!this.enabled&&this.system.worldspace!==!1&&this.mode===0){let t=this.curve.evaluate(Math.random(),Math.random());this._temp.copy(this._velocity).multiplyScalar(t),e.add(this._temp)}}applyCurrent(e,t,i){if(!!this.enabled&&this.system.worldspace!==!1&&this.mode===1){let n=this.curve.evaluate(t,i);this._temp.copy(this._velocity).multiplyScalar(n),e.add(this._temp)}}};v([y()],Jt.prototype,"enabled",2),v([y(U)],Jt.prototype,"curve",2),v([y()],Jt.prototype,"curveMultiplier",2),v([y()],Jt.prototype,"mode",2);var ke=class{enabled;range;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;evaluate(e,t,i,n){let r=e.length(),s=H.remap(r,this.range.x,this.range.y,0,1),a=this.size.evaluate(s,i);return n*a}};v([y()],ke.prototype,"enabled",2),v([y(Vm)],ke.prototype,"range",2),v([y()],ke.prototype,"separateAxes",2),v([y(U)],ke.prototype,"size",2),v([y()],ke.prototype,"sizeMultiplier",2),v([y(U)],ke.prototype,"x",2),v([y()],ke.prototype,"xMultiplier",2),v([y(U)],ke.prototype,"y",2),v([y()],ke.prototype,"yMultiplier",2),v([y(U)],ke.prototype,"z",2),v([y()],ke.prototype,"zMultiplier",2);var Ti=class{enabled;range;color;evaluate(e,t,i){let n=e.length(),r=H.remap(n,this.range.x,this.range.y,0,1),s=this.color.evaluate(r,t);i.x*=s.r,i.y*=s.g,i.z*=s.b,i.w*=s.alpha}};v([y()],Ti.prototype,"enabled",2),v([y(Vm)],Ti.prototype,"range",2),v([y(Me)],Ti.prototype,"color",2);var so=class extends We{},ds=class extends M{deleteBoxes=[];awake(){this.deleteBoxes=R.findObjectsOfType(so,this.context)}update(){for(let e of this.deleteBoxes){let t=this.gameObject;e.isInBox(t)===!0&&(R.getComponentInParent(this.gameObject,zt)||Po(this.gameObject,this.context.connection))}}};var ao=class extends M{visibleOn;onEnable(){this.apply()}apply(){this.test()||R.setActive(this.gameObject,!1)}test(){return this.visibleOn<0?!0:gx()?(this.visibleOn&2)!==0:(this.visibleOn&1)!==0}};v([y()],ao.prototype,"visibleOn",2);var dc;function gx(){if(dc===!0||dc===!1)return dc;let o=!1;return function(e){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(o=!0)}(navigator.userAgent||navigator.vendor||window.opera),dc=o,o}import*as Y from"three";var Yd=!1;var Bn=class extends Vt{static get HasAnySelected(){return this._active>0}transformSelf=!0;orbit=null;selectStartEventListener=[];selectEndEventListener=[];constructor(){super(),this.selectStartEventListener=[],this.selectEndEventListener=[],this._dragDelta=new Y.Vector2}addDragEventListener(e,t){switch(e){case"selectstart":this.selectStartEventListener.push(t);break;case"selectend":this.selectEndEventListener.push(t);break}}_dragHelper=null;start(){this.orbit=R.findObjectOfType(nt,this.context)}_draggingRigidbodies=[];allowEdit(e=null){return this.context.connection.allowEditing}onPointerEnter(e){if(!this.allowEdit(this.gameObject)||V.IsInWebXR)return;let t=R.getComponentInParent(e.object,Bn);!t||t!==this||(Bn.lastHovered=e.object,this.context.domElement.style.cursor="pointer")}onPointerExit(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||Bn.lastHovered===e.object&&(this.context.domElement.style.cursor="auto")}_waitingForDragStart=null;onPointerDown(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||(Bn._active+=1,this._dragDelta.set(0,0),this._didDrag=!1,this._waitingForDragStart=e,e.StopPropagation(),this.orbit&&(this.orbit.enabled=!1))}onPointerUp(e){this._waitingForDragStart=null,this.allowEdit(this.gameObject)&&(Bn._active>0&&(Bn._active-=1),!V.IsInWebXR&&(this.onDragEnd(e),e.StopPropagation(),this.orbit&&(this.orbit.enabled=!0)))}update(){if(!V.IsInWebXR){if(this._waitingForDragStart){if(!this._didDrag){let t=this.context.input.getPointerPositionDelta(0);if(t&&this._dragDelta.add(t),this._dragDelta.length()>2)this._didDrag=!0;else return}let e=this._waitingForDragStart;this._waitingForDragStart=null,this.onDragStart(e)}this._dragHelper&&this._dragHelper.hasSelected&&this.onUpdateDrag(),this._isDragging&&this._dragHelper?.hasSelected===!1&&this.onDragEnd(null)}}_isDragging=!1;_marker=null;_dragDelta;_didDrag=!1;onDragStart(e){if(!this._dragHelper)if(this.context.mainCamera)this._dragHelper=new hc(this.context.mainCamera);else return;if(!e||!e.object)return;let t=R.getComponentInParent(e.object,Bn);if(!t||t!==this)return;let i=e.object;this.transformSelf&&(i=this.gameObject);let n={selected:i,attached:i};for(let c of this.selectStartEventListener)c(this,n);if(!n.attached)return;n.attached,i=n.attached,this._isDragging=!0,this._dragHelper.setSelected(i,this.context),this.orbit&&(this.orbit.enabled=!1);let r=R.getComponentInChildren(i,Pt);Yd&&console.log("DRAG START",r,i),r&&(r.fastMode=!0,r?.requestOwnership()),this._marker=R.addNewComponent(i,zt),this._draggingRigidbodies.length=0;let s=R.getComponentsInChildren(i,J);s&&this._draggingRigidbodies.push(...s);let a=qc();R.invokeOnChildren(this._dragHelper.selected,a("onDragStart"))}onUpdateDrag(){if(!!this._dragHelper){this._dragHelper.onUpdate(this.context);for(let e of this._draggingRigidbodies)e.wakeUp(),e.resetVelocities()}}onDragEnd(e){if(!this||!this._isDragging||(this._isDragging=!1,!this._dragHelper))return;for(let n of this._draggingRigidbodies)n.setVelocity(n.smoothedVelocity);this._draggingRigidbodies.length=0;let t=this._dragHelper.selected;if(Yd&&console.log("DRAG END",t,t?.visible),this._dragHelper.setSelected(null,this.context),this.orbit&&(this.orbit.enabled=!0),e?.object){let n=R.getComponentInChildren(e.object,Pt);n&&(n.fastMode=!1),this._marker&&this._marker.destroy()}for(let n of this.selectEndEventListener)n(this);let i=qc();R.invokeOnChildren(t,i("onDragEnd"))}},Ji=Bn;I(Ji,"_active",0),I(Ji,"lastHovered");var Kd=class{get hasSelected(){return this._selected!==null&&this._selected!==void 0}get selected(){return this._selected}_selected=null;_context=null;_camera;_cameraPlane=new Y.Plane;_hasGroundPlane=!1;_groundPlane=new Y.Plane;_groundOffset=new Y.Vector3;_groundOffsetFactor=0;_groundDistance=0;_groundPlanePoint=new Y.Vector3;_raycaster=new Y.Raycaster;_cameraPlaneOffset=new Y.Vector3;_intersection=new Y.Vector3;_worldPosition=new Y.Vector3;_inverseMatrix=new Y.Matrix4;_rbs=[];_groundLine;_groundMarker;constructor(e){this._camera=e;let t=new Y.Line(Kd.geometry),i=t.material;i.color=new Y.Color(.4,.4,.4),t.layers.set(2),t.name="line",t.scale.y=1,this._groundLine=t;let n=new Y.SphereGeometry(.5,22,22),r=new Y.MeshBasicMaterial({color:i.color}),s=new Y.Mesh(n,r);s.visible=!1,s.layers.set(2),this._groundMarker=s}setSelected(e,t){if(this._selected&&t)for(let i of this._rbs)i.wakeUp(),i.setVelocity(0,0,0);if(this._selected&&ve.Remove(t,this._selected),this._selected=e,this._context=t,this._rbs.length=0,e?(t.scene.add(this._groundLine),t.scene.add(this._groundMarker)):(this._groundLine.removeFromParent(),this._groundMarker.removeFromParent()),this._selected){if(!t){console.error("DragHelper: no context");return}ve.Add(t,this._selected,null),this._groundOffsetFactor=0,this._hasGroundPlane=!0,this._groundOffset.set(0,0,0),this._requireUpdateGroundPlane=!0,this.onUpdateScreenSpacePlane()}}_groundOffsetVector=new Y.Vector3(0,1,0);_requireUpdateGroundPlane=!0;_didDragOnGroundPlaneLastFrame=!1;onUpdate(e){if(!this._context)return;let t=" ",i="d",n="s",r=this._context?.input.isKeyPressed(t)||this._context?.input.isKeyPressed(i),s=this._context.input.getTouchesPressedCount()>=2||r;if(s){let c=this._context.input.getPointerPositionDelta(0);c&&(this._groundOffsetVector.set(0,1,0),this._selected?.rotateOnWorldAxis(this._groundOffsetVector,c.x*this._context.time.deltaTime))}let a=this._context.input.getPointerPositionRC(0);if(!!a&&(this._raycaster.setFromCamera(a,this._camera),this._selected)){Yd&&console.log("UPDATE DRAG",this._selected),this._groundOffsetVector.set(0,1,0);let c=B(this._camera).clone().sub(B(this._selected)).normalize(),u=Math.abs(c.dot(this._groundOffsetVector)),l=this._context?.input.isKeyPressed(t)||this._context?.input.isKeyPressed(i),d=!s&&u>.2&&!l&&this._context.input.getPointerPressedCount()<=1,h=this._didDragOnGroundPlaneLastFrame!==d;if(this._didDragOnGroundPlaneLastFrame=d,this._hasGroundPlane||(this._requireUpdateGroundPlane=!0),(this._requireUpdateGroundPlane||!d||h)&&this.onUpdateGroundPlane(),this._requireUpdateGroundPlane=!1,this._hasGroundPlane)if(this._raycaster.ray.intersectPlane(this._groundPlane,this._intersection)){let g=this._intersection.y;if(this._groundPlanePoint.copy(this._intersection).sub(this._groundOffset),this._groundPlanePoint.y=g,d){this._groundOffsetVector.set(0,1,0);let E=this._intersection.sub(this._groundOffset).add(this._groundOffsetVector.multiplyScalar(this._groundOffsetFactor));this.onUpdateWorldPosition(E,this._groundPlanePoint,!1),this.onDidUpdate();return}}else this._groundPlanePoint.set(0,99999,0);h&&this.onUpdateScreenSpacePlane(),this._requireUpdateGroundPlane=!0,this._raycaster.ray.intersectPlane(this._cameraPlane,this._intersection)&&(this.onUpdateWorldPosition(this._intersection.sub(this._cameraPlaneOffset),this._groundPlanePoint,!0),this.onDidUpdate())}}onUpdateWorldPosition(e,t,i){if(!!this._selected){if(i){let n=B(this._selected);n.y=e.y,e=n}if(te(this._selected,e),te(this._groundLine,e),this._hasGroundPlane?this._groundLine.scale.y=this._groundDistance:this._groundLine.scale.y=1e3,this._groundMarker.visible=t!==null,t){let n=B(this._camera).distanceTo(t)*.01;this._groundMarker.scale.set(n,n,n),te(this._groundMarker,t)}}}onUpdateScreenSpacePlane(){if(!this._selected||!this._context)return;let e=this._context.input.getPointerPositionRC(0);!e||(this._raycaster.setFromCamera(e,this._camera),this._cameraPlane.setFromNormalAndCoplanarPoint(this._camera.getWorldDirection(this._cameraPlane.normal),this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)),this._raycaster.ray.intersectPlane(this._cameraPlane,this._intersection)&&this._selected.parent&&(this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert(),this._cameraPlaneOffset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld))))}onUpdateGroundPlane(){if(!this._selected||!this._context)return;let e=B(this._selected),t=new Y.Ray(new Y.Vector3(0,.1,0).add(e),new Y.Vector3(0,-1,0)),i=new xe;i.ignore=[this._selected];let n=this._context.physics.raycastFromRay(t,i);for(let r=0;r<n.length;r++){let s=n[r];if(!s.face||this.contains(this._selected,s.object))continue;let a=new Y.Vector3(0,1,0);this._groundPlane.setFromNormalAndCoplanarPoint(a,s.point);break}this._hasGroundPlane=!0,this._groundPlane.setFromNormalAndCoplanarPoint(t.direction.multiplyScalar(-1),t.origin),this._raycaster.ray.intersectPlane(this._groundPlane,this._intersection),this._groundDistance=this._intersection.distanceTo(e),this._groundOffset.copy(this._intersection).sub(e)}onDidUpdate(){re.markDirty(this._selected);for(let e of this._rbs)e.wakeUp(),e.resetForcesAndTorques(),e.setAngularVelocity(0,0,0)}contains(e,t){if(e===t)return!0;if(e.children){for(let i of e.children)if(this.contains(i,t))return!0}return!1}},hc=Kd;I(hc,"geometry",new Y.BufferGeometry().setFromPoints([new Y.Vector3(0,0,0),new Y.Vector3(0,-1,0)]));var Si=class extends M{url=null;urlParameterName=null;localhost=null;awake(){this.context.connection.registerProvider(this)}getWebsocketUrl(){let e=this.url?Si.GetUrl(this.url,this.localhost):null;if(this.urlParameterName){let r=P(this.urlParameterName);r&&typeof r=="string"&&(e=r)}if(!e)return null;let i=new RegExp("(((https?)|(?<socket_prefix>wss?))://)?(www.)?(?<url>.+)","gm").exec(e);return i?.groups?i?.groups.socket_prefix?e:"wss://"+i?.groups.url:null}static GetUrl(e,t){let i=e,n=Si.IsLocalNetwork()&&t;return n&&(i=t),e?.startsWith("/")&&(i=(n?i:window.location.origin)+e),i}static IsLocalNetwork(e=window.location.hostname){return ut(e)}};var yr=class extends M{filesBackendUrl;localhost;_dragOver;_drop;onEnable(){this.filesBackendUrl=this.filesBackendUrl?Si.GetUrl(this.filesBackendUrl,this.localhost):void 0,this._dragOver=this.onDrag.bind(this),this._drop=this.onDrop.bind(this),this.context.domElement.addEventListener("dragover",this._dragOver),this.context.domElement.addEventListener("drop",this._drop)}onDisable(){this.context.domElement.removeEventListener("dragover",this._dragOver),this.context.domElement.removeEventListener("drop",this._drop)}onDrag(e){e.preventDefault()}async addFiles(e){for(let t of e){if(!t)continue;console.log("Register file "+t.name+" to",this.filesBackendUrl,t);let i=await Fu(t,this.context,this.filesBackendUrl);this.dispatchEvent(new CustomEvent("file-dropped",{detail:t})),i&&this.addObject(void 0,i)}}async onDrop(e){if(console.log(e),!e.dataTransfer)return;e.preventDefault();let t=e.dataTransfer.items;if(!!t)for(let i in t){let n=t[i];if(n.kind==="file"){let r=n.getAsFile();if(!r)continue;console.log("Register file "+r.name+" to",this.filesBackendUrl,r);let s=await Fu(r,this.context,this.filesBackendUrl);this.dispatchEvent(new CustomEvent("file-dropped",{detail:r})),s&&this.addObject(e,s)}else n.kind==="string"&&n.type=="text/plain"&&n.getAsString(async r=>{console.log("dropped url",r);try{let s=new URL(r);if(!s)return;let a=await Df(s,this.context);a&&this.addObject(e,a)}catch{console.log("dropped string is not a valid URL!",r)}})}}async addObject(e,t){console.log("Dropped",t);let i=t.scene;if(e!==void 0){let n=new xe;n.setMask(16777215),n.screenPointFromOffset(e.offsetX,e.offsetY);let r=this.context.physics.raycast(n);if(r&&r.length>0)for(let s of r){i.position.copy(s.point);break}}this.gameObject.add(i),this.dispatchEvent(new CustomEvent("object-added",{detail:t}))}};v([y()],yr.prototype,"filesBackendUrl",2),v([y()],yr.prototype,"localhost",2);import{Vector3 as bx,Quaternion as vx,Object3D as Wm}from"three";var Zi=class extends Vt{parent=null;object=null;limitCount=10;limitInterval=60;_currentCount=0;_startPosition=null;_startQuaternion=null;awake(){if(this.object){if(this.object===this.gameObject){console.error("Can not duplicate self");return}this.object.visible=!1,this._startPosition=this.object.position?.clone()??new bx(0,0,0),this._startQuaternion=this.object.quaternion?.clone()??new vx(0,0,0,1)}let e=R.getComponentInParent(this.gameObject,Ji);e?e.addDragEventListener("selectstart",(t,i)=>{if(this._currentCount>=this.limitCount){i.attached=null;return}let n=this.handleDuplication(i.selected);n&&(console.assert(n!==i.selected,"Duplicated object is original"),i.attached=n)}):console.warn("Could no find drag controls in parent",this.name),se.addEventListener("select-start",(t,i)=>{if(this._currentCount>=this.limitCount){i.grab=null;return}let n=this.handleDuplication(i.selected);n&&(i.grab=n)}),this.cloneLimitIntervalFn()}cloneLimitIntervalFn(){this.destroyed||(this._currentCount>0&&(this._currentCount-=1),setTimeout(()=>{this.cloneLimitIntervalFn()},this.limitInterval/this.limitCount*1e3))}handleDuplication(e){if(this._currentCount>=this.limitCount||!this.object)return null;if(e===this.gameObject||this.handleMultiObject(e)){if(this.object===this.gameObject)return null;this.object.visible=!0,this._startPosition&&this.object.position.copy(this._startPosition),this._startQuaternion&&this.object.quaternion.copy(this._startQuaternion);let t=new Ue;this.parent||(this.parent=this.gameObject.parent),this.parent&&(t.parent=this.parent.guid??this.parent.userData?.guid,t.keepWorldPosition=!0),t.position=this.worldPosition,t.rotation=this.worldQuaternion,t.context=this.context,this._currentCount+=1;let i=R.instantiateSynced(this.object,t);return console.assert(i!==this.object,"Duplicated object is original"),this.object.visible=!1,this._startPosition&&this.object.position.clone().copy(this._startPosition),this._startQuaternion&&this.object.quaternion.clone().copy(this._startQuaternion),i}return null}handleMultiObject(e){return this.gameObject.type==="Group"||this.gameObject.type==="Object3D"?this.isInChildren(this.gameObject,e):!1}isInChildren(e,t){if(!e)return!1;if(e===t)return!0;if(e.children){for(let i of e.children)if(this.isInChildren(i,t))return!0}return!1}};v([y(Wm)],Zi.prototype,"parent",2),v([y(Wm)],Zi.prototype,"object",2),v([y()],Zi.prototype,"limitCount",2),v([y()],Zi.prototype,"limitInterval",2);var ma=class{eventID;callback};v([y()],ma.prototype,"eventID",2),v([y(de)],ma.prototype,"callback",2);var lo=class extends M{triggers;invoke(e){if(!!this.triggers)for(let t of this.triggers)t.eventID===e&&t.callback.invoke()}onPointerClick(e){this.invoke(4)}onPointerEnter(e){this.invoke(0)}onPointerExit(e){this.invoke(1)}onPointerDown(e){this.invoke(2)}onPointerUp(e){this.invoke(3)}};v([y(ma)],lo.prototype,"triggers",2);import*as en from"three";import*as ga from"three";var Un=class{get lightmap(){return this.lightmapTexture}set lightmap(e){e!==this.lightmapTexture&&(this.lightmapTexture=e,this.setupLightmap())}lightmapIndex=-1;lightmapScaleOffset=new ga.Vector4(1,1,0,0);context;gameObject;lightmapTexture=null;lightmapScaleOffsetUniform={value:new ga.Vector4(1,1,0,0)};lightmapUniform={value:null};beforeRenderCallback;constructor(e,t){this.gameObject=e,this.context=t}init(e,t,i,n=!1){if(console.assert(this.gameObject!==void 0&&this.gameObject!==null,"Missing gameobject",this),this.lightmapIndex=e,this.lightmapIndex<0)return;this.lightmapScaleOffset=t,this.lightmapTexture=i,n&&this.setLightmapDebugMaterial(),this.setupLightmap()}bindOnBeforeRender(){this.beforeRenderCallback=this.onBeforeRenderThreeComplete.bind(this),this.context.addBeforeRenderListener(this.gameObject,this.beforeRenderCallback)}onBeforeRenderThreeComplete(e,t,i,n,r,s){this.onBeforeRenderThree(r)}setupLightmap(){if(this.gameObject.type==="Object3D")return;if(this.gameObject.type==="Group"){console.warn("Lightmap on multimaterial object is not supported yet... please ask kindly for implementation.");return}console.assert(this.gameObject.type==="Mesh","Lightmap only works on meshes",this);let e=this.gameObject;e.geometry.getAttribute("uv2")||e.geometry.setAttribute("uv2",e.geometry.getAttribute("uv"));let t=this.gameObject.material.clone();if(this.gameObject.material=t,this.gameObject.material.onBeforeCompile=(i,n)=>{i.uniforms.lightmap=this.lightmapUniform,i.uniforms.lightmapScaleOffset=this.lightmapScaleOffsetUniform},this.lightmapIndex>=0){let i=this.lightmapTexture,n=this.gameObject.material;n&&i&&(n.uniforms||(n.uniforms={}),n.lightMap=i,n.uniforms.lightmap={value:i})}}onBeforeRenderThree(e){let t=e.uniforms;t&&t.lightmap&&(this.lightmapScaleOffsetUniform.value=this.lightmapScaleOffset,this.lightmapUniform.value=this.lightmapTexture,t.lightmap=this.lightmapUniform,t.lightmapScaleOffset=this.lightmapScaleOffsetUniform)}setLightmapDebugMaterial(){this.gameObject.material=new ga.ShaderMaterial({vertexShader:`
216
216
  attribute vec2 uv2;
217
217
  varying vec2 vUv2;
218
218
  void main()
@@ -244,8 +244,8 @@ a:hover {
244
244
  // gl_FragColor = vec4(vUv2.xy, 0, 1);
245
245
  gl_FragColor = lightMapTexel;
246
246
  }
247
- `,defines:{USE_LIGHTMAP:""}})}};import{AxesHelper as Ex,Object3D as Cx,Vector4 as Tx}from"three";import{EquirectangularReflectionMapping as vx,sRGBEncoding as yx,Vector3 as Wm}from"three";var ds=P("debugreflectionprobe"),Nm=P("noreflectionprobe"),_x=Symbol("reflectionProbeKey"),xx=Symbol("original material"),$i=class extends M{static get(e,t,i){if(!e||e.isObject3D!==!0||Nm)return null;let n=$i._probes.get(t);if(n){for(let r of n)if(r.__didAwake||r.__internalAwake(),r.enabled&&r.isInBox(e,i?1e-8:void 0))return ds&&console.log("Found reflection probe",e.name,r.name),r}return ds&&console.debug("Did not find reflection probe",e.name,i,e),null}_texture;set texture(e){this._texture=e}get texture(){return this._texture}center;size;_boxHelper;isInBox(e,t){return this._boxHelper?.isInBox(e,t)}constructor(){super(),$i._probes.has(this.context)||$i._probes.set(this.context,[]),$i._probes.get(this.context)?.push(this)}awake(){this._boxHelper=this.gameObject.addNewComponent(We),this._boxHelper.updateBox(!0),ds&&this._boxHelper.showHelper(5592320,!0),this.texture&&(this.texture.mapping=vx,this.texture.encoding=yx,this.texture.needsUpdate=!0)}onDestroy(){let e=$i._probes.get(this.context);if(e){let t=e.indexOf(this);t>=0&&e.splice(t,1)}}onSet(e){if(Nm||e.sharedMaterials?.length<=0||!this.texture)return;let t=$i._rendererMaterialsCache.get(e);t||(t=[],$i._rendererMaterialsCache.set(e,t));for(let i=0;i<e.sharedMaterials.length;i++){let n=e.sharedMaterials[i];if(!n||n.envMap===void 0||n.envMap===this.texture)continue;let r=t[i];if(!r||r.material!==n||r.material.version!==n.version){let a=n.clone();r?(r.copy=a,r.material=n):(r={material:n,copy:a},t.push(r)),a[_x]=this,a[xx]=n,a.envMap=this.texture,ds&&console.log("Set reflection",e.name,e.guid)}let s=r?.copy;e.sharedMaterials[i]=s}}onUnset(e){let t=$i._rendererMaterialsCache.get(e);if(t)for(let i=0;i<t.length;i++){let n=t[i];e.sharedMaterials[i]=n.material}}},Zt=$i;I(Zt,"_probes",new Map),I(Zt,"_rendererMaterialsCache",new Map),v([y(Wm)],Zt.prototype,"center",2),v([y(Wm)],Zt.prototype,"size",2);import{Layers as hH}from"three";var wx=Symbol("customVisibilityFlag");function hc(o,e){o.layers[wx]=e}var fH=Symbol("DidPatchLayers");var Xm=P("noInstancing"),Qm=!!P("debuglightmaps"),Rx=P("debuginstancing"),Sx=P("debugprogressive"),Px=P("noprogressive"),Ox=P("wireframe");var hs=class{path=null;asset=null;default};var Kd=class{_renderer;_targets=[];is(e){return this._renderer===e}constructor(e){this._renderer=e;let t=this.setMaterial.bind(this),i=this.getMaterial.bind(this),n=e.gameObject;if(this._targets=[],n)switch(n.type){case"Group":this._targets=[...n.children];break;case"SkinnedMesh":case"Mesh":this._targets.push(n);break}return new Proxy(this,{get(r,s){if(typeof s=="string"){let a=parseInt(s);if(!isNaN(a))return i(a)}return r[s]},set(r,s,a){return typeof s=="string"&&t(a,Number.parseInt(s)),Reflect.set(r,s,a)}})}get length(){return this._targets.length}setMaterial(e,t){if(t<0||t>=this._targets.length)return;let i=this._targets[t];!i||i.material===void 0||(i.material=e)}getMaterial(e){if(e<0)return null;let t=this._targets;if(e>=t.length)return null;let i=t[e];return i?i.material:null}},fc=class extends M{static setVisible(e,t){hc(e,t)}receiveShadows=!1;shadowCastingMode=Jd.Off;lightmapIndex=-1;lightmapScaleOffset=new en.Vector4(1,1,0,0);enableInstancing=void 0;renderOrder=void 0;allowOcclusionWhenDynamic=!0;probeAnchor;reflectionProbeUsage=0;_lightmaps;get sharedMesh(){if(this.gameObject.type==="Mesh")return this.gameObject;if(this.gameObject.type==="SkinnesMesh")return this.gameObject;if(this.gameObject.type==="Group")return this.gameObject.children[0]}get sharedMaterial(){return this.sharedMaterials[0]}set sharedMaterial(e){this.sharedMaterials[0]=e}get material(){return this.sharedMaterials[0]}set material(e){this.sharedMaterials[0]=e}_sharedMaterials;get sharedMaterials(){return(!this._sharedMaterials||!this._sharedMaterials.is(this))&&(this._sharedMaterials=new Kd(this)),this._sharedMaterials}static get shouldSuppressInstancing(){return Xm}_lightmapTextureOverride=void 0;get lightmap(){return this._lightmaps?.length?this._lightmaps[0].lightmap:null}set lightmap(e){if(this._lightmapTextureOverride=e,e===void 0&&(e=this.context.lightmaps.tryGetLightmap(this.sourceId,this.lightmapIndex)),this._lightmaps?.length)for(let t of this._lightmaps)t.lightmap=e}get hasLightmap(){let e=this.lightmap;return e!=null}allowProgressiveLoading=!0;registering(){this.enabled||this.setVisibility(!1)}awake(){this.clearInstancingState(),this.probeAnchor&&ds&&this.probeAnchor.add(new Ex(.2)),this._reflectionProbe=null;let e=this.gameObject.type;if(this.isMultiMaterialObject(this.gameObject)){for(let t of this.gameObject.children)this.context.addBeforeRenderListener(t,this.onBeforeRenderThree.bind(this)),t.layers.mask=this.gameObject.layers.mask;if(this.renderOrder!==void 0){let t=0;for(let i=0;i<this.gameObject.children.length;i++){let n=this.gameObject.children[i];if(!(n.type!=="Mesh"||R.getComponent(n,fc))){if(this.renderOrder.length<=t){console.error("Incorrect element count",this);break}n.renderOrder=this.renderOrder[t],t+=1}}}}else this.isMeshOrSkinnedMesh(this.gameObject)&&(this.context.addBeforeRenderListener(this.gameObject,this.onBeforeRenderThree.bind(this)),this.renderOrder!==void 0&&this.renderOrder.length>0&&(this.gameObject.renderOrder=this.renderOrder[0]));if(this.lightmapIndex>=0){let t=this._lightmapTextureOverride!==void 0?this._lightmapTextureOverride:this.context.lightmaps.tryGetLightmap(this.sourceId,this.lightmapIndex);if(t){if(this._lightmaps=[],e==="Mesh"){let i=this.gameObject.material;if(i?.isMeshBasicMaterial)i&&console.warn("Lightmapping is not supported on MeshBasicMaterial",i.name);else{let n=new Un(this.gameObject,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,Qm)}}else if(this.isMultiMaterialObject(this.gameObject)&&this.sharedMaterials.length>0){for(let i of this.gameObject.children)if(!i.material?.isMeshBasicMaterial){let n=new Un(i,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,Qm),n.bindOnBeforeRender()}}}}if(Ox)for(let t=0;t<this.sharedMaterials.length;t++){let i=this.sharedMaterials[t];i&&(i.wireframe=!0)}}_isInstancingEnabled=!1;handles=void 0;prevLayers=void 0;clearInstancingState(){this._isInstancingEnabled=!1,this.handles=void 0,this.prevLayers=void 0}setInstancingEnabled(e){if(this._isInstancingEnabled===e)return e&&(this.handles===void 0||this.handles!=null&&this.handles.length>0);if(this._isInstancingEnabled=e,e){if(this.handles===void 0){if(this.handles=kx.setup(this.gameObject,this.context,null,{rend:this,foundMeshes:0}),this.handles)return R.markAsInstancedRendered(this.gameObject,!0),!0}else if(this.handles!==null){for(let t of this.handles)t.updateInstanceMatrix(!0),t.add();return R.markAsInstancedRendered(this.gameObject,!0),!0}}else{if(this.handles)for(let t of this.handles)t.remove();return!0}return!1}start(){if(this.enableInstancing&&!Xm&&this.setInstancingEnabled(!0),this.gameObject.frustumCulled=this.allowOcclusionWhenDynamic,this.isMultiMaterialObject(this.gameObject))for(let e=0;e<this.gameObject.children.length;e++){let t=this.gameObject.children[e];t.frustumCulled=this.allowOcclusionWhenDynamic}}onEnable(){this.setVisibility(!0),this._isInstancingEnabled?this.setInstancingEnabled(!0):this.enabled&&this.applyStencil(),this.updateReflectionProbe()}onDisable(){this.setVisibility(!1),this.handles&&this.handles.length>0&&this.setInstancingEnabled(!1)}onDestroy(){this.handles=null}applyStencil(){Nr.applyStencil(this)}onBeforeRender(){if(!this.gameObject)return;fc.envmap=this.scene.environment;let e=this.gameObject[ol]===!0||this.gameObject.matrixWorldNeedsUpdate;if(this.isMultiMaterialObject(this.gameObject)&&this.gameObject.children?.length>0)for(let t of this.gameObject.children)this.applySettings(t);else this.applySettings(this.gameObject);if(e&&(delete this.gameObject[ol],this.handles)){for(let i=this.handles.length-1;i>=0;i--)this.handles[i].updateInstanceMatrix();this.gameObject.matrixWorldNeedsUpdate=!1}if(this.handles&&this.handles.length<=0&&R.markAsInstancedRendered(this.gameObject,!1),this._isInstancingEnabled&&this.handles)for(let t=0;t<this.handles.length;t++){let i=this.handles[t];this.prevLayers||(this.prevLayers=[]);let n=i.object.layers.mask;t>=this.prevLayers.length?this.prevLayers.push(n):this.prevLayers[t]=n,i.object.layers.disableAll()}this.reflectionProbeUsage!==0&&this._reflectionProbe&&this._reflectionProbe.onSet(this)}onBeforeRenderThree(e,t,i,n,r,s){if(!Px&&r._didRequestTextureLOD===void 0&&this.allowProgressiveLoading&&(r._didRequestTextureLOD=0,Sx&&console.log("Load material LOD",r.name),fi.assignTextureLOD(this.context,this.sourceId,r)),r.envMapIntensity!==void 0){let a=this.hasLightmap?Math.PI:1;r.envMapIntensity=Math.max(0,this.context.rendererData.environmentIntensity/a)}if(this._lightmaps)for(let a of this._lightmaps)a.onBeforeRenderThree(r)}onAfterRender(){if(this._isInstancingEnabled&&this.handles&&this.prevLayers&&this.prevLayers.length>=this.handles.length)for(let e=0;e<this.handles.length;e++){let t=this.handles[e];t.object.layers.mask=this.prevLayers[e]}this.reflectionProbeUsage!==0&&this._reflectionProbe&&this._reflectionProbe.onUnset(this)}applySettings(e){e.receiveShadow=this.receiveShadows,this.shadowCastingMode==Jd.On?e.castShadow=!0:e.castShadow=!1}_reflectionProbe=null;updateReflectionProbe(){if(this._reflectionProbe=null,this.reflectionProbeUsage!==0){if(!this.probeAnchor)return;this.startCoroutine(this._updateReflectionProbe(),2)}}*_updateReflectionProbe(){let e=this.probeAnchor||this.gameObject,t=!!this.probeAnchor;this._reflectionProbe=Zt.get(e,this.context,t)}setVisibility(e){if(!this.isMultiMaterialObject(this.gameObject))hc(this.gameObject,e);else for(let t of this.gameObject.children)this.isMeshOrSkinnedMesh(t)&&hc(t,e)}isMultiMaterialObject(e){return e.type==="Group"}isMeshOrSkinnedMesh(e){return e.type==="Mesh"||e.type==="SkinnedMesh"}},ae=fc;I(ae,"envmap",null),v([y()],ae.prototype,"receiveShadows",2),v([y()],ae.prototype,"shadowCastingMode",2),v([y()],ae.prototype,"lightmapIndex",2),v([y(Tx)],ae.prototype,"lightmapScaleOffset",2),v([y()],ae.prototype,"enableInstancing",2),v([y()],ae.prototype,"renderOrder",2),v([y()],ae.prototype,"allowOcclusionWhenDynamic",2),v([y(Cx)],ae.prototype,"probeAnchor",2),v([y()],ae.prototype,"reflectionProbeUsage",2);var lo=class extends ae{},ps=class extends lo{awake(){super.awake(),this.allowOcclusionWhenDynamic=!1}},Jd=(n=>(n[n.Off=0]="Off",n[n.On=1]="On",n[n.TwoSided=2]="TwoSided",n[n.ShadowsOnly=3]="ShadowsOnly",n))(Jd||{}),Zd=class{objs=[];setup(e,t,i,n,r=0){let s=this.tryCreateOrAddInstance(e,t,n);if(s)return i===null&&(i=[]),i.push(s),i;if(r<=0&&e.type!=="Mesh"){let a=r+1;for(let c of e.children)i=this.setup(c,t,i,n,a)}return i}tryCreateOrAddInstance(e,t,i){if(e.type==="Mesh"){let n=i.foundMeshes;if(i.foundMeshes+=1,!i.rend.enableInstancing||n>=i.rend.enableInstancing.length||!i.rend.enableInstancing[n])return null;let r=e,s=r.geometry,a=r.material;for(let u of this.objs)if(!u.isFull()&&u.geo===s&&u.material===a)return u.addInstance(r);let c=new pc(e.name,s,a,200,t);return this.objs.push(c),c.addInstance(r)}return null}},kx=new Zd,$d=class{get name(){return this.object.name}instanceIndex=-1;object;instancer;constructor(e,t,i){this.instanceIndex=e,this.object=t,this.instancer=i,R.markAsInstancedRendered(t,!0)}updateInstanceMatrix(e=!1){this.instanceIndex<0||(this.object.updateWorldMatrix(!0,e),this.instancer.updateInstance(this.object.matrixWorld,this.instanceIndex))}add(){this.instanceIndex>=0||this.instancer.add(this)}remove(){this.instanceIndex<0||this.instancer.remove(this)}},eh=class{name="";geo;material;get currentCount(){return this.inst.count}context;inst;handles=[];maxCount;isFull(){return this.currentCount>=this.maxCount}constructor(e,t,i,n,r){this.name=e,this.geo=t,this.material=i,this.context=r,this.maxCount=n,Rx&&(i=new en.MeshBasicMaterial({color:this.randomColor()})),this.inst=new en.InstancedMesh(t,i,n),this.inst.count=0,this.inst.layers.set(2),this.inst.visible=!0,this.context.scene.add(this.inst)}randomColor(){return new en.Color(Math.random(),Math.random(),Math.random())}addInstance(e){if(this.currentCount>=this.maxCount)return console.error("TOO MANY INSTANCES - resize is not yet implemented!",this.inst.count),null;let t=new $d(-1,e,this);return this.add(t),t}add(e){e.instanceIndex<0&&(e.instanceIndex=this.currentCount,e.instanceIndex>=this.handles.length?this.handles.push(e):this.handles[e.instanceIndex]=e),e.object.updateWorldMatrix(!0,!0),this.inst.setMatrixAt(e.instanceIndex,e.object.matrixWorld),this.inst.instanceMatrix.needsUpdate=!0,this.inst.count+=1,this.inst.count>0&&(this.inst.visible=!0)}remove(e){if(!e||e.instanceIndex<0||e.instanceIndex>=this.handles.length||this.inst.count<=0)return;if(this.handles[e.instanceIndex]!==e){console.error("instance handle is not part of renderer, was it removed before?",e.instanceIndex,this.name);let i=this.handles.indexOf(e);if(i<0)return;e.instanceIndex=i}if(this.handles[e.instanceIndex]=null,this.inst.setMatrixAt(e.instanceIndex,eh.nullMatrix),!(e.instanceIndex>=this.currentCount-1)&&this.currentCount>0){let i=this.handles[this.currentCount-1];i&&(i.instanceIndex=e.instanceIndex,i.updateInstanceMatrix(),this.handles[e.instanceIndex]=i,this.handles[this.currentCount-1]=null)}this.inst.count>0&&(this.inst.count-=1),e.instanceIndex=-1,this.inst.count<=0&&(this.inst.visible=!1),this.inst.instanceMatrix.needsUpdate=!0}updateInstance(e,t){this.inst.setMatrixAt(t,e),this.inst.instanceMatrix.needsUpdate=!0}},pc=eh;I(pc,"nullMatrix",new en.Matrix4);import{Vector3 as qm}from"three";var ga=class extends M{connectedBody;get rigidBody(){return this._rigidBody}_rigidBody=null;onEnable(){this._rigidBody||(this._rigidBody=this.gameObject.getComponent(J)),this.rigidBody&&this.connectedBody&&this.startCoroutine(this.create())}*create(){yield,this.rigidBody&&this.connectedBody&&this.createJoint(this.rigidBody,this.connectedBody)}};v([y(J)],ga.prototype,"connectedBody",2);var fs=class extends ga{createJoint(e,t){this.context.physics.addFixedJoint(e,t)}},yr=class extends ga{anchor;axis;createJoint(e,t){this.axis&&this.anchor&&this.context.physics.addHingeJoint(e,t,this.anchor,this.axis)}};v([y(qm)],yr.prototype,"anchor",2),v([y(qm)],yr.prototype,"axis",2);import{FlyControls as Mx}from"three/examples/jsm/controls/FlyControls.js";var ms=class extends M{_controls=null;onEnable(){let e=R.getComponent(this.gameObject,Z)?.cam;this._controls=new Mx(e,this.context.renderer.domElement),this._controls.rollSpeed=.5,this._controls.movementSpeed=3,this._controls.dragToLook=!0}onDisable(){this._controls?.dispose(),this._controls=null}update(){this._controls&&this._controls.update(this.context.time.deltaTime)}};import{GLTFExporter as Dx}from"three/examples/jsm/exporters/GLTFExporter.js";import{BufferAttribute as th,Matrix4 as Ix,Vector3 as Ym,Quaternion as Ax}from"three";var ba=class{constructor(e){this.writer=e,this.name="EXT_mesh_gpu_instancing"}writeNode(e,t){if(e.constructor.name!=="InstancedMesh")return;let i=this.writer,n=i.extensionsUsed,r={};t.extensions=t.extensions||{},t.extensions[this.name]=r;let s=new Ix,a=new Array,c=new Array,u=new Array;for(let g=0;g<e.count;g++){e.getMatrixAt(g,s);let E=new Ym,_=new Ax,x=new Ym;s.decompose(E,_,x),a.push(E.x,E.y,E.z),c.push(_.x,_.y,_.z,_.w),u.push(x.x,x.y,x.z)}let l=new Float32Array(a),d=new Float32Array(c),h=new Float32Array(u);r.attributes={TRANSLATION:i.processAccessor(new th(l,3)),ROTATION:i.processAccessor(new th(d,4)),SCALE:i.processAccessor(new th(h,3))},n[this.name]=!0}};import{Object3D as Lx,Vector3 as jx}from"three";var gs=class extends We{sceneRoot;start(){this.startCoroutine(this.updateGltfBox())}*updateGltfBox(){for(;;)for(let e=0;e<10;e++)yield}},$t=class extends M{binary=!0;objects=[];exporter;ext;async exportNow(e){console.log("DO EXPORT",this.objects);let t={binary:this.binary,pivot:$t.calculateCenter(this.objects)},i=await this.export(this.objects,t);this.binary?e.endsWith(".glb")||(e+=".glb"):e.endsWith(".gltf")||(e+=".gltf"),this.binary?$t.saveArrayBuffer(i,e):$t.saveJson(i,e)}async export(e,t){if(e===null||e.length<=0){console.log("no objects set to export");return}this.exporter||(this.exporter=new Dx,this.exporter.register(a=>new ba(a)),this.ext=new Vo,this.ext.registerExport(this.exporter)),$t.filterTopmostParent(e);let i={trs:!1,onlyVisible:!0,truncateDrawRange:!1,binary:t?.binary??!0,maxTextureSize:1/0,embedImages:!0,includeCustomExtensions:!0,animations:$t.collectAnimations(e)},n=new Lx;t?.pivot&&n.position.sub(t.pivot),console.log("EXPORT",e),e.forEach(a=>{a&&(n.children.push(a),a.matrixAutoUpdate=!1,a.matrix.copy(a.matrixWorld),R.getComponentsInChildren(a,ae).forEach(c=>{R.isActiveInHierarchy(c.gameObject)&&c.setInstancingEnabled(!1)}))});let r=new Co(n);return this.ext.context=r,new Promise((a,c)=>{try{this.exporter?.parse(n,u=>{s(),a(u)},u=>{s(),c(u)},i)}catch(u){console.error(u),c(u)}finally{console.log("FINALLY")}});function s(){e.forEach(a=>{!a||(a.matrixAutoUpdate=!0,R.getComponentsInChildren(a,ae).forEach(c=>{R.isActiveInHierarchy(c.gameObject)&&c.setInstancingEnabled(!1)}))})}}static saveArrayBuffer(e,t){this.save(new Blob([e],{type:"application/octet-stream"}),t)}static saveJson(e,t){this.save("data: text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(e)),t)}static save(e,t){let i=document.createElement("a");i.style.display="none",document.body.appendChild(i),typeof e=="string"?i.href=e:i.href=URL.createObjectURL(e),i.download=t,i.click(),i.remove()}static collectAnimations(e,t){t=t||[];for(let i of e)!i||i.traverseVisible(n=>{n.animations&&n.animations.length>0&&t.push(...n.animations)});return t}static calculateCenter(e,t){let i=t||new jx;return i.set(0,0,0),e.forEach(n=>{i.add(B(n))}),console.log(i),i.divideScalar(e.length),i}static filterTopmostParent(e){if(!(e.length<=0))for(let t=0;t<e.length;t++){let i=e[t];if(!i){e.splice(t,1),t--;continue}for(;i.parent;){if(e.includes(i.parent)){e.splice(t,1),t--;break}i=i.parent}}}};var co=class extends M{awake(){Ke.createIfNoneExists(this.context)}onEnable(){Ke.instance?.register(this)}onDisable(){Ke.instance?.unregister(this)}performRaycast(e=null){return null}},uo=class extends co{targets=null;raycastHits=[];start(){this.targets=[this.gameObject]}performRaycast(e=null){return this.targets?(e??=new xe,e.targets=this.targets,e.results=this.raycastHits,this.context.physics.raycast(e)):null}},bs=class extends uo{};import{Color as mc,GridHelper as Hx}from"three";var Gn=class extends M{isGizmo=!1;color0;color1;gridHelper;size;divisions;offset;onEnable(){if(this.isGizmo&&!Di)return;let e=this.size,t=this.divisions;this.gridHelper||(this.gridHelper=new Hx(e,t,this.color0??new mc(.4,.4,.4),this.color1??new mc(.6,.6,.6)),this.offset!==void 0&&(this.gridHelper.position.y+=this.offset),this.gameObject.add(this.gridHelper))}};v([y()],Gn.prototype,"isGizmo",2),v([y(mc)],Gn.prototype,"color0",2),v([y(mc)],Gn.prototype,"color1",2);var Vn=class extends M{reverseArrangement=!1},vs=class extends Vn{},ys=class extends Vn{},_s=class extends Vn{};import{GroundProjectedEnv as Fx}from"three/examples/jsm/objects/GroundProjectedEnv.js";var tn=class extends M{applyOnAwake=!1;set scale(e){this._scale=e,this.env?.scale.setScalar(e)}get scale(){return this._scale}_scale=20;set radius(e){this._radius=e,this.env&&(this.env.height=e)}get radius(){return this._radius}_radius=100;set height(e){this._height=e,this.env&&(this.env.height=e)}get height(){return this._height}_height=100;_lastEnvironment;env;_watcher;awake(){this.applyOnAwake&&this.updateAndCreate()}onEnable(){this.context.time.frameCount>0&&this.applyOnAwake&&this.updateAndCreate(),this._watcher||(this._watcher=new hn(this.context.scene,"environment"),this._watcher.subscribeWrite(e=>{this.updateProjection()}))}onDisable(){this._watcher?.revoke(),this.env?.removeFromParent()}updateAndCreate(){this.updateProjection(),this._watcher?.apply()}updateProjection(){if(!this.context.scene.environment){this.env?.removeFromParent();return}(!this.env||this.context.scene.environment!==this._lastEnvironment)&&(console.log("Create/Update Ground Projection",this.context.scene.environment.name),this.env=new Fx(this.context.scene.environment)),this._lastEnvironment=this.context.scene.environment,this.env.parent||this.gameObject.add(this.env),this.env.scale.setScalar(this._scale),this.env.radius=this._radius,this.env.height=this._height,this.env.isObject3D===!0&&this.env.layers.set(2)}};v([y()],tn.prototype,"applyOnAwake",2),v([y()],tn.prototype,"scale",1),v([y()],tn.prototype,"radius",1),v([y()],tn.prototype,"height",1);import*as Km from"three-mesh-ui";import{Color as L}from"three";var Bx=P("debugtext");var Ie=class extends _t{canvas;alignment=0;verticalOverflow=0;horizontalOverflow=0;lineSpacing=1;supportRichText=!1;font;fontStyle=0;get text(){return this._text}set text(e){if(this._text=e,!this._textMeshUi&&this._text.length>0&&this.context.time.frame>0&&this.createText(e,this.getTextOpts(),this.supportRichText),this._textMeshUi){if(this._textMeshUi.length>1){this.requestRebuild();return}this._textMeshUi[0].set({content:e}),this.markDirty()}}set_text(e){this.text=e}get fontSize(){return this._fontSize}set fontSize(e){if(this._fontSize=e,this._textMeshUi){if(this._textMeshUi.length>1){this.requestRebuild();return}this._textMeshUi[0].set({content:e}),this.markDirty()}}onColorChanged(){if(this._textMeshUi){if(this._textMeshUi.length>1){this.requestRebuild();return}let e=this.color;this._textMeshUi[0].set({fontColor:e,fontOpacity:e.alpha}),this.markDirty()}}_isWaitingForRebuild=!1;requestRebuild(){this._isWaitingForRebuild||(this._isWaitingForRebuild=!0,this.startCoroutine(this.rebuildDelayedRoutine(),0))}*rebuildDelayedRoutine(){if(this._isWaitingForRebuild=!1,this._textMeshUi){for(let e of this._textMeshUi)e.removeFromParent();this._textMeshUi.length=0}this.createText(this.text,this.getTextOpts(),this.supportRichText),this.markDirty()}onCreate(e){Bx&&console.log(this);let t=this.verticalOverflow==0&&this.horizontalOverflow==0;t&&(this.context.renderer.localClippingEnabled=!0);let i=this.rectTransform;this._textContainer=this.uiObject=this.createBlock(i,t,null,!0),this.createText(this.text,this.getTextOpts(),this.supportRichText),this.uiObject,this.uiObject=this.createBlock(i,t,this.uiObject,!1)}onAfterAddedToScene(){super.onAfterAddedToScene(),this.handleTextRenderOnTop()}_text="";_fontSize=12;_textMeshUi=null;_textContainer=null;getTextOpts(){let e=this.fontSize,t={content:this.text,fontColor:this.color,fontOpacity:this.color.alpha,fontSize:e,fontKerning:"normal"};return this.font=this.font?.toLocaleLowerCase(),this.setFont(t,this.fontStyle),t}onEnable(){super.onEnable(),this._didHandleTextRenderOnTop=!1,this.uiObject&&(this.uiObject.onAfterUpdate=this.updateWidth.bind(this))}createBlock(e,t,i,n=!1){let r={};r.hiddenOverflow=t,r.interLine=(this.lineSpacing-1)*this.fontSize*1.333,this.getAlignment(r,n);let s=e.createNewBlock(r);return i&&(Array.isArray(i)?s.add(...i):s.add(i)),s}getAlignment(e,t=!1){switch(t||(e.contentDirection="row"),this.alignment){default:case 0:case 1:case 2:e.justifyContent="start";break;case 3:case 4:case 5:e.justifyContent="center";break;case 6:case 7:case 8:e.justifyContent="end";break}switch(this.alignment){case 0:case 3:case 6:e.alignContent=t?"left":"top";break;case 1:case 4:case 7:e.alignContent="center";break;case 2:case 5:case 8:e.alignContent=t?"right":"bottom";break}return e}updateWidth(){this.horizontalOverflow===1&&setTimeout(()=>{if(!this._textMeshUi)return;let e=this._textMeshUi[0].parent;if(!!e&&e.lines){let t=e.lines.reduce((i,n)=>i+n.width,0);t+=e.getFontSize()*5,t+=e.padding*2||0,t+=this.fontSize*1.5,e.set({width:t}),this.ensureShadowComponentOwner()}},1)}ensureShadowComponentOwner(){this.shadowComponent&&this.shadowComponent.traverse(e=>{e[bt]===void 0&&(e[bt]=this)})}createText(e,t,i){if(!(!e||e.length<=0))if(this._textMeshUi||(this._textMeshUi=[]),i){let n=this.getNextTag(e);if(n)n.startIndex>0&&this.createText(e.substring(0,n.startIndex),t,!1);else return this.createText(e,t,!1);let r=[];for(;n;){let s=this.getNextTag(e,n.endIndex);if(s){let a=this.getText(e,n,s);this.handleTag(n,t,r),this.createText(a,t,!1)}else{let a=e.substring(n.endIndex);this.handleTag(n,t,r),this.createText(a,t,!1)}n=s}}else{let n={...t};n.content=e;let r=new Km.Text(n);this._textMeshUi.push(r),this._textContainer&&this._textContainer.add(r)}}_didHandleTextRenderOnTop=!1;handleTextRenderOnTop(){this._didHandleTextRenderOnTop||(this._didHandleTextRenderOnTop=!0,this.startCoroutine(this.renderOnTopCoroutine()))}*renderOnTopCoroutine(){if(!this.canvas)return;let e=[],t=this.canvas,i={renderOnTop:t.renderOnTop,depthWrite:t.depthWrite,doubleSided:t.doubleSided};for(;;){let n=!1;if(this._textMeshUi)for(let r=0;r<this._textMeshUi.length;r++){if(e[r]===!0)continue;n=!0;let s=this._textMeshUi[r];!s.textContent||(rs(s,i),e[r]=!0)}if(!n)break;yield}}handleTag(e,t,i){if(e.isEndTag){if(i.length>0){let n=i.pop();if(n)for(let r in n.previousValues){let s=n.previousValues[r];t[r]=s}}}else if(e.type.includes("color")){let n=new va(e,{fontColor:t.fontColor});if(i.push(n),e.type.length>6){let r=e.type.substring(6);t.fontColor=Ux(r)}else t.fontColor=new L(1,1,1)}else if(e.type=="b"){let n=new va(e,{fontFamily:t.fontFamily,fontTexture:t.fontTexture});i.push(n),this.setFont(t,1)}else if(e.type=="i"){let n=new va(e,{fontFamily:t.fontFamily,fontTexture:t.fontTexture});i.push(n),this.setFont(t,2)}}getText(e,t,i){return e.substring(t.endIndex,i.startIndex)}getNextTag(e,t=0){let i=e.indexOf("<",t),n=e.indexOf(">",i);if(i>=0&&n>=0){let r=e.substring(i+1,n);return{type:r,startIndex:i,endIndex:n+1,isEndTag:r.startsWith("/")}}return null}setFont(e,t){let i=this.getFontName(t),n=i;n?.endsWith("-msdf.json")||(n+="-msdf.json"),e.fontFamily=n;let r=i;r?.endsWith(".png")||(r+=".png"),e.fontTexture=r}getFontName(e){return this.font?(this.font=Ii(this.sourceId,this.font),this.font):null}};v([y(Ne)],Ie.prototype,"canvas",2),v([y()],Ie.prototype,"alignment",2),v([y()],Ie.prototype,"verticalOverflow",2),v([y()],Ie.prototype,"horizontalOverflow",2),v([y()],Ie.prototype,"lineSpacing",2),v([y()],Ie.prototype,"supportRichText",2),v([y()],Ie.prototype,"font",2),v([y()],Ie.prototype,"fontStyle",2),v([y()],Ie.prototype,"text",1),v([y()],Ie.prototype,"fontSize",1);var va=class{tag;previousValues;constructor(e,t){this.tag=e,this.previousValues=t}};function Ux(o){if(o.startsWith("#")){let t=o.substring(1);var e=parseInt(t,16);let i=e>>16&255,n=e>>8&255,r=e&255;return new L(i/255,n/255,r/255)}switch(o){case"black":return new L(0,0,0);case"white":return new L(1,1,1);case"red":return new L(1,0,0);case"lime":return new L(0,1,0);case"blue":return new L(0,0,1);case"yellow":return new L(1,1,0);case"cyan":return new L(0,1,1);case"magenta":return new L(1,0,1);case"silver":return new L(.75,.75,.75);case"gray":return new L(.5,.5,.5);case"maroon":return new L(.5,0,0);case"olive":return new L(.5,.5,0);case"green":return new L(0,.5,0);case"purple":return new L(.5,0,.5);case"teal":return new L(0,.5,.5);case"navy":return new L(0,0,.5);case"darkred":return new L(.54,0,0);case"brown":return new L(.55,.27,0);case"firebrick":return new L(.69,.13,.13);case"crimson":return new L(.86,.08,.24);case"tomato":return new L(1,.39,.28);case"coral":return new L(1,.49,.31);case"indianred":return new L(.6,.31,.51);case"lightcoral":return new L(.94,.5,.5);case"darkorange":return new L(1,.55,0);case"orange":return new L(1,.65,0);case"gold":return new L(1,.84,0);case"darkgoldenrod":return new L(.72,.53,.04);case"goldenrod":return new L(.85,.65,.13);case"palegoldenrod":return new L(.93,.87,.67);case"darkkhaki":return new L(.74,.7,.42);case"khaki":return new L(.94,.9,.55);case"yellowgreen":return new L(.6,.8,.19);case"darkolivegreen":return new L(.33,.42,.18);case"olivedrab":return new L(.42,.56,.14);case"lawngreen":return new L(.49,.99,0);case"chartreuse":return new L(.5,1,0);case"greenyellow":return new L(.68,1,.18);case"darkgreen":return new L(0,.39,0);case"forestgreen":return new L(.13,.55,.13);case"limegreen":return new L(.19,.8,.19);case"lightgreen":return new L(.56,.93,.56);case"palegreen":return new L(.59,.98,.59);case"darkseagreen":return new L(.56,.74,.56);case"mediumspringgreen":return new L(0,.98,.6);case"springgreen":return new L(0,1,.5);case"seagreen":return new L(.18,.31,.31);case"mediumaquamarine":return new L(.4,.8,.66);case"mediumseagreen":return new L(.24,.7,.44);case"lightseagreen":return new L(.13,.7,.67);case"darkslategray":return new L(.18,.31,.31);case"darkcyan":return new L(0,.55,.55);case"aqua":return new L(0,1,1);case"lightcyan":return new L(.8,1,1);case"darkturquoise":return new L(0,.81,.82);case"turquoise":return new L(0,.82,.82);case"mediumturquoise":return new L(.28,.82,.8);case"paleturquoise":return new L(.68,1,.93);case"aquamarine":return new L(.5,1,.83);case"powderblue":return new L(.69,.88,.9);case"cadetblue":return new L(.37,.62,.63);case"steelblue":return new L(.27,.51,.71);case"cornflowerblue":return new L(.39,.58,.93);case"deepskyblue":return new L(0,.7,1);case"dodgerblue":return new L(.12,.56,1);case"lightblue":return new L(.68,.85,.9);case"skyblue":return new L(.53,.81,.92);case"lightskyblue":return new L(.53,.81,.98);case"midnightblue":return new L(.18,.18,.31);case"darkblue":return new L(0,0,.55);case"mediumblue":return new L(0,0,.82);case"royalblue":return new L(.25,.41,.88);case"blueviolet":return new L(.54,.17,.89);case"indigo":return new L(.29,0,.51);case"darkslateblue":return new L(.28,.24,.55);case"slateblue":return new L(.42,.35,.8);case"mediumslateblue":return new L(.48,.41,.9);case"mediumpurple":return new L(.58,.44,.86);case"darkmagenta":return new L(.55,0,.55);case"darkviolet":return new L(.58,0,.83);case"darkorchid":return new L(.6,.2,.8);case"mediumorchid":return new L(.73,.33,.83);case"thistle":return new L(.84,.75,.85);case"plum":return new L(.87,.63,.87);case"violet":return new L(.93,.51,.93);case"fuchsia":return new L(1,0,1);case"orchid":return new L(.85,.44,.84);case"mediumvioletred":return new L(.78,.08,.52);case"palevioletred":return new L(.86,.44,.58);case"hotpink":return new L(1,.4,.71);case"deeppink":return new L(1,.08,.58);case"lightpink":return new L(1,.71,.76);case"pink":return new L(1,.75,.78);case"antiquewhite":return new L(.98,.92,.84);case"beige":return new L(.96,.96,.86);case"bisque":return new L(1,.89,.77);case"blanchedalmond":return new L(1,.92,.82);case"wheat":return new L(.96,.87,.87);case"cornsilk":return new L(1,.97,.86);case"lemonchiffon":return new L(1,.98,.8);case"lightgoldenrodyellow":return new L(.98,.98,.82);case"lightyellow":return new L(1,1,.8);case"saddlebrown":return new L(.55,.27,.07);case"sienna":return new L(.63,.32,.18);case"chocolate":return new L(.82,.41,.12);case"peru":return new L(.82,.52,.25);case"sandybrown":return new L(.96,.64,.38);case"burlywood":return new L(.87,.72,.53);case"tan":return new L(.82,.71,.55);case"rosybrown":return new L(.74,.56,.56);case"moccasin":return new L(1,.89,.71);case"navajowhite":return new L(1,.87,.68);case"peachpuff":return new L(1,.85,.73);case"mistyrose":return new L(1,.89,.88);case"lavenderblush":return new L(1,.94,.93);case"linen":return new L(.98,.94,.9);case"oldlace":return new L(.99,.96,.9);case"papayawhip":return new L(1,.94,.84);case"seashell":return new L(1,.96,.93);case"mintcream":return new L(.98,1,.98);case"slategray":return new L(.44,.5,.56);case"lightslategray":return new L(.47,.53,.6);case"lightsteelblue":return new L(.69,.77,.87);case"lavender":return new L(.9,.9,.98);case"floralwhite":return new L(1,.98,.98);case"aliceblue":return new L(.94,.97,1);case"ghostwhite":return new L(.97,.97,1);case"honeydew":return new L(.94,1,.94);case"ivory":return new L(1,1,.94);case"azure":return new L(.94,1,1);case"snow":return new L(1,.98,.98);case"dimgray":return new L(.4,.4,.4);case"darkgray":return new L(.66,.66,.66);case"lightgray":return new L(.83,.83,.83);case"gainsboro":return new L(.86,.86,.86);case"whitesmoke":return new L(.96,.96,.96)}return new L(1,1,1)}var ho=P("debuginputfield"),N=class extends M{get text(){return this.textComponent?.text??""}get isFocused(){return N.active===this}textComponent;placeholder;onValueChanged;onEndEdit;inputEventFn;_iosEventFn;start(){ho&&console.log(this.name,this)}onEnable(){N.htmlField||(N.htmlField=document.createElement("input"),N.htmlField.style.caretColor="transparent",N.htmlField.classList.add("ar"),document.body.appendChild(N.htmlField)),this.inputEventFn||(this.inputEventFn=this.onInput.bind(this)),N.htmlField.addEventListener("keyup",this.inputEventFn),this.placeholder&&this.textComponent?.text.length&&R.setActive(this.placeholder.gameObject,!1),wo()&&(this._iosEventFn=this.processInputOniOS.bind(this),window.addEventListener("touchend",this._iosEventFn))}onDisable(){N.htmlField?.removeEventListener("keyup",this.inputEventFn),this.onDeselected(),this._iosEventFn&&window.removeEventListener("touchend",this._iosEventFn)}onPointerClick(e){ho&&console.log("CLICK",e,N.active),N.activeTime=this.context.time.time,N.active!==this&&this.startCoroutine(this.activeLoop(),2),this.selectInputField()}*activeLoop(){for(this.onSelected();N.active===this&&!(this.context.input.getPointerUp(0)&&this.context.time.time-N.activeTime>.2);)this.setTextFromInputField(),yield;this.onDeselected()}onSelected(){if(N.active!==this&&(ho&&console.log("Select",this.name,this,N.htmlField,this.context.isInXR,this.context.arOverlayElement,this.textComponent?.text,N.htmlField?.value),N.active?.onDeselected(),N.active=this,this.placeholder&&R.setActive(this.placeholder.gameObject,!1),N.htmlField)){if(N.htmlField.value=this.textComponent?.text||"",ho&&console.log("set input field value",N.htmlField.value),this.context.isInXR){let e=this.context.arOverlayElement;e&&(N.htmlField.style.width="0px",N.htmlField.style.height="0px",e.append(N.htmlField))}this.selectInputField()}}onDeselected(){N.active===this&&(N.active=null,ho&&console.log("Deselect",this.name,this),N.htmlField&&(N.htmlField.blur(),document.body.append(N.htmlField),N.htmlField.style.width="",N.htmlField.style.height=""),this.placeholder&&(!this.textComponent||this.textComponent.text.length<=0)&&R.setActive(this.placeholder.gameObject,!0),this.onEndEdit?.invoke())}onInput(e){if(N.active===this){if(ho&&console.log(e.code,e,N.htmlField?.value,this.textComponent?.text),e.code==="Escape"||e.code==="Enter"){this.onDeselected();return}N.htmlField&&(this.textComponent&&(this.setTextFromInputField(),this.placeholder&&R.setActive(this.placeholder.gameObject,this.textComponent.text.length<=0)),this.selectInputField())}}setTextFromInputField(){if(this.textComponent&&N.htmlField){if(this.textComponent.text!==N.htmlField.value){ho&&console.log("VALUE CHANGED");let e=this.textComponent.text,t=N.htmlField.value;this.onValueChanged?.invoke(t,e)}this.textComponent.text=N.htmlField.value}}selectInputField(){N.htmlField&&(N.htmlField.setSelectionRange(N.htmlField.value.length,N.htmlField.value.length),N.htmlField.focus())}processInputOniOS(){let e=this.context.physics.raycast();if(!e.length)return;let i=e[0].object,n=Hd(i);(n?.gameObject===this.gameObject||n?.gameObject.parent===this.gameObject)&&this.selectInputField()}},kt=N;I(kt,"active",null),I(kt,"activeTime",-1),I(kt,"htmlField",null),v([y(Ie)],kt.prototype,"textComponent",2),v([y(Ie)],kt.prototype,"placeholder",2),v([y(de)],kt.prototype,"onValueChanged",2),v([y(de)],kt.prototype,"onEndEdit",2);import*as Jm from"three-mesh-ui";import*as ya from"three";var Zm=(a=>(a[a.fr=0]="fr",a[a.ru=1]="ru",a[a.de=2]="de",a[a.es=3]="es",a[a.el=4]="el",a[a.nord=5]="nord",a[a.eng=6]="eng",a))(Zm||{}),xs=class extends ze{font;text;keymap;padding;margin;fontSize;borderRadius;colors={keyboardBack:8750469,panelBack:2500134,button:3552822,hovered:1842204,selected:1088605};awake(){super.awake();let e=Zm[this.keymap||6];this.makeKeyboard(e)}onEnable(){this.addShadowComponent(this.keyboard)}onDisable(){this.removeShadowComponent()}keyboard=null;_lastKeyPressed;_lastKeyPressedStartTime=0;_lastKeyPressedTime=0;makeKeyboard(e){!e&&!navigator.language&&(e="en");let t=this.font?this.font:"arial",i=R.getComponent(this.gameObject,yt);if(!i){console.error("Missing rect transform, please add this component inside a canvas");return}let n={...i.getBasicOptions(),margin:this.margin||0,padding:this.padding||0,language:e,fontFamily:ts+"/"+t+"-msdf.json",fontTexture:ts+"/"+t+".png",fontSize:this.fontSize||6,backgroundColor:new ya.Color(this.colors.keyboardBack),backspaceTexture:ts+"/backspace.png",shiftTexture:ts+"/shift.png",enterTexture:ts+"/enter.png",borderRadius:this.borderRadius||0,autoLayout:!1},r=this.gameObject.scale;n.width*=this.gameObject.scale.x,n.height*=this.gameObject.scale.y,n.fontSize*=Math.max(r.x,r.y),this.keyboard=new Jm.Keyboard(n),this.gameObject.scale.set(1,1,1),this.keyboard.keys.forEach(s=>{s.setupState({state:"normal",attributes:{offset:.003,backgroundColor:new ya.Color(this.colors.button),backgroundOpacity:1}}),s.setState("normal"),s.setupState({state:"hovered",attributes:{offset:.3,backgroundColor:new ya.Color(this.colors.hovered),backgroundOpacity:1}}),s.setupState({state:"pressed",attributes:{offset:.1,backgroundColor:new ya.Color(this.colors.selected),backgroundOpacity:1},onSet:()=>{let a=s.info.input,c=s.info.command;if(this._lastKeyPressed!==a)this._lastKeyPressedStartTime=this.context.time.time;else if(this.context.time.time-this._lastKeyPressedTime>.05)this._lastKeyPressedStartTime=this.context.time.time;else if(this.context.time.time-this._lastKeyPressedStartTime<.5||c=="switch"||c=="shift"||c=="switch-set"){this._lastKeyPressedTime=this.context.time.time;return}if(this._lastKeyPressedTime=this.context.time.time,this._lastKeyPressed=a,c)switch(c){case"switch":this.keyboard.setNextPanel();break;case"switch-set":this.keyboard.setNextCharset();break;case"enter":this.tryAppend(`
248
- `);break;case"space":this.tryAppend(" ");break;case"backspace":if(!this.text?.text?.length)break;this.text?.text&&(this.text.text=this.text.text.substring(0,this.text.text.length-1)||"");break;case"shift":this.keyboard.toggleCase();break}else s.info.input!==void 0&&this.tryAppend(s.info.input)}})})}tryAppend(e){this.text&&(this.text.text+=e,this.markDirty())}};import*as at from"three";import{Color as Gx}from"three";function ih(o){return o*Math.PI/180}var $m=300,nh=P("debuglights");var Qe=class extends M{type=0;range=1;spotAngle=1;innerSpotAngle=1;color=new at.Color(16777215);set shadowNearPlane(e){if(e!==this._shadowNearPlane&&(this._shadowNearPlane=e,this.light?.shadow?.camera!==void 0)){let t=this.light.shadow.camera;t.near=e}}get shadowNearPlane(){return this._shadowNearPlane}_shadowNearPlane=.1;set shadowBias(e){e!==this._shadowBias&&(this._shadowBias=e,this.light?.shadow?.bias!==void 0&&(this.light.shadow.bias=e,this.light.shadow.needsUpdate=!0))}get shadowBias(){return this._shadowBias}_shadowBias=0;set shadowNormalBias(e){e!==this._shadowNormalBias&&(this._shadowNormalBias=e,this.light?.shadow?.normalBias!==void 0&&(this.light.shadow.normalBias=e,this.light.shadow.needsUpdate=!0))}get shadowNormalBias(){return this._shadowNormalBias}_shadowNormalBias=1;_overrideShadowBiasSettings=!1;set shadows(e){this._shadows=e,this.light&&(this.light.castShadow=e!==0,this.updateShadowSoftHard())}get shadows(){return this._shadows}_shadows=1;lightmapBakeType=4;set intensity(e){if(this._intensity=e,this.light){let t=1;if(this.context.isInXR&&this._webARRoot){let i=this._webARRoot?.arScale;typeof i=="number"&&i>0&&(t/=i)}this.light.intensity=e*t}}get intensity(){return this._intensity}_intensity=-1;get shadowDistance(){let e=this.light;return e?e.shadow.camera.far:-1}set shadowDistance(e){this._shadowDistance=e;let t=this.light;if(t){let i=t.shadow.camera;i.far=e,i.updateProjectionMatrix()}}_shadowDistance;shadowWidth;shadowHeight;get shadowResolution(){let e=this.light;return e?e.shadow.mapSize.x:-1}set shadowResolution(e){if(e===this._shadowResolution)return;this._shadowResolution=e;let t=this.light;t&&(t.shadow.mapSize.set(e,e),t.shadow.needsUpdate=!0)}_shadowResolution=void 0;get isBaked(){return this.lightmapBakeType===2}get selfIsLight(){if(this.gameObject.isLight===!0)return!0;switch(this.gameObject.type){case"SpotLight":case"PointLight":case"DirectionalLight":return!0}return!1}light=void 0;getWorldPosition(e){return this.light?this.type===1?this.light.getWorldPosition(e).multiplyScalar(1):this.light.getWorldPosition(e):e}updateIntensity(){this.intensity=this._intensity}awake(){this.color=new at.Color(this.color??16777215)}onEnable(){this.createLight(),!this.isBaked&&(this.light&&(this.selfIsLight||this.light.parent!==this.gameObject&&this.gameObject.add(this.light)),this.type===1&&this.startCoroutine(this.updateMainLightRoutine(),2),this._webXRStartedListener=V.addEventListener("xrStarted",this.onWebXRStarted.bind(this)),this._webXREndedListener=V.addEventListener("xrStopped",this.onWebXREnded.bind(this)))}onDisable(){V.removeEventListener("xrStarted",this._webXRStartedListener),V.removeEventListener("xrStopped",this._webXREndedListener)}_webXRStartedListener;_webXREndedListener;_webARRoot;onWebXRStarted(){this._webARRoot=R.getComponentInParent(this.gameObject,gt)??void 0,this.startCoroutine(this._updateLightIntensityInARRoutine())}*_updateLightIntensityInARRoutine(){for(;this.context.isInAR;){yield,this.updateIntensity();for(let e=0;e<30;e++)yield}}onWebXREnded(){this.updateIntensity()}createLight(){let e=this.selfIsLight;if(e&&!this.light)switch(this.light=this.gameObject,this._intensity=this.light.intensity,this.type){case 1:this.setDirectionalLight(this.light);break}else if(!this.light)switch(this.type){case 1:let t=new at.DirectionalLight(this.color,this.intensity*Math.PI);if(t.position.set(0,0,-$m*.5).applyQuaternion(this.gameObject.quaternion),this.gameObject.add(t.target),fn(t.target,0,0,0),this.light=t,this.gameObject.position.set(0,0,0),this.gameObject.rotation.set(0,0,0),nh){let s=new at.DirectionalLightHelper(this.light,.2,this.color);this.context.scene.add(s)}break;case 0:let i=new at.SpotLight(this.color,this.intensity*Math.PI,this.range,ih(this.spotAngle/2),1-ih(this.innerSpotAngle/2)/ih(this.spotAngle/2),2);i.position.set(0,0,0),i.rotation.set(0,0,0),this.light=i;let n=i.target;i.add(n),n.position.set(0,0,this.range),n.rotation.set(0,0,0);break;case 2:let r=new at.PointLight(this.color,this.intensity*Math.PI,this.range);this.light=r;break}if(this.light){this._intensity>=0?this.light.intensity=this._intensity:this._intensity=this.light.intensity,this.shadows!==0?this.light.castShadow=!0:this.light.castShadow=!1,this._shadowResolution!==void 0&&this._shadowResolution>4?(this.light.shadow.mapSize.width=this._shadowResolution,this.light.shadow.mapSize.height=this._shadowResolution):(this.light.shadow.mapSize.width=2048,this.light.shadow.mapSize.height=2048),nh&&console.log("Override shadow bias?",this._overrideShadowBiasSettings,this.shadowBias,this.shadowNormalBias),this.light.shadow.bias=this.shadowBias,this.light.shadow.normalBias=this.shadowNormalBias,this.updateShadowSoftHard();let t=this.light.shadow.camera;if(t.near=this.shadowNearPlane,this._shadowDistance!==void 0&&typeof this._shadowDistance=="number"?t.far=this._shadowDistance:t.far=$m*Math.abs(this.gameObject.scale.z),this.gameObject.scale.set(1,1,1),this.shadowWidth!==void 0)t.left=-this.shadowWidth/2,t.right=this.shadowWidth/2;else{let i=this.gameObject.scale.x;t.left*=i,t.right*=i}if(this.shadowHeight!==void 0)t.top=this.shadowHeight/2,t.bottom=-this.shadowHeight/2;else{let i=this.gameObject.scale.y;t.top*=i,t.bottom*=i}this.light.shadow.needsUpdate=!0,nh&&this.context.scene.add(new at.CameraHelper(t)),this.isBaked?this.light.removeFromParent():e||this.gameObject.add(this.light)}}*updateMainLightRoutine(){for(;;){this.type===1&&((!this.context.mainLight||this.intensity>this.context.mainLight.intensity)&&(this.context.mainLight=this),yield);break}}updateShadowSoftHard(){!this.light||this.shadows===2||(this.light.shadow.radius=1,this.light.shadow.blurSamples=1)}setDirectionalLight(e){e.add(e.target),e.target.position.set(0,0,-1)}};I(Qe,"allowChangingRendererShadowMapType",!0),v([y()],Qe.prototype,"type",2),v([y(Gx)],Qe.prototype,"color",2),v([y()],Qe.prototype,"shadowNearPlane",1),v([y()],Qe.prototype,"shadowBias",1),v([y()],Qe.prototype,"shadowNormalBias",1),v([y()],Qe.prototype,"shadows",1),v([y()],Qe.prototype,"lightmapBakeType",2),v([y()],Qe.prototype,"intensity",1),v([y()],Qe.prototype,"shadowDistance",1),v([y()],Qe.prototype,"shadowResolution",1);var iF=new at.Vector3(0,0,0);import*as gc from"three";import{Vector3 as Vx}from"three";var ws=P("debugLODs"),zx=P("noLODs");var nn=class{screenRelativeTransitionHeight;distance;renderers};v([y()],nn.prototype,"screenRelativeTransitionHeight",2),v([y()],nn.prototype,"distance",2),v([y()],nn.prototype,"renderers",2);var rh=class{model;renderers;constructor(e,t){this.model=t,this.renderers=[];for(let i of t.renderers){let n=this.findRenderer(i,e.gameObject);n&&n.gameObject?this.renderers.push(n):ws&&console.warn("Renderer not found: "+i,e.gameObject)}}findRenderer(e,t){let i=R.foreachComponent(t,n=>n.guid===e||Object.getPrototypeOf(n)?.guid===e?n:null);if(i)return i;for(let n of t.children){let r=this.findRenderer(e,n);if(r)return r}return null}},_r=class extends M{fadeMode=0;localReferencePoint=void 0;lodCount=0;size=0;animateCrossFading=!1;lodModels;_lods=[];_settings=[];_lodsHandler;start(){if(!zx&&!this._lodsHandler&&!!this.gameObject&&(ws&&console.log(this),this.lodModels&&Array.isArray(this.lodModels))){let e=0,t=[];for(let n of this.lodModels){e=Math.max(n.distance,e);let r=new rh(this,n);this._lods.push(r);for(let s of r.renderers)t.includes(s)||t.push(s)}this._lodsHandler=new Array;for(let n=0;n<t.length;n++){let r=new gc.LOD;this._lodsHandler.push(r),this.gameObject.add(r)}let i=new gc.Object3D;i.name="Cull "+this.name,ws&&console.log(t);for(let n=0;n<t.length;n++){let r=t[n],s=this._lodsHandler[n],a=r.gameObject,c=0,u=0;ws&&console.log(n,a.name);for(let d of this._lods){let h=null;d.renderers.includes(r)?h=a:h=i,ws&&console.log("add",d.model.distance,h.name);let g=d.model.distance;if(u=g-c,c=Math.max(g,c),h.type==="Group"){console.warn("LODGroup: Group is not supported as LOD object",a.name,h);continue}this.onAddLodLevel(s,h,g)}let l=c+u;ws&&console.log("cull",l),this.onAddLodLevel(s,i,l)}}}update(){if(!this.gameObject||!this._lodsHandler)return;let e=this.context.mainCamera;if(!!e)for(let t of this._lodsHandler)t.update(e)}onAddLodLevel(e,t,i){if(t===this.gameObject){console.warn("LODGroup component must be on parent object and not mesh directly at the moment",t.name,t);return}e.addLevel(t,i*this._distanceFactor);let n={lod:e,levelIndex:e.levels.length-1,distance:i};this._settings.push(n)}_distanceFactor=1;distanceFactor(e){if(e!==this._distanceFactor){this._distanceFactor=e;for(let t of this._settings){let i=t.lod.levels[t.levelIndex];i.distance=t.distance*e}}}};v([y(Vx)],_r.prototype,"localReferencePoint",2),v([y(nn)],_r.prototype,"lodModels",2);var Wx=P("logstats"),Es=class extends M{onEnable(){console.log(this),Wx&&this.startCoroutine(this.run(),4)}*run(){for(;this.enabled;){let e=this.context.renderer.info;console.log(e.memory,e.render,e.programs),yield}}};var oh=P("debugnestedgltf"),po=class extends M{filePath;_isLoadingOrDoneLoading=!1;listenToProgress(e){this.filePath?.beginListenDownload(e)}preload(){this.filePath?.preload()}async start(){if(this._isLoadingOrDoneLoading)return;oh&&console.log(this,this.guid);let e=this.gameObject.parent;if(e){this._isLoadingOrDoneLoading=!0;let t=new Ue;t.idProvider=new Se(this.hash(this.guid)),t.parent=e,this.gameObject.updateMatrix();let i=this.gameObject.matrix;oh&&console.log("Load nested:",this.filePath?.uri??this.filePath,this.gameObject.position);let n=await this.filePath?.instantiate?.call(this.filePath,t);n&&(n.matrixAutoUpdate=!1,n.matrix.identity(),n.applyMatrix4(i),n.matrixAutoUpdate=!0,n.layers.disableAll(),n.layers.set(this.layer)),this.destroy(),oh&&console.log("Nested loading done:",this.filePath?.uri??this.filePath,n)}}hash(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}};v([y(tt)],po.prototype,"filePath",2);import{Quaternion as Nx,Euler as Xx,Vector3 as fo,Plane as Qx}from"three";var rn=class extends M{referenceSpace;from;affectPosition=!1;affectRotation=!1;alignLookDirection=!1;levelLookDirection=!1;levelPosition=!1;positionOffset=new fo(0,0,0);rotationOffset=new fo(0,0,0);offset=new fo(0,0,0);update(){if(!this.from)return;var e=B(this.from),t=me(this.from);this.offset.copy(this.positionOffset);let i=this.offset.length();if(this.referenceSpace&&this.offset.transformDirection(this.referenceSpace.matrixWorld).multiplyScalar(i),e.add(this.offset),this.levelPosition&&this.referenceSpace){let a=new Qx(this.gameObject.up,0),c=B(this.referenceSpace);a.setFromNormalAndCoplanarPoint(this.gameObject.up,c);let u=new fo(0,0,0);a.projectPoint(e,u),e.copy(u)}this.affectPosition&&te(this.gameObject,e);let n=new Xx(this.rotationOffset.x,this.rotationOffset.y,this.rotationOffset.z),r=new Nx().setFromEuler(n);this.affectRotation&&$e(this.gameObject,t.multiply(r));let s=new fo;this.from.getWorldDirection(s).multiplyScalar(50),this.levelLookDirection&&(s.y=0),this.alignLookDirection&&this.gameObject.lookAt(s)}};v([y(R)],rn.prototype,"referenceSpace",2),v([y(R)],rn.prototype,"from",2),v([y(fo)],rn.prototype,"positionOffset",2),v([y(fo)],rn.prototype,"rotationOffset",2);import{Vector3 as bc,Quaternion as qx,Matrix4 as sh}from"three";var MF=new bc(1,1,1),IF=new bc(0,0,1),AF=Symbol("emitterMatrix"),xr=class{constructor(e,t,i,n){this.system=e;this.particleSystem=t;this.subSystem=i;this.subParticleSystem=n;this.subParticleSystem&&this.subParticleSystem&&(this.subParticleSystem.onlyUsedByOther=!0);let r=1e3;this._circularBuffer=new Mi(()=>new sh,r)}type="NeedleParticleSubEmitter";q_=new qx;v_=new bc;v2_=new bc;_emitterMatrix=new sh;_circularBuffer;clone(){throw new Error("Method not implemented.")}initialize(e){e.emissionState={burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0},this._emitterMatrix.copy(this.subSystem.matrixWorld).invert().premultiply(this.system.matrixWorld)}update(e,t){if(this.subSystem.currentParticles>=this.subSystem.main.maxParticles||!this.subParticleSystem||!e.emissionState)return;let i=new sh;i.set(1,0,0,e.position.x,0,1,0,e.position.y,0,0,1,e.position.z,0,0,0,1),this.particleSystem.worldSpace||i.multiplyMatrices(this._emitterMatrix,i),this.subParticleSystem.emit(t,e.emissionState,i)}frameUpdate(e){}toJSON(){}};import*as Ts from"three";import{AxesHelper as Yx,Material as eg,Mesh as tg,Object3D as Kx,Quaternion as ah,Vector3 as _a,Vector4 as Jx}from"three";import{BatchedParticleRenderer as Zx,ConstantColor as $x,ConstantValue as ew,ParticleSystem as tw,RenderMode as vc,TrailParticle as ig}from"three.quarks";var cg=P("debugparticles"),wr=class{particleSystem;_deserialize(e){let t=this.particleSystem;t&&!(t instanceof be)&&typeof t.guid=="string"&&(cg&&console.log("DESERIALIZE SUBEMITTER",t),this.particleSystem=void 0,this.particleSystem=R.findByGuid(t.guid,e.scene))}},on=class extends M{renderMode;particleMaterial;trailMaterial;particleMesh;get transparent(){return this.particleMaterial?.transparent??!1}getMaterial(e=!1){return e===!0&&this.trailMaterial?this.trailMaterial:this.particleMaterial}getMesh(){let e=null;return this.particleMesh instanceof tg&&(e=this.particleMesh.geometry),e===null&&(e=new Ts.BoxGeometry(1,1,1)),new tg(e,this.getMaterial())}};v([y()],on.prototype,"renderMode",2),v([y(eg)],on.prototype,"particleMaterial",2),v([y(eg)],on.prototype,"trailMaterial",2);var Cs=class{_curve;constructor(e){this._curve=e}type="function";genValue(e){return this._curve.evaluate(e,Math.random())}toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}};var xa=class{type="value";toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}system;constructor(e){this.system=e}},lh=class extends xa{genValue(){return this.system.textureSheetAnimation.getStartIndex()}},ch=class extends xa{_lastPosition=new _a;_lastDistance=0;update(){let e=B(this.system.gameObject);this._lastDistance=this._lastPosition.distanceTo(e),this._lastPosition.copy(e)}genValue(){if(!this.system.emission.enabled||this.system.currentParticles>=this.system.maxParticles)return 0;let e=this.system.emission.rateOverTime.evaluate(this.system.time/this.system.duration,Math.random());if(this.system.deltaTime>0){let n=this.system.emission.rateOverDistance.evaluate(this.system.time/this.system.duration,Math.random()),s=this._lastDistance/this.system.deltaTime*n;Number.isFinite(s)||(s=0),e+=s}let t=this.system.emission.getBurst();t>0&&(e+=t/this.system.deltaTime);let i=this.system.maxParticles-this.system.currentParticles;return H.clamp(e,0,i/this.system.deltaTime)}},uh=class extends xa{genValue(){return 0}},Er=class{system;get scaleFactorDiff(){return this.system.worldScale.x-this.system.scale}constructor(e){this.system=e}initialize(e){}update(e,t){}frameUpdate(e){}toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}},dh=class extends Er{type="NeedleTextureSheet";update(e,t){let i=this.system.textureSheetAnimation;if(i.enabled){let n=e.age/e.life,r=i.evaluate(n);r!==void 0&&(e.uvTile=r)}}},ng=Symbol("particleRotation"),hh=class extends Er{type="NeedleRotation";initialize(e){e[ng]=Math.random()}update(e,t){if(e.rotation===void 0)return;let i=e.age/e.life;if(typeof e.rotation=="number"&&(this.system.rotationOverLifetime.enabled?e.rotation+=this.system.rotationOverLifetime.evaluate(i,e[ng])*t:this.system.renderer.renderMode===0&&(e.rotation=Math.PI),this.system.rotationBySpeed.enabled)){let n=e.velocity.length();e.rotation+=this.system.rotationBySpeed.evaluate(i,n)*t}}},rg=Symbol("sizeLerpFactor"),ph=class extends Er{type="NeedleSize";initialize(e){e[rg]=Math.random()}update(e,t){if(this.system.renderer.renderMode!==4){let i=e.age/e.life,n=1;this.system.sizeOverLifetime.enabled&&(n*=this.system.sizeOverLifetime.evaluate(i,void 0,e[rg]).x);let r=this.system.worldScale.x/this.system.cameraScale;e.size=e.startSize*n*r}}},yc=Symbol("particleLife"),_c=Symbol("trailLifetime"),og=Symbol("trailStartLength"),fh=class extends Er{type="NeedleTrail";initialize(e){e instanceof ig&&(e[yc]=e.life,e[_c]=e.life,this.system.trails.enabled&&this.system.trails.dieWithParticles===!1&&(e[_c]=this.system.trails.lifetime.evaluate(Math.random(),Math.random()),e.life+=e[_c]),e[og]=e.length)}update(e){if(this.system.trails?.enabled&&e instanceof ig){let t=e,i=e.age/e[yc],n=e.previous.values(),r=e.previous.length;for(let s=0;s<r;s++){let c=n.next().value,u=1-s/(r-1);c.size=this.system.trails.getWidth(e.size,i,u),c.color.copy(e.color),this.system.trails.getColor(c.color,i,u)}if(e.age>e[yc]){e.velocity.set(0,0,0);let s=(e.age-e[yc])/e[_c];t.length=H.lerp(e[og],0,s)}}}},xc=Symbol("startVelocity"),sg=Symbol("gravityModifier"),wc=Symbol("velocity lerp factor"),ag=new _a,OB=new ah,mh=class extends Er{type="NeedleVelocity";_gravityDirection=new _a;initialize(e){let t=1+this.scaleFactorDiff;e.startSpeed=this.system.main.startSpeed.evaluate(Math.random(),Math.random())*t,e.velocity.copy(this.system.shape.getDirection(e.position)).multiplyScalar(e.startSpeed),this.system.inheritVelocity?.enabled&&this.system.inheritVelocity.applyInitial(e.velocity),e[xc]?e[xc].copy(e.velocity):e[xc]=e.velocity.clone();let i=this.system.main.gravityModifier.evaluate(Math.random(),Math.random())/(9.81*2);e[sg]=i,e[wc]=Math.random(),this._gravityDirection.set(0,-1,0),this.system.main.simulationSpace===0&&this._gravityDirection.applyQuaternion(this.system.worldQuaternionInverted)}update(e,t){let i=e[xc],n=e[sg];n!==0&&(ag.copy(this._gravityDirection).multiplyScalar(n),i.add(ag)),e.velocity.copy(i);let r=e.age/e.life;this.system.inheritVelocity?.enabled&&this.system.inheritVelocity.applyCurrent(e.velocity,r,e[wc]);let s=this.system.noise;s.enabled&&s.apply(0,e.position,e.velocity,t,e.age,e.life);let a=this.system.sizeBySpeed;a?.enabled&&(e.size=a.evaluate(e.velocity,r,e[wc],e.size));let c=this.system.colorBySpeed;c?.enabled&&c.evaluate(e.velocity,e[wc],e.color);let u=this.system.velocityOverLifetime;u.enabled&&u.apply(0,e.position,e.velocity,t,e.age,e.life);let l=this.system.limitVelocityOverLifetime;l.enabled&&l.apply(e.position,i,e.velocity,e.size,r,t,1)}},lg=Symbol("colorLerpFactor"),gh=class extends Er{type="NeedleColor";initialize(e){let t=this.system.main.startColor.evaluate(e.age/e.life,Math.random());e.startColor.set(t.r,t.g,t.b,t.alpha),e.color.copy(e.startColor),e[lg]=Math.random()}update(e,t){if(this.system.colorOverLifetime.enabled){let i=e.age/e.life,n=this.system.colorOverLifetime.color.evaluate(i,e[lg]);e.color.set(n.r,n.g,n.b,n.alpha).multiply(e.startColor)}else e.color.copy(e.startColor)}},bh=class{system;emission;get anim(){return this.system.textureSheetAnimation}constructor(e){this.system=e,this.emission=new ch(this.system)}update(){this.emission.update()}autoDestroy;get looping(){return this.system.main.loop}get duration(){return this.system.duration}get shape(){return this.system.shape}get startLife(){return new Cs(this.system.main.startLifetime)}get startSpeed(){return new Cs(this.system.main.startSpeed)}get startRotation(){return new Cs(this.system.main.startRotation)}get startSize(){return new Cs(this.system.main.startSize)}startLength;get startColor(){return new $x(new Jx(1,1,1,1))}get emissionOverTime(){return this.emission}get emissionOverDistance(){return new uh(this.system)}emissionBursts;onlyUsedByOther;behaviors=[];get instancingGeometry(){return this.system.renderer.getMesh().geometry}get renderMode(){if(this.system.trails.enabled===!0)return vc.Trail;switch(this.system.renderer.renderMode){case 0:return vc.BillBoard;case 4:return vc.LocalSpace}return vc.BillBoard}rendererEmitterSettings={startLength:new ew(220),followLocalOrigin:!1};get speedFactor(){return this.system.main.simulationSpeed}get texture(){let e=this.system.renderer.getMaterial(this.system.trails.enabled);if(e&&e.map){let t=e.map;return t.premultiplyAlpha=!1,t.encoding=Ts.LinearEncoding,t}return wl(new Q(1,1,1,1),1)}get startTileIndex(){return new lh(this.system)}get uTileCount(){return this.anim.enabled?this.anim?.numTilesX:void 0}get vTileCount(){return this.anim.enabled?this.anim?.numTilesY:void 0}get renderOrder(){return 1}get blending(){return this.system.renderer.particleMaterial?.blending??Ts.NormalBlending}get transparent(){return this.system.renderer.transparent}get worldSpace(){return this.system.main.simulationSpace===1}},vh=class{burstIndex=0;burstWaveIndex=0;time=0;waitEmiting=0},yh=class extends M{play(e=!1){e&&R.foreachComponent(this.gameObject,t=>{t instanceof yh&&t!==this&&t.play(!1)},!0),this._isPlaying=!0,this._time=0,this._particleSystem&&(this._particleSystem.emissionState.time=0,this._particleSystem.emitEnded=!1),this.emission?.reset()}pause(){this._isPlaying=!1}stop(){this._isPlaying=!1,this._time=0}_state;emit(e){if(this._particleSystem){this.onUpdate(),e=Math.min(e,this.maxParticles-this.currentParticles),this._state||(this._state=new vh),this._state.waitEmiting=e,this._state.time=0;let t=this._particleSystem.emitEnded;this._particleSystem.emitEnded=!1,this._particleSystem.emit(this.deltaTime,this._state,this._particleSystem.emitter.matrixWorld),this._particleSystem.emitEnded=t}}colorOverLifetime;main;emission;sizeOverLifetime;shape;noise;trails;velocityOverLifetime;limitVelocityOverLifetime;inheritVelocity;colorBySpeed;textureSheetAnimation;rotationOverLifetime;rotationBySpeed;sizeBySpeed;get renderer(){return this._renderer}get isPlaying(){return this._isPlaying}get currentParticles(){return this._particleSystem?.particleNum??0}get maxParticles(){return this.main.maxParticles}get time(){return this._time}get duration(){return this.main.duration}get deltaTime(){return this.context.time.deltaTime*this.main.simulationSpeed}get scale(){return this.gameObject.scale.x}get cameraScale(){return this._cameraScale}_cameraScale=1;get container(){return this._container}get worldspace(){return this.main.simulationSpace===1}__worldQuaternion=new ah;get worldQuaternion(){return this.__worldQuaternion}_worldQuaternionInverted=new ah;get worldQuaternionInverted(){return this._worldQuaternionInverted}_worldScale=new _a;get worldScale(){return this._worldScale}_worldPositionFrame=-1;_worldPos=new _a;get worldPos(){return this._worldPositionFrame!==this.context.time.frame&&(this._worldPositionFrame=this.context.time.frame,B(this.gameObject,this._worldPos)),this._worldPos}get matrixWorld(){return this._container.matrixWorld}get isSubsystem(){return this._isUsedAsSubsystem}_renderer;_batchSystem;_particleSystem;_interface;_container;_time=0;_isPlaying=!0;_isUsedAsSubsystem=!1;set bursts(e){for(let t=0;t<e.length;t++){let i=e[t];if(!(i instanceof Fn)){let n=new Fn;jt(n,i),e[t]=n}}this._bursts=e}_bursts;set subEmitterSystems(e){for(let t=0;t<e.length;t++){let i=e[t];if(!(i instanceof wr)){let n=new wr;jt(n,i),e[t]=n}}this._subEmitterSystems=e}_subEmitterSystems;awake(){if(this._subEmitterSystems&&Array.isArray(this._subEmitterSystems))for(let t of this._subEmitterSystems)t._deserialize(this.context);this._renderer=this.gameObject.getComponent(on),this._container=new Kx,this._container.matrixAutoUpdate=!1,this.main.simulationSpace==0?this.gameObject.add(this._container):this.context.scene.add(this._container),this._batchSystem=new Zx,this._batchSystem.name=this.gameObject.name,this._container.add(this._batchSystem),this._interface=new bh(this),this._particleSystem=new tw(this._batchSystem,this._interface),this._particleSystem.addBehavior(new ph(this)),this._particleSystem.addBehavior(new gh(this)),this._particleSystem.addBehavior(new dh(this)),this._particleSystem.addBehavior(new hh(this)),this._particleSystem.addBehavior(new mh(this)),this._particleSystem.addBehavior(new fh(this));let e=this._particleSystem.emitter;this.context.scene.add(e),cg&&(console.log(this),this.gameObject.add(new Yx(1)))}start(){this.addSubParticleSystems()}onEnable(){this.inheritVelocity&&(this.inheritVelocity.system=this),this.play()}onDisable(){}onBeforeRender(){this.onUpdate();let e=this.deltaTime;this._batchSystem?.update(e),this._time+=e,this._time>this.duration&&(this._time=0)}onUpdate(){if(this._bursts&&(this.emission.bursts=this._bursts,delete this._bursts),!this._isPlaying)return;let e=this.context.mainCamera;if(e){let i=Ae(e);this._cameraScale=i.x}let t=this._container;if(this.worldspace&&(t=this.gameObject),me(t,this.__worldQuaternion),this._worldQuaternionInverted.copy(this.__worldQuaternion).invert(),Ae(this.gameObject,this._worldScale),!this.worldspace&&this._container&&this.gameObject?.parent){let i=Ae(this.gameObject.parent);i.x=1/i.x,i.y=1/i.y,i.z=1/i.z,this._container.matrix.identity(),this._container.matrix.scale(i)}this.emission.system=this,this._interface.update(),this.shape.update(this,this.context,this.main.simulationSpace,this.gameObject),this.noise.update(this.context),this.inheritVelocity?.update(this.context),this.velocityOverLifetime.update(this)}addSubParticleSystems(){if(this._subEmitterSystems&&this._particleSystem)for(let e of this._subEmitterSystems){let t=e.particleSystem?._particleSystem;if(t){e.particleSystem._isUsedAsSubsystem=!0;let i=new xr(this,this._particleSystem,e.particleSystem,t);this._particleSystem.addBehavior(i)}}}},be=yh;v([y(Hn)],be.prototype,"colorOverLifetime",2),v([y(ye)],be.prototype,"main",2),v([y(xt)],be.prototype,"emission",2),v([y(Kt)],be.prototype,"sizeOverLifetime",2),v([y(ie)],be.prototype,"shape",2),v([y(K)],be.prototype,"noise",2),v([y(ee)],be.prototype,"trails",2),v([y(He)],be.prototype,"velocityOverLifetime",2),v([y(ue)],be.prototype,"limitVelocityOverLifetime",2),v([y(Jt)],be.prototype,"inheritVelocity",2),v([y(Ti)],be.prototype,"colorBySpeed",2),v([y(_e)],be.prototype,"textureSheetAnimation",2),v([y(Je)],be.prototype,"rotationOverLifetime",2),v([y(Xe)],be.prototype,"rotationBySpeed",2),v([y(ke)],be.prototype,"sizeBySpeed",2);import*as dg from"three";function*ug(o,e=null){let t=e?e.time:G.Current.time,i=t.time;for(;t.time-i<o;)yield}var Pi=class extends M{awake(){this.context.connection.beginListen("joined-room",this.tryAssignColor.bind(this))}_didAssignPlayerColor=!1;onEnable(){this._didAssignPlayerColor||this.startCoroutine(this.waitForConnection())}*waitForConnection(){for(;!this.destroyed&&this.enabled&&(yield ug(.2),!this.tryAssignColor()););}tryAssignColor(){let e=R.getComponentInParent(this.gameObject,le);return e&&e.connectionId?(this._didAssignPlayerColor=!0,this.assignUserColor(e.connectionId),!0):!1}assignUserColor(e){let t=Pi.hashCode(e),i=Pi.colorFromHashCode(t);if(this.gameObject.type==="Mesh"){let n=this.gameObject;this.assignColor(i,e,n)}else if(this.gameObject.children)for(let n of this.gameObject.children){let r=n;r.material&&r.material.color&&this.assignColor(i,e,r)}}assignColor(e,t,i){let n=i.material;!n||(n._playerMaterial!==t&&(n=n.clone(),n._playerMaterial=t,i.material=n),n.color=e)}static hashCode(e){var t=0,i,n;if(e.length===0)return t;for(i=0;i<e.length;i++)n=e.charCodeAt(i),t=(t<<5)-t+n,t|=0;return t}static colorFromHashCode(e){let t=(e&16711680)>>16,i=(e&65280)>>8,n=e&255;return new dg.Color(t/255,i/255,n/255)}};import{RGBELoader as rw}from"three/examples/jsm/loaders/RGBELoader.js";import{EXRLoader as ow}from"three/examples/jsm/loaders/EXRLoader.js";import{EquirectangularRefractionMapping as sw,sRGBEncoding as aw,TextureLoader as fg}from"three";var hg=P("debugautosync"),_h=class{_syncers={};getOrCreateSyncer(e){if(!e.guid)return null;if(this._syncers[e.guid])return this._syncers[e.guid];let t=new xh(e);return this._syncers[e.guid]=t,t}},pg=new _h,xh=class{comp;constructor(e){this.comp=e}hasChanges=!1;changedProperties={};data={};_boundEvent;get networkingKey(){return this.comp.constructor.name}_isReceiving=!1;_isInit=!1;init(e){if(this._isInit)return;this._isInit=!0,this.comp=e,this._boundEvent=this.onHandleSending.bind(this),this.comp.context.post_render_callbacks.push(this._boundEvent),this.comp.context.connection.beginListen(this.networkingKey,this.onHandleReceiving.bind(this));let t=this.comp.context.connection.tryGetState(this.comp.guid);t&&this.onHandleReceiving(t)}notifyChanged(e,t){this._isReceiving||(this.hasChanges=!0,this.changedProperties[e]=t)}onHandleSending(){if(!this.hasChanges)return;this.hasChanges=!1;let e=this.comp.context.connection;if(!e||!e.isConnected){for(let t in this.changedProperties)delete this.changedProperties[t];return}for(let t in this.data)delete this.data[t];this.data.guid=this.comp.guid;for(let t in this.changedProperties){let i=this.changedProperties[t];delete this.changedProperties[t],this.data[t]=i}e.send(this.networkingKey,this.data)}onHandleReceiving(e){if(!this._isInit||!this.comp)return;let t=e.guid;if(!(t&&t!==this.comp.guid)){hg&&console.log("RECEIVED",this.comp.name,this.comp.guid,e);try{this._isReceiving=!0;for(let i in e){if(i==="guid")continue;let n=e[i];this.comp[i]=n}}catch(i){console.error(i)}finally{this._isReceiving=!1}}}};function iw(o,e){let t=e!==o;if(!t&&o&&e){if(Array.isArray(o)&&Array.isArray(e))t=!0;else if(typeof o=="object"&&typeof e=="object"){for(let i of Object.keys(o))if(o[i]!==e[i]){t=!0;break}}}return t}function nw(o){if(o.__autoPropertySyncHandler)return o.__autoPropertySyncHandler;let e=pg.getOrCreateSyncer(o);return e?.init(o),o.__autoPropertySyncHandler=e,e}var Ec=function(o){return function(e,t){let i=null,n=o?e[o]:void 0,r=e,s=r.__internalAwake;hg&&console.log(t);let a=t+"k__BackingField";r.__internalAwake=function(){if(this[a]!==void 0)return;this[a]=this[t],s.call(this),i=pg.getOrCreateSyncer(this),Object.getOwnPropertyDescriptor(this,t)?.set===void 0&&Object.defineProperty(this,t,{set:function(u){let l=this[a];this[a]=u,iw(u,l)&&n?.call(this,u,l)!==!1&&nw(this)?.notifyChanged(t,u)},get:function(){return this[a]},configurable:!0,enumerable:!0}),i?.init(this)}}};var Oi=class extends M{url;allowDrop=!0;background=!0;backgroundBlurriness=0;environment=!0;_loader;_prevLoadedEnvironment;_prevEnvironment=null;_prevBackground=null;onEnable(){this.setSkybox(this.url),this.registerDropEvents()}onDisable(){this.context.scene.environment===this._prevLoadedEnvironment&&(this.context.isInXR||(this.context.scene.environment=this._prevEnvironment,this.context.scene.background=this._prevBackground),this._prevLoadedEnvironment=void 0),this.unregisterDropEvents()}async setSkybox(e){if(!e)return;!e?.endsWith(".hdr")&&!e.endsWith(".exr")&&console.warn("Potentially invalid skybox url",this.url,"on",this.name);{let n=e.endsWith(".exr"),r=e.endsWith(".hdr");n?this._loader=new ow:r?this._loader=new rw:this._loader=new fg}console.log("Loading skybox: "+e);let t=await this._loader.loadAsync(e);if(!t||!this.enabled)return;this.url=e,t.mapping=sw,this._loader instanceof fg&&(t.encoding=aw),this._prevBackground=this.context.scene.background,this._prevEnvironment=this.context.scene.environment,console.log("Set skybox",this.url),this.environment&&(this.context.scene.environment=t),this.background&&(this.context.scene.background=t),this._prevLoadedEnvironment=t;let i=e.lastIndexOf("/");t.name=e.substring(i>=0?i+1:0),this.context.scene.backgroundBlurriness=this.backgroundBlurriness}dragOverEvent;dropEvent;registerDropEvents(){this.dragOverEvent||(this.dragOverEvent=e=>{if(!!this.allowDrop&&!!e.dataTransfer)for(let t of e.dataTransfer.types)t==="text/uri-list"&&e.preventDefault()},this.dropEvent=e=>{if(!!this.allowDrop&&(e.preventDefault(),!!e.dataTransfer)){for(let t of e.dataTransfer.types)if(t==="text/uri-list"){let i=e.dataTransfer.getData(t);console.log(t,i);let n=new RegExp(/polyhaven.com\/asset_img\/.+?\/(?<name>.+)\.png/).exec(i)?.groups?.name;if(n||(n=new RegExp(/polyhaven\.com\/a\/(?<name>.+)/).exec(i)?.groups?.name),console.log(n),n){let r="https://dl.polyhaven.org/file/ph-assets/HDRIs/exr/1k/"+n+"_1k.exr";this.setSkybox(r)}else console.warn("Could not resolve skybox name from dropped url",i)}}},this.context.domElement.addEventListener("dragover",this.dragOverEvent),this.context.domElement.addEventListener("drop",this.dropEvent))}unregisterDropEvents(){!this.dragOverEvent||(this.context.domElement.removeEventListener("dragover",this.dragOverEvent),this.context.domElement.removeEventListener("drop",this.dropEvent))}};v([Ec("setSkybox"),y()],Oi.prototype,"url",2),v([y()],Oi.prototype,"allowDrop",2),v([y()],Oi.prototype,"background",2),v([y()],Oi.prototype,"backgroundBlurriness",2),v([y()],Oi.prototype,"environment",2);import*as Rc from"three";import{Object3D as hw,ShaderMaterial as pw,Texture as fw,Vector2 as wh,Vector4 as mw}from"three";function lw(){return new Promise((o,e)=>{let i=()=>{i!=null&&(document.removeEventListener("pointerdown",i),document.removeEventListener("click",i),document.removeEventListener("dragstart",i),document.removeEventListener("touchstart",i),o())};document.addEventListener("pointerdown",i),document.addEventListener("click",i),document.addEventListener("dragstart",i),document.addEventListener("touchstart",i)})}async function mg(o){await lw(),o()}import{PlaneGeometry as cw,MeshBasicMaterial as uw,Mesh as dw}from"three";var Cc=class{static createPrimitive(e,t){let i;switch(e){case 0:let n=new cw(1,1,1,1),r=t?.material??new uw({color:16777215});i=new dw(n,r)}return t?.name&&(i.name=t.name),i}};var Tc=P("debugvideo");var gg=(n=>(n[n.CameraFarPlane=0]="CameraFarPlane",n[n.CameraNearPlane=1]="CameraNearPlane",n[n.RenderTexture=2]="RenderTexture",n[n.MaterialOverride=3]="MaterialOverride",n))(gg||{}),Re=class extends M{renderer=null;playOnAwake=!0;playOnEnable;aspectMode=0;renderMode;targetMaterialProperty;targetMaterialRenderer;targetTexture;time=0;_playbackSpeed=1;get playbackSpeed(){return this._videoElement?.playbackRate??this._playbackSpeed}set playbackSpeed(e){this._playbackSpeed=e,this._videoElement&&(this._videoElement.playbackRate=e)}_isLooping=!1;get isLooping(){return this._videoElement?.loop??this._isLooping}set isLooping(e){this._isLooping=e,this._videoElement&&(this._videoElement.loop=e)}get currentTime(){return this._videoElement?.currentTime??this.time}set currentTime(e){this._videoElement?this._videoElement.currentTime=e:this.time=e}get isPlaying(){let e=this._videoElement;return e?e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>e.HAVE_CURRENT_DATA:!1}get crossOrigin(){return this._videoElement?.crossOrigin??this._crossOrigin}set crossOrigin(e){this._crossOrigin=e,this._videoElement&&(e!==null?this._videoElement.setAttribute("crossorigin",e):this._videoElement.removeAttribute("crossorigin"))}get videoTexture(){return this._videoTexture}get videoElement(){return this._videoElement}_crossOrigin="anonymous";audioOutputMode=1;source;clip=null;url=null;_videoElement=null;_videoTexture=null;videoMaterial=null;_isPlaying=!1;wasPlaying=!1;setVideo(e){this.clip=e,this.source=0,this._videoElement?(this._videoElement.srcObject=e,this._isPlaying&&this._videoElement.play(),this.updateAspect()):this.create(!0)}setClipURL(e){this.url!==e&&(this.url=e,this.source=1,Tc&&console.log("set url",e),this._videoElement?(this._videoElement.src=e,this._isPlaying&&(this.stop(),this.play())):this.create(!0))}awake(){this.create(this.playOnAwake),window.addEventListener("visibilitychange",e=>{switch(document.visibilityState){case"hidden":this.wasPlaying=this._isPlaying,this.pause();break;case"visible":this.wasPlaying&&this.play();break}})}onEnable(){this.playOnEnable===!0&&this.handleBeginPlaying(!0),this.screenspace?this._overlay?.start():this._overlay?.stop()}onDisable(){this.pause()}onDestroy(){this._videoElement&&(this._videoElement.parentElement?.removeChild(this._videoElement),this._videoElement=null),this._videoTexture&&(this._videoTexture.dispose(),this._videoTexture=null)}_receivedInput=!1;constructor(){super(),mg(()=>{this._receivedInput=!0,this.updateVideoElementSettings()}),this._targetObjects=[],P("videoscreenspace")&&window.addEventListener("keydown",e=>{e.key==="f"&&(this.screenspace=!this.screenspace)})}play(){!this._videoElement||this._isPlaying&&!this._videoElement?.ended&&!this._videoElement?.paused||(this._isPlaying=!0,this._receivedInput||(this._videoElement.muted=!0),this.updateVideoElementSettings(),this._videoElement?.play().catch(e=>{console.warn(e)}),Tc&&console.log("play",this._videoElement))}stop(){this._isPlaying=!1,this._videoElement&&(this._videoElement.currentTime=0,this._videoElement.pause())}pause(){this._isPlaying=!1,this._videoElement?.pause()}create(e){let t;switch(this.source){case 0:t=this.clip;break;case 1:t=this.url;break}if(!!t){if(this._videoElement||(this._videoElement=this.createVideoElement(),this.context.domElement?.prepend(this._videoElement),this.updateVideoElementStyles()),typeof t=="string"){this._videoElement.src=t;let i=this._videoElement.captureStream?.call(this._videoElement);this.clip=i}else this._videoElement.srcObject=t;this._videoTexture||(this._videoTexture=new Rc.VideoTexture(this._videoElement)),this._videoTexture.flipY=!1,this._videoTexture.encoding=Rc.sRGBEncoding,this.handleBeginPlaying(e),Tc&&console.log(this)}}updateAspect(){this.aspectMode!==0&&this.startCoroutine(this.updateAspectImpl())}_overlay=null;get screenspace(){return this._overlay?.enabled??!1}set screenspace(e){if(e){if(!this._videoTexture)return;this._overlay||(this._overlay=new Eh(this.context)),this._overlay.add(this._videoTexture)}else this._overlay?.remove(this._videoTexture);this._overlay&&(this._overlay.enabled=e)}_targetObjects;createVideoElement(){let e=document.createElement("video");return this._crossOrigin&&e.setAttribute("crossorigin",this._crossOrigin),Tc&&console.log("create video elment",e),e}handleBeginPlaying(e){if(!this.enabled||!this._videoElement)return;this._targetObjects.length=0;let t=this.gameObject;switch(this.renderMode){case 3:t=this.targetMaterialRenderer?.gameObject,t||(t=R.getComponent(this.gameObject,ae)?.gameObject);break;case 2:console.error("VideoPlayer renderTexture not implemented yet. Please use material override instead");return}if(!t){console.error("Missing target for video material renderer",this.name,gg[this.renderMode],this);return}let i=t.material;if(i)if(this._targetObjects.push(t),i!==this.videoMaterial&&(this.videoMaterial=i.clone(),t.material=this.videoMaterial),!this.targetMaterialProperty)this.videoMaterial.map=this._videoTexture;else switch(this.targetMaterialProperty){default:this.videoMaterial.map=this._videoTexture;break}else{console.warn("Can not play video, no material found, this might be a multimaterial case which is not supported yet");return}this.updateVideoElementSettings(),this.updateVideoElementStyles(),e&&this.play()}updateVideoElementSettings(){!this._videoElement||(this._videoElement.loop=this._isLooping,this._videoElement.currentTime=this.currentTime,this._videoElement.playbackRate=this._playbackSpeed,this._videoElement.playsInline=!0,this._videoElement.muted=!this._receivedInput&&this.audioOutputMode!==0,(this.playOnAwake||this.playOnEnable)&&(this._videoElement.autoplay=!0))}updateVideoElementStyles(){!this._videoElement||(this._videoElement.style.userSelect="none",this._videoElement.style.visibility="hidden",this._videoElement.style.display="none",this.updateAspect())}_updateAspectRoutineId=-1;*updateAspectImpl(){let e=++this._updateAspectRoutineId,t=void 0,i=this.clip;for(;e===this._updateAspectRoutineId&&this.aspectMode!==0&&this.clip&&i===this.clip&&this._isPlaying;){if(!i||typeof i=="string")return;let n;for(let r of i.getVideoTracks()){let s=r.getSettings();if(s&&s.width&&s.height){n=s.width/s.height;break}else n=this.context.renderer.domElement.clientWidth/this.context.renderer.domElement.clientHeight}if(n===void 0){for(let r=0;r<10;r++)yield;if(!this.isPlaying)break;continue}if(t===n){yield;continue}for(let r of this._targetObjects){let s=1;if(r.parent){let a=Ae(r.parent);s=a.x/a.y}switch(this.aspectMode){case 1:r.scale.y=1/n*r.scale.x*s;break;case 2:r.scale.x=n*r.scale.y*s;break}}for(let r=0;r<3;r++)yield}}};v([y(hw)],Re.prototype,"renderer",2),v([y()],Re.prototype,"playOnAwake",2),v([y()],Re.prototype,"playOnEnable",2),v([y()],Re.prototype,"aspectMode",2),v([y()],Re.prototype,"renderMode",2),v([y()],Re.prototype,"targetMaterialProperty",2),v([y(ae)],Re.prototype,"targetMaterialRenderer",2),v([y(fw)],Re.prototype,"targetTexture",2),v([y()],Re.prototype,"time",2),v([y()],Re.prototype,"playbackSpeed",1),v([y()],Re.prototype,"isLooping",1);var Eh=class{context;constructor(e){this.context=e,this._input=new Ch(this)}get enabled(){return this._isInScreenspaceMode}set enabled(e){e?this.start():this.stop()}add(e){this._videos.indexOf(e)===-1&&this._videos.push(e)}remove(e){if(!e)return;let t=this._videos.indexOf(e);t>=0&&this._videos.splice(t,1)}start(){if(this._isInScreenspaceMode||this._videos.length<0)return;let e=this._videos[this._videos.length-1];if(!e)return;if(this._isInScreenspaceMode=!0,!this._screenspaceModeQuad){if(this._screenspaceModeQuad=Cc.createPrimitive(0,{material:new Th(e)}),!this._screenspaceModeQuad)return;this._screenspaceModeQuad.geometry.scale(2,2,2)}let t=this._screenspaceModeQuad;this.context.scene.add(t),this.updateScreenspaceMaterialUniforms();let i=t.material;i?.reset(),this._input?.enable(i)}stop(){this._isInScreenspaceMode=!1,this._screenspaceModeQuad&&(this._input?.disable(),this._screenspaceModeQuad.removeFromParent())}updateScreenspaceMaterialUniforms(){let e=this._screenspaceModeQuad?.material;!e||(e.screenAspect=this.context.domElement.clientWidth/this.context.domElement.clientHeight)}_videos=[];_screenspaceModeQuad;_isInScreenspaceMode=!1;_input},Ch=class{_onResizeScreenFn;_onKeyUpFn;_onMouseWheelFn;context;overlay;constructor(e){this.overlay=e,this.context=e.context}_material;enable(e){this._material=e,window.addEventListener("resize",this._onResizeScreenFn=()=>{this.overlay.updateScreenspaceMaterialUniforms()}),window.addEventListener("keyup",this._onKeyUpFn=n=>{n.key==="Escape"&&this.overlay.stop()}),window.addEventListener("wheel",this._onMouseWheelFn=n=>{this.overlay.enabled&&(e.zoom+=n.deltaY*5e-4,n.preventDefault())},{passive:!1});let t=new wh;window.addEventListener("mousemove",n=>{if(this.overlay.enabled&&this.context.input.getPointerPressed(0)){let r=new wh(n.movementX,n.movementY);r.x/=this.context.domElement.clientWidth,r.y/=this.context.domElement.clientHeight,t.set(r.x,r.y),t.multiplyScalar(e.zoom/-this.context.time.deltaTime*.01),e.offset=e.offset.add(t)}}),window.addEventListener("pointermove",n=>{this.overlay.enabled&&this.context.input.getPointerPressed(0)&&this.context.input.getTouchesPressedCount()===1&&(t.set(n.movementX,n.movementY),t.multiplyScalar(e.zoom*-this.context.time.deltaTime*.05),e.offset=e.offset.add(t))});let i=0;window.addEventListener("touchstart",n=>{if(n.touches.length<2){this.context.time.time-i<.3&&this.overlay.stop(),i=this.context.time.time;return}this._isPinching=!0,this._lastPinch=0}),window.addEventListener("touchmove",n=>{if(!this._isPinching||!this._material)return;let r=n.touches[0],s=n.touches[1],a=r.clientX-s.clientX,c=r.clientY-s.clientY,u=Math.sqrt(a*a+c*c);if(this._lastPinch!==0){let l=u-this._lastPinch;this._material.zoom-=l*.004}this._lastPinch=u}),window.addEventListener("touchend",()=>{this._isPinching=!1})}_isPinching=!1;_lastPinch=0;disable(){this._onResizeScreenFn&&(window.removeEventListener("resize",this._onResizeScreenFn),this._onResizeScreenFn=void 0),this._onKeyUpFn&&(window.removeEventListener("keyup",this._onKeyUpFn),this._onKeyUpFn=void 0),this._onMouseWheelFn&&(window.removeEventListener("wheel",this._onMouseWheelFn),this._onMouseWheelFn=void 0)}},Th=class extends pw{set screenAspect(e){this.uniforms.screenAspect.value=e,this.needsUpdate=!0}set offset(e){let t=this.uniforms.offsetScale.value;t.x=e.x,t.y=e.y,this.uniforms.offsetScale.value=t,this.needsUpdate=!0}_offset=new wh;get offset(){let e=this.uniforms.offsetScale.value;return this._offset.set(e.x,e.y),this._offset}set zoom(e){let t=this.uniforms.offsetScale.value;e<.001&&(e=.001),t.z=e,this.needsUpdate=!0}get zoom(){return this.uniforms.offsetScale.value.z}reset(){this.offset=this.offset.set(0,0),this.zoom=1,this.needsUpdate=!0}constructor(e){super(),this.uniforms={map:{value:e},screenAspect:{value:1},offsetScale:{value:new mw(0,0,1,1)}},this.vertexShader=`
247
+ `,defines:{USE_LIGHTMAP:""}})}};import{AxesHelper as Cx,Object3D as Tx,Vector4 as Rx}from"three";import{EquirectangularReflectionMapping as yx,sRGBEncoding as _x,Vector3 as Nm}from"three";var hs=P("debugreflectionprobe"),Xm=P("noreflectionprobe"),xx=Symbol("reflectionProbeKey"),wx=Symbol("original material"),$i=class extends M{static get(e,t,i){if(!e||e.isObject3D!==!0||Xm)return null;let n=$i._probes.get(t);if(n){for(let r of n)if(r.__didAwake||r.__internalAwake(),r.enabled&&r.isInBox(e,i?1e-8:void 0))return hs&&console.log("Found reflection probe",e.name,r.name),r}return hs&&console.debug("Did not find reflection probe",e.name,i,e),null}_texture;set texture(e){this._texture=e}get texture(){return this._texture}center;size;_boxHelper;isInBox(e,t){return this._boxHelper?.isInBox(e,t)}constructor(){super(),$i._probes.has(this.context)||$i._probes.set(this.context,[]),$i._probes.get(this.context)?.push(this)}awake(){this._boxHelper=this.gameObject.addNewComponent(We),this._boxHelper.updateBox(!0),hs&&this._boxHelper.showHelper(5592320,!0),this.texture&&(this.texture.mapping=yx,this.texture.encoding=_x,this.texture.needsUpdate=!0)}onDestroy(){let e=$i._probes.get(this.context);if(e){let t=e.indexOf(this);t>=0&&e.splice(t,1)}}onSet(e){if(Xm||e.sharedMaterials?.length<=0||!this.texture)return;let t=$i._rendererMaterialsCache.get(e);t||(t=[],$i._rendererMaterialsCache.set(e,t));for(let i=0;i<e.sharedMaterials.length;i++){let n=e.sharedMaterials[i];if(!n||n.envMap===void 0||n.envMap===this.texture)continue;let r=t[i];if(!r||r.material!==n||r.material.version!==n.version){let a=n.clone();r?(r.copy=a,r.material=n):(r={material:n,copy:a},t.push(r)),a[xx]=this,a[wx]=n,a.envMap=this.texture,hs&&console.log("Set reflection",e.name,e.guid)}let s=r?.copy;e.sharedMaterials[i]=s}}onUnset(e){let t=$i._rendererMaterialsCache.get(e);if(t)for(let i=0;i<t.length;i++){let n=t[i];e.sharedMaterials[i]=n.material}}},Zt=$i;I(Zt,"_probes",new Map),I(Zt,"_rendererMaterialsCache",new Map),v([y(Nm)],Zt.prototype,"center",2),v([y(Nm)],Zt.prototype,"size",2);import{Layers as mH}from"three";var Ex=Symbol("customVisibilityFlag");function pc(o,e){o.layers[Ex]=e}var bH=Symbol("DidPatchLayers");var Qm=P("noInstancing"),qm=!!P("debuglightmaps"),Sx=P("debuginstancing"),Px=P("debugprogressive"),Ox=P("noprogressive"),kx=P("wireframe");var ps=class{path=null;asset=null;default};var Jd=class{_renderer;_targets=[];is(e){return this._renderer===e}constructor(e){this._renderer=e;let t=this.setMaterial.bind(this),i=this.getMaterial.bind(this),n=e.gameObject;if(this._targets=[],n)switch(n.type){case"Group":this._targets=[...n.children];break;case"SkinnedMesh":case"Mesh":this._targets.push(n);break}return new Proxy(this,{get(r,s){if(typeof s=="string"){let a=parseInt(s);if(!isNaN(a))return i(a)}return r[s]},set(r,s,a){return typeof s=="string"&&t(a,Number.parseInt(s)),Reflect.set(r,s,a)}})}get length(){return this._targets.length}setMaterial(e,t){if(t<0||t>=this._targets.length)return;let i=this._targets[t];!i||i.material===void 0||(i.material=e)}getMaterial(e){if(e<0)return null;let t=this._targets;if(e>=t.length)return null;let i=t[e];return i?i.material:null}},mc=class extends M{static setVisible(e,t){pc(e,t)}receiveShadows=!1;shadowCastingMode=Zd.Off;lightmapIndex=-1;lightmapScaleOffset=new en.Vector4(1,1,0,0);enableInstancing=void 0;renderOrder=void 0;allowOcclusionWhenDynamic=!0;probeAnchor;reflectionProbeUsage=0;_lightmaps;get sharedMesh(){if(this.gameObject.type==="Mesh")return this.gameObject;if(this.gameObject.type==="SkinnesMesh")return this.gameObject;if(this.gameObject.type==="Group")return this.gameObject.children[0]}get sharedMaterial(){return this.sharedMaterials[0]}set sharedMaterial(e){this.sharedMaterials[0]=e}get material(){return this.sharedMaterials[0]}set material(e){this.sharedMaterials[0]=e}_sharedMaterials;get sharedMaterials(){return(!this._sharedMaterials||!this._sharedMaterials.is(this))&&(this._sharedMaterials=new Jd(this)),this._sharedMaterials}static get shouldSuppressInstancing(){return Qm}_lightmapTextureOverride=void 0;get lightmap(){return this._lightmaps?.length?this._lightmaps[0].lightmap:null}set lightmap(e){if(this._lightmapTextureOverride=e,e===void 0&&(e=this.context.lightmaps.tryGetLightmap(this.sourceId,this.lightmapIndex)),this._lightmaps?.length)for(let t of this._lightmaps)t.lightmap=e}get hasLightmap(){let e=this.lightmap;return e!=null}allowProgressiveLoading=!0;registering(){this.enabled||this.setVisibility(!1)}awake(){this.clearInstancingState(),this.probeAnchor&&hs&&this.probeAnchor.add(new Cx(.2)),this._reflectionProbe=null;let e=this.gameObject.type;if(this.isMultiMaterialObject(this.gameObject)){for(let t of this.gameObject.children)this.context.addBeforeRenderListener(t,this.onBeforeRenderThree.bind(this)),t.layers.mask=this.gameObject.layers.mask;if(this.renderOrder!==void 0){let t=0;for(let i=0;i<this.gameObject.children.length;i++){let n=this.gameObject.children[i];if(!(n.type!=="Mesh"||R.getComponent(n,mc))){if(this.renderOrder.length<=t){console.error("Incorrect element count",this);break}n.renderOrder=this.renderOrder[t],t+=1}}}}else this.isMeshOrSkinnedMesh(this.gameObject)&&(this.context.addBeforeRenderListener(this.gameObject,this.onBeforeRenderThree.bind(this)),this.renderOrder!==void 0&&this.renderOrder.length>0&&(this.gameObject.renderOrder=this.renderOrder[0]));if(this.lightmapIndex>=0){let t=this._lightmapTextureOverride!==void 0?this._lightmapTextureOverride:this.context.lightmaps.tryGetLightmap(this.sourceId,this.lightmapIndex);if(t){if(this._lightmaps=[],e==="Mesh"){let i=this.gameObject.material;if(i?.isMeshBasicMaterial)i&&console.warn("Lightmapping is not supported on MeshBasicMaterial",i.name);else{let n=new Un(this.gameObject,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,qm)}}else if(this.isMultiMaterialObject(this.gameObject)&&this.sharedMaterials.length>0){for(let i of this.gameObject.children)if(!i.material?.isMeshBasicMaterial){let n=new Un(i,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,qm),n.bindOnBeforeRender()}}}}if(kx)for(let t=0;t<this.sharedMaterials.length;t++){let i=this.sharedMaterials[t];i&&(i.wireframe=!0)}}_isInstancingEnabled=!1;handles=void 0;prevLayers=void 0;clearInstancingState(){this._isInstancingEnabled=!1,this.handles=void 0,this.prevLayers=void 0}setInstancingEnabled(e){if(this._isInstancingEnabled===e)return e&&(this.handles===void 0||this.handles!=null&&this.handles.length>0);if(this._isInstancingEnabled=e,e){if(this.handles===void 0){if(this.handles=Mx.setup(this.gameObject,this.context,null,{rend:this,foundMeshes:0}),this.handles)return R.markAsInstancedRendered(this.gameObject,!0),!0}else if(this.handles!==null){for(let t of this.handles)t.updateInstanceMatrix(!0),t.add();return R.markAsInstancedRendered(this.gameObject,!0),!0}}else{if(this.handles)for(let t of this.handles)t.remove();return!0}return!1}start(){if(this.enableInstancing&&!Qm&&this.setInstancingEnabled(!0),this.gameObject.frustumCulled=this.allowOcclusionWhenDynamic,this.isMultiMaterialObject(this.gameObject))for(let e=0;e<this.gameObject.children.length;e++){let t=this.gameObject.children[e];t.frustumCulled=this.allowOcclusionWhenDynamic}}onEnable(){this.setVisibility(!0),this._isInstancingEnabled?this.setInstancingEnabled(!0):this.enabled&&this.applyStencil(),this.updateReflectionProbe()}onDisable(){this.setVisibility(!1),this.handles&&this.handles.length>0&&this.setInstancingEnabled(!1)}onDestroy(){this.handles=null}applyStencil(){Xr.applyStencil(this)}onBeforeRender(){if(!this.gameObject)return;mc.envmap=this.scene.environment;let e=this.gameObject[sl]===!0||this.gameObject.matrixWorldNeedsUpdate;if(this.isMultiMaterialObject(this.gameObject)&&this.gameObject.children?.length>0)for(let t of this.gameObject.children)this.applySettings(t);else this.applySettings(this.gameObject);if(e&&(delete this.gameObject[sl],this.handles)){for(let i=this.handles.length-1;i>=0;i--)this.handles[i].updateInstanceMatrix();this.gameObject.matrixWorldNeedsUpdate=!1}if(this.handles&&this.handles.length<=0&&R.markAsInstancedRendered(this.gameObject,!1),this._isInstancingEnabled&&this.handles)for(let t=0;t<this.handles.length;t++){let i=this.handles[t];this.prevLayers||(this.prevLayers=[]);let n=i.object.layers.mask;t>=this.prevLayers.length?this.prevLayers.push(n):this.prevLayers[t]=n,i.object.layers.disableAll()}this.reflectionProbeUsage!==0&&this._reflectionProbe&&this._reflectionProbe.onSet(this)}onBeforeRenderThree(e,t,i,n,r,s){if(!Ox&&r._didRequestTextureLOD===void 0&&this.allowProgressiveLoading&&(r._didRequestTextureLOD=0,Px&&console.log("Load material LOD",r.name),fi.assignTextureLOD(this.context,this.sourceId,r)),r.envMapIntensity!==void 0){let a=this.hasLightmap?Math.PI:1;r.envMapIntensity=Math.max(0,this.context.rendererData.environmentIntensity/a)}if(this._lightmaps)for(let a of this._lightmaps)a.onBeforeRenderThree(r)}onAfterRender(){if(this._isInstancingEnabled&&this.handles&&this.prevLayers&&this.prevLayers.length>=this.handles.length)for(let e=0;e<this.handles.length;e++){let t=this.handles[e];t.object.layers.mask=this.prevLayers[e]}this.reflectionProbeUsage!==0&&this._reflectionProbe&&this._reflectionProbe.onUnset(this)}applySettings(e){e.receiveShadow=this.receiveShadows,this.shadowCastingMode==Zd.On?e.castShadow=!0:e.castShadow=!1}_reflectionProbe=null;updateReflectionProbe(){if(this._reflectionProbe=null,this.reflectionProbeUsage!==0){if(!this.probeAnchor)return;this.startCoroutine(this._updateReflectionProbe(),2)}}*_updateReflectionProbe(){let e=this.probeAnchor||this.gameObject,t=!!this.probeAnchor;this._reflectionProbe=Zt.get(e,this.context,t)}setVisibility(e){if(!this.isMultiMaterialObject(this.gameObject))pc(this.gameObject,e);else for(let t of this.gameObject.children)this.isMeshOrSkinnedMesh(t)&&pc(t,e)}isMultiMaterialObject(e){return e.type==="Group"}isMeshOrSkinnedMesh(e){return e.type==="Mesh"||e.type==="SkinnedMesh"}},ae=mc;I(ae,"envmap",null),v([y()],ae.prototype,"receiveShadows",2),v([y()],ae.prototype,"shadowCastingMode",2),v([y()],ae.prototype,"lightmapIndex",2),v([y(Rx)],ae.prototype,"lightmapScaleOffset",2),v([y()],ae.prototype,"enableInstancing",2),v([y()],ae.prototype,"renderOrder",2),v([y()],ae.prototype,"allowOcclusionWhenDynamic",2),v([y(Tx)],ae.prototype,"probeAnchor",2),v([y()],ae.prototype,"reflectionProbeUsage",2);var co=class extends ae{},fs=class extends co{awake(){super.awake(),this.allowOcclusionWhenDynamic=!1}},Zd=(n=>(n[n.Off=0]="Off",n[n.On=1]="On",n[n.TwoSided=2]="TwoSided",n[n.ShadowsOnly=3]="ShadowsOnly",n))(Zd||{}),$d=class{objs=[];setup(e,t,i,n,r=0){let s=this.tryCreateOrAddInstance(e,t,n);if(s)return i===null&&(i=[]),i.push(s),i;if(r<=0&&e.type!=="Mesh"){let a=r+1;for(let c of e.children)i=this.setup(c,t,i,n,a)}return i}tryCreateOrAddInstance(e,t,i){if(e.type==="Mesh"){let n=i.foundMeshes;if(i.foundMeshes+=1,!i.rend.enableInstancing||n>=i.rend.enableInstancing.length||!i.rend.enableInstancing[n])return null;let r=e,s=r.geometry,a=r.material;for(let u of this.objs)if(!u.isFull()&&u.geo===s&&u.material===a)return u.addInstance(r);let c=new fc(e.name,s,a,200,t);return this.objs.push(c),c.addInstance(r)}return null}},Mx=new $d,eh=class{get name(){return this.object.name}instanceIndex=-1;object;instancer;constructor(e,t,i){this.instanceIndex=e,this.object=t,this.instancer=i,R.markAsInstancedRendered(t,!0)}updateInstanceMatrix(e=!1){this.instanceIndex<0||(this.object.updateWorldMatrix(!0,e),this.instancer.updateInstance(this.object.matrixWorld,this.instanceIndex))}add(){this.instanceIndex>=0||this.instancer.add(this)}remove(){this.instanceIndex<0||this.instancer.remove(this)}},th=class{name="";geo;material;get currentCount(){return this.inst.count}context;inst;handles=[];maxCount;isFull(){return this.currentCount>=this.maxCount}constructor(e,t,i,n,r){this.name=e,this.geo=t,this.material=i,this.context=r,this.maxCount=n,Sx&&(i=new en.MeshBasicMaterial({color:this.randomColor()})),this.inst=new en.InstancedMesh(t,i,n),this.inst.count=0,this.inst.layers.set(2),this.inst.visible=!0,this.context.scene.add(this.inst)}randomColor(){return new en.Color(Math.random(),Math.random(),Math.random())}addInstance(e){if(this.currentCount>=this.maxCount)return console.error("TOO MANY INSTANCES - resize is not yet implemented!",this.inst.count),null;let t=new eh(-1,e,this);return this.add(t),t}add(e){e.instanceIndex<0&&(e.instanceIndex=this.currentCount,e.instanceIndex>=this.handles.length?this.handles.push(e):this.handles[e.instanceIndex]=e),e.object.updateWorldMatrix(!0,!0),this.inst.setMatrixAt(e.instanceIndex,e.object.matrixWorld),this.inst.instanceMatrix.needsUpdate=!0,this.inst.count+=1,this.inst.count>0&&(this.inst.visible=!0)}remove(e){if(!e||e.instanceIndex<0||e.instanceIndex>=this.handles.length||this.inst.count<=0)return;if(this.handles[e.instanceIndex]!==e){console.error("instance handle is not part of renderer, was it removed before?",e.instanceIndex,this.name);let i=this.handles.indexOf(e);if(i<0)return;e.instanceIndex=i}if(this.handles[e.instanceIndex]=null,this.inst.setMatrixAt(e.instanceIndex,th.nullMatrix),!(e.instanceIndex>=this.currentCount-1)&&this.currentCount>0){let i=this.handles[this.currentCount-1];i&&(i.instanceIndex=e.instanceIndex,i.updateInstanceMatrix(),this.handles[e.instanceIndex]=i,this.handles[this.currentCount-1]=null)}this.inst.count>0&&(this.inst.count-=1),e.instanceIndex=-1,this.inst.count<=0&&(this.inst.visible=!1),this.inst.instanceMatrix.needsUpdate=!0}updateInstance(e,t){this.inst.setMatrixAt(t,e),this.inst.instanceMatrix.needsUpdate=!0}},fc=th;I(fc,"nullMatrix",new en.Matrix4);import{Vector3 as Ym}from"three";var ba=class extends M{connectedBody;get rigidBody(){return this._rigidBody}_rigidBody=null;onEnable(){this._rigidBody||(this._rigidBody=this.gameObject.getComponent(J)),this.rigidBody&&this.connectedBody&&this.startCoroutine(this.create())}*create(){yield,this.rigidBody&&this.connectedBody&&this.createJoint(this.rigidBody,this.connectedBody)}};v([y(J)],ba.prototype,"connectedBody",2);var ms=class extends ba{createJoint(e,t){this.context.physics.addFixedJoint(e,t)}},_r=class extends ba{anchor;axis;createJoint(e,t){this.axis&&this.anchor&&this.context.physics.addHingeJoint(e,t,this.anchor,this.axis)}};v([y(Ym)],_r.prototype,"anchor",2),v([y(Ym)],_r.prototype,"axis",2);import{FlyControls as Ix}from"three/examples/jsm/controls/FlyControls.js";var gs=class extends M{_controls=null;onEnable(){let e=R.getComponent(this.gameObject,Z)?.cam;this._controls=new Ix(e,this.context.renderer.domElement),this._controls.rollSpeed=.5,this._controls.movementSpeed=3,this._controls.dragToLook=!0}onDisable(){this._controls?.dispose(),this._controls=null}update(){this._controls&&this._controls.update(this.context.time.deltaTime)}};import{Color as Ax,Fog as Dx}from"three";var Gn=class extends M{get fog(){return this._fog||(this._fog=new Dx(0,0,50)),this._fog}get mode(){return 1}set near(e){this.fog.near=e}get near(){return this.fog.near}set far(e){this.fog.far=e}get far(){return this.fog.far}set color(e){this.fog.color.copy(e)}get color(){return this.fog.color}_fog;onEnable(){this.scene.fog=this.fog}onDisable(){this.scene.fog===this._fog&&(this.scene.fog=null)}};v([y()],Gn.prototype,"near",1),v([y()],Gn.prototype,"far",1),v([y(Ax)],Gn.prototype,"color",1);import{GLTFExporter as Hx}from"three/examples/jsm/exporters/GLTFExporter.js";import{BufferAttribute as ih,Matrix4 as Lx,Vector3 as Km,Quaternion as jx}from"three";var va=class{constructor(e){this.writer=e,this.name="EXT_mesh_gpu_instancing"}writeNode(e,t){if(e.constructor.name!=="InstancedMesh")return;let i=this.writer,n=i.extensionsUsed,r={};t.extensions=t.extensions||{},t.extensions[this.name]=r;let s=new Lx,a=new Array,c=new Array,u=new Array;for(let g=0;g<e.count;g++){e.getMatrixAt(g,s);let E=new Km,_=new jx,x=new Km;s.decompose(E,_,x),a.push(E.x,E.y,E.z),c.push(_.x,_.y,_.z,_.w),u.push(x.x,x.y,x.z)}let l=new Float32Array(a),d=new Float32Array(c),h=new Float32Array(u);r.attributes={TRANSLATION:i.processAccessor(new ih(l,3)),ROTATION:i.processAccessor(new ih(d,4)),SCALE:i.processAccessor(new ih(h,3))},n[this.name]=!0}};import{Object3D as Fx,Vector3 as Bx}from"three";var bs=class extends We{sceneRoot;start(){this.startCoroutine(this.updateGltfBox())}*updateGltfBox(){for(;;)for(let e=0;e<10;e++)yield}},$t=class extends M{binary=!0;objects=[];exporter;ext;async exportNow(e){console.log("DO EXPORT",this.objects);let t={binary:this.binary,pivot:$t.calculateCenter(this.objects)},i=await this.export(this.objects,t);this.binary?e.endsWith(".glb")||(e+=".glb"):e.endsWith(".gltf")||(e+=".gltf"),this.binary?$t.saveArrayBuffer(i,e):$t.saveJson(i,e)}async export(e,t){if(e===null||e.length<=0){console.log("no objects set to export");return}this.exporter||(this.exporter=new Hx,this.exporter.register(a=>new va(a)),this.ext=new zo,this.ext.registerExport(this.exporter)),$t.filterTopmostParent(e);let i={trs:!1,onlyVisible:!0,truncateDrawRange:!1,binary:t?.binary??!0,maxTextureSize:1/0,embedImages:!0,includeCustomExtensions:!0,animations:$t.collectAnimations(e)},n=new Fx;t?.pivot&&n.position.sub(t.pivot),console.log("EXPORT",e),e.forEach(a=>{a&&(n.children.push(a),a.matrixAutoUpdate=!1,a.matrix.copy(a.matrixWorld),R.getComponentsInChildren(a,ae).forEach(c=>{R.isActiveInHierarchy(c.gameObject)&&c.setInstancingEnabled(!1)}))});let r=new To(n);return this.ext.context=r,new Promise((a,c)=>{try{this.exporter?.parse(n,u=>{s(),a(u)},u=>{s(),c(u)},i)}catch(u){console.error(u),c(u)}finally{console.log("FINALLY")}});function s(){e.forEach(a=>{!a||(a.matrixAutoUpdate=!0,R.getComponentsInChildren(a,ae).forEach(c=>{R.isActiveInHierarchy(c.gameObject)&&c.setInstancingEnabled(!1)}))})}}static saveArrayBuffer(e,t){this.save(new Blob([e],{type:"application/octet-stream"}),t)}static saveJson(e,t){this.save("data: text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(e)),t)}static save(e,t){let i=document.createElement("a");i.style.display="none",document.body.appendChild(i),typeof e=="string"?i.href=e:i.href=URL.createObjectURL(e),i.download=t,i.click(),i.remove()}static collectAnimations(e,t){t=t||[];for(let i of e)!i||i.traverseVisible(n=>{n.animations&&n.animations.length>0&&t.push(...n.animations)});return t}static calculateCenter(e,t){let i=t||new Bx;return i.set(0,0,0),e.forEach(n=>{i.add(B(n))}),console.log(i),i.divideScalar(e.length),i}static filterTopmostParent(e){if(!(e.length<=0))for(let t=0;t<e.length;t++){let i=e[t];if(!i){e.splice(t,1),t--;continue}for(;i.parent;){if(e.includes(i.parent)){e.splice(t,1),t--;break}i=i.parent}}}};var uo=class extends M{awake(){Ke.createIfNoneExists(this.context)}onEnable(){Ke.instance?.register(this)}onDisable(){Ke.instance?.unregister(this)}performRaycast(e=null){return null}},ho=class extends uo{targets=null;raycastHits=[];start(){this.targets=[this.gameObject]}performRaycast(e=null){return this.targets?(e??=new xe,e.targets=this.targets,e.results=this.raycastHits,this.context.physics.raycast(e)):null}},vs=class extends ho{};import{Color as gc,GridHelper as Ux}from"three";var Vn=class extends M{isGizmo=!1;color0;color1;gridHelper;size;divisions;offset;onEnable(){if(this.isGizmo&&!Di)return;let e=this.size,t=this.divisions;this.gridHelper||(this.gridHelper=new Ux(e,t,this.color0??new gc(.4,.4,.4),this.color1??new gc(.6,.6,.6)),this.offset!==void 0&&(this.gridHelper.position.y+=this.offset),this.gameObject.add(this.gridHelper))}};v([y()],Vn.prototype,"isGizmo",2),v([y(gc)],Vn.prototype,"color0",2),v([y(gc)],Vn.prototype,"color1",2);var zn=class extends M{reverseArrangement=!1},ys=class extends zn{},_s=class extends zn{},xs=class extends zn{};import{GroundProjectedEnv as Gx}from"three/examples/jsm/objects/GroundProjectedEnv.js";var tn=class extends M{applyOnAwake=!1;set scale(e){this._scale=e,this.env?.scale.setScalar(e)}get scale(){return this._scale}_scale=20;set radius(e){this._radius=e,this.env&&(this.env.height=e)}get radius(){return this._radius}_radius=100;set height(e){this._height=e,this.env&&(this.env.height=e)}get height(){return this._height}_height=100;_lastEnvironment;env;_watcher;awake(){this.applyOnAwake&&this.updateAndCreate()}onEnable(){this.context.time.frameCount>0&&this.applyOnAwake&&this.updateAndCreate(),this._watcher||(this._watcher=new hn(this.context.scene,"environment"),this._watcher.subscribeWrite(e=>{this.updateProjection()}))}onDisable(){this._watcher?.revoke(),this.env?.removeFromParent()}updateAndCreate(){this.updateProjection(),this._watcher?.apply()}updateProjection(){if(!this.context.scene.environment){this.env?.removeFromParent();return}(!this.env||this.context.scene.environment!==this._lastEnvironment)&&(console.log("Create/Update Ground Projection",this.context.scene.environment.name),this.env=new Gx(this.context.scene.environment)),this._lastEnvironment=this.context.scene.environment,this.env.parent||this.gameObject.add(this.env),this.env.scale.setScalar(this._scale),this.env.radius=this._radius,this.env.height=this._height,this.env.isObject3D===!0&&this.env.layers.set(2)}};v([y()],tn.prototype,"applyOnAwake",2),v([y()],tn.prototype,"scale",1),v([y()],tn.prototype,"radius",1),v([y()],tn.prototype,"height",1);import*as Jm from"three-mesh-ui";import{Color as L}from"three";var Vx=P("debugtext");var Ie=class extends _t{canvas;alignment=0;verticalOverflow=0;horizontalOverflow=0;lineSpacing=1;supportRichText=!1;font;fontStyle=0;get text(){return this._text}set text(e){if(this._text=e,!this._textMeshUi&&this._text.length>0&&this.context.time.frame>0&&this.createText(e,this.getTextOpts(),this.supportRichText),this._textMeshUi){if(this._textMeshUi.length>1){this.requestRebuild();return}this._textMeshUi[0].set({content:e}),this.markDirty()}}set_text(e){this.text=e}get fontSize(){return this._fontSize}set fontSize(e){if(this._fontSize=e,this._textMeshUi){if(this._textMeshUi.length>1){this.requestRebuild();return}this._textMeshUi[0].set({content:e}),this.markDirty()}}onColorChanged(){if(this._textMeshUi){if(this._textMeshUi.length>1){this.requestRebuild();return}let e=this.color;this._textMeshUi[0].set({fontColor:e,fontOpacity:e.alpha}),this.markDirty()}}_isWaitingForRebuild=!1;requestRebuild(){this._isWaitingForRebuild||(this._isWaitingForRebuild=!0,this.startCoroutine(this.rebuildDelayedRoutine(),0))}*rebuildDelayedRoutine(){if(this._isWaitingForRebuild=!1,this._textMeshUi){for(let e of this._textMeshUi)e.removeFromParent();this._textMeshUi.length=0}this.createText(this.text,this.getTextOpts(),this.supportRichText),this.markDirty()}onCreate(e){Vx&&console.log(this);let t=this.verticalOverflow==0&&this.horizontalOverflow==0;t&&(this.context.renderer.localClippingEnabled=!0);let i=this.rectTransform;this._textContainer=this.uiObject=this.createBlock(i,t,null,!0),this.createText(this.text,this.getTextOpts(),this.supportRichText),this.uiObject,this.uiObject=this.createBlock(i,t,this.uiObject,!1)}onAfterAddedToScene(){super.onAfterAddedToScene(),this.handleTextRenderOnTop()}_text="";_fontSize=12;_textMeshUi=null;_textContainer=null;getTextOpts(){let e=this.fontSize,t={content:this.text,fontColor:this.color,fontOpacity:this.color.alpha,fontSize:e,fontKerning:"normal"};return this.font=this.font?.toLocaleLowerCase(),this.setFont(t,this.fontStyle),t}onEnable(){super.onEnable(),this._didHandleTextRenderOnTop=!1,this.uiObject&&(this.uiObject.onAfterUpdate=this.updateWidth.bind(this))}createBlock(e,t,i,n=!1){let r={};r.hiddenOverflow=t,r.interLine=(this.lineSpacing-1)*this.fontSize*1.333,this.getAlignment(r,n);let s=e.createNewBlock(r);return i&&(Array.isArray(i)?s.add(...i):s.add(i)),s}getAlignment(e,t=!1){switch(t||(e.contentDirection="row"),this.alignment){default:case 0:case 1:case 2:e.justifyContent="start";break;case 3:case 4:case 5:e.justifyContent="center";break;case 6:case 7:case 8:e.justifyContent="end";break}switch(this.alignment){case 0:case 3:case 6:e.alignContent=t?"left":"top";break;case 1:case 4:case 7:e.alignContent="center";break;case 2:case 5:case 8:e.alignContent=t?"right":"bottom";break}return e}updateWidth(){this.horizontalOverflow===1&&setTimeout(()=>{if(!this._textMeshUi)return;let e=this._textMeshUi[0].parent;if(!!e&&e.lines){let t=e.lines.reduce((i,n)=>i+n.width,0);t+=e.getFontSize()*5,t+=e.padding*2||0,t+=this.fontSize*1.5,e.set({width:t}),this.ensureShadowComponentOwner()}},1)}ensureShadowComponentOwner(){this.shadowComponent&&this.shadowComponent.traverse(e=>{e[bt]===void 0&&(e[bt]=this)})}createText(e,t,i){if(!(!e||e.length<=0))if(this._textMeshUi||(this._textMeshUi=[]),i){let n=this.getNextTag(e);if(n)n.startIndex>0&&this.createText(e.substring(0,n.startIndex),t,!1);else return this.createText(e,t,!1);let r=[];for(;n;){let s=this.getNextTag(e,n.endIndex);if(s){let a=this.getText(e,n,s);this.handleTag(n,t,r),this.createText(a,t,!1)}else{let a=e.substring(n.endIndex);this.handleTag(n,t,r),this.createText(a,t,!1)}n=s}}else{let n={...t};n.content=e;let r=new Jm.Text(n);this._textMeshUi.push(r),this._textContainer&&this._textContainer.add(r)}}_didHandleTextRenderOnTop=!1;handleTextRenderOnTop(){this._didHandleTextRenderOnTop||(this._didHandleTextRenderOnTop=!0,this.startCoroutine(this.renderOnTopCoroutine()))}*renderOnTopCoroutine(){if(!this.canvas)return;let e=[],t=this.canvas,i={renderOnTop:t.renderOnTop,depthWrite:t.depthWrite,doubleSided:t.doubleSided};for(;;){let n=!1;if(this._textMeshUi)for(let r=0;r<this._textMeshUi.length;r++){if(e[r]===!0)continue;n=!0;let s=this._textMeshUi[r];!s.textContent||(os(s,i),e[r]=!0)}if(!n)break;yield}}handleTag(e,t,i){if(e.isEndTag){if(i.length>0){let n=i.pop();if(n)for(let r in n.previousValues){let s=n.previousValues[r];t[r]=s}}}else if(e.type.includes("color")){let n=new ya(e,{fontColor:t.fontColor});if(i.push(n),e.type.length>6){let r=e.type.substring(6);t.fontColor=zx(r)}else t.fontColor=new L(1,1,1)}else if(e.type=="b"){let n=new ya(e,{fontFamily:t.fontFamily,fontTexture:t.fontTexture});i.push(n),this.setFont(t,1)}else if(e.type=="i"){let n=new ya(e,{fontFamily:t.fontFamily,fontTexture:t.fontTexture});i.push(n),this.setFont(t,2)}}getText(e,t,i){return e.substring(t.endIndex,i.startIndex)}getNextTag(e,t=0){let i=e.indexOf("<",t),n=e.indexOf(">",i);if(i>=0&&n>=0){let r=e.substring(i+1,n);return{type:r,startIndex:i,endIndex:n+1,isEndTag:r.startsWith("/")}}return null}setFont(e,t){let i=this.getFontName(t),n=i;n?.endsWith("-msdf.json")||(n+="-msdf.json"),e.fontFamily=n;let r=i;r?.endsWith(".png")||(r+=".png"),e.fontTexture=r}getFontName(e){return this.font?(this.font=Ii(this.sourceId,this.font),this.font):null}};v([y(Ne)],Ie.prototype,"canvas",2),v([y()],Ie.prototype,"alignment",2),v([y()],Ie.prototype,"verticalOverflow",2),v([y()],Ie.prototype,"horizontalOverflow",2),v([y()],Ie.prototype,"lineSpacing",2),v([y()],Ie.prototype,"supportRichText",2),v([y()],Ie.prototype,"font",2),v([y()],Ie.prototype,"fontStyle",2),v([y()],Ie.prototype,"text",1),v([y()],Ie.prototype,"fontSize",1);var ya=class{tag;previousValues;constructor(e,t){this.tag=e,this.previousValues=t}};function zx(o){if(o.startsWith("#")){let t=o.substring(1);var e=parseInt(t,16);let i=e>>16&255,n=e>>8&255,r=e&255;return new L(i/255,n/255,r/255)}switch(o){case"black":return new L(0,0,0);case"white":return new L(1,1,1);case"red":return new L(1,0,0);case"lime":return new L(0,1,0);case"blue":return new L(0,0,1);case"yellow":return new L(1,1,0);case"cyan":return new L(0,1,1);case"magenta":return new L(1,0,1);case"silver":return new L(.75,.75,.75);case"gray":return new L(.5,.5,.5);case"maroon":return new L(.5,0,0);case"olive":return new L(.5,.5,0);case"green":return new L(0,.5,0);case"purple":return new L(.5,0,.5);case"teal":return new L(0,.5,.5);case"navy":return new L(0,0,.5);case"darkred":return new L(.54,0,0);case"brown":return new L(.55,.27,0);case"firebrick":return new L(.69,.13,.13);case"crimson":return new L(.86,.08,.24);case"tomato":return new L(1,.39,.28);case"coral":return new L(1,.49,.31);case"indianred":return new L(.6,.31,.51);case"lightcoral":return new L(.94,.5,.5);case"darkorange":return new L(1,.55,0);case"orange":return new L(1,.65,0);case"gold":return new L(1,.84,0);case"darkgoldenrod":return new L(.72,.53,.04);case"goldenrod":return new L(.85,.65,.13);case"palegoldenrod":return new L(.93,.87,.67);case"darkkhaki":return new L(.74,.7,.42);case"khaki":return new L(.94,.9,.55);case"yellowgreen":return new L(.6,.8,.19);case"darkolivegreen":return new L(.33,.42,.18);case"olivedrab":return new L(.42,.56,.14);case"lawngreen":return new L(.49,.99,0);case"chartreuse":return new L(.5,1,0);case"greenyellow":return new L(.68,1,.18);case"darkgreen":return new L(0,.39,0);case"forestgreen":return new L(.13,.55,.13);case"limegreen":return new L(.19,.8,.19);case"lightgreen":return new L(.56,.93,.56);case"palegreen":return new L(.59,.98,.59);case"darkseagreen":return new L(.56,.74,.56);case"mediumspringgreen":return new L(0,.98,.6);case"springgreen":return new L(0,1,.5);case"seagreen":return new L(.18,.31,.31);case"mediumaquamarine":return new L(.4,.8,.66);case"mediumseagreen":return new L(.24,.7,.44);case"lightseagreen":return new L(.13,.7,.67);case"darkslategray":return new L(.18,.31,.31);case"darkcyan":return new L(0,.55,.55);case"aqua":return new L(0,1,1);case"lightcyan":return new L(.8,1,1);case"darkturquoise":return new L(0,.81,.82);case"turquoise":return new L(0,.82,.82);case"mediumturquoise":return new L(.28,.82,.8);case"paleturquoise":return new L(.68,1,.93);case"aquamarine":return new L(.5,1,.83);case"powderblue":return new L(.69,.88,.9);case"cadetblue":return new L(.37,.62,.63);case"steelblue":return new L(.27,.51,.71);case"cornflowerblue":return new L(.39,.58,.93);case"deepskyblue":return new L(0,.7,1);case"dodgerblue":return new L(.12,.56,1);case"lightblue":return new L(.68,.85,.9);case"skyblue":return new L(.53,.81,.92);case"lightskyblue":return new L(.53,.81,.98);case"midnightblue":return new L(.18,.18,.31);case"darkblue":return new L(0,0,.55);case"mediumblue":return new L(0,0,.82);case"royalblue":return new L(.25,.41,.88);case"blueviolet":return new L(.54,.17,.89);case"indigo":return new L(.29,0,.51);case"darkslateblue":return new L(.28,.24,.55);case"slateblue":return new L(.42,.35,.8);case"mediumslateblue":return new L(.48,.41,.9);case"mediumpurple":return new L(.58,.44,.86);case"darkmagenta":return new L(.55,0,.55);case"darkviolet":return new L(.58,0,.83);case"darkorchid":return new L(.6,.2,.8);case"mediumorchid":return new L(.73,.33,.83);case"thistle":return new L(.84,.75,.85);case"plum":return new L(.87,.63,.87);case"violet":return new L(.93,.51,.93);case"fuchsia":return new L(1,0,1);case"orchid":return new L(.85,.44,.84);case"mediumvioletred":return new L(.78,.08,.52);case"palevioletred":return new L(.86,.44,.58);case"hotpink":return new L(1,.4,.71);case"deeppink":return new L(1,.08,.58);case"lightpink":return new L(1,.71,.76);case"pink":return new L(1,.75,.78);case"antiquewhite":return new L(.98,.92,.84);case"beige":return new L(.96,.96,.86);case"bisque":return new L(1,.89,.77);case"blanchedalmond":return new L(1,.92,.82);case"wheat":return new L(.96,.87,.87);case"cornsilk":return new L(1,.97,.86);case"lemonchiffon":return new L(1,.98,.8);case"lightgoldenrodyellow":return new L(.98,.98,.82);case"lightyellow":return new L(1,1,.8);case"saddlebrown":return new L(.55,.27,.07);case"sienna":return new L(.63,.32,.18);case"chocolate":return new L(.82,.41,.12);case"peru":return new L(.82,.52,.25);case"sandybrown":return new L(.96,.64,.38);case"burlywood":return new L(.87,.72,.53);case"tan":return new L(.82,.71,.55);case"rosybrown":return new L(.74,.56,.56);case"moccasin":return new L(1,.89,.71);case"navajowhite":return new L(1,.87,.68);case"peachpuff":return new L(1,.85,.73);case"mistyrose":return new L(1,.89,.88);case"lavenderblush":return new L(1,.94,.93);case"linen":return new L(.98,.94,.9);case"oldlace":return new L(.99,.96,.9);case"papayawhip":return new L(1,.94,.84);case"seashell":return new L(1,.96,.93);case"mintcream":return new L(.98,1,.98);case"slategray":return new L(.44,.5,.56);case"lightslategray":return new L(.47,.53,.6);case"lightsteelblue":return new L(.69,.77,.87);case"lavender":return new L(.9,.9,.98);case"floralwhite":return new L(1,.98,.98);case"aliceblue":return new L(.94,.97,1);case"ghostwhite":return new L(.97,.97,1);case"honeydew":return new L(.94,1,.94);case"ivory":return new L(1,1,.94);case"azure":return new L(.94,1,1);case"snow":return new L(1,.98,.98);case"dimgray":return new L(.4,.4,.4);case"darkgray":return new L(.66,.66,.66);case"lightgray":return new L(.83,.83,.83);case"gainsboro":return new L(.86,.86,.86);case"whitesmoke":return new L(.96,.96,.96)}return new L(1,1,1)}var po=P("debuginputfield"),N=class extends M{get text(){return this.textComponent?.text??""}get isFocused(){return N.active===this}textComponent;placeholder;onValueChanged;onEndEdit;inputEventFn;_iosEventFn;start(){po&&console.log(this.name,this)}onEnable(){N.htmlField||(N.htmlField=document.createElement("input"),N.htmlField.style.caretColor="transparent",N.htmlField.classList.add("ar"),document.body.appendChild(N.htmlField)),this.inputEventFn||(this.inputEventFn=this.onInput.bind(this)),N.htmlField.addEventListener("keyup",this.inputEventFn),this.placeholder&&this.textComponent?.text.length&&R.setActive(this.placeholder.gameObject,!1),Eo()&&(this._iosEventFn=this.processInputOniOS.bind(this),window.addEventListener("touchend",this._iosEventFn))}onDisable(){N.htmlField?.removeEventListener("keyup",this.inputEventFn),this.onDeselected(),this._iosEventFn&&window.removeEventListener("touchend",this._iosEventFn)}onPointerClick(e){po&&console.log("CLICK",e,N.active),N.activeTime=this.context.time.time,N.active!==this&&this.startCoroutine(this.activeLoop(),2),this.selectInputField()}*activeLoop(){for(this.onSelected();N.active===this&&!(this.context.input.getPointerUp(0)&&this.context.time.time-N.activeTime>.2);)this.setTextFromInputField(),yield;this.onDeselected()}onSelected(){if(N.active!==this&&(po&&console.log("Select",this.name,this,N.htmlField,this.context.isInXR,this.context.arOverlayElement,this.textComponent?.text,N.htmlField?.value),N.active?.onDeselected(),N.active=this,this.placeholder&&R.setActive(this.placeholder.gameObject,!1),N.htmlField)){if(N.htmlField.value=this.textComponent?.text||"",po&&console.log("set input field value",N.htmlField.value),this.context.isInXR){let e=this.context.arOverlayElement;e&&(N.htmlField.style.width="0px",N.htmlField.style.height="0px",e.append(N.htmlField))}this.selectInputField()}}onDeselected(){N.active===this&&(N.active=null,po&&console.log("Deselect",this.name,this),N.htmlField&&(N.htmlField.blur(),document.body.append(N.htmlField),N.htmlField.style.width="",N.htmlField.style.height=""),this.placeholder&&(!this.textComponent||this.textComponent.text.length<=0)&&R.setActive(this.placeholder.gameObject,!0),this.onEndEdit?.invoke())}onInput(e){if(N.active===this){if(po&&console.log(e.code,e,N.htmlField?.value,this.textComponent?.text),e.code==="Escape"||e.code==="Enter"){this.onDeselected();return}N.htmlField&&(this.textComponent&&(this.setTextFromInputField(),this.placeholder&&R.setActive(this.placeholder.gameObject,this.textComponent.text.length<=0)),this.selectInputField())}}setTextFromInputField(){if(this.textComponent&&N.htmlField){if(this.textComponent.text!==N.htmlField.value){po&&console.log("VALUE CHANGED");let e=this.textComponent.text,t=N.htmlField.value;this.onValueChanged?.invoke(t,e)}this.textComponent.text=N.htmlField.value}}selectInputField(){N.htmlField&&(N.htmlField.setSelectionRange(N.htmlField.value.length,N.htmlField.value.length),N.htmlField.focus())}processInputOniOS(){let e=this.context.physics.raycast();if(!e.length)return;let i=e[0].object,n=Fd(i);(n?.gameObject===this.gameObject||n?.gameObject.parent===this.gameObject)&&this.selectInputField()}},kt=N;I(kt,"active",null),I(kt,"activeTime",-1),I(kt,"htmlField",null),v([y(Ie)],kt.prototype,"textComponent",2),v([y(Ie)],kt.prototype,"placeholder",2),v([y(de)],kt.prototype,"onValueChanged",2),v([y(de)],kt.prototype,"onEndEdit",2);import*as Zm from"three-mesh-ui";import*as _a from"three";var $m=(a=>(a[a.fr=0]="fr",a[a.ru=1]="ru",a[a.de=2]="de",a[a.es=3]="es",a[a.el=4]="el",a[a.nord=5]="nord",a[a.eng=6]="eng",a))($m||{}),ws=class extends ze{font;text;keymap;padding;margin;fontSize;borderRadius;colors={keyboardBack:8750469,panelBack:2500134,button:3552822,hovered:1842204,selected:1088605};awake(){super.awake();let e=$m[this.keymap||6];this.makeKeyboard(e)}onEnable(){this.addShadowComponent(this.keyboard)}onDisable(){this.removeShadowComponent()}keyboard=null;_lastKeyPressed;_lastKeyPressedStartTime=0;_lastKeyPressedTime=0;makeKeyboard(e){!e&&!navigator.language&&(e="en");let t=this.font?this.font:"arial",i=R.getComponent(this.gameObject,yt);if(!i){console.error("Missing rect transform, please add this component inside a canvas");return}let n={...i.getBasicOptions(),margin:this.margin||0,padding:this.padding||0,language:e,fontFamily:is+"/"+t+"-msdf.json",fontTexture:is+"/"+t+".png",fontSize:this.fontSize||6,backgroundColor:new _a.Color(this.colors.keyboardBack),backspaceTexture:is+"/backspace.png",shiftTexture:is+"/shift.png",enterTexture:is+"/enter.png",borderRadius:this.borderRadius||0,autoLayout:!1},r=this.gameObject.scale;n.width*=this.gameObject.scale.x,n.height*=this.gameObject.scale.y,n.fontSize*=Math.max(r.x,r.y),this.keyboard=new Zm.Keyboard(n),this.gameObject.scale.set(1,1,1),this.keyboard.keys.forEach(s=>{s.setupState({state:"normal",attributes:{offset:.003,backgroundColor:new _a.Color(this.colors.button),backgroundOpacity:1}}),s.setState("normal"),s.setupState({state:"hovered",attributes:{offset:.3,backgroundColor:new _a.Color(this.colors.hovered),backgroundOpacity:1}}),s.setupState({state:"pressed",attributes:{offset:.1,backgroundColor:new _a.Color(this.colors.selected),backgroundOpacity:1},onSet:()=>{let a=s.info.input,c=s.info.command;if(this._lastKeyPressed!==a)this._lastKeyPressedStartTime=this.context.time.time;else if(this.context.time.time-this._lastKeyPressedTime>.05)this._lastKeyPressedStartTime=this.context.time.time;else if(this.context.time.time-this._lastKeyPressedStartTime<.5||c=="switch"||c=="shift"||c=="switch-set"){this._lastKeyPressedTime=this.context.time.time;return}if(this._lastKeyPressedTime=this.context.time.time,this._lastKeyPressed=a,c)switch(c){case"switch":this.keyboard.setNextPanel();break;case"switch-set":this.keyboard.setNextCharset();break;case"enter":this.tryAppend(`
248
+ `);break;case"space":this.tryAppend(" ");break;case"backspace":if(!this.text?.text?.length)break;this.text?.text&&(this.text.text=this.text.text.substring(0,this.text.text.length-1)||"");break;case"shift":this.keyboard.toggleCase();break}else s.info.input!==void 0&&this.tryAppend(s.info.input)}})})}tryAppend(e){this.text&&(this.text.text+=e,this.markDirty())}};import*as at from"three";import{Color as Wx}from"three";function nh(o){return o*Math.PI/180}var eg=300,rh=P("debuglights");var Qe=class extends M{type=0;range=1;spotAngle=1;innerSpotAngle=1;color=new at.Color(16777215);set shadowNearPlane(e){if(e!==this._shadowNearPlane&&(this._shadowNearPlane=e,this.light?.shadow?.camera!==void 0)){let t=this.light.shadow.camera;t.near=e}}get shadowNearPlane(){return this._shadowNearPlane}_shadowNearPlane=.1;set shadowBias(e){e!==this._shadowBias&&(this._shadowBias=e,this.light?.shadow?.bias!==void 0&&(this.light.shadow.bias=e,this.light.shadow.needsUpdate=!0))}get shadowBias(){return this._shadowBias}_shadowBias=0;set shadowNormalBias(e){e!==this._shadowNormalBias&&(this._shadowNormalBias=e,this.light?.shadow?.normalBias!==void 0&&(this.light.shadow.normalBias=e,this.light.shadow.needsUpdate=!0))}get shadowNormalBias(){return this._shadowNormalBias}_shadowNormalBias=1;_overrideShadowBiasSettings=!1;set shadows(e){this._shadows=e,this.light&&(this.light.castShadow=e!==0,this.updateShadowSoftHard())}get shadows(){return this._shadows}_shadows=1;lightmapBakeType=4;set intensity(e){if(this._intensity=e,this.light){let t=1;if(this.context.isInXR&&this._webARRoot){let i=this._webARRoot?.arScale;typeof i=="number"&&i>0&&(t/=i)}this.light.intensity=e*t}}get intensity(){return this._intensity}_intensity=-1;get shadowDistance(){let e=this.light;return e?e.shadow.camera.far:-1}set shadowDistance(e){this._shadowDistance=e;let t=this.light;if(t){let i=t.shadow.camera;i.far=e,i.updateProjectionMatrix()}}_shadowDistance;shadowWidth;shadowHeight;get shadowResolution(){let e=this.light;return e?e.shadow.mapSize.x:-1}set shadowResolution(e){if(e===this._shadowResolution)return;this._shadowResolution=e;let t=this.light;t&&(t.shadow.mapSize.set(e,e),t.shadow.needsUpdate=!0)}_shadowResolution=void 0;get isBaked(){return this.lightmapBakeType===2}get selfIsLight(){if(this.gameObject.isLight===!0)return!0;switch(this.gameObject.type){case"SpotLight":case"PointLight":case"DirectionalLight":return!0}return!1}light=void 0;getWorldPosition(e){return this.light?this.type===1?this.light.getWorldPosition(e).multiplyScalar(1):this.light.getWorldPosition(e):e}updateIntensity(){this.intensity=this._intensity}awake(){this.color=new at.Color(this.color??16777215)}onEnable(){this.createLight(),!this.isBaked&&(this.light&&(this.selfIsLight||this.light.parent!==this.gameObject&&this.gameObject.add(this.light)),this.type===1&&this.startCoroutine(this.updateMainLightRoutine(),2),this._webXRStartedListener=V.addEventListener("xrStarted",this.onWebXRStarted.bind(this)),this._webXREndedListener=V.addEventListener("xrStopped",this.onWebXREnded.bind(this)))}onDisable(){V.removeEventListener("xrStarted",this._webXRStartedListener),V.removeEventListener("xrStopped",this._webXREndedListener)}_webXRStartedListener;_webXREndedListener;_webARRoot;onWebXRStarted(){this._webARRoot=R.getComponentInParent(this.gameObject,gt)??void 0,this.startCoroutine(this._updateLightIntensityInARRoutine())}*_updateLightIntensityInARRoutine(){for(;this.context.isInAR;){yield,this.updateIntensity();for(let e=0;e<30;e++)yield}}onWebXREnded(){this.updateIntensity()}createLight(){let e=this.selfIsLight;if(e&&!this.light)switch(this.light=this.gameObject,this._intensity=this.light.intensity,this.type){case 1:this.setDirectionalLight(this.light);break}else if(!this.light)switch(this.type){case 1:let t=new at.DirectionalLight(this.color,this.intensity*Math.PI);if(t.position.set(0,0,-eg*.5).applyQuaternion(this.gameObject.quaternion),this.gameObject.add(t.target),fn(t.target,0,0,0),this.light=t,this.gameObject.position.set(0,0,0),this.gameObject.rotation.set(0,0,0),rh){let s=new at.DirectionalLightHelper(this.light,.2,this.color);this.context.scene.add(s)}break;case 0:let i=new at.SpotLight(this.color,this.intensity*Math.PI,this.range,nh(this.spotAngle/2),1-nh(this.innerSpotAngle/2)/nh(this.spotAngle/2),2);i.position.set(0,0,0),i.rotation.set(0,0,0),this.light=i;let n=i.target;i.add(n),n.position.set(0,0,this.range),n.rotation.set(0,0,0);break;case 2:let r=new at.PointLight(this.color,this.intensity*Math.PI,this.range);this.light=r;break}if(this.light){this._intensity>=0?this.light.intensity=this._intensity:this._intensity=this.light.intensity,this.shadows!==0?this.light.castShadow=!0:this.light.castShadow=!1,this._shadowResolution!==void 0&&this._shadowResolution>4?(this.light.shadow.mapSize.width=this._shadowResolution,this.light.shadow.mapSize.height=this._shadowResolution):(this.light.shadow.mapSize.width=2048,this.light.shadow.mapSize.height=2048),rh&&console.log("Override shadow bias?",this._overrideShadowBiasSettings,this.shadowBias,this.shadowNormalBias),this.light.shadow.bias=this.shadowBias,this.light.shadow.normalBias=this.shadowNormalBias,this.updateShadowSoftHard();let t=this.light.shadow.camera;if(t.near=this.shadowNearPlane,this._shadowDistance!==void 0&&typeof this._shadowDistance=="number"?t.far=this._shadowDistance:t.far=eg*Math.abs(this.gameObject.scale.z),this.gameObject.scale.set(1,1,1),this.shadowWidth!==void 0)t.left=-this.shadowWidth/2,t.right=this.shadowWidth/2;else{let i=this.gameObject.scale.x;t.left*=i,t.right*=i}if(this.shadowHeight!==void 0)t.top=this.shadowHeight/2,t.bottom=-this.shadowHeight/2;else{let i=this.gameObject.scale.y;t.top*=i,t.bottom*=i}this.light.shadow.needsUpdate=!0,rh&&this.context.scene.add(new at.CameraHelper(t)),this.isBaked?this.light.removeFromParent():e||this.gameObject.add(this.light)}}*updateMainLightRoutine(){for(;;){this.type===1&&((!this.context.mainLight||this.intensity>this.context.mainLight.intensity)&&(this.context.mainLight=this),yield);break}}updateShadowSoftHard(){!this.light||this.shadows===2||(this.light.shadow.radius=1,this.light.shadow.blurSamples=1)}setDirectionalLight(e){e.add(e.target),e.target.position.set(0,0,-1)}};I(Qe,"allowChangingRendererShadowMapType",!0),v([y()],Qe.prototype,"type",2),v([y(Wx)],Qe.prototype,"color",2),v([y()],Qe.prototype,"shadowNearPlane",1),v([y()],Qe.prototype,"shadowBias",1),v([y()],Qe.prototype,"shadowNormalBias",1),v([y()],Qe.prototype,"shadows",1),v([y()],Qe.prototype,"lightmapBakeType",2),v([y()],Qe.prototype,"intensity",1),v([y()],Qe.prototype,"shadowDistance",1),v([y()],Qe.prototype,"shadowResolution",1);var dF=new at.Vector3(0,0,0);import*as bc from"three";import{Vector3 as Nx}from"three";var Es=P("debugLODs"),Xx=P("noLODs");var nn=class{screenRelativeTransitionHeight;distance;renderers};v([y()],nn.prototype,"screenRelativeTransitionHeight",2),v([y()],nn.prototype,"distance",2),v([y()],nn.prototype,"renderers",2);var oh=class{model;renderers;constructor(e,t){this.model=t,this.renderers=[];for(let i of t.renderers){let n=this.findRenderer(i,e.gameObject);n&&n.gameObject?this.renderers.push(n):Es&&console.warn("Renderer not found: "+i,e.gameObject)}}findRenderer(e,t){let i=R.foreachComponent(t,n=>n.guid===e||Object.getPrototypeOf(n)?.guid===e?n:null);if(i)return i;for(let n of t.children){let r=this.findRenderer(e,n);if(r)return r}return null}},xr=class extends M{fadeMode=0;localReferencePoint=void 0;lodCount=0;size=0;animateCrossFading=!1;lodModels;_lods=[];_settings=[];_lodsHandler;start(){if(!Xx&&!this._lodsHandler&&!!this.gameObject&&(Es&&console.log(this),this.lodModels&&Array.isArray(this.lodModels))){let e=0,t=[];for(let n of this.lodModels){e=Math.max(n.distance,e);let r=new oh(this,n);this._lods.push(r);for(let s of r.renderers)t.includes(s)||t.push(s)}this._lodsHandler=new Array;for(let n=0;n<t.length;n++){let r=new bc.LOD;this._lodsHandler.push(r),this.gameObject.add(r)}let i=new bc.Object3D;i.name="Cull "+this.name,Es&&console.log(t);for(let n=0;n<t.length;n++){let r=t[n],s=this._lodsHandler[n],a=r.gameObject,c=0,u=0;Es&&console.log(n,a.name);for(let d of this._lods){let h=null;d.renderers.includes(r)?h=a:h=i,Es&&console.log("add",d.model.distance,h.name);let g=d.model.distance;if(u=g-c,c=Math.max(g,c),h.type==="Group"){console.warn("LODGroup: Group is not supported as LOD object",a.name,h);continue}this.onAddLodLevel(s,h,g)}let l=c+u;Es&&console.log("cull",l),this.onAddLodLevel(s,i,l)}}}update(){if(!this.gameObject||!this._lodsHandler)return;let e=this.context.mainCamera;if(!!e)for(let t of this._lodsHandler)t.update(e)}onAddLodLevel(e,t,i){if(t===this.gameObject){console.warn("LODGroup component must be on parent object and not mesh directly at the moment",t.name,t);return}e.addLevel(t,i*this._distanceFactor);let n={lod:e,levelIndex:e.levels.length-1,distance:i};this._settings.push(n)}_distanceFactor=1;distanceFactor(e){if(e!==this._distanceFactor){this._distanceFactor=e;for(let t of this._settings){let i=t.lod.levels[t.levelIndex];i.distance=t.distance*e}}}};v([y(Nx)],xr.prototype,"localReferencePoint",2),v([y(nn)],xr.prototype,"lodModels",2);var Qx=P("logstats"),Cs=class extends M{onEnable(){console.log(this),Qx&&this.startCoroutine(this.run(),4)}*run(){for(;this.enabled;){let e=this.context.renderer.info;console.log(e.memory,e.render,e.programs),yield}}};var sh=P("debugnestedgltf"),fo=class extends M{filePath;_isLoadingOrDoneLoading=!1;listenToProgress(e){this.filePath?.beginListenDownload(e)}preload(){this.filePath?.preload()}async start(){if(this._isLoadingOrDoneLoading)return;sh&&console.log(this,this.guid);let e=this.gameObject.parent;if(e){this._isLoadingOrDoneLoading=!0;let t=new Ue;t.idProvider=new Se(this.hash(this.guid)),t.parent=e,this.gameObject.updateMatrix();let i=this.gameObject.matrix;sh&&console.log("Load nested:",this.filePath?.uri??this.filePath,this.gameObject.position);let n=await this.filePath?.instantiate?.call(this.filePath,t);n&&(n.matrixAutoUpdate=!1,n.matrix.identity(),n.applyMatrix4(i),n.matrixAutoUpdate=!0,n.layers.disableAll(),n.layers.set(this.layer)),this.destroy(),sh&&console.log("Nested loading done:",this.filePath?.uri??this.filePath,n)}}hash(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}};v([y(tt)],fo.prototype,"filePath",2);import{Quaternion as qx,Euler as Yx,Vector3 as mo,Plane as Kx}from"three";var rn=class extends M{referenceSpace;from;affectPosition=!1;affectRotation=!1;alignLookDirection=!1;levelLookDirection=!1;levelPosition=!1;positionOffset=new mo(0,0,0);rotationOffset=new mo(0,0,0);offset=new mo(0,0,0);update(){if(!this.from)return;var e=B(this.from),t=me(this.from);this.offset.copy(this.positionOffset);let i=this.offset.length();if(this.referenceSpace&&this.offset.transformDirection(this.referenceSpace.matrixWorld).multiplyScalar(i),e.add(this.offset),this.levelPosition&&this.referenceSpace){let a=new Kx(this.gameObject.up,0),c=B(this.referenceSpace);a.setFromNormalAndCoplanarPoint(this.gameObject.up,c);let u=new mo(0,0,0);a.projectPoint(e,u),e.copy(u)}this.affectPosition&&te(this.gameObject,e);let n=new Yx(this.rotationOffset.x,this.rotationOffset.y,this.rotationOffset.z),r=new qx().setFromEuler(n);this.affectRotation&&$e(this.gameObject,t.multiply(r));let s=new mo;this.from.getWorldDirection(s).multiplyScalar(50),this.levelLookDirection&&(s.y=0),this.alignLookDirection&&this.gameObject.lookAt(s)}};v([y(R)],rn.prototype,"referenceSpace",2),v([y(R)],rn.prototype,"from",2),v([y(mo)],rn.prototype,"positionOffset",2),v([y(mo)],rn.prototype,"rotationOffset",2);import{Vector3 as vc,Quaternion as Jx,Matrix4 as ah}from"three";var UF=new vc(1,1,1),GF=new vc(0,0,1),VF=Symbol("emitterMatrix"),wr=class{constructor(e,t,i,n){this.system=e;this.particleSystem=t;this.subSystem=i;this.subParticleSystem=n;this.subParticleSystem&&this.subParticleSystem&&(this.subParticleSystem.onlyUsedByOther=!0);let r=1e3;this._circularBuffer=new Mi(()=>new ah,r)}type="NeedleParticleSubEmitter";q_=new Jx;v_=new vc;v2_=new vc;_emitterMatrix=new ah;_circularBuffer;clone(){throw new Error("Method not implemented.")}initialize(e){e.emissionState={burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0},this._emitterMatrix.copy(this.subSystem.matrixWorld).invert().premultiply(this.system.matrixWorld)}update(e,t){if(this.subSystem.currentParticles>=this.subSystem.main.maxParticles||!this.subParticleSystem||!e.emissionState)return;let i=new ah;i.set(1,0,0,e.position.x,0,1,0,e.position.y,0,0,1,e.position.z,0,0,0,1),this.particleSystem.worldSpace||i.multiplyMatrices(this._emitterMatrix,i),this.subParticleSystem.emit(t,e.emissionState,i)}frameUpdate(e){}toJSON(){}};import*as Rs from"three";import{AxesHelper as Zx,Material as tg,Mesh as ig,Object3D as $x,Quaternion as lh,Vector3 as xa,Vector4 as ew}from"three";import{BatchedParticleRenderer as tw,ConstantColor as iw,ConstantValue as nw,ParticleSystem as rw,RenderMode as yc,TrailParticle as ng}from"three.quarks";var ug=P("debugparticles"),Er=class{particleSystem;_deserialize(e){let t=this.particleSystem;t&&!(t instanceof be)&&typeof t.guid=="string"&&(ug&&console.log("DESERIALIZE SUBEMITTER",t),this.particleSystem=void 0,this.particleSystem=R.findByGuid(t.guid,e.scene))}},on=class extends M{renderMode;particleMaterial;trailMaterial;particleMesh;get transparent(){return this.particleMaterial?.transparent??!1}getMaterial(e=!1){return e===!0&&this.trailMaterial?this.trailMaterial:this.particleMaterial}getMesh(){let e=null;return this.particleMesh instanceof ig&&(e=this.particleMesh.geometry),e===null&&(e=new Rs.BoxGeometry(1,1,1)),new ig(e,this.getMaterial())}};v([y()],on.prototype,"renderMode",2),v([y(tg)],on.prototype,"particleMaterial",2),v([y(tg)],on.prototype,"trailMaterial",2);var Ts=class{_curve;constructor(e){this._curve=e}type="function";genValue(e){return this._curve.evaluate(e,Math.random())}toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}};var wa=class{type="value";toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}system;constructor(e){this.system=e}},ch=class extends wa{genValue(){return this.system.textureSheetAnimation.getStartIndex()}},uh=class extends wa{_lastPosition=new xa;_lastDistance=0;update(){let e=B(this.system.gameObject);this._lastDistance=this._lastPosition.distanceTo(e),this._lastPosition.copy(e)}genValue(){if(!this.system.emission.enabled||this.system.currentParticles>=this.system.maxParticles)return 0;let e=this.system.emission.rateOverTime.evaluate(this.system.time/this.system.duration,Math.random());if(this.system.deltaTime>0){let n=this.system.emission.rateOverDistance.evaluate(this.system.time/this.system.duration,Math.random()),s=this._lastDistance/this.system.deltaTime*n;Number.isFinite(s)||(s=0),e+=s}let t=this.system.emission.getBurst();t>0&&(e+=t/this.system.deltaTime);let i=this.system.maxParticles-this.system.currentParticles;return H.clamp(e,0,i/this.system.deltaTime)}},dh=class extends wa{genValue(){return 0}},Cr=class{system;get scaleFactorDiff(){return this.system.worldScale.x-this.system.scale}constructor(e){this.system=e}initialize(e){}update(e,t){}frameUpdate(e){}toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}},hh=class extends Cr{type="NeedleTextureSheet";update(e,t){let i=this.system.textureSheetAnimation;if(i.enabled){let n=e.age/e.life,r=i.evaluate(n);r!==void 0&&(e.uvTile=r)}}},rg=Symbol("particleRotation"),ph=class extends Cr{type="NeedleRotation";initialize(e){e[rg]=Math.random()}update(e,t){if(e.rotation===void 0)return;let i=e.age/e.life;if(typeof e.rotation=="number"&&(this.system.rotationOverLifetime.enabled?e.rotation+=this.system.rotationOverLifetime.evaluate(i,e[rg])*t:this.system.renderer.renderMode===0&&(e.rotation=Math.PI),this.system.rotationBySpeed.enabled)){let n=e.velocity.length();e.rotation+=this.system.rotationBySpeed.evaluate(i,n)*t}}},og=Symbol("sizeLerpFactor"),fh=class extends Cr{type="NeedleSize";initialize(e){e[og]=Math.random()}update(e,t){if(this.system.renderer.renderMode!==4){let i=e.age/e.life,n=1;this.system.sizeOverLifetime.enabled&&(n*=this.system.sizeOverLifetime.evaluate(i,void 0,e[og]).x);let r=this.system.worldScale.x/this.system.cameraScale;e.size=e.startSize*n*r}}},_c=Symbol("particleLife"),xc=Symbol("trailLifetime"),sg=Symbol("trailStartLength"),mh=class extends Cr{type="NeedleTrail";initialize(e){e instanceof ng&&(e[_c]=e.life,e[xc]=e.life,this.system.trails.enabled&&this.system.trails.dieWithParticles===!1&&(e[xc]=this.system.trails.lifetime.evaluate(Math.random(),Math.random()),e.life+=e[xc]),e[sg]=e.length)}update(e){if(this.system.trails?.enabled&&e instanceof ng){let t=e,i=e.age/e[_c],n=e.previous.values(),r=e.previous.length;for(let s=0;s<r;s++){let c=n.next().value,u=1-s/(r-1);c.size=this.system.trails.getWidth(e.size,i,u),c.color.copy(e.color),this.system.trails.getColor(c.color,i,u)}if(e.age>e[_c]){e.velocity.set(0,0,0);let s=(e.age-e[_c])/e[xc];t.length=H.lerp(e[sg],0,s)}}}},wc=Symbol("startVelocity"),ag=Symbol("gravityModifier"),Ec=Symbol("velocity lerp factor"),lg=new xa,FB=new lh,gh=class extends Cr{type="NeedleVelocity";_gravityDirection=new xa;initialize(e){let t=1+this.scaleFactorDiff;e.startSpeed=this.system.main.startSpeed.evaluate(Math.random(),Math.random())*t,e.velocity.copy(this.system.shape.getDirection(e.position)).multiplyScalar(e.startSpeed),this.system.inheritVelocity?.enabled&&this.system.inheritVelocity.applyInitial(e.velocity),e[wc]?e[wc].copy(e.velocity):e[wc]=e.velocity.clone();let i=this.system.main.gravityModifier.evaluate(Math.random(),Math.random())/(9.81*2);e[ag]=i,e[Ec]=Math.random(),this._gravityDirection.set(0,-1,0),this.system.main.simulationSpace===0&&this._gravityDirection.applyQuaternion(this.system.worldQuaternionInverted)}update(e,t){let i=e[wc],n=e[ag];n!==0&&(lg.copy(this._gravityDirection).multiplyScalar(n),i.add(lg)),e.velocity.copy(i);let r=e.age/e.life;this.system.inheritVelocity?.enabled&&this.system.inheritVelocity.applyCurrent(e.velocity,r,e[Ec]);let s=this.system.noise;s.enabled&&s.apply(0,e.position,e.velocity,t,e.age,e.life);let a=this.system.sizeBySpeed;a?.enabled&&(e.size=a.evaluate(e.velocity,r,e[Ec],e.size));let c=this.system.colorBySpeed;c?.enabled&&c.evaluate(e.velocity,e[Ec],e.color);let u=this.system.velocityOverLifetime;u.enabled&&u.apply(0,e.position,e.velocity,t,e.age,e.life);let l=this.system.limitVelocityOverLifetime;l.enabled&&l.apply(e.position,i,e.velocity,e.size,r,t,1)}},cg=Symbol("colorLerpFactor"),bh=class extends Cr{type="NeedleColor";initialize(e){let t=this.system.main.startColor.evaluate(e.age/e.life,Math.random());e.startColor.set(t.r,t.g,t.b,t.alpha),e.color.copy(e.startColor),e[cg]=Math.random()}update(e,t){if(this.system.colorOverLifetime.enabled){let i=e.age/e.life,n=this.system.colorOverLifetime.color.evaluate(i,e[cg]);e.color.set(n.r,n.g,n.b,n.alpha).multiply(e.startColor)}else e.color.copy(e.startColor)}},vh=class{system;emission;get anim(){return this.system.textureSheetAnimation}constructor(e){this.system=e,this.emission=new uh(this.system)}update(){this.emission.update()}autoDestroy;get looping(){return this.system.main.loop}get duration(){return this.system.duration}get shape(){return this.system.shape}get startLife(){return new Ts(this.system.main.startLifetime)}get startSpeed(){return new Ts(this.system.main.startSpeed)}get startRotation(){return new Ts(this.system.main.startRotation)}get startSize(){return new Ts(this.system.main.startSize)}startLength;get startColor(){return new iw(new ew(1,1,1,1))}get emissionOverTime(){return this.emission}get emissionOverDistance(){return new dh(this.system)}emissionBursts;onlyUsedByOther;behaviors=[];get instancingGeometry(){return this.system.renderer.getMesh().geometry}get renderMode(){if(this.system.trails.enabled===!0)return yc.Trail;switch(this.system.renderer.renderMode){case 0:return yc.BillBoard;case 4:return yc.LocalSpace}return yc.BillBoard}rendererEmitterSettings={startLength:new nw(220),followLocalOrigin:!1};get speedFactor(){return this.system.main.simulationSpeed}get texture(){let e=this.system.renderer.getMaterial(this.system.trails.enabled);if(e&&e.map){let t=e.map;return t.premultiplyAlpha=!1,t.encoding=Rs.LinearEncoding,t}return El(new Q(1,1,1,1),1)}get startTileIndex(){return new ch(this.system)}get uTileCount(){return this.anim.enabled?this.anim?.numTilesX:void 0}get vTileCount(){return this.anim.enabled?this.anim?.numTilesY:void 0}get renderOrder(){return 1}get blending(){return this.system.renderer.particleMaterial?.blending??Rs.NormalBlending}get transparent(){return this.system.renderer.transparent}get worldSpace(){return this.system.main.simulationSpace===1}},yh=class{burstIndex=0;burstWaveIndex=0;time=0;waitEmiting=0},_h=class extends M{play(e=!1){e&&R.foreachComponent(this.gameObject,t=>{t instanceof _h&&t!==this&&t.play(!1)},!0),this._isPlaying=!0,this._time=0,this._particleSystem&&(this._particleSystem.emissionState.time=0,this._particleSystem.emitEnded=!1),this.emission?.reset()}pause(){this._isPlaying=!1}stop(){this._isPlaying=!1,this._time=0}_state;emit(e){if(this._particleSystem){this.onUpdate(),e=Math.min(e,this.maxParticles-this.currentParticles),this._state||(this._state=new yh),this._state.waitEmiting=e,this._state.time=0;let t=this._particleSystem.emitEnded;this._particleSystem.emitEnded=!1,this._particleSystem.emit(this.deltaTime,this._state,this._particleSystem.emitter.matrixWorld),this._particleSystem.emitEnded=t}}colorOverLifetime;main;emission;sizeOverLifetime;shape;noise;trails;velocityOverLifetime;limitVelocityOverLifetime;inheritVelocity;colorBySpeed;textureSheetAnimation;rotationOverLifetime;rotationBySpeed;sizeBySpeed;get renderer(){return this._renderer}get isPlaying(){return this._isPlaying}get currentParticles(){return this._particleSystem?.particleNum??0}get maxParticles(){return this.main.maxParticles}get time(){return this._time}get duration(){return this.main.duration}get deltaTime(){return this.context.time.deltaTime*this.main.simulationSpeed}get scale(){return this.gameObject.scale.x}get cameraScale(){return this._cameraScale}_cameraScale=1;get container(){return this._container}get worldspace(){return this.main.simulationSpace===1}__worldQuaternion=new lh;get worldQuaternion(){return this.__worldQuaternion}_worldQuaternionInverted=new lh;get worldQuaternionInverted(){return this._worldQuaternionInverted}_worldScale=new xa;get worldScale(){return this._worldScale}_worldPositionFrame=-1;_worldPos=new xa;get worldPos(){return this._worldPositionFrame!==this.context.time.frame&&(this._worldPositionFrame=this.context.time.frame,B(this.gameObject,this._worldPos)),this._worldPos}get matrixWorld(){return this._container.matrixWorld}get isSubsystem(){return this._isUsedAsSubsystem}_renderer;_batchSystem;_particleSystem;_interface;_container;_time=0;_isPlaying=!0;_isUsedAsSubsystem=!1;set bursts(e){for(let t=0;t<e.length;t++){let i=e[t];if(!(i instanceof Fn)){let n=new Fn;jt(n,i),e[t]=n}}this._bursts=e}_bursts;set subEmitterSystems(e){for(let t=0;t<e.length;t++){let i=e[t];if(!(i instanceof Er)){let n=new Er;jt(n,i),e[t]=n}}this._subEmitterSystems=e}_subEmitterSystems;awake(){if(this._subEmitterSystems&&Array.isArray(this._subEmitterSystems))for(let t of this._subEmitterSystems)t._deserialize(this.context);this._renderer=this.gameObject.getComponent(on),this._container=new $x,this._container.matrixAutoUpdate=!1,this.main.simulationSpace==0?this.gameObject.add(this._container):this.context.scene.add(this._container),this._batchSystem=new tw,this._batchSystem.name=this.gameObject.name,this._container.add(this._batchSystem),this._interface=new vh(this),this._particleSystem=new rw(this._batchSystem,this._interface),this._particleSystem.addBehavior(new fh(this)),this._particleSystem.addBehavior(new bh(this)),this._particleSystem.addBehavior(new hh(this)),this._particleSystem.addBehavior(new ph(this)),this._particleSystem.addBehavior(new gh(this)),this._particleSystem.addBehavior(new mh(this));let e=this._particleSystem.emitter;this.context.scene.add(e),ug&&(console.log(this),this.gameObject.add(new Zx(1)))}start(){this.addSubParticleSystems()}onEnable(){this.inheritVelocity&&(this.inheritVelocity.system=this),this.play()}onDisable(){}onBeforeRender(){this.onUpdate();let e=this.deltaTime;this._batchSystem?.update(e),this._time+=e,this._time>this.duration&&(this._time=0)}onUpdate(){if(this._bursts&&(this.emission.bursts=this._bursts,delete this._bursts),!this._isPlaying)return;let e=this.context.mainCamera;if(e){let i=Ae(e);this._cameraScale=i.x}let t=this._container;if(this.worldspace&&(t=this.gameObject),me(t,this.__worldQuaternion),this._worldQuaternionInverted.copy(this.__worldQuaternion).invert(),Ae(this.gameObject,this._worldScale),!this.worldspace&&this._container&&this.gameObject?.parent){let i=Ae(this.gameObject.parent);i.x=1/i.x,i.y=1/i.y,i.z=1/i.z,this._container.matrix.identity(),this._container.matrix.scale(i)}this.emission.system=this,this._interface.update(),this.shape.update(this,this.context,this.main.simulationSpace,this.gameObject),this.noise.update(this.context),this.inheritVelocity?.update(this.context),this.velocityOverLifetime.update(this)}addSubParticleSystems(){if(this._subEmitterSystems&&this._particleSystem)for(let e of this._subEmitterSystems){let t=e.particleSystem?._particleSystem;if(t){e.particleSystem._isUsedAsSubsystem=!0;let i=new wr(this,this._particleSystem,e.particleSystem,t);this._particleSystem.addBehavior(i)}}}},be=_h;v([y(Hn)],be.prototype,"colorOverLifetime",2),v([y(ye)],be.prototype,"main",2),v([y(xt)],be.prototype,"emission",2),v([y(Kt)],be.prototype,"sizeOverLifetime",2),v([y(ie)],be.prototype,"shape",2),v([y(K)],be.prototype,"noise",2),v([y(ee)],be.prototype,"trails",2),v([y(He)],be.prototype,"velocityOverLifetime",2),v([y(ue)],be.prototype,"limitVelocityOverLifetime",2),v([y(Jt)],be.prototype,"inheritVelocity",2),v([y(Ti)],be.prototype,"colorBySpeed",2),v([y(_e)],be.prototype,"textureSheetAnimation",2),v([y(Je)],be.prototype,"rotationOverLifetime",2),v([y(Xe)],be.prototype,"rotationBySpeed",2),v([y(ke)],be.prototype,"sizeBySpeed",2);import*as hg from"three";function*dg(o,e=null){let t=e?e.time:G.Current.time,i=t.time;for(;t.time-i<o;)yield}var Pi=class extends M{awake(){this.context.connection.beginListen("joined-room",this.tryAssignColor.bind(this))}_didAssignPlayerColor=!1;onEnable(){this._didAssignPlayerColor||this.startCoroutine(this.waitForConnection())}*waitForConnection(){for(;!this.destroyed&&this.enabled&&(yield dg(.2),!this.tryAssignColor()););}tryAssignColor(){let e=R.getComponentInParent(this.gameObject,le);return e&&e.connectionId?(this._didAssignPlayerColor=!0,this.assignUserColor(e.connectionId),!0):!1}assignUserColor(e){let t=Pi.hashCode(e),i=Pi.colorFromHashCode(t);if(this.gameObject.type==="Mesh"){let n=this.gameObject;this.assignColor(i,e,n)}else if(this.gameObject.children)for(let n of this.gameObject.children){let r=n;r.material&&r.material.color&&this.assignColor(i,e,r)}}assignColor(e,t,i){let n=i.material;!n||(n._playerMaterial!==t&&(n=n.clone(),n._playerMaterial=t,i.material=n),n.color=e)}static hashCode(e){var t=0,i,n;if(e.length===0)return t;for(i=0;i<e.length;i++)n=e.charCodeAt(i),t=(t<<5)-t+n,t|=0;return t}static colorFromHashCode(e){let t=(e&16711680)>>16,i=(e&65280)>>8,n=e&255;return new hg.Color(t/255,i/255,n/255)}};import{RGBELoader as aw}from"three/examples/jsm/loaders/RGBELoader.js";import{EXRLoader as lw}from"three/examples/jsm/loaders/EXRLoader.js";import{EquirectangularRefractionMapping as cw,sRGBEncoding as uw,TextureLoader as mg}from"three";var pg=P("debugautosync"),xh=class{_syncers={};getOrCreateSyncer(e){if(!e.guid)return null;if(this._syncers[e.guid])return this._syncers[e.guid];let t=new wh(e);return this._syncers[e.guid]=t,t}},fg=new xh,wh=class{comp;constructor(e){this.comp=e}hasChanges=!1;changedProperties={};data={};_boundEvent;get networkingKey(){return this.comp.constructor.name}_isReceiving=!1;_isInit=!1;init(e){if(this._isInit)return;this._isInit=!0,this.comp=e,this._boundEvent=this.onHandleSending.bind(this),this.comp.context.post_render_callbacks.push(this._boundEvent),this.comp.context.connection.beginListen(this.networkingKey,this.onHandleReceiving.bind(this));let t=this.comp.context.connection.tryGetState(this.comp.guid);t&&this.onHandleReceiving(t)}notifyChanged(e,t){this._isReceiving||(this.hasChanges=!0,this.changedProperties[e]=t)}onHandleSending(){if(!this.hasChanges)return;this.hasChanges=!1;let e=this.comp.context.connection;if(!e||!e.isConnected){for(let t in this.changedProperties)delete this.changedProperties[t];return}for(let t in this.data)delete this.data[t];this.data.guid=this.comp.guid;for(let t in this.changedProperties){let i=this.changedProperties[t];delete this.changedProperties[t],this.data[t]=i}e.send(this.networkingKey,this.data)}onHandleReceiving(e){if(!this._isInit||!this.comp)return;let t=e.guid;if(!(t&&t!==this.comp.guid)){pg&&console.log("RECEIVED",this.comp.name,this.comp.guid,e);try{this._isReceiving=!0;for(let i in e){if(i==="guid")continue;let n=e[i];this.comp[i]=n}}catch(i){console.error(i)}finally{this._isReceiving=!1}}}};function ow(o,e){let t=e!==o;if(!t&&o&&e){if(Array.isArray(o)&&Array.isArray(e))t=!0;else if(typeof o=="object"&&typeof e=="object"){for(let i of Object.keys(o))if(o[i]!==e[i]){t=!0;break}}}return t}function sw(o){if(o.__autoPropertySyncHandler)return o.__autoPropertySyncHandler;let e=fg.getOrCreateSyncer(o);return e?.init(o),o.__autoPropertySyncHandler=e,e}var Cc=function(o){return function(e,t){let i=null,n=o?e[o]:void 0,r=e,s=r.__internalAwake;pg&&console.log(t);let a=t+"k__BackingField";r.__internalAwake=function(){if(this[a]!==void 0)return;this[a]=this[t],s.call(this),i=fg.getOrCreateSyncer(this),Object.getOwnPropertyDescriptor(this,t)?.set===void 0&&Object.defineProperty(this,t,{set:function(u){let l=this[a];this[a]=u,ow(u,l)&&n?.call(this,u,l)!==!1&&sw(this)?.notifyChanged(t,u)},get:function(){return this[a]},configurable:!0,enumerable:!0}),i?.init(this)}}};var Oi=class extends M{url;allowDrop=!0;background=!0;backgroundBlurriness=0;environment=!0;_loader;_prevLoadedEnvironment;_prevEnvironment=null;_prevBackground=null;onEnable(){this.setSkybox(this.url),this.registerDropEvents()}onDisable(){this.context.scene.environment===this._prevLoadedEnvironment&&(this.context.isInXR||(this.context.scene.environment=this._prevEnvironment,this.context.scene.background=this._prevBackground),this._prevLoadedEnvironment=void 0),this.unregisterDropEvents()}async setSkybox(e){if(!e)return;!e?.endsWith(".hdr")&&!e.endsWith(".exr")&&console.warn("Potentially invalid skybox url",this.url,"on",this.name);{let n=e.endsWith(".exr"),r=e.endsWith(".hdr");n?this._loader=new lw:r?this._loader=new aw:this._loader=new mg}console.log("Loading skybox: "+e);let t=await this._loader.loadAsync(e);if(!t||!this.enabled)return;this.url=e,t.mapping=cw,this._loader instanceof mg&&(t.encoding=uw),this._prevBackground=this.context.scene.background,this._prevEnvironment=this.context.scene.environment,console.log("Set skybox",this.url),this.environment&&(this.context.scene.environment=t),this.background&&(this.context.scene.background=t),this._prevLoadedEnvironment=t;let i=e.lastIndexOf("/");t.name=e.substring(i>=0?i+1:0),this.context.scene.backgroundBlurriness=this.backgroundBlurriness}dragOverEvent;dropEvent;registerDropEvents(){this.dragOverEvent||(this.dragOverEvent=e=>{if(!!this.allowDrop&&!!e.dataTransfer)for(let t of e.dataTransfer.types)t==="text/uri-list"&&e.preventDefault()},this.dropEvent=e=>{if(!!this.allowDrop&&(e.preventDefault(),!!e.dataTransfer)){for(let t of e.dataTransfer.types)if(t==="text/uri-list"){let i=e.dataTransfer.getData(t);console.log(t,i);let n=new RegExp(/polyhaven.com\/asset_img\/.+?\/(?<name>.+)\.png/).exec(i)?.groups?.name;if(n||(n=new RegExp(/polyhaven\.com\/a\/(?<name>.+)/).exec(i)?.groups?.name),console.log(n),n){let r="https://dl.polyhaven.org/file/ph-assets/HDRIs/exr/1k/"+n+"_1k.exr";this.setSkybox(r)}else console.warn("Could not resolve skybox name from dropped url",i)}}},this.context.domElement.addEventListener("dragover",this.dragOverEvent),this.context.domElement.addEventListener("drop",this.dropEvent))}unregisterDropEvents(){!this.dragOverEvent||(this.context.domElement.removeEventListener("dragover",this.dragOverEvent),this.context.domElement.removeEventListener("drop",this.dropEvent))}};v([Cc("setSkybox"),y()],Oi.prototype,"url",2),v([y()],Oi.prototype,"allowDrop",2),v([y()],Oi.prototype,"background",2),v([y()],Oi.prototype,"backgroundBlurriness",2),v([y()],Oi.prototype,"environment",2);import*as Sc from"three";import{Object3D as mw,ShaderMaterial as gw,Texture as bw,Vector2 as Eh,Vector4 as vw}from"three";function dw(){return new Promise((o,e)=>{let i=()=>{i!=null&&(document.removeEventListener("pointerdown",i),document.removeEventListener("click",i),document.removeEventListener("dragstart",i),document.removeEventListener("touchstart",i),o())};document.addEventListener("pointerdown",i),document.addEventListener("click",i),document.addEventListener("dragstart",i),document.addEventListener("touchstart",i)})}async function gg(o){await dw(),o()}import{PlaneGeometry as hw,MeshBasicMaterial as pw,Mesh as fw}from"three";var Tc=class{static createPrimitive(e,t){let i;switch(e){case 0:let n=new hw(1,1,1,1),r=t?.material??new pw({color:16777215});i=new fw(n,r)}return t?.name&&(i.name=t.name),i}};var Rc=P("debugvideo");var bg=(n=>(n[n.CameraFarPlane=0]="CameraFarPlane",n[n.CameraNearPlane=1]="CameraNearPlane",n[n.RenderTexture=2]="RenderTexture",n[n.MaterialOverride=3]="MaterialOverride",n))(bg||{}),Re=class extends M{renderer=null;playOnAwake=!0;playOnEnable;aspectMode=0;renderMode;targetMaterialProperty;targetMaterialRenderer;targetTexture;time=0;_playbackSpeed=1;get playbackSpeed(){return this._videoElement?.playbackRate??this._playbackSpeed}set playbackSpeed(e){this._playbackSpeed=e,this._videoElement&&(this._videoElement.playbackRate=e)}_isLooping=!1;get isLooping(){return this._videoElement?.loop??this._isLooping}set isLooping(e){this._isLooping=e,this._videoElement&&(this._videoElement.loop=e)}get currentTime(){return this._videoElement?.currentTime??this.time}set currentTime(e){this._videoElement?this._videoElement.currentTime=e:this.time=e}get isPlaying(){let e=this._videoElement;return e?e.currentTime>0&&!e.paused&&!e.ended&&e.readyState>e.HAVE_CURRENT_DATA:!1}get crossOrigin(){return this._videoElement?.crossOrigin??this._crossOrigin}set crossOrigin(e){this._crossOrigin=e,this._videoElement&&(e!==null?this._videoElement.setAttribute("crossorigin",e):this._videoElement.removeAttribute("crossorigin"))}get videoTexture(){return this._videoTexture}get videoElement(){return this._videoElement}_crossOrigin="anonymous";audioOutputMode=1;source;clip=null;url=null;_videoElement=null;_videoTexture=null;videoMaterial=null;_isPlaying=!1;wasPlaying=!1;setVideo(e){this.clip=e,this.source=0,this._videoElement?(this._videoElement.srcObject=e,this._isPlaying&&this._videoElement.play(),this.updateAspect()):this.create(!0)}setClipURL(e){this.url!==e&&(this.url=e,this.source=1,Rc&&console.log("set url",e),this._videoElement?(this._videoElement.src=e,this._isPlaying&&(this.stop(),this.play())):this.create(!0))}awake(){this.create(this.playOnAwake),window.addEventListener("visibilitychange",e=>{switch(document.visibilityState){case"hidden":this.wasPlaying=this._isPlaying,this.pause();break;case"visible":this.wasPlaying&&this.play();break}})}onEnable(){this.playOnEnable===!0&&this.handleBeginPlaying(!0),this.screenspace?this._overlay?.start():this._overlay?.stop()}onDisable(){this.pause()}onDestroy(){this._videoElement&&(this._videoElement.parentElement?.removeChild(this._videoElement),this._videoElement=null),this._videoTexture&&(this._videoTexture.dispose(),this._videoTexture=null)}_receivedInput=!1;constructor(){super(),gg(()=>{this._receivedInput=!0,this.updateVideoElementSettings()}),this._targetObjects=[],P("videoscreenspace")&&window.addEventListener("keydown",e=>{e.key==="f"&&(this.screenspace=!this.screenspace)})}play(){!this._videoElement||this._isPlaying&&!this._videoElement?.ended&&!this._videoElement?.paused||(this._isPlaying=!0,this._receivedInput||(this._videoElement.muted=!0),this.updateVideoElementSettings(),this._videoElement?.play().catch(e=>{console.warn(e)}),Rc&&console.log("play",this._videoElement))}stop(){this._isPlaying=!1,this._videoElement&&(this._videoElement.currentTime=0,this._videoElement.pause())}pause(){this._isPlaying=!1,this._videoElement?.pause()}create(e){let t;switch(this.source){case 0:t=this.clip;break;case 1:t=this.url;break}if(!!t){if(this._videoElement||(this._videoElement=this.createVideoElement(),this.context.domElement?.prepend(this._videoElement),this.updateVideoElementStyles()),typeof t=="string"){this._videoElement.src=t;let i=this._videoElement.captureStream?.call(this._videoElement);this.clip=i}else this._videoElement.srcObject=t;this._videoTexture||(this._videoTexture=new Sc.VideoTexture(this._videoElement)),this._videoTexture.flipY=!1,this._videoTexture.encoding=Sc.sRGBEncoding,this.handleBeginPlaying(e),Rc&&console.log(this)}}updateAspect(){this.aspectMode!==0&&this.startCoroutine(this.updateAspectImpl())}_overlay=null;get screenspace(){return this._overlay?.enabled??!1}set screenspace(e){if(e){if(!this._videoTexture)return;this._overlay||(this._overlay=new Ch(this.context)),this._overlay.add(this._videoTexture)}else this._overlay?.remove(this._videoTexture);this._overlay&&(this._overlay.enabled=e)}_targetObjects;createVideoElement(){let e=document.createElement("video");return this._crossOrigin&&e.setAttribute("crossorigin",this._crossOrigin),Rc&&console.log("create video elment",e),e}handleBeginPlaying(e){if(!this.enabled||!this._videoElement)return;this._targetObjects.length=0;let t=this.gameObject;switch(this.renderMode){case 3:t=this.targetMaterialRenderer?.gameObject,t||(t=R.getComponent(this.gameObject,ae)?.gameObject);break;case 2:console.error("VideoPlayer renderTexture not implemented yet. Please use material override instead");return}if(!t){console.error("Missing target for video material renderer",this.name,bg[this.renderMode],this);return}let i=t.material;if(i)if(this._targetObjects.push(t),i!==this.videoMaterial&&(this.videoMaterial=i.clone(),t.material=this.videoMaterial),!this.targetMaterialProperty)this.videoMaterial.map=this._videoTexture;else switch(this.targetMaterialProperty){default:this.videoMaterial.map=this._videoTexture;break}else{console.warn("Can not play video, no material found, this might be a multimaterial case which is not supported yet");return}this.updateVideoElementSettings(),this.updateVideoElementStyles(),e&&this.play()}updateVideoElementSettings(){!this._videoElement||(this._videoElement.loop=this._isLooping,this._videoElement.currentTime=this.currentTime,this._videoElement.playbackRate=this._playbackSpeed,this._videoElement.playsInline=!0,this._videoElement.muted=!this._receivedInput&&this.audioOutputMode!==0,(this.playOnAwake||this.playOnEnable)&&(this._videoElement.autoplay=!0))}updateVideoElementStyles(){!this._videoElement||(this._videoElement.style.userSelect="none",this._videoElement.style.visibility="hidden",this._videoElement.style.display="none",this.updateAspect())}_updateAspectRoutineId=-1;*updateAspectImpl(){let e=++this._updateAspectRoutineId,t=void 0,i=this.clip;for(;e===this._updateAspectRoutineId&&this.aspectMode!==0&&this.clip&&i===this.clip&&this._isPlaying;){if(!i||typeof i=="string")return;let n;for(let r of i.getVideoTracks()){let s=r.getSettings();if(s&&s.width&&s.height){n=s.width/s.height;break}else n=this.context.renderer.domElement.clientWidth/this.context.renderer.domElement.clientHeight}if(n===void 0){for(let r=0;r<10;r++)yield;if(!this.isPlaying)break;continue}if(t===n){yield;continue}for(let r of this._targetObjects){let s=1;if(r.parent){let a=Ae(r.parent);s=a.x/a.y}switch(this.aspectMode){case 1:r.scale.y=1/n*r.scale.x*s;break;case 2:r.scale.x=n*r.scale.y*s;break}}for(let r=0;r<3;r++)yield}}};v([y(mw)],Re.prototype,"renderer",2),v([y()],Re.prototype,"playOnAwake",2),v([y()],Re.prototype,"playOnEnable",2),v([y()],Re.prototype,"aspectMode",2),v([y()],Re.prototype,"renderMode",2),v([y()],Re.prototype,"targetMaterialProperty",2),v([y(ae)],Re.prototype,"targetMaterialRenderer",2),v([y(bw)],Re.prototype,"targetTexture",2),v([y()],Re.prototype,"time",2),v([y()],Re.prototype,"playbackSpeed",1),v([y()],Re.prototype,"isLooping",1);var Ch=class{context;constructor(e){this.context=e,this._input=new Th(this)}get enabled(){return this._isInScreenspaceMode}set enabled(e){e?this.start():this.stop()}add(e){this._videos.indexOf(e)===-1&&this._videos.push(e)}remove(e){if(!e)return;let t=this._videos.indexOf(e);t>=0&&this._videos.splice(t,1)}start(){if(this._isInScreenspaceMode||this._videos.length<0)return;let e=this._videos[this._videos.length-1];if(!e)return;if(this._isInScreenspaceMode=!0,!this._screenspaceModeQuad){if(this._screenspaceModeQuad=Tc.createPrimitive(0,{material:new Rh(e)}),!this._screenspaceModeQuad)return;this._screenspaceModeQuad.geometry.scale(2,2,2)}let t=this._screenspaceModeQuad;this.context.scene.add(t),this.updateScreenspaceMaterialUniforms();let i=t.material;i?.reset(),this._input?.enable(i)}stop(){this._isInScreenspaceMode=!1,this._screenspaceModeQuad&&(this._input?.disable(),this._screenspaceModeQuad.removeFromParent())}updateScreenspaceMaterialUniforms(){let e=this._screenspaceModeQuad?.material;!e||(e.screenAspect=this.context.domElement.clientWidth/this.context.domElement.clientHeight)}_videos=[];_screenspaceModeQuad;_isInScreenspaceMode=!1;_input},Th=class{_onResizeScreenFn;_onKeyUpFn;_onMouseWheelFn;context;overlay;constructor(e){this.overlay=e,this.context=e.context}_material;enable(e){this._material=e,window.addEventListener("resize",this._onResizeScreenFn=()=>{this.overlay.updateScreenspaceMaterialUniforms()}),window.addEventListener("keyup",this._onKeyUpFn=n=>{n.key==="Escape"&&this.overlay.stop()}),window.addEventListener("wheel",this._onMouseWheelFn=n=>{this.overlay.enabled&&(e.zoom+=n.deltaY*5e-4,n.preventDefault())},{passive:!1});let t=new Eh;window.addEventListener("mousemove",n=>{if(this.overlay.enabled&&this.context.input.getPointerPressed(0)){let r=new Eh(n.movementX,n.movementY);r.x/=this.context.domElement.clientWidth,r.y/=this.context.domElement.clientHeight,t.set(r.x,r.y),t.multiplyScalar(e.zoom/-this.context.time.deltaTime*.01),e.offset=e.offset.add(t)}}),window.addEventListener("pointermove",n=>{this.overlay.enabled&&this.context.input.getPointerPressed(0)&&this.context.input.getTouchesPressedCount()===1&&(t.set(n.movementX,n.movementY),t.multiplyScalar(e.zoom*-this.context.time.deltaTime*.05),e.offset=e.offset.add(t))});let i=0;window.addEventListener("touchstart",n=>{if(n.touches.length<2){this.context.time.time-i<.3&&this.overlay.stop(),i=this.context.time.time;return}this._isPinching=!0,this._lastPinch=0}),window.addEventListener("touchmove",n=>{if(!this._isPinching||!this._material)return;let r=n.touches[0],s=n.touches[1],a=r.clientX-s.clientX,c=r.clientY-s.clientY,u=Math.sqrt(a*a+c*c);if(this._lastPinch!==0){let l=u-this._lastPinch;this._material.zoom-=l*.004}this._lastPinch=u}),window.addEventListener("touchend",()=>{this._isPinching=!1})}_isPinching=!1;_lastPinch=0;disable(){this._onResizeScreenFn&&(window.removeEventListener("resize",this._onResizeScreenFn),this._onResizeScreenFn=void 0),this._onKeyUpFn&&(window.removeEventListener("keyup",this._onKeyUpFn),this._onKeyUpFn=void 0),this._onMouseWheelFn&&(window.removeEventListener("wheel",this._onMouseWheelFn),this._onMouseWheelFn=void 0)}},Rh=class extends gw{set screenAspect(e){this.uniforms.screenAspect.value=e,this.needsUpdate=!0}set offset(e){let t=this.uniforms.offsetScale.value;t.x=e.x,t.y=e.y,this.uniforms.offsetScale.value=t,this.needsUpdate=!0}_offset=new Eh;get offset(){let e=this.uniforms.offsetScale.value;return this._offset.set(e.x,e.y),this._offset}set zoom(e){let t=this.uniforms.offsetScale.value;e<.001&&(e=.001),t.z=e,this.needsUpdate=!0}get zoom(){return this.uniforms.offsetScale.value.z}reset(){this.offset=this.offset.set(0,0),this.zoom=1,this.needsUpdate=!0}constructor(e){super(),this.uniforms={map:{value:e},screenAspect:{value:1},offsetScale:{value:new vw(0,0,1,1)}},this.vertexShader=`
249
249
  uniform sampler2D map;
250
250
  uniform float screenAspect;
251
251
  uniform vec4 offsetScale;
@@ -295,7 +295,7 @@ a:hover {
295
295
  else
296
296
  gl_FragColor = texture2D(map, vUv);
297
297
  }
298
- `}};var bg=Da(hl(),1);import{EventDispatcher as kh}from"three";var vg=P("debugscreenshare");function Sc(o){if(!!o)for(let e of o.getTracks())e.stop()}var Cr=class extends M{onPointerClick(){if(this.context.connection.isInRoom!==!1){if(this.isReceiving){this.videoPlayer&&(this.videoPlayer.screenspace=!this.videoPlayer.screenspace);return}if(this.isSending){this.close();return}this.share()}}videoPlayer;device=0;get currentScream(){return this._currentStream}get currentMode(){return this._currentMode}get isSending(){return this._currentStream?.active&&this._currentMode===1}get isReceiving(){if(this._currentMode===2){if(!this._currentStream||this._currentStream.active===!1)return!1;let e=this._currentStream.getTracks();for(let t of e)if(t.readyState==="live")return!0}return!1}_net;_requestOpen=!1;_currentStream=null;_currentMode=0;awake(){vg&&console.log(this),oe.registerWaitForAllowAudio(()=>{this.videoPlayer&&this._currentStream&&this._currentMode===2&&this.videoPlayer.setVideo(this._currentStream)})}start(){if(this.videoPlayer||(this.videoPlayer=R.getComponent(this.gameObject,Re)??void 0),!this.videoPlayer){console.error("Screencapture did not find a VideoPlayer component");return}let e=Pc.getOrCreate(this.context,this.guid);this._net=new Oh(this.context,e),this._net.enable(),this._net.addEventListener(yg.ReceiveVideo,this.onReceiveVideo.bind(this))}async share(e){e?.device&&(this.device=e.device),this._requestOpen=!0;try{if(this.videoPlayer){let t=e?.constraints??{echoCancellation:!0,autoGainControl:!1},i={video:t,audio:t};switch(this.device){case 1:this.tryShareUserCamera(i,e);break;case 0:if(!navigator.mediaDevices.getDisplayMedia){console.error("No getDisplayMedia support");return}let n=await navigator.mediaDevices.getDisplayMedia(i);this._requestOpen?this.setVideo(n,1):Sc(n);break;case 2:let r=0,s=this.context.renderer.domElement.captureStream(r);this.setVideo(s,1);break}}}catch(t){if(t.name==="NotAllowedError"){console.log("Selection cancelled"),this._requestOpen=!1;return}console.error("Error opening video",t)}}close(){this._requestOpen=!1,this._currentStream&&(console.warn("Close current stream / disposing resources"),this._net?.stopSendingVideo(this._currentStream),Sc(this._currentStream),this._currentMode=0,this._currentStream=null)}setVideo(e,t){if(e===this._currentStream||(this.close(),!e||!this.videoPlayer))return;this._currentStream=e,this._requestOpen=!0,this._currentMode=t,this.videoPlayer.setVideo(e),t===1&&this._net?.startSendingVideo(e),e.addEventListener("ended",()=>{this.close()})}onReceiveVideo(e){this.setVideo(e.stream,2)}async tryShareUserCamera(e,t){let i=(await navigator.mediaDevices.enumerateDevices()).filter(n=>n.kind==="videoinput");console.log("Request camera",i);for(let n of i)try{if(!this._requestOpen)break;if(n.kind!=="videoinput")continue;let r=n.deviceId;if(t?.deviceId!==void 0&&r!==t.deviceId)continue;e.video!==!1&&((typeof e.video>"u"||typeof e.video=="boolean")&&(e.video={}),e.video.deviceId=r);let s=await navigator.mediaDevices.getUserMedia(e);this._requestOpen?this.setVideo(s,1):Sc(s),console.log("Selected camera",n);break}catch(r){console.warn(r)}}};v([y(Re)],Cr.prototype,"videoPlayer",2),v([y()],Cr.prototype,"device",2);var yg=(i=>(i.Connected="peer-user-connected",i.ReceiveVideo="receive-video",i.Disconnected="peer-user-disconnected",i))(yg||{}),Rh=class{type="receive-video";stream;target;constructor(e,t){this.stream=e,this.target=t}},Sh=class{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}};var Ph=class extends kh{userId;direction;call;get stream(){return this._stream}_stream=null;_isDisposed=!1;close(){this._isDisposed||(this._isDisposed=!0,this.call.close(),Sc(this._stream))}get isOpen(){return this.call.peerConnection?.connectionState==="connected"}get isClosed(){return!this.isOpen}constructor(e,t,i){super(),this.userId=e,this.call=t,this.direction=i,this._stream=null,t.on("stream",n=>{if(console.log("Receive video",n.getAudioTracks(),n.getVideoTracks()),this._stream=n,i==="incoming"){let r=new Rh(n,this);this.dispatchEvent(r)}})}},Rs=class extends kh{static getOrCreate(e,t){if(Rs.instances.has(t))return Rs.instances.get(t);let i=new Rs(e,t);return Rs.instances.set(t,i),i}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,t){let i={metadata:{userId:this.context.connection.connectionId}},n=this._peer?.call(e,t,i);if(n)return this.registerCall(n,"outgoing")}get peer(){return this._peer}id;context;_peer;_incomingCalls=[];_outgoingCalls=[];constructor(e,t){super(),this.context=e,this.id=t,this.setupPeer(),navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia}_enabled=!1;_enabledPeer=!1;onConnectRoomFn=this.onConnectRoom.bind(this);onUserJoinedOrLeftRoomFn=this.onUserJoinedOrLeftRoom.bind(this);onPeerConnectFn=this.onPeerConnect.bind(this);onPeerReceiveCallFn=this.onPeerReceivingCall.bind(this);enable(){this._enabled||(this._enabled=!0,this.context.connection.beginListen("joined-room",this.onConnectRoomFn),this.context.connection.beginListen("user-joined-room",this.onUserJoinedOrLeftRoomFn),this.context.connection.beginListen("user-left-room",this.onUserJoinedOrLeftRoomFn),this.subscribePeerEvents())}disable(){!this._enabled||(this._enabled=!1,this.context.connection.stopListening("joined-room",this.onConnectRoomFn),this.context.connection.stopListening("user-joined-room",this.onUserJoinedOrLeftRoomFn),this.context.connection.stopListening("user-left-room",this.onUserJoinedOrLeftRoomFn),this.unsubscribePeerEvents())}onConnectRoom(){this.setupPeer()}onUserJoinedOrLeftRoom(e){}setupPeer(){if(!!this.context.connection.connectionId&&!this._enabledPeer){if(this._enabledPeer=!0,!this._peer){let e=this.getMyPeerId();this._peer=new bg.default(e)}this._enabled&&this.subscribePeerEvents()}}subscribePeerEvents(){!this._peer||(this._peer.on("open",this.onPeerConnectFn),this._peer.on("call",this.onPeerReceiveCallFn))}unsubscribePeerEvents(){}onPeerConnect(e){vg&&console.log("Peer connected as",e),this.context.connection.send("peer-user-connected",new Sh(this,e))}onPeerReceivingCall(e){e.answer(),this.registerCall(e,"incoming")}registerCall(e,t){let i=e.metadata;(!i||!i.userId)&&console.error("Missing call metadata",e);let n=i.userId;console.log(t==="incoming"?"Receive call from":"Make call to",e.metadata);let r=t==="incoming"?this._incomingCalls:this._outgoingCalls,s=new Ph(n,e,t);return r.push(s),e.on("error",a=>{console.error("Call error",a)}),e.on("close",()=>{console.log("Call ended",e.metadata),e.close();let a=r.indexOf(s);a!==-1&&r.splice(a,1)}),t==="incoming"&&(s.addEventListener("receive-video",a=>{this.dispatchEvent(a)}),e.on("stream",()=>{let a=setInterval(()=>{s.isOpen||(clearInterval(a),s.close())},2e3)})),s}},Pc=Rs;I(Pc,"instances",new Map);var Oh=class extends kh{context;peer;_sendingVideoStreams=new Map;constructor(e,t){super(),this.context=e,this.peer=t}startSendingVideo(e){this._sendingVideoStreams.has(e)||(this._sendingVideoStreams.set(e,[]),this.updateSendingCalls())}stopSendingVideo(e){if(e){let t=this._sendingVideoStreams.get(e);if(t){console.log("Closing calls",t);for(let i of t)i.close()}this._sendingVideoStreams.delete(e),t&&console.log("Currently sending",this._sendingVideoStreams)}}onConnectRoomFn=this.onConnectRoom.bind(this);onUserConnectedFn=this.onUserConnected.bind(this);onUserLeftFn=this.onUserLeft.bind(this);enable(){this.peer.enable(),this.context.connection.beginListen("peer-user-connected",this.onUserConnectedFn),this.peer.addEventListener("receive-video",this.onReceiveVideo.bind(this))}disable(){this.peer.disable()}onReceiveVideo(e){console.log("RECEIVE VIDEO",e),this.dispatchEvent({type:"receive-video",target:this,stream:e.stream,userId:e.userId})}onConnectRoom(){}onUserConnected(e){if(this.peer.id===e.guid){console.log("USER CONNECTED",e);let t=this._sendingVideoStreams.keys().next().value;this.peer.makeCall(e.peerId,t)}}onUserLeft(e){this.stopCallsToUsersThatAreNotInTheRoomAnymore()}updateSendingCalls(){let e=!1;for(let t of this._sendingVideoStreams.keys()){let i=this._sendingVideoStreams.get(t)||[];for(let n of this.context.connection.usersInRoom()){if(n===this.context.connection.connectionId)continue;if(!i.find(s=>s.userId===n)){let s=this.peer.makeCall(this.peer.getPeerIdFromUserId(n),t);s&&(e=!0,i.push(s))}}this._sendingVideoStreams.set(t,i)}this.stopCallsToUsersThatAreNotInTheRoomAnymore(),e&&console.log("Currently sending",this._sendingVideoStreams)}stopCallsToUsersThatAreNotInTheRoomAnymore(){for(let e of this._sendingVideoStreams.keys()){let t=this._sendingVideoStreams.get(e);if(!!t)for(let i=t.length-1;i>=0;i--){let n=t[i];this.context.connection.userIsInRoom(n.userId)||(n.close(),t.splice(i,1))}}}};import{ShadowMaterial as gw,AdditiveBlending as bw}from"three";var Tr=class extends M{mode=0;shadowColor=new Q(0,0,0,1);awake(){switch(this.mode){case 0:this.applyShadowMaterial();break;case 1:this.applyLightBlendMaterial();break}}applyLightBlendMaterial(){let e=R.getComponent(this.gameObject,ae);if(e){let t=e.sharedMaterial;t.blending=bw,this.applyMaterialOptions(t),t.onBeforeCompile=i=>{i.fragmentShader=i.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",`vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
298
+ `}};var vg=La(pl(),1);import{EventDispatcher as Mh}from"three";var yg=P("debugscreenshare");function Pc(o){if(!!o)for(let e of o.getTracks())e.stop()}var Tr=class extends M{onPointerClick(){if(this.context.connection.isInRoom!==!1){if(this.isReceiving){this.videoPlayer&&(this.videoPlayer.screenspace=!this.videoPlayer.screenspace);return}if(this.isSending){this.close();return}this.share()}}videoPlayer;device=0;get currentScream(){return this._currentStream}get currentMode(){return this._currentMode}get isSending(){return this._currentStream?.active&&this._currentMode===1}get isReceiving(){if(this._currentMode===2){if(!this._currentStream||this._currentStream.active===!1)return!1;let e=this._currentStream.getTracks();for(let t of e)if(t.readyState==="live")return!0}return!1}_net;_requestOpen=!1;_currentStream=null;_currentMode=0;awake(){yg&&console.log(this),oe.registerWaitForAllowAudio(()=>{this.videoPlayer&&this._currentStream&&this._currentMode===2&&this.videoPlayer.setVideo(this._currentStream)})}start(){if(this.videoPlayer||(this.videoPlayer=R.getComponent(this.gameObject,Re)??void 0),!this.videoPlayer){console.error("Screencapture did not find a VideoPlayer component");return}let e=Oc.getOrCreate(this.context,this.guid);this._net=new kh(this.context,e),this._net.enable(),this._net.addEventListener(_g.ReceiveVideo,this.onReceiveVideo.bind(this))}async share(e){e?.device&&(this.device=e.device),this._requestOpen=!0;try{if(this.videoPlayer){let t=e?.constraints??{echoCancellation:!0,autoGainControl:!1},i={video:t,audio:t};switch(this.device){case 1:this.tryShareUserCamera(i,e);break;case 0:if(!navigator.mediaDevices.getDisplayMedia){console.error("No getDisplayMedia support");return}let n=await navigator.mediaDevices.getDisplayMedia(i);this._requestOpen?this.setVideo(n,1):Pc(n);break;case 2:let r=0,s=this.context.renderer.domElement.captureStream(r);this.setVideo(s,1);break}}}catch(t){if(t.name==="NotAllowedError"){console.log("Selection cancelled"),this._requestOpen=!1;return}console.error("Error opening video",t)}}close(){this._requestOpen=!1,this._currentStream&&(console.warn("Close current stream / disposing resources"),this._net?.stopSendingVideo(this._currentStream),Pc(this._currentStream),this._currentMode=0,this._currentStream=null)}setVideo(e,t){if(e===this._currentStream||(this.close(),!e||!this.videoPlayer))return;this._currentStream=e,this._requestOpen=!0,this._currentMode=t,this.videoPlayer.setVideo(e),t===1&&this._net?.startSendingVideo(e),e.addEventListener("ended",()=>{this.close()})}onReceiveVideo(e){this.setVideo(e.stream,2)}async tryShareUserCamera(e,t){let i=(await navigator.mediaDevices.enumerateDevices()).filter(n=>n.kind==="videoinput");console.log("Request camera",i);for(let n of i)try{if(!this._requestOpen)break;if(n.kind!=="videoinput")continue;let r=n.deviceId;if(t?.deviceId!==void 0&&r!==t.deviceId)continue;e.video!==!1&&((typeof e.video>"u"||typeof e.video=="boolean")&&(e.video={}),e.video.deviceId=r);let s=await navigator.mediaDevices.getUserMedia(e);this._requestOpen?this.setVideo(s,1):Pc(s),console.log("Selected camera",n);break}catch(r){console.warn(r)}}};v([y(Re)],Tr.prototype,"videoPlayer",2),v([y()],Tr.prototype,"device",2);var _g=(i=>(i.Connected="peer-user-connected",i.ReceiveVideo="receive-video",i.Disconnected="peer-user-disconnected",i))(_g||{}),Sh=class{type="receive-video";stream;target;constructor(e,t){this.stream=e,this.target=t}},Ph=class{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}};var Oh=class extends Mh{userId;direction;call;get stream(){return this._stream}_stream=null;_isDisposed=!1;close(){this._isDisposed||(this._isDisposed=!0,this.call.close(),Pc(this._stream))}get isOpen(){return this.call.peerConnection?.connectionState==="connected"}get isClosed(){return!this.isOpen}constructor(e,t,i){super(),this.userId=e,this.call=t,this.direction=i,this._stream=null,t.on("stream",n=>{if(console.log("Receive video",n.getAudioTracks(),n.getVideoTracks()),this._stream=n,i==="incoming"){let r=new Sh(n,this);this.dispatchEvent(r)}})}},Ss=class extends Mh{static getOrCreate(e,t){if(Ss.instances.has(t))return Ss.instances.get(t);let i=new Ss(e,t);return Ss.instances.set(t,i),i}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,t){let i={metadata:{userId:this.context.connection.connectionId}},n=this._peer?.call(e,t,i);if(n)return this.registerCall(n,"outgoing")}get peer(){return this._peer}id;context;_peer;_incomingCalls=[];_outgoingCalls=[];constructor(e,t){super(),this.context=e,this.id=t,this.setupPeer(),navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia}_enabled=!1;_enabledPeer=!1;onConnectRoomFn=this.onConnectRoom.bind(this);onUserJoinedOrLeftRoomFn=this.onUserJoinedOrLeftRoom.bind(this);onPeerConnectFn=this.onPeerConnect.bind(this);onPeerReceiveCallFn=this.onPeerReceivingCall.bind(this);enable(){this._enabled||(this._enabled=!0,this.context.connection.beginListen("joined-room",this.onConnectRoomFn),this.context.connection.beginListen("user-joined-room",this.onUserJoinedOrLeftRoomFn),this.context.connection.beginListen("user-left-room",this.onUserJoinedOrLeftRoomFn),this.subscribePeerEvents())}disable(){!this._enabled||(this._enabled=!1,this.context.connection.stopListening("joined-room",this.onConnectRoomFn),this.context.connection.stopListening("user-joined-room",this.onUserJoinedOrLeftRoomFn),this.context.connection.stopListening("user-left-room",this.onUserJoinedOrLeftRoomFn),this.unsubscribePeerEvents())}onConnectRoom(){this.setupPeer()}onUserJoinedOrLeftRoom(e){}setupPeer(){if(!!this.context.connection.connectionId&&!this._enabledPeer){if(this._enabledPeer=!0,!this._peer){let e=this.getMyPeerId();this._peer=new vg.default(e)}this._enabled&&this.subscribePeerEvents()}}subscribePeerEvents(){!this._peer||(this._peer.on("open",this.onPeerConnectFn),this._peer.on("call",this.onPeerReceiveCallFn))}unsubscribePeerEvents(){}onPeerConnect(e){yg&&console.log("Peer connected as",e),this.context.connection.send("peer-user-connected",new Ph(this,e))}onPeerReceivingCall(e){e.answer(),this.registerCall(e,"incoming")}registerCall(e,t){let i=e.metadata;(!i||!i.userId)&&console.error("Missing call metadata",e);let n=i.userId;console.log(t==="incoming"?"Receive call from":"Make call to",e.metadata);let r=t==="incoming"?this._incomingCalls:this._outgoingCalls,s=new Oh(n,e,t);return r.push(s),e.on("error",a=>{console.error("Call error",a)}),e.on("close",()=>{console.log("Call ended",e.metadata),e.close();let a=r.indexOf(s);a!==-1&&r.splice(a,1)}),t==="incoming"&&(s.addEventListener("receive-video",a=>{this.dispatchEvent(a)}),e.on("stream",()=>{let a=setInterval(()=>{s.isOpen||(clearInterval(a),s.close())},2e3)})),s}},Oc=Ss;I(Oc,"instances",new Map);var kh=class extends Mh{context;peer;_sendingVideoStreams=new Map;constructor(e,t){super(),this.context=e,this.peer=t}startSendingVideo(e){this._sendingVideoStreams.has(e)||(this._sendingVideoStreams.set(e,[]),this.updateSendingCalls())}stopSendingVideo(e){if(e){let t=this._sendingVideoStreams.get(e);if(t){console.log("Closing calls",t);for(let i of t)i.close()}this._sendingVideoStreams.delete(e),t&&console.log("Currently sending",this._sendingVideoStreams)}}onConnectRoomFn=this.onConnectRoom.bind(this);onUserConnectedFn=this.onUserConnected.bind(this);onUserLeftFn=this.onUserLeft.bind(this);enable(){this.peer.enable(),this.context.connection.beginListen("peer-user-connected",this.onUserConnectedFn),this.peer.addEventListener("receive-video",this.onReceiveVideo.bind(this))}disable(){this.peer.disable()}onReceiveVideo(e){console.log("RECEIVE VIDEO",e),this.dispatchEvent({type:"receive-video",target:this,stream:e.stream,userId:e.userId})}onConnectRoom(){}onUserConnected(e){if(this.peer.id===e.guid){console.log("USER CONNECTED",e);let t=this._sendingVideoStreams.keys().next().value;this.peer.makeCall(e.peerId,t)}}onUserLeft(e){this.stopCallsToUsersThatAreNotInTheRoomAnymore()}updateSendingCalls(){let e=!1;for(let t of this._sendingVideoStreams.keys()){let i=this._sendingVideoStreams.get(t)||[];for(let n of this.context.connection.usersInRoom()){if(n===this.context.connection.connectionId)continue;if(!i.find(s=>s.userId===n)){let s=this.peer.makeCall(this.peer.getPeerIdFromUserId(n),t);s&&(e=!0,i.push(s))}}this._sendingVideoStreams.set(t,i)}this.stopCallsToUsersThatAreNotInTheRoomAnymore(),e&&console.log("Currently sending",this._sendingVideoStreams)}stopCallsToUsersThatAreNotInTheRoomAnymore(){for(let e of this._sendingVideoStreams.keys()){let t=this._sendingVideoStreams.get(e);if(!!t)for(let i=t.length-1;i>=0;i--){let n=t[i];this.context.connection.userIsInRoom(n.userId)||(n.close(),t.splice(i,1))}}}};import{ShadowMaterial as yw,AdditiveBlending as _w}from"three";var Rr=class extends M{mode=0;shadowColor=new Q(0,0,0,1);awake(){switch(this.mode){case 0:this.applyShadowMaterial();break;case 1:this.applyLightBlendMaterial();break}}applyLightBlendMaterial(){let e=R.getComponent(this.gameObject,ae);if(e){let t=e.sharedMaterial;t.blending=_w,this.applyMaterialOptions(t),t.onBeforeCompile=i=>{i.fragmentShader=i.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",`vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
299
299
  // diffuse-only lighting with overdrive to somewhat compensate
300
300
  // for the loss of indirect lighting and to make it more visible.
301
301
  vec3 direct = reflectedLight.directDiffuse * 3.;
@@ -305,12 +305,12 @@ a:hover {
305
305
  // be blended onto the scene.
306
306
  gl_FragColor = vec4(direct, max);
307
307
  return;
308
- `)}}}applyShadowMaterial(){let e=R.getComponent(this.gameObject,ae);if(e)if(e.sharedMaterial?.type!=="ShadowMaterial"){let t=new gw;t.color=this.shadowColor,t.opacity=this.shadowColor.alpha,this.applyMaterialOptions(t),e.sharedMaterial=t}else{let t=e.sharedMaterial;t.color=this.shadowColor,t.opacity=this.shadowColor.alpha,this.applyMaterialOptions(t)}}applyMaterialOptions(e){e&&(e.depthWrite=!1,e.stencilWrite=!1)}};v([y()],Tr.prototype,"mode",2),v([y(Q)],Tr.prototype,"shadowColor",2);import*as Oc from"three";import{Object3D as vw}from"three";var Mh=class extends M{target=null;followFactor=.1;rotateFactor=.1;positionAxes=-1;flipForward=!1;_firstUpdate=!0;onBeforeRender(){this.updateNow(!1)}updateNow(e){if(!(!this.target||this.target===this.gameObject)){if(this.followFactor>0){let t=B(this.target),i=this._firstUpdate||e?1:H.clamp01(this.context.time.deltaTime*this.followFactor),n=this.worldPosition;this.positionAxes&2&&(n.x=H.lerp(n.x,t.x,i)),this.positionAxes&4&&(n.y=H.lerp(n.y,t.y,i)),this.positionAxes&8&&(n.z=H.lerp(n.z,t.z,i)),this.worldPosition=n}if(this.rotateFactor>0){let t=me(this.target);this.flipForward&&t.premultiply(Mh._invertForward);let i=this._firstUpdate||e?1:H.clamp01(this.context.time.deltaTime*this.rotateFactor);this.worldQuaternion=this.worldQuaternion.slerp(t,i)}this._firstUpdate=!1}}},Mt=Mh;I(Mt,"_invertForward",new Oc.Quaternion().setFromAxisAngle(new Oc.Vector3(0,1,0),Math.PI)),v([y(vw)],Mt.prototype,"target",2),v([y()],Mt.prototype,"followFactor",2),v([y()],Mt.prototype,"rotateFactor",2),v([y()],Mt.prototype,"positionAxes",2);import*as _g from"three";import{HTMLMesh as yw}from"three/examples/jsm/interactive/HTMLMesh.js";import{InteractiveGroup as _w}from"three/examples/jsm/interactive/InteractiveGroup.js";var Ss=class extends M{id=null;keepAspect=!1;start(){if(!this.id||!this.context.mainCamera)return;let e=document.getElementById(this.id);if(!e){console.warn('Could not find element with id "'+this.id+'"');return}e.style.display="block",e.style.visibility="hidden";let t=new _w(this.context.renderer,this.context.mainCamera);this.gameObject.add(t);let i=new yw(e);t.add(i),i.visible=!1,console.log(i);let n=i.material;n.transparent=!0,setTimeout(()=>{i.visible=!0;let r=Qa(this.gameObject).clone();qa(this.gameObject,0,0,0),this.gameObject.updateMatrixWorld();let s=new _g.Box3;s.setFromObject(t),this.setWorldRotation(r.x,r.y,r.z);let a=s.max.x-s.min.x,c=s.max.y-s.min.y;if(this.keepAspect){let l=a/c;a>c?i.scale.set(1/a,1/c/l,1):i.scale.set(1/a*l,1/c,1)}else i.scale.set(1/a,1/c,1);let u=this.gameObject.scale;i.scale.multiply(u)},1)}};import{Layers as Eg}from"three";var wa=P("debugspatialtrigger"),xg=new Eg,wg=new Eg;function xw(o,e){return xg.mask=o,wg.mask=e,xg.test(wg)}var It=class extends M{triggerMask=0;onEnter;onStay;onExit;start(){wa&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(let e of zn.triggers)xw(e.triggerMask,this.triggerMask)&&e.test(this.gameObject)&&this.currentIntersected.push(e);for(let e=this.lastIntersected.length-1;e>=0;e--){let t=this.lastIntersected[e];this.currentIntersected.indexOf(t)<0&&(this.onExitTrigger(t),this.lastIntersected.splice(e,1))}for(let e of this.currentIntersected)this.lastIntersected.indexOf(e)<0&&this.onEnterTrigger(e),this.onStayTrigger(e);this.lastIntersected.length=0,this.lastIntersected.push(...this.currentIntersected)}currentIntersected=[];lastIntersected=[];onEnterTrigger(e){wa&&console.log("ENTER TRIGGER",this.name,e.name,this,e),e.raiseOnEnterEvent(this),this.onEnter?.invoke(this,e)}onExitTrigger(e){wa&&console.log("EXIT TRIGGER",this.name,e.name,this,e),e.raiseOnExitEvent(this),this.onExit?.invoke(this,e)}onStayTrigger(e){e.raiseOnStayEvent(this),this.onStay?.invoke(this,e)}};v([y()],It.prototype,"triggerMask",2),v([y(de)],It.prototype,"onEnter",2),v([y(de)],It.prototype,"onStay",2),v([y(de)],It.prototype,"onExit",2);var Ea=class extends M{triggerMask;boxHelper;start(){wa&&console.log(this.name,this.triggerMask,this)}onEnable(){Ea.triggers.push(this),this.boxHelper||(this.boxHelper=R.addNewComponent(this.gameObject,We),this.boxHelper?.showHelper(null,wa))}onDisable(){Ea.triggers.splice(Ea.triggers.indexOf(this),1)}test(e){return this.boxHelper?this.boxHelper.isInBox(e)??!1:!1}raiseOnEnterEvent(e){R.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof It&&t.onEnterTrigger(this)},!1)}raiseOnStayEvent(e){R.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof It&&t.onStayTrigger(this)},!1)}raiseOnExitEvent(e){R.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof It&&t.onExitTrigger(this)},!1)}},zn=Ea;I(zn,"triggers",[]),v([y()],zn.prototype,"triggerMask",2);import*as Rr from"three";var At=P("debugspectator"),Ps=class extends M{cam=null;_mode=0;get mode(){return this._mode}set mode(e){this._mode=e}get isSpectating(){return this._handler?.currentTarget!==void 0}isSpectatingUser(e){return this.target?.userId===e}isFollowedBy(e){return this.followers?.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){if(this._handler){let t=this._handler.currentTarget?.userId,i=this.context.players.getPlayerView(this.localId);e===void 0||this.context.isInXR===!1&&i?.currentObject===e.currentObject?this._handler.currentTarget!==void 0&&(this._handler.disable(),R.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._networking.onSpectatedObjectChanged(e,t)):this._handler.currentTarget!==e&&(this._handler.set(e),R.setActive(this.gameObject,!0),this.orbit&&(this.orbit.enabled=!1),this._networking.onSpectatedObjectChanged(e,t))}}get target(){return this._handler?.currentTarget}requestAllFollowMe(){this._networking.onRequestFollowMe()}get isSpectatingSelf(){return this.isSpectating&&this.target?.currentObject===this.context.players.getPlayerView(this.localId)?.currentObject}orbit=null;_handler;eventSub_WebXRRequestStartEvent=null;eventSub_WebXRStartEvent=null;eventSub_WebXREndEvent=null;_debug;_networking;awake(){if(this._debug=new Ah(this.context,this),this._networking=new jh(this.context,this),this._networking.awake(),R.setActive(this.gameObject,!1),this.cam=R.getComponent(this.gameObject,Z),!this.cam){console.error("Spectator camera needs camera component",this);return}!this._handler&&this.cam&&(this._handler=new Ih(this.context,this.cam,this)),this.eventSub_WebXRRequestStartEvent=this.onXRSessionRequestStart.bind(this),this.eventSub_WebXRStartEvent=this.onXRSessionStart.bind(this),this.eventSub_WebXREndEvent=this.onXRSessionEnded.bind(this),V.addEventListener("requestVRSession",this.eventSub_WebXRRequestStartEvent),V.addEventListener("xrStarted",this.eventSub_WebXRStartEvent),V.addEventListener("xrStopped",this.eventSub_WebXREndEvent),this.orbit=R.getComponent(this.context.mainCamera,nt)}onDestroy(){this.stopSpectating(),V.removeEventListener("requestVRSession",this.eventSub_WebXRStartEvent),V.removeEventListener("xrStarted",this.eventSub_WebXRStartEvent),V.removeEventListener("xrStopped",this.eventSub_WebXREndEvent),this._handler?.destroy(),this._networking.destroy()}isSupportedPlatform(){let e=window.navigator.userAgent,t=/Windows|MacOS/.test(e),i=/Windows NT/.test(e)&&/Edg/.test(e)&&!/Win64/.test(e);return t&&!i}onXRSessionRequestStart(e){!this.isSupportedPlatform()||R.setActive(this.gameObject,!0)}onXRSessionStart(e){!this.isSupportedPlatform()||(At&&console.log(this.context.mainCamera),this.context.mainCamera&&this.followSelf())}onXRSessionEnded(e){this.context.removeCamera(this.cam),R.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._handler?.set(void 0),this._handler?.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,"headset"),this.target=this.context.players.getPlayerView(this.localId)),At&&console.log("Follow self",this.target)}onAfterRender(){if(!this.cam)return;let e=this.context.renderer,t=e.xr.enabled;if(!e.xr.isPresenting&&!this._handler?.currentTarget)return;this._handler?.update(this._mode);let i=e.getRenderTarget(),n=null;if(!i){if(!e.state.bindFramebuffer||!e.state.bindXRFramebuffer)return;n=e._framebuffer,e.state.bindXRFramebuffer(null)}this.setAvatarFlagsBeforeRender();let r=this.context.mainCameraComponent;if(r){let c=r.backgroundColor;c&&e.setClearColor(c,c.alpha),this.cam.backgroundColor=c,this.cam.clearFlags=r.clearFlags,this.cam.nearClipPlane=r.nearClipPlane,this.cam.farClipPlane=r.farClipPlane}else e.setClearColor(new Rr.Color(1,1,1));e.setRenderTarget(null),e.xr.enabled=!1;let s=this.cam?.cam;this.context.updateAspect(s);let a=e.xr.isPresenting;e.xr.isPresenting=!1,e.setSize(this.context.domWidth,this.context.domHeight),e.render(this.context.scene,s),e.xr.isPresenting=a,e.xr.enabled=t,i?e.setRenderTarget(i):e.state.bindXRFramebuffer(n),this.resetAvatarFlags()}setAvatarFlagsBeforeRender(){let e=this._mode===0;for(let t of le.instances)if(t.avatar&&"isLocalAvatar"in t.avatar){let i=4294967295;this.isSpectatingSelf&&(i=e&&t.avatar.isLocalAvatar?8:16);let n=t.avatar.flags;if(!n)continue;for(let r of n)r.UpdateVisible(i)}}resetAvatarFlags(){for(let e of le.instances)if(e.avatar&&"flags"in e.avatar){let t=e.avatar.flags;if(!t)continue;for(let i of t)e.avatar?.isLocalAvatar?i.UpdateVisible(8):i.UpdateVisible(16)}}},Ih=class{context;cam;spectator;follow;target;view;currentObject;get currentTarget(){return this.view}constructor(e,t,i){this.context=e,this.cam=t,this.spectator=i}set(e){let t=e?.currentObject;if(!t){this.spectator.stopSpectating();return}t!==this.currentObject&&(this.currentObject=t,this.view=e,this.follow||(this.follow=R.addNewComponent(this.cam.gameObject,Mt)),this.target||(this.target=new Rr.Object3D),t.add(this.target),this.follow.enabled=!0,this.follow.target=this.target,At&&console.log("FOLLOW",t),this.context.isInXR?this.context.removeCamera(this.cam):this.context.setCurrentCamera(this.cam))}disable(){At&&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(){this.target?.removeFromParent(),this.follow&&R.destroy(this.follow)}update(e){if(this.currentTarget?.isConnected===!1||this.currentTarget?.removed===!0){At&&console.log("Target disconnected or timeout",this.currentTarget),this.spectator.stopSpectating();return}this.currentTarget&&this.currentTarget?.currentObject!==this.currentObject&&(At&&console.log("Target changed",this.currentObject,"to",this.currentTarget.currentObject),this.set(this.currentTarget));let t=this.context.mainCamera;t&&(this.cam.cam.near!==t.near||this.cam.cam.far!==t.far)&&(this.cam.cam.near=t.near,this.cam.cam.far=t.far,this.cam.cam.updateProjectionMatrix());let i=this.follow?.target;if(!(!i||!this.follow)){switch(e){case 0:this.view?.viewDevice!=="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,this.view?.viewDevice!=="browser"?i.quaternion.copy(ww):i.quaternion.identity()}}},ww=new Rr.Quaternion().setFromAxisAngle(new Rr.Vector3(0,1,0),Math.PI),Ah=class{context;spectator;constructor(e,t){this.context=e,this.spectator=t,console.log("Click other avatars or cameras to follow them. Press ESC to exit spectator mode."),window.addEventListener("keydown",n=>{n.key==="Escape"&&this.spectator.stopSpectating()});let i=0;this.context.input.addEventListener("pointerdown",n=>{i=this.context.time.time}),this.context.input.addEventListener("pointerup",n=>{let r=this.context.time.time-i;r>1?this.spectator.stopSpectating():this.context.input.getPointerClicked(0)&&r<.3&&this.trySelectObject()})}trySelectObject(){let e=new xe;e.setMask(16777215);let t=this.context.physics.raycast(e);if(At&&console.log(...t),t?.length)for(let i of t){if(i.distance<.2)continue;let n=i.object,r=R.getComponentInParent(n,le),s=r?.connectionId;if(s){let a=this.context.players.getPlayerView(s);this.spectator.target=a,At&&console.log("spectate",s,r);break}}}},Dh=class{guid;dontSave=!0;targetUserId;stoppedFollowing;constructor(e,t,i){this.guid=e,this.targetUserId=t,this.stoppedFollowing=i}},Lh=class{guid;userId;constructor(e,t){this.guid=e.guid,this.userId=t}},jh=class{followers=[];context;spectator;_followerEventMethod;_requestFollowMethod;_joinedRoomMethod;constructor(e,t){this.context=e,this.spectator=t,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("joined-room",this._joinedRoomMethod),document.addEventListener("keydown",e=>{e.key==="f"?this.onRequestFollowMe():e.key==="Escape"&&this.onRequestFollowMe(!0)})}destroy(){this.context.connection.stopListening("spectator-follower-changed",this._followerEventMethod),this.context.connection.stopListening("spectator-request-follow",this._requestFollowMethod),this.context.connection.stopListening("joined-room",this._joinedRoomMethod)}onSpectatedObjectChanged(e,t){if(At&&console.log(this.context.connection.connectionId,"onSpectatedObjectChanged",e,t),this.context.connection.connectionId){let i=e?.userId===void 0,n=i?t:e?.userId,r=new Dh(this.context.connection.connectionId,n,i);this.context.connection.send("spectator-follower-changed",r)}}onRequestFollowMe(e=!1){if(At&&console.log("Request follow",this.context.connection.connectionId),this.context.connection.connectionId){this.spectator.stopSpectating();let t=e?void 0:this.context.connection.connectionId,i=new Lh(this.spectator,t);this.context.connection.send("spectator-request-follow",i)}}onUserJoinedRoom(){P("followme")&&this.onRequestFollowMe()}onFollowerEvent(e){let t=e.targetUserId,i=e.guid;if(At&&console.log(e),t===this.context.connection.connectionId)if(e.stoppedFollowing){let 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 e=this.followers.length-1;e>=0;e--){let t=this.followers[e];this.context.connection.userIsInRoom(t)===!1&&this.followers.splice(e,1)}}_lastRequestFollowUser;onRequestFollowEvent(e){if(this._lastRequestFollowUser=e,e.userId===this.context.connection.connectionId)this.spectator.stopSpectating();else if(e.userId===void 0)this.spectator.stopSpectating();else{let t=this.context.players.getPlayerView(e.userId);if(t)this.spectator.target=t;else return At&&console.warn("Could not find view",e.userId),this.enforceFollow(),!1}return!0}_enforceFollowInterval;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):(At&&console.log("REQUEST FOLLOW AGAIN",this._lastRequestFollowUser.userId),this.onRequestFollowEvent(this._lastRequestFollowUser))},1e3))}};import*as lt from"three";import{Material as Ew,NearestFilter as Cg,Texture as Cw,Vector2 as Tg}from"three";var Fh=P("debugspriterenderer"),kc=class{static getOrCreateGeometry(e){if(e._geometry)return e._geometry;if(e.guid&&kc.cache[e.guid])return Fh&&console.log("Take cached geometry for sprite",e.guid),kc.cache[e.guid];let t=new lt.BufferGeometry;e._geometry=t;let i=new Float32Array(e.triangles.length*3),n=new Float32Array(e.triangles.length*2);for(let r=0;r<e.triangles.length;r+=1){let s=e.triangles[r];i[r*3]=-e.vertices[s].x,i[r*3+1]=e.vertices[s].y,i[r*3+2]=0;let a=e.uv[s];n[r*2]=a.x,n[r*2+1]=1-a.y}return t.setAttribute("position",new lt.BufferAttribute(i,3)),t.setAttribute("uv",new lt.BufferAttribute(n,2)),e.guid&&(this.cache[e.guid]=t),Fh&&console.log("Built sprite geometry",e,t),t}},Ca=kc;I(Ca,"cache",{});var ei=class{guid;texture;triangles;uv;vertices;_geometry};v([y()],ei.prototype,"guid",2),v([y(Cw)],ei.prototype,"texture",2),v([Bo()],ei.prototype,"triangles",2),v([Bo()],ei.prototype,"uv",2),v([Bo()],ei.prototype,"vertices",2);var Os=class{name;offset;size};v([y()],Os.prototype,"name",2),v([y(Tg)],Os.prototype,"offset",2),v([y(Tg)],Os.prototype,"size",2);var Hh=Symbol("spriteOwner"),an=class{sprite;index=0;slices;update(){let e=this.index;if(e<0||e>=this.slices.length)return;let t=this.slices[e],i=this.sprite?.texture;!i||(i.encoding=lt.sRGBEncoding,i.offset.set(t.offset.x,t.offset.y),i.minFilter==Cg&&i.magFilter==Cg&&(i.anisotropy=1),i.needsUpdate=!0)}};v([y(ei)],an.prototype,"sprite",2),v([y()],an.prototype,"index",2),v([y(Os)],an.prototype,"slices",2);var sn=class extends M{drawMode=0;size={x:1,y:1};color;sharedMaterial;get sprite(){return this._spriteSheet}set sprite(e){if(e!==this._spriteSheet)if(typeof e=="number"){let t=Math.floor(e);t===e&&(this.spriteIndex=t);return}else this._spriteSheet=e,this.updateSprite()}set spriteIndex(e){!this._spriteSheet||(this._spriteSheet.index=e,this._spriteSheet.update())}get spriteIndex(){return this._spriteSheet?.index??0}get spriteFrames(){return this._spriteSheet?.slices.length??0}_spriteSheet;_currentSprite;awake(){this._currentSprite=void 0,Fh&&(console.log("Awake",this.name,this,this.sprite?.sprite?.texture),this.sprite?.sprite?.texture&&console.log(this.sprite.sprite.texture.minFilter.toString(),this.sprite.sprite.texture.magFilter.toString()))}start(){this._currentSprite?this.gameObject&&this.gameObject.add(this._currentSprite):this.updateSprite()}updateSprite(){if(!this.__didAwake||!this.sprite?.sprite)return;let e=this.sprite.sprite;if(this._currentSprite)this._currentSprite.geometry=Ca.getOrCreateGeometry(e),this._currentSprite.material.map=e.texture;else{let t=new lt.MeshBasicMaterial({color:16777215,side:lt.DoubleSide});if(!t)return;if(this.color&&(t.color||(t.color=new lt.Color),t.color.copy(this.color),t.opacity=this.color.alpha),t.alphaTest=.5,e.texture&&!t.wireframe){let i=e.texture;i[Hh]!==void 0&&i[Hh]!==this&&this.spriteFrames>1&&(i=e.texture=i.clone()),i[Hh]=this,t.map=i}this.sharedMaterial=t,this._currentSprite=new lt.Mesh(Ca.getOrCreateGeometry(e),t)}this._currentSprite.parent!==this.gameObject&&(this.drawMode===2&&this._currentSprite.scale.set(this.size.x,this.size.y,1),this.gameObject&&this.gameObject.add(this._currentSprite)),this._spriteSheet?.update()}};v([y()],sn.prototype,"drawMode",2),v([y(Q)],sn.prototype,"color",2),v([y(Ew)],sn.prototype,"sharedMaterial",2),v([y(an)],sn.prototype,"sprite",1);var Dt=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSyncedCameraModel(e,t){return(t||new Dt).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSyncedCameraModel(e,t){return e.setPosition(e.position()+4),(t||new Dt).__init(e.readInt32(e.position())+e.position(),e)}userId(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}guid(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}dontSave(){let e=this.bb.__offset(this.bb_pos,8);return e?!!this.bb.readInt8(this.bb_pos+e):!1}pos(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}rot(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}static startSyncedCameraModel(e){e.startObject(5)}static addUserId(e,t){e.addFieldOffset(0,t,0)}static addGuid(e,t){e.addFieldOffset(1,t,0)}static addDontSave(e,t){e.addFieldInt8(2,+t,0)}static addPos(e,t){e.addFieldStruct(3,t,0)}static addRot(e,t){e.addFieldStruct(4,t,0)}static endSyncedCameraModel(e){return e.endObject()}static finishSyncedCameraModelBuffer(e,t){e.finish(t)}static finishSizePrefixedSyncedCameraModelBuffer(e,t){e.finish(t,void 0,!0)}};import{Object3D as Tw}from"three";var Mc="SCAM";Ho(Mc,Dt.getRootAsSyncedCameraModel);var Lt=new Ct,Bh=class{userId;guid;constructor(e,t){this.guid=t,this.userId=e}send(e,t){if(e){Lt.clear();let i=Lt.createString(this.guid),n=Lt.createString(this.userId);Dt.startSyncedCameraModel(Lt),Dt.addGuid(Lt,i),Dt.addUserId(Lt,n);let r=B(e),s=Qa(e);Dt.addPos(Lt,Te.createVec3(Lt,r.x,r.y,r.z)),Dt.addRot(Lt,Te.createVec3(Lt,s.x,s.y,s.z));let a=Dt.endSyncedCameraModel(Lt);Lt.finish(a,Mc),t.sendBinary(Lt.asUint8Array())}}},Ic=class extends M{getCameraObject(e){let t=this.userToCamMap[e];return t?this.remoteCams[t].obj:null}cameraPrefab=null;_lastWorldPosition;_lastWorldQuaternion;_model=null;_needsUpdate=!0;_lastUpdateTime=0;remoteCams={};userToCamMap={};_camTimeoutInSeconds=10;_receiveCallback=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.beginListenBinrary(Mc,this.onReceivedRemoteCameraInfoBin.bind(this))}onDisable(){this.context.connection.stopListenBinary(Mc,this._receiveCallback)}update(){for(let n in this.remoteCams){let r=this.remoteCams[n],s=this.context.time.realtimeSinceStartup-r.lastUpdate;if(!r||s>this._camTimeoutInSeconds){console.log("Remote cam timeout",r,s),r?.obj&&R.destroy(r.obj),delete this.remoteCams[n],r&&delete this.userToCamMap[r.userId],Ic.instances.push(r),this.context.players.removePlayerView(r.userId,"browser");continue}}if(V.IsInWebXR)return;let 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 Bh(this.context.connection.connectionId,this.context.connection.connectionId+"_camera"));let t=B(e),i=me(e);(t.distanceTo(this._lastWorldPosition)>.001||i.angleTo(this._lastWorldQuaternion)>.01)&&(this._needsUpdate=!0),this._lastWorldPosition.copy(t),this._lastWorldQuaternion.copy(i),!((!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,"browser"))}onReceivedRemoteCameraInfoBin(e){let t=e.guid();if(!t)return;let i=e.userId();if(!i||!this.context.connection.userIsInRoom(i)||!this.cameraPrefab)return;let n=this.remoteCams[t];if(!n)if("isObject3D"in this.cameraPrefab){let c=new Ue;c.context=this.context;let u=R.instantiate(this.cameraPrefab,c);n=this.remoteCams[t]={obj:u,lastUpdate:this.context.time.realtimeSinceStartup,userId:i},n.obj.visible=!0,this.gameObject.add(u),this.userToCamMap[i]=t,Ic.instances.push(n);let l=R.getOrAddComponent(u,le);l.connectionId=i,l.avatar=u}else return;let r=n.obj;this.context.players.setPlayerView(i,r,"browser"),n.lastUpdate=this.context.time.realtimeSinceStartup,re.markDirty(r);let s=e.pos();s&&fn(r,s.x(),s.y(),s.z());let a=e.rot();a&&qa(r,a.x(),a.y(),a.z())}},Sr=Ic;I(Sr,"instances",[]),v([y([Tw,tt])],Sr.prototype,"cameraPrefab",2);var Uh="view",Ac=P("debugsyncedroom"),ki=class extends M{roomName;urlParameterName="room";joinRandomRoom=!0;requireRoomParameter=!1;autoRejoin=!0;_roomPrefix;awake(){Ac&&console.log("Room",this.roomName,this.urlParameterName,this.joinRandomRoom,this.requireRoomParameter,this.autoRejoin),this._roomPrefix===void 0&&(this._roomPrefix=this.roomName,this.roomName="")}onEnable(){let e=P(Uh);if(e&&typeof e=="string"&&e.length>0){console.log("Join as viewer"),this.context.connection.joinRoom(e,!0);return}this.tryJoinRoom()}onDisable(){this.roomName&&this.roomName.length>0&&this.context.connection.leaveRoom(this.roomName)}tryJoinRoom(e=0){e===void 0&&(e=0);let t=!1;if(this.urlParameterName){let i=P(this.urlParameterName);if(i&&typeof i=="string"){t=!0;let n=up(i);this.roomName=n}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)&&(console.log("generate room name"),this.roomName=this.generateRoomName());return this.requireRoomParameter&&!t?(Ac&&console.log('No required room parameter "'+this.urlParameterName+'" in url - will not connect to networking backend.'),!1):!this.roomName||this.roomName.length<=0?(Ac&&console.error('Missing room name on "'+this.name+'". Make sure this is correctly configured in Unity',this.context.connection.isDebugEnabled?this:""),!1):(this.context.connection.isConnected||this.context.connection.connect(),Ac&&console.log("Join "+this.roomName),this._roomPrefix&&(this.roomName=this._roomPrefix+this.roomName),this.context.connection.joinRoom(this.roomName),!0)}_lastPingTime=0;_lastRoomTime=-1;update(){this.context.connection.isConnected&&(this.context.time.time-this._lastPingTime>3&&(this._lastPingTime=this.context.time.time,this.context.connection.send("ping",{time:this.context.time.time})),this.context.connection.isInRoom&&(this._lastRoomTime=this.context.time.time)),this._lastRoomTime>0&&this.context.time.time-this._lastRoomTime>.3&&(this._lastRoomTime=-1,this.autoRejoin?(console.log("Disconnected from networking backend - attempt reconnecting now"),this.tryJoinRoom()):console.warn("You are not connected to a room anymore (possibly because the tab was inactive for too long and the server kicked you)"))}get currentRoomName(){let e=P(Uh);return e||P(this.urlParameterName)}setRandomRoomUrlParameter(){let e=Yc(),t=this.generateRoomName();P(this.urlParameterName)?e.set(this.urlParameterName,t):e.append(this.urlParameterName,t),ap(t,e)}generateRoomName(){return cp()+"_"+lp(100,999)}getViewOnlyUrl(){if(this.context.connection.isConnected&&this.context.connection.currentRoomViewId){let e=window.location.search,t=new URLSearchParams(e);return t.has(this.urlParameterName)&&t.delete(this.urlParameterName),t.set(Uh,this.context.connection.currentRoomViewId),window.location.origin+window.location.pathname+"?"+t.toString()}return null}};v([y()],ki.prototype,"roomName",2),v([y()],ki.prototype,"urlParameterName",2),v([y()],ki.prototype,"joinRandomRoom",2),v([y()],ki.prototype,"requireRoomParameter",2),v([y()],ki.prototype,"autoRejoin",2);function Rg(){let o=P("testwindowcount")||0;o&&o>0&&Rw(o)}function Rw(o){if(P("testwindow"))return null;let e=new URL(window.location.href);yo(e.searchParams,$o,1),yo(e.searchParams,"testwindow",1);let t=e.toString(),i=[];window.onbeforeunload=()=>{for(let c of i)c.close()};let n=.05,r=128,s=0,a=0;for(let c=0;c<o;c++){s*r+r*.01>=window.innerWidth&&(a+=1,s=0);let u=s*(r*(1+n))+window.screenLeft,l=a*(r*(1+n))+window.screenTop+90+60*a;s+=1;let d=window.open(t,"test window "+c,`popup=yes width=${r} height=${r} top=${l} left=${u}`);if(!d){console.warn("Failed to open window");continue}i.push(d),d.onload=()=>{d.onbeforeunload=()=>{for(let h=0;h<i.length;h++){let g=i[h];g!==d&&g.close()}i.length=0}}}return i}import{Vector3 as Pw}from"three";var ks=class extends M{awake(){Rg()}},Ms=class extends M{transformsPerFrame=10;interval=0;useFlatbuffers=!0;awake(){if(this.useFlatbuffers)this.context.connection.beginListenBinrary(Ko,e=>{});else{this.models=[];for(let e=0;e<this.transformsPerFrame;e++)this.models.push(new Dc(this.context.connection.connectionId+"_simulatedTransform_"+e,this))}}builder=null;models=null;update(){if(!!this.context.connection.isConnected){if(this.useFlatbuffers){if(!this.context.connection.connectionId||this.context.time.frameCount%this.interval!==0)return;this.builder===null&&(this.builder=new Ct(1024));let e=this.builder;for(let t=0;t<this.transformsPerFrame;t++){e.clear();let i=Od(this.context.connection.connectionId,this);this.context.connection.sendBinary(i)}}else if(this.models)for(let e=0;e<this.models.length;e++){let t=this.models[e];t.dontSave=!0,t.update(this,null),this.context.connection.send("TestSimulateUserData-"+e,t)}}}},Dc=class{guid;fast=!1;position;rotation;velocity=void 0;dontSave;isValid(){return this.fast!==void 0||this.position!==void 0||this.rotation!==void 0||this.velocity!==void 0}constructor(e,t){this.guid=e,this.position={x:0,y:0,z:0},this.rotation={x:0,y:0,z:0,w:0},this.update(t,null)}update(e,t){let i=e.worldPosition;this.position.x=i.x,this.position.y=i.y,this.position.z=i.z;let n=e.worldQuaternion;if(this.rotation.x=n.x,this.rotation.y=n.y,this.rotation.z=n.z,this.rotation.w=n.w,this.fast=!1,t){let r=t.getVelocity();this.velocity===void 0&&(this.velocity={x:0,y:0,z:0}),this.velocity.x=r.x,this.velocity.y=r.y,this.velocity.z=r.z}}};I(Dc,"temp",new Pw);import{MathUtils as Ow}from"three";import{TransformControls as kw}from"three/examples/jsm/controls/TransformControls.js";import{OrbitControls as Mw}from"three/examples/jsm/controls/OrbitControls.js";var mo=class extends M{isGizmo=!0;control;orbit;awake(){this.isGizmo&&!Di||!this.context.mainCamera||(this.control=new kw(this.context.mainCamera,this.context.renderer.domElement),this.control.visible=!0,this.control.enabled=!0,this.control.getRaycaster().layers.set(2),this.control.size=.6,this.control.traverse(e=>{let t=e;if(t.layers.set(2),t){let i=t.material;i&&(i.opacity=.3)}}))}start(){if(this.context.mainCamera){let e=R.getComponentInParent(this.context.mainCamera,Mw)??void 0;this.orbit=e}}changeEventListener;windowKeyDownListener;windowKeyUpListener;onEnable(){this.control&&(this.context.scene.add(this.control),this.control.attach(this.gameObject)),this.changeEventListener=this.onControlChangedEvent.bind(this),this.control?.addEventListener("dragging-changed",this.changeEventListener),this.attachWindowEvents()}onDisable(){this.control?.removeFromParent(),this.changeEventListener&&this.control?.removeEventListener("dragging-changed",this.changeEventListener)}onControlChangedEvent(e){let t=this.orbit;if(t&&(t.enabled=!e.value),e.value){let i=R.getComponentInParent(this.gameObject,Pt);i&&i.requestOwnership()}}attachWindowEvents(){let e=this.control;!e||(this.windowKeyDownListener||(this.windowKeyDownListener=t=>{switch(t.keyCode){case 81:e.setSpace(e.space==="local"?"world":"local");break;case 16:e.setTranslationSnap(100),e.setRotationSnap(Ow.degToRad(15)),e.setScaleSnap(.25);break;case 87:e.setMode("translate");break;case 69:e.setMode("rotate");break;case 82:e.setMode("scale");break;case 187:case 107:e.setSize(e.size+.1);break;case 189:case 109:e.setSize(Math.max(e.size-.1,.1));break;case 88:e.showX=!e.showX;break;case 89:e.showY=!e.showY;break;case 90:e.showZ=!e.showZ;break;case 32:e.enabled=!e.enabled;break}}),this.windowKeyUpListener||(this.windowKeyUpListener=t=>{switch(t.keyCode){case 16:e.setTranslationSnap(null),e.setRotationSnap(null),e.setScaleSnap(null);break}}),window.addEventListener("keydown",this.windowKeyDownListener),window.addEventListener("keyup",this.windowKeyUpListener))}};v([y()],mo.prototype,"isGizmo",2);import{Object3D as Aw}from"three";import*as Mg from"three";import{USDZExporter as Dw}from"three/examples/jsm/exporters/USDZExporter.js";function Sg(o){let e=o.domElement.querySelector("link[rel='ar']");if(e)return e;let t=document.createElement("div");t.classList.add("menu"),t.classList.add("quicklook-menu"),t.style.display="none",t.style.visibility="hidden";let i=document.createElement("button");i.id="open-in-ar",i.innerText="Open in QuickLook",t.appendChild(i);let n=document.createElement("a");n.id="needle-usdz-link",n.style.display="none",n.rel="ar",n.href="",t.appendChild(n);let r=document.createElement("img");return r.id="button",n.appendChild(r),o.domElement.appendChild(t),n}function Pg(){var o=new Date;let e=o.getMonth()+1,t=o.getDate(),i=o.getHours(),n=o.getMinutes(),r=o.getSeconds(),s=(e<10?"0":"")+e,a=(t<10?"0":"")+t,c=(i<10?"0":"")+i,u=(n<10?"0":"")+n,l=(r<10?"0":"")+r;return o.getFullYear()+s+a+"-"+c+u+l}import{AnimationClip as Iw,KeyframeTrack as Og}from"three";var Lc=P("debugusdz");function kg(o,e){let t=[],i=R.getComponentsInChildren(o,Ee),n=!1;Lc&&console.log(i);for(let r of i){if(!r||!r.runtimeAnimatorController)continue;Lc&&console.log(r);let s=[];for(let a of r.runtimeAnimatorController.enumerateActions()){Lc&&console.log(a);let c=a.getClip();if(!n&&c.tracks.length>0){n=!0;let u=c.tracks[0],l=u.name.substring(0,u.name.lastIndexOf(".")),d=new Og(l+".position",[0,.01],[0,0,0,0,0,0]),h=new Og(l+".quaternion",[0,.01],[0,0,0,1,0,0,0,1]);s.push(new Iw("rest",.01,[d,h]))}s.includes(c)||s.push(c)}t.push({root:r.gameObject,clips:s})}Lc&&console.log(t);for(let r of t)for(let s of r.clips)e.registerAnimation(r.root,s)}var Ta=P("debugusdz"),Pr=class extends M{objectToExport;autoExportAnimations=!1;extensions=[];link;webxr;webARSessionRoot;start(){Ta&&(window.addEventListener("keydown",e=>{switch(e.key){case"t":this.exportAsync();break}}),xo()&&setTimeout(()=>{this.exportAsync()},2e3)),document.getElementById("open-in-ar")?.addEventListener("click",e=>{e.preventDefault(),this.exportAsync()}),this.objectToExport||(this.objectToExport=this.gameObject)}onEnable(){let e=wo(),t=ja();(Ta||e&&t)&&(this.createQuicklookButton(),this.webARSessionRoot=R.findObjectOfType(gt)??void 0,this.lastCallback=this.quicklookCallback.bind(this),this.link=Sg(this.context),this.link.addEventListener("message",this.lastCallback))}onDisable(){this.link?.removeEventListener("message",this.lastCallback)}async exportAsync(){if(!this.objectToExport)return;if(this.webARSessionRoot){let h=this.webARSessionRoot.gameObject,g=1/this.webARSessionRoot.arScale;h.matrix.makeScale(g,g,g),this.webARSessionRoot.invertForward&&h.matrix.multiply(new Mg.Matrix4().makeRotationY(Math.PI))}let e=new Dw,t=[...this.extensions],i=new nr;t.push(i),this.autoExportAnimations&&kg(this.objectToExport,i);let n={self:this,exporter:e,extensions:t,object:this.objectToExport};this.dispatchEvent(new CustomEvent("before-export",{detail:n}));let r="needle";Ta&&(r+="-"+Pg()),e.debug=Ta;let s=await e.parse(this.objectToExport,t),a=new Blob([s],{type:"application/octet-stream"});this.dispatchEvent(new CustomEvent("after-export",{detail:n}));let c=this.buildQuicklookOverlay(),u=c.callToAction?encodeURIComponent(c.callToAction):"",l=c.checkoutTitle?encodeURIComponent(c.checkoutTitle):"",d=c.checkoutSubtitle?encodeURIComponent(c.checkoutSubtitle):"";this.link.href=URL.createObjectURL(a)+`#callToAction=${u}&checkoutTitle=${l}&checkoutSubtitle=${d}&`,this.lastCallback||(this.lastCallback=this.quicklookCallback.bind(this),this.link.addEventListener("message",this.lastCallback)),this.link.download=r+".usdz",this.link.click()}lastCallback;quicklookCallback(e){e?.data=="_apple_ar_quicklook_button_tapped"&&(Ta&&Xn("Quicklook closed via call to action button"),this.dispatchEvent(new CustomEvent("quicklook-button-tapped",{detail:this})))}buildQuicklookOverlay(){let e={};return e.callToAction="Close",e.checkoutTitle="\u{1F335} Made with Needle",e.checkoutSubtitle="_",this.dispatchEvent(new CustomEvent("quicklook-overlay",{detail:e})),e}_arButton;async createQuicklookButton(){if(!this.webxr)if(await _o(1),this.webxr=R.findObjectOfType(V)??void 0,this.webxr)if(this.webxr.VRButton&&this.webxr.VRButton.parentElement?.removeChild(this.webxr.VRButton),this.webxr.ARButton&&this._arButton!==this.webxr.ARButton){this._arButton=this.webxr.ARButton;let e=this.webxr.ARButton.parentElement?.querySelector("a");e&&(e.href=""),this.webxr.ARButton.innerText="Open in Quicklook",this.webxr.ARButton.disabled=!1,this.webxr.ARButton.addEventListener("click",t=>{t.preventDefault(),this.exportAsync()}),this.webxr.ARButton.classList.add("quicklook-ar-button"),this.dispatchEvent(new CustomEvent("created-button",{detail:this.webxr.ARButton}))}else{this.webxr.createARButton=!1,this.webxr.createVRButton=!1;let e=window.document.querySelector(".webxr-buttons");e||(e=document.createElement("div"),e.classList.add("webxr-buttons"));let t=document.createElement("button");t.innerText="Open in Quicklook",t.addEventListener("click",()=>{this.exportAsync()}),t.classList.add("webxr-ar-button"),t.classList.add("webxr-button"),t.classList.add("quicklook-ar-button"),e.appendChild(t),this.dispatchEvent(new CustomEvent("created-button",{detail:t}))}else console.warn("Could not find WebXR component: will not create Quicklook button",G.Current)}resetStyles(e){e.style.position="",e.style.top="",e.style.left="",e.style.width="",e.style.height="",e.style.margin="",e.style.padding="",e.style.border="",e.style.background="",e.style.color="",e.style.font="",e.style.textAlign="",e.style.opacity="",e.style.zIndex=""}};v([y(Aw)],Pr.prototype,"objectToExport",2),v([y()],Pr.prototype,"autoExportAnimations",2);import{Vector3 as Lw}from"three";var go=class{guid;dontSave=!0;userId;point={x:0,y:0,z:0};source={x:0,y:0,z:0};target;update(e,t,i,n=void 0){this.userId=e.connection.connectionId,this.point.x=t.x,this.point.y=t.y,this.point.z=t.z,this.source.x=i.x,this.source.y=i.y,this.source.z=i.z,this.target=n}},Is=class extends M{prefab=null;_grabModels=[];_grabModelsUpdateTime=[];_addOrUpdateSub=null;_endSub=null;_freeSub=null;_instances={};awake(){this.prefab&&(this.prefab.visible=!1)}onEnable(){this._addOrUpdateSub=this.context.connection.beginListen("xr-grab-visual-start-or-update",this.onRemoteGrabStartOrUpdate.bind(this)),this._endSub=this.context.connection.beginListen("xr-grab-visual-end",this.onRemoteGrabEnd.bind(this)),this._freeSub=vt.AddEventListener("WillFree",this.onAttachedObjectFree.bind(this))}onDisable(){this.context.connection.stopListening("xr-grab-visual-start-or-update",this._addOrUpdateSub),this.context.connection.stopListening("xr-grab-visual-end",this._endSub),vt.RemoveEventListener("WillFree",this._freeSub)}addOrUpdateGrab(e){this.context.connection.send("xr-grab-visual-start-or-update",e,2)}endGrab(e){this.context.connection.send("xr-grab-visual-end",e,2)}onRemoteGrabStartOrUpdate(e){if(!this.prefab)return;let t=this._instances[e.guid];if(!t){let i=R.instantiate(this.prefab);if(i.visible=!0,this._instances[e.guid]={instance:i,model:e},e.userId){let n=R.getComponentsInChildren(i,Pi);if(n?.length>0)for(let r of n)r.assignUserColor(e.userId)}return}t.model=e}onRemoteGrabEnd(e){if(!e)return;let t=e.guid;this._instances[t]&&(R.destroy(this._instances[t].instance),delete this._instances[t])}onAttachedObjectFree(e){if(this._grabModels.length<=0)return;let t=this._grabModels[0];this.updateModel(t,e),this.endGrab(t)}onBeforeRender(){if(this.updateRendering(),!!this.prefab&&(this.prefab.visible=!1,this.context.time.frameCount%10===0))for(let e=0;e<vt.Current.length;e++){let t=vt.Current[e];if(!t.controller||!t.selected)continue;this._grabModels.length<=e&&(this._grabModels.push(new go),this._grabModelsUpdateTime.push(0)),this._grabModelsUpdateTime[e]=this.context.time.time;let i=this._grabModels[e];this.updateModel(i,t),this.addOrUpdateGrab(i)}}updateModel(e,t){if(!t.controller||!t.selected)return;e.guid=t.grabUUID;let i=t.selected.guid;e.update(this.context,t.grabPoint,t.controller.worldPosition,i)}temp=new Lw;updateRendering(){let e=this.context.time.deltaTime/.5;for(let t in this._instances){let{instance:i,model:n}=this._instances[t];if(!i||!n)continue;let{point:r}=n,s=B(i);this.temp.set(r.x,r.y,r.z),s.lerp(this.temp,e),te(i,s)}}};var Ra=class{};import{Object3D as jw}from"three";var Sa=class extends M{asset;joinedRoomFunction;awake(){this.watchTabVisible(),this.joinedRoomFunction=this.onUserJoined.bind(this)}onEnable(){this.context.connection.beginListen("joined-room",this.joinedRoomFunction)}onDisable(){this.context.connection.stopListening("joined-room",this.joinedRoomFunction)}async onUserJoined(e){let t=await this.asset?.instantiateSynced({parent:this.gameObject},!0);if(t){let i=R.getComponent(t,ln);i&&(i.owner=this.context.connection.connectionId)}}watchTabVisible(){window.addEventListener("visibilitychange",e=>{if(document.visibilityState==="visible")for(let t=ln.all.length-1;t>=0;t--){let i=ln.all[t];(!i.owner||!this.context.connection.userIsInRoom(i.owner))&&i.doDestroy()}})}};v([y(tt)],Sa.prototype,"asset",2);var ti=class extends M{static get all(){return ti._all}static get local(){return ti._local}static isLocalPlayer(e){return e instanceof jw?R.getComponentInParent(e,ti)?.isLocalPlayer??!1:e instanceof Tt?R.getComponentInParent(e.gameObject,ti)?.isLocalPlayer??!1:!1}owner;get isLocalPlayer(){return this.owner===this.context.connection.connectionId}awake(){this.isLocalPlayer&&ti.local.push(this),ti.all.push(this),this.context.connection.beginListen("user-left-room",e=>{if(e.userId===this.owner){this.doDestroy();return}})}start(){if(!this.owner||!this.context.connection.userIsInRoom(this.owner)){this.doDestroy();return}}doDestroy(){So(this.gameObject,this.context.connection)}onDestroy(){if(ti.all.splice(ti.all.indexOf(this),1),this.isLocalPlayer){let e=ti._local.indexOf(this);e>=0&&ti._local.splice(e,1)}}},ln=ti;I(ln,"_all",[]),I(ln,"_local",[]),v([Ec(),y()],ln.prototype,"owner",2);var jc=class extends M{toggleKey="p";update(){this.context.input.isKeyDown("p")&&this.context.domElement.classList.toggle("presentation-mode")}};O.add("__Ignore",Ra);O.add("AlignmentConstraint",ir);O.add("Animation",rt);O.add("AnimationCurve",mi);O.add("AnimationExtension",nr);O.add("AnimationTrackHandler",rr);O.add("Animator",Ee);O.add("AnimatorController",hi);O.add("AttachedObject",vt);O.add("AudioListener",gi);O.add("AudioSource",oe);O.add("AudioTrackHandler",or);O.add("Avatar_Brain_LookAt",Pn);O.add("Avatar_MouthShapes",dr);O.add("Avatar_MustacheShake",is);O.add("Avatar_POI",ve);O.add("AvatarBlink_Simple",Qi);O.add("AvatarEyeLook_Rotation",qi);O.add("AvatarLoader",sr);O.add("AvatarMarker",le);O.add("AvatarModel",Jr);O.add("AxesHelper",In);O.add("BaseUIComponent",ze);O.add("BasicIKConstraint",ns);O.add("BoxCollider",fr);O.add("BoxGizmo",yi);O.add("BoxHelperComponent",We);O.add("Button",qt);O.add("CallInfo",bi);O.add("Camera",Z);O.add("Canvas",Ne);O.add("CanvasGroup",jn);O.add("CapsuleCollider",Xt);O.add("CharacterController",Yi);O.add("CharacterControllerInput",Ci);O.add("Collider",Ot);O.add("ColorAdjustments",br);O.add("ColorBySpeedModule",Ti);O.add("ColorOverLifetimeModule",Hn);O.add("ControlTrackHandler",Sn);O.add("Deletable",us);O.add("DeleteBox",oo);O.add("DeviceFlag",so);O.add("DragControls",Ji);O.add("DropListener",vr);O.add("Duplicatable",Zi);O.add("EmissionModule",xt);O.add("EventList",de);O.add("EventListEvent",qr);O.add("EventSystem",Ke);O.add("EventTrigger",ao);O.add("FieldWithDefault",hs);O.add("FixedJoint",fs);O.add("FlyControls",ms);O.add("GltfExport",$t);O.add("GltfExportBox",gs);O.add("Gradient",Ri);O.add("Graphic",_t);O.add("GraphicRaycaster",bs);O.add("GridHelper",Gn);O.add("GridLayoutGroup",_s);O.add("GroundProjectedEnv",tn);O.add("HingeJoint",yr);O.add("HorizontalLayoutGroup",ys);O.add("Image",Dn);O.add("InheritVelocityModule",Jt);O.add("InputField",kt);O.add("Interactable",Vt);O.add("Keyboard",xs);O.add("LayoutGroup",Vn);O.add("Light",Qe);O.add("LimitVelocityOverLifetimeModule",ue);O.add("LODGroup",_r);O.add("LODModel",nn);O.add("LogStats",Es);O.add("LookAtConstraint",xn);O.add("MainModule",ye);O.add("MaskableGraphic",An);O.add("MeshCollider",$r);O.add("MeshRenderer",lo);O.add("MinMaxCurve",U);O.add("MinMaxGradient",Me);O.add("NestedGltf",po);O.add("Networking",Si);O.add("NoiseModule",K);O.add("ObjectRaycaster",uo);O.add("OffsetConstraint",rn);O.add("OrbitControls",nt);O.add("ParticleBurst",Fn);O.add("ParticleSubEmitter",xr);O.add("ParticleSystem",be);O.add("ParticleSystemRenderer",on);O.add("PlayableDirector",Tn);O.add("PlayerColor",Pi);O.add("PlayerState",ln);O.add("PlayerSync",Sa);O.add("PointerEventData",_i);O.add("PresentationMode",jc);O.add("RawImage",io);O.add("Raycaster",co);O.add("Rect",to);O.add("RectTransform",yt);O.add("ReflectionProbe",Zt);O.add("RegisteredAnimationInfo",Xr);O.add("RemoteSkybox",Oi);O.add("Renderer",ae);O.add("RendererLightmap",Un);O.add("RGBAColor",Q);O.add("Rigidbody",J);O.add("RotationBySpeedModule",Xe);O.add("RotationOverLifetimeModule",Je);O.add("ScreenCapture",Cr);O.add("ShadowCatcher",Tr);O.add("ShapeModule",ie);O.add("SignalAsset",Yr);O.add("SignalReceiver",Cn);O.add("SignalReceiverEvent",Kr);O.add("SignalTrackHandler",Rn);O.add("Size",os);O.add("SizeBySpeedModule",ke);O.add("SizeOverLifetimeModule",Kt);O.add("SkinnedMeshRenderer",ps);O.add("SmoothFollow",Mt);O.add("SpatialHtml",Ss);O.add("SpatialTrigger",zn);O.add("SpatialTriggerReceiver",It);O.add("SpectatorCamera",Ps);O.add("SphereCollider",pr);O.add("Sprite",ei);O.add("SpriteRenderer",sn);O.add("SpriteSheet",an);O.add("SubEmitterSystem",wr);O.add("SyncedCamera",Sr);O.add("SyncedRoom",ki);O.add("SyncedTransform",Pt);O.add("TeleportTarget",Zr);O.add("TestRunner",ks);O.add("TestSimulateUserData",Ms);O.add("Text",Ie);O.add("TextureSheetAnimationModule",_e);O.add("ToneMapping",gr);O.add("TrailModule",ee);O.add("TransformData",Qr);O.add("TransformGizmo",mo);O.add("UIRaycastUtils",wi);O.add("UIRootComponent",Mn);O.add("UsageMarker",zt);O.add("USDZExporter",Pr);O.add("VelocityOverLifetimeModule",He);O.add("VerticalLayoutGroup",vs);O.add("VideoPlayer",Re);O.add("Voip",ot);O.add("Volume",ro);O.add("VolumeComponent",Ki);O.add("VolumeParameter",ls);O.add("VolumeProfile",mr);O.add("VRUserState",Nt);O.add("WebAR",ur);O.add("WebARSessionRoot",gt);O.add("WebXR",V);O.add("WebXRAvatar",Gt);O.add("WebXRController",se);O.add("WebXRSync",kn);O.add("XRFlag",Ce);O.add("XRGrabModel",go);O.add("XRGrabRendering",Is);O.add("XRRig",cr);O.add("XRState",St);var Ig=pe,Hw=P("debugtypestore");Hw&&console.log(O);function Ag(o,e){let i=lu(o,e);return i!==void 0?i:null}var Fw=new za;async function Dg(o,e,t,i=null,n){if(!t)return;let r=[],s=i;typeof s=="number"&&(s=new Se(i));let a=new Co(t.scene);a.gltfId=e,a.context=o,a.gltf=t,a.nodeToObject=n?.nodeToObjectMap,a.implementationInformation=Fw;let c=[];if(t.scenes)for(let u of t.scenes)await zh(a,u,c,r);if(t.children)for(let u of t.children)await zh(a,u,c,r);o.new_scripts_pre_setup_callbacks.push(()=>{for(let u of c)Bw(u,a);if(s){Vh(t,s);for(let u of t.scenes)Vh(u,s)}})}function Vh(o,e){if(e!==null&&!!o){if(o.guid=e.generateUUID(),o&&o.userData&&o.userData.components)for(let t of o.userData.components)t!==null&&(t.guid=e.generateUUID());if(o.children)for(let t of o.children)Vh(t,e)}}var Pa=[];async function zh(o,e,t,i){if(!e)return;let n=e.userData;if(n){let r=n.builtin_components;if(r&&r.length>0)for(let s of r)try{if(s===null)continue;let a=O.get(s.name);if(a!=null){let c=new a;c.sourceId=o.gltfId,jt(c,s,o.implementationInformation),Ht(e,c,!1),t.push({instance:c,compData:s,obj:e})}else Ig&&console.debug("unknown component: "+s.name),Pa.includes(s.name)||Pa.push(s.name)}catch(a){console.error(s.name+" - "+a.message,a)}if(Pa.length>0){let s=Pa.join(", ");console.warn("unknown components: "+s),Pa.length=0,ut()&&Fe(`<strong>Unknown components in scene</strong>:
308
+ `)}}}applyShadowMaterial(){let e=R.getComponent(this.gameObject,ae);if(e)if(e.sharedMaterial?.type!=="ShadowMaterial"){let t=new yw;t.color=this.shadowColor,t.opacity=this.shadowColor.alpha,this.applyMaterialOptions(t),e.sharedMaterial=t}else{let t=e.sharedMaterial;t.color=this.shadowColor,t.opacity=this.shadowColor.alpha,this.applyMaterialOptions(t)}}applyMaterialOptions(e){e&&(e.depthWrite=!1,e.stencilWrite=!1)}};v([y()],Rr.prototype,"mode",2),v([y(Q)],Rr.prototype,"shadowColor",2);import*as kc from"three";import{Object3D as xw}from"three";var Ih=class extends M{target=null;followFactor=.1;rotateFactor=.1;positionAxes=-1;flipForward=!1;_firstUpdate=!0;onBeforeRender(){this.updateNow(!1)}updateNow(e){if(!(!this.target||this.target===this.gameObject)){if(this.followFactor>0){let t=B(this.target),i=this._firstUpdate||e?1:H.clamp01(this.context.time.deltaTime*this.followFactor),n=this.worldPosition;this.positionAxes&2&&(n.x=H.lerp(n.x,t.x,i)),this.positionAxes&4&&(n.y=H.lerp(n.y,t.y,i)),this.positionAxes&8&&(n.z=H.lerp(n.z,t.z,i)),this.worldPosition=n}if(this.rotateFactor>0){let t=me(this.target);this.flipForward&&t.premultiply(Ih._invertForward);let i=this._firstUpdate||e?1:H.clamp01(this.context.time.deltaTime*this.rotateFactor);this.worldQuaternion=this.worldQuaternion.slerp(t,i)}this._firstUpdate=!1}}},Mt=Ih;I(Mt,"_invertForward",new kc.Quaternion().setFromAxisAngle(new kc.Vector3(0,1,0),Math.PI)),v([y(xw)],Mt.prototype,"target",2),v([y()],Mt.prototype,"followFactor",2),v([y()],Mt.prototype,"rotateFactor",2),v([y()],Mt.prototype,"positionAxes",2);import*as xg from"three";import{HTMLMesh as ww}from"three/examples/jsm/interactive/HTMLMesh.js";import{InteractiveGroup as Ew}from"three/examples/jsm/interactive/InteractiveGroup.js";var Ps=class extends M{id=null;keepAspect=!1;start(){if(!this.id||!this.context.mainCamera)return;let e=document.getElementById(this.id);if(!e){console.warn('Could not find element with id "'+this.id+'"');return}e.style.display="block",e.style.visibility="hidden";let t=new Ew(this.context.renderer,this.context.mainCamera);this.gameObject.add(t);let i=new ww(e);t.add(i),i.visible=!1,console.log(i);let n=i.material;n.transparent=!0,setTimeout(()=>{i.visible=!0;let r=qa(this.gameObject).clone();Ya(this.gameObject,0,0,0),this.gameObject.updateMatrixWorld();let s=new xg.Box3;s.setFromObject(t),this.setWorldRotation(r.x,r.y,r.z);let a=s.max.x-s.min.x,c=s.max.y-s.min.y;if(this.keepAspect){let l=a/c;a>c?i.scale.set(1/a,1/c/l,1):i.scale.set(1/a*l,1/c,1)}else i.scale.set(1/a,1/c,1);let u=this.gameObject.scale;i.scale.multiply(u)},1)}};import{Layers as Cg}from"three";var Ea=P("debugspatialtrigger"),wg=new Cg,Eg=new Cg;function Cw(o,e){return wg.mask=o,Eg.mask=e,wg.test(Eg)}var It=class extends M{triggerMask=0;onEnter;onStay;onExit;start(){Ea&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(let e of Wn.triggers)Cw(e.triggerMask,this.triggerMask)&&e.test(this.gameObject)&&this.currentIntersected.push(e);for(let e=this.lastIntersected.length-1;e>=0;e--){let t=this.lastIntersected[e];this.currentIntersected.indexOf(t)<0&&(this.onExitTrigger(t),this.lastIntersected.splice(e,1))}for(let e of this.currentIntersected)this.lastIntersected.indexOf(e)<0&&this.onEnterTrigger(e),this.onStayTrigger(e);this.lastIntersected.length=0,this.lastIntersected.push(...this.currentIntersected)}currentIntersected=[];lastIntersected=[];onEnterTrigger(e){Ea&&console.log("ENTER TRIGGER",this.name,e.name,this,e),e.raiseOnEnterEvent(this),this.onEnter?.invoke(this,e)}onExitTrigger(e){Ea&&console.log("EXIT TRIGGER",this.name,e.name,this,e),e.raiseOnExitEvent(this),this.onExit?.invoke(this,e)}onStayTrigger(e){e.raiseOnStayEvent(this),this.onStay?.invoke(this,e)}};v([y()],It.prototype,"triggerMask",2),v([y(de)],It.prototype,"onEnter",2),v([y(de)],It.prototype,"onStay",2),v([y(de)],It.prototype,"onExit",2);var Ca=class extends M{triggerMask;boxHelper;start(){Ea&&console.log(this.name,this.triggerMask,this)}onEnable(){Ca.triggers.push(this),this.boxHelper||(this.boxHelper=R.addNewComponent(this.gameObject,We),this.boxHelper?.showHelper(null,Ea))}onDisable(){Ca.triggers.splice(Ca.triggers.indexOf(this),1)}test(e){return this.boxHelper?this.boxHelper.isInBox(e)??!1:!1}raiseOnEnterEvent(e){R.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof It&&t.onEnterTrigger(this)},!1)}raiseOnStayEvent(e){R.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof It&&t.onStayTrigger(this)},!1)}raiseOnExitEvent(e){R.foreachComponent(this.gameObject,t=>{t!==e&&t instanceof It&&t.onExitTrigger(this)},!1)}},Wn=Ca;I(Wn,"triggers",[]),v([y()],Wn.prototype,"triggerMask",2);import*as Sr from"three";var At=P("debugspectator"),Os=class extends M{cam=null;_mode=0;get mode(){return this._mode}set mode(e){this._mode=e}get isSpectating(){return this._handler?.currentTarget!==void 0}isSpectatingUser(e){return this.target?.userId===e}isFollowedBy(e){return this.followers?.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){if(this._handler){let t=this._handler.currentTarget?.userId,i=this.context.players.getPlayerView(this.localId);e===void 0||this.context.isInXR===!1&&i?.currentObject===e.currentObject?this._handler.currentTarget!==void 0&&(this._handler.disable(),R.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._networking.onSpectatedObjectChanged(e,t)):this._handler.currentTarget!==e&&(this._handler.set(e),R.setActive(this.gameObject,!0),this.orbit&&(this.orbit.enabled=!1),this._networking.onSpectatedObjectChanged(e,t))}}get target(){return this._handler?.currentTarget}requestAllFollowMe(){this._networking.onRequestFollowMe()}get isSpectatingSelf(){return this.isSpectating&&this.target?.currentObject===this.context.players.getPlayerView(this.localId)?.currentObject}orbit=null;_handler;eventSub_WebXRRequestStartEvent=null;eventSub_WebXRStartEvent=null;eventSub_WebXREndEvent=null;_debug;_networking;awake(){if(this._debug=new Dh(this.context,this),this._networking=new Hh(this.context,this),this._networking.awake(),R.setActive(this.gameObject,!1),this.cam=R.getComponent(this.gameObject,Z),!this.cam){console.error("Spectator camera needs camera component",this);return}!this._handler&&this.cam&&(this._handler=new Ah(this.context,this.cam,this)),this.eventSub_WebXRRequestStartEvent=this.onXRSessionRequestStart.bind(this),this.eventSub_WebXRStartEvent=this.onXRSessionStart.bind(this),this.eventSub_WebXREndEvent=this.onXRSessionEnded.bind(this),V.addEventListener("requestVRSession",this.eventSub_WebXRRequestStartEvent),V.addEventListener("xrStarted",this.eventSub_WebXRStartEvent),V.addEventListener("xrStopped",this.eventSub_WebXREndEvent),this.orbit=R.getComponent(this.context.mainCamera,nt)}onDestroy(){this.stopSpectating(),V.removeEventListener("requestVRSession",this.eventSub_WebXRStartEvent),V.removeEventListener("xrStarted",this.eventSub_WebXRStartEvent),V.removeEventListener("xrStopped",this.eventSub_WebXREndEvent),this._handler?.destroy(),this._networking.destroy()}isSupportedPlatform(){let e=window.navigator.userAgent,t=/Windows|MacOS/.test(e),i=/Windows NT/.test(e)&&/Edg/.test(e)&&!/Win64/.test(e);return t&&!i}onXRSessionRequestStart(e){!this.isSupportedPlatform()||R.setActive(this.gameObject,!0)}onXRSessionStart(e){!this.isSupportedPlatform()||(At&&console.log(this.context.mainCamera),this.context.mainCamera&&this.followSelf())}onXRSessionEnded(e){this.context.removeCamera(this.cam),R.setActive(this.gameObject,!1),this.orbit&&(this.orbit.enabled=!0),this._handler?.set(void 0),this._handler?.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,"headset"),this.target=this.context.players.getPlayerView(this.localId)),At&&console.log("Follow self",this.target)}onAfterRender(){if(!this.cam)return;let e=this.context.renderer,t=e.xr.enabled;if(!e.xr.isPresenting&&!this._handler?.currentTarget)return;this._handler?.update(this._mode);let i=e.getRenderTarget(),n=null;if(!i){if(!e.state.bindFramebuffer||!e.state.bindXRFramebuffer)return;n=e._framebuffer,e.state.bindXRFramebuffer(null)}this.setAvatarFlagsBeforeRender();let r=this.context.mainCameraComponent;if(r){let c=r.backgroundColor;c&&e.setClearColor(c,c.alpha),this.cam.backgroundColor=c,this.cam.clearFlags=r.clearFlags,this.cam.nearClipPlane=r.nearClipPlane,this.cam.farClipPlane=r.farClipPlane}else e.setClearColor(new Sr.Color(1,1,1));e.setRenderTarget(null),e.xr.enabled=!1;let s=this.cam?.cam;this.context.updateAspect(s);let a=e.xr.isPresenting;e.xr.isPresenting=!1,e.setSize(this.context.domWidth,this.context.domHeight),e.render(this.context.scene,s),e.xr.isPresenting=a,e.xr.enabled=t,i?e.setRenderTarget(i):e.state.bindXRFramebuffer(n),this.resetAvatarFlags()}setAvatarFlagsBeforeRender(){let e=this._mode===0;for(let t of le.instances)if(t.avatar&&"isLocalAvatar"in t.avatar){let i=4294967295;this.isSpectatingSelf&&(i=e&&t.avatar.isLocalAvatar?8:16);let n=t.avatar.flags;if(!n)continue;for(let r of n)r.UpdateVisible(i)}}resetAvatarFlags(){for(let e of le.instances)if(e.avatar&&"flags"in e.avatar){let t=e.avatar.flags;if(!t)continue;for(let i of t)e.avatar?.isLocalAvatar?i.UpdateVisible(8):i.UpdateVisible(16)}}},Ah=class{context;cam;spectator;follow;target;view;currentObject;get currentTarget(){return this.view}constructor(e,t,i){this.context=e,this.cam=t,this.spectator=i}set(e){let t=e?.currentObject;if(!t){this.spectator.stopSpectating();return}t!==this.currentObject&&(this.currentObject=t,this.view=e,this.follow||(this.follow=R.addNewComponent(this.cam.gameObject,Mt)),this.target||(this.target=new Sr.Object3D),t.add(this.target),this.follow.enabled=!0,this.follow.target=this.target,At&&console.log("FOLLOW",t),this.context.isInXR?this.context.removeCamera(this.cam):this.context.setCurrentCamera(this.cam))}disable(){At&&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(){this.target?.removeFromParent(),this.follow&&R.destroy(this.follow)}update(e){if(this.currentTarget?.isConnected===!1||this.currentTarget?.removed===!0){At&&console.log("Target disconnected or timeout",this.currentTarget),this.spectator.stopSpectating();return}this.currentTarget&&this.currentTarget?.currentObject!==this.currentObject&&(At&&console.log("Target changed",this.currentObject,"to",this.currentTarget.currentObject),this.set(this.currentTarget));let t=this.context.mainCamera;t&&(this.cam.cam.near!==t.near||this.cam.cam.far!==t.far)&&(this.cam.cam.near=t.near,this.cam.cam.far=t.far,this.cam.cam.updateProjectionMatrix());let i=this.follow?.target;if(!(!i||!this.follow)){switch(e){case 0:this.view?.viewDevice!=="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,this.view?.viewDevice!=="browser"?i.quaternion.copy(Tw):i.quaternion.identity()}}},Tw=new Sr.Quaternion().setFromAxisAngle(new Sr.Vector3(0,1,0),Math.PI),Dh=class{context;spectator;constructor(e,t){this.context=e,this.spectator=t,console.log("Click other avatars or cameras to follow them. Press ESC to exit spectator mode."),window.addEventListener("keydown",n=>{n.key==="Escape"&&this.spectator.stopSpectating()});let i=0;this.context.input.addEventListener("pointerdown",n=>{i=this.context.time.time}),this.context.input.addEventListener("pointerup",n=>{let r=this.context.time.time-i;r>1?this.spectator.stopSpectating():this.context.input.getPointerClicked(0)&&r<.3&&this.trySelectObject()})}trySelectObject(){let e=new xe;e.setMask(16777215);let t=this.context.physics.raycast(e);if(At&&console.log(...t),t?.length)for(let i of t){if(i.distance<.2)continue;let n=i.object,r=R.getComponentInParent(n,le),s=r?.connectionId;if(s){let a=this.context.players.getPlayerView(s);this.spectator.target=a,At&&console.log("spectate",s,r);break}}}},Lh=class{guid;dontSave=!0;targetUserId;stoppedFollowing;constructor(e,t,i){this.guid=e,this.targetUserId=t,this.stoppedFollowing=i}},jh=class{guid;userId;constructor(e,t){this.guid=e.guid,this.userId=t}},Hh=class{followers=[];context;spectator;_followerEventMethod;_requestFollowMethod;_joinedRoomMethod;constructor(e,t){this.context=e,this.spectator=t,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("joined-room",this._joinedRoomMethod),document.addEventListener("keydown",e=>{e.key==="f"?this.onRequestFollowMe():e.key==="Escape"&&this.onRequestFollowMe(!0)})}destroy(){this.context.connection.stopListening("spectator-follower-changed",this._followerEventMethod),this.context.connection.stopListening("spectator-request-follow",this._requestFollowMethod),this.context.connection.stopListening("joined-room",this._joinedRoomMethod)}onSpectatedObjectChanged(e,t){if(At&&console.log(this.context.connection.connectionId,"onSpectatedObjectChanged",e,t),this.context.connection.connectionId){let i=e?.userId===void 0,n=i?t:e?.userId,r=new Lh(this.context.connection.connectionId,n,i);this.context.connection.send("spectator-follower-changed",r)}}onRequestFollowMe(e=!1){if(At&&console.log("Request follow",this.context.connection.connectionId),this.context.connection.connectionId){this.spectator.stopSpectating();let t=e?void 0:this.context.connection.connectionId,i=new jh(this.spectator,t);this.context.connection.send("spectator-request-follow",i)}}onUserJoinedRoom(){P("followme")&&this.onRequestFollowMe()}onFollowerEvent(e){let t=e.targetUserId,i=e.guid;if(At&&console.log(e),t===this.context.connection.connectionId)if(e.stoppedFollowing){let 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 e=this.followers.length-1;e>=0;e--){let t=this.followers[e];this.context.connection.userIsInRoom(t)===!1&&this.followers.splice(e,1)}}_lastRequestFollowUser;onRequestFollowEvent(e){if(this._lastRequestFollowUser=e,e.userId===this.context.connection.connectionId)this.spectator.stopSpectating();else if(e.userId===void 0)this.spectator.stopSpectating();else{let t=this.context.players.getPlayerView(e.userId);if(t)this.spectator.target=t;else return At&&console.warn("Could not find view",e.userId),this.enforceFollow(),!1}return!0}_enforceFollowInterval;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):(At&&console.log("REQUEST FOLLOW AGAIN",this._lastRequestFollowUser.userId),this.onRequestFollowEvent(this._lastRequestFollowUser))},1e3))}};import*as lt from"three";import{Material as Rw,NearestFilter as Tg,Texture as Sw,Vector2 as Rg}from"three";var Bh=P("debugspriterenderer"),Mc=class{static getOrCreateGeometry(e){if(e._geometry)return e._geometry;if(e.guid&&Mc.cache[e.guid])return Bh&&console.log("Take cached geometry for sprite",e.guid),Mc.cache[e.guid];let t=new lt.BufferGeometry;e._geometry=t;let i=new Float32Array(e.triangles.length*3),n=new Float32Array(e.triangles.length*2);for(let r=0;r<e.triangles.length;r+=1){let s=e.triangles[r];i[r*3]=-e.vertices[s].x,i[r*3+1]=e.vertices[s].y,i[r*3+2]=0;let a=e.uv[s];n[r*2]=a.x,n[r*2+1]=1-a.y}return t.setAttribute("position",new lt.BufferAttribute(i,3)),t.setAttribute("uv",new lt.BufferAttribute(n,2)),e.guid&&(this.cache[e.guid]=t),Bh&&console.log("Built sprite geometry",e,t),t}},Ta=Mc;I(Ta,"cache",{});var ei=class{guid;texture;triangles;uv;vertices;_geometry};v([y()],ei.prototype,"guid",2),v([y(Sw)],ei.prototype,"texture",2),v([Uo()],ei.prototype,"triangles",2),v([Uo()],ei.prototype,"uv",2),v([Uo()],ei.prototype,"vertices",2);var ks=class{name;offset;size};v([y()],ks.prototype,"name",2),v([y(Rg)],ks.prototype,"offset",2),v([y(Rg)],ks.prototype,"size",2);var Fh=Symbol("spriteOwner"),an=class{sprite;index=0;slices;update(){let e=this.index;if(e<0||e>=this.slices.length)return;let t=this.slices[e],i=this.sprite?.texture;!i||(i.encoding=lt.sRGBEncoding,i.offset.set(t.offset.x,t.offset.y),i.minFilter==Tg&&i.magFilter==Tg&&(i.anisotropy=1),i.needsUpdate=!0)}};v([y(ei)],an.prototype,"sprite",2),v([y()],an.prototype,"index",2),v([y(ks)],an.prototype,"slices",2);var sn=class extends M{drawMode=0;size={x:1,y:1};color;sharedMaterial;get sprite(){return this._spriteSheet}set sprite(e){if(e!==this._spriteSheet)if(typeof e=="number"){let t=Math.floor(e);t===e&&(this.spriteIndex=t);return}else this._spriteSheet=e,this.updateSprite()}set spriteIndex(e){!this._spriteSheet||(this._spriteSheet.index=e,this._spriteSheet.update())}get spriteIndex(){return this._spriteSheet?.index??0}get spriteFrames(){return this._spriteSheet?.slices.length??0}_spriteSheet;_currentSprite;awake(){this._currentSprite=void 0,Bh&&(console.log("Awake",this.name,this,this.sprite?.sprite?.texture),this.sprite?.sprite?.texture&&console.log(this.sprite.sprite.texture.minFilter.toString(),this.sprite.sprite.texture.magFilter.toString()))}start(){this._currentSprite?this.gameObject&&this.gameObject.add(this._currentSprite):this.updateSprite()}updateSprite(){if(!this.__didAwake||!this.sprite?.sprite)return;let e=this.sprite.sprite;if(this._currentSprite)this._currentSprite.geometry=Ta.getOrCreateGeometry(e),this._currentSprite.material.map=e.texture;else{let t=new lt.MeshBasicMaterial({color:16777215,side:lt.DoubleSide});if(!t)return;if(this.color&&(t.color||(t.color=new lt.Color),t.color.copy(this.color),t.opacity=this.color.alpha),t.alphaTest=.5,e.texture&&!t.wireframe){let i=e.texture;i[Fh]!==void 0&&i[Fh]!==this&&this.spriteFrames>1&&(i=e.texture=i.clone()),i[Fh]=this,t.map=i}this.sharedMaterial=t,this._currentSprite=new lt.Mesh(Ta.getOrCreateGeometry(e),t)}this._currentSprite.parent!==this.gameObject&&(this.drawMode===2&&this._currentSprite.scale.set(this.size.x,this.size.y,1),this.gameObject&&this.gameObject.add(this._currentSprite)),this._spriteSheet?.update()}};v([y()],sn.prototype,"drawMode",2),v([y(Q)],sn.prototype,"color",2),v([y(Rw)],sn.prototype,"sharedMaterial",2),v([y(an)],sn.prototype,"sprite",1);var Dt=class{bb=null;bb_pos=0;__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSyncedCameraModel(e,t){return(t||new Dt).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSyncedCameraModel(e,t){return e.setPosition(e.position()+4),(t||new Dt).__init(e.readInt32(e.position())+e.position(),e)}userId(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}guid(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}dontSave(){let e=this.bb.__offset(this.bb_pos,8);return e?!!this.bb.readInt8(this.bb_pos+e):!1}pos(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}rot(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Te).__init(this.bb_pos+t,this.bb):null}static startSyncedCameraModel(e){e.startObject(5)}static addUserId(e,t){e.addFieldOffset(0,t,0)}static addGuid(e,t){e.addFieldOffset(1,t,0)}static addDontSave(e,t){e.addFieldInt8(2,+t,0)}static addPos(e,t){e.addFieldStruct(3,t,0)}static addRot(e,t){e.addFieldStruct(4,t,0)}static endSyncedCameraModel(e){return e.endObject()}static finishSyncedCameraModelBuffer(e,t){e.finish(t)}static finishSizePrefixedSyncedCameraModelBuffer(e,t){e.finish(t,void 0,!0)}};import{Object3D as Pw}from"three";var Ic="SCAM";Fo(Ic,Dt.getRootAsSyncedCameraModel);var Lt=new Ct,Uh=class{userId;guid;constructor(e,t){this.guid=t,this.userId=e}send(e,t){if(e){Lt.clear();let i=Lt.createString(this.guid),n=Lt.createString(this.userId);Dt.startSyncedCameraModel(Lt),Dt.addGuid(Lt,i),Dt.addUserId(Lt,n);let r=B(e),s=qa(e);Dt.addPos(Lt,Te.createVec3(Lt,r.x,r.y,r.z)),Dt.addRot(Lt,Te.createVec3(Lt,s.x,s.y,s.z));let a=Dt.endSyncedCameraModel(Lt);Lt.finish(a,Ic),t.sendBinary(Lt.asUint8Array())}}},Ac=class extends M{getCameraObject(e){let t=this.userToCamMap[e];return t?this.remoteCams[t].obj:null}cameraPrefab=null;_lastWorldPosition;_lastWorldQuaternion;_model=null;_needsUpdate=!0;_lastUpdateTime=0;remoteCams={};userToCamMap={};_camTimeoutInSeconds=10;_receiveCallback=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.beginListenBinrary(Ic,this.onReceivedRemoteCameraInfoBin.bind(this))}onDisable(){this.context.connection.stopListenBinary(Ic,this._receiveCallback)}update(){for(let n in this.remoteCams){let r=this.remoteCams[n],s=this.context.time.realtimeSinceStartup-r.lastUpdate;if(!r||s>this._camTimeoutInSeconds){console.log("Remote cam timeout",r,s),r?.obj&&R.destroy(r.obj),delete this.remoteCams[n],r&&delete this.userToCamMap[r.userId],Ac.instances.push(r),this.context.players.removePlayerView(r.userId,"browser");continue}}if(V.IsInWebXR)return;let 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 Uh(this.context.connection.connectionId,this.context.connection.connectionId+"_camera"));let t=B(e),i=me(e);(t.distanceTo(this._lastWorldPosition)>.001||i.angleTo(this._lastWorldQuaternion)>.01)&&(this._needsUpdate=!0),this._lastWorldPosition.copy(t),this._lastWorldQuaternion.copy(i),!((!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,"browser"))}onReceivedRemoteCameraInfoBin(e){let t=e.guid();if(!t)return;let i=e.userId();if(!i||!this.context.connection.userIsInRoom(i)||!this.cameraPrefab)return;let n=this.remoteCams[t];if(!n)if("isObject3D"in this.cameraPrefab){let c=new Ue;c.context=this.context;let u=R.instantiate(this.cameraPrefab,c);n=this.remoteCams[t]={obj:u,lastUpdate:this.context.time.realtimeSinceStartup,userId:i},n.obj.visible=!0,this.gameObject.add(u),this.userToCamMap[i]=t,Ac.instances.push(n);let l=R.getOrAddComponent(u,le);l.connectionId=i,l.avatar=u}else return;let r=n.obj;this.context.players.setPlayerView(i,r,"browser"),n.lastUpdate=this.context.time.realtimeSinceStartup,re.markDirty(r);let s=e.pos();s&&fn(r,s.x(),s.y(),s.z());let a=e.rot();a&&Ya(r,a.x(),a.y(),a.z())}},Pr=Ac;I(Pr,"instances",[]),v([y([Pw,tt])],Pr.prototype,"cameraPrefab",2);var Gh="view",Dc=P("debugsyncedroom"),ki=class extends M{roomName;urlParameterName="room";joinRandomRoom=!0;requireRoomParameter=!1;autoRejoin=!0;_roomPrefix;awake(){Dc&&console.log("Room",this.roomName,this.urlParameterName,this.joinRandomRoom,this.requireRoomParameter,this.autoRejoin),this._roomPrefix===void 0&&(this._roomPrefix=this.roomName,this.roomName="")}onEnable(){let e=P(Gh);if(e&&typeof e=="string"&&e.length>0){console.log("Join as viewer"),this.context.connection.joinRoom(e,!0);return}this.tryJoinRoom()}onDisable(){this.roomName&&this.roomName.length>0&&this.context.connection.leaveRoom(this.roomName)}tryJoinRoom(e=0){e===void 0&&(e=0);let t=!1;if(this.urlParameterName){let i=P(this.urlParameterName);if(i&&typeof i=="string"){t=!0;let n=dp(i);this.roomName=n}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)&&(console.log("generate room name"),this.roomName=this.generateRoomName());return this.requireRoomParameter&&!t?(Dc&&console.log('No required room parameter "'+this.urlParameterName+'" in url - will not connect to networking backend.'),!1):!this.roomName||this.roomName.length<=0?(Dc&&console.error('Missing room name on "'+this.name+'". Make sure this is correctly configured in Unity',this.context.connection.isDebugEnabled?this:""),!1):(this.context.connection.isConnected||this.context.connection.connect(),Dc&&console.log("Join "+this.roomName),this._roomPrefix&&(this.roomName=this._roomPrefix+this.roomName),this.context.connection.joinRoom(this.roomName),!0)}_lastPingTime=0;_lastRoomTime=-1;update(){this.context.connection.isConnected&&(this.context.time.time-this._lastPingTime>3&&(this._lastPingTime=this.context.time.time,this.context.connection.send("ping",{time:this.context.time.time})),this.context.connection.isInRoom&&(this._lastRoomTime=this.context.time.time)),this._lastRoomTime>0&&this.context.time.time-this._lastRoomTime>.3&&(this._lastRoomTime=-1,this.autoRejoin?(console.log("Disconnected from networking backend - attempt reconnecting now"),this.tryJoinRoom()):console.warn("You are not connected to a room anymore (possibly because the tab was inactive for too long and the server kicked you)"))}get currentRoomName(){let e=P(Gh);return e||P(this.urlParameterName)}setRandomRoomUrlParameter(){let e=Kc(),t=this.generateRoomName();P(this.urlParameterName)?e.set(this.urlParameterName,t):e.append(this.urlParameterName,t),lp(t,e)}generateRoomName(){return up()+"_"+cp(100,999)}getViewOnlyUrl(){if(this.context.connection.isConnected&&this.context.connection.currentRoomViewId){let e=window.location.search,t=new URLSearchParams(e);return t.has(this.urlParameterName)&&t.delete(this.urlParameterName),t.set(Gh,this.context.connection.currentRoomViewId),window.location.origin+window.location.pathname+"?"+t.toString()}return null}};v([y()],ki.prototype,"roomName",2),v([y()],ki.prototype,"urlParameterName",2),v([y()],ki.prototype,"joinRandomRoom",2),v([y()],ki.prototype,"requireRoomParameter",2),v([y()],ki.prototype,"autoRejoin",2);function Sg(){let o=P("testwindowcount")||0;o&&o>0&&Ow(o)}function Ow(o){if(P("testwindow"))return null;let e=new URL(window.location.href);_o(e.searchParams,es,1),_o(e.searchParams,"testwindow",1);let t=e.toString(),i=[];window.onbeforeunload=()=>{for(let c of i)c.close()};let n=.05,r=128,s=0,a=0;for(let c=0;c<o;c++){s*r+r*.01>=window.innerWidth&&(a+=1,s=0);let u=s*(r*(1+n))+window.screenLeft,l=a*(r*(1+n))+window.screenTop+90+60*a;s+=1;let d=window.open(t,"test window "+c,`popup=yes width=${r} height=${r} top=${l} left=${u}`);if(!d){console.warn("Failed to open window");continue}i.push(d),d.onload=()=>{d.onbeforeunload=()=>{for(let h=0;h<i.length;h++){let g=i[h];g!==d&&g.close()}i.length=0}}}return i}import{Vector3 as Mw}from"three";var Ms=class extends M{awake(){Sg()}},Is=class extends M{transformsPerFrame=10;interval=0;useFlatbuffers=!0;awake(){if(this.useFlatbuffers)this.context.connection.beginListenBinrary(Jo,e=>{});else{this.models=[];for(let e=0;e<this.transformsPerFrame;e++)this.models.push(new Lc(this.context.connection.connectionId+"_simulatedTransform_"+e,this))}}builder=null;models=null;update(){if(!!this.context.connection.isConnected){if(this.useFlatbuffers){if(!this.context.connection.connectionId||this.context.time.frameCount%this.interval!==0)return;this.builder===null&&(this.builder=new Ct(1024));let e=this.builder;for(let t=0;t<this.transformsPerFrame;t++){e.clear();let i=kd(this.context.connection.connectionId,this);this.context.connection.sendBinary(i)}}else if(this.models)for(let e=0;e<this.models.length;e++){let t=this.models[e];t.dontSave=!0,t.update(this,null),this.context.connection.send("TestSimulateUserData-"+e,t)}}}},Lc=class{guid;fast=!1;position;rotation;velocity=void 0;dontSave;isValid(){return this.fast!==void 0||this.position!==void 0||this.rotation!==void 0||this.velocity!==void 0}constructor(e,t){this.guid=e,this.position={x:0,y:0,z:0},this.rotation={x:0,y:0,z:0,w:0},this.update(t,null)}update(e,t){let i=e.worldPosition;this.position.x=i.x,this.position.y=i.y,this.position.z=i.z;let n=e.worldQuaternion;if(this.rotation.x=n.x,this.rotation.y=n.y,this.rotation.z=n.z,this.rotation.w=n.w,this.fast=!1,t){let r=t.getVelocity();this.velocity===void 0&&(this.velocity={x:0,y:0,z:0}),this.velocity.x=r.x,this.velocity.y=r.y,this.velocity.z=r.z}}};I(Lc,"temp",new Mw);import{MathUtils as Iw}from"three";import{TransformControls as Aw}from"three/examples/jsm/controls/TransformControls.js";import{OrbitControls as Dw}from"three/examples/jsm/controls/OrbitControls.js";var go=class extends M{isGizmo=!0;control;orbit;awake(){this.isGizmo&&!Di||!this.context.mainCamera||(this.control=new Aw(this.context.mainCamera,this.context.renderer.domElement),this.control.visible=!0,this.control.enabled=!0,this.control.getRaycaster().layers.set(2),this.control.size=.6,this.control.traverse(e=>{let t=e;if(t.layers.set(2),t){let i=t.material;i&&(i.opacity=.3)}}))}start(){if(this.context.mainCamera){let e=R.getComponentInParent(this.context.mainCamera,Dw)??void 0;this.orbit=e}}changeEventListener;windowKeyDownListener;windowKeyUpListener;onEnable(){this.control&&(this.context.scene.add(this.control),this.control.attach(this.gameObject)),this.changeEventListener=this.onControlChangedEvent.bind(this),this.control?.addEventListener("dragging-changed",this.changeEventListener),this.attachWindowEvents()}onDisable(){this.control?.removeFromParent(),this.changeEventListener&&this.control?.removeEventListener("dragging-changed",this.changeEventListener)}onControlChangedEvent(e){let t=this.orbit;if(t&&(t.enabled=!e.value),e.value){let i=R.getComponentInParent(this.gameObject,Pt);i&&i.requestOwnership()}}attachWindowEvents(){let e=this.control;!e||(this.windowKeyDownListener||(this.windowKeyDownListener=t=>{switch(t.keyCode){case 81:e.setSpace(e.space==="local"?"world":"local");break;case 16:e.setTranslationSnap(100),e.setRotationSnap(Iw.degToRad(15)),e.setScaleSnap(.25);break;case 87:e.setMode("translate");break;case 69:e.setMode("rotate");break;case 82:e.setMode("scale");break;case 187:case 107:e.setSize(e.size+.1);break;case 189:case 109:e.setSize(Math.max(e.size-.1,.1));break;case 88:e.showX=!e.showX;break;case 89:e.showY=!e.showY;break;case 90:e.showZ=!e.showZ;break;case 32:e.enabled=!e.enabled;break}}),this.windowKeyUpListener||(this.windowKeyUpListener=t=>{switch(t.keyCode){case 16:e.setTranslationSnap(null),e.setRotationSnap(null),e.setScaleSnap(null);break}}),window.addEventListener("keydown",this.windowKeyDownListener),window.addEventListener("keyup",this.windowKeyUpListener))}};v([y()],go.prototype,"isGizmo",2);import{Object3D as jw}from"three";import*as Ig from"three";import{USDZExporter as Hw}from"three/examples/jsm/exporters/USDZExporter.js";function Pg(o){let e=o.domElement.querySelector("link[rel='ar']");if(e)return e;let t=document.createElement("div");t.classList.add("menu"),t.classList.add("quicklook-menu"),t.style.display="none",t.style.visibility="hidden";let i=document.createElement("button");i.id="open-in-ar",i.innerText="Open in QuickLook",t.appendChild(i);let n=document.createElement("a");n.id="needle-usdz-link",n.style.display="none",n.rel="ar",n.href="",t.appendChild(n);let r=document.createElement("img");return r.id="button",n.appendChild(r),o.domElement.appendChild(t),n}function Og(){var o=new Date;let e=o.getMonth()+1,t=o.getDate(),i=o.getHours(),n=o.getMinutes(),r=o.getSeconds(),s=(e<10?"0":"")+e,a=(t<10?"0":"")+t,c=(i<10?"0":"")+i,u=(n<10?"0":"")+n,l=(r<10?"0":"")+r;return o.getFullYear()+s+a+"-"+c+u+l}import{AnimationClip as Lw,KeyframeTrack as kg}from"three";var jc=P("debugusdz");function Mg(o,e){let t=[],i=R.getComponentsInChildren(o,Ee),n=!1;jc&&console.log(i);for(let r of i){if(!r||!r.runtimeAnimatorController)continue;jc&&console.log(r);let s=[];for(let a of r.runtimeAnimatorController.enumerateActions()){jc&&console.log(a);let c=a.getClip();if(!n&&c.tracks.length>0){n=!0;let u=c.tracks[0],l=u.name.substring(0,u.name.lastIndexOf(".")),d=new kg(l+".position",[0,.01],[0,0,0,0,0,0]),h=new kg(l+".quaternion",[0,.01],[0,0,0,1,0,0,0,1]);s.push(new Lw("rest",.01,[d,h]))}s.includes(c)||s.push(c)}t.push({root:r.gameObject,clips:s})}jc&&console.log(t);for(let r of t)for(let s of r.clips)e.registerAnimation(r.root,s)}var Ra=P("debugusdz"),Or=class extends M{objectToExport;autoExportAnimations=!1;extensions=[];link;webxr;webARSessionRoot;start(){Ra&&(window.addEventListener("keydown",e=>{switch(e.key){case"t":this.exportAsync();break}}),wo()&&setTimeout(()=>{this.exportAsync()},2e3)),document.getElementById("open-in-ar")?.addEventListener("click",e=>{e.preventDefault(),this.exportAsync()}),this.objectToExport||(this.objectToExport=this.gameObject)}onEnable(){let e=Eo(),t=Ha();(Ra||e&&t)&&(this.createQuicklookButton(),this.webARSessionRoot=R.findObjectOfType(gt)??void 0,this.lastCallback=this.quicklookCallback.bind(this),this.link=Pg(this.context),this.link.addEventListener("message",this.lastCallback))}onDisable(){this.link?.removeEventListener("message",this.lastCallback)}async exportAsync(){if(!this.objectToExport)return;if(this.webARSessionRoot){let h=this.webARSessionRoot.gameObject,g=1/this.webARSessionRoot.arScale;h.matrix.makeScale(g,g,g),this.webARSessionRoot.invertForward&&h.matrix.multiply(new Ig.Matrix4().makeRotationY(Math.PI))}let e=new Hw,t=[...this.extensions],i=new rr;t.push(i),this.autoExportAnimations&&Mg(this.objectToExport,i);let n={self:this,exporter:e,extensions:t,object:this.objectToExport};this.dispatchEvent(new CustomEvent("before-export",{detail:n}));let r="needle";Ra&&(r+="-"+Og()),e.debug=Ra;let s=await e.parse(this.objectToExport,t),a=new Blob([s],{type:"application/octet-stream"});this.dispatchEvent(new CustomEvent("after-export",{detail:n}));let c=this.buildQuicklookOverlay(),u=c.callToAction?encodeURIComponent(c.callToAction):"",l=c.checkoutTitle?encodeURIComponent(c.checkoutTitle):"",d=c.checkoutSubtitle?encodeURIComponent(c.checkoutSubtitle):"";this.link.href=URL.createObjectURL(a)+`#callToAction=${u}&checkoutTitle=${l}&checkoutSubtitle=${d}&`,this.lastCallback||(this.lastCallback=this.quicklookCallback.bind(this),this.link.addEventListener("message",this.lastCallback)),this.link.download=r+".usdz",this.link.click()}lastCallback;quicklookCallback(e){e?.data=="_apple_ar_quicklook_button_tapped"&&(Ra&&Qn("Quicklook closed via call to action button"),this.dispatchEvent(new CustomEvent("quicklook-button-tapped",{detail:this})))}buildQuicklookOverlay(){let e={};return e.callToAction="Close",e.checkoutTitle="\u{1F335} Made with Needle",e.checkoutSubtitle="_",this.dispatchEvent(new CustomEvent("quicklook-overlay",{detail:e})),e}_arButton;async createQuicklookButton(){if(!this.webxr)if(await xo(1),this.webxr=R.findObjectOfType(V)??void 0,this.webxr)if(this.webxr.VRButton&&this.webxr.VRButton.parentElement?.removeChild(this.webxr.VRButton),this.webxr.ARButton&&this._arButton!==this.webxr.ARButton){this._arButton=this.webxr.ARButton;let e=this.webxr.ARButton.parentElement?.querySelector("a");e&&(e.href=""),this.webxr.ARButton.innerText="Open in Quicklook",this.webxr.ARButton.disabled=!1,this.webxr.ARButton.addEventListener("click",t=>{t.preventDefault(),this.exportAsync()}),this.webxr.ARButton.classList.add("quicklook-ar-button"),this.dispatchEvent(new CustomEvent("created-button",{detail:this.webxr.ARButton}))}else{this.webxr.createARButton=!1,this.webxr.createVRButton=!1;let e=window.document.querySelector(".webxr-buttons");e||(e=document.createElement("div"),e.classList.add("webxr-buttons"));let t=document.createElement("button");t.innerText="Open in Quicklook",t.addEventListener("click",()=>{this.exportAsync()}),t.classList.add("webxr-ar-button"),t.classList.add("webxr-button"),t.classList.add("quicklook-ar-button"),e.appendChild(t),this.dispatchEvent(new CustomEvent("created-button",{detail:t}))}else console.warn("Could not find WebXR component: will not create Quicklook button",G.Current)}resetStyles(e){e.style.position="",e.style.top="",e.style.left="",e.style.width="",e.style.height="",e.style.margin="",e.style.padding="",e.style.border="",e.style.background="",e.style.color="",e.style.font="",e.style.textAlign="",e.style.opacity="",e.style.zIndex=""}};v([y(jw)],Or.prototype,"objectToExport",2),v([y()],Or.prototype,"autoExportAnimations",2);import{Vector3 as Fw}from"three";var bo=class{guid;dontSave=!0;userId;point={x:0,y:0,z:0};source={x:0,y:0,z:0};target;update(e,t,i,n=void 0){this.userId=e.connection.connectionId,this.point.x=t.x,this.point.y=t.y,this.point.z=t.z,this.source.x=i.x,this.source.y=i.y,this.source.z=i.z,this.target=n}},As=class extends M{prefab=null;_grabModels=[];_grabModelsUpdateTime=[];_addOrUpdateSub=null;_endSub=null;_freeSub=null;_instances={};awake(){this.prefab&&(this.prefab.visible=!1)}onEnable(){this._addOrUpdateSub=this.context.connection.beginListen("xr-grab-visual-start-or-update",this.onRemoteGrabStartOrUpdate.bind(this)),this._endSub=this.context.connection.beginListen("xr-grab-visual-end",this.onRemoteGrabEnd.bind(this)),this._freeSub=vt.AddEventListener("WillFree",this.onAttachedObjectFree.bind(this))}onDisable(){this.context.connection.stopListening("xr-grab-visual-start-or-update",this._addOrUpdateSub),this.context.connection.stopListening("xr-grab-visual-end",this._endSub),vt.RemoveEventListener("WillFree",this._freeSub)}addOrUpdateGrab(e){this.context.connection.send("xr-grab-visual-start-or-update",e,2)}endGrab(e){this.context.connection.send("xr-grab-visual-end",e,2)}onRemoteGrabStartOrUpdate(e){if(!this.prefab)return;let t=this._instances[e.guid];if(!t){let i=R.instantiate(this.prefab);if(i.visible=!0,this._instances[e.guid]={instance:i,model:e},e.userId){let n=R.getComponentsInChildren(i,Pi);if(n?.length>0)for(let r of n)r.assignUserColor(e.userId)}return}t.model=e}onRemoteGrabEnd(e){if(!e)return;let t=e.guid;this._instances[t]&&(R.destroy(this._instances[t].instance),delete this._instances[t])}onAttachedObjectFree(e){if(this._grabModels.length<=0)return;let t=this._grabModels[0];this.updateModel(t,e),this.endGrab(t)}onBeforeRender(){if(this.updateRendering(),!!this.prefab&&(this.prefab.visible=!1,this.context.time.frameCount%10===0))for(let e=0;e<vt.Current.length;e++){let t=vt.Current[e];if(!t.controller||!t.selected)continue;this._grabModels.length<=e&&(this._grabModels.push(new bo),this._grabModelsUpdateTime.push(0)),this._grabModelsUpdateTime[e]=this.context.time.time;let i=this._grabModels[e];this.updateModel(i,t),this.addOrUpdateGrab(i)}}updateModel(e,t){if(!t.controller||!t.selected)return;e.guid=t.grabUUID;let i=t.selected.guid;e.update(this.context,t.grabPoint,t.controller.worldPosition,i)}temp=new Fw;updateRendering(){let e=this.context.time.deltaTime/.5;for(let t in this._instances){let{instance:i,model:n}=this._instances[t];if(!i||!n)continue;let{point:r}=n,s=B(i);this.temp.set(r.x,r.y,r.z),s.lerp(this.temp,e),te(i,s)}}};var Sa=class{};import{Object3D as Bw}from"three";var Pa=class extends M{asset;joinedRoomFunction;awake(){this.watchTabVisible(),this.joinedRoomFunction=this.onUserJoined.bind(this)}onEnable(){this.context.connection.beginListen("joined-room",this.joinedRoomFunction)}onDisable(){this.context.connection.stopListening("joined-room",this.joinedRoomFunction)}async onUserJoined(e){let t=await this.asset?.instantiateSynced({parent:this.gameObject},!0);if(t){let i=R.getComponent(t,ln);i&&(i.owner=this.context.connection.connectionId)}}watchTabVisible(){window.addEventListener("visibilitychange",e=>{if(document.visibilityState==="visible")for(let t=ln.all.length-1;t>=0;t--){let i=ln.all[t];(!i.owner||!this.context.connection.userIsInRoom(i.owner))&&i.doDestroy()}})}};v([y(tt)],Pa.prototype,"asset",2);var ti=class extends M{static get all(){return ti._all}static get local(){return ti._local}static isLocalPlayer(e){return e instanceof Bw?R.getComponentInParent(e,ti)?.isLocalPlayer??!1:e instanceof Tt?R.getComponentInParent(e.gameObject,ti)?.isLocalPlayer??!1:!1}owner;get isLocalPlayer(){return this.owner===this.context.connection.connectionId}awake(){this.isLocalPlayer&&ti.local.push(this),ti.all.push(this),this.context.connection.beginListen("user-left-room",e=>{if(e.userId===this.owner){this.doDestroy();return}})}start(){if(!this.owner||!this.context.connection.userIsInRoom(this.owner)){this.doDestroy();return}}doDestroy(){Po(this.gameObject,this.context.connection)}onDestroy(){if(ti.all.splice(ti.all.indexOf(this),1),this.isLocalPlayer){let e=ti._local.indexOf(this);e>=0&&ti._local.splice(e,1)}}},ln=ti;I(ln,"_all",[]),I(ln,"_local",[]),v([Cc(),y()],ln.prototype,"owner",2);var Hc=class extends M{toggleKey="p";update(){this.context.input.isKeyDown("p")&&this.context.domElement.classList.toggle("presentation-mode")}};O.add("__Ignore",Sa);O.add("AlignmentConstraint",nr);O.add("Animation",rt);O.add("AnimationCurve",mi);O.add("AnimationExtension",rr);O.add("AnimationTrackHandler",or);O.add("Animator",Ee);O.add("AnimatorController",hi);O.add("AttachedObject",vt);O.add("AudioListener",gi);O.add("AudioSource",oe);O.add("AudioTrackHandler",sr);O.add("Avatar_Brain_LookAt",Pn);O.add("Avatar_MouthShapes",hr);O.add("Avatar_MustacheShake",ns);O.add("Avatar_POI",ve);O.add("AvatarBlink_Simple",Qi);O.add("AvatarEyeLook_Rotation",qi);O.add("AvatarLoader",ar);O.add("AvatarMarker",le);O.add("AvatarModel",Zr);O.add("AxesHelper",In);O.add("BaseUIComponent",ze);O.add("BasicIKConstraint",rs);O.add("BoxCollider",mr);O.add("BoxGizmo",yi);O.add("BoxHelperComponent",We);O.add("Button",qt);O.add("CallInfo",bi);O.add("Camera",Z);O.add("Canvas",Ne);O.add("CanvasGroup",jn);O.add("CapsuleCollider",Xt);O.add("CharacterController",Yi);O.add("CharacterControllerInput",Ci);O.add("Collider",Ot);O.add("ColorAdjustments",vr);O.add("ColorBySpeedModule",Ti);O.add("ColorOverLifetimeModule",Hn);O.add("ControlTrackHandler",Sn);O.add("Deletable",ds);O.add("DeleteBox",so);O.add("DeviceFlag",ao);O.add("DragControls",Ji);O.add("DropListener",yr);O.add("Duplicatable",Zi);O.add("EmissionModule",xt);O.add("EventList",de);O.add("EventListEvent",Yr);O.add("EventSystem",Ke);O.add("EventTrigger",lo);O.add("FieldWithDefault",ps);O.add("FixedJoint",ms);O.add("FlyControls",gs);O.add("Fog",Gn);O.add("GltfExport",$t);O.add("GltfExportBox",bs);O.add("Gradient",Ri);O.add("Graphic",_t);O.add("GraphicRaycaster",vs);O.add("GridHelper",Vn);O.add("GridLayoutGroup",xs);O.add("GroundProjectedEnv",tn);O.add("HingeJoint",_r);O.add("HorizontalLayoutGroup",_s);O.add("Image",Dn);O.add("InheritVelocityModule",Jt);O.add("InputField",kt);O.add("Interactable",Vt);O.add("Keyboard",ws);O.add("LayoutGroup",zn);O.add("Light",Qe);O.add("LimitVelocityOverLifetimeModule",ue);O.add("LODGroup",xr);O.add("LODModel",nn);O.add("LogStats",Cs);O.add("LookAtConstraint",xn);O.add("MainModule",ye);O.add("MaskableGraphic",An);O.add("MeshCollider",eo);O.add("MeshRenderer",co);O.add("MinMaxCurve",U);O.add("MinMaxGradient",Me);O.add("NestedGltf",fo);O.add("Networking",Si);O.add("NoiseModule",K);O.add("ObjectRaycaster",ho);O.add("OffsetConstraint",rn);O.add("OrbitControls",nt);O.add("ParticleBurst",Fn);O.add("ParticleSubEmitter",wr);O.add("ParticleSystem",be);O.add("ParticleSystemRenderer",on);O.add("PlayableDirector",Tn);O.add("PlayerColor",Pi);O.add("PlayerState",ln);O.add("PlayerSync",Pa);O.add("PointerEventData",_i);O.add("PresentationMode",Hc);O.add("RawImage",no);O.add("Raycaster",uo);O.add("Rect",io);O.add("RectTransform",yt);O.add("ReflectionProbe",Zt);O.add("RegisteredAnimationInfo",Qr);O.add("RemoteSkybox",Oi);O.add("Renderer",ae);O.add("RendererLightmap",Un);O.add("RGBAColor",Q);O.add("Rigidbody",J);O.add("RotationBySpeedModule",Xe);O.add("RotationOverLifetimeModule",Je);O.add("ScreenCapture",Tr);O.add("ShadowCatcher",Rr);O.add("ShapeModule",ie);O.add("SignalAsset",Kr);O.add("SignalReceiver",Cn);O.add("SignalReceiverEvent",Jr);O.add("SignalTrackHandler",Rn);O.add("Size",ss);O.add("SizeBySpeedModule",ke);O.add("SizeOverLifetimeModule",Kt);O.add("SkinnedMeshRenderer",fs);O.add("SmoothFollow",Mt);O.add("SpatialHtml",Ps);O.add("SpatialTrigger",Wn);O.add("SpatialTriggerReceiver",It);O.add("SpectatorCamera",Os);O.add("SphereCollider",fr);O.add("Sprite",ei);O.add("SpriteRenderer",sn);O.add("SpriteSheet",an);O.add("SubEmitterSystem",Er);O.add("SyncedCamera",Pr);O.add("SyncedRoom",ki);O.add("SyncedTransform",Pt);O.add("TeleportTarget",$r);O.add("TestRunner",Ms);O.add("TestSimulateUserData",Is);O.add("Text",Ie);O.add("TextureSheetAnimationModule",_e);O.add("ToneMapping",br);O.add("TrailModule",ee);O.add("TransformData",qr);O.add("TransformGizmo",go);O.add("UIRaycastUtils",wi);O.add("UIRootComponent",Mn);O.add("UsageMarker",zt);O.add("USDZExporter",Or);O.add("VelocityOverLifetimeModule",He);O.add("VerticalLayoutGroup",ys);O.add("VideoPlayer",Re);O.add("Voip",ot);O.add("Volume",oo);O.add("VolumeComponent",Ki);O.add("VolumeParameter",cs);O.add("VolumeProfile",gr);O.add("VRUserState",Nt);O.add("WebAR",dr);O.add("WebARSessionRoot",gt);O.add("WebXR",V);O.add("WebXRAvatar",Gt);O.add("WebXRController",se);O.add("WebXRSync",kn);O.add("XRFlag",Ce);O.add("XRGrabModel",bo);O.add("XRGrabRendering",As);O.add("XRRig",ur);O.add("XRState",St);var Ag=pe,Uw=P("debugtypestore");Uw&&console.log(O);function Dg(o,e){let i=cu(o,e);return i!==void 0?i:null}var Gw=new Wa;async function Lg(o,e,t,i=null,n){if(!t)return;let r=[],s=i;typeof s=="number"&&(s=new Se(i));let a=new To(t.scene);a.gltfId=e,a.context=o,a.gltf=t,a.nodeToObject=n?.nodeToObjectMap,a.implementationInformation=Gw;let c=[];if(t.scenes)for(let u of t.scenes)await Wh(a,u,c,r);if(t.children)for(let u of t.children)await Wh(a,u,c,r);o.new_scripts_pre_setup_callbacks.push(()=>{for(let u of c)Vw(u,a);if(s){zh(t,s);for(let u of t.scenes)zh(u,s)}})}function zh(o,e){if(e!==null&&!!o){if(o.guid=e.generateUUID(),o&&o.userData&&o.userData.components)for(let t of o.userData.components)t!==null&&(t.guid=e.generateUUID());if(o.children)for(let t of o.children)zh(t,e)}}var Oa=[];async function Wh(o,e,t,i){if(!e)return;let n=e.userData;if(n){let r=n.builtin_components;if(r&&r.length>0)for(let s of r)try{if(s===null)continue;let a=O.get(s.name);if(a!=null){let c=new a;c.sourceId=o.gltfId,jt(c,s,o.implementationInformation),Ht(e,c,!1),t.push({instance:c,compData:s,obj:e})}else Ag&&console.debug("unknown component: "+s.name),Oa.includes(s.name)||Oa.push(s.name)}catch(a){console.error(s.name+" - "+a.message,a)}if(Oa.length>0){let s=Oa.join(", ");console.warn("unknown components: "+s),Oa.length=0,ut()&&Fe(`<strong>Unknown components in scene</strong>:
309
309
 
310
310
  ${s}
311
311
 
312
312
  This could mean you forgot to add a npmdef to your ExportInfo
313
- <a href="https://engine.needle.tools/docs/project_structure.html#creating-and-installing-a-npmdef" target="_blank">documentation</a>`,1)}}if(e.children)for(let r of e.children)await zh(o,r,t,i)}function Bw(o,e){let{instance:t,compData:i,obj:n}=o;e.object=n,e.target=t;let r=!0;r=Vs(t,i,e)===!0,Ig&&console.debug("add "+i.name,i,t)}var Oa=class{createBuiltinComponents(e,t,i,n,r){return Dg(e,t,i,n,r)}writeBuiltinComponentData(e,t){return Ag(e,t)}parseSync(e,t,i,n){return zw(e,t,i,n)}loadSync(e,t,i,n,r){return Ww(e,t,i,n,r)}};_l(Oa);var Gw=P("printGltf"),Vw=(i=>(i[i.BeforeLoad=0]="BeforeLoad",i[i.AfterLoaded=1]="AfterLoaded",i[i.FinishedSetup=10]="FinishedSetup",i))(Vw||{}),Or=class{context;loader;path;gltf;constructor(e,t,i,n){this.context=e,this.path=t,this.loader=i,this.gltf=n}},kr={};function G6(o,e){kr[o]=kr[o]||[],kr[o].push(e)}function V6(o,e){if(kr[o]){let t=kr[o].indexOf(e);t>=0&&kr[o].splice(t,1)}}function As(o,e){if(kr[o])for(let t of kr[o])t(e)}async function Lg(o,e,t,i,n){Gw&&console.log(t),await o.assets.registerGltf(t),await Ye().createBuiltinComponents(o,e,t,i,n)}function jg(o,e){let t=new Uw;return cm(t,e,o),t}function zw(o,e,t,i){typeof t!="string"&&console.warn("Parse gltf binary without path, this might lead to errors in resolving extensions. Please provide the source path of the gltf/glb file",t,typeof t);let n=jg(t,o),r=wd(n);return new Promise((s,a)=>{try{wn(n,o),As(0,new Or(o,t,n)),n.parse(e,t,async c=>{As(1,new Or(o,t,n,c)),await Lg(o,t,c,i,r),As(10,new Or(o,t,n,c)),s(c)},c=>{console.error("failed loading "+t,c),s(void 0)})}catch(c){console.error(c),a(c)}})}function Ww(o,e,t,i=!1,n){let r=jg(e,o),s=wd(r);return new Promise((a,c)=>{try{wn(r,o),As(0,new Or(o,e,r)),r.load(e,async u=>{As(1,new Or(o,e,r,u)),await Lg(o,e,u,t,s),As(10,new Or(o,e,r,u)),a(u)},u=>{n?.call(r,u)},u=>{console.error("failed loading "+e,u),a(void 0)})}catch(u){console.error(u),c(u)}})}function z6(o,e,t,i=!1){e&&e.animations&&e.animations.length>0&&t.push(()=>{Nw(e,i)})}function Nw(o,e=!1){if(!o||!o.animations||!o.scene||!e&&!Qn(o.scene,rt))return;for(let i=0;i<o.animations.length;i++){let n=o.animations[i];if(!(!n.tracks||n.tracks.length<=0))for(let r in n.tracks){let s=n.tracks[r],a=s.__objectName??s.name.substring(0,s.name.indexOf(".")),c=o.scene.getObjectByName(a);if(!c)continue;let u=t(c);if(!u)if(e)u=Ht(o.scene,new rt);else{console.warn("Failed finding animator for",s.name,a);continue}let l=u.animations=u.animations||[];n.name_animator=u.name,l.indexOf(n)<0&&l.push(n)}}function t(i){if(!i)return;let n=i.userData?.components;if(n&&n.length>0)for(let r=0;r<n.length;r++){let s=n[r];if(s instanceof Ee||s instanceof rt)return i}return t(i.parent)}}function Xw(o,e,t=!0){if(e.userData&&e.userData.name===o)return e;if(e.children&&e.children.length>0)for(let i=0;i<e.children.length;i++){let n=e.children[i],r=Xw(o,n,t);if(r)return r}}function W6(o,e,t=!0){return dn(o,e,t)}function N6(o,e=null){let t=e??G.Current.scripts;for(let i in t){let n=t[i];if(n&&n.guid===o)return n}return null}var Ds=P("debugloadingbar"),Qw=P("debugloadingbarrendering");var ka=0,Hg;function Wh(o){Ds&&console.log(o.progress.loaded.toFixed(0)+"/"+o.progress.total.toFixed(0),o);let e=o.count,t=o.progress.total;t===0||t===void 0?(Hg!==o.name&&(ka=0),Hg=o.name,ka+=(1-ka)*.001,Ds&&Xn("Loading "+o.name+" did not report total size")):ka=o.progress.loaded/t;let i=o.index/e+ka/e;return H.clamp01(i)}var Hc=class{loadingProgress=0;container;_progress=0;_allowCustomLoadingElement=!0;_loadingElement;_loadingTextContainer=null;_loadingBar=null;_messageContainer=null;_loadingElementOptions;constructor(e,t){this.container=e,this._loadingElementOptions=t}onLoadingBegin(e){if(Ds&&console.log("Begin Loading"),!this._loadingElement){for(let t=0;t<this.container.children.length;t++){let i=this.container.children[t];if(i.classList.contains(Hc.LoadingContainerClassName)){if(!this._allowCustomLoadingElement){Ds&&console.warn("Remove custom loading container"),this.container.removeChild(i);continue}this._loadingElement=this.createLoadingElement(i)}}this._loadingElement||(this._loadingElement=this.createLoadingElement())}this._progress=0,this.loadingProgress=0,this._loadingElement.style.display="flex",this.container.appendChild(this._loadingElement),this.smoothProgressLoop(),this.setMessage(e??"")}onLoadingUpdate(e,t){this._loadingElement?.parentElement||this.onLoadingBegin(t);let i=0;typeof e=="number"?i=e:("index"in e&&(i=Wh(e)),!t&&"name"in e&&this.setMessage(e.name)),this.loadingProgress=i,t&&this.setMessage(t),this.updateDisplay()}onLoadingFinished(e){this.loadingProgress=1,this.setMessage(e??"")}setMessage(e){this._messageContainer&&(this._messageContainer.innerText=e)}_progressLoop;smoothProgressLoop(){if(this._progressLoop)return;let e=1/12,t=1-.05;Qw&&(e=1/500),this._progressLoop=setInterval(()=>{if(this.loadingProgress>=1&&this._progress>=t){this._loadingElement&&(Ds&&console.log("Hiding loading element"),this._loadingElement.style.display="none",this._loadingElement.remove()),clearInterval(this._progressLoop),this._progressLoop=null;return}this._progress=H.lerp(this._progress,this.loadingProgress,e*this.loadingProgress),this.updateDisplay()},e)}updateDisplay(){let e=this._progress,t=(e*100).toFixed(0)+"%";this._loadingBar&&(this._loadingBar.style.width=e*100+"%"),this._loadingTextContainer&&(this._loadingTextContainer.textContent=t)}createLoadingElement(e){Ds&&!e&&console.log("Creating loading element"),this._loadingElement=e||document.createElement("div"),e||(this._loadingElement.style.position="fixed",this._loadingElement.style.width="100%",this._loadingElement.style.height="100%",this._loadingElement.style.left="0",this._loadingElement.style.top="0",this._loadingElement.style.backgroundColor="#000000",this._loadingElement.style.display="flex",this._loadingElement.style.alignItems="center",this._loadingElement.style.justifyContent="center",this._loadingElement.style.zIndex="1000",this._loadingElement.style.flexDirection="column",this._loadingElement.style.pointerEvents="none",this._loadingElement.style.color="white");let t=this._loadingElementOptions?.className??Hc.LoadingContainerClassName;if(this._loadingElement.classList.add(t),this._loadingElementOptions?.additionalClasses)for(let a of this._loadingElementOptions.additionalClasses)this._loadingElement.classList.add(a);let i=document.createElement("div"),n=30;i.style.display="flex",i.style.width=n+"%",i.style.height="2px",i.style.background="rgba(255,255,255,.1)",this._loadingElement.appendChild(i),this._loadingBar=document.createElement("div"),i.appendChild(this._loadingBar);let r=function(a){return H.lerp(n*.5,100-n*.5,a)+"%"};this._loadingBar.style.background=`linear-gradient(90deg, #02022B ${r(0)}, #0BA398 ${r(.4)}, #99CC33 ${r(.5)}, #D7DB0A ${r(1)})`,this._loadingBar.style.backgroundAttachment="fixed",this._loadingBar.style.width="0%",this._loadingBar.style.height="100%",this._loadingTextContainer=document.createElement("div"),this._loadingTextContainer.style.display="flex",this._loadingTextContainer.style.justifyContent="center",this._loadingTextContainer.style.marginTop=".9em",this._loadingElement.appendChild(this._loadingTextContainer);let s=document.createElement("div");return this._messageContainer=s,s.style.display="flex",s.style.fontSize=".8em",s.style.paddingTop=".5em",s.style.color="rgba(255,255,255,.5)",s.style.justifyContent="center",this._loadingElement.appendChild(s),this._loadingElement}},Ma=Hc;I(Ma,"LoadingContainerClassName","loading");_l(Oa);var Wn=P("debugwebcomponent"),Nh=class{id;context;previouslyAdded;previousSource;networkEvent;constructor(e,t){this.id=e,this.context=t,this.networkEvent="needle-engine-source-changed",this.id&&(this.networkEvent+="-"+this.id),this.context.connection.beginListen(this.networkEvent,i=>{this.onSourceChanged(i,!0)})}async onSourceChanged(e,t=!1,i=!1){this.previouslyAdded&&(t&&e===this.previousSource||R.destroySynced(this.previouslyAdded)),this.previouslyAdded=null,t||this.context.connection.send(this.networkEvent,e),this.previousSource=e,G.Current=this.context;let n=await Ye().loadSync(this.context,e,this.getHashFromString(e),!1);i||vn(this.context);let r=n?.scene;r&&(this.previouslyAdded=r,this.context.scene.add(r))}getHashFromString(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}},qw="needle-engine",Fg="vr",Bg="desktop",Yw=[Ui,Fg,Bg],Ia="ar-session-active",Aa="desktop-session-active",Xh=class extends HTMLElement{get loadingProgress01(){return this._loadingProgress01}get loadingFinished(){return this.loadingProgress01>.999}getContext(){return new Promise((e,t)=>{if(this._context&&this.loadingFinished)e(this._context);else{let i=()=>{this.removeEventListener("loadfinished",i),this._context&&this.loadingFinished&&e(this._context)};this.addEventListener("loadfinished",i)}})}get Context(){return this._context}gameObject=R;GameObject=R;_context=null;_overlay_ar;_loadingProgress01=0;_watcher;_loadingView;constructor(){super(),this._overlay_ar=new jl}async connectedCallback(){this.onSetupDesktop();var e=new MutationObserver(this.onElementsChanged.bind(this));e.observe(this,{childList:!0});let t=()=>{let a=this.getAttribute("src");return a?.endsWith(".glb")||a?.endsWith(".gltf")?a:null},i="loadScene",n=t();n&&(i=n);let r=this.getAttribute("alias"),s=this.getAttribute("hash");if(this._context=new G({name:i,domElement:this,alias:r,hash:s??void 0}),this._watcher=new Nh(this.getAttribute("id")??r??"",this._context),i&&i.length>0){if(!n)for(;Object.keys(Ll).length<=0;){if(!this.isConnected)return;await _o(10)}let a=Ll[i]??window[i],c=null;if((!a||n)&&(n&&(i=n),a=async u=>{let l=t();l&&this._watcher&&(c=l,await this._watcher.onSourceChanged(l,!0,!0))}),a){this.classList.add("loading"),Wn&&console.log("Needle Engine: Begin loading",r??"");let u=!0,l=this.dispatchEvent(new CustomEvent("loadstart",{detail:{context:this._context,alias:r},cancelable:u}));!this._loadingView&&l&&(this._loadingView=new Ma(this)),l&&this._loadingView?.onLoadingBegin("begin load");let d=(g,E)=>{this._loadingProgress01=Wh(g),l&&this._loadingView?.onLoadingUpdate(g,E),this.dispatchEvent(new CustomEvent("progress",{detail:{context:this._context,name:g.name,progress:g.progress,index:g.index,count:g.count,totalProgress01:this._loadingProgress01}}))};this.onBeforeBeginLoading(),await this._context.onCreate(a,{progress:d});let h=t();h&&h!==c&&await this._watcher.onSourceChanged(h,!0,!0),this._loadingProgress01=1,l&&this._loadingView?.onLoadingFinished("create scene"),this.classList.remove("loading"),this.classList.add("loading-finished"),Wn&&console.log("Needle Engine: finished loading",r??""),this.dispatchEvent(new CustomEvent("loadfinished",{detail:{context:this._context,src:r??i}})),this.onSetupDesktop()}else console.error('Could not find scene function named "'+i+'", it must be either in global scope or added to build_scene_functions',Ll)}else console.error("Missing src attribute - please provide a function name",this)}disconnectedCallback(){this._context&&this._context.onDestroy()}static get observedAttributes(){return["hash","src","loadstart","progress","loadfinished","dracoDecoderPath","dracoDecoderType","ktx2DecoderPath"]}attributeChangedCallback(e,t,i){switch(e){case"src":this._watcher?.onSourceChanged(i);break;case"loadstart":case"progress":case"loadfinished":typeof i=="string"&&i.length>0&&(Wn&&console.log(e+" attribute changed",i),this.registerEventFromAttribute(e,i));break;case"dracoDecoderPath":Wn&&console.log("dracoDecoderPath",i),ad(i);break;case"dracoDecoderType":i==="wasm"||i==="js"?(Wn&&console.log("dracoDecoderType",i),ld(i)):console.error("Invalid dracoDecoderType",i,"expected js or wasm");break;case"ktx2DecoderPath":Wn&&console.log("ktx2DecoderPath",i),cd(i);break}}registerEventFromAttribute(e,t){if(typeof t=="string"&&t.length>0){let i=(0,eval)(t);typeof i=="function"&&this.addEventListener(e,n=>i?.call(globalThis,this._context,n))}}getAROverlayContainer(){return this._overlay_ar.findOrCreateARContainer(this)}getVROverlayContainer(){for(let e=0;e<this.children.length;e++){let t=this.children[e];if(t.classList.contains("vr"))return t}return null}onEnterAR(e,t){this.onSetupAR(),this._overlay_ar.onBegin(this._context,t,e),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:e,context:this._context,htmlContainer:this._overlay_ar?.ARContainer}}))}onExitAR(e){this._overlay_ar.onEnd(this._context),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:e,context:this._context,htmlContainer:this._overlay_ar?.ARContainer}}))}onEnterVR(e){this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:e,context:this._context}}))}onExitVR(e){this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:e,context:this._context}}))}onElementsChanged(){}onSetupAR(){this.classList.add(Ia),this.classList.remove(Aa);let e=this.getAROverlayContainer();e&&(e.classList.add(Ia),e.classList.remove(Aa)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Ui))}onSetupVR(){this.classList.remove(Ia),this.classList.remove(Aa),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Fg))}onSetupDesktop(){this.classList.remove(Ia),this.classList.add(Aa);let e=this.getAROverlayContainer();e&&(e.classList.remove(Ia),e.classList.add(Aa)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Bg))}setupElementsForMode(e,t,i=null){if(e===this._context?.renderer.domElement||e.id==="VRButton"||e.id==="ARButton")return;if(e.style.position="absolute",e.classList.contains(t))e.style.visibility="visible",e.style.display==="none"&&(e.style.display="block");else for(let r of Yw)e.classList.contains(r)&&(e.style.visibility="hidden",e.style.display="none")}foreachHtmlElement(e){for(let t=0;t<this.children.length;t++){let i=this.children[t];i.style&&e(i)}}onBeforeBeginLoading(){let e=this.getAttribute("dracoDecoderPath");e&&(Wn&&console.log("using custom draco decoder path",e),ad(e));let t=this.getAttribute("dracoDecoderType");t&&(Wn&&console.log("using custom draco decoder type",t),ld(t));let i=this.getAttribute("ktx2DecoderPath");i&&(Wn&&console.log("using custom ktx2 decoder path",i),cd(i))}};window.customElements.define(qw,Xh);import*as Kw from"three";Jf();var Qh={Context:G};globalThis.Needle=Qh;function Ug(o){for(let e in o)Qh[e]=o[e]}Ug(Ku);Ug(Gh);for(let o of Object.getOwnPropertyNames(R))switch(o){case"prototype":case"constructor":case"length":case"name":continue;default:Qh[o]=R[o];break}globalThis.THREE?console.warn("Threejs is already imported"):globalThis.THREE=Kw;export{ir as AlignmentConstraint,rt as Animation,mi as AnimationCurve,nr as AnimationExtension,rr as AnimationTrackHandler,Ee as Animator,hi as AnimatorController,tt as AssetReference,vt as AttachedObject,gi as AudioListener,oe as AudioSource,or as AudioTrackHandler,Qi as AvatarBlink_Simple,qi as AvatarEyeLook_Rotation,sr as AvatarLoader,le as AvatarMarker,Jr as AvatarModel,Pn as Avatar_Brain_LookAt,dr as Avatar_MouthShapes,is as Avatar_MustacheShake,ve as Avatar_POI,In as AxesHelper,ze as BaseUIComponent,ns as BasicIKConstraint,M as Behaviour,fr as BoxCollider,yi as BoxGizmo,We as BoxHelperComponent,qt as Button,bi as CallInfo,Z as Camera,Ne as Canvas,jn as CanvasGroup,Xt as CapsuleCollider,Yi as CharacterController,Ci as CharacterControllerInput,Ot as Collider,Xs as Collision,br as ColorAdjustments,Ti as ColorBySpeedModule,Hn as ColorOverLifetimeModule,G as Context,Sn as ControlTrackHandler,us as Deletable,oo as DeleteBox,so as DeviceFlag,Ji as DragControls,vr as DropListener,Zi as Duplicatable,xt as EmissionModule,de as EventList,qr as EventListEvent,Ke as EventSystem,ao as EventTrigger,hs as FieldWithDefault,fs as FixedJoint,ms as FlyControls,Rt as FrameEvent,R as GameObject,Et as Gizmos,$t as GltfExport,gs as GltfExportBox,Or as GltfLoadEvent,Vw as GltfLoadEventType,Ri as Gradient,_t as Graphic,bs as GraphicRaycaster,Gn as GridHelper,_s as GridLayoutGroup,tn as GroundProjectedEnv,Hb as HideFlags,yr as HingeJoint,ys as HorizontalLayoutGroup,Dn as Image,Jt as InheritVelocityModule,kt as InputField,re as InstancingUtil,Ue as InstantiateOptions,Vt as Interactable,xs as Keyboard,_r as LODGroup,nn as LODModel,Vn as LayoutGroup,Qe as Light,ue as LimitVelocityOverLifetimeModule,Es as LogStats,Us as LogType,xn as LookAtConstraint,ye as MainModule,An as MaskableGraphic,$r as MeshCollider,lo as MeshRenderer,U as MinMaxCurve,Me as MinMaxGradient,Oa as NeedleGltfLoader,po as NestedGltf,Si as Networking,K as NoiseModule,uo as ObjectRaycaster,rn as OffsetConstraint,nt as OrbitControls,Fn as ParticleBurst,xr as ParticleSubEmitter,be as ParticleSystem,on as ParticleSystemRenderer,Tn as PlayableDirector,Pi as PlayerColor,_i as PointerEventData,Q as RGBAColor,io as RawImage,co as Raycaster,to as Rect,yt as RectTransform,Zt as ReflectionProbe,Xr as RegisteredAnimationInfo,Oi as RemoteSkybox,ae as Renderer,Un as RendererLightmap,J as Rigidbody,Xe as RotationBySpeedModule,Je as RotationOverLifetimeModule,Cr as ScreenCapture,Tr as ShadowCatcher,ie as ShapeModule,Yr as SignalAsset,Cn as SignalReceiver,Kr as SignalReceiverEvent,Rn as SignalTrackHandler,os as Size,ke as SizeBySpeedModule,Kt as SizeOverLifetimeModule,ps as SkinnedMeshRenderer,Mt as SmoothFollow,Ss as SpatialHtml,zn as SpatialTrigger,It as SpatialTriggerReceiver,Ps as SpectatorCamera,pr as SphereCollider,ei as Sprite,sn as SpriteRenderer,an as SpriteSheet,wr as SubEmitterSystem,Sr as SyncedCamera,ki as SyncedRoom,Pt as SyncedTransform,Zr as TeleportTarget,ks as TestRunner,Ms as TestSimulateUserData,Ie as Text,_e as TextureSheetAnimationModule,gr as ToneMapping,ee as TrailModule,Qr as TransformData,mo as TransformGizmo,O as TypeStore,wi as UIRaycastUtils,Mn as UIRootComponent,Pr as USDZExporter,zt as UsageMarker,Nt as VRUserState,He as VelocityOverLifetimeModule,vs as VerticalLayoutGroup,Re as VideoPlayer,ot as Voip,ro as Volume,Ki as VolumeComponent,ls as VolumeParameter,mr as VolumeProfile,ur as WebAR,gt as WebARSessionRoot,V as WebXR,Gt as WebXRAvatar,se as WebXRController,kn as WebXRSync,Ce as XRFlag,go as XRGrabModel,Is as XRGrabRendering,cr as XRRig,St as XRState,Ra as __Ignore,G6 as addGltfLoadEventListener,Ht as addNewComponent,Mo as apply,jg as createGLTFLoader,oi as destroy,$p as destroyComponentInstance,Nw as findAnimations,z6 as findAnimationsLate,Hr as findByGuid,tf as findObjectOfType,nf as findObjectsOfType,si as foreachComponent,Br as getComponent,Qn as getComponentInChildren,Po as getComponentInParent,Oo as getComponents,ko as getComponentsInChildren,qs as getComponentsInParent,nl as getOrAddComponent,Fr as instantiate,of as isActiveInHierarchy,bn as isActiveSelf,Ha as isDevEnvironment,sl as isUsingInstancing,Ww as loadSync,sf as markAsInstancedRendered,Zp as moveComponentInstance,zw as parseSync,il as removeComponent,V6 as removeGltfLoadEventListener,y as serializable,Bo as serializeable,Io as setActive,Fe as showBalloonMessage,Xn as showBalloonWarning,eu as showDebugConsole,W6 as tryFindObject,Xw as tryFindObjectByName,N6 as tryFindScript,ci as validate};
313
+ <a href="https://engine.needle.tools/docs/project_structure.html#creating-and-installing-a-npmdef" target="_blank">documentation</a>`,1)}}if(e.children)for(let r of e.children)await Wh(o,r,t,i)}function Vw(o,e){let{instance:t,compData:i,obj:n}=o;e.object=n,e.target=t;let r=!0;r=zs(t,i,e)===!0,Ag&&console.debug("add "+i.name,i,t)}var ka=class{createBuiltinComponents(e,t,i,n,r){return Lg(e,t,i,n,r)}writeBuiltinComponentData(e,t){return Dg(e,t)}parseSync(e,t,i,n){return Xw(e,t,i,n)}loadSync(e,t,i,n,r){return Qw(e,t,i,n,r)}};xl(ka);var Ww=P("printGltf"),Nw=(i=>(i[i.BeforeLoad=0]="BeforeLoad",i[i.AfterLoaded=1]="AfterLoaded",i[i.FinishedSetup=10]="FinishedSetup",i))(Nw||{}),kr=class{context;loader;path;gltf;constructor(e,t,i,n){this.context=e,this.path=t,this.loader=i,this.gltf=n}},Mr={};function Z6(o,e){Mr[o]=Mr[o]||[],Mr[o].push(e)}function $6(o,e){if(Mr[o]){let t=Mr[o].indexOf(e);t>=0&&Mr[o].splice(t,1)}}function Ds(o,e){if(Mr[o])for(let t of Mr[o])t(e)}async function jg(o,e,t,i,n){Ww&&console.log(t),await o.assets.registerGltf(t),await Ye().createBuiltinComponents(o,e,t,i,n)}function Hg(o,e){let t=new zw;return um(t,e,o),t}function Xw(o,e,t,i){typeof t!="string"&&console.warn("Parse gltf binary without path, this might lead to errors in resolving extensions. Please provide the source path of the gltf/glb file",t,typeof t);let n=Hg(t,o),r=Ed(n);return new Promise((s,a)=>{try{wn(n,o),Ds(0,new kr(o,t,n)),n.parse(e,t,async c=>{Ds(1,new kr(o,t,n,c)),await jg(o,t,c,i,r),Ds(10,new kr(o,t,n,c)),s(c)},c=>{console.error("failed loading "+t,c),s(void 0)})}catch(c){console.error(c),a(c)}})}function Qw(o,e,t,i=!1,n){let r=Hg(e,o),s=Ed(r);return new Promise((a,c)=>{try{wn(r,o),Ds(0,new kr(o,e,r)),r.load(e,async u=>{Ds(1,new kr(o,e,r,u)),await jg(o,e,u,t,s),Ds(10,new kr(o,e,r,u)),a(u)},u=>{n?.call(r,u)},u=>{console.error("failed loading "+e,u),a(void 0)})}catch(u){console.error(u),c(u)}})}function e8(o,e,t,i=!1){e&&e.animations&&e.animations.length>0&&t.push(()=>{qw(e,i)})}function qw(o,e=!1){if(!o||!o.animations||!o.scene||!e&&!qn(o.scene,rt))return;for(let i=0;i<o.animations.length;i++){let n=o.animations[i];if(!(!n.tracks||n.tracks.length<=0))for(let r in n.tracks){let s=n.tracks[r],a=s.__objectName??s.name.substring(0,s.name.indexOf(".")),c=o.scene.getObjectByName(a);if(!c)continue;let u=t(c);if(!u)if(e)u=Ht(o.scene,new rt);else{console.warn("Failed finding animator for",s.name,a);continue}let l=u.animations=u.animations||[];n.name_animator=u.name,l.indexOf(n)<0&&l.push(n)}}function t(i){if(!i)return;let n=i.userData?.components;if(n&&n.length>0)for(let r=0;r<n.length;r++){let s=n[r];if(s instanceof Ee||s instanceof rt)return i}return t(i.parent)}}function Yw(o,e,t=!0){if(e.userData&&e.userData.name===o)return e;if(e.children&&e.children.length>0)for(let i=0;i<e.children.length;i++){let n=e.children[i],r=Yw(o,n,t);if(r)return r}}function t8(o,e,t=!0){return dn(o,e,t)}function i8(o,e=null){let t=e??G.Current.scripts;for(let i in t){let n=t[i];if(n&&n.guid===o)return n}return null}var Ls=P("debugloadingbar"),Kw=P("debugloadingbarrendering");var Ma=0,Fg;function Nh(o){Ls&&console.log(o.progress.loaded.toFixed(0)+"/"+o.progress.total.toFixed(0),o);let e=o.count,t=o.progress.total;t===0||t===void 0?(Fg!==o.name&&(Ma=0),Fg=o.name,Ma+=(1-Ma)*.001,Ls&&Qn("Loading "+o.name+" did not report total size")):Ma=o.progress.loaded/t;let i=o.index/e+Ma/e;return H.clamp01(i)}var Fc=class{loadingProgress=0;container;_progress=0;_allowCustomLoadingElement=!0;_loadingElement;_loadingTextContainer=null;_loadingBar=null;_messageContainer=null;_loadingElementOptions;constructor(e,t){this.container=e,this._loadingElementOptions=t}onLoadingBegin(e){if(Ls&&console.log("Begin Loading"),!this._loadingElement){for(let t=0;t<this.container.children.length;t++){let i=this.container.children[t];if(i.classList.contains(Fc.LoadingContainerClassName)){if(!this._allowCustomLoadingElement){Ls&&console.warn("Remove custom loading container"),this.container.removeChild(i);continue}this._loadingElement=this.createLoadingElement(i)}}this._loadingElement||(this._loadingElement=this.createLoadingElement())}this._progress=0,this.loadingProgress=0,this._loadingElement.style.display="flex",this.container.appendChild(this._loadingElement),this.smoothProgressLoop(),this.setMessage(e??"")}onLoadingUpdate(e,t){this._loadingElement?.parentElement||this.onLoadingBegin(t);let i=0;typeof e=="number"?i=e:("index"in e&&(i=Nh(e)),!t&&"name"in e&&this.setMessage(e.name)),this.loadingProgress=i,t&&this.setMessage(t),this.updateDisplay()}onLoadingFinished(e){this.loadingProgress=1,this.setMessage(e??"")}setMessage(e){this._messageContainer&&(this._messageContainer.innerText=e)}_progressLoop;smoothProgressLoop(){if(this._progressLoop)return;let e=1/12,t=1-.05;Kw&&(e=1/500),this._progressLoop=setInterval(()=>{if(this.loadingProgress>=1&&this._progress>=t){this._loadingElement&&(Ls&&console.log("Hiding loading element"),this._loadingElement.style.display="none",this._loadingElement.remove()),clearInterval(this._progressLoop),this._progressLoop=null;return}this._progress=H.lerp(this._progress,this.loadingProgress,e*this.loadingProgress),this.updateDisplay()},e)}updateDisplay(){let e=this._progress,t=(e*100).toFixed(0)+"%";this._loadingBar&&(this._loadingBar.style.width=e*100+"%"),this._loadingTextContainer&&(this._loadingTextContainer.textContent=t)}createLoadingElement(e){Ls&&!e&&console.log("Creating loading element"),this._loadingElement=e||document.createElement("div"),e||(this._loadingElement.style.position="fixed",this._loadingElement.style.width="100%",this._loadingElement.style.height="100%",this._loadingElement.style.left="0",this._loadingElement.style.top="0",this._loadingElement.style.backgroundColor="#000000",this._loadingElement.style.display="flex",this._loadingElement.style.alignItems="center",this._loadingElement.style.justifyContent="center",this._loadingElement.style.zIndex="1000",this._loadingElement.style.flexDirection="column",this._loadingElement.style.pointerEvents="none",this._loadingElement.style.color="white");let t=this._loadingElementOptions?.className??Fc.LoadingContainerClassName;if(this._loadingElement.classList.add(t),this._loadingElementOptions?.additionalClasses)for(let a of this._loadingElementOptions.additionalClasses)this._loadingElement.classList.add(a);let i=document.createElement("div"),n=30;i.style.display="flex",i.style.width=n+"%",i.style.height="2px",i.style.background="rgba(255,255,255,.1)",this._loadingElement.appendChild(i),this._loadingBar=document.createElement("div"),i.appendChild(this._loadingBar);let r=function(a){return H.lerp(n*.5,100-n*.5,a)+"%"};this._loadingBar.style.background=`linear-gradient(90deg, #02022B ${r(0)}, #0BA398 ${r(.4)}, #99CC33 ${r(.5)}, #D7DB0A ${r(1)})`,this._loadingBar.style.backgroundAttachment="fixed",this._loadingBar.style.width="0%",this._loadingBar.style.height="100%",this._loadingTextContainer=document.createElement("div"),this._loadingTextContainer.style.display="flex",this._loadingTextContainer.style.justifyContent="center",this._loadingTextContainer.style.marginTop=".9em",this._loadingElement.appendChild(this._loadingTextContainer);let s=document.createElement("div");return this._messageContainer=s,s.style.display="flex",s.style.fontSize=".8em",s.style.paddingTop=".5em",s.style.color="rgba(255,255,255,.5)",s.style.justifyContent="center",this._loadingElement.appendChild(s),this._loadingElement}},Ia=Fc;I(Ia,"LoadingContainerClassName","loading");xl(ka);var Nn=P("debugwebcomponent"),Xh=class{id;context;previouslyAdded;previousSource;networkEvent;constructor(e,t){this.id=e,this.context=t,this.networkEvent="needle-engine-source-changed",this.id&&(this.networkEvent+="-"+this.id),this.context.connection.beginListen(this.networkEvent,i=>{this.onSourceChanged(i,!0)})}async onSourceChanged(e,t=!1,i=!1){this.previouslyAdded&&(t&&e===this.previousSource||R.destroySynced(this.previouslyAdded)),this.previouslyAdded=null,t||this.context.connection.send(this.networkEvent,e),this.previousSource=e,G.Current=this.context;let n=await Ye().loadSync(this.context,e,this.getHashFromString(e),!1);i||vn(this.context);let r=n?.scene;r&&(this.previouslyAdded=r,this.context.scene.add(r))}getHashFromString(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);return t}},Jw="needle-engine",Bg="vr",Ug="desktop",Zw=[Ui,Bg,Ug],Aa="ar-session-active",Da="desktop-session-active",Qh=class extends HTMLElement{get loadingProgress01(){return this._loadingProgress01}get loadingFinished(){return this.loadingProgress01>.999}getContext(){return new Promise((e,t)=>{if(this._context&&this.loadingFinished)e(this._context);else{let i=()=>{this.removeEventListener("loadfinished",i),this._context&&this.loadingFinished&&e(this._context)};this.addEventListener("loadfinished",i)}})}get Context(){return this._context}gameObject=R;GameObject=R;_context=null;_overlay_ar;_loadingProgress01=0;_watcher;_loadingView;constructor(){super(),this._overlay_ar=new Hl}async connectedCallback(){this.onSetupDesktop();var e=new MutationObserver(this.onElementsChanged.bind(this));e.observe(this,{childList:!0});let t=()=>{let a=this.getAttribute("src");return a?.endsWith(".glb")||a?.endsWith(".gltf")?a:null},i="loadScene",n=t();n&&(i=n);let r=this.getAttribute("alias"),s=this.getAttribute("hash");if(this._context=new G({name:i,domElement:this,alias:r,hash:s??void 0}),this._watcher=new Xh(this.getAttribute("id")??r??"",this._context),i&&i.length>0){if(!n)for(;Object.keys(jl).length<=0;){if(!this.isConnected)return;await xo(10)}let a=jl[i]??window[i],c=null;if((!a||n)&&(n&&(i=n),a=async u=>{let l=t();l&&this._watcher&&(c=l,await this._watcher.onSourceChanged(l,!0,!0))}),a){this.classList.add("loading"),Nn&&console.log("Needle Engine: Begin loading",r??"");let u=!0,l=this.dispatchEvent(new CustomEvent("loadstart",{detail:{context:this._context,alias:r},cancelable:u}));!this._loadingView&&l&&(this._loadingView=new Ia(this)),l&&this._loadingView?.onLoadingBegin("begin load");let d=(g,E)=>{this._loadingProgress01=Nh(g),l&&this._loadingView?.onLoadingUpdate(g,E),this.dispatchEvent(new CustomEvent("progress",{detail:{context:this._context,name:g.name,progress:g.progress,index:g.index,count:g.count,totalProgress01:this._loadingProgress01}}))};this.onBeforeBeginLoading(),await this._context.onCreate(a,{progress:d});let h=t();h&&h!==c&&await this._watcher.onSourceChanged(h,!0,!0),this._loadingProgress01=1,l&&this._loadingView?.onLoadingFinished("create scene"),this.classList.remove("loading"),this.classList.add("loading-finished"),Nn&&console.log("Needle Engine: finished loading",r??""),this.dispatchEvent(new CustomEvent("loadfinished",{detail:{context:this._context,src:r??i}})),this.onSetupDesktop()}else console.error('Could not find scene function named "'+i+'", it must be either in global scope or added to build_scene_functions',jl)}else console.error("Missing src attribute - please provide a function name",this)}disconnectedCallback(){this._context&&this._context.onDestroy()}static get observedAttributes(){return["hash","src","loadstart","progress","loadfinished","dracoDecoderPath","dracoDecoderType","ktx2DecoderPath"]}attributeChangedCallback(e,t,i){switch(e){case"src":this._watcher?.onSourceChanged(i);break;case"loadstart":case"progress":case"loadfinished":typeof i=="string"&&i.length>0&&(Nn&&console.log(e+" attribute changed",i),this.registerEventFromAttribute(e,i));break;case"dracoDecoderPath":Nn&&console.log("dracoDecoderPath",i),ld(i);break;case"dracoDecoderType":i==="wasm"||i==="js"?(Nn&&console.log("dracoDecoderType",i),cd(i)):console.error("Invalid dracoDecoderType",i,"expected js or wasm");break;case"ktx2DecoderPath":Nn&&console.log("ktx2DecoderPath",i),ud(i);break}}registerEventFromAttribute(e,t){if(typeof t=="string"&&t.length>0){let i=(0,eval)(t);typeof i=="function"&&this.addEventListener(e,n=>i?.call(globalThis,this._context,n))}}getAROverlayContainer(){return this._overlay_ar.findOrCreateARContainer(this)}getVROverlayContainer(){for(let e=0;e<this.children.length;e++){let t=this.children[e];if(t.classList.contains("vr"))return t}return null}onEnterAR(e,t){this.onSetupAR(),this._overlay_ar.onBegin(this._context,t,e),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:e,context:this._context,htmlContainer:this._overlay_ar?.ARContainer}}))}onExitAR(e){this._overlay_ar.onEnd(this._context),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:e,context:this._context,htmlContainer:this._overlay_ar?.ARContainer}}))}onEnterVR(e){this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:e,context:this._context}}))}onExitVR(e){this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:e,context:this._context}}))}onElementsChanged(){}onSetupAR(){this.classList.add(Aa),this.classList.remove(Da);let e=this.getAROverlayContainer();e&&(e.classList.add(Aa),e.classList.remove(Da)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Ui))}onSetupVR(){this.classList.remove(Aa),this.classList.remove(Da),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Bg))}onSetupDesktop(){this.classList.remove(Aa),this.classList.add(Da);let e=this.getAROverlayContainer();e&&(e.classList.remove(Aa),e.classList.add(Da)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Ug))}setupElementsForMode(e,t,i=null){if(e===this._context?.renderer.domElement||e.id==="VRButton"||e.id==="ARButton")return;if(e.style.position="absolute",e.classList.contains(t))e.style.visibility="visible",e.style.display==="none"&&(e.style.display="block");else for(let r of Zw)e.classList.contains(r)&&(e.style.visibility="hidden",e.style.display="none")}foreachHtmlElement(e){for(let t=0;t<this.children.length;t++){let i=this.children[t];i.style&&e(i)}}onBeforeBeginLoading(){let e=this.getAttribute("dracoDecoderPath");e&&(Nn&&console.log("using custom draco decoder path",e),ld(e));let t=this.getAttribute("dracoDecoderType");t&&(Nn&&console.log("using custom draco decoder type",t),cd(t));let i=this.getAttribute("ktx2DecoderPath");i&&(Nn&&console.log("using custom ktx2 decoder path",i),ud(i))}};window.customElements.define(Jw,Qh);import*as $w from"three";Zf();var qh={Context:G};globalThis.Needle=qh;function Gg(o){for(let e in o)qh[e]=o[e]}Gg(Ju);Gg(Vh);for(let o of Object.getOwnPropertyNames(R))switch(o){case"prototype":case"constructor":case"length":case"name":continue;default:qh[o]=R[o];break}globalThis.THREE?console.warn("Threejs is already imported"):globalThis.THREE=$w;export{nr as AlignmentConstraint,rt as Animation,mi as AnimationCurve,rr as AnimationExtension,or as AnimationTrackHandler,Ee as Animator,hi as AnimatorController,tt as AssetReference,vt as AttachedObject,gi as AudioListener,oe as AudioSource,sr as AudioTrackHandler,Qi as AvatarBlink_Simple,qi as AvatarEyeLook_Rotation,ar as AvatarLoader,le as AvatarMarker,Zr as AvatarModel,Pn as Avatar_Brain_LookAt,hr as Avatar_MouthShapes,ns as Avatar_MustacheShake,ve as Avatar_POI,In as AxesHelper,ze as BaseUIComponent,rs as BasicIKConstraint,M as Behaviour,mr as BoxCollider,yi as BoxGizmo,We as BoxHelperComponent,qt as Button,bi as CallInfo,Z as Camera,Ne as Canvas,jn as CanvasGroup,Xt as CapsuleCollider,Yi as CharacterController,Ci as CharacterControllerInput,Ot as Collider,Qs as Collision,vr as ColorAdjustments,Ti as ColorBySpeedModule,Hn as ColorOverLifetimeModule,G as Context,Sn as ControlTrackHandler,ds as Deletable,so as DeleteBox,ao as DeviceFlag,Ji as DragControls,yr as DropListener,Zi as Duplicatable,xt as EmissionModule,de as EventList,Yr as EventListEvent,Ke as EventSystem,lo as EventTrigger,ps as FieldWithDefault,ms as FixedJoint,gs as FlyControls,Gn as Fog,Rt as FrameEvent,R as GameObject,Et as Gizmos,$t as GltfExport,bs as GltfExportBox,kr as GltfLoadEvent,Nw as GltfLoadEventType,Ri as Gradient,_t as Graphic,vs as GraphicRaycaster,Vn as GridHelper,xs as GridLayoutGroup,tn as GroundProjectedEnv,Fb as HideFlags,_r as HingeJoint,_s as HorizontalLayoutGroup,Dn as Image,Jt as InheritVelocityModule,kt as InputField,re as InstancingUtil,Ue as InstantiateOptions,Vt as Interactable,ws as Keyboard,xr as LODGroup,nn as LODModel,zn as LayoutGroup,Qe as Light,ue as LimitVelocityOverLifetimeModule,Cs as LogStats,Gs as LogType,xn as LookAtConstraint,ye as MainModule,An as MaskableGraphic,eo as MeshCollider,co as MeshRenderer,U as MinMaxCurve,Me as MinMaxGradient,ka as NeedleGltfLoader,fo as NestedGltf,Si as Networking,K as NoiseModule,ho as ObjectRaycaster,rn as OffsetConstraint,nt as OrbitControls,Fn as ParticleBurst,wr as ParticleSubEmitter,be as ParticleSystem,on as ParticleSystemRenderer,Tn as PlayableDirector,Pi as PlayerColor,_i as PointerEventData,Q as RGBAColor,no as RawImage,uo as Raycaster,io as Rect,yt as RectTransform,Zt as ReflectionProbe,Qr as RegisteredAnimationInfo,Oi as RemoteSkybox,ae as Renderer,Un as RendererLightmap,J as Rigidbody,Xe as RotationBySpeedModule,Je as RotationOverLifetimeModule,Tr as ScreenCapture,Rr as ShadowCatcher,ie as ShapeModule,Kr as SignalAsset,Cn as SignalReceiver,Jr as SignalReceiverEvent,Rn as SignalTrackHandler,ss as Size,ke as SizeBySpeedModule,Kt as SizeOverLifetimeModule,fs as SkinnedMeshRenderer,Mt as SmoothFollow,Ps as SpatialHtml,Wn as SpatialTrigger,It as SpatialTriggerReceiver,Os as SpectatorCamera,fr as SphereCollider,ei as Sprite,sn as SpriteRenderer,an as SpriteSheet,Er as SubEmitterSystem,Pr as SyncedCamera,ki as SyncedRoom,Pt as SyncedTransform,$r as TeleportTarget,Ms as TestRunner,Is as TestSimulateUserData,Ie as Text,_e as TextureSheetAnimationModule,br as ToneMapping,ee as TrailModule,qr as TransformData,go as TransformGizmo,O as TypeStore,wi as UIRaycastUtils,Mn as UIRootComponent,Or as USDZExporter,zt as UsageMarker,Nt as VRUserState,He as VelocityOverLifetimeModule,ys as VerticalLayoutGroup,Re as VideoPlayer,ot as Voip,oo as Volume,Ki as VolumeComponent,cs as VolumeParameter,gr as VolumeProfile,dr as WebAR,gt as WebARSessionRoot,V as WebXR,Gt as WebXRAvatar,se as WebXRController,kn as WebXRSync,Ce as XRFlag,bo as XRGrabModel,As as XRGrabRendering,ur as XRRig,St as XRState,Sa as __Ignore,Z6 as addGltfLoadEventListener,Ht as addNewComponent,Io as apply,Hg as createGLTFLoader,oi as destroy,ef as destroyComponentInstance,qw as findAnimations,e8 as findAnimationsLate,Fr as findByGuid,nf as findObjectOfType,rf as findObjectsOfType,si as foreachComponent,Ur as getComponent,qn as getComponentInChildren,Oo as getComponentInParent,ko as getComponents,Mo as getComponentsInChildren,Ys as getComponentsInParent,rl as getOrAddComponent,Br as instantiate,sf as isActiveInHierarchy,bn as isActiveSelf,Fa as isDevEnvironment,al as isUsingInstancing,Qw as loadSync,af as markAsInstancedRendered,$p as moveComponentInstance,Xw as parseSync,nl as removeComponent,$6 as removeGltfLoadEventListener,y as serializable,Uo as serializeable,Ao as setActive,Fe as showBalloonMessage,Qn as showBalloonWarning,tu as showDebugConsole,t8 as tryFindObject,Yw as tryFindObjectByName,i8 as tryFindScript,ci as validate};
314
314
  /*!
315
315
  * Determine if an object is a Buffer
316
316
  *