@needle-tools/engine 2.55.2-pre → 2.56.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.
@@ -1,4 +1,4 @@
1
- var Jg=Object.create;var Fs=Object.defineProperty;var up=Object.getOwnPropertyDescriptor;var Zg=Object.getOwnPropertyNames;var $g=Object.getPrototypeOf,eb=Object.prototype.hasOwnProperty;var tb=(o,e,t)=>e in o?Fs(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Xc=(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),dp=(o,e)=>{for(var t in e)Fs(o,t,{get:e[t],enumerable:!0})},ib=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Zg(e))!eb.call(o,n)&&n!==t&&Fs(o,n,{get:()=>e[n],enumerable:!(i=up(e,n))||i.enumerable});return o};var ja=(o,e,t)=>(t=o!=null?Jg($g(o)):{},ib(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?up(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)=>(tb(o,typeof e!="symbol"?e+"":e,t),t);var fl=Bs((Tf,Iu)=>{parcelRequire=function(o,e,t,i){var n,r=typeof parcelRequire=="function"&&parcelRequire,s=typeof Xc=="function"&&Xc;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 Tf=="object"&&typeof Iu<"u"?Iu.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 re=new p.MediaStream([k]);this._streams[j.id]=re,this._reverseStreams[re.id]=j,this.addStream(re)}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(re){var he=D(W,re);z[0].apply(null,[he])},function(re){z[1]&&z[1].apply(null,re)},arguments[2]]):j.apply(this,arguments).then(function(re){return D(W,re)})});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],re=k._streams[z.id];F=F.replace(new RegExp(z.id,"g"),re.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],re=k._streams[z.id];F=F.replace(new RegExp(re.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 Jg=Object.create;var Fs=Object.defineProperty;var dp=Object.getOwnPropertyDescriptor;var Zg=Object.getOwnPropertyNames;var $g=Object.getPrototypeOf,eb=Object.prototype.hasOwnProperty;var tb=(o,e,t)=>e in o?Fs(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Xc=(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),hp=(o,e)=>{for(var t in e)Fs(o,t,{get:e[t],enumerable:!0})},ib=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Zg(e))!eb.call(o,n)&&n!==t&&Fs(o,n,{get:()=>e[n],enumerable:!(i=dp(e,n))||i.enumerable});return o};var ja=(o,e,t)=>(t=o!=null?Jg($g(o)):{},ib(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?dp(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)=>(tb(o,typeof e!="symbol"?e+"":e,t),t);var fl=Bs((Rf,Iu)=>{parcelRequire=function(o,e,t,i){var n,r=typeof parcelRequire=="function"&&parcelRequire,s=typeof Xc=="function"&&Xc;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 Rf=="object"&&typeof Iu<"u"?Iu.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 re=new p.MediaStream([k]);this._streams[j.id]=re,this._reverseStreams[re.id]=j,this.addStream(re)}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(re){var he=D(W,re);z[0].apply(null,[he])},function(re){z[1]&&z[1].apply(null,re)},arguments[2]]):j.apply(this,arguments).then(function(re){return D(W,re)})});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],re=k._streams[z.id];F=F.replace(new RegExp(z.id,"g"),re.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],re=k._streams[z.id];F=F.replace(new RegExp(re.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 re=a(j,F);b._transceive(S,re.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],re=i.getDirection(D,C),he=i.parseMsid(D),tp=i.getMid(D)||i.generateIdentifier();if(W||F==="application"&&(z==="DTLS/SCTP"||z==="UDP/DTLS/SCTP"))f.transceivers[k]={mid:tp,kind:F,protocol:z,rejected:!0};else{var q,ip,js,Gc,cn,Vc,zc,Hs,un;!W&&f.transceivers[k]&&f.transceivers[k].rejected&&(f.transceivers[k]=f._createTransceiver(F,!0));var np,rp,op=i.parseRtpParameters(D);W||(np=i.getIceParameters(D,C),(rp=i.getDtlsParameters(D,C)).role="client"),zc=i.parseRtpEncodingParameters(D);var sp=i.parseRtcpParameters(D),ap=i.matchPrefix(D,"a=end-of-candidates",C).length>0,bo=i.matchPrefix(D,"a=candidate:").map(function(lt){return i.parseCandidate(lt)}).filter(function(lt){return lt.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&&(ip=(q=f.transceivers[k]).iceGatherer,js=q.iceTransport,Gc=q.dtlsTransport,cn=q.rtpReceiver,Vc=q.sendEncodingParameters,Hs=q.localCapabilities,f.transceivers[k].recvEncodingParameters=zc,f.transceivers[k].remoteCapabilities=op,f.transceivers[k].rtcpParameters=sp,bo.length&&js.state==="new"&&(!T&&!ap||S&&k!==0?bo.forEach(function(lt){u(q.iceTransport,lt)}):js.setRemoteCandidates(bo)),S&&k!==0||(js.state==="new"&&js.start(ip,np,"controlling"),Gc.state==="new"&&Gc.start(rp)),!a(q.localCapabilities,q.remoteCapabilities).codecs.filter(function(lt){return lt.name.toLowerCase()==="rtx"}).length&&q.sendEncodingParameters[0].rtx&&delete q.sendEncodingParameters[0].rtx,f._transceive(q,re==="sendrecv"||re==="recvonly",re==="sendrecv"||re==="sendonly"),!cn||re!=="sendrecv"&&re!=="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=tp,q.iceGatherer||(q.iceGatherer=f._createIceGatherer(k,S)),bo.length&&q.iceTransport.state==="new"&&(!ap||S&&k!==0?bo.forEach(function(lt){u(q.iceTransport,lt)}):q.iceTransport.setRemoteCandidates(bo)),Hs=d.RTCRtpReceiver.getCapabilities(F),h<15019&&(Hs.codecs=Hs.codecs.filter(function(lt){return lt.name!=="rtx"})),Vc=q.sendEncodingParameters||[{ssrc:1001*(2*k+2)}];var vo,Wc=!1;re==="sendrecv"||re==="sendonly"?(Wc=!q.rtpReceiver,cn=q.rtpReceiver||new d.RTCRtpReceiver(q.dtlsTransport,F),Wc&&(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(lt){var Nc,lp,cp=lt.getTracks().find(function(Kg){return Kg.id===q.rtpReceiver.track.id});cp&&(Nc=cp,(lp=lt).removeTrack(Nc),lp.dispatchEvent(new d.MediaStreamTrackEvent("removetrack",{track:Nc})))}),q.associatedRemoteMediaStreams=[]),q.localCapabilities=Hs,q.remoteCapabilities=op,q.rtpReceiver=cn,q.rtcpParameters=sp,q.sendEncodingParameters=Vc,q.recvEncodingParameters=zc,f._transceive(f.transceivers[k],!1,Wc)}}}),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 re=a(j,F);b._transceive(S,re.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],re=i.getDirection(D,C),he=i.parseMsid(D),ip=i.getMid(D)||i.generateIdentifier();if(W||F==="application"&&(z==="DTLS/SCTP"||z==="UDP/DTLS/SCTP"))f.transceivers[k]={mid:ip,kind:F,protocol:z,rejected:!0};else{var q,np,js,Gc,cn,Vc,zc,Hs,un;!W&&f.transceivers[k]&&f.transceivers[k].rejected&&(f.transceivers[k]=f._createTransceiver(F,!0));var rp,op,sp=i.parseRtpParameters(D);W||(rp=i.getIceParameters(D,C),(op=i.getDtlsParameters(D,C)).role="client"),zc=i.parseRtpEncodingParameters(D);var ap=i.parseRtcpParameters(D),lp=i.matchPrefix(D,"a=end-of-candidates",C).length>0,bo=i.matchPrefix(D,"a=candidate:").map(function(lt){return i.parseCandidate(lt)}).filter(function(lt){return lt.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&&(np=(q=f.transceivers[k]).iceGatherer,js=q.iceTransport,Gc=q.dtlsTransport,cn=q.rtpReceiver,Vc=q.sendEncodingParameters,Hs=q.localCapabilities,f.transceivers[k].recvEncodingParameters=zc,f.transceivers[k].remoteCapabilities=sp,f.transceivers[k].rtcpParameters=ap,bo.length&&js.state==="new"&&(!T&&!lp||S&&k!==0?bo.forEach(function(lt){u(q.iceTransport,lt)}):js.setRemoteCandidates(bo)),S&&k!==0||(js.state==="new"&&js.start(np,rp,"controlling"),Gc.state==="new"&&Gc.start(op)),!a(q.localCapabilities,q.remoteCapabilities).codecs.filter(function(lt){return lt.name.toLowerCase()==="rtx"}).length&&q.sendEncodingParameters[0].rtx&&delete q.sendEncodingParameters[0].rtx,f._transceive(q,re==="sendrecv"||re==="recvonly",re==="sendrecv"||re==="sendonly"),!cn||re!=="sendrecv"&&re!=="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=ip,q.iceGatherer||(q.iceGatherer=f._createIceGatherer(k,S)),bo.length&&q.iceTransport.state==="new"&&(!lp||S&&k!==0?bo.forEach(function(lt){u(q.iceTransport,lt)}):q.iceTransport.setRemoteCandidates(bo)),Hs=d.RTCRtpReceiver.getCapabilities(F),h<15019&&(Hs.codecs=Hs.codecs.filter(function(lt){return lt.name!=="rtx"})),Vc=q.sendEncodingParameters||[{ssrc:1001*(2*k+2)}];var vo,Wc=!1;re==="sendrecv"||re==="sendonly"?(Wc=!q.rtpReceiver,cn=q.rtpReceiver||new d.RTCRtpReceiver(q.dtlsTransport,F),Wc&&(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(lt){var Nc,cp,up=lt.getTracks().find(function(Kg){return Kg.id===q.rtpReceiver.track.id});up&&(Nc=up,(cp=lt).removeTrack(Nc),cp.dispatchEvent(new d.MediaStreamTrackEvent("removetrack",{track:Nc})))}),q.associatedRemoteMediaStreams=[]),q.localCapabilities=Hs,q.remoteCapabilities=sp,q.rtpReceiver=cn,q.rtcpParameters=ap,q.sendEncodingParameters=Vc,q.recvEncodingParameters=zc,f._transceive(f.transceivers[k],!1,Wc)}}}),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(re){w={error:re}}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 Sf=Bs((_T,Rf)=>{(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}};Rf.exports=e})()});var Hu=Bs((xT,Pf)=>{var ju={utf8:{stringToBytes:function(o){return ju.bin.stringToBytes(unescape(encodeURIComponent(o)))},bytesToString:function(o){return decodeURIComponent(escape(ju.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("")}}};Pf.exports=ju});var Mf=Bs((wT,kf)=>{kf.exports=function(o){return o!=null&&(Of(o)||Sv(o)||!!o._isBuffer)};function Of(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}function Sv(o){return typeof o.readFloatLE=="function"&&typeof o.slice=="function"&&Of(o.slice(0,0))}});var Af=Bs((ET,If)=>{(function(){var o=Sf(),e=Hu().utf8,t=Mf(),i=Hu().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,If.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 Kc=()=>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]}},Jc=!1,qc=[];setTimeout(()=>{Jc&&console.log(qc)},100);function Zc(){return new URLSearchParams(window.location.search)}function P(o){Jc&&!qc.includes(o)&&qc.push(o);let e=Zc();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}Jc=P("help")===!0;function yo(o,e,t){o.has(e)?o.set(e,t.toString()):o.append(e,t.toString())}function fp(o,e){window.history.replaceState(null,o,"?"+e.toString())}function mp(o,e){return Math.floor(Math.random()*(e-o+1))+o}var hp=["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"],pp=["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 gp(){let o=hp[Math.floor(Math.random()*hp.length)],e=pp[Math.floor(Math.random()*pp.length)];return o+"_"+e}function bp(o){return o=o.replace(/[^a-z0-9áéíóúñü \.,_-]/gim,""),o.trim()}function Wn(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=Wn(o,r,t,i);if(s)return s}if(e.children)for(let n in e.children){let r=e.children[n],s=Wn(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 _o(o){return new Promise((e,t)=>{setTimeout(e,o)})}var Qc=P("debugsourcepath");function Ii(o,e){if(o===void 0)return Qc&&console.warn("getPath: source is undefined, returning uri",e),e;if(e.startsWith("http"))return Qc&&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,Qc&&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(re){w={error:re}}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 Pf=Bs((_T,Sf)=>{(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}};Sf.exports=e})()});var Hu=Bs((xT,Of)=>{var ju={utf8:{stringToBytes:function(o){return ju.bin.stringToBytes(unescape(encodeURIComponent(o)))},bytesToString:function(o){return decodeURIComponent(escape(ju.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("")}}};Of.exports=ju});var If=Bs((wT,Mf)=>{Mf.exports=function(o){return o!=null&&(kf(o)||Sv(o)||!!o._isBuffer)};function kf(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}function Sv(o){return typeof o.readFloatLE=="function"&&typeof o.slice=="function"&&kf(o.slice(0,0))}});var Df=Bs((ET,Af)=>{(function(){var o=Pf(),e=Hu().utf8,t=If(),i=Hu().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,Af.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 Kc=()=>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]}},Jc=!1,qc=[];setTimeout(()=>{Jc&&console.log(qc)},100);function Zc(){return new URLSearchParams(window.location.search)}function P(o){Jc&&!qc.includes(o)&&qc.push(o);let e=Zc();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}Jc=P("help")===!0;function yo(o,e,t){o.has(e)?o.set(e,t.toString()):o.append(e,t.toString())}function mp(o,e){window.history.replaceState(null,o,"?"+e.toString())}function gp(o,e){return Math.floor(Math.random()*(e-o+1))+o}var pp=["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"],fp=["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 bp(){let o=pp[Math.floor(Math.random()*pp.length)],e=fp[Math.floor(Math.random()*fp.length)];return o+"_"+e}function vp(o){return o=o.replace(/[^a-z0-9áéíóúñü \.,_-]/gim,""),o.trim()}function Wn(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=Wn(o,r,t,i);if(s)return s}if(e.children)for(let n in e.children){let r=e.children[n],s=Wn(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 _o(o){return new Promise((e,t)=>{setTimeout(e,o)})}var Qc=P("debugsourcepath");function Ii(o,e){if(o===void 0)return Qc&&console.warn("getPath: source is undefined, returning uri",e),e;if(e.startsWith("http"))return Qc&&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,Qc&&console.log("getPath:",o,` - changed uri from
79
79
  `,e,`
80
- \u2192 `,i),i}return e}var Yc=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}},dn=class{_watches=[];constructor(e,t){if(Array.isArray(t))for(let i of t)this._watches.push(new dn(e,i));else this._watches.push(new Yc(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 Ha(){return/WebXRViewer\//i.test(navigator.userAgent)}var nb=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"];function wo(){return nb.includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}function Fa(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ct(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 vp(){return window.location.hostname.includes("glitch.me")}import{DepthTexture as cy,WebGLRenderer as uy}from"three";import*as Se from"three";import*as ni from"three";var hn=null,Nn=null,Ai=null,$c=!1,iu=!1,yp=null,xp="\u{1F4DC}",eu=P("console"),rb=P("noerrors");eu&&nu();if(!rb&&(eu||ct())){ct()&&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&&(wp(),Ep(!0),o)){let e=document.querySelector("needle-engine");e?.addEventListener("enter-ar",()=>{if(eu||hn||ru()>0){if(P("noerrors"))return;let t=e.getAROverlayContainer?.call(e),i=Cp();i&&t&&t.appendChild(i)}}),e?.addEventListener("exit-ar",()=>{cb()})}}var tu=Symbol("consoleParent");function nu(){if(hn!==null){iu=!0,hn.showSwitch();return}Ep()}function ob(){hn!==null&&(iu=!1,hn.hide(),hn.hideSwitch())}function wp(){yp||(yp=setInterval(sb,500))}var _p=0;function sb(){let o=ru(),e=o!==_p;_p=o,e&&ab()}function ab(){nu(),Ai&&(Ai.setAttribute("error","true"),Ai.innerText="\u{1F92C}")}function lb(){Ai&&(Ai.removeAttribute("error"),Ai.innerText=xp)}function cb(){Nn&&Nn[tu]&&Nn[tu].appendChild(Nn)}function Ep(o=!1){if(hn||$c)return;$c=!0;let e=document.createElement("script");e.src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js",e.onload=()=>{if($c=!1,iu=!0,wp(),hn=new window.VConsole,Nn=Cp(),Nn&&(Nn[tu]=Nn.parentElement),hn.setSwitchPosition(20,10),Ai=ub(),Ai){Ai.innerText=xp,Ai.addEventListener("click",lb);let t=document.createElement("style"),i=40;t.innerHTML=`
80
+ \u2192 `,i),i}return e}var Yc=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}},dn=class{_watches=[];constructor(e,t){if(Array.isArray(t))for(let i of t)this._watches.push(new dn(e,i));else this._watches.push(new Yc(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 Ha(){return/WebXRViewer\//i.test(navigator.userAgent)}var nb=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"];function wo(){return nb.includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}function Fa(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ct(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 yp(){return window.location.hostname.includes("glitch.me")}import{DepthTexture as cy,WebGLRenderer as uy}from"three";import*as Se from"three";import*as ni from"three";var hn=null,Nn=null,Ai=null,$c=!1,iu=!1,_p=null,wp="\u{1F4DC}",eu=P("console"),rb=P("noerrors");eu&&nu();if(!rb&&(eu||ct())){ct()&&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&&(Ep(),Cp(!0),o)){let e=document.querySelector("needle-engine");e?.addEventListener("enter-ar",()=>{if(eu||hn||ru()>0){if(P("noerrors"))return;let t=e.getAROverlayContainer?.call(e),i=Tp();i&&t&&t.appendChild(i)}}),e?.addEventListener("exit-ar",()=>{cb()})}}var tu=Symbol("consoleParent");function nu(){if(hn!==null){iu=!0,hn.showSwitch();return}Cp()}function ob(){hn!==null&&(iu=!1,hn.hide(),hn.hideSwitch())}function Ep(){_p||(_p=setInterval(sb,500))}var xp=0;function sb(){let o=ru(),e=o!==xp;xp=o,e&&ab()}function ab(){nu(),Ai&&(Ai.setAttribute("error","true"),Ai.innerText="\u{1F92C}")}function lb(){Ai&&(Ai.removeAttribute("error"),Ai.innerText=wp)}function cb(){Nn&&Nn[tu]&&Nn[tu].appendChild(Nn)}function Cp(o=!1){if(hn||$c)return;$c=!0;let e=document.createElement("script");e.src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js",e.onload=()=>{if($c=!1,iu=!0,Ep(),hn=new window.VConsole,Nn=Tp(),Nn&&(Nn[tu]=Nn.parentElement),hn.setSwitchPosition(20,10),Ai=ub(),Ai){Ai.innerText=wp,Ai.addEventListener("click",lb);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&&ob()}},document.body.appendChild(e)}function ub(){let o=document.querySelector("#__vconsole .vc-switch");return o||null}function Cp(){let o=document.querySelector("#__vconsole");return o||null}function Fe(o,e=0){Vs(e,o)}function Xn(o){Fe(o,1)}function Ba(){return ct()}var Di=P("gizmos"),pe=P("debugextension");var Ga=P("debugresolvedependencies"),db=["/extensions/","extensions/"],hb=[{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){Ga&&console.log(o,e);let t=[];ou(hb,o,e,t);let i=await Promise.all(t);return typeof e=="string"&&i.length===1?i[0]:i}function ou(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=Tp(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=su(a.prefix,r);if(c>=0){Ga&&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=Tp(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=su(u.prefix,a);if(l>=0){Ga&&console.log(u,l,u.dependencyName),i.push(e?.getDependency(u.dependencyName,l).then(d=>r[s]=d));break}}typeof a=="object"&&ou(o,e,a,i)}else typeof r=="object"&&ou(o,e,r,i)}else typeof t=="string"&&pb(o,e,t,i)}function Tp(o,e){if(o&&o.plugins&&typeof e=="string"){for(let t of db)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 pb(o,e,t,i){for(let n of o){let r=su(n.prefix,t);if(r>=0)return Ga&&console.log(n,r,n.dependencyName),i.push(e?.getDependency(n.dependencyName,r).then(s=>s)),!0}return!1}function su(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 au=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]}},Rp=Symbol("BuiltInType"),O=new au;var lu="NEEDLE_persistent_assets";function Sp(o){return o?.___persistentAsset===!0}var Va=class{get name(){return lu}parser;constructor(e){this.parser=e}async afterRoot(e){if(!this.parser?.json?.extensions)return;let t=this.parser.json.extensions[lu];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[lu];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 Or=P("debugserializer"),cu=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])}Or&&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){Or&&console.log("invalid type");return}let i=e.name??e.constructor?.name;if(!i){Or&&console.log("invalid name",i);return}let n=this.getSerializer(i);if(n!==void 0)return Or&&console.log("FOUND "+i,e.name,e.constructor.name,n,this.typeMap),n;let r=Object.getPrototypeOf(e);if(!(r.prototype||r.constructor)){Or&&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){Or&&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}}},Wa=new cu,Li=class{constructor(e){if(Array.isArray(e))for(let t of e)Wa.register(t.name,this);else Wa.register(e.name,this)}},Na=class{isDevMode=ct();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 du(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=Wa.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 za=[];function Op(o,e){if(!o)return e;typeof o.$serializedTypes=="object"&&(e||(e={}),Object.assign(e,o.$serializedTypes));let t=Object.getPrototypeOf(o);return Op(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=Op(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?uu(a,d,t,void 0,o[r]):uu(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);za.length=0,o.onAfterDeserializeMember!==void 0&&o.onAfterDeserializeMember(r,a,t)}}gb(o,e)}return mb(o,e,t.implementationInformation),o.onAfterDeserialize!==void 0&&o.onAfterDeserialize(e,t),t.path=void 0,!0}var fb=P("noerrors");function mb(o,e,t){if(fb||!e||ct()===!1||!o||o.constructor&&o.constructor[Rp]===!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&&ob()}},document.body.appendChild(e)}function ub(){let o=document.querySelector("#__vconsole .vc-switch");return o||null}function Tp(){let o=document.querySelector("#__vconsole");return o||null}function Fe(o,e=0){Vs(e,o)}function Xn(o){Fe(o,1)}function Ba(){return ct()}var Di=P("gizmos"),pe=P("debugextension");var Ga=P("debugresolvedependencies"),db=["/extensions/","extensions/"],hb=[{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){Ga&&console.log(o,e);let t=[];ou(hb,o,e,t);let i=await Promise.all(t);return typeof e=="string"&&i.length===1?i[0]:i}function ou(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=Rp(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=su(a.prefix,r);if(c>=0){Ga&&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=Rp(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=su(u.prefix,a);if(l>=0){Ga&&console.log(u,l,u.dependencyName),i.push(e?.getDependency(u.dependencyName,l).then(d=>r[s]=d));break}}typeof a=="object"&&ou(o,e,a,i)}else typeof r=="object"&&ou(o,e,r,i)}else typeof t=="string"&&pb(o,e,t,i)}function Rp(o,e){if(o&&o.plugins&&typeof e=="string"){for(let t of db)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 pb(o,e,t,i){for(let n of o){let r=su(n.prefix,t);if(r>=0)return Ga&&console.log(n,r,n.dependencyName),i.push(e?.getDependency(n.dependencyName,r).then(s=>s)),!0}return!1}function su(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 au=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]}},Sp=Symbol("BuiltInType"),O=new au;var lu="NEEDLE_persistent_assets";function Pp(o){return o?.___persistentAsset===!0}var Va=class{get name(){return lu}parser;constructor(e){this.parser=e}async afterRoot(e){if(!this.parser?.json?.extensions)return;let t=this.parser.json.extensions[lu];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[lu];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 Or=P("debugserializer"),cu=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])}Or&&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){Or&&console.log("invalid type");return}let i=e.name??e.constructor?.name;if(!i){Or&&console.log("invalid name",i);return}let n=this.getSerializer(i);if(n!==void 0)return Or&&console.log("FOUND "+i,e.name,e.constructor.name,n,this.typeMap),n;let r=Object.getPrototypeOf(e);if(!(r.prototype||r.constructor)){Or&&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){Or&&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}}},Wa=new cu,Li=class{constructor(e){if(Array.isArray(e))for(let t of e)Wa.register(t.name,this);else Wa.register(e.name,this)}},Na=class{isDevMode=ct();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 du(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=Wa.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 za=[];function kp(o,e){if(!o)return e;typeof o.$serializedTypes=="object"&&(e||(e={}),Object.assign(e,o.$serializedTypes));let t=Object.getPrototypeOf(o);return kp(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=kp(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?uu(a,d,t,void 0,o[r]):uu(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);za.length=0,o.onAfterDeserializeMember!==void 0&&o.onAfterDeserializeMember(r,a,t)}}gb(o,e)}return mb(o,e,t.implementationInformation),o.onAfterDeserialize!==void 0&&o.onAfterDeserialize(e,t),t.path=void 0,!0}var fb=P("noerrors");function mb(o,e,t){if(fb||!e||ct()===!1||!o||o.constructor&&o.constructor[Sp]===!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>
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 gb(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){Or&&console.log(t,"is undefined on",o);continue}for(let r of Object.keys(i))n[r]===void 0&&Pp(i[r])&&!Pp(n)&&(n[r]=i[r])}}}function Pp(o){switch(typeof o){case"number":case"string":case"boolean":return!0}return!1}function uu(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"&&Sp(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:Wa.getSerializerForConstructor(s)}),Array.isArray(o)){let l=[];for(let d=0;d<o.length;d++){let h=o[d],g=uu(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(...bb(o))}let u=c;return u.$serializedTypes&&zs(u,o,t),c}function bb(o){if(za.length=0,typeof o=="object"&&o!==null&&o!==void 0)for(let e of Object.keys(o))za.push(o[e]);return za}var Xa=Symbol("assigned component properties");function jt(o,e,t){if(e==null||o==null)return;let i=!1;o[Xa]=!0;let n=o.constructor?.name??"unknown";t?.registerDefinedKeys(n,o);for(let r of Object.keys(e)){let s=vb(o,r);i&&s===void 0||(!s||s.writable===!0||s?.set!==void 0)&&(o[r]=e[r])}delete o[Xa]}function vb(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 Qa=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&&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 av,BufferAttribute as yf,BufferGeometry as lv,Layers as Ou,LineBasicMaterial as cv,LineSegments as uv,Matrix4 as dv,Quaternion as hv,Raycaster as pv,Sphere as fv,Vector2 as mv,Vector3 as Tu}from"three";import*as fe from"three";var hu=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 hu;import{WebGLRenderer as yb,Vector3 as _b,Quaternion as xb,Uniform as kp,Texture as wb,ShaderMaterial as Mp}from"three";function Dp(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 Eb=new xb().setFromAxisAngle(new _b(0,1,0),Math.PI);function Lp(o,e){o.lookAt(e),o.quaternion.multiply(Eb)}var fu=new Mi(()=>new fe.Vector3,100);function B(o,e=null,t=!0){let i=e??fu.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 ie(o,e){if(!o)return;let t=fu.get();e!==t&&t.copy(e),(o?.parent??o).worldToLocal(t),o.position.set(t.x,t.y,t.z)}function pn(o,e,t,i){let n=fu.get();n.set(e,t,i),ie(o,n)}var kr=new fe.Quaternion,Ns=new fe.Quaternion,pu=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 et(o,e){if(!o)return;e!==kr&&kr.copy(e);let t=kr;o?.parent?.getWorldQuaternion(pu),pu.invert();let n=pu.multiply(t);o.quaternion.set(n.x,n.y,n.z,n.w)}function jp(o,e,t,i,n){kr.set(e,t,i,n),et(o,kr)}var qa=new fe.Vector3,NE=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 XE=new fe.Vector3,QE=new fe.Quaternion;var Ip=new fe.Euler,Ap=new fe.Euler,Cb=new fe.Vector3;function Tb(o){return o.getWorldQuaternion(Ns),Ap.setFromQuaternion(Ns),Ap}function Hp(o,e){et(o,Ns.setFromEuler(e))}function Ya(o){let e=Tb(o),t=Cb;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 Ka(o,e,t,i,n=!0){n&&(e=H.toRadians(e),t=H.toRadians(t),i=H.toRadians(i)),Ip.set(e,t,i),kr.setFromEuler(Ip),et(o,kr)}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 Fp(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 Mp({uniforms:{map:new kp(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 wb(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=Rb(e));let i=e.image;if(Sb(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 yb({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 gb(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){Or&&console.log(t,"is undefined on",o);continue}for(let r of Object.keys(i))n[r]===void 0&&Op(i[r])&&!Op(n)&&(n[r]=i[r])}}}function Op(o){switch(typeof o){case"number":case"string":case"boolean":return!0}return!1}function uu(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"&&Pp(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:Wa.getSerializerForConstructor(s)}),Array.isArray(o)){let l=[];for(let d=0;d<o.length;d++){let h=o[d],g=uu(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(...bb(o))}let u=c;return u.$serializedTypes&&zs(u,o,t),c}function bb(o){if(za.length=0,typeof o=="object"&&o!==null&&o!==void 0)for(let e of Object.keys(o))za.push(o[e]);return za}var Xa=Symbol("assigned component properties");function jt(o,e,t){if(e==null||o==null)return;let i=!1;o[Xa]=!0;let n=o.constructor?.name??"unknown";t?.registerDefinedKeys(n,o);for(let r of Object.keys(e)){let s=vb(o,r);i&&s===void 0||(!s||s.writable===!0||s?.set!==void 0)&&(o[r]=e[r])}delete o[Xa]}function vb(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 Qa=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&&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 av,BufferAttribute as _f,BufferGeometry as lv,Layers as Ou,LineBasicMaterial as cv,LineSegments as uv,Matrix4 as dv,Quaternion as hv,Raycaster as pv,Sphere as fv,Vector2 as mv,Vector3 as Tu}from"three";import*as fe from"three";var hu=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 hu;import{WebGLRenderer as yb,Vector3 as _b,Quaternion as xb,Uniform as Mp,Texture as wb,ShaderMaterial as Ip}from"three";function Lp(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 Eb=new xb().setFromAxisAngle(new _b(0,1,0),Math.PI);function jp(o,e){o.lookAt(e),o.quaternion.multiply(Eb)}var fu=new Mi(()=>new fe.Vector3,100);function B(o,e=null,t=!0){let i=e??fu.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 ie(o,e){if(!o)return;let t=fu.get();e!==t&&t.copy(e),(o?.parent??o).worldToLocal(t),o.position.set(t.x,t.y,t.z)}function pn(o,e,t,i){let n=fu.get();n.set(e,t,i),ie(o,n)}var kr=new fe.Quaternion,Ns=new fe.Quaternion,pu=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 et(o,e){if(!o)return;e!==kr&&kr.copy(e);let t=kr;o?.parent?.getWorldQuaternion(pu),pu.invert();let n=pu.multiply(t);o.quaternion.set(n.x,n.y,n.z,n.w)}function Hp(o,e,t,i,n){kr.set(e,t,i,n),et(o,kr)}var qa=new fe.Vector3,NE=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 XE=new fe.Vector3,QE=new fe.Quaternion;var Ap=new fe.Euler,Dp=new fe.Euler,Cb=new fe.Vector3;function Tb(o){return o.getWorldQuaternion(Ns),Dp.setFromQuaternion(Ns),Dp}function Fp(o,e){et(o,Ns.setFromEuler(e))}function Ya(o){let e=Tb(o),t=Cb;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 Ka(o,e,t,i,n=!0){n&&(e=H.toRadians(e),t=H.toRadians(t),i=H.toRadians(i)),Ap.set(e,t,i),kr.setFromEuler(Ap),et(o,kr)}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 Bp(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 Ip({uniforms:{map:new Mp(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 wb(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=Rb(e));let i=e.image;if(Sb(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 yb({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 Mp({uniforms:{map:new kp(null)},vertexShader:To.vertex,fragmentShader:To.fragment})),I(ri,"mesh",new fe.Mesh(To.planeGeometry,To.blipMaterial));function Rb(o){return ri.copyTexture(o)}function Sb(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 Pb}from"three";var nC=Symbol("object"),Bp=new Mi(()=>new Pb,20),Ja=class{_point;_normal;distance;impulse;friction;get point(){return Bp.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Bp.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 Ir(o,e){try{e?o(e):o()}catch(t){return console.error(t),!1}return!0}var ji="__isActiveInHierarchy",Ar="builtin_components";var Mb=P("debugnewscripts"),ge=[];function bn(o){if(!(o.new_scripts.length<=0)){if(Mb&&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,Dr(t.gameObject),gu(t,o)}catch(t){console.error(t),mn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed){mn(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),Dr(t.gameObject),t.activeAndEnabled&&Ir(t.__internalAwake.bind(t)))}catch(t){console.error(t),mn(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||(Dr(t.gameObject),t.activeAndEnabled===!1))continue;t.__internalEnable!==void 0&&(t.enabled=!0,Ir(t.__internalEnable.bind(t)))}catch(t){console.error(t),mn(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),mn(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 Up(o){!o||(o.__internalDisable(),mn(o,o.context))}function Za(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;Ir(i.__internalAwake.bind(i)),Ir(i.__internalEnable.bind(i)),Ir(i.__internalStart.bind(i)),o.new_script_start.splice(t,1),t--}catch(i){console.error(i),mn(o.new_script_start[t],o),o.new_script_start.splice(t,1),t--}}function gu(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 mn(o,e){fn(o,e.new_scripts),fn(o,e.new_script_start),fn(o,e.scripts),fn(o,e.scripts_earlyUpdate),fn(o,e.scripts_update),fn(o,e.scripts_lateUpdate),fn(o,e.scripts_onBeforeRender),fn(o,e.scripts_onAfterRender),fn(o,e.scripts_pausedChanged),e.stopAllCoroutinesFrom(o)}function fn(o,e){let t=e.indexOf(o);t>=0&&e.splice(t,1)}var Ib={},mu={};function Ro(o){if(o||(o=G.Current.scene),!o){console.trace("Invalid call - no current context.");return}Gp(o,gn(o),!0)}function Gp(o,e,t){let i=!1,n=gn(o);if(Ib[o.uuid]=n,e&&(e=gn(o)),o[ji]=e,!i){let r=mu[o.uuid];r!==void 0&&r!==e&&t&&Ab(o,s=>{e?(Ir(s.__internalAwake.bind(s)),s.enabled=!0):s.enabled=!1})}if(mu[o.uuid]=e,o.children)for(let r of o.children)Gp(r,e,t)}function Dr(o){let e=!0,t=o,i=!1;for(;t&&t;){if(t.type==="Scene"&&(i=!0),!gn(t)){e=!1;break}t=t.parent}if(!o){console.error("GO is null");return}mu[o.uuid]=e,o[ji]=e&&i}function Ab(o,e){if(o.userData?.components)for(let t of o.userData.components)e(t)}import*as qs from"three";var zp=/^(?:[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 Db(o){return typeof o=="string"&&zp.test(o)}var Wp=Db;var Be=[];for(let o=0;o<256;++o)Be.push((o+256).toString(16).slice(1));function Np(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 Lb(o){if(!Wp(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 Xp=Lb;function jb(o){o=unescape(encodeURIComponent(o));let e=[];for(let t=0;t<o.length;++t)e.push(o.charCodeAt(t));return e}var Hb="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Fb="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function bu(o,e,t){function i(n,r,s,a){var c;if(typeof n=="string"&&(n=jb(n)),typeof r=="string"&&(r=Xp(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 Np(u)}try{i.name=o}catch{}return i.DNS=Hb,i.URL=Fb,i}function Bb(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 vu(o,e){return o<<e|o>>>32-e}function Ub(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]=vu(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),_=vu(c,5)+Bb(E,u,l,d)+h+e[E]+a[g]>>>0;h=d,d=l,l=vu(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 Qp=Ub;var Gb=bu("v5",80,Qp),$a=Gb;var el=P("debugcomponents"),qp="eff8ba80-635d-11ec-90d6-0242ac120003",Re=class{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(e){typeof e=="string"&&(e=Re.hash(e)),this._originalSeed=e,this._seed=e}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e=="string")return $a(e,qp);let t=this._seed;return this._seed-=1,$a(t.toString(),qp)}initialize(e){typeof e=="string"?this._seed=Re.hash(e):this._seed=e}static createFromString(e){return new Re(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 tl=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 tl(n);e.send("instance-destroyed",r,2)}function Yp(o,e){let t=new tl(o);e.send("instance-destroyed",t,2)}function Kp(o){o.connection.beginListen("instance-destroyed",e=>{el&&console.log("[Remote] Destroyed",o.scene,e);let t=Lr(e.guid,o.scene);t&&oi(t)})}var yu=class{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;constructor(e,t){this.originalGuid=e,this.guid=t}};function il(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}=Vb(n,e);if(s){let c=s;if(c.guid){el&&console.log("[Local] new instance","gameobject:",s?.guid);let u=new yu(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 nl(){return Math.random()*9999999}function Jp(o){o.connection.beginListen("new-instance-created",async e=>{let t=await zb(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 Re(e.seed)),i.visible=e.visible,i.context=o,el&&o.alias&&console.log("[Remote] instantiate in: "+o.alias);let n=jr(t,i);n&&(e.parent==="scene"&&o.scene.add(n),el&&console.log("[Remote] new instance","gameobject:",n?.guid,t))})}function Vb(o,e){let t=nl(),i=e??new Ue;i.idProvider=new Re(t);let n=jr(o,i);return{seed:t,instance:n}}var Zp={};function $p(o,e){Zp[o]=e}async function zb(o,e){let t=Zp[o];if(t!=null){let i=await t(o);if(i)return i}return ef(o,e)}function ef(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=ef(o,t);if(i)return i}return null}var tf=new Map;function nf(o,e){if(!o)return;if(!e){console.warn("No prototype found",o,o.prototype,o.constructor);return}let t=tf.get(e);t&&t.apply(o)}function rf(o){let e=Wb(o.prototype);tf.set(o,e)}function Wb(o){return new xu(o)}var xu=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 ut}from"three";var wu=P("debuggetcomponent");function Nb(o){return o==null||o.isObject3D?o:o.object&&o.object.isObject3D?o.object:o}function rl(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 ol(o,e){let t=Hr(o,e);if(t)return t;let i=new e;return si(o,i)}function si(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),sl(e);try{e.__internalAwake&&t&&(Dr(o),e.__internalAwake())}catch(i){console.error(i)}return e}function sf(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 af(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(),mn(o,o.context??G.Current),o.__internalDestroy(),o.gameObject=null}var of=!1;function lf(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"&&(of||(of=!0,console.warn(`Accessing components by name is not supported.
146
+ }`),I(ri,"blipMaterial",new Ip({uniforms:{map:new Mp(null)},vertexShader:To.vertex,fragmentShader:To.fragment})),I(ri,"mesh",new fe.Mesh(To.planeGeometry,To.blipMaterial));function Rb(o){return ri.copyTexture(o)}function Sb(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 Pb}from"three";var nC=Symbol("object"),Up=new Mi(()=>new Pb,20),Ja=class{_point;_normal;distance;impulse;friction;get point(){return Up.get().set(this._point.x,this._point.y,this._point.z)}get normal(){return Up.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 Ir(o,e){try{e?o(e):o()}catch(t){return console.error(t),!1}return!0}var ji="__isActiveInHierarchy",Ar="builtin_components";var Mb=P("debugnewscripts"),ge=[];function bn(o){if(!(o.new_scripts.length<=0)){if(Mb&&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,Dr(t.gameObject),gu(t,o)}catch(t){console.error(t),mn(ge[e],o),ge.splice(e,1),e--}for(let e=0;e<ge.length;e++)try{let t=ge[e];if(t.destroyed){mn(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),Dr(t.gameObject),t.activeAndEnabled&&Ir(t.__internalAwake.bind(t)))}catch(t){console.error(t),mn(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||(Dr(t.gameObject),t.activeAndEnabled===!1))continue;t.__internalEnable!==void 0&&(t.enabled=!0,Ir(t.__internalEnable.bind(t)))}catch(t){console.error(t),mn(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),mn(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 Gp(o){!o||(o.__internalDisable(),mn(o,o.context))}function Za(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;Ir(i.__internalAwake.bind(i)),Ir(i.__internalEnable.bind(i)),Ir(i.__internalStart.bind(i)),o.new_script_start.splice(t,1),t--}catch(i){console.error(i),mn(o.new_script_start[t],o),o.new_script_start.splice(t,1),t--}}function gu(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 mn(o,e){fn(o,e.new_scripts),fn(o,e.new_script_start),fn(o,e.scripts),fn(o,e.scripts_earlyUpdate),fn(o,e.scripts_update),fn(o,e.scripts_lateUpdate),fn(o,e.scripts_onBeforeRender),fn(o,e.scripts_onAfterRender),fn(o,e.scripts_pausedChanged),e.stopAllCoroutinesFrom(o)}function fn(o,e){let t=e.indexOf(o);t>=0&&e.splice(t,1)}var Ib={},mu={};function Ro(o){if(o||(o=G.Current.scene),!o){console.trace("Invalid call - no current context.");return}Vp(o,gn(o),!0)}function Vp(o,e,t){let i=!1,n=gn(o);if(Ib[o.uuid]=n,e&&(e=gn(o)),o[ji]=e,!i){let r=mu[o.uuid];r!==void 0&&r!==e&&t&&Ab(o,s=>{e?(Ir(s.__internalAwake.bind(s)),s.enabled=!0):s.enabled=!1})}if(mu[o.uuid]=e,o.children)for(let r of o.children)Vp(r,e,t)}function Dr(o){let e=!0,t=o,i=!1;for(;t&&t;){if(t.type==="Scene"&&(i=!0),!gn(t)){e=!1;break}t=t.parent}if(!o){console.error("GO is null");return}mu[o.uuid]=e,o[ji]=e&&i}function Ab(o,e){if(o.userData?.components)for(let t of o.userData.components)e(t)}import*as qs from"three";var Wp=/^(?:[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 Db(o){return typeof o=="string"&&Wp.test(o)}var Np=Db;var Be=[];for(let o=0;o<256;++o)Be.push((o+256).toString(16).slice(1));function Xp(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 Lb(o){if(!Np(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 Qp=Lb;function jb(o){o=unescape(encodeURIComponent(o));let e=[];for(let t=0;t<o.length;++t)e.push(o.charCodeAt(t));return e}var Hb="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Fb="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function bu(o,e,t){function i(n,r,s,a){var c;if(typeof n=="string"&&(n=jb(n)),typeof r=="string"&&(r=Qp(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 Xp(u)}try{i.name=o}catch{}return i.DNS=Hb,i.URL=Fb,i}function Bb(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 vu(o,e){return o<<e|o>>>32-e}function Ub(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]=vu(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),_=vu(c,5)+Bb(E,u,l,d)+h+e[E]+a[g]>>>0;h=d,d=l,l=vu(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 qp=Ub;var Gb=bu("v5",80,qp),$a=Gb;var el=P("debugcomponents"),Yp="eff8ba80-635d-11ec-90d6-0242ac120003",Re=class{get seed(){return this._seed}set seed(e){this._seed=e}_originalSeed;_seed;constructor(e){typeof e=="string"&&(e=Re.hash(e)),this._originalSeed=e,this._seed=e}reset(){this._seed=this._originalSeed}generateUUID(e){if(typeof e=="string")return $a(e,Yp);let t=this._seed;return this._seed-=1,$a(t.toString(),Yp)}initialize(e){typeof e=="string"?this._seed=Re.hash(e):this._seed=e}static createFromString(e){return new Re(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 tl=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 tl(n);e.send("instance-destroyed",r,2)}function Kp(o,e){let t=new tl(o);e.send("instance-destroyed",t,2)}function Jp(o){o.connection.beginListen("instance-destroyed",e=>{el&&console.log("[Remote] Destroyed",o.scene,e);let t=Lr(e.guid,o.scene);t&&oi(t)})}var yu=class{guid;originalGuid;seed;visible;hostData;dontSave;parent;position;rotation;scale;constructor(e,t){this.originalGuid=e,this.guid=t}};function il(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}=Vb(n,e);if(s){let c=s;if(c.guid){el&&console.log("[Local] new instance","gameobject:",s?.guid);let u=new yu(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 nl(){return Math.random()*9999999}function Zp(o){o.connection.beginListen("new-instance-created",async e=>{let t=await zb(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 Re(e.seed)),i.visible=e.visible,i.context=o,el&&o.alias&&console.log("[Remote] instantiate in: "+o.alias);let n=jr(t,i);n&&(e.parent==="scene"&&o.scene.add(n),el&&console.log("[Remote] new instance","gameobject:",n?.guid,t))})}function Vb(o,e){let t=nl(),i=e??new Ue;i.idProvider=new Re(t);let n=jr(o,i);return{seed:t,instance:n}}var $p={};function ef(o,e){$p[o]=e}async function zb(o,e){let t=$p[o];if(t!=null){let i=await t(o);if(i)return i}return tf(o,e)}function tf(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=tf(o,t);if(i)return i}return null}var nf=new Map;function rf(o,e){if(!o)return;if(!e){console.warn("No prototype found",o,o.prototype,o.constructor);return}let t=nf.get(e);t&&t.apply(o)}function of(o){let e=Wb(o.prototype);nf.set(o,e)}function Wb(o){return new xu(o)}var xu=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 ut}from"three";var wu=P("debuggetcomponent");function Nb(o){return o==null||o.isObject3D?o:o.object&&o.object.isObject3D?o.object:o}function rl(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 ol(o,e){let t=Hr(o,e);if(t)return t;let i=new e;return si(o,i)}function si(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),sl(e);try{e.__internalAwake&&t&&(Dr(o),e.__internalAwake())}catch(i){console.error(i)}return e}function af(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 lf(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(),mn(o,o.context??G.Current),o.__internalDestroy(),o.gameObject=null}var sf=!1;function cf(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"&&(sf||(sf=!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))),wu&&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(wu&&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(wu&&console.log("MATCH BY PROTOYPE",r),t)t.push(n);else return n;r=Object.getPrototypeOf(r)}while(r)}return t}}}function Hr(o,e){return lf(o,e)}function Oo(o,e,t){return t||(t=[]),lf(o,e,t)}function Fr(o,e,t){let i=Hr(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=Fr(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=Nb(o[i]),r=Po(n,e);if(r)return r}return null}let t=Hr(o,e);return t||(o.parent?Po(o.parent,e):null)}function Ys(o,e,t){return t||(t=[]),o?(Oo(o,e,t),o.parent?Ys(o.parent,e,t):t):t}function cf(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=Fr(r,o);if(s)return s}return null}function uf(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&&nf(o,ut)}ut.prototype.SetActive=function(o){this.visible=o};ut.prototype.addNewComponent=function(o){return si(this,new o)};ut.prototype.removeComponent=function(o){return rl(this,o)};ut.prototype.getOrAddComponent=function(o){return ol(this,o)};ut.prototype.getComponent=function(o){return Hr(this,o)};ut.prototype.getComponents=function(o,e){return Oo(this,o,e)};ut.prototype.getComponentInChildren=function(o){return Fr(this,o)};ut.prototype.getComponentsInChildren=function(o,e){return ko(this,o,e)};ut.prototype.getComponentInParent=function(o){return Po(this,o)};ut.prototype.getComponentsInParent=function(o,e){return Ys(this,o,e)};Object.getOwnPropertyDescriptor(ut.prototype,"activeSelf")||Object.defineProperty(ut.prototype,"activeSelf",{get:function(){return gn(this)},set:function(o){Io(this,o,!0)}});rf(ut);var al=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),oe=class{static isUsingInstancing(e){return e.__isUsingInstancing===!0}static markDirty(e,t=!0){if(!!e&&(this.isUsingInstancing(e)&&(e[al]=!0,e.matrixWorldNeedsUpdate=!0),t))for(let i of e.children)oe.markDirty(i,!0)}};var Br=P("debuggetcomponent"),Xb=(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))(Xb||{}),Ue=class{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context},Ks=Symbol("isActive");function gn(o){let e=o.visible||ll(o);return o[Ks]===void 0&&(o[Ks]=!0),o[Ks]&&e}function Io(o,e,t=!0){return typeof e=="number"&&(e=e>.5),o[Ks]=e,t&&(o.visible=e),o[Ks]}function hf(o){return o[ji]||ll(o)}function pf(o,e){o.__isUsingInstancing=e}function ll(o){return oe.isUsingInstancing(o)}function Lr(o,e){return Wn(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(Br&&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 ai(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=ai(n,e,t);if(r!==void 0)return r}}}function jr(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),Br&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new Re(Date.now()));let n=[],r={},s={},a=ff(i,o,t,n,r,s);a&&(qb(r),Qb(s,r)),Br&&(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,Br&&console.log(l.name,l.guid)),sl(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 bn(i),a}function ff(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?ie(c,t.position):c.position.copy(e.position),t?.rotation?et(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=Wn(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=ff(o,d,t,i,n,r);h&&c.add(h)}return c}function Qb(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 qb(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=df(r,a,d,o);h!==void 0?u.push(h):u.push(d)}}else if(typeof c=="object"){let u=df(r,a,c,o);u!==void 0&&(r[a]=u)}}}}function df(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){Br&&console.log("reference did not change",e,o,t);return}let a=n.userData.components.indexOf(t);if(a>=0)return Br&&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 Br&&console.log(e,"old",t,"new",s),s}}else if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone()}}import vn,{ActiveEvents as gv,CoefficientCombineRule as yn,Collider as bv,ColliderDesc as Js,EventQueue as vv,JointData as yv,RigidBody as _v,RigidBodyType as Ru,World as xv}from"@dimforge/rapier3d-compat";import{BufferAttribute as Yb,Line as Kb,BoxGeometry as vf,EdgesGeometry as Jb,Color as Zb,LineSegments as $b,LineBasicMaterial as ev,Mesh as Eu,SphereGeometry as tv,Vector3 as Cu,Quaternion as iv,CylinderGeometry as nv}from"three";var tt=new Cu,mf=new Cu,gf=new iv,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),tt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+tt.x,e.y+tt.y,e.z+tt.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?(tt.set(0,0,-s),gf.set(t.x,t.y,t.z,t.w),tt.applyQuaternion(gf)):(tt.set(t.x,t.y,t.z),tt.multiplyScalar(s)),c.setXYZ(1,e.x+tt.x,e.y+tt.y,e.z+tt.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);pn(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);pn(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(tt)),r.scale.copy(e.getSize(tt)),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),tt.set(t.x,t.y,t.z).sub(mf.set(e.x,e.y,e.z)).normalize());let u=tt.set(t.x,t.y,t.z).sub(mf.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 Cu(0,1,0));var rv=new vf(1,1,1);function cl(o=null){let e=new Zb(o??14540253),t=new Jb(rv);return new $b(t,new ev({color:e}))}var bf=Symbol("GizmoCache"),Ge=class{static getBox(e){let t=this.boxesCache.pop();if(!t){let i=new vf(1,1,1);t=new Eu(i)}return this.registerTimedObject(G.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new Kb;let i=t.geometry.getAttribute("position");i||(i=new Yb(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 Eu(new tv(.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 Eu(new nv(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[bf]=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[bf].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"),Su=P("debugphysicscolliders"),Pu=P("debugcollisions"),wv=P("showcolliders"),Do=Symbol("needle component"),Ht=Symbol("physics body"),Ev=Symbol("rigidbody"),be=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 mv),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setMask(e){this.layerMask||(this.layerMask=new Ou);let t=this.layerMask;t?t.mask=e:this.layerMask=e}};I(be,"AllLayers",4294967295);var ku=class{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}},Ur=class{raycaster=new pv;defaultRaycastOptions=new be;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:0},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new Ou;sphereOverlap(e,t,i=!0){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;let n=new fv(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 av;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 ku(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 Ou?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 vn.Ray({x:0,y:0,z:0},{x:0,y:0,z:1});raycastVectorsBuffer=new Mi(()=>new Tu,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 Tu;_tempQuaternion=new hv;_tempScale=new Tu;_tempMatrix=new dv;_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,Ur._didLoadPhysicsEngine||(await vn.init().then(()=>vn),Ur._didLoadPhysicsEngine=!0);let e={x:0,y:-9.81,z:0};this.world=new xv(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);Ao&&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){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?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(yn,t.setRestitution(a.bounciness),a.bounceCombine){case 0:t.setRestitutionCombineRule(yn.Average);break;case 3:t.setRestitutionCombineRule(yn.Max);break;case 2:t.setRestitutionCombineRule(yn.Min);break;case 1:t.setRestitutionCombineRule(yn.Multiply);break}switch(t.setFriction(a.dynamicFriction),a.frictionCombine){case 0:t.setFrictionCombineRule(yn.Average);break;case 3:t.setFrictionCombineRule(yn.Max);break;case 2:t.setFrictionCombineRule(yn.Min);break;case 1:t.setFrictionCombineRule(yn.Multiply);break}}let c=this.world.createCollider(t,r);return c[Do]=e,e[Ht]=c,c.setActiveEvents(gv.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[Ht],n=!0,!i){let s=r.isKinematic&&!Su;Ao&&console.log("Create rigidbody",s);let a=s?vn.RigidBodyDesc.kinematicPositionBased():vn.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[Ht]=i,this.internalUpdateProperties(r,i),this.getRigidbodyRelativeMatrix(e.gameObject,r.gameObject,t)}else{let r=vn.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[Ev]=i,{rigidBody:i,useExplicitMassProperties:n}}removeBody(e){let t=e[Ht];if(e[Ht]=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 bv){let r=n;this.world?.removeCollider(r,!0);let s=r.parent();s&&s.numColliders()<=0&&this.world?.removeRigidBody(s)}else n instanceof _v}}}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[Ht];r&&this.syncPhysicsBody(n.gameObject,r,t,i)}}updateProperties(e){let t=e[Ht];t&&this.internalUpdateProperties(e,t)}internal_getRigidbody(e){return e[Ht]}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(vn.RigidBodyType.KinematicPositionBased):t.setBodyType(vn.RigidBodyType.Dynamic)}lines;step(e){!this.world||(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new vv(!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||Su||wv){if(!this.lines){let i=new cv({color:2258688}),n=new lv;this.lines=new uv(n,i),this.context.scene.add(this.lines)}let t=e.debugRender();this.lines.geometry.setAttribute("position",new yf(t.vertices,3)),this.lines.geometry.setAttribute("color",new yf(t.colors,4))}}postStep(){!this.world||(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new Mu(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()))}syncObjects(){if(!Su)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}pn(t.gameObject,r.x,r.y,r.z),jp(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 Ru.Fixed:case Ru.KinematicPositionBased:case Ru.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=Ur._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[Ht],n=t[Ht];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let r=yv.fixed(Ur.centerConnectionPos,Ur.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[Ht],s=t[Ht];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let a=vn.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()}},qn=Ur;I(qn,"_didLoadPhysicsEngine",!1),I(qn,"_matricesBuffer",[]),I(qn,"centerConnectionPos",{x:0,y:0,z:0}),I(qn,"centerConnectionRot",{x:0,y:0,z:0,w:1});var Mu=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];Pu&&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)ai(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)=>{ai(s,u=>{let l=u.onCollisionEnter||u.onCollisionStay||u.onCollisionExit;if(l||Pu){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 Ja(E,x,h,_,m);d.push(f),Pu&&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 Cv}from"three";var _f=P("timescale"),xf=1;typeof _f=="number"&&(xf=_f);var ul=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 Cv;_smoothedFps=0;_fpsSamples=[];_fpsSampleIndex=0;update(){this.deltaTime=this.clock.getDelta(),this.deltaTime=Math.min(.1,this.deltaTime),this.deltaTime*=xf*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 Rv}from"websocket-ts";var Hi=new Int32Array(2),dl=new Float32Array(Hi.buffer),hl=new Float64Array(Hi.buffer),Lo=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var Ye=class{constructor(e,t){this.low=e|0,this.high=t|0}static create(e,t){return e==0&&t==0?Ye.ZERO:new Ye(e,t)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(e){return this.low==e.low&&this.high==e.high}};Ye.ZERO=new Ye(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 Ye(this.readInt32(e),this.readInt32(e+4))}readUint64(e){return new Ye(this.readUint32(e),this.readUint32(e+4))}readFloat32(e){return Hi[0]=this.readInt32(e),dl[0]}readFloat64(e){return Hi[Lo?0:1]=this.readInt32(e),Hi[Lo?1:0]=this.readInt32(e+4),hl[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){dl[0]=t,this.writeInt32(e,Hi[0])}writeFloat64(e,t){hl[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===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 Ye.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 Ye.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 wf={};function Ho(o,e){wf[o]=e}function Ef(o){let e=o.getBufferIdentifier(),t=wf[e];return t(o)}function Cf(o){return typeof o.guid=="function"?o.guid():null}var Au=ja(fl(),1);var ml=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 Au.default(e);t.on("error",i=>{console.error(i),this._host=void 0,this.trySetupClient(e)}),t.on("open",i=>{this._host=new Lu(t)})}trySetupClient(e){this._client=new Au.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)})})}},Du=class{_peer;constructor(e){this._peer=e}};var Lu=class extends Du{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 gl="wss://needle-tiny-starter.glitch.me/socket",dt=!!P("debugnet"),bl=!!(dt||P("debugowner"));var Kn=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||(bl&&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 bl&&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?(bl&&console.log("GAINED OWNERSHIP",this.guid),this._hasOwnership=!0):this._hasOwnership=!1)}onLostOwnership(e){e===this.guid&&(bl&&console.log("LOST OWNERSHIP",this.guid),this._hasOwnership=!1,this._isOwned=!1)}},vl=class{context;_peer=null;constructor(e){this.context=e}get peer(){return this._peer||(this._peer=new ml),this._peer}tryGetState(e){return e==="invalid"?null:this._state[e]}get connectionId(){return this._connectionId}get isDebugEnabled(){return dt}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(),dt&&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){dt&&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&&dt&&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;dt&&console.log("connecting");let e=this.netWebSocketUrlProvider?.getWebsocketUrl();e?gl=e:vp()&&(gl="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 "+gl);let e=new Rv(gl).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{dt&&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=Ef(n),c=Cf(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(dt&&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(dt&&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),dt&&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),dt&&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":dt&&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),dt&&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));dt&&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 dy}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as hy}from"three/examples/jsm/postprocessing/RenderPass";import*as Jn from"three";var Df=ja(Af(),1),yl=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 Lf(o,e){let t=await o.arrayBuffer(),i=jf(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 yl(!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 yl(g.success,r,i,o.size);return E.url=e,E}function jf(o){return(0,Df.default)(new Uint8Array(o))}async function _l(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=jf(a);return n||console.assert(c===e,"hash mismatch, downloaded file is invalid"),s.arrayBuffer()}catch(r){console.error(r)}return null}async function Hf(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 xl(o,e,t){console.warn("Adding components on object has been temporarily disabled")}var Bf,Ff=null;function Ke(){return Bf}function wl(o){Ff!==o&&(Ff=o,Bf=new o)}var Fu=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 Uf(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=nl(),l=new Re(u),d=await Ke().loadSync(e,c,l,!0);if(d&&d.scene){let h=d.scene;if(!h.guid){let g=new Re(u);h.guid=g.generateUUID()}t&&kv(e.connection,o,u,h,t),xl(h,l,d),n(d)}}}):(console.warn("Unsupported file type: "+i),console.log(o),null)}async function Gf(o,e){return new Promise(async(t,i)=>{let n=nl(),r=new Re(n),s=await Ke().loadSync(e,o.toString(),r,!0);if(s&&s.scene){let a=s.scene;xl(a,r,s),t(s)}else console.warn("Unsupported file type: "+o.toString())})}function Vf(o){o.connection.beginListen("file-spawned",async e=>{if(e.sender!==o.connection.connectionId){console.log("received file event",e),Mv(e,o);let t=null;try{t=await _l(e.file_name,e.file_hash,e.file_size,e.serverUrl)}finally{Iv(e,o)}if(t){let i=new Re(e.seed),n=await Ke().parseSync(o,t,null,i);if(n&&n.scene){let r=n.scene;if(xl(r,i,n),e.parentGuid){let s=Lr(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 kv(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 Lf(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 Fu(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 Bu={};function Mv(o,e){let t=new Jn.BoxGeometry,i=new Jn.Mesh(t,new Jn.MeshBasicMaterial({color:65280})),n=new Jn.BoxHelper(i,5592405);if(Bu[o.guid]=n,e.scene.add(n),o.parentGuid){let r=Lr(o.parentGuid,e.scene);r&&r.add(n)}o.position&&n.position.copy(o.position)}function Iv(o,e){let t=o.guid,i=Bu[t];i&&(delete Bu[t],i.removeFromParent())}import*as zf from"three";var PT=P("debugassets");var El=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 zf.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 im from"three/examples/jsm/libs/stats.module";import{Vector4 as Uv,EquirectangularReflectionMapping as Tl,sRGBEncoding as Rl,WebGLCubeRenderTarget as Gv}from"three";import{LightProbeGenerator as Vv}from"three/examples/jsm/lights/LightProbeGenerator.js";import*as Wf from"three";var Dv=new Wf.FileLoader;async function Uu(o){return new Promise((e,t)=>{Dv.load(o,e,void 0,t)})}import{Vector4 as Zn,FileLoader as jv,DataTexture as Nu,RGBAFormat as Hv,Color as Fv}from"three";var $s=new Uint8Array(4);$s[0]=255;$s[1]=255;$s[2]=255;$s[3]=255;var Qf=new Nu($s,1,1,Hv);function Cl(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 Nu(n,e,e);return c.needsUpdate=!0,c}function qf(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 Fv;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 Nu(l,i,n);return h.needsUpdate=!0,h}var Vu=class{stage;code;constructor(e,t){this.stage=e,this.code=t}},zu=class{loaded=new Map;async loadShader(e){let t=await Uu(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 Uu(t),n=new Vu(e,i);return this.loaded.set(t,n),n}},AT=new zu;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 Zn(n,r,s,a);e.push(c)}return e}var Gu=[],Nf=[];function Xu(o,e){if(Gu.length===0)for(let t=0;t<27;t++)Gu.push(0);e||(e=Gu);for(let t=0;t<27;t++)Nf[t]=e[t];e=Nf,o.unity_SHAr={value:new Zn(e[9],e[3],e[6],e[0])},o.unity_SHBr={value:new Zn(e[12],e[15],e[18],e[21])},o.unity_SHAg={value:new Zn(e[10],e[4],e[7],e[1])},o.unity_SHBg={value:new Zn(e[13],e[16],e[19],e[22])},o.unity_SHAb={value:new Zn(e[11],e[5],e[8],e[2])},o.unity_SHBb={value:new Zn(e[14],e[17],e[20],e[23])},o.unity_SHC={value:new Zn(e[24],e[25],e[26],1)}}var Wu=class{vertexShader;fragmentShader;technique;constructor(e,t,i){this.vertexShader=e,this.fragmentShader=t,this.technique=i}};async function Yf(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 Xf(r),!s.code&&s.uri&&await Xf(s),!r.code||!s.code)return null;let a=o.techniques[e];return new Wu(r.code,s.code,a)}}return console.error("Shader technique not found",e),null}async function Xf(o){let e=o.uri;if(!!e)if(e.endsWith(".glsl")){let i=await new jv().loadAsync(e);o.code=i.toString()}else o.code=Bv(o.uri)}function Bv(o){return decodeURIComponent(Array.prototype.map.call(atob(o),function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))}var Qu=P("debugenvlight"),Yu=(n=>(n[n.Skybox=0]="Skybox",n[n.Trilight=1]="Trilight",n[n.Flat=3]="Flat",n[n.Custom=4]="Custom",n))(Yu||{});var Sl=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 Uv;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(Qu&&console.log(this.sceneLightSettings?Yu[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=Rl,n.mapping=Tl,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=qf(t[0],t[1],t[2],64,64);i.encoding=Rl,i.mapping=Tl,this.context.scene.environment=i}else console.error("Missing ambient trilight",this.sceneLightSettings.sourceId);return;case 3:if(this.sceneLightSettings.ambientLight){let t=Cl(this.sceneLightSettings.ambientLight,64);t.encoding=Rl,t.mapping=Tl,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 Qu&&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=Tl,t.encoding=Rl}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){Qu&&console.log("GENERATING LIGHT PROBE",t);let n=Math.min(t.image.width,512);i=new Gv(n).fromEquirectangularTexture(this._context.renderer,t),this._source=i.texture}if(this._sphericalHarmonicsArray=[],i){let n=Vv.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 zv}from"three";var Gr=P("debugaddressables"),Pl=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);Gr&&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,$p(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&&(Gr&&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,Gr&&console.log("Preload",this._hashedUri);let e=await Hf(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=Ke().parseSync(t,this._rawBinary,this.uri,null),this.raiseProgressEvent(new ProgressEvent("progress",{loaded:this._rawBinary.byteLength,total:this._rawBinary.byteLength}))):(Gr&&console.log("Load async",this.uri),this._loading=Ke().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 bn(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(),Gr&&console.log("Instantiate",this.uri,"parent:",e),this.asset){Gr&&console.log("Add to scene",this.asset);let r=e instanceof Ue?e:null;if(r||(r=new Ue),typeof e=="object"&&(e instanceof zv?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=il(s,r,void 0,i);if(a)return a}else{let s=jr(this.asset,r);if(s)return s}}finally{n.post_render_callbacks.push(()=>Fo.currentlyInstantiating.pop())}}else Gr&&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}},it=Fo;I(it,"currentlyInstantiating",[]);var Ku=class extends Li{constructor(){super([it])}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?it.getOrCreate(t.gltfId,e,t.context):(console.error("Missing spurce id"),null):(console.error("Missing context"),null):null}};new Ku;var Ol=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 Wv,HalfFloatType as Nv,LinearEncoding as Xv,sRGBEncoding as Qv}from"three";var Kf="NEEDLE_lightmaps",qv=P("debuglightmapsextension"),ta=(i=>(i[i.Lightmap=0]="Lightmap",i[i.Skybox=1]="Skybox",i[i.Reflection=2]="Reflection",i))(ta||{}),kl=class{get name(){return Kf}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[Kf];if(i){let n=i.textures;return n?.length?(qv&&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=Qv:d.encoding=Xv,c.type===1&&(d.type==Wv||d.type==Nv)&&(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 Jf=!!P("debuglightmaps"),Ml=class{_context;_lightmaps=new Map;constructor(e){this._context=e}registerTexture(e,t,i,n){Jf&&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 Jf&&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))),wu&&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(wu&&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(wu&&console.log("MATCH BY PROTOYPE",r),t)t.push(n);else return n;r=Object.getPrototypeOf(r)}while(r)}return t}}}function Hr(o,e){return cf(o,e)}function Oo(o,e,t){return t||(t=[]),cf(o,e,t)}function Fr(o,e,t){let i=Hr(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=Fr(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=Nb(o[i]),r=Po(n,e);if(r)return r}return null}let t=Hr(o,e);return t||(o.parent?Po(o.parent,e):null)}function Ys(o,e,t){return t||(t=[]),o?(Oo(o,e,t),o.parent?Ys(o.parent,e,t):t):t}function uf(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=Fr(r,o);if(s)return s}return null}function df(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&&rf(o,ut)}ut.prototype.SetActive=function(o){this.visible=o};ut.prototype.addNewComponent=function(o){return si(this,new o)};ut.prototype.removeComponent=function(o){return rl(this,o)};ut.prototype.getOrAddComponent=function(o){return ol(this,o)};ut.prototype.getComponent=function(o){return Hr(this,o)};ut.prototype.getComponents=function(o,e){return Oo(this,o,e)};ut.prototype.getComponentInChildren=function(o){return Fr(this,o)};ut.prototype.getComponentsInChildren=function(o,e){return ko(this,o,e)};ut.prototype.getComponentInParent=function(o){return Po(this,o)};ut.prototype.getComponentsInParent=function(o,e){return Ys(this,o,e)};Object.getOwnPropertyDescriptor(ut.prototype,"activeSelf")||Object.defineProperty(ut.prototype,"activeSelf",{get:function(){return gn(this)},set:function(o){Io(this,o,!0)}});of(ut);var al=Symbol("NEEDLE_NEED_UPDATE_INSTANCE"),oe=class{static isUsingInstancing(e){return e.__isUsingInstancing===!0}static markDirty(e,t=!0){if(!!e&&(this.isUsingInstancing(e)&&(e[al]=!0,e.matrixWorldNeedsUpdate=!0),t))for(let i of e.children)oe.markDirty(i,!0)}};var Br=P("debuggetcomponent"),Xb=(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))(Xb||{}),Ue=class{idProvider;parent;keepWorldPosition;position;rotation;scale;visible;context},Ks=Symbol("isActive");function gn(o){let e=o.visible||ll(o);return o[Ks]===void 0&&(o[Ks]=!0),o[Ks]&&e}function Io(o,e,t=!0){return typeof e=="number"&&(e=e>.5),o[Ks]=e,t&&(o.visible=e),o[Ks]}function pf(o){return o[ji]||ll(o)}function ff(o,e){o.__isUsingInstancing=e}function ll(o){return oe.isUsingInstancing(o)}function Lr(o,e){return Wn(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(Br&&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 ai(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=ai(n,e,t);if(r!==void 0)return r}}}function jr(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),Br&&i.alias&&console.log("context",i.alias),t&&!t.idProvider&&(t.idProvider=new Re(Date.now()));let n=[],r={},s={},a=mf(i,o,t,n,r,s);a&&(qb(r),Qb(s,r)),Br&&(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,Br&&console.log(l.name,l.guid)),sl(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 bn(i),a}function mf(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?ie(c,t.position):c.position.copy(e.position),t?.rotation?et(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=Wn(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=mf(o,d,t,i,n,r);h&&c.add(h)}return c}function Qb(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 qb(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=hf(r,a,d,o);h!==void 0?u.push(h):u.push(d)}}else if(typeof c=="object"){let u=hf(r,a,c,o);u!==void 0&&(r[a]=u)}}}}function hf(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){Br&&console.log("reference did not change",e,o,t);return}let a=n.userData.components.indexOf(t);if(a>=0)return Br&&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 Br&&console.log(e,"old",t,"new",s),s}}else if(t.isVector4||t.isVector3||t.isVector2||t.isQuaternion||t.isEuler)return t.clone()}}import vn,{ActiveEvents as gv,CoefficientCombineRule as yn,Collider as bv,ColliderDesc as Js,EventQueue as vv,JointData as yv,RigidBody as _v,RigidBodyType as Ru,World as xv}from"@dimforge/rapier3d-compat";import{BufferAttribute as Yb,Line as Kb,BoxGeometry as yf,EdgesGeometry as Jb,Color as Zb,LineSegments as $b,LineBasicMaterial as ev,Mesh as Eu,SphereGeometry as tv,Vector3 as Cu,Quaternion as iv,CylinderGeometry as nv}from"three";var tt=new Cu,gf=new Cu,bf=new iv,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),tt.set(t.x,t.y,t.z).multiplyScalar(999999999),a.setXYZ(1,e.x+tt.x,e.y+tt.y,e.z+tt.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?(tt.set(0,0,-s),bf.set(t.x,t.y,t.z,t.w),tt.applyQuaternion(bf)):(tt.set(t.x,t.y,t.z),tt.multiplyScalar(s)),c.setXYZ(1,e.x+tt.x,e.y+tt.y,e.z+tt.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);pn(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);pn(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(tt)),r.scale.copy(e.getSize(tt)),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),tt.set(t.x,t.y,t.z).sub(gf.set(e.x,e.y,e.z)).normalize());let u=tt.set(t.x,t.y,t.z).sub(gf.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 Cu(0,1,0));var rv=new yf(1,1,1);function cl(o=null){let e=new Zb(o??14540253),t=new Jb(rv);return new $b(t,new ev({color:e}))}var vf=Symbol("GizmoCache"),Ge=class{static getBox(e){let t=this.boxesCache.pop();if(!t){let i=new yf(1,1,1);t=new Eu(i)}return this.registerTimedObject(G.Current,t,e,this.boxesCache),t}static getLine(e){let t=this.linesCache.pop();if(!t){t=new Kb;let i=t.geometry.getAttribute("position");i||(i=new Yb(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 Eu(new tv(.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 Eu(new nv(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[vf]=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[vf].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"),Su=P("debugphysicscolliders"),Pu=P("debugcollisions"),wv=P("showcolliders"),Do=Symbol("needle component"),Ht=Symbol("physics body"),Ev=Symbol("rigidbody"),be=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 mv),this.screenPoint.x=e/window.innerWidth*2-1,this.screenPoint.y=-(t/window.innerHeight)*2+1}setMask(e){this.layerMask||(this.layerMask=new Ou);let t=this.layerMask;t?t.mask=e:this.layerMask=e}};I(be,"AllLayers",4294967295);var ku=class{distance;point;object;constructor(e,t,i){this.object=e,this.distance=t,this.point=i}},Ur=class{raycaster=new pv;defaultRaycastOptions=new be;targetBuffer=new Array(1);defaultThresholds={Mesh:{},Line:{threshold:0},LOD:{},Points:{threshold:0},Sprite:{}};sphereResults=new Array;sphereMask=new Ou;sphereOverlap(e,t,i=!0){if(this.sphereResults.length=0,!this.context.scene)return this.sphereResults;let n=new fv(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 av;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 ku(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 Ou?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 vn.Ray({x:0,y:0,z:0},{x:0,y:0,z:1});raycastVectorsBuffer=new Mi(()=>new Tu,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 Tu;_tempQuaternion=new hv;_tempScale=new Tu;_tempMatrix=new dv;_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,Ur._didLoadPhysicsEngine||(await vn.init().then(()=>vn),Ur._didLoadPhysicsEngine=!0);let e={x:0,y:-9.81,z:0};this.world=new xv(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);Ao&&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){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?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(yn,t.setRestitution(a.bounciness),a.bounceCombine){case 0:t.setRestitutionCombineRule(yn.Average);break;case 3:t.setRestitutionCombineRule(yn.Max);break;case 2:t.setRestitutionCombineRule(yn.Min);break;case 1:t.setRestitutionCombineRule(yn.Multiply);break}switch(t.setFriction(a.dynamicFriction),a.frictionCombine){case 0:t.setFrictionCombineRule(yn.Average);break;case 3:t.setFrictionCombineRule(yn.Max);break;case 2:t.setFrictionCombineRule(yn.Min);break;case 1:t.setFrictionCombineRule(yn.Multiply);break}}let c=this.world.createCollider(t,r);return c[Do]=e,e[Ht]=c,c.setActiveEvents(gv.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[Ht],n=!0,!i){let s=r.isKinematic&&!Su;Ao&&console.log("Create rigidbody",s);let a=s?vn.RigidBodyDesc.kinematicPositionBased():vn.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[Ht]=i,this.internalUpdateProperties(r,i),this.getRigidbodyRelativeMatrix(e.gameObject,r.gameObject,t)}else{let r=vn.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[Ev]=i,{rigidBody:i,useExplicitMassProperties:n}}removeBody(e){let t=e[Ht];if(e[Ht]=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 bv){let r=n;this.world?.removeCollider(r,!0);let s=r.parent();s&&s.numColliders()<=0&&this.world?.removeRigidBody(s)}else n instanceof _v}}}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[Ht];r&&this.syncPhysicsBody(n.gameObject,r,t,i)}}updateProperties(e){let t=e[Ht];t&&this.internalUpdateProperties(e,t)}internal_getRigidbody(e){return e[Ht]}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(vn.RigidBodyType.KinematicPositionBased):t.setBodyType(vn.RigidBodyType.Dynamic)}lines;step(e){!this.world||(this._isUpdatingPhysicsWorld=!0,this.eventQueue||(this.eventQueue=new vv(!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||Su||wv){if(!this.lines){let i=new cv({color:2258688}),n=new lv;this.lines=new uv(n,i),this.context.scene.add(this.lines)}let t=e.debugRender();this.lines.geometry.setAttribute("position",new _f(t.vertices,3)),this.lines.geometry.setAttribute("color",new _f(t.colors,4))}}postStep(){!this.world||(this._isUpdatingPhysicsWorld=!0,this.syncObjects(),this._isUpdatingPhysicsWorld=!1,this.eventQueue&&!this.collisionHandler&&(this.collisionHandler=new Mu(this.world,this.eventQueue)),this.collisionHandler&&(this.collisionHandler.handleCollisionEvents(),this.collisionHandler.update()))}syncObjects(){if(!Su)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}pn(t.gameObject,r.x,r.y,r.z),Hp(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 Ru.Fixed:case Ru.KinematicPositionBased:case Ru.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=Ur._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[Ht],n=t[Ht];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let r=yv.fixed(Ur.centerConnectionPos,Ur.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[Ht],s=t[Ht];this.calculateJointRelativeMatrices(e.gameObject,t.gameObject,this._tempMatrix),this._tempMatrix.decompose(this._tempPosition,this._tempQuaternion,this._tempScale);let a=vn.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()}},qn=Ur;I(qn,"_didLoadPhysicsEngine",!1),I(qn,"_matricesBuffer",[]),I(qn,"centerConnectionPos",{x:0,y:0,z:0}),I(qn,"centerConnectionRot",{x:0,y:0,z:0,w:1});var Mu=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];Pu&&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)ai(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)=>{ai(s,u=>{let l=u.onCollisionEnter||u.onCollisionStay||u.onCollisionExit;if(l||Pu){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 Ja(E,x,h,_,m);d.push(f),Pu&&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 Cv}from"three";var xf=P("timescale"),wf=1;typeof xf=="number"&&(wf=xf);var ul=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 Cv;_smoothedFps=0;_fpsSamples=[];_fpsSampleIndex=0;update(){this.deltaTime=this.clock.getDelta(),this.deltaTime=Math.min(.1,this.deltaTime),this.deltaTime*=wf*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 Rv}from"websocket-ts";var Hi=new Int32Array(2),dl=new Float32Array(Hi.buffer),hl=new Float64Array(Hi.buffer),Lo=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var Ye=class{constructor(e,t){this.low=e|0,this.high=t|0}static create(e,t){return e==0&&t==0?Ye.ZERO:new Ye(e,t)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(e){return this.low==e.low&&this.high==e.high}};Ye.ZERO=new Ye(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 Ye(this.readInt32(e),this.readInt32(e+4))}readUint64(e){return new Ye(this.readUint32(e),this.readUint32(e+4))}readFloat32(e){return Hi[0]=this.readInt32(e),dl[0]}readFloat64(e){return Hi[Lo?0:1]=this.readInt32(e),Hi[Lo?1:0]=this.readInt32(e+4),hl[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){dl[0]=t,this.writeInt32(e,Hi[0])}writeFloat64(e,t){hl[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===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 Ye.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 Ye.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 Ef={};function Ho(o,e){Ef[o]=e}function Cf(o){let e=o.getBufferIdentifier(),t=Ef[e];return t(o)}function Tf(o){return typeof o.guid=="function"?o.guid():null}var Au=ja(fl(),1);var ml=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 Au.default(e);t.on("error",i=>{console.error(i),this._host=void 0,this.trySetupClient(e)}),t.on("open",i=>{this._host=new Lu(t)})}trySetupClient(e){this._client=new Au.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)})})}},Du=class{_peer;constructor(e){this._peer=e}};var Lu=class extends Du{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 gl="wss://needle-tiny-starter.glitch.me/socket",dt=!!P("debugnet"),bl=!!(dt||P("debugowner"));var Kn=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||(bl&&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 bl&&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?(bl&&console.log("GAINED OWNERSHIP",this.guid),this._hasOwnership=!0):this._hasOwnership=!1)}onLostOwnership(e){e===this.guid&&(bl&&console.log("LOST OWNERSHIP",this.guid),this._hasOwnership=!1,this._isOwned=!1)}},vl=class{context;_peer=null;constructor(e){this.context=e}get peer(){return this._peer||(this._peer=new ml),this._peer}tryGetState(e){return e==="invalid"?null:this._state[e]}get connectionId(){return this._connectionId}get isDebugEnabled(){return dt}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(),dt&&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){dt&&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&&dt&&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;dt&&console.log("connecting");let e=this.netWebSocketUrlProvider?.getWebsocketUrl();e?gl=e:yp()&&(gl="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 "+gl);let e=new Rv(gl).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{dt&&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=Cf(n),c=Tf(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(dt&&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(dt&&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),dt&&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),dt&&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":dt&&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),dt&&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));dt&&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 dy}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as hy}from"three/examples/jsm/postprocessing/RenderPass";import*as Jn from"three";var Lf=ja(Df(),1),yl=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 jf(o,e){let t=await o.arrayBuffer(),i=Hf(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 yl(!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 yl(g.success,r,i,o.size);return E.url=e,E}function Hf(o){return(0,Lf.default)(new Uint8Array(o))}async function _l(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=Hf(a);return n||console.assert(c===e,"hash mismatch, downloaded file is invalid"),s.arrayBuffer()}catch(r){console.error(r)}return null}async function Ff(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 xl(o,e,t){console.warn("Adding components on object has been temporarily disabled")}var Uf,Bf=null;function Ke(){return Uf}function wl(o){Bf!==o&&(Bf=o,Uf=new o)}var Fu=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 Uu(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=nl(),l=new Re(u),d=await Ke().loadSync(e,c,l,!0);if(d&&d.scene){let h=d.scene;if(!h.guid){let g=new Re(u);h.guid=g.generateUUID()}t&&kv(e.connection,o,u,h,t),xl(h,l,d),n(d)}}}):(console.warn("Unsupported file type: "+i),console.log(o),null)}async function Gf(o,e){return new Promise(async(t,i)=>{let n=nl(),r=new Re(n),s=await Ke().loadSync(e,o.toString(),r,!0);if(s&&s.scene){let a=s.scene;xl(a,r,s),t(s)}else console.warn("Unsupported file type: "+o.toString())})}function Vf(o){o.connection.beginListen("file-spawned",async e=>{if(e.sender!==o.connection.connectionId){console.log("received file event",e),Mv(e,o);let t=null;try{t=await _l(e.file_name,e.file_hash,e.file_size,e.serverUrl)}finally{Iv(e,o)}if(t){let i=new Re(e.seed),n=await Ke().parseSync(o,t,null,i);if(n&&n.scene){let r=n.scene;if(xl(r,i,n),e.parentGuid){let s=Lr(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 kv(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 jf(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 Fu(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 Bu={};function Mv(o,e){let t=new Jn.BoxGeometry,i=new Jn.Mesh(t,new Jn.MeshBasicMaterial({color:65280})),n=new Jn.BoxHelper(i,5592405);if(Bu[o.guid]=n,e.scene.add(n),o.parentGuid){let r=Lr(o.parentGuid,e.scene);r&&r.add(n)}o.position&&n.position.copy(o.position)}function Iv(o,e){let t=o.guid,i=Bu[t];i&&(delete Bu[t],i.removeFromParent())}import*as zf from"three";var PT=P("debugassets");var El=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 zf.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 im from"three/examples/jsm/libs/stats.module";import{Vector4 as Uv,EquirectangularReflectionMapping as Tl,sRGBEncoding as Rl,WebGLCubeRenderTarget as Gv}from"three";import{LightProbeGenerator as Vv}from"three/examples/jsm/lights/LightProbeGenerator.js";import*as Wf from"three";var Dv=new Wf.FileLoader;async function Gu(o){return new Promise((e,t)=>{Dv.load(o,e,void 0,t)})}import{Vector4 as Zn,FileLoader as jv,DataTexture as Xu,RGBAFormat as Hv,Color as Fv}from"three";var $s=new Uint8Array(4);$s[0]=255;$s[1]=255;$s[2]=255;$s[3]=255;var Qf=new Xu($s,1,1,Hv);function Cl(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 Xu(n,e,e);return c.needsUpdate=!0,c}function qf(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 Fv;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 Xu(l,i,n);return h.needsUpdate=!0,h}var zu=class{stage;code;constructor(e,t){this.stage=e,this.code=t}},Wu=class{loaded=new Map;async loadShader(e){let t=await Gu(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 Gu(t),n=new zu(e,i);return this.loaded.set(t,n),n}},AT=new Wu;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 Zn(n,r,s,a);e.push(c)}return e}var Vu=[],Nf=[];function Qu(o,e){if(Vu.length===0)for(let t=0;t<27;t++)Vu.push(0);e||(e=Vu);for(let t=0;t<27;t++)Nf[t]=e[t];e=Nf,o.unity_SHAr={value:new Zn(e[9],e[3],e[6],e[0])},o.unity_SHBr={value:new Zn(e[12],e[15],e[18],e[21])},o.unity_SHAg={value:new Zn(e[10],e[4],e[7],e[1])},o.unity_SHBg={value:new Zn(e[13],e[16],e[19],e[22])},o.unity_SHAb={value:new Zn(e[11],e[5],e[8],e[2])},o.unity_SHBb={value:new Zn(e[14],e[17],e[20],e[23])},o.unity_SHC={value:new Zn(e[24],e[25],e[26],1)}}var Nu=class{vertexShader;fragmentShader;technique;constructor(e,t,i){this.vertexShader=e,this.fragmentShader=t,this.technique=i}};async function Yf(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 Xf(r),!s.code&&s.uri&&await Xf(s),!r.code||!s.code)return null;let a=o.techniques[e];return new Nu(r.code,s.code,a)}}return console.error("Shader technique not found",e),null}async function Xf(o){let e=o.uri;if(!!e)if(e.endsWith(".glsl")){let i=await new jv().loadAsync(e);o.code=i.toString()}else o.code=Bv(o.uri)}function Bv(o){return decodeURIComponent(Array.prototype.map.call(atob(o),function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))}var qu=P("debugenvlight"),Ku=(n=>(n[n.Skybox=0]="Skybox",n[n.Trilight=1]="Trilight",n[n.Flat=3]="Flat",n[n.Custom=4]="Custom",n))(Ku||{});var Sl=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 Uv;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 Yu(this.context,t,1);this._lighting[e]=i}getReflection(e){return this._lighting[e]}enableReflection(e){switch(qu&&console.log(this.sceneLightSettings?Ku[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=Rl,n.mapping=Tl,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=qf(t[0],t[1],t[2],64,64);i.encoding=Rl,i.mapping=Tl,this.context.scene.environment=i}else console.error("Missing ambient trilight",this.sceneLightSettings.sourceId);return;case 3:if(this.sceneLightSettings.ambientLight){let t=Cl(this.sceneLightSettings.ambientLight,64);t.encoding=Rl,t.mapping=Tl,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 qu&&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={}},Yu=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=Tl,t.encoding=Rl}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){qu&&console.log("GENERATING LIGHT PROBE",t);let n=Math.min(t.image.width,512);i=new Gv(n).fromEquirectangularTexture(this._context.renderer,t),this._source=i.texture}if(this._sphericalHarmonicsArray=[],i){let n=Vv.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 zv}from"three";var Gr=P("debugaddressables"),Pl=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);Gr&&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,ef(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&&(Gr&&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,Gr&&console.log("Preload",this._hashedUri);let e=await Ff(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=Ke().parseSync(t,this._rawBinary,this.uri,null),this.raiseProgressEvent(new ProgressEvent("progress",{loaded:this._rawBinary.byteLength,total:this._rawBinary.byteLength}))):(Gr&&console.log("Load async",this.uri),this._loading=Ke().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 bn(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(),Gr&&console.log("Instantiate",this.uri,"parent:",e),this.asset){Gr&&console.log("Add to scene",this.asset);let r=e instanceof Ue?e:null;if(r||(r=new Ue),typeof e=="object"&&(e instanceof zv?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=il(s,r,void 0,i);if(a)return a}else{let s=jr(this.asset,r);if(s)return s}}finally{n.post_render_callbacks.push(()=>Fo.currentlyInstantiating.pop())}}else Gr&&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}},it=Fo;I(it,"currentlyInstantiating",[]);var Ju=class extends Li{constructor(){super([it])}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?it.getOrCreate(t.gltfId,e,t.context):(console.error("Missing spurce id"),null):(console.error("Missing context"),null):null}};new Ju;var Ol=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 Wv,HalfFloatType as Nv,LinearEncoding as Xv,sRGBEncoding as Qv}from"three";var Kf="NEEDLE_lightmaps",qv=P("debuglightmapsextension"),ta=(i=>(i[i.Lightmap=0]="Lightmap",i[i.Skybox=1]="Skybox",i[i.Reflection=2]="Reflection",i))(ta||{}),kl=class{get name(){return Kf}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[Kf];if(i){let n=i.textures;return n?.length?(qv&&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=Qv:d.encoding=Xv,c.type===1&&(d.type==Wv||d.type==Nv)&&(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 Jf=!!P("debuglightmaps"),Ml=class{_context;_lightmaps=new Map;constructor(e){this._context=e}registerTexture(e,t,i,n){Jf&&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 Jf&&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 Yv=P("debugplayerview");var Ju=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}},Il=class{context;playerViews=new Map;constructor(e){this.context=e}setPlayerView(e,t,i){let n=this.playerViews.get(e);n||(n=new Ju(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&&(Yv&&console.log("REMOVE",e),i.removed=!0,this.playerViews.delete(e))}};var Zu={};dp(Zu,{Behaviour:()=>M,Component:()=>Tt,GameObject:()=>R});import*as nt from"three";var R=class extends nt.Object3D{guid;static setActive(e,t,i=!0,n=!0){!e||(Io(e,t,n),Ro(e),t&&i&&Za(G.Current,e))}static isActiveSelf(e){return gn(e)}static isActiveInHierarchy(e){return hf(e)}static markAsInstancedRendered(e,t){pf(e,t)}static isUsingInstancing(e){return ll(e)}static foreachComponent(e,t,i=!0){return ai(e,t,i)}static instantiateSynced(e,t){return e?il(e,t):null}static instantiate(e,t=null){return jr(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=>{gu(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=>{Up(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 si(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");sf(e,t)}static removeComponent(e){return rl(e.gameObject,e),e}static getOrAddComponent(e,t){return ol(e,t)}static getComponent(e,t){return e===null?null:Hr(e,t)}static getComponents(e,t,i=null){return e===null?i??[]:Oo(e,t,i)}static findByGuid(e,t){return Lr(e,t)}static findObjectOfType(e,t,i=!0){return cf(e,t??G.Current,i)}static findObjectsOfType(e,t){let i=[];return uf(e,i,t),i}static getComponentInChildren(e,t){return Fr(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 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]}},ci=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),af(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 nt.Vector3),B(this.gameObject,this._worldPosition),this._worldPosition}set worldPosition(e){ie(this.gameObject,e)}setWorldPosition(e,t,i){ci._worldPositionBuffer.set(e,t,i),this.worldPosition=ci._worldPositionBuffer}get worldQuaternion(){return this._worldQuaternion||(this._worldQuaternion=new nt.Quaternion),me(this.gameObject,this._worldQuaternion)}set worldQuaternion(e){et(this.gameObject,e)}setWorldQuaternion(e,t,i,n){ci._worldQuaternionBuffer.set(e,t,i,n),this.worldQuaternion=ci._worldQuaternionBuffer}get worldEuler(){return this._worldEuler||(this._worldEuler=new nt.Euler),this._worldEuler.setFromQuaternion(this.worldQuaternion),this._worldEuler}set worldEuler(e){this._worldQuaternion||(this._worldQuaternion=new nt.Quaternion),this._worldQuaternion?.setFromEuler(e),this.worldQuaternion=this._worldQuaternion}get worldRotation(){let e=this.worldEuler;this._worldRotation||(this._worldRotation=new nt.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)),ci._worldEulerBuffer.set(e,t,i),ci._worldQuaternionBuffer.setFromEuler(ci._worldEulerBuffer),this.worldQuaternion=ci._worldQuaternionBuffer}get forward(){return ci._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=ci;I(Tt,"_worldPositionBuffer",new nt.Vector3),I(Tt,"_worldQuaternionBuffer",new nt.Quaternion),I(Tt,"_worldEulerBuffer",new nt.Euler),I(Tt,"_tempQuaternionBuffer2",new nt.Quaternion),I(Tt,"_forward",new nt.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=Zf(o);else for(let e=0;e<o.length;e++){let t=o[e];o[e]=Zf(t)}return function(e,t){Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});let i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function Zf(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}import{Color as Kv}from"three";var Q=class extends Kv{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 Jv,OrthographicCamera as Zv,PerspectiveCamera as $u,Ray as $v,sRGBEncoding as ey,Vector3 as $f}from"three";var Al=P("debugcam"),em=P("debugscreenpointtoray"),Dl=class extends M{get isCamera(){return!0}get aspect(){return this._cam instanceof $u?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 $u&&(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=Dl._origin;r.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(r),em&&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=Dl._direction.set(r.x,r.y,r.z),a=B(n);return s.sub(a),s.normalize(),i?(i.set(a,s),i):new $v(a.clone(),s.clone())}awake(){this.sourceId||console.warn("Camera has no source - the camera should be exported inside a gltf",this.name),em&&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(){Al&&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 $u(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(Al&&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;Al&&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 ed(this)),this._skybox.enable()}},Z=Dl;I(Z,"_origin",new $f),I(Z,"_direction",new $f),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 ed=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&&(Al&&console.log("Set skybox",this._camera,this._skybox),this._skybox.encoding=ey,this._skybox.mapping=Jv,this.context.scene.background=this._skybox):console.warn("Failed to load/find skybox texture",this)}};import{Object3D as iy}from"three";var _n=class extends M{constraintActive=!0;locked=!1;sources=[]};v([y(iy)],_n.prototype,"sources",2);import{Box3 as ny,Vector2 as ry,Vector3 as Ll}from"three";import{OrbitControls as oy}from"three/examples/jsm/controls/OrbitControls";var jl=P("freecam"),sy={LEFT:"",UP:"",RIGHT:"",BOTTOM:""},td,Ve=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 Ll,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 oy(t,this.context.renderer.domElement),td===void 0&&(td={...this._controls.keys})),this._controls&&(jl&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,xo()&&(this.doubleClickToFocus=!0)),this._controls.enableDamping=this.enableDamping,this._controls.keys=this.enableKeys?td:sy,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,t?.type==="PerspectiveCamera"?jl||(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom):jl||(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 Ll(0,0,-1).applyMatrix4(e.cam.matrixWorld);this.setTarget(t,!0)}}this.startCoroutine(this.startRaycastDelayed())}*startRaycastDelayed(){if(yield,!this.setFromTargetPosition()){let e=new be;e.screenPoint=new ry(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;Dp(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))}!jl&&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 Ll,s=new Ll,a=new ny;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(_n)],Ve.prototype,"lookAtConstraint",2);import{Object3D as ay,Vector3 as ly}from"three";function tm(o,e){let t=e,i=new ay;o.add(i);let n=new Z,r=si(i,n,!0);r.sourceId=t,r.clearFlags=2,r.backgroundColor=new Q(.5,.5,.5,1);let s=si(i,new Ve,!1);return s.sourceId=t,i.position.x=-2,i.position.y=2,i.position.z=2,Lp(i,new ly(0,0,0)),r}var py=P("debugSetup"),fy=P("stats"),my=P("debugactive"),Hl={};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 sl(o,e){if(!o)return;let t=e?.new_scripts??G.Current.new_scripts;t.includes(o)||t.push(o)}var ht=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=fy?im.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 uy({antialias:!0}),this.renderer.toneMappingExposure=1,this.renderer.toneMapping=Se.NoToneMapping,this.renderer.setClearColor(new Se.Color("lightgrey"),0),this.renderer.antialias=!0,this.renderer.alpha=!1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=Se.PCFSoftShadowMap,this.renderer.setSize(this.domWidth,this.domHeight),this.renderer.outputEncoding=Se.sRGBEncoding,this.renderer.physicallyCorrectLights=!0,this.composer=r?new dy(this.renderer):null}this.scene=new Se.Scene,this.application=new Ol(this),this.time=new ul,this.input=new Qa(this),this.physics=new qn(this),this.connection=new vl(this),this.assets=new El,this.rendererData=new Sl(this),this.addressables=new Pl(this),this.lightmaps=new Ml(this),this.players=new Il(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){if(!e)return;let t=this.domWidth,i=this.domHeight,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{ht.Current=this,e&&await e(this,t)}catch(n){console.error(n),i=!1}if(!!i){this.isManagedExternally||this.domElement.prepend(this.renderer.domElement),Jp(this),Kp(this),Vf(this),ht._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++)ht._current=this,await this.post_setup_callbacks[n](this);if(!this.mainCamera){ht._current=this;let n=null;ai(this.scene,r=>{let s=r;if(s?.isCamera){if(Dr(s.gameObject),!s.activeAndEnabled)return;if(s.tag==="MainCamera")return n=s,!0;n=s}}),n?this.setCurrentCamera(n):(console.error("MISSING camera",this),tm(this.scene,"unknown"))}if(ht._current=this,bn(this),!this.isManagedExternally&&this.composer&&this.mainCamera){let n=new hy(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)),py&&Xs(this.scene,!0)}}render(e,t){if(this._currentFrameEvent=-1,this.onHandlePaused())return;for(this._stats?.begin(),ht._current=this,this.time.update(),bn(this),Ro(),Za(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&&(ht._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&&(ht._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&&(ht._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&&(ht._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._currentFrameEvent=-10,this._isRendering=!0,this.renderRequiredTextures(),this.isManagedExternally||(this.composer&&!this.isInXR?this.composer.render():this.mainCamera&&this.renderer.render(this.scene,this.mainCamera)),this._isRendering=!1,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&&(ht._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()}}_wasPaused=!1;onHandlePaused(){let e=this.evaluatePaused();if(this._wasPaused!==e){my&&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&&(ht._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 Se.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){let i=new cy(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new Se.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=Se.NearestFilter,this._renderTarget.texture.magFilter=Se.NearestFilter,this._renderTarget.texture.format=Se.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=ht;I(G,"_current");var gy=P("debugaroverlay"),Ui="ar",nm="quit-ar",Fl=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(nm);if(!r||r.length<=0)console.warn(`Missing quit AR elements, creating fallback X button. Use class name '${nm}' 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,Ha()&&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];gy&&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 by=P("debugdebug"),rm=P("noerrors"),id=new Map,zS=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 ru(){return sm}function om(){if(rm)return;if(ct()){by&&console.log(window.location.hostname);let e=console.error;console.error=(...t)=>{e.apply(console,t),Vs(2,t,null,null),nd()},window.addEventListener("error",t=>{!t||(Vs(2,t.error,t.filename,t.lineno),nd())},!0),window.addEventListener("unhandledrejection",t=>{!t||(Vs(2,t.reason.message,t.reason.stack),nd())})}}var sm=0;function nd(){sm+=1}function Vs(o,e,t,i){if(rm)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}vy(o,r,e)}}var rd=new Set;function vy(o,e,t){let i=_y(e);if(i.childElementCount>=20||rd.has(t))return;rd.add(t);let n=wy(o,t);i.prepend(n),setTimeout(()=>{rd.delete(t),xy(n)},1e4)}var yy=`
176
+ #endif`);Bi.UniformsLib.lightmap.lightmapScaleOffset={value:new Bi.Vector4(1,1,0,0)};var Yv=P("debugplayerview");var Zu=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}},Il=class{context;playerViews=new Map;constructor(e){this.context=e}setPlayerView(e,t,i){let n=this.playerViews.get(e);n||(n=new Zu(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&&(Yv&&console.log("REMOVE",e),i.removed=!0,this.playerViews.delete(e))}};var $u={};hp($u,{Behaviour:()=>M,Component:()=>Tt,GameObject:()=>R});import*as nt from"three";var R=class extends nt.Object3D{guid;static setActive(e,t,i=!0,n=!0){!e||(Io(e,t,n),Ro(e),t&&i&&Za(G.Current,e))}static isActiveSelf(e){return gn(e)}static isActiveInHierarchy(e){return pf(e)}static markAsInstancedRendered(e,t){ff(e,t)}static isUsingInstancing(e){return ll(e)}static foreachComponent(e,t,i=!0){return ai(e,t,i)}static instantiateSynced(e,t){return e?il(e,t):null}static instantiate(e,t=null){return jr(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=>{gu(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=>{Gp(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 si(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");af(e,t)}static removeComponent(e){return rl(e.gameObject,e),e}static getOrAddComponent(e,t){return ol(e,t)}static getComponent(e,t){return e===null?null:Hr(e,t)}static getComponents(e,t,i=null){return e===null?i??[]:Oo(e,t,i)}static findByGuid(e,t){return Lr(e,t)}static findObjectOfType(e,t,i=!0){return uf(e,t??G.Current,i)}static findObjectsOfType(e,t){let i=[];return df(e,i,t),i}static getComponentInChildren(e,t){return Fr(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 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]}},ci=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),lf(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 nt.Vector3),B(this.gameObject,this._worldPosition),this._worldPosition}set worldPosition(e){ie(this.gameObject,e)}setWorldPosition(e,t,i){ci._worldPositionBuffer.set(e,t,i),this.worldPosition=ci._worldPositionBuffer}get worldQuaternion(){return this._worldQuaternion||(this._worldQuaternion=new nt.Quaternion),me(this.gameObject,this._worldQuaternion)}set worldQuaternion(e){et(this.gameObject,e)}setWorldQuaternion(e,t,i,n){ci._worldQuaternionBuffer.set(e,t,i,n),this.worldQuaternion=ci._worldQuaternionBuffer}get worldEuler(){return this._worldEuler||(this._worldEuler=new nt.Euler),this._worldEuler.setFromQuaternion(this.worldQuaternion),this._worldEuler}set worldEuler(e){this._worldQuaternion||(this._worldQuaternion=new nt.Quaternion),this._worldQuaternion?.setFromEuler(e),this.worldQuaternion=this._worldQuaternion}get worldRotation(){let e=this.worldEuler;this._worldRotation||(this._worldRotation=new nt.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)),ci._worldEulerBuffer.set(e,t,i),ci._worldQuaternionBuffer.setFromEuler(ci._worldEulerBuffer),this.worldQuaternion=ci._worldQuaternionBuffer}get forward(){return ci._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=ci;I(Tt,"_worldPositionBuffer",new nt.Vector3),I(Tt,"_worldQuaternionBuffer",new nt.Quaternion),I(Tt,"_worldEulerBuffer",new nt.Euler),I(Tt,"_tempQuaternionBuffer2",new nt.Quaternion),I(Tt,"_forward",new nt.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=Zf(o);else for(let e=0;e<o.length;e++){let t=o[e];o[e]=Zf(t)}return function(e,t){Object.getOwnPropertyDescriptor(e,"$serializedTypes")||(e.$serializedTypes={});let i=e.$serializedTypes=e.$serializedTypes||{};i[t]=o}};function Zf(o){switch(o?.prototype?.constructor?.name){case"Number":case"String":case"Boolean":return null}return o}import{Color as Kv}from"three";var Q=class extends Kv{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 Jv,OrthographicCamera as Zv,PerspectiveCamera as ed,Ray as $v,sRGBEncoding as ey,Vector3 as $f}from"three";var Al=P("debugcam"),em=P("debugscreenpointtoray"),Dl=class extends M{get isCamera(){return!0}get aspect(){return this._cam instanceof ed?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 ed&&(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=Dl._origin;r.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(r),em&&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=Dl._direction.set(r.x,r.y,r.z),a=B(n);return s.sub(a),s.normalize(),i?(i.set(a,s),i):new $v(a.clone(),s.clone())}awake(){this.sourceId||console.warn("Camera has no source - the camera should be exported inside a gltf",this.name),em&&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(){Al&&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 ed(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(Al&&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;Al&&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 td(this)),this._skybox.enable()}},Z=Dl;I(Z,"_origin",new $f),I(Z,"_direction",new $f),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 td=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&&(Al&&console.log("Set skybox",this._camera,this._skybox),this._skybox.encoding=ey,this._skybox.mapping=Jv,this.context.scene.background=this._skybox):console.warn("Failed to load/find skybox texture",this)}};import{Object3D as iy}from"three";var _n=class extends M{constraintActive=!0;locked=!1;sources=[]};v([y(iy)],_n.prototype,"sources",2);import{Box3 as ny,Vector2 as ry,Vector3 as Ll}from"three";import{OrbitControls as oy}from"three/examples/jsm/controls/OrbitControls";var jl=P("freecam"),sy={LEFT:"",UP:"",RIGHT:"",BOTTOM:""},id,Ve=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 Ll,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 oy(t,this.context.renderer.domElement),id===void 0&&(id={...this._controls.keys})),this._controls&&(jl&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,xo()&&(this.doubleClickToFocus=!0)),this._controls.enableDamping=this.enableDamping,this._controls.keys=this.enableKeys?id:sy,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,t?.type==="PerspectiveCamera"?jl||(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom):jl||(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 Ll(0,0,-1).applyMatrix4(e.cam.matrixWorld);this.setTarget(t,!0)}}this.startCoroutine(this.startRaycastDelayed())}*startRaycastDelayed(){if(yield,!this.setFromTargetPosition()){let e=new be;e.screenPoint=new ry(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;Lp(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))}!jl&&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 Ll,s=new Ll,a=new ny;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(_n)],Ve.prototype,"lookAtConstraint",2);import{Object3D as ay,Vector3 as ly}from"three";function tm(o,e){let t=e,i=new ay;o.add(i);let n=new Z,r=si(i,n,!0);r.sourceId=t,r.clearFlags=2,r.backgroundColor=new Q(.5,.5,.5,1);let s=si(i,new Ve,!1);return s.sourceId=t,i.position.x=-2,i.position.y=2,i.position.z=2,jp(i,new ly(0,0,0)),r}var py=P("debugSetup"),fy=P("stats"),my=P("debugactive"),Hl={};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 sl(o,e){if(!o)return;let t=e?.new_scripts??G.Current.new_scripts;t.includes(o)||t.push(o)}var ht=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=fy?im.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 uy({antialias:!0}),this.renderer.toneMappingExposure=1,this.renderer.toneMapping=Se.NoToneMapping,this.renderer.setClearColor(new Se.Color("lightgrey"),0),this.renderer.antialias=!0,this.renderer.alpha=!1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=Se.PCFSoftShadowMap,this.renderer.setSize(this.domWidth,this.domHeight),this.renderer.outputEncoding=Se.sRGBEncoding,this.renderer.physicallyCorrectLights=!0,this.composer=r?new dy(this.renderer):null}this.scene=new Se.Scene,this.application=new Ol(this),this.time=new ul,this.input=new Qa(this),this.physics=new qn(this),this.connection=new vl(this),this.assets=new El,this.rendererData=new Sl(this),this.addressables=new Pl(this),this.lightmaps=new Ml(this),this.players=new Il(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){if(!e)return;let t=this.domWidth,i=this.domHeight,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{ht.Current=this,e&&await e(this,t)}catch(n){console.error(n),i=!1}if(!!i){this.isManagedExternally||this.domElement.prepend(this.renderer.domElement),Zp(this),Jp(this),Vf(this),ht._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++)ht._current=this,await this.post_setup_callbacks[n](this);if(!this.mainCamera){ht._current=this;let n=null;ai(this.scene,r=>{let s=r;if(s?.isCamera){if(Dr(s.gameObject),!s.activeAndEnabled)return;if(s.tag==="MainCamera")return n=s,!0;n=s}}),n?this.setCurrentCamera(n):(console.error("MISSING camera",this),tm(this.scene,"unknown"))}if(ht._current=this,bn(this),!this.isManagedExternally&&this.composer&&this.mainCamera){let n=new hy(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)),py&&Xs(this.scene,!0)}}render(e,t){if(this._currentFrameEvent=-1,this.onHandlePaused())return;for(this._stats?.begin(),ht._current=this,this.time.update(),bn(this),Ro(),Za(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&&(ht._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&&(ht._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&&(ht._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&&(ht._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._currentFrameEvent=-10,this._isRendering=!0,this.renderRequiredTextures(),this.isManagedExternally||(this.composer&&!this.isInXR?this.composer.render():this.mainCamera&&this.renderer.render(this.scene,this.mainCamera)),this._isRendering=!1,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&&(ht._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()}}_wasPaused=!1;onHandlePaused(){let e=this.evaluatePaused();if(this._wasPaused!==e){my&&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&&(ht._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 Se.WebGLRenderTarget(this.domWidth,this.domHeight),this._requireDepthTexture){let i=new cy(this.domWidth,this.domHeight);this._renderTarget.depthTexture=i}this._requireColorTexture&&(this._renderTarget.texture=new Se.Texture,this._renderTarget.texture.generateMipmaps=!1,this._renderTarget.texture.minFilter=Se.NearestFilter,this._renderTarget.texture.magFilter=Se.NearestFilter,this._renderTarget.texture.format=Se.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=ht;I(G,"_current");var gy=P("debugaroverlay"),Ui="ar",nm="quit-ar",Fl=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(nm);if(!r||r.length<=0)console.warn(`Missing quit AR elements, creating fallback X button. Use class name '${nm}' 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,Ha()&&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];gy&&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 by=P("debugdebug"),rm=P("noerrors"),nd=new Map,zS=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 ru(){return sm}function om(){if(rm)return;if(ct()){by&&console.log(window.location.hostname);let e=console.error;console.error=(...t)=>{e.apply(console,t),Vs(2,t,null,null),rd()},window.addEventListener("error",t=>{!t||(Vs(2,t.error,t.filename,t.lineno),rd())},!0),window.addEventListener("unhandledrejection",t=>{!t||(Vs(2,t.reason.message,t.reason.stack),rd())})}}var sm=0;function rd(){sm+=1}function Vs(o,e,t,i){if(rm)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}vy(o,r,e)}}var od=new Set;function vy(o,e,t){let i=_y(e);if(i.childElementCount>=20||od.has(t))return;od.add(t);let n=wy(o,t);i.prepend(n),setTimeout(()=>{od.delete(t),xy(n)},1e4)}var yy=`
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 _y(o){if(id.has(o))return id.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),id.set(o,e);let t=document.createElement("style");return t.innerHTML=yy,e.appendChild(t),e}}var am=Symbol("logtype"),Bl=new Map;function xy(o){o.remove();let e=o[am],t=Bl.get(e)??[];t.push(o),Bl.set(e,t)}function wy(o,e){if(Bl.has(o)){let i=Bl.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[am]=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 ui=function(o,e){return function(t,i,n){Ey(t,i,n,o,e)}};function Ey(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[Xa]===!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)}}}}var Uo=P("debugloadingbar"),Cy=P("debugloadingbarrendering");var ia=0,lm;function od(o){Uo&&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?(lm!==o.name&&(ia=0),lm=o.name,ia+=(1-ia)*.001,Uo&&Xn("Loading "+o.name+" did not report total size")):ia=o.progress.loaded/t;let i=o.index/e+ia/e;return H.clamp01(i)}var Ul=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(Uo&&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(Ul.LoadingContainerClassName)){if(!this._allowCustomLoadingElement){Uo&&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=od(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;Cy&&(e=1/500),this._progressLoop=setInterval(()=>{if(this.loadingProgress>=1&&this._progress>=t){this._loadingElement&&(Uo&&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){Uo&&!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??Ul.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}},na=Ul;I(na,"LoadingContainerClassName","loading");import{DRACOLoader as sd}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as cm}from"three/examples/jsm/loaders/KTX2Loader.js";var ra=P("debugdecoders"),di,$n;function ad(o){o!==void 0&&typeof o=="string"&&(di||(di=new sd),ra&&console.log("Setting draco decoder path to",o),di.setDecoderPath(o))}function ld(o){o!==void 0&&typeof o=="string"&&(di||(di=new sd),ra&&console.log("Setting draco decoder type to",o),di.setDecoderConfig({type:o}))}function cd(o){o!==void 0&&typeof o=="string"&&($n||($n=new cm),ra&&console.log("Setting ktx2 transcoder path to",o),$n.setTranscoderPath(o))}function xn(o,e){di||(di=new sd,di.setDecoderPath("./include/draco/"),di.setDecoderConfig({type:"js"}),ra&&console.log("Setting draco decoder path to","./include/draco/")),$n||($n=new cm,$n.setTranscoderPath("./include/ktx2/"),ra&&console.log("Setting ktx2 transcoder path to","./include/ktx2/"),e.renderer&&$n.detectSupport(e.renderer)),o.setDRACOLoader(di),o.setKTX2Loader($n)}import{AnimationClip as Ty,MathUtils as Ry}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 dm(o,e){return{name:"",isLooping:!1,guid:e?.generateUUID()??Ry.generateUUID(),index:-1,clip:new Ty(o,1,[])}}import{AnimationClip as Sy,AnimationMixer as Py,AxesHelper as Oy,Euler as hm,LoopOnce as ky,Quaternion as hi,Vector3 as oa}from"three";import*as Vl from"three";var Gi=P("debuganimatorcontroller"),ud=P("debugrootmotion"),fi=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 Py(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||Fp(r)||r.tracks!==void 0));return console.assert(e!==this.model),new fi(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(ky,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 dd(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=dm(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 Sy(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},Gl=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 oa;rotationChange=new hi;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 Vl.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 hi),we.effectiveSpaceRotation[i.uuid]||(we.effectiveSpaceRotation[i.uuid]=new hi),we.clipOffsetRotation[i.uuid]=new hi,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 Vl.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;ud&&i.add(new Oy),we.lastObjPosition[i.uuid]||(we.lastObjPosition[i.uuid]=new oa);let n=new oa,r=new oa,s=0;this.positionWrapper=new Gl(t,(a,c)=>{let u=this.action.getEffectiveWeight();if(ud&&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(ud){let a=t.values,c=new hm().setFromQuaternion(new hi(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 hi().set(a[u],a[u+1],a[u+2],a[u+3]),d=new hm().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 hi);let n=0,r=new hi,s=new hi;this.rotationWrapper=new Gl(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)}},pi=we;I(pi,"lastObjPosition",{}),I(pi,"lastObjRotation",{}),I(pi,"firstKeyframeRotation",{}),I(pi,"spaceRotation",{}),I(pi,"effectiveSpaceRotation",{}),I(pi,"clipOffsetRotation",{}),I(pi,"identityQuaternion",new hi);var dd=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 pi(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 oa;summedRotation=new hi;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),pi.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 pm=P("debuganimator"),Pe=class extends M{applyRootMotion=!1;hasRootMotion=!1;keepAnimatorControllerStateOnDisable=!1;set runtimeAnimatorController(e){this._animatorController&&this._animatorController.model===e||(e?e instanceof fi?this._animatorController=e:(pm&&console.log("Assign animator controller",e,this),this._animatorController=new fi(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(pm&&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()],Pe.prototype,"applyRootMotion",2),v([y()],Pe.prototype,"hasRootMotion",2),v([y()],Pe.prototype,"keepAnimatorControllerStateOnDisable",2),v([y()],Pe.prototype,"runtimeAnimatorController",1);import*as Vr from"three";import{AnimationClip as My}from"three";var zl=P("debuganimation"),Bt=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){zl&&console.log("Assign clip during serialization",e),this._tempAnimationClipBeforeGameObjectExisted=e;return}!e||(zl&&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){zl&&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(){zl&&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&&oe.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?Vr.LoopRepeat:Vr.LoopOnce:e.loop=Vr.LoopOnce,e.play();let s=new hd(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 Vr.AnimationMixer(this.gameObject)))}};v([y()],Bt.prototype,"playAutomatically",2),v([y()],Bt.prototype,"randomStartTime",2),v([y()],Bt.prototype,"loop",2),v([y()],Bt.prototype,"clampWhenFinished",2),v([y(My)],Bt.prototype,"clips",1);var hd=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 Ng}from"three/examples/jsm/loaders/GLTFLoader.js";import*as X from"three";import{RawShaderMaterial as Ay}from"three";var wn=P("debugshaders"),Vo="NEEDLE_techniques_webgl";var pd=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 Ay{identifier;onBeforeRenderSceneCallback=this.onBeforeRenderScene.bind(this);clone(){let e=super.clone();return fm(e),e}constructor(e,...t){super(...t),this.identifier=e,wn&&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}wn&&console.log(t);let i=t.array,n=t.texture;this.uniforms.unity_SpecCube0={value:n},Xu(this.uniforms,i);let r=Math.sqrt(Math.PI*.5);this.uniforms.unity_SpecCube0_HDR={value:new X.Vector4(r,r,r,r)},wn&&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 pd;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 Wl=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 wn&&console.log(e,this.parser.json.materials),null;if(!t.extensions||!t.extensions[Vo])return wn&&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;wn&&console.log(n);let r=n.techniques[i];return r?new Promise(async(s,a)=>{let c=await Yf(n,r.program),u=c?.fragmentShader,l=c?.vertexShader;if(!u||!l)return a();wn&&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){wn&&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),Xu(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:Qf},console.warn("Missing/unassigned texture, fallback to white: "+f);break;default:console.warn("TODO: EXPECTED UNIFORM / fallback NOT SET: "+f,h[m]);break}}wn&&console.log(E.uuid,d),fm(E),s(E)}):null}};function fm(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 er=pe,Nl="$___Export_Components",Dy="NEEDLE_components",fd=class{[Ar]},md=class{node;nodeIndex;nodeDef;constructor(e,t,i){this.node=e,this.nodeIndex=t,this.nodeDef=i}},zo=class{get name(){return Dy}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[Nl]=i)}afterSerializeUserData(e,t){if(e.type==="Scene"&&er&&console.log("DONE",JSON.stringify(t)),e[Nl]===void 0)return;let i=e[Nl];delete e[Nl],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 md(e,i,t);this.exportContext[i]=n,this.objectToNodeMap[e.uuid]=i}afterParse(e){er&&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 fd;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=Ke().writeBuiltinComponentData(l,this.context);d!==null&&u.push(d)}u.length>0&&(c[Ar]=u,er&&console.log("DID WRITE",n,"nodeIndex",s,u))}}beforeRoot(){return er&&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];er&&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;er&&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[Ar];if(i){let n=new Array;er&&console.log(e.name,i);for(let r in i){let s=i[r];er&&console.log("Serialized data",JSON.parse(JSON.stringify(s))),s&&this.parser&&n.push(Eo(this.parser,s)),e.userData=e.userData||{},e.userData[Ar]=e.userData[Ar]||[],e.userData[Ar].push(s)}await Promise.all(n)}}};import{EXRLoader as Ly}from"three/examples/jsm/loaders/EXRLoader";var gd=P("debugexr"),Xl=class{parser;name;constructor(e){this.parser=e,this.name="EXT_texture_exr",gd&&console.log(e)}loadTexture(e){let t=this.name,i=this.parser,r=i.json.textures[e];if(gd&&console.log("EXT_texture_exr.loadTexture",e,r),!r.extensions||!r.extensions[t])return null;let s=r.extensions[t],a=new Ly(i.options.manager);return gd&&console.log("EXT_texture_exr.loadTexture",s,a),i.loadTextureImage(e,s.source,a)}};window.addEventListener("unhandledrejection",o=>{});var mm="NEEDLE_gameobject_data",Ql=class{get name(){return mm}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[mm];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 jy,Color as gm,HemisphereLight as Hy}from"three";var bm="NEEDLE_lighting_settings",Wo=P("debugenvlight"),ql=class{get name(){return bm}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[bm];if(i){Wo&&console.log(i);let n=R.addNewComponent(e.scene,bd,!1);n.sourceId=this.sourceId,n.ambientIntensity=i.ambientIntensity,n.ambientLight=new gm().fromArray(i.ambientLight),Array.isArray(i.ambientTrilight)&&(n.ambientTrilight=i.ambientTrilight.map(r=>new gm().fromArray(r))),n.ambientMode=i.ambientMode,n.environmentReflectionSource=i.environmentReflectionSource,this.context&&this.context.rendererData.registerSceneLightSettings(n)}}return null}},bd=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 jy(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 Hy(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 Fy,LessStencilFunc as By,EqualStencilFunc as Uy,LessEqualStencilFunc as Gy,GreaterStencilFunc as Vy,NotEqualStencilFunc as zy,GreaterEqualStencilFunc as Wy,AlwaysStencilFunc as Ny,ZeroStencilOp as Xy,KeepStencilOp as Qy,ReplaceStencilOp as qy,IncrementStencilOp as Yy,DecrementStencilOp as Ky,IncrementWrapStencilOp as Jy,DecrementWrapStencilOp as Zy,InvertStencilOp as $y}from"three";var vd=P("debugstencil");function e_(o,e){return(o&1<<e.layer)!=0}var zr=class{static applyStencil(e){if(!e)return;let t=e.sourceId;if(vd&&console.log(t,zr.stencils),!t)return;let i=zr.stencils[t];if(!!i)for(let n=i.length-1;n>=0;n--){let r=i[n];if(e_(r.layer,e)){vd&&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[i_];if(i){vd&&console.log(i);let n=i.stencil;if(n&&Array.isArray(n))for(let r of n){let s={...r};s.compareFunc=t_(s.compareFunc),s.passOp=yd(s.passOp),s.failOp=yd(s.failOp),s.zFailOp=yd(s.zFailOp),zr.stencils[this.source]||(zr.stencils[this.source]=[]),zr.stencils[this.source].push(s)}}}return null}},Wr=zr;I(Wr,"stencils",{});function yd(o){switch(o){case 0:return Qy;case 1:return Xy;case 2:return qy;case 3:return Yy;case 4:return Ky;case 6:return Jy;case 7:return Zy;case 5:return $y}return 0}function t_(o){switch(o){case 1:return Fy;case 2:return By;case 3:return Uy;case 4:return Gy;case 5:return Vy;case 6:return zy;case 7:return Wy;case 8:return Ny}return 0}var i_="NEEDLE_render_objects";import{TextureLoader as n_}from"three";import{GLTFLoader as r_}from"three/examples/jsm/loaders/GLTFLoader";var _d="NEEDLE_progressive",ze=P("debugprogressive"),wd=new Map,xd=!1;ze&&window.addEventListener("keyup",o=>{o.key==="p"&&(wd.forEach((e,t)=>{Object.entries(e).forEach(([i,n])=>{xd?t[i]=n.lod0:t[i]=n.original,t.needsUpdate=!0})}),xd=!xd)});var sa=class{static assignTextureLOD(e,t,i,n=0){if(!!i)for(let r of Object.keys(i)){let s=i[r];s?.isTexture===!0&&(ze&&console.log(`-----------
213
+ `;function _y(o){if(nd.has(o))return nd.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),nd.set(o,e);let t=document.createElement("style");return t.innerHTML=yy,e.appendChild(t),e}}var am=Symbol("logtype"),Bl=new Map;function xy(o){o.remove();let e=o[am],t=Bl.get(e)??[];t.push(o),Bl.set(e,t)}function wy(o,e){if(Bl.has(o)){let i=Bl.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[am]=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 ui=function(o,e){return function(t,i,n){Ey(t,i,n,o,e)}};function Ey(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[Xa]===!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)}}}}var Uo=P("debugloadingbar"),Cy=P("debugloadingbarrendering");var ia=0,lm;function sd(o){Uo&&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?(lm!==o.name&&(ia=0),lm=o.name,ia+=(1-ia)*.001,Uo&&Xn("Loading "+o.name+" did not report total size")):ia=o.progress.loaded/t;let i=o.index/e+ia/e;return H.clamp01(i)}var Ul=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(Uo&&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(Ul.LoadingContainerClassName)){if(!this._allowCustomLoadingElement){Uo&&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=sd(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;Cy&&(e=1/500),this._progressLoop=setInterval(()=>{if(this.loadingProgress>=1&&this._progress>=t){this._loadingElement&&(Uo&&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){Uo&&!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??Ul.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}},na=Ul;I(na,"LoadingContainerClassName","loading");import{DRACOLoader as ad}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as cm}from"three/examples/jsm/loaders/KTX2Loader.js";var ra=P("debugdecoders"),di,$n;function ld(o){o!==void 0&&typeof o=="string"&&(di||(di=new ad),ra&&console.log("Setting draco decoder path to",o),di.setDecoderPath(o))}function cd(o){o!==void 0&&typeof o=="string"&&(di||(di=new ad),ra&&console.log("Setting draco decoder type to",o),di.setDecoderConfig({type:o}))}function ud(o){o!==void 0&&typeof o=="string"&&($n||($n=new cm),ra&&console.log("Setting ktx2 transcoder path to",o),$n.setTranscoderPath(o))}function xn(o,e){di||(di=new ad,di.setDecoderPath("./include/draco/"),di.setDecoderConfig({type:"js"}),ra&&console.log("Setting draco decoder path to","./include/draco/")),$n||($n=new cm,$n.setTranscoderPath("./include/ktx2/"),ra&&console.log("Setting ktx2 transcoder path to","./include/ktx2/"),e.renderer&&$n.detectSupport(e.renderer)),o.setDRACOLoader(di),o.setKTX2Loader($n)}import{AnimationClip as Ty,MathUtils as Ry}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 dm(o,e){return{name:"",isLooping:!1,guid:e?.generateUUID()??Ry.generateUUID(),index:-1,clip:new Ty(o,1,[])}}import{AnimationClip as Sy,AnimationMixer as Py,AxesHelper as Oy,Euler as hm,LoopOnce as ky,Quaternion as hi,Vector3 as oa}from"three";import*as Vl from"three";var Gi=P("debuganimatorcontroller"),dd=P("debugrootmotion"),fi=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 Py(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||Bp(r)||r.tracks!==void 0));return console.assert(e!==this.model),new fi(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(ky,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 hd(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=dm(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 Sy(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},Gl=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 oa;rotationChange=new hi;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 Vl.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 hi),we.effectiveSpaceRotation[i.uuid]||(we.effectiveSpaceRotation[i.uuid]=new hi),we.clipOffsetRotation[i.uuid]=new hi,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 Vl.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;dd&&i.add(new Oy),we.lastObjPosition[i.uuid]||(we.lastObjPosition[i.uuid]=new oa);let n=new oa,r=new oa,s=0;this.positionWrapper=new Gl(t,(a,c)=>{let u=this.action.getEffectiveWeight();if(dd&&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(dd){let a=t.values,c=new hm().setFromQuaternion(new hi(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 hi().set(a[u],a[u+1],a[u+2],a[u+3]),d=new hm().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 hi);let n=0,r=new hi,s=new hi;this.rotationWrapper=new Gl(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)}},pi=we;I(pi,"lastObjPosition",{}),I(pi,"lastObjRotation",{}),I(pi,"firstKeyframeRotation",{}),I(pi,"spaceRotation",{}),I(pi,"effectiveSpaceRotation",{}),I(pi,"clipOffsetRotation",{}),I(pi,"identityQuaternion",new hi);var hd=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 pi(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 oa;summedRotation=new hi;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),pi.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 pm=P("debuganimator"),Pe=class extends M{applyRootMotion=!1;hasRootMotion=!1;keepAnimatorControllerStateOnDisable=!1;set runtimeAnimatorController(e){this._animatorController&&this._animatorController.model===e||(e?e instanceof fi?this._animatorController=e:(pm&&console.log("Assign animator controller",e,this),this._animatorController=new fi(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(pm&&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()],Pe.prototype,"applyRootMotion",2),v([y()],Pe.prototype,"hasRootMotion",2),v([y()],Pe.prototype,"keepAnimatorControllerStateOnDisable",2),v([y()],Pe.prototype,"runtimeAnimatorController",1);import*as Vr from"three";import{AnimationClip as My}from"three";var zl=P("debuganimation"),Bt=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){zl&&console.log("Assign clip during serialization",e),this._tempAnimationClipBeforeGameObjectExisted=e;return}!e||(zl&&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){zl&&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(){zl&&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&&oe.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?Vr.LoopRepeat:Vr.LoopOnce:e.loop=Vr.LoopOnce,e.play();let s=new pd(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 Vr.AnimationMixer(this.gameObject)))}};v([y()],Bt.prototype,"playAutomatically",2),v([y()],Bt.prototype,"randomStartTime",2),v([y()],Bt.prototype,"loop",2),v([y()],Bt.prototype,"clampWhenFinished",2),v([y(My)],Bt.prototype,"clips",1);var pd=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 Ng}from"three/examples/jsm/loaders/GLTFLoader.js";import*as X from"three";import{RawShaderMaterial as Ay}from"three";var wn=P("debugshaders"),Vo="NEEDLE_techniques_webgl";var fd=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 Ay{identifier;onBeforeRenderSceneCallback=this.onBeforeRenderScene.bind(this);clone(){let e=super.clone();return fm(e),e}constructor(e,...t){super(...t),this.identifier=e,wn&&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}wn&&console.log(t);let i=t.array,n=t.texture;this.uniforms.unity_SpecCube0={value:n},Qu(this.uniforms,i);let r=Math.sqrt(Math.PI*.5);this.uniforms.unity_SpecCube0_HDR={value:new X.Vector4(r,r,r,r)},wn&&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 fd;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 Wl=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 wn&&console.log(e,this.parser.json.materials),null;if(!t.extensions||!t.extensions[Vo])return wn&&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;wn&&console.log(n);let r=n.techniques[i];return r?new Promise(async(s,a)=>{let c=await Yf(n,r.program),u=c?.fragmentShader,l=c?.vertexShader;if(!u||!l)return a();wn&&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){wn&&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),Qu(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:Qf},console.warn("Missing/unassigned texture, fallback to white: "+f);break;default:console.warn("TODO: EXPECTED UNIFORM / fallback NOT SET: "+f,h[m]);break}}wn&&console.log(E.uuid,d),fm(E),s(E)}):null}};function fm(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 er=pe,Nl="$___Export_Components",Dy="NEEDLE_components",md=class{[Ar]},gd=class{node;nodeIndex;nodeDef;constructor(e,t,i){this.node=e,this.nodeIndex=t,this.nodeDef=i}},zo=class{get name(){return Dy}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[Nl]=i)}afterSerializeUserData(e,t){if(e.type==="Scene"&&er&&console.log("DONE",JSON.stringify(t)),e[Nl]===void 0)return;let i=e[Nl];delete e[Nl],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 gd(e,i,t);this.exportContext[i]=n,this.objectToNodeMap[e.uuid]=i}afterParse(e){er&&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 md;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=Ke().writeBuiltinComponentData(l,this.context);d!==null&&u.push(d)}u.length>0&&(c[Ar]=u,er&&console.log("DID WRITE",n,"nodeIndex",s,u))}}beforeRoot(){return er&&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];er&&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;er&&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[Ar];if(i){let n=new Array;er&&console.log(e.name,i);for(let r in i){let s=i[r];er&&console.log("Serialized data",JSON.parse(JSON.stringify(s))),s&&this.parser&&n.push(Eo(this.parser,s)),e.userData=e.userData||{},e.userData[Ar]=e.userData[Ar]||[],e.userData[Ar].push(s)}await Promise.all(n)}}};import{EXRLoader as Ly}from"three/examples/jsm/loaders/EXRLoader";var bd=P("debugexr"),Xl=class{parser;name;constructor(e){this.parser=e,this.name="EXT_texture_exr",bd&&console.log(e)}loadTexture(e){let t=this.name,i=this.parser,r=i.json.textures[e];if(bd&&console.log("EXT_texture_exr.loadTexture",e,r),!r.extensions||!r.extensions[t])return null;let s=r.extensions[t],a=new Ly(i.options.manager);return bd&&console.log("EXT_texture_exr.loadTexture",s,a),i.loadTextureImage(e,s.source,a)}};window.addEventListener("unhandledrejection",o=>{});var mm="NEEDLE_gameobject_data",Ql=class{get name(){return mm}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[mm];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 jy,Color as gm,HemisphereLight as Hy}from"three";var bm="NEEDLE_lighting_settings",Wo=P("debugenvlight"),ql=class{get name(){return bm}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[bm];if(i){Wo&&console.log(i);let n=R.addNewComponent(e.scene,vd,!1);n.sourceId=this.sourceId,n.ambientIntensity=i.ambientIntensity,n.ambientLight=new gm().fromArray(i.ambientLight),Array.isArray(i.ambientTrilight)&&(n.ambientTrilight=i.ambientTrilight.map(r=>new gm().fromArray(r))),n.ambientMode=i.ambientMode,n.environmentReflectionSource=i.environmentReflectionSource,this.context&&this.context.rendererData.registerSceneLightSettings(n)}}return null}},vd=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 jy(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 Hy(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 Fy,LessStencilFunc as By,EqualStencilFunc as Uy,LessEqualStencilFunc as Gy,GreaterStencilFunc as Vy,NotEqualStencilFunc as zy,GreaterEqualStencilFunc as Wy,AlwaysStencilFunc as Ny,ZeroStencilOp as Xy,KeepStencilOp as Qy,ReplaceStencilOp as qy,IncrementStencilOp as Yy,DecrementStencilOp as Ky,IncrementWrapStencilOp as Jy,DecrementWrapStencilOp as Zy,InvertStencilOp as $y}from"three";var yd=P("debugstencil");function e_(o,e){return(o&1<<e.layer)!=0}var zr=class{static applyStencil(e){if(!e)return;let t=e.sourceId;if(yd&&console.log(t,zr.stencils),!t)return;let i=zr.stencils[t];if(!!i)for(let n=i.length-1;n>=0;n--){let r=i[n];if(e_(r.layer,e)){yd&&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[i_];if(i){yd&&console.log(i);let n=i.stencil;if(n&&Array.isArray(n))for(let r of n){let s={...r};s.compareFunc=t_(s.compareFunc),s.passOp=_d(s.passOp),s.failOp=_d(s.failOp),s.zFailOp=_d(s.zFailOp),zr.stencils[this.source]||(zr.stencils[this.source]=[]),zr.stencils[this.source].push(s)}}}return null}},Wr=zr;I(Wr,"stencils",{});function _d(o){switch(o){case 0:return Qy;case 1:return Xy;case 2:return qy;case 3:return Yy;case 4:return Ky;case 6:return Jy;case 7:return Zy;case 5:return $y}return 0}function t_(o){switch(o){case 1:return Fy;case 2:return By;case 3:return Uy;case 4:return Gy;case 5:return Vy;case 6:return zy;case 7:return Wy;case 8:return Ny}return 0}var i_="NEEDLE_render_objects";import{TextureLoader as n_}from"three";import{GLTFLoader as r_}from"three/examples/jsm/loaders/GLTFLoader";var xd="NEEDLE_progressive",ze=P("debugprogressive"),Ed=new Map,wd=!1;ze&&window.addEventListener("keyup",o=>{o.key==="p"&&(Ed.forEach((e,t)=>{Object.entries(e).forEach(([i,n])=>{wd?t[i]=n.lod0:t[i]=n.original,t.needsUpdate=!0})}),wd=!wd)});var sa=class{static assignTextureLOD(e,t,i,n=0){if(!!i)for(let r of Object.keys(i)){let s=i[r];s?.isTexture===!0&&(ze&&console.log(`-----------
214
214
  `,"FIND",i.name,r,s?.name,s?.userData,s,i),sa.getOrLoadTexture(e,t,i,r,s,n).then(a=>{if(a?.isTexture===!0&&(ze&&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,ze)){let c=wd.get(i);c||(c={},wd.set(i,c));let u=c[r];u||(u=c[r]={original:s,lod0:a}),u.lod0=a}}))}}get name(){return _d}parser;sourceId;context;constructor(e,t,i){this.parser=e,this.sourceId=t,this.context=i}_loading=[];afterRoot(e){return ze&&console.log("AFTER",this.sourceId,e),this.parser.json.textures?.forEach((t,i)=>{if(t?.extensions){let n=t?.extensions[_d];if(n){let r=this.parser.getDependency("texture",i);this._loading.splice(this._loading.indexOf(i),1),r.then(s=>{ze&&console.log("register texture",s.name,s.uuid,n),s.userData.deferred=n,sa.cache.set(s.uuid,n)})}}}),null}static async getOrLoadTexture(e,t,i,n,r,s){let a=r.uuid,c=sa.cache.get(a);if(c){ze&&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 ze&&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 ze&&console.log("Already loading:",i.name+"."+n,l),await this.currentlyLoading[l];let h=new Promise(async(E,_)=>{let x=new r_;xn(x,e),ze&&console.log("Load "+u,i.name,n,c.guid),ze&&await _o(Math.random()*1e3);let m=await x.loadAsync(u),f=m.parser;ze&&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[_d];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,ze&&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{ze&&console.log("Load texture from uri: "+u);let h=await new n_().loadAsync(u);return h?(h.guid=c.guid,h.flipY=!1,h.needsUpdate=!0,h.encoding=r.encoding,ze&&console.log(c,h)):ze&&console.warn("failed loading",u),h}finally{this.onProgressiveLoadEnd(l)}}}else ze&&console.warn("unknown uuid",r.name,r.uuid,r);return null}static beginListenStart(e,t){this._progressiveEventListeners.has(e)||this._progressiveEventListeners.set(e,new Yl),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 Yl),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 Ed(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)}},mi=sa;I(mi,"cache",new Map),I(mi,"resolved",{}),I(mi,"currentlyLoading",{}),I(mi,"_progressiveEventListeners",new Map),I(mi,"_currentProgressiveLoadingInfo",new Map);var Ed=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}},Yl=class{start=[];end=[];onStart(e){for(let t of this.start)t(e)}onEnd(e){for(let t of this.end)t(e)}};function Td(o){let e=new zo;return o.register(t=>(e.parser=t,e)),e}var Cd=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 Rd(o,e,t){o.register(n=>new Ql(n)),o.register(n=>new Va(n)),o.register(n=>new kl(n,e.lightmaps,t)),o.register(n=>new ql(n,t,e)),o.register(n=>new Wl(n,t)),o.register(n=>new Wr(n,t)),o.register(n=>new mi(n,t,e)),o.register(n=>new Xl(n));let i=o.setAnimationPointerResolver;typeof i=="function"&&i.bind(o)(new Cd)}var qh={};dp(qh,{AlignmentConstraint:()=>tr,Animation:()=>Bt,AnimationCurve:()=>gi,AnimationExtension:()=>ir,AnimationTrackHandler:()=>nr,Animator:()=>Pe,AnimatorController:()=>fi,AttachedObject:()=>bt,AudioListener:()=>bi,AudioSource:()=>se,AudioTrackHandler:()=>rr,AvatarBlink_Simple:()=>Qi,AvatarEyeLook_Rotation:()=>qi,AvatarLoader:()=>or,AvatarMarker:()=>le,AvatarModel:()=>Kr,Avatar_Brain_LookAt:()=>Sn,Avatar_MouthShapes:()=>ur,Avatar_MustacheShake:()=>ns,Avatar_POI:()=>ye,AxesHelper:()=>Mn,BaseUIComponent:()=>We,BasicIKConstraint:()=>rs,BoxCollider:()=>pr,BoxGizmo:()=>_i,BoxHelperComponent:()=>Ne,Button:()=>qt,CallInfo:()=>vi,Camera:()=>Z,Canvas:()=>Xe,CanvasGroup:()=>Ln,CapsuleCollider:()=>Xt,CharacterController:()=>Yi,CharacterControllerInput:()=>Ti,Collider:()=>Ot,ColorAdjustments:()=>gr,ColorBySpeedModule:()=>Ri,ColorOverLifetimeModule:()=>jn,ControlTrackHandler:()=>Rn,Deletable:()=>ds,DeleteBox:()=>ro,DeviceFlag:()=>oo,DragControls:()=>Ji,DropListener:()=>br,Duplicatable:()=>Zi,EmissionModule:()=>_t,EventList:()=>de,EventListEvent:()=>Qr,EventSystem:()=>Je,EventTrigger:()=>so,FieldWithDefault:()=>ps,FixedJoint:()=>ms,FlyControls:()=>gs,GltfExport:()=>$t,GltfExportBox:()=>bs,Gradient:()=>Si,Graphic:()=>yt,GraphicRaycaster:()=>vs,GridHelper:()=>Un,GridLayoutGroup:()=>xs,GroundProjectedEnv:()=>tn,HingeJoint:()=>vr,HorizontalLayoutGroup:()=>_s,Image:()=>An,InheritVelocityModule:()=>Jt,InputField:()=>kt,Interactable:()=>Vt,Keyboard:()=>ws,LODGroup:()=>yr,LODModel:()=>nn,LayoutGroup:()=>Gn,Light:()=>qe,LimitVelocityOverLifetimeModule:()=>ue,LogStats:()=>Cs,LookAtConstraint:()=>_n,MainModule:()=>_e,MaskableGraphic:()=>In,MeshCollider:()=>Zr,MeshRenderer:()=>ao,MinMaxCurve:()=>U,MinMaxGradient:()=>Me,NestedGltf:()=>ho,Networking:()=>Pi,NoiseModule:()=>K,ObjectRaycaster:()=>co,OffsetConstraint:()=>rn,OrbitControls:()=>Ve,ParticleBurst:()=>Hn,ParticleSubEmitter:()=>_r,ParticleSystem:()=>ve,ParticleSystemRenderer:()=>on,PlayableDirector:()=>Cn,PlayerColor:()=>xt,PointerEventData:()=>xi,RGBAColor:()=>Q,RawImage:()=>to,Raycaster:()=>lo,Rect:()=>eo,RectTransform:()=>vt,ReflectionProbe:()=>Zt,RegisteredAnimationInfo:()=>Nr,RemoteSkybox:()=>Oi,Renderer:()=>ae,RendererLightmap:()=>Bn,Rigidbody:()=>J,RotationBySpeedModule:()=>Qe,RotationOverLifetimeModule:()=>Ze,ScreenCapture:()=>Er,ShadowCatcher:()=>Cr,ShapeModule:()=>ne,SignalAsset:()=>qr,SignalReceiver:()=>En,SignalReceiverEvent:()=>Yr,SignalTrackHandler:()=>Tn,Size:()=>ss,SizeBySpeedModule:()=>ke,SizeOverLifetimeModule:()=>Kt,SkinnedMeshRenderer:()=>fs,SmoothFollow:()=>Mt,SpatialHtml:()=>Ps,SpatialTrigger:()=>Vn,SpatialTriggerReceiver:()=>It,SpectatorCamera:()=>Os,SphereCollider:()=>hr,Sprite:()=>ei,SpriteRenderer:()=>sn,SpriteSheet:()=>an,SubEmitterSystem:()=>xr,SyncedCamera:()=>Rr,SyncedRoom:()=>ki,SyncedTransform:()=>Pt,TeleportTarget:()=>Jr,TestRunner:()=>Ms,TestSimulateUserData:()=>Is,Text:()=>Ie,TextureSheetAnimationModule:()=>xe,ToneMapping:()=>mr,TrailModule:()=>te,TransformData:()=>Xr,TransformGizmo:()=>fo,UIRaycastUtils:()=>Ei,UIRootComponent:()=>kn,USDZExporter:()=>Sr,UsageMarker:()=>zt,VRUserState:()=>Nt,VelocityOverLifetimeModule:()=>He,VerticalLayoutGroup:()=>ys,VideoPlayer:()=>Te,Voip:()=>rt,Volume:()=>no,VolumeComponent:()=>Ki,VolumeParameter:()=>cs,VolumeProfile:()=>fr,WebAR:()=>cr,WebARSessionRoot:()=>mt,WebXR:()=>V,WebXRAvatar:()=>Gt,WebXRController:()=>$,WebXRSync:()=>On,XRFlag:()=>Ee,XRGrabModel:()=>mo,XRGrabRendering:()=>As,XRRig:()=>lr,XRState:()=>St,__Ignore:()=>Oa});import{Vector3 as o_}from"three";var tr=class extends M{from;to;width=0;centered=!0;_centerPos;awake(){this._centerPos=new o_}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),ie(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)],tr.prototype,"from",2),v([y(R)],tr.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 gi=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)],gi.prototype,"keys",2);import{Matrix4 as s_,Vector3 as vm,Quaternion as a_}from"three";import{buildMatrix as l_}from"three/examples/jsm/exporters/USDZExporter";var No=P("debugusdzanimation"),Nr=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}},Xr=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}},ir=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 Xr(this,e,s,t),a.push(c)),c.addTrack(n);let u=this.rootTargetMap.get(e);u?.includes(s)||u?.push(s)}return new Nr(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 Sd(e,this.dict);this.serializers.push(n),n.registerCallback(t)}},Sd=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 s_,s=new vm,a=new a_,c=new vm(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}: ${l_(r)},`;No&&(m="#"+_+" "+m),e.appendLine(m)}}e.indent--,e.appendLine("}")}};import*as wm from"three";import*as ym from"three";import*as aa from"three";import{PositionalAudioHelper as c_}from"three/examples/jsm/helpers/PositionalAudioHelper.js";var pt=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&&(pt&&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,bi)??R.findObjectOfType(bi,this.context);e?.listener&&(this.sound=new aa.PositionalAudio(e.listener),this.gameObject.add(this.sound))}return this.sound}get ShouldPlay(){return this.shouldPlay}_focusCallback;awake(){this.audioLoader=new aa.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){pt&&console.log("audio buffer loaded"),De.registerWaitForAllowAudio(()=>{pt&&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(),pt&&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(pt&&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?pt&&!this.helper&&(this.helper=new c_(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}loadAndPlay(e){if(e&&(this.clip=e),this.clip&&(pt&&console.log(this.clip),this.clip.endsWith(".mp3")||this.clip.endsWith(".wav"))){if(this.audioLoader||(this.audioLoader=new aa.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===this.clip){pt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=this.clip,pt&&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,pt&&console.log("play",this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying&&this.sound.play()}pause(){pt&&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(){pt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,pt&&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,pt&&console.log("Audio clip ended",this.clip),this.sound.dispatchEvent({type:"ended",target:this}))}},se=De;I(se,"_didCallBeginWaitForUserInteraction",!1),I(se,"callbacks",[]),I(se,"_userInteractionRegistered",!1),v([y()],se.prototype,"clip",2),v([y()],se.prototype,"playOnAwake",2),v([y()],se.prototype,"loop",1),v([y()],se.prototype,"spatialBlend",1),v([y()],se.prototype,"minDistance",1),v([y()],se.prototype,"maxDistance",1),v([y()],se.prototype,"volume",1),v([y()],se.prototype,"rollOffMode",2);var bi=class extends M{get listener(){return this._listener==null&&(this._listener=new ym.AudioListener),this._listener}_listener=null;awake(){se.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 vi=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)}}},u_=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&&u_(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 vi(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 qr=class{guid},Yr=class{signal;reaction;$serializedTypes={signal:qr,reaction:de}},En=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(Yr)],En.prototype,"events",2);var xm=P("debugtimeline");var Kl=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(){xm&&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)):(xm&&console.log("Resolved binding",n,"to",r),t.outputs[i]=r,r instanceof Pe)}else if(n===null){if(t.outputs.splice(i,1),Kl.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=Kl.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 nr;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 wm.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 Tn;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,En);s&&(r.receivers.push(s),this._signalTracks.push(r))}}else if(t.type==="SignalTrack"){let r=new Tn;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 Rn;r.director=this,r.track=t;for(let s of t.clips)r.models.push(s);r.resolveSourceObjects(this.context),this._controlTracks.push(r)}}se.registerWaitForAllowAudio(()=>{let t=R.findObjectOfType(bi,this.context);if(!!t)for(let i of e){let n=new rr;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)}},Cn=Kl;I(Cn,"createTrackFunctions",{});import*as ee from"three";import{Quaternion as h_,Vector3 as p_}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}},Pd=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 ee.Vector3().fromArray(s.values,0),this.rootEndPosition=new ee.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 ee.Quaternion().fromArray(s.values,0),this.rootEndQuaternion=new ee.Quaternion().fromArray(s.values,s.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),Xo)){let a=new ee.Euler().setFromQuaternion(this.rootQuaternionOffset);console.log("ROT",a)}}}},nr=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 ee.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 ee.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 Pd(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 p_(i.x,i.y,i.z)),n.isQuaternion||(t.rotation=new h_(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 ee.Vector3(e.x,e.y,e.z)));let t=this.trackOffset.rotation;t&&(t.isQuaternion||(this.trackOffset.rotation=new ee.Quaternion(t.x,t.y,t.z,t.w)))}}_useclipOffsets=!0;_totalOffsetPosition=new ee.Vector3;_totalOffsetRotation=new ee.Quaternion;_totalOffsetPosition2=new ee.Vector3;_totalOffsetRotation2=new ee.Quaternion;_summedPos=new ee.Vector3;_tempPos=new ee.Vector3;_summedRot=new ee.Quaternion;_tempRot=new ee.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 ee.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 ee.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 ee.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}}},rr=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 ee.Audio(this.listener);i.setVolume(e.asset.volume);let n=new ee.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}}},Tn=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)}}},la=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;la.resolved[r]?n.sourceObject=la.resolved[r]:(n.sourceObject=R.findByGuid(r,e.scene),la.resolved[r]=n.sourceObject)}if(n.sourceObject){let r=R.getComponent(n.sourceObject,Cn);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)}}}}},Rn=la;I(Rn,"resolved",{});import{BoxHelper as F_,BufferGeometry as B_,Color as Dm,Euler as U_,Layers as G_,Line as V_,Mesh as z_,MeshBasicMaterial as W_,Quaternion as sc,Ray as N_,SphereGeometry as X_,Vector2 as Q_,Vector3 as Ci}from"three";import{OculusHandModel as q_}from"three/examples/jsm/webxr/OculusHandModel.js";import{OculusHandPointerModel as Y_}from"three/examples/jsm/webxr/OculusHandPointerModel.js";import{XRControllerModelFactory as K_}from"three/examples/jsm/webxr/XRControllerModelFactory.js";import{GLTFLoader as J_}from"three/examples/jsm/loaders/GLTFLoader.js";import*as Tm from"three";import{Quaternion as m_,Vector3 as Zl}from"three";import{GLTFLoader as f_}from"three/examples/jsm/loaders/GLTFLoader";import*as Jl from"three";var ca=P("debugavatar"),Kr=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))}},or=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(Wn(t,e.scene),r)}}else i=t;if(!i)return null;let n=this.findAvatar(i);return n.isValid?(ca&&console.log("[Custom Avatar] valid config",t,ca?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,ca?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(ca&&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 _l(t,t,0,"no url here go away",!0),!r)?null:(await Ke().parseSync(e,r,null,0))?.scene??null}let i=new f_;return xn(i,e),new Promise((n,r)=>{let s=this.avatarRegistryUrl+"/"+t;i.load(s,async a=>{await Ke().createBuiltinComponents(e,s,a,null,void 0),n(a.scene)},a=>{ca&&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 Jl.Vector3;new Jl.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 Kr(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 Od=class{Mask=17;Has(e){return(this.Mask&e)!==0}Set(e){qo&&console.warn("Set XR flag state to",e),this.Mask=e,Ee.Apply()}Enable(e){this.Mask|=e,Ee.Apply()}Disable(e){this.Mask&=~e,Ee.Apply()}Toggle(e){this.Mask^=e,Ee.Apply()}EnableAll(){this.Mask=-1,Ee.Apply()}DisableAll(){this.Mask=0,Ee.Apply()}},St=Od;I(St,"Global",new Od);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}}},Ee=zi;I(Ee,"registry",[]),I(Ee,"firstApply"),I(Ee,"buffer",new St);import{Object3D as kd}from"three";var sr=P("debugavatar"),yi=class extends M{static getAvatar(e){return e>=0&&e<yi.instances.length?yi.instances[e]:null}static onAvatarMarkerCreated(e){return yi._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return yi._onAvatarMarkerDestroyed.push(e),e}connectionId;avatar;awake(){yi.instances.push(this),sr&&console.log(this);for(let e of yi._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){yi.instances.splice(yi.instances.indexOf(this),1);for(let e of yi._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=yi;I(le,"instances",[]),I(le,"_onNewAvatarMarkerAdded",[]),I(le,"_onAvatarMarkerDestroyed",[]);var ua=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 Zl(1,1,1);handLeftScale=new Zl(1,1,1);handRightScale=new Zl(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 kd;_handLeftTarget=new kd;_handRightTarget=new kd;_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),oe.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(ua.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handLeftScale),oe.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(ua.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handRightScale),oe.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(){sr&&console.log("Destroy avatar",this.guid),this.root?.removeFromParent(),this.avatarMarker?.destroy(),this.lastAvatarId=null,this.head&&ye.Remove(this.context,this.head)}updateVisibility(){let e=this.root;e&&R.setActive(e,this._isVisible)}async setupCustomAvatar(e){if(sr&&console.log("LOAD",e,this),!e||typeof e=="string"&&e.length<=0)return!1;this.head&&ye.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)}sr&&console.log(e);let i=await ua.loader.getOrCreateNewAvatarInstance(this.context,e);if(sr&&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&&ye.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,Ee)),this.flags.length<=0&&this.head){let n=R.addNewComponent(this.head,Ee);n.visibleIn=20,this.flags.push(n),sr&&console.log("Added flag to head: "+n.visibleIn,this.head.name)}return sr&&console.log("[Avatar], is Local? ",this.isLocalAvatar,this.root),this.updateFlags(),this.updateVisibility(),!0}else return sr&&console.warn("build avatar failed"),!1}},Gt=ua;I(Gt,"loader",new or),I(Gt,"invertRotation",new m_().setFromAxisAngle(new Zl(0,1,0),Math.PI));var ye=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(ye,"Pois",[]),I(ye,"LastChangeTime",0);var Md=class{guid;position=new Tm.Vector3},Sn=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 Md;_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 Kn(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&&ie(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(ye.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=ye.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){let t=B(this._currentTargetObject);ie(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=ye.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 g_,Vector3 as Rm}from"three";var Id=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 dn(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 dn(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 g_;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()}},$l=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 Id(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 Rm){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 Rm){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);$l.tempPosition.copy(e);let t=e.sub(this._lastPosition);this._lastPosition.copy($l.tempPosition),this._smoothedVelocity.lerp(t,this.context.time.deltaTime/.1)}}},J=$l;I(J,"tempPosition",new Yo.Vector3),v([ui(),y()],J.prototype,"mass",2),v([ui(),y()],J.prototype,"useGravity",2),v([ui(),y()],J.prototype,"constraints",2),v([ui(),y()],J.prototype,"isKinematic",2),v([ui(),y()],J.prototype,"drag",2),v([ui(),y()],J.prototype,"angularDrag",2),v([ui(),y()],J.prototype,"detectCollisions",2),v([ui(),y()],J.prototype,"sleepThreshold",2),v([ui(),y()],J.prototype,"collisionDetectionMode",2);import*as Pn from"three";var Ce=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 Ce).__init(this.bb_pos,this.bb)}rotation(e){return(e||new Ce).__init(this.bb_pos+12,this.bb)}scale(e){return(e||new Ce).__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 ar=P("debugsync"),Jo="STRS";Ho(Jo,Wt.getRootAsSyncedTransformModel);var Wi=new Ct;function Ad(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(){ar&&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(){ar&&console.log("new instance",this.guid,this),this._receivedDataBefore=!1,this._targetPosition=new Pn.Vector3,this._targetRotation=new Pn.Quaternion,this.lastWorldPos=new Pn.Vector3,this.lastWorldRotation=new Pn.Quaternion,this.rb=R.getComponentInChildren(this.gameObject,J),this.rb&&(this._wasKinematic=this.rb.isKinematic),this.receivedUpdate=!0,this._model=new Kn(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&&Yp(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 Pn.Euler;onReceivedData(e){if(!this.destroyed&&typeof e.guid=="function"&&e.guid()===this.guid){ar&&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){oe.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)&&Hp(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){ar&&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:(ar&&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),oe.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&&oe.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&&(ar&&console.log("reset kinematic",this.rb.name,this._wasKinematic),this.rb.isKinematic=this._wasKinematic),this.gameObject.position.distanceTo(new Pn.Vector3(0,0,0))>1e3&&(ar&&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)){ar&&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=Ad(this.guid,this,!!n);this.context.connection.sendBinary(r)}}};import*as oc from"three-mesh-ui";import{Euler as C_,EventDispatcher as T_,Group as R_,Matrix4 as S_,Mesh as P_,MeshBasicMaterial as O_,Object3D as Mm,Quaternion as rc,RingGeometry as k_,Vector3 as Im}from"three";var ec=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 tc=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(),tc.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",()=>{tc.xrSessionIsGranted=!0})}}},$o=tc;I($o,"xrSessionIsGranted",!1);$o.registerSessionGrantedListener();import*as ic from"three";var Sm=ja(fl(),1);import{AudioAnalyser as b_}from"three";var es="noVoip",ft=P("debugvoip"),v_=P("voip");var Dd=class{id;constructor(e){this.id=e}};var Ld=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(){ft&&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 rt.HasMicrophonePermissions()){console.warn("no permission to use microphone, can not start call");return}ft&&console.log("start voip call"),this.stream=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1}),this.updateMute(this.voip.muteOutput),ft&&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=>{ft&&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){ft&&console.log("call closed",e)}},jd=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,se.userInteractionRegistered||ft&&console.log("Incoming call, waiting for user interaction before opening audio"),se.registerWaitForAllowAudio(async()=>{if(this.call.open&&!this.closed){ft&&console.log("Setup audio and begin listening"),this.stream=new MediaStream([e]);let t=new ic.AudioListener;this.audio=new ic.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}}}),ft&&console.log("call is setup, you should hear something now"),this.analyzer=new b_(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()}},rt=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&&!v_){console.debug("VOIP must be enabled explicitly by url parameter");return}if(wo()&&Fa()){console.log("VOIP is currently not supported on Safari iOS");return}this.peer=new Sm.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 Ld(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];ft&&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){ft&&console.log("Peer connection established and received id"),this.model=new Dd(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){ft&&console.log("CONNECTION",t),t.on("data",function(i){ft&&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(),ft&&console.log("received call"),await rt.HasMicrophonePermissions()){let s=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1});e.answer(s)}else e.answer(null);this.currentIncomingCalls[i]=new jd(this,this.gameObject,e),e.on("stream",s=>{ft&&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 da}from"three";var mt=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 da;_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 da().fromArray(i.transform.matrix).invert()),!0):!1}placeAt(e,t){this._placementPose||(this._placementPose=new da),this._placementPose.copy(t);let i=this.gameObject.matrixWorld.clone().invert();if(this._placementPose.premultiply(i),e){if(this.invertForward){let n=new da().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)),oe.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 da().makeScale(e,e,e),this._placementPose),t.matrix.decompose(t.position,t.quaternion,t.scale),t.updateMatrixWorld(),console.log("Place",t.position))}};v([y()],mt.prototype,"invertForward",2),v([y()],mt.prototype,"arScale",1);import{Object3D as __}from"three";import*as Pm from"three";import{Color as y_}from"three";var _i=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 Pm.BoxHelper(this.gameObject,this.color??16776960):(this.objectBounds=!1,this._gizmoObject=cl(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()],_i.prototype,"objectBounds",2),v([y(y_)],_i.prototype,"color",2),v([y()],_i.prototype,"isGizmo",2);var x_=P("debugrig"),lr=class extends M{awake(){if(x_){let e=new __;e.position.y+=.5,this.gameObject.add(e);let t=e.addNewComponent(_i);t&&(t.isGizmo=!1)}}};import{Quaternion as ha,Vector3 as nc,Vector4 as w_}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 Ce).__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 Ce).__init(this.bb_pos+t,this.bb):null}posRightHand(e){let t=this.bb.__offset(this.bb_pos,18);return t?(e||new Ce).__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 Om=P("debugxr"),pa=P("debugavatar");var Fd="VRUS";Ho(Fd,Oe.getRootAsVrUserStateBuffer);function Hd(){return new Date().getTime()}function E_(o){let e=o&4294967295,t=o/Math.pow(2,32)&1048575;return Ye.create(e,t)}var fa=class{guid;time;avatarId;position=new nc;rotation=new w_;scale=1;posLeftHand=new nc;posRightHand=new nc;rotLeftHand=new ha;rotRightHand=new ha;constructor(e){this.guid=e}update(e,t,i,n,r){this.time=Hd(),this.avatarId=r,this.position.set(t.x,t.y,t.z),e&&this.position.applyMatrix4(e.matrixWorld);let s=fa.quat0,a=fa.quat1;s.set(i.x,i.y,i.z,i.w),s=s.multiplyQuaternions(s,fa.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,E_(this.time)),Oe.addAvatarId(e,n),Oe.addPosition(e,Ce.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,Ce.createVec3(e,this.posLeftHand.x,this.posLeftHand.y,this.posLeftHand.z)),Oe.addPosRightHand(e,Ce.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,Fd);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=fa;I(Nt,"invertRotation",new ha().setFromAxisAngle(new nc(0,1,0),Math.PI)),I(Nt,"quat0",new ha),I(Nt,"quat1",new ha);var On=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(rt,this.context)),pa){let e="debug-avatar-"+pa,t=new Gt(this.context,e,this.webXR);if(this.debugAvatarUser=t,typeof pa=="string"&&pa.length>0)if(await t.setAvatarOverride(pa)){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(Fd,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 Om&&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=Hd();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=Hd();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(){Om&&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 Kn(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 M_(){return Ha()?!0:"xr"in navigator?await navigator.xr.isSessionSupported("immersive-ar")===!0:!1}async function I_(){return"xr"in navigator?await navigator.xr.isSessionSupported("immersive-vr")===!0:!1}var Bd=!1,Ud=!1;M_().then(o=>Bd=o);I_().then(o=>Ud=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&&(Bd||Ud)}static get IsARSupported(){return Bd}static get IsVRSupported(){return Ud}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=ec.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=it.getOrCreate(this.sourceId??"/",this.defaultAvatar,this.context)),!R.findObjectOfType(On,this.context)){let e=R.addNewComponent(this.gameObject,On,!1);e.webXR=this}this.webAR=new cr(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&&(t=Le.createARButton(this),this._arButton=t,n.appendChild(t)),this.createVRButton&&this.enableVR&&(i=Le.createVRButton(this),this._vrButton=i,n.appendChild(i)),setTimeout(()=>{Le.resetButtonStyles(i),Le.resetButtonStyles(t)},1e3)}_transformOrientation=new rc;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++)$.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(lr,this.context);e?this.rig=e.gameObject:(this.rig=new R_,this.rig.rotateY(Math.PI),this.rig.name="XRRig",this.context.scene.add(this.rig))}}_originalCameraParent=null;_originalCameraPosition=new Im;_originalCameraRotation=new rc;_originalXRRigParent=null;_originalXRRigPosition=new Im;_originalXRRigRotation=new rc;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 rc(a.x,a.y,a.z,a.w),u=new C_().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),ie(this.context.mainCamera,this._originalCameraPosition),et(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,es,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 T_),v([y()],V.prototype,"enableVR",2),v([y()],V.prototype,"enableAR",2),v([y(it)],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++)$.Create(this.webxr,s,this.webxr.gameObject,i);(!this.sessionRoot||this.sessionRoot.destroyed||!this.sessionRoot.activeAndEnabled)&&(this.sessionRoot=R.findObjectOfType(mt,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 P_(new k_(.07,.09,32).rotateX(-Math.PI/2),new O_),this.reticle.name="AR Placement reticle",this.reticle.matrixAutoUpdate=!1,this.reticle.visible=!1,this.reticleParent=new Mm,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 Mm),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=A_.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)}},cr=ts;I(cr,"tempWebXRObject");var A_=new S_().identity().makeTranslation(0,0,0);var xi=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 L_}from"three";var j_=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 L_;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){wi.update(e,t)}static markUIDirty(e){wi.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;wi.resetLastSelected();let r=new xi;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 xi;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 be;this._selectUpdateFn??=i=>{t.ray=i.getRay();let n=this.performRaycast(t);if(!n)return;let r=new xi;r.inputSource=i,this.handleIntersections(n,r)},$.addEventListener("select-start",this._selectStartFn),$.addEventListener("select-end",this._selectEndFn),$.addEventListener("update",this._selectUpdateFn),this.context.pre_update_callbacks.push(this.onBeforeUpdate.bind(this)),this.context.input.addEventListener("pointerdown",this.onPointerDown.bind(this))}onDisable(){$.removeEventListener("select-start",this._selectStartFn),$.removeEventListener("select-end",this._selectEndFn),$.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 xi(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,Ve)??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&&j_&&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[gt]){let u=n[gt].gameObject;if(u){if(!Ei.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=wi.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&wi.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){let t=this.currentActiveMeshUIComponents[e];wi.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?R.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}},Je=Xi;I(Je,"_eventSystemMap",new Map),I(Je,"didSearchEventSystem",!1);var wi=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(wi,"lastSelected",null),I(wi,"lastUpdateFrame",[]),I(wi,"needsUpdate",!1);import{AxesHelper as H_}from"three";var is="./include";oc.Block.prototype.interactable={get(){return this.interactive},set(o){this.interactable=o}};var gt=Symbol("shadowDomOwner"),We=class extends M{isRoot(){return this.Root?.gameObject===this.gameObject}markDirty(){Je.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,kn)),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,We),!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[gt]=this,e.traverse(r=>{r[gt]===void 0&&(r[gt]=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 H_(.5)),this.onAfterAddedToScene(),n&&oc.update()}set(e){}traverseOwnedShadowComponents(e,t,i){if(!!e&&e[gt]===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)}},kn=class extends We{awake(){super.awake()}};var Ei=class{static getObject(e){let t=e[gt];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=ai(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=ai(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 ma=P("debugwebxrcontroller");var Jr=class extends M{},je=class extends M{static CreateRaycastLine(){let e=new V_(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 X_(.5,22,22),t=new W_({color:this.raycastColor}),i=new z_(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 J_;xn(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 q_(r.hand,a);return r.hand.add(c),r.hand.traverse(u=>u.layers.set(2)),r.handPointerModel=new Y_(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 U_(-Math.PI/4,0,0)))):null}movementVector=new Ci;worldRot=new sc;joystick=new Q_;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),ma&&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,ie(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)}et(this.raycastLine,this.rayRotation)}else this.raycastLine.visible=n,et(this.raycastLine,this.rayRotation),ie(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;ie(e,u)}}}}else i<.1&&(this.didTeleport=!1);s!==null&&(e.scale.set(s,s,s),e.updateMatrixWorld())}isValidTeleportTarget(e){return R.getComponentInParent(e,Jr)!=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(),ma&&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&&ma&&console.log("Grabbed object changed","original",n,"new",r.grab),r.grab&&(this.grabbed=bt.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||Ei.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 N_;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(ma&&(!this.closeGrabBoundingBoxHelper&&e&&(this.closeGrabBoundingBoxHelper=new F_(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 be;e.layerMask=new G_,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=Ei.getObject(r);break}return t}},$=je;I($,"Factory",new K_),I($,"raycastColor",new Dm(.9,.3,.3)),I($,"raycastNoHitColor",new Dm(.6,.6,.6)),I($,"geometry",new B_().setFromPoints([new Ci(0,0,0),new Ci(0,0,-1)])),I($,"handModels",{}),I($,"eventSubs",{}),I($,"PreviousCameraFarDistance"),I($,"MovementSpeedFactor",1);var ot=class{static AddEventListener(e,t){return ot.Events[e]||(ot.Events[e]=[]),ot.Events[e].push(t),t}static RemoveEventListener(e,t){if(!t||!ot.Events[e])return;let i=ot.Events[e].indexOf(t);i>=0&&ot.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 ma&&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 ot;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};ot.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)),ye.Add(e.context,this.selected),ot.Register(this),this.sync&&(this.sync.fastMode=!0),ot.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};ot.Events.WillFree?.forEach(n=>n(this,e)),ye.Remove(this.controller.context,this.selected),ot.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,ot.Events.DidFree?.forEach(n=>n(this,e))}grabPoint=new Ci;localPositionOffsetToGrab=null;localPositionOffsetToGrab_worldSpace=new Ci;localQuaternionToGrab=new sc(0,0,0,1);targetDir=null;quaternionLerp=null;controllerDir=new Ci;controllerWorldPos=new Ci;lastControllerWorldPos=new Ci;controllerPosDelta=new Ci;totalChangeAlongDirection=0;rigPositionLastFrame=new Ci;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 Ci),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),et(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)),ie(this.selected,i)}if(this.rigidbodies!=null)for(let e of this.rigidbodies)e.wakeUp();oe.markDirty(this.selected,!0)}}},bt=ot;I(bt,"Events",{}),I(bt,"Current",[]);import{Object3D as Lm}from"three";var Z_=P("debugmouth"),ur=class extends M{idle=[];talking=[];marker=null;voip=null;lastMouthChangeTime=0;mouthChangeLength=0;awake(){setTimeout(()=>{this.voip=R.findObjectOfType(rt,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(Lm)],ur.prototype,"idle",2),v([y(Lm)],ur.prototype,"talking",2);var ns=class extends M{voip=null;marker=null;_startPosition=null;awake(){this.voip=R.findObjectOfType(rt,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 $_}from"three";var Qi=class extends M{eyes=[];lastBlinkTime=0;blinkLength=0;eyesOpen=!0;state=null;awake(){this.state=R.getComponentInParent(this.gameObject,Ee)}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($_)],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 Vd}from"three";var zd=class extends M{head=null;eyes=null;target=null;brain=null;awake(){this.brain||(this.brain=R.getComponentInParent(this.gameObject,Sn)),this.brain||(console.log("No look at brain found, adding it now"),this.brain=R.addNewComponent(this.gameObject,Sn)),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=zd.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=zd;I(qi,"forward",new ac.Vector3(0,0,1)),v([y(Vd)],qi.prototype,"head",2),v([y(Vd)],qi.prototype,"eyes",2),v([y(Vd)],qi.prototype,"target",2);import{AxesHelper as ex}from"three";var Mn=class extends M{length=1;depthTest=!0;isGizmo=!0;_axes=null;onEnable(){if(this.isGizmo&&!Di)return;this._axes||(this._axes=new ex(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()],Mn.prototype,"length",2),v([y()],Mn.prototype,"depthTest",2),v([y()],Mn.prototype,"isGizmo",2);import*as jm 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 jm.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),ie(this.gameObject,d);let h=r.clone();h.sub(a),this.gameObject.lookAt(h)}};import{Mesh as tx,Vector3 as dr}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 hr=class extends Ot{radius=.5;center=new dr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addSphereCollider(this,this.center,this.radius)}};v([y()],hr.prototype,"radius",2),v([y(dr)],hr.prototype,"center",2);var pr=class extends Ot{size=new dr(1,1,1);center=new dr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addBoxCollider(this,this.center,this.size)}};v([y(dr)],pr.prototype,"size",2),v([y(dr)],pr.prototype,"center",2);var Zr=class extends Ot{sharedMesh;convex=!1;onEnable(){super.onEnable(),this.sharedMesh?.isMesh||this.gameObject instanceof tx&&(this.sharedMesh=this.gameObject),this.sharedMesh?.isMesh&&this.context.physics.addMeshCollider(this,this.sharedMesh,this.convex,Ae(this.gameObject))}};v([y()],Zr.prototype,"convex",2);var Xt=class extends Ot{center=new dr(0,0,0);radius=.5;height=2;onEnable(){super.onEnable(),this.context.physics.addCapsuleCollider(this,this.center,this.height,this.radius)}};v([y(dr)],Xt.prototype,"center",2),v([y()],Xt.prototype,"radius",2),v([y()],Xt.prototype,"height",2);import*as $r from"three";var ix=P("gizmos"),nx=P("debugboxhelper"),Qt=class extends M{box=null;_lastMatrixUpdateFrame=-1;isInBox(e,t){if(!e)return;if(this.box||(this.box=new $r.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&&nx&&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 $r.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(!(!ix&&!t)){if(this._helper){e&&this._color?.set(e),this.gameObject.add(this._helper);return}this._helper=cl(e),this.gameObject.add(this._helper)}}},Ne=Qt;I(Ne,"testBox",new $r.Box3),I(Ne,"_position",new $r.Vector3),I(Ne,"_size",new $r.Vector3(.01,.01,.01));import{Color as lx,Texture as zm}from"three";import{LinearEncoding as sx,sRGBEncoding as ax}from"three";import*as Xd from"three-mesh-ui";import{Matrix4 as rx,Object3D as ox,Vector2 as Gm,Vector3 as Nd}from"three";import{FrontSide as Hm,DoubleSide as Fm}from"three";function Wd(o){let e=o[gt];return e||(o.parent?Wd(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?Fm:Hm,t.depthWrite=e.depthWrite??!1,t.shadowSide=e.doubleSided?Fm:Hm,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 Bm=Symbol("Scheduled action");function Um(o,e,t=3){let i=o[Bm];i||(i=o[Bm]={});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 Vm=P("debugui"),ss=class{width;height},eo=class{x;y;width;height},vt=class extends We{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 Nd),this._anchoredPosition}rect;sizeDelta;anchoredPosition3D;pivot;lastMatrix;rectBlock;_transformNeedsUpdate=!1;awake(){super.awake(),this.lastMatrix=new rx,this.rectBlock=new ox,this.rectBlock.position.z=.1,this.rectBlock.name=this.name,this._anchoredPosition||(this._anchoredPosition=new Nd),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)&&(Vm&&console.log("updating",this.name),this.applyTransform()),Je.ensureUpdateMeshUI(Xd,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},Vm&&console.log(this.name,e);let t=new Xd.Block(e);return this._createdBlocks.push(t),t}};v([y(eo)],vt.prototype,"rect",2),v([y(Gm)],vt.prototype,"sizeDelta",2),v([y(Nd)],vt.prototype,"anchoredPosition3D",2),v([y(Gm)],vt.prototype,"pivot",2);var ga=class extends We{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,vt)),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",()=>Um(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===ax)if(ga.textureCache.has(e))e=ga.textureCache.get(e);else{let t=e.clone();t.encoding=sx,ga.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)}},yt=ga;I(yt,"textureCache",new Map),v([y(Q)],yt.prototype,"color",1),v([y()],yt.prototype,"raycastTarget",2);var In=class extends yt{onAfterCreated(){this.uiObject&&(this.uiObject.scale.y*=-1)}};var cc=class{texture;rect};v([y(zm)],cc.prototype,"texture",2);var An=class extends In{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 lx(.4,.4,.4),e.borderOpacity=this.color.alpha,e.borderWidth=.3)}onAfterCreated(){super.onAfterCreated(),!this.isBuiltinSprite()&&this.setTexture(this.sprite?.texture)}};v([y(cc)],An.prototype,"sprite",2);var to=class extends In{mainTexture;onAfterCreated(){super.onAfterCreated(),this.setTexture(this.mainTexture)}};v([y(zm)],to.prototype,"mainTexture",2);var as=P("debugbutton");var Dn=class{colorMultiplier;disabledColor;fadeDuration;highlightedColor;normalColor;pressedColor;selectedColor};v([y()],Dn.prototype,"colorMultiplier",2),v([y(Q)],Dn.prototype,"disabledColor",2),v([y()],Dn.prototype,"fadeDuration",2),v([y(Q)],Dn.prototype,"highlightedColor",2),v([y(Q)],Dn.prototype,"normalColor",2),v([y(Q)],Dn.prototype,"pressedColor",2),v([y(Q)],Dn.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,An),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(Pe)],qt.prototype,"animator",2),v([y()],qt.prototype,"interactable",1);var Qd=class extends kn{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 Qd||(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,We))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}}},Xe=Qd;v([y()],Xe.prototype,"renderOnTop",1),v([y()],Xe.prototype,"depthWrite",1),v([y()],Xe.prototype,"doubleSided",1),v([y()],Xe.prototype,"castShadows",1),v([y()],Xe.prototype,"receiveShadows",1),v([y()],Xe.prototype,"renderMode",1),v([y(Xe)],Xe.prototype,"rootCanvas",1),v([y()],Xe.prototype,"scaleFactor",1);var Ln=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,yt,this._buffer)){let t=e.color;t.alpha=this._alpha,e.color=t}}};v([y()],Ln.prototype,"alpha",1),v([y()],Ln.prototype,"interactable",2),v([y()],Ln.prototype,"blocksRaycasts",2);import{Quaternion as gx,Ray as bx,Vector3 as io}from"three";import*as Wm from"three";import{Color as ux,Object3D as dx,Texture as hx,WebGLRenderTarget as px}from"three";import{WebGLRenderTarget as cx}from"three";var ls=class extends cx{};var Yd=class extends Li{constructor(){super([ux,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 Wm.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}}},OL=new Yd,Kd=class extends Li{constructor(){super(dx)}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):((Ba()||pe)&&console.warn("Could not resolve object reference",t.path,e,t.target,t.context.scene),e.could_not_resolve=!0),i}}}},fx=new Kd,Jd=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;(Ba()||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}}},qd=new Jd,Zd=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 vi(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=qd.findObjectForGuid(s.target,t.root);!a&&t.context?.scene&&(a=qd.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&&(Ba()||pe)&&h()}}let u,l=s.argument;s.argument!==void 0?(typeof l=="object"&&(l=fx.onDeserialize(s.argument,t),l||(l=qd.onDeserialize(s.argument,t))),u=new vi(c?(...h)=>d(...h):void 0,s.enabled)):u=new vi(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}}},kL=new Zd,$d=class extends Li{constructor(){super([ls,px])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof hx&&t.type===ls){let i=e,n=new ls(i.image.width,i.image.height);return n.texture=i,n}}};new $d;var Yi=class extends M{center=new io(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(io)],Yi.prototype,"center",2),v([y()],Yi.prototype,"radius",2),v([y()],Yi.prototype,"height",2);var Ti=class extends M{controller;movementSpeed=2;rotationSpeed=2;jumpForce=1;animator;lookForward=!0;_currentSpeed=new io(0,0,0);_currentAngularSpeed=new io(0,0,0);_temp=new io(0,0,0);_jumpCount=0;_currentRotation;awake(){this._currentRotation=new gx}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 io(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 io(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 bx),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 be};v([y(Yi)],Ti.prototype,"controller",2),v([y()],Ti.prototype,"movementSpeed",2),v([y()],Ti.prototype,"rotationSpeed",2),v([y()],Ti.prototype,"jumpForce",2),v([y(Pe)],Ti.prototype,"animator",2);import{LinearToneMapping as eh,ACESFilmicToneMapping as Nm,ReinhardToneMapping as vx}from"three";var uc=P("debugvolume"),Qm=(i=>(i[i.None=0]="None",i[i.Neutral=1]="Neutral",i[i.ACES=2]="ACES",i))(Qm||{}),cs=class{overrideState=!1;value=0},Ki=class{active=!1;parameters},mr=class extends Ki{mode;get isToneMapping(){return!0}},gr=class extends Ki{postExposure};function yx(o){return"mode"in o?mr:"postExposure"in o?gr:Ki}var Xm=Symbol("volumeprofile"),fr=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[Xm]!==void 0;if(t){if(!r)return}else i[Xm]=this;for(let s of this.components)if(s instanceof mr){let a=s;if(!s.active||t){e.renderer.toneMapping=eh;continue}uc&&console.log("VOLUME:",Qm[a.mode?.value??0]);let c=a.mode;switch((c?.overrideState?c?.value:0)??0){case 0:e.renderer.toneMapping=eh;break;case 1:e.renderer.toneMapping=vx;break;case 2:e.renderer.toneMapping=Nm;break}}else if(s instanceof gr){let a=s;uc&&console.log(a.postExposure);let c=1;a.postExposure&&(c=Math.pow(2,a.postExposure.value)),e.renderer.toneMapping,Nm;let u=a.postExposure?.overrideState&&!t;e.renderer.toneMappingExposure=u?c:1,e.renderer.toneMapping||(e.renderer.toneMapping=eh)}}};v([y([o=>yx(o),Ki])],fr.prototype,"components",2);var no=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(fr)],no.prototype,"sharedProfile",2);import{Matrix4 as qm,Quaternion as _x,Vector3 as $e,Vector2 as Ym,Euler as xx}from"three";import{createNoise4D as wx}from"simplex-noise";var Ex=P("debugparticles");var Si=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()],Si.prototype,"alphaKeys",2),v([y()],Si.prototype,"colorKeys",2);var Km=(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))(Km||{});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(gi)],U.prototype,"curve",2),v([y(gi)],U.prototype,"curveMin",2),v([y(gi)],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(Si)],Me.prototype,"gradient",2),v([y(Si)],Me.prototype,"gradientMin",2),v([y(Si)],Me.prototype,"gradientMax",2);var _e=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)],_e.prototype,"gravityModifier",2),v([y(Me)],_e.prototype,"startColor",2),v([y(U)],_e.prototype,"startDelay",2),v([y(U)],_e.prototype,"startLifetime",2),v([y(U)],_e.prototype,"startRotation",2),v([y(U)],_e.prototype,"startRotationX",2),v([y(U)],_e.prototype,"startRotationY",2),v([y(U)],_e.prototype,"startRotationZ",2),v([y(U)],_e.prototype,"startSize",2),v([y(U)],_e.prototype,"startSizeX",2),v([y(U)],_e.prototype,"startSizeY",2),v([y(U)],_e.prototype,"startSizeZ",2),v([y(U)],_e.prototype,"startSpeed",2);var Hn=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}},_t=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()],_t.prototype,"enabled",2),v([y()],_t.prototype,"bursts",2),v([y(U)],_t.prototype,"rateOverTime",2),v([y()],_t.prototype,"rateOverTimeMultiplier",2),v([y(U)],_t.prototype,"rateOverDistance",2),v([y()],_t.prototype,"rateOverDistanceMultiplier",2);var jn=class{enabled;color};v([y(Me)],jn.prototype,"color",2);var Kt=class{enabled;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_time=0;_temp=new $e;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 Km[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 xx;scale;radius;radiusThickness;sphericalDirectionAmount;randomDirectionAmount;randomPositionAmount;system;_space;_worldSpaceMatrix=new qm;_worldSpaceMatrixInverse=new qm;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 $e(0,0,0);_temp=new $e(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 $e;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),Ex&&(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 $e(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}},ne=us;I(ne,"_randomQuat",new _x),I(ne,"_tempVec",new $e),v([y()],ne.prototype,"shapeType",2),v([y()],ne.prototype,"enabled",2),v([y()],ne.prototype,"alignToDirection",2),v([y()],ne.prototype,"angle",2),v([y()],ne.prototype,"arc",2),v([y()],ne.prototype,"arcSpread",2),v([y()],ne.prototype,"arcSpeedMultiplier",2),v([y()],ne.prototype,"arcMode",2),v([y($e)],ne.prototype,"boxThickness",2),v([y($e)],ne.prototype,"position",2),v([y($e)],ne.prototype,"rotation",2),v([y($e)],ne.prototype,"scale",2),v([y()],ne.prototype,"radius",2),v([y()],ne.prototype,"radiusThickness",2),v([y()],ne.prototype,"sphericalDirectionAmount",2),v([y()],ne.prototype,"randomDirectionAmount",2),v([y()],ne.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 $e;apply(e,t,i,n,r,s){if(!this.enabled)return;this._noise||(this._noise=wx(()=>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 te=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()],te.prototype,"enabled",2),v([y()],te.prototype,"attachRibbonToTransform",2),v([y(Me)],te.prototype,"colorOverLifetime",2),v([y(Me)],te.prototype,"colorOverTrail",2),v([y()],te.prototype,"dieWithParticles",2),v([y()],te.prototype,"inheritParticleColor",2),v([y(U)],te.prototype,"lifetime",2),v([y()],te.prototype,"lifetimeMultiplier",2),v([y()],te.prototype,"minVertexDistance",2),v([y()],te.prototype,"mode",2),v([y()],te.prototype,"ratio",2),v([y()],te.prototype,"ribbonCount",2),v([y()],te.prototype,"shadowBias",2),v([y()],te.prototype,"sizeAffectsLifetime",2),v([y()],te.prototype,"sizeAffectsWidth",2),v([y()],te.prototype,"splitSubEmitterRibbons",2),v([y()],te.prototype,"textureMode",2),v([y(U)],te.prototype,"widthOverTrail",2),v([y()],te.prototype,"widthOverTrailMultiplier",2),v([y()],te.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 $e;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 xe=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()],xe.prototype,"animation",2),v([y()],xe.prototype,"enabled",2),v([y()],xe.prototype,"cycleCount",2),v([y(U)],xe.prototype,"frameOverTime",2),v([y()],xe.prototype,"frameOverTimeMultiplier",2),v([y()],xe.prototype,"numTilesX",2),v([y()],xe.prototype,"numTilesY",2),v([y(U)],xe.prototype,"startFrame",2),v([y()],xe.prototype,"startFrameMultiplier",2),v([y()],xe.prototype,"rowMode",2),v([y()],xe.prototype,"rowIndex",2),v([y()],xe.prototype,"spriteCount",2),v([y()],xe.prototype,"timeMode",2);var Ze=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()],Ze.prototype,"enabled",2),v([y()],Ze.prototype,"separateAxes",2),v([y(U)],Ze.prototype,"x",2),v([y()],Ze.prototype,"xMultiplier",2),v([y(U)],Ze.prototype,"y",2),v([y()],Ze.prototype,"yMultiplier",2),v([y(U)],Ze.prototype,"z",2),v([y()],Ze.prototype,"zMultiplier",2);var Qe=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()],Qe.prototype,"enabled",2),v([y()],Qe.prototype,"range",2),v([y()],Qe.prototype,"separateAxes",2),v([y(U)],Qe.prototype,"x",2),v([y()],Qe.prototype,"xMultiplier",2),v([y(U)],Qe.prototype,"y",2),v([y()],Qe.prototype,"yMultiplier",2),v([y(U)],Qe.prototype,"z",2),v([y()],Qe.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 $e;_temp2=new $e;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 $e;_temp=new $e;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(Ym)],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 Ri=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()],Ri.prototype,"enabled",2),v([y(Ym)],Ri.prototype,"range",2),v([y(Me)],Ri.prototype,"color",2);var ro=class extends Ne{},ds=class extends M{deleteBoxes=[];awake(){this.deleteBoxes=R.findObjectsOfType(ro,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 oo=class extends M{visibleOn;onEnable(){this.apply()}apply(){this.test()||R.setActive(this.gameObject,!1)}test(){return this.visibleOn<0?!0:Cx()?(this.visibleOn&2)!==0:(this.visibleOn&1)!==0}};v([y()],oo.prototype,"visibleOn",2);var dc;function Cx(){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 th=!1;var Fn=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(Ve,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,Fn);!t||t!==this||(Fn.lastHovered=e.object,this.context.domElement.style.cursor="pointer")}onPointerExit(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||Fn.lastHovered===e.object&&(this.context.domElement.style.cursor="auto")}_waitingForDragStart=null;onPointerDown(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||(Fn._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)&&(Fn._active>0&&(Fn._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,Fn);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);th&&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=Kc();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(th&&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=Kc();R.invokeOnChildren(t,i("onDragEnd"))}},Ji=Fn;I(Ji,"_active",0),I(Ji,"lastHovered");var ih=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(ih.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&&ye.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}ye.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)){th&&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(ie(this._selected,e),ie(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),ie(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 be;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(){oe.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=ih;I(hc,"geometry",new Y.BufferGeometry().setFromPoints([new Y.Vector3(0,0,0),new Y.Vector3(0,-1,0)]));var Pi=class extends M{url=null;urlParameterName=null;localhost=null;awake(){this.context.connection.registerProvider(this)}getWebsocketUrl(){let e=this.url?Pi.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=Pi.IsLocalNetwork()&&t;return n&&(i=t),e?.startsWith("/")&&(i=(n?i:window.location.origin)+e),i}static IsLocalNetwork(e=window.location.hostname){return ct(e)}};var br=class extends M{filesBackendUrl;localhost;_dragOver;_drop;onEnable(){this.filesBackendUrl=this.filesBackendUrl?Pi.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 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 Uf(r,this.context,this.filesBackendUrl);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 Gf(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=new be;i.setMask(16777215),i.screenPointFromOffset(e.offsetX,e.offsetY);let n=this.context.physics.raycast(i),r=t.scene;if(n&&n.length>0)for(let s of n){r.position.copy(s.point);break}this.gameObject.add(r),this.dispatchEvent(new CustomEvent("object-added",{detail:t}))}};v([y()],br.prototype,"filesBackendUrl",2),v([y()],br.prototype,"localhost",2);import{Vector3 as Tx,Quaternion as Rx,Object3D as Jm}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 Tx(0,0,0),this._startQuaternion=this.object.quaternion?.clone()??new Rx(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),$.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(Jm)],Zi.prototype,"parent",2),v([y(Jm)],Zi.prototype,"object",2),v([y()],Zi.prototype,"limitCount",2),v([y()],Zi.prototype,"limitInterval",2);var ba=class{eventID;callback};v([y()],ba.prototype,"eventID",2),v([y(de)],ba.prototype,"callback",2);var so=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(ba)],so.prototype,"triggers",2);import*as en from"three";import*as va from"three";var Bn=class{get lightmap(){return this.lightmapTexture}set lightmap(e){e!==this.lightmapTexture&&(this.lightmapTexture=e,this.setupLightmap())}lightmapIndex=-1;lightmapScaleOffset=new va.Vector4(1,1,0,0);context;gameObject;lightmapTexture=null;lightmapScaleOffsetUniform={value:new va.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 va.ShaderMaterial({vertexShader:`
215
+ --------------`),i[r]=a,a.needsUpdate=!0,i.needsUpdate=!0,ze)){let c=Ed.get(i);c||(c={},Ed.set(i,c));let u=c[r];u||(u=c[r]={original:s,lod0:a}),u.lod0=a}}))}}get name(){return xd}parser;sourceId;context;constructor(e,t,i){this.parser=e,this.sourceId=t,this.context=i}_loading=[];afterRoot(e){return ze&&console.log("AFTER",this.sourceId,e),this.parser.json.textures?.forEach((t,i)=>{if(t?.extensions){let n=t?.extensions[xd];if(n){let r=this.parser.getDependency("texture",i);this._loading.splice(this._loading.indexOf(i),1),r.then(s=>{ze&&console.log("register texture",s.name,s.uuid,n),s.userData.deferred=n,sa.cache.set(s.uuid,n)})}}}),null}static async getOrLoadTexture(e,t,i,n,r,s){let a=r.uuid,c=sa.cache.get(a);if(c){ze&&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 ze&&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 ze&&console.log("Already loading:",i.name+"."+n,l),await this.currentlyLoading[l];let h=new Promise(async(E,_)=>{let x=new r_;xn(x,e),ze&&console.log("Load "+u,i.name,n,c.guid),ze&&await _o(Math.random()*1e3);let m=await x.loadAsync(u),f=m.parser;ze&&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[xd];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,ze&&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{ze&&console.log("Load texture from uri: "+u);let h=await new n_().loadAsync(u);return h?(h.guid=c.guid,h.flipY=!1,h.needsUpdate=!0,h.encoding=r.encoding,ze&&console.log(c,h)):ze&&console.warn("failed loading",u),h}finally{this.onProgressiveLoadEnd(l)}}}else ze&&console.warn("unknown uuid",r.name,r.uuid,r);return null}static beginListenStart(e,t){this._progressiveEventListeners.has(e)||this._progressiveEventListeners.set(e,new Yl),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 Yl),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 Cd(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)}},mi=sa;I(mi,"cache",new Map),I(mi,"resolved",{}),I(mi,"currentlyLoading",{}),I(mi,"_progressiveEventListeners",new Map),I(mi,"_currentProgressiveLoadingInfo",new Map);var Cd=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}},Yl=class{start=[];end=[];onStart(e){for(let t of this.start)t(e)}onEnd(e){for(let t of this.end)t(e)}};function Rd(o){let e=new zo;return o.register(t=>(e.parser=t,e)),e}var Td=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 Sd(o,e,t){o.register(n=>new Ql(n)),o.register(n=>new Va(n)),o.register(n=>new kl(n,e.lightmaps,t)),o.register(n=>new ql(n,t,e)),o.register(n=>new Wl(n,t)),o.register(n=>new Wr(n,t)),o.register(n=>new mi(n,t,e)),o.register(n=>new Xl(n));let i=o.setAnimationPointerResolver;typeof i=="function"&&i.bind(o)(new Td)}var Yh={};hp(Yh,{AlignmentConstraint:()=>tr,Animation:()=>Bt,AnimationCurve:()=>gi,AnimationExtension:()=>ir,AnimationTrackHandler:()=>nr,Animator:()=>Pe,AnimatorController:()=>fi,AttachedObject:()=>bt,AudioListener:()=>bi,AudioSource:()=>se,AudioTrackHandler:()=>rr,AvatarBlink_Simple:()=>Qi,AvatarEyeLook_Rotation:()=>qi,AvatarLoader:()=>or,AvatarMarker:()=>le,AvatarModel:()=>Kr,Avatar_Brain_LookAt:()=>Sn,Avatar_MouthShapes:()=>ur,Avatar_MustacheShake:()=>ns,Avatar_POI:()=>ye,AxesHelper:()=>Mn,BaseUIComponent:()=>We,BasicIKConstraint:()=>rs,BoxCollider:()=>pr,BoxGizmo:()=>_i,BoxHelperComponent:()=>Ne,Button:()=>qt,CallInfo:()=>vi,Camera:()=>Z,Canvas:()=>Xe,CanvasGroup:()=>Ln,CapsuleCollider:()=>Xt,CharacterController:()=>Yi,CharacterControllerInput:()=>Ti,Collider:()=>Ot,ColorAdjustments:()=>gr,ColorBySpeedModule:()=>Ri,ColorOverLifetimeModule:()=>jn,ControlTrackHandler:()=>Rn,Deletable:()=>ds,DeleteBox:()=>ro,DeviceFlag:()=>oo,DragControls:()=>Ji,DropListener:()=>br,Duplicatable:()=>Zi,EmissionModule:()=>_t,EventList:()=>de,EventListEvent:()=>Qr,EventSystem:()=>Je,EventTrigger:()=>so,FieldWithDefault:()=>ps,FixedJoint:()=>ms,FlyControls:()=>gs,GltfExport:()=>$t,GltfExportBox:()=>bs,Gradient:()=>Si,Graphic:()=>yt,GraphicRaycaster:()=>vs,GridHelper:()=>Un,GridLayoutGroup:()=>xs,GroundProjectedEnv:()=>tn,HingeJoint:()=>vr,HorizontalLayoutGroup:()=>_s,Image:()=>An,InheritVelocityModule:()=>Jt,InputField:()=>kt,Interactable:()=>Vt,Keyboard:()=>ws,LODGroup:()=>yr,LODModel:()=>nn,LayoutGroup:()=>Gn,Light:()=>qe,LimitVelocityOverLifetimeModule:()=>ue,LogStats:()=>Cs,LookAtConstraint:()=>_n,MainModule:()=>_e,MaskableGraphic:()=>In,MeshCollider:()=>Zr,MeshRenderer:()=>ao,MinMaxCurve:()=>U,MinMaxGradient:()=>Me,NestedGltf:()=>ho,Networking:()=>Pi,NoiseModule:()=>K,ObjectRaycaster:()=>co,OffsetConstraint:()=>rn,OrbitControls:()=>Ve,ParticleBurst:()=>Hn,ParticleSubEmitter:()=>_r,ParticleSystem:()=>ve,ParticleSystemRenderer:()=>on,PlayableDirector:()=>Cn,PlayerColor:()=>xt,PointerEventData:()=>xi,RGBAColor:()=>Q,RawImage:()=>to,Raycaster:()=>lo,Rect:()=>eo,RectTransform:()=>vt,ReflectionProbe:()=>Zt,RegisteredAnimationInfo:()=>Nr,RemoteSkybox:()=>Oi,Renderer:()=>ae,RendererLightmap:()=>Bn,Rigidbody:()=>J,RotationBySpeedModule:()=>Qe,RotationOverLifetimeModule:()=>Ze,ScreenCapture:()=>Er,ShadowCatcher:()=>Cr,ShapeModule:()=>ne,SignalAsset:()=>qr,SignalReceiver:()=>En,SignalReceiverEvent:()=>Yr,SignalTrackHandler:()=>Tn,Size:()=>ss,SizeBySpeedModule:()=>ke,SizeOverLifetimeModule:()=>Kt,SkinnedMeshRenderer:()=>fs,SmoothFollow:()=>Mt,SpatialHtml:()=>Ps,SpatialTrigger:()=>Vn,SpatialTriggerReceiver:()=>It,SpectatorCamera:()=>Os,SphereCollider:()=>hr,Sprite:()=>ei,SpriteRenderer:()=>sn,SpriteSheet:()=>an,SubEmitterSystem:()=>xr,SyncedCamera:()=>Rr,SyncedRoom:()=>ki,SyncedTransform:()=>Pt,TeleportTarget:()=>Jr,TestRunner:()=>Ms,TestSimulateUserData:()=>Is,Text:()=>Ie,TextureSheetAnimationModule:()=>xe,ToneMapping:()=>mr,TrailModule:()=>te,TransformData:()=>Xr,TransformGizmo:()=>fo,UIRaycastUtils:()=>Ei,UIRootComponent:()=>kn,USDZExporter:()=>Sr,UsageMarker:()=>zt,VRUserState:()=>Nt,VelocityOverLifetimeModule:()=>He,VerticalLayoutGroup:()=>ys,VideoPlayer:()=>Te,Voip:()=>rt,Volume:()=>no,VolumeComponent:()=>Ki,VolumeParameter:()=>cs,VolumeProfile:()=>fr,WebAR:()=>cr,WebARSessionRoot:()=>mt,WebXR:()=>V,WebXRAvatar:()=>Gt,WebXRController:()=>$,WebXRSync:()=>On,XRFlag:()=>Ee,XRGrabModel:()=>mo,XRGrabRendering:()=>As,XRRig:()=>lr,XRState:()=>St,__Ignore:()=>Oa});import{Vector3 as o_}from"three";var tr=class extends M{from;to;width=0;centered=!0;_centerPos;awake(){this._centerPos=new o_}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),ie(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)],tr.prototype,"from",2),v([y(R)],tr.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 gi=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)],gi.prototype,"keys",2);import{Matrix4 as s_,Vector3 as vm,Quaternion as a_}from"three";import{buildMatrix as l_}from"three/examples/jsm/exporters/USDZExporter";var No=P("debugusdzanimation"),Nr=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}},Xr=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}},ir=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 Xr(this,e,s,t),a.push(c)),c.addTrack(n);let u=this.rootTargetMap.get(e);u?.includes(s)||u?.push(s)}return new Nr(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 Pd(e,this.dict);this.serializers.push(n),n.registerCallback(t)}},Pd=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 s_,s=new vm,a=new a_,c=new vm(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}: ${l_(r)},`;No&&(m="#"+_+" "+m),e.appendLine(m)}}e.indent--,e.appendLine("}")}};import*as wm from"three";import*as ym from"three";import*as aa from"three";import{PositionalAudioHelper as c_}from"three/examples/jsm/helpers/PositionalAudioHelper.js";var pt=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&&(pt&&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,bi)??R.findObjectOfType(bi,this.context);e?.listener&&(this.sound=new aa.PositionalAudio(e.listener),this.gameObject.add(this.sound))}return this.sound}get ShouldPlay(){return this.shouldPlay}_focusCallback;awake(){this.audioLoader=new aa.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){pt&&console.log("audio buffer loaded"),De.registerWaitForAllowAudio(()=>{pt&&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(),pt&&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(pt&&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?pt&&!this.helper&&(this.helper=new c_(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}loadAndPlay(e){if(e&&(this.clip=e),this.clip&&(pt&&console.log(this.clip),this.clip.endsWith(".mp3")||this.clip.endsWith(".wav"))){if(this.audioLoader||(this.audioLoader=new aa.AudioLoader),this.shouldPlay=!0,this._lastClipStartedLoading===this.clip){pt&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=this.clip,pt&&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,pt&&console.log("play",this.sound?.getVolume(),this.sound),this.sound&&!this.sound.isPlaying&&this.sound.play()}pause(){pt&&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(){pt&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=this.sound?.context.currentTime,pt&&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,pt&&console.log("Audio clip ended",this.clip),this.sound.dispatchEvent({type:"ended",target:this}))}},se=De;I(se,"_didCallBeginWaitForUserInteraction",!1),I(se,"callbacks",[]),I(se,"_userInteractionRegistered",!1),v([y()],se.prototype,"clip",2),v([y()],se.prototype,"playOnAwake",2),v([y()],se.prototype,"loop",1),v([y()],se.prototype,"spatialBlend",1),v([y()],se.prototype,"minDistance",1),v([y()],se.prototype,"maxDistance",1),v([y()],se.prototype,"volume",1),v([y()],se.prototype,"rollOffMode",2);var bi=class extends M{get listener(){return this._listener==null&&(this._listener=new ym.AudioListener),this._listener}_listener=null;awake(){se.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 vi=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)}}},u_=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&&u_(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 vi(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 qr=class{guid},Yr=class{signal;reaction;$serializedTypes={signal:qr,reaction:de}},En=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(Yr)],En.prototype,"events",2);var xm=P("debugtimeline");var Kl=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(){xm&&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)):(xm&&console.log("Resolved binding",n,"to",r),t.outputs[i]=r,r instanceof Pe)}else if(n===null){if(t.outputs.splice(i,1),Kl.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=Kl.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 nr;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 wm.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 Tn;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,En);s&&(r.receivers.push(s),this._signalTracks.push(r))}}else if(t.type==="SignalTrack"){let r=new Tn;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 Rn;r.director=this,r.track=t;for(let s of t.clips)r.models.push(s);r.resolveSourceObjects(this.context),this._controlTracks.push(r)}}se.registerWaitForAllowAudio(()=>{let t=R.findObjectOfType(bi,this.context);if(!!t)for(let i of e){let n=new rr;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)}},Cn=Kl;I(Cn,"createTrackFunctions",{});import*as ee from"three";import{Quaternion as h_,Vector3 as p_}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}},Od=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 ee.Vector3().fromArray(s.values,0),this.rootEndPosition=new ee.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 ee.Quaternion().fromArray(s.values,0),this.rootEndQuaternion=new ee.Quaternion().fromArray(s.values,s.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),Xo)){let a=new ee.Euler().setFromQuaternion(this.rootQuaternionOffset);console.log("ROT",a)}}}},nr=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 ee.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 ee.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 Od(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 p_(i.x,i.y,i.z)),n.isQuaternion||(t.rotation=new h_(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 ee.Vector3(e.x,e.y,e.z)));let t=this.trackOffset.rotation;t&&(t.isQuaternion||(this.trackOffset.rotation=new ee.Quaternion(t.x,t.y,t.z,t.w)))}}_useclipOffsets=!0;_totalOffsetPosition=new ee.Vector3;_totalOffsetRotation=new ee.Quaternion;_totalOffsetPosition2=new ee.Vector3;_totalOffsetRotation2=new ee.Quaternion;_summedPos=new ee.Vector3;_tempPos=new ee.Vector3;_summedRot=new ee.Quaternion;_tempRot=new ee.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 ee.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 ee.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 ee.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}}},rr=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 ee.Audio(this.listener);i.setVolume(e.asset.volume);let n=new ee.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}}},Tn=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)}}},la=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;la.resolved[r]?n.sourceObject=la.resolved[r]:(n.sourceObject=R.findByGuid(r,e.scene),la.resolved[r]=n.sourceObject)}if(n.sourceObject){let r=R.getComponent(n.sourceObject,Cn);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)}}}}},Rn=la;I(Rn,"resolved",{});import{BoxHelper as F_,BufferGeometry as B_,Color as Dm,Euler as U_,Layers as G_,Line as V_,Mesh as z_,MeshBasicMaterial as W_,Quaternion as sc,Ray as N_,SphereGeometry as X_,Vector2 as Q_,Vector3 as Ci}from"three";import{OculusHandModel as q_}from"three/examples/jsm/webxr/OculusHandModel.js";import{OculusHandPointerModel as Y_}from"three/examples/jsm/webxr/OculusHandPointerModel.js";import{XRControllerModelFactory as K_}from"three/examples/jsm/webxr/XRControllerModelFactory.js";import{GLTFLoader as J_}from"three/examples/jsm/loaders/GLTFLoader.js";import*as Tm from"three";import{Quaternion as m_,Vector3 as Zl}from"three";import{GLTFLoader as f_}from"three/examples/jsm/loaders/GLTFLoader";import*as Jl from"three";var ca=P("debugavatar"),Kr=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))}},or=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(Wn(t,e.scene),r)}}else i=t;if(!i)return null;let n=this.findAvatar(i);return n.isValid?(ca&&console.log("[Custom Avatar] valid config",t,ca?n:""),n):(console.warn("[Custom Avatar] config isn't valid",t,ca?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(ca&&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 _l(t,t,0,"no url here go away",!0),!r)?null:(await Ke().parseSync(e,r,null,0))?.scene??null}let i=new f_;return xn(i,e),new Promise((n,r)=>{let s=this.avatarRegistryUrl+"/"+t;i.load(s,async a=>{await Ke().createBuiltinComponents(e,s,a,null,void 0),n(a.scene)},a=>{ca&&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 Jl.Vector3;new Jl.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 Kr(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 kd=class{Mask=17;Has(e){return(this.Mask&e)!==0}Set(e){qo&&console.warn("Set XR flag state to",e),this.Mask=e,Ee.Apply()}Enable(e){this.Mask|=e,Ee.Apply()}Disable(e){this.Mask&=~e,Ee.Apply()}Toggle(e){this.Mask^=e,Ee.Apply()}EnableAll(){this.Mask=-1,Ee.Apply()}DisableAll(){this.Mask=0,Ee.Apply()}},St=kd;I(St,"Global",new kd);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}}},Ee=zi;I(Ee,"registry",[]),I(Ee,"firstApply"),I(Ee,"buffer",new St);import{Object3D as Md}from"three";var sr=P("debugavatar"),yi=class extends M{static getAvatar(e){return e>=0&&e<yi.instances.length?yi.instances[e]:null}static onAvatarMarkerCreated(e){return yi._onNewAvatarMarkerAdded.push(e),e}static onAvatarMarkerDestroyed(e){return yi._onAvatarMarkerDestroyed.push(e),e}connectionId;avatar;awake(){yi.instances.push(this),sr&&console.log(this);for(let e of yi._onNewAvatarMarkerAdded)e({avatarMarker:this,gameObject:this.gameObject})}onDestroy(){yi.instances.splice(yi.instances.indexOf(this),1);for(let e of yi._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=yi;I(le,"instances",[]),I(le,"_onNewAvatarMarkerAdded",[]),I(le,"_onAvatarMarkerDestroyed",[]);var ua=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 Zl(1,1,1);handLeftScale=new Zl(1,1,1);handRightScale=new Zl(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 Md;_handLeftTarget=new Md;_handRightTarget=new Md;_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),oe.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(ua.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handLeftScale),oe.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(ua.invertRotation),s.scale.set(e.scale,e.scale,e.scale),s.scale.multiply(this.handRightScale),oe.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(){sr&&console.log("Destroy avatar",this.guid),this.root?.removeFromParent(),this.avatarMarker?.destroy(),this.lastAvatarId=null,this.head&&ye.Remove(this.context,this.head)}updateVisibility(){let e=this.root;e&&R.setActive(e,this._isVisible)}async setupCustomAvatar(e){if(sr&&console.log("LOAD",e,this),!e||typeof e=="string"&&e.length<=0)return!1;this.head&&ye.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)}sr&&console.log(e);let i=await ua.loader.getOrCreateNewAvatarInstance(this.context,e);if(sr&&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&&ye.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,Ee)),this.flags.length<=0&&this.head){let n=R.addNewComponent(this.head,Ee);n.visibleIn=20,this.flags.push(n),sr&&console.log("Added flag to head: "+n.visibleIn,this.head.name)}return sr&&console.log("[Avatar], is Local? ",this.isLocalAvatar,this.root),this.updateFlags(),this.updateVisibility(),!0}else return sr&&console.warn("build avatar failed"),!1}},Gt=ua;I(Gt,"loader",new or),I(Gt,"invertRotation",new m_().setFromAxisAngle(new Zl(0,1,0),Math.PI));var ye=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(ye,"Pois",[]),I(ye,"LastChangeTime",0);var Id=class{guid;position=new Tm.Vector3},Sn=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 Id;_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 Kn(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&&ie(this.target,e.position)})}update(){if((!this.context.connection.isConnected||this._model?.hasOwnership)&&(ye.LastChangeTime!==this._lastPoiChangedTime&&(this._lastPoiChangedTime=ye.LastChangeTime,this._lookDuration=0),this.selectTarget(),this._currentTargetObject&&this.context.time.frameCount%10===0&&this.target)){let t=B(this._currentTargetObject);ie(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=ye.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 g_,Vector3 as Rm}from"three";var Ad=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 dn(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 dn(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 g_;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()}},$l=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 Ad(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 Rm){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 Rm){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);$l.tempPosition.copy(e);let t=e.sub(this._lastPosition);this._lastPosition.copy($l.tempPosition),this._smoothedVelocity.lerp(t,this.context.time.deltaTime/.1)}}},J=$l;I(J,"tempPosition",new Yo.Vector3),v([ui(),y()],J.prototype,"mass",2),v([ui(),y()],J.prototype,"useGravity",2),v([ui(),y()],J.prototype,"constraints",2),v([ui(),y()],J.prototype,"isKinematic",2),v([ui(),y()],J.prototype,"drag",2),v([ui(),y()],J.prototype,"angularDrag",2),v([ui(),y()],J.prototype,"detectCollisions",2),v([ui(),y()],J.prototype,"sleepThreshold",2),v([ui(),y()],J.prototype,"collisionDetectionMode",2);import*as Pn from"three";var Ce=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 Ce).__init(this.bb_pos,this.bb)}rotation(e){return(e||new Ce).__init(this.bb_pos+12,this.bb)}scale(e){return(e||new Ce).__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 ar=P("debugsync"),Jo="STRS";Ho(Jo,Wt.getRootAsSyncedTransformModel);var Wi=new Ct;function Dd(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(){ar&&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(){ar&&console.log("new instance",this.guid,this),this._receivedDataBefore=!1,this._targetPosition=new Pn.Vector3,this._targetRotation=new Pn.Quaternion,this.lastWorldPos=new Pn.Vector3,this.lastWorldRotation=new Pn.Quaternion,this.rb=R.getComponentInChildren(this.gameObject,J),this.rb&&(this._wasKinematic=this.rb.isKinematic),this.receivedUpdate=!0,this._model=new Kn(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&&Kp(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 Pn.Euler;onReceivedData(e){if(!this.destroyed&&typeof e.guid=="function"&&e.guid()===this.guid){ar&&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){oe.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)&&Fp(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){ar&&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:(ar&&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),oe.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&&oe.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&&(ar&&console.log("reset kinematic",this.rb.name,this._wasKinematic),this.rb.isKinematic=this._wasKinematic),this.gameObject.position.distanceTo(new Pn.Vector3(0,0,0))>1e3&&(ar&&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)){ar&&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=Dd(this.guid,this,!!n);this.context.connection.sendBinary(r)}}};import*as oc from"three-mesh-ui";import{Euler as C_,EventDispatcher as T_,Group as R_,Matrix4 as S_,Mesh as P_,MeshBasicMaterial as O_,Object3D as Mm,Quaternion as rc,RingGeometry as k_,Vector3 as Im}from"three";var ec=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 tc=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(),tc.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",()=>{tc.xrSessionIsGranted=!0})}}},$o=tc;I($o,"xrSessionIsGranted",!1);$o.registerSessionGrantedListener();import*as ic from"three";var Sm=ja(fl(),1);import{AudioAnalyser as b_}from"three";var es="noVoip",ft=P("debugvoip"),v_=P("voip");var Ld=class{id;constructor(e){this.id=e}};var jd=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(){ft&&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 rt.HasMicrophonePermissions()){console.warn("no permission to use microphone, can not start call");return}ft&&console.log("start voip call"),this.stream=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1}),this.updateMute(this.voip.muteOutput),ft&&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=>{ft&&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){ft&&console.log("call closed",e)}},Hd=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,se.userInteractionRegistered||ft&&console.log("Incoming call, waiting for user interaction before opening audio"),se.registerWaitForAllowAudio(async()=>{if(this.call.open&&!this.closed){ft&&console.log("Setup audio and begin listening"),this.stream=new MediaStream([e]);let t=new ic.AudioListener;this.audio=new ic.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}}}),ft&&console.log("call is setup, you should hear something now"),this.analyzer=new b_(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()}},rt=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&&!v_){console.debug("VOIP must be enabled explicitly by url parameter");return}if(wo()&&Fa()){console.log("VOIP is currently not supported on Safari iOS");return}this.peer=new Sm.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 jd(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];ft&&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){ft&&console.log("Peer connection established and received id"),this.model=new Ld(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){ft&&console.log("CONNECTION",t),t.on("data",function(i){ft&&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(),ft&&console.log("received call"),await rt.HasMicrophonePermissions()){let s=await navigator.mediaDevices.getUserMedia({audio:!0,video:!1});e.answer(s)}else e.answer(null);this.currentIncomingCalls[i]=new Hd(this,this.gameObject,e),e.on("stream",s=>{ft&&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 da}from"three";var mt=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 da;_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 da().fromArray(i.transform.matrix).invert()),!0):!1}placeAt(e,t){this._placementPose||(this._placementPose=new da),this._placementPose.copy(t);let i=this.gameObject.matrixWorld.clone().invert();if(this._placementPose.premultiply(i),e){if(this.invertForward){let n=new da().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)),oe.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 da().makeScale(e,e,e),this._placementPose),t.matrix.decompose(t.position,t.quaternion,t.scale),t.updateMatrixWorld(),console.log("Place",t.position))}};v([y()],mt.prototype,"invertForward",2),v([y()],mt.prototype,"arScale",1);import{Object3D as __}from"three";import*as Pm from"three";import{Color as y_}from"three";var _i=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 Pm.BoxHelper(this.gameObject,this.color??16776960):(this.objectBounds=!1,this._gizmoObject=cl(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()],_i.prototype,"objectBounds",2),v([y(y_)],_i.prototype,"color",2),v([y()],_i.prototype,"isGizmo",2);var x_=P("debugrig"),lr=class extends M{awake(){if(x_){let e=new __;e.position.y+=.5,this.gameObject.add(e);let t=e.addNewComponent(_i);t&&(t.isGizmo=!1)}}};import{Quaternion as ha,Vector3 as nc,Vector4 as w_}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 Ce).__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 Ce).__init(this.bb_pos+t,this.bb):null}posRightHand(e){let t=this.bb.__offset(this.bb_pos,18);return t?(e||new Ce).__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 Om=P("debugxr"),pa=P("debugavatar");var Bd="VRUS";Ho(Bd,Oe.getRootAsVrUserStateBuffer);function Fd(){return new Date().getTime()}function E_(o){let e=o&4294967295,t=o/Math.pow(2,32)&1048575;return Ye.create(e,t)}var fa=class{guid;time;avatarId;position=new nc;rotation=new w_;scale=1;posLeftHand=new nc;posRightHand=new nc;rotLeftHand=new ha;rotRightHand=new ha;constructor(e){this.guid=e}update(e,t,i,n,r){this.time=Fd(),this.avatarId=r,this.position.set(t.x,t.y,t.z),e&&this.position.applyMatrix4(e.matrixWorld);let s=fa.quat0,a=fa.quat1;s.set(i.x,i.y,i.z,i.w),s=s.multiplyQuaternions(s,fa.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,E_(this.time)),Oe.addAvatarId(e,n),Oe.addPosition(e,Ce.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,Ce.createVec3(e,this.posLeftHand.x,this.posLeftHand.y,this.posLeftHand.z)),Oe.addPosRightHand(e,Ce.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,Bd);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=fa;I(Nt,"invertRotation",new ha().setFromAxisAngle(new nc(0,1,0),Math.PI)),I(Nt,"quat0",new ha),I(Nt,"quat1",new ha);var On=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(rt,this.context)),pa){let e="debug-avatar-"+pa,t=new Gt(this.context,e,this.webXR);if(this.debugAvatarUser=t,typeof pa=="string"&&pa.length>0)if(await t.setAvatarOverride(pa)){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(Bd,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 Om&&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=Fd();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=Fd();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(){Om&&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 Kn(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 M_(){return Ha()?!0:"xr"in navigator?await navigator.xr.isSessionSupported("immersive-ar")===!0:!1}async function I_(){return"xr"in navigator?await navigator.xr.isSessionSupported("immersive-vr")===!0:!1}var Ud=!1,Gd=!1;M_().then(o=>Ud=o);I_().then(o=>Gd=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&&(Ud||Gd)}static get IsARSupported(){return Ud}static get IsVRSupported(){return Gd}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=ec.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=it.getOrCreate(this.sourceId??"/",this.defaultAvatar,this.context)),!R.findObjectOfType(On,this.context)){let e=R.addNewComponent(this.gameObject,On,!1);e.webXR=this}this.webAR=new cr(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&&(t=Le.createARButton(this),this._arButton=t,n.appendChild(t)),this.createVRButton&&this.enableVR&&(i=Le.createVRButton(this),this._vrButton=i,n.appendChild(i)),setTimeout(()=>{Le.resetButtonStyles(i),Le.resetButtonStyles(t)},1e3)}_transformOrientation=new rc;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++)$.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(lr,this.context);e?this.rig=e.gameObject:(this.rig=new R_,this.rig.rotateY(Math.PI),this.rig.name="XRRig",this.context.scene.add(this.rig))}}_originalCameraParent=null;_originalCameraPosition=new Im;_originalCameraRotation=new rc;_originalXRRigParent=null;_originalXRRigPosition=new Im;_originalXRRigRotation=new rc;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 rc(a.x,a.y,a.z,a.w),u=new C_().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),ie(this.context.mainCamera,this._originalCameraPosition),et(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,es,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 T_),v([y()],V.prototype,"enableVR",2),v([y()],V.prototype,"enableAR",2),v([y(it)],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++)$.Create(this.webxr,s,this.webxr.gameObject,i);(!this.sessionRoot||this.sessionRoot.destroyed||!this.sessionRoot.activeAndEnabled)&&(this.sessionRoot=R.findObjectOfType(mt,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 P_(new k_(.07,.09,32).rotateX(-Math.PI/2),new O_),this.reticle.name="AR Placement reticle",this.reticle.matrixAutoUpdate=!1,this.reticle.visible=!1,this.reticleParent=new Mm,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 Mm),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=A_.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)}},cr=ts;I(cr,"tempWebXRObject");var A_=new S_().identity().makeTranslation(0,0,0);var xi=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 L_}from"three";var j_=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 L_;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){wi.update(e,t)}static markUIDirty(e){wi.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;wi.resetLastSelected();let r=new xi;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 xi;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 be;this._selectUpdateFn??=i=>{t.ray=i.getRay();let n=this.performRaycast(t);if(!n)return;let r=new xi;r.inputSource=i,this.handleIntersections(n,r)},$.addEventListener("select-start",this._selectStartFn),$.addEventListener("select-end",this._selectEndFn),$.addEventListener("update",this._selectUpdateFn),this.context.pre_update_callbacks.push(this.onBeforeUpdate.bind(this)),this.context.input.addEventListener("pointerdown",this.onPointerDown.bind(this))}onDisable(){$.removeEventListener("select-start",this._selectStartFn),$.removeEventListener("select-end",this._selectEndFn),$.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 xi(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,Ve)??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&&j_&&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[gt]){let u=n[gt].gameObject;if(u){if(!Ei.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=wi.updateState(e,t);return i&&this.currentActiveMeshUIComponents.push(i),i!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&wi.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let e=0;e<this.currentActiveMeshUIComponents.length;e++){let t=this.currentActiveMeshUIComponents[e];wi.resetState(t)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(e){return e?R.isActiveSelf(e)?this.testIsVisible(e.parent):!1:!0}},Je=Xi;I(Je,"_eventSystemMap",new Map),I(Je,"didSearchEventSystem",!1);var wi=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(wi,"lastSelected",null),I(wi,"lastUpdateFrame",[]),I(wi,"needsUpdate",!1);import{AxesHelper as H_}from"three";var is="./include";oc.Block.prototype.interactable={get(){return this.interactive},set(o){this.interactable=o}};var gt=Symbol("shadowDomOwner"),We=class extends M{isRoot(){return this.Root?.gameObject===this.gameObject}markDirty(){Je.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,kn)),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,We),!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[gt]=this,e.traverse(r=>{r[gt]===void 0&&(r[gt]=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 H_(.5)),this.onAfterAddedToScene(),n&&oc.update()}set(e){}traverseOwnedShadowComponents(e,t,i){if(!!e&&e[gt]===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)}},kn=class extends We{awake(){super.awake()}};var Ei=class{static getObject(e){let t=e[gt];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=ai(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=ai(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 ma=P("debugwebxrcontroller");var Jr=class extends M{},je=class extends M{static CreateRaycastLine(){let e=new V_(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 X_(.5,22,22),t=new W_({color:this.raycastColor}),i=new z_(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 J_;xn(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 q_(r.hand,a);return r.hand.add(c),r.hand.traverse(u=>u.layers.set(2)),r.handPointerModel=new Y_(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 U_(-Math.PI/4,0,0)))):null}movementVector=new Ci;worldRot=new sc;joystick=new Q_;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),ma&&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,ie(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)}et(this.raycastLine,this.rayRotation)}else this.raycastLine.visible=n,et(this.raycastLine,this.rayRotation),ie(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;ie(e,u)}}}}else i<.1&&(this.didTeleport=!1);s!==null&&(e.scale.set(s,s,s),e.updateMatrixWorld())}isValidTeleportTarget(e){return R.getComponentInParent(e,Jr)!=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(),ma&&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&&ma&&console.log("Grabbed object changed","original",n,"new",r.grab),r.grab&&(this.grabbed=bt.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||Ei.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 N_;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(ma&&(!this.closeGrabBoundingBoxHelper&&e&&(this.closeGrabBoundingBoxHelper=new F_(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 be;e.layerMask=new G_,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=Ei.getObject(r);break}return t}},$=je;I($,"Factory",new K_),I($,"raycastColor",new Dm(.9,.3,.3)),I($,"raycastNoHitColor",new Dm(.6,.6,.6)),I($,"geometry",new B_().setFromPoints([new Ci(0,0,0),new Ci(0,0,-1)])),I($,"handModels",{}),I($,"eventSubs",{}),I($,"PreviousCameraFarDistance"),I($,"MovementSpeedFactor",1);var ot=class{static AddEventListener(e,t){return ot.Events[e]||(ot.Events[e]=[]),ot.Events[e].push(t),t}static RemoveEventListener(e,t){if(!t||!ot.Events[e])return;let i=ot.Events[e].indexOf(t);i>=0&&ot.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 ma&&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 ot;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};ot.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)),ye.Add(e.context,this.selected),ot.Register(this),this.sync&&(this.sync.fastMode=!0),ot.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};ot.Events.WillFree?.forEach(n=>n(this,e)),ye.Remove(this.controller.context,this.selected),ot.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,ot.Events.DidFree?.forEach(n=>n(this,e))}grabPoint=new Ci;localPositionOffsetToGrab=null;localPositionOffsetToGrab_worldSpace=new Ci;localQuaternionToGrab=new sc(0,0,0,1);targetDir=null;quaternionLerp=null;controllerDir=new Ci;controllerWorldPos=new Ci;lastControllerWorldPos=new Ci;controllerPosDelta=new Ci;totalChangeAlongDirection=0;rigPositionLastFrame=new Ci;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 Ci),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),et(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)),ie(this.selected,i)}if(this.rigidbodies!=null)for(let e of this.rigidbodies)e.wakeUp();oe.markDirty(this.selected,!0)}}},bt=ot;I(bt,"Events",{}),I(bt,"Current",[]);import{Object3D as Lm}from"three";var Z_=P("debugmouth"),ur=class extends M{idle=[];talking=[];marker=null;voip=null;lastMouthChangeTime=0;mouthChangeLength=0;awake(){setTimeout(()=>{this.voip=R.findObjectOfType(rt,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(Lm)],ur.prototype,"idle",2),v([y(Lm)],ur.prototype,"talking",2);var ns=class extends M{voip=null;marker=null;_startPosition=null;awake(){this.voip=R.findObjectOfType(rt,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 $_}from"three";var Qi=class extends M{eyes=[];lastBlinkTime=0;blinkLength=0;eyesOpen=!0;state=null;awake(){this.state=R.getComponentInParent(this.gameObject,Ee)}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($_)],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 zd}from"three";var Wd=class extends M{head=null;eyes=null;target=null;brain=null;awake(){this.brain||(this.brain=R.getComponentInParent(this.gameObject,Sn)),this.brain||(console.log("No look at brain found, adding it now"),this.brain=R.addNewComponent(this.gameObject,Sn)),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=Wd.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=Wd;I(qi,"forward",new ac.Vector3(0,0,1)),v([y(zd)],qi.prototype,"head",2),v([y(zd)],qi.prototype,"eyes",2),v([y(zd)],qi.prototype,"target",2);import{AxesHelper as ex}from"three";var Mn=class extends M{length=1;depthTest=!0;isGizmo=!0;_axes=null;onEnable(){if(this.isGizmo&&!Di)return;this._axes||(this._axes=new ex(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()],Mn.prototype,"length",2),v([y()],Mn.prototype,"depthTest",2),v([y()],Mn.prototype,"isGizmo",2);import*as jm 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 jm.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),ie(this.gameObject,d);let h=r.clone();h.sub(a),this.gameObject.lookAt(h)}};import{Mesh as tx,Vector3 as dr}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 hr=class extends Ot{radius=.5;center=new dr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addSphereCollider(this,this.center,this.radius)}};v([y()],hr.prototype,"radius",2),v([y(dr)],hr.prototype,"center",2);var pr=class extends Ot{size=new dr(1,1,1);center=new dr(0,0,0);onEnable(){super.onEnable(),this.context.physics.addBoxCollider(this,this.center,this.size)}};v([y(dr)],pr.prototype,"size",2),v([y(dr)],pr.prototype,"center",2);var Zr=class extends Ot{sharedMesh;convex=!1;onEnable(){super.onEnable(),this.sharedMesh?.isMesh||this.gameObject instanceof tx&&(this.sharedMesh=this.gameObject),this.sharedMesh?.isMesh&&this.context.physics.addMeshCollider(this,this.sharedMesh,this.convex,Ae(this.gameObject))}};v([y()],Zr.prototype,"convex",2);var Xt=class extends Ot{center=new dr(0,0,0);radius=.5;height=2;onEnable(){super.onEnable(),this.context.physics.addCapsuleCollider(this,this.center,this.height,this.radius)}};v([y(dr)],Xt.prototype,"center",2),v([y()],Xt.prototype,"radius",2),v([y()],Xt.prototype,"height",2);import*as $r from"three";var ix=P("gizmos"),nx=P("debugboxhelper"),Qt=class extends M{box=null;_lastMatrixUpdateFrame=-1;isInBox(e,t){if(!e)return;if(this.box||(this.box=new $r.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&&nx&&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 $r.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(!(!ix&&!t)){if(this._helper){e&&this._color?.set(e),this.gameObject.add(this._helper);return}this._helper=cl(e),this.gameObject.add(this._helper)}}},Ne=Qt;I(Ne,"testBox",new $r.Box3),I(Ne,"_position",new $r.Vector3),I(Ne,"_size",new $r.Vector3(.01,.01,.01));import{Color as lx,Texture as zm}from"three";import{LinearEncoding as sx,sRGBEncoding as ax}from"three";import*as Qd from"three-mesh-ui";import{Matrix4 as rx,Object3D as ox,Vector2 as Gm,Vector3 as Xd}from"three";import{FrontSide as Hm,DoubleSide as Fm}from"three";function Nd(o){let e=o[gt];return e||(o.parent?Nd(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?Fm:Hm,t.depthWrite=e.depthWrite??!1,t.shadowSide=e.doubleSided?Fm:Hm,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 Bm=Symbol("Scheduled action");function Um(o,e,t=3){let i=o[Bm];i||(i=o[Bm]={});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 Vm=P("debugui"),ss=class{width;height},eo=class{x;y;width;height},vt=class extends We{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 Xd),this._anchoredPosition}rect;sizeDelta;anchoredPosition3D;pivot;lastMatrix;rectBlock;_transformNeedsUpdate=!1;awake(){super.awake(),this.lastMatrix=new rx,this.rectBlock=new ox,this.rectBlock.position.z=.1,this.rectBlock.name=this.name,this._anchoredPosition||(this._anchoredPosition=new Xd),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)&&(Vm&&console.log("updating",this.name),this.applyTransform()),Je.ensureUpdateMeshUI(Qd,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},Vm&&console.log(this.name,e);let t=new Qd.Block(e);return this._createdBlocks.push(t),t}};v([y(eo)],vt.prototype,"rect",2),v([y(Gm)],vt.prototype,"sizeDelta",2),v([y(Xd)],vt.prototype,"anchoredPosition3D",2),v([y(Gm)],vt.prototype,"pivot",2);var ga=class extends We{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,vt)),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",()=>Um(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===ax)if(ga.textureCache.has(e))e=ga.textureCache.get(e);else{let t=e.clone();t.encoding=sx,ga.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)}},yt=ga;I(yt,"textureCache",new Map),v([y(Q)],yt.prototype,"color",1),v([y()],yt.prototype,"raycastTarget",2);var In=class extends yt{onAfterCreated(){this.uiObject&&(this.uiObject.scale.y*=-1)}};var cc=class{texture;rect};v([y(zm)],cc.prototype,"texture",2);var An=class extends In{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 lx(.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)],An.prototype,"sprite",1);var to=class extends In{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(zm)],to.prototype,"mainTexture",1);var as=P("debugbutton");var Dn=class{colorMultiplier;disabledColor;fadeDuration;highlightedColor;normalColor;pressedColor;selectedColor};v([y()],Dn.prototype,"colorMultiplier",2),v([y(Q)],Dn.prototype,"disabledColor",2),v([y()],Dn.prototype,"fadeDuration",2),v([y(Q)],Dn.prototype,"highlightedColor",2),v([y(Q)],Dn.prototype,"normalColor",2),v([y(Q)],Dn.prototype,"pressedColor",2),v([y(Q)],Dn.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,An),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(Pe)],qt.prototype,"animator",2),v([y()],qt.prototype,"interactable",1);var qd=class extends kn{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 qd||(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,We))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}}},Xe=qd;v([y()],Xe.prototype,"renderOnTop",1),v([y()],Xe.prototype,"depthWrite",1),v([y()],Xe.prototype,"doubleSided",1),v([y()],Xe.prototype,"castShadows",1),v([y()],Xe.prototype,"receiveShadows",1),v([y()],Xe.prototype,"renderMode",1),v([y(Xe)],Xe.prototype,"rootCanvas",1),v([y()],Xe.prototype,"scaleFactor",1);var Ln=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,yt,this._buffer)){let t=e.color;t.alpha=this._alpha,e.color=t}}};v([y()],Ln.prototype,"alpha",1),v([y()],Ln.prototype,"interactable",2),v([y()],Ln.prototype,"blocksRaycasts",2);import{Quaternion as gx,Ray as bx,Vector3 as io}from"three";import*as Wm from"three";import{Color as ux,Object3D as dx,Texture as hx,WebGLRenderTarget as px}from"three";import{WebGLRenderTarget as cx}from"three";var ls=class extends cx{};var Kd=class extends Li{constructor(){super([ux,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 Wm.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}}},OL=new Kd,Jd=class extends Li{constructor(){super(dx)}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):((Ba()||pe)&&console.warn("Could not resolve object reference",t.path,e,t.target,t.context.scene),e.could_not_resolve=!0),i}}}},fx=new Jd,Zd=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;(Ba()||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}}},Yd=new Zd,$d=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 vi(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=Yd.findObjectForGuid(s.target,t.root);!a&&t.context?.scene&&(a=Yd.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&&(Ba()||pe)&&h()}}let u,l=s.argument;s.argument!==void 0?(typeof l=="object"&&(l=fx.onDeserialize(s.argument,t),l||(l=Yd.onDeserialize(s.argument,t))),u=new vi(c?(...h)=>d(...h):void 0,s.enabled)):u=new vi(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}}},kL=new $d,eh=class extends Li{constructor(){super([ls,px])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof hx&&t.type===ls){let i=e,n=new ls(i.image.width,i.image.height);return n.texture=i,n}}};new eh;var Yi=class extends M{center=new io(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(io)],Yi.prototype,"center",2),v([y()],Yi.prototype,"radius",2),v([y()],Yi.prototype,"height",2);var Ti=class extends M{controller;movementSpeed=2;rotationSpeed=2;jumpForce=1;animator;lookForward=!0;_currentSpeed=new io(0,0,0);_currentAngularSpeed=new io(0,0,0);_temp=new io(0,0,0);_jumpCount=0;_currentRotation;awake(){this._currentRotation=new gx}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 io(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 io(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 bx),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 be};v([y(Yi)],Ti.prototype,"controller",2),v([y()],Ti.prototype,"movementSpeed",2),v([y()],Ti.prototype,"rotationSpeed",2),v([y()],Ti.prototype,"jumpForce",2),v([y(Pe)],Ti.prototype,"animator",2);import{LinearToneMapping as th,ACESFilmicToneMapping as Nm,ReinhardToneMapping as vx}from"three";var uc=P("debugvolume"),Qm=(i=>(i[i.None=0]="None",i[i.Neutral=1]="Neutral",i[i.ACES=2]="ACES",i))(Qm||{}),cs=class{overrideState=!1;value=0},Ki=class{active=!1;parameters},mr=class extends Ki{mode;get isToneMapping(){return!0}},gr=class extends Ki{postExposure};function yx(o){return"mode"in o?mr:"postExposure"in o?gr:Ki}var Xm=Symbol("volumeprofile"),fr=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[Xm]!==void 0;if(t){if(!r)return}else i[Xm]=this;for(let s of this.components)if(s instanceof mr){let a=s;if(!s.active||t){e.renderer.toneMapping=th;continue}uc&&console.log("VOLUME:",Qm[a.mode?.value??0]);let c=a.mode;switch((c?.overrideState?c?.value:0)??0){case 0:e.renderer.toneMapping=th;break;case 1:e.renderer.toneMapping=vx;break;case 2:e.renderer.toneMapping=Nm;break}}else if(s instanceof gr){let a=s;uc&&console.log(a.postExposure);let c=1;a.postExposure&&(c=Math.pow(2,a.postExposure.value)),e.renderer.toneMapping,Nm;let u=a.postExposure?.overrideState&&!t;e.renderer.toneMappingExposure=u?c:1,e.renderer.toneMapping||(e.renderer.toneMapping=th)}}};v([y([o=>yx(o),Ki])],fr.prototype,"components",2);var no=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(fr)],no.prototype,"sharedProfile",2);import{Matrix4 as qm,Quaternion as _x,Vector3 as $e,Vector2 as Ym,Euler as xx}from"three";import{createNoise4D as wx}from"simplex-noise";var Ex=P("debugparticles");var Si=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()],Si.prototype,"alphaKeys",2),v([y()],Si.prototype,"colorKeys",2);var Km=(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))(Km||{});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(gi)],U.prototype,"curve",2),v([y(gi)],U.prototype,"curveMin",2),v([y(gi)],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(Si)],Me.prototype,"gradient",2),v([y(Si)],Me.prototype,"gradientMin",2),v([y(Si)],Me.prototype,"gradientMax",2);var _e=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)],_e.prototype,"gravityModifier",2),v([y(Me)],_e.prototype,"startColor",2),v([y(U)],_e.prototype,"startDelay",2),v([y(U)],_e.prototype,"startLifetime",2),v([y(U)],_e.prototype,"startRotation",2),v([y(U)],_e.prototype,"startRotationX",2),v([y(U)],_e.prototype,"startRotationY",2),v([y(U)],_e.prototype,"startRotationZ",2),v([y(U)],_e.prototype,"startSize",2),v([y(U)],_e.prototype,"startSizeX",2),v([y(U)],_e.prototype,"startSizeY",2),v([y(U)],_e.prototype,"startSizeZ",2),v([y(U)],_e.prototype,"startSpeed",2);var Hn=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}},_t=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()],_t.prototype,"enabled",2),v([y()],_t.prototype,"bursts",2),v([y(U)],_t.prototype,"rateOverTime",2),v([y()],_t.prototype,"rateOverTimeMultiplier",2),v([y(U)],_t.prototype,"rateOverDistance",2),v([y()],_t.prototype,"rateOverDistanceMultiplier",2);var jn=class{enabled;color};v([y(Me)],jn.prototype,"color",2);var Kt=class{enabled;separateAxes;size;sizeMultiplier;x;xMultiplier;y;yMultiplier;z;zMultiplier;_time=0;_temp=new $e;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 Km[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 xx;scale;radius;radiusThickness;sphericalDirectionAmount;randomDirectionAmount;randomPositionAmount;system;_space;_worldSpaceMatrix=new qm;_worldSpaceMatrixInverse=new qm;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 $e(0,0,0);_temp=new $e(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 $e;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),Ex&&(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 $e(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}},ne=us;I(ne,"_randomQuat",new _x),I(ne,"_tempVec",new $e),v([y()],ne.prototype,"shapeType",2),v([y()],ne.prototype,"enabled",2),v([y()],ne.prototype,"alignToDirection",2),v([y()],ne.prototype,"angle",2),v([y()],ne.prototype,"arc",2),v([y()],ne.prototype,"arcSpread",2),v([y()],ne.prototype,"arcSpeedMultiplier",2),v([y()],ne.prototype,"arcMode",2),v([y($e)],ne.prototype,"boxThickness",2),v([y($e)],ne.prototype,"position",2),v([y($e)],ne.prototype,"rotation",2),v([y($e)],ne.prototype,"scale",2),v([y()],ne.prototype,"radius",2),v([y()],ne.prototype,"radiusThickness",2),v([y()],ne.prototype,"sphericalDirectionAmount",2),v([y()],ne.prototype,"randomDirectionAmount",2),v([y()],ne.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 $e;apply(e,t,i,n,r,s){if(!this.enabled)return;this._noise||(this._noise=wx(()=>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 te=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()],te.prototype,"enabled",2),v([y()],te.prototype,"attachRibbonToTransform",2),v([y(Me)],te.prototype,"colorOverLifetime",2),v([y(Me)],te.prototype,"colorOverTrail",2),v([y()],te.prototype,"dieWithParticles",2),v([y()],te.prototype,"inheritParticleColor",2),v([y(U)],te.prototype,"lifetime",2),v([y()],te.prototype,"lifetimeMultiplier",2),v([y()],te.prototype,"minVertexDistance",2),v([y()],te.prototype,"mode",2),v([y()],te.prototype,"ratio",2),v([y()],te.prototype,"ribbonCount",2),v([y()],te.prototype,"shadowBias",2),v([y()],te.prototype,"sizeAffectsLifetime",2),v([y()],te.prototype,"sizeAffectsWidth",2),v([y()],te.prototype,"splitSubEmitterRibbons",2),v([y()],te.prototype,"textureMode",2),v([y(U)],te.prototype,"widthOverTrail",2),v([y()],te.prototype,"widthOverTrailMultiplier",2),v([y()],te.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 $e;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 xe=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()],xe.prototype,"animation",2),v([y()],xe.prototype,"enabled",2),v([y()],xe.prototype,"cycleCount",2),v([y(U)],xe.prototype,"frameOverTime",2),v([y()],xe.prototype,"frameOverTimeMultiplier",2),v([y()],xe.prototype,"numTilesX",2),v([y()],xe.prototype,"numTilesY",2),v([y(U)],xe.prototype,"startFrame",2),v([y()],xe.prototype,"startFrameMultiplier",2),v([y()],xe.prototype,"rowMode",2),v([y()],xe.prototype,"rowIndex",2),v([y()],xe.prototype,"spriteCount",2),v([y()],xe.prototype,"timeMode",2);var Ze=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()],Ze.prototype,"enabled",2),v([y()],Ze.prototype,"separateAxes",2),v([y(U)],Ze.prototype,"x",2),v([y()],Ze.prototype,"xMultiplier",2),v([y(U)],Ze.prototype,"y",2),v([y()],Ze.prototype,"yMultiplier",2),v([y(U)],Ze.prototype,"z",2),v([y()],Ze.prototype,"zMultiplier",2);var Qe=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()],Qe.prototype,"enabled",2),v([y()],Qe.prototype,"range",2),v([y()],Qe.prototype,"separateAxes",2),v([y(U)],Qe.prototype,"x",2),v([y()],Qe.prototype,"xMultiplier",2),v([y(U)],Qe.prototype,"y",2),v([y()],Qe.prototype,"yMultiplier",2),v([y(U)],Qe.prototype,"z",2),v([y()],Qe.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 $e;_temp2=new $e;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 $e;_temp=new $e;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(Ym)],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 Ri=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()],Ri.prototype,"enabled",2),v([y(Ym)],Ri.prototype,"range",2),v([y(Me)],Ri.prototype,"color",2);var ro=class extends Ne{},ds=class extends M{deleteBoxes=[];awake(){this.deleteBoxes=R.findObjectsOfType(ro,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 oo=class extends M{visibleOn;onEnable(){this.apply()}apply(){this.test()||R.setActive(this.gameObject,!1)}test(){return this.visibleOn<0?!0:Cx()?(this.visibleOn&2)!==0:(this.visibleOn&1)!==0}};v([y()],oo.prototype,"visibleOn",2);var dc;function Cx(){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 ih=!1;var Fn=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(Ve,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,Fn);!t||t!==this||(Fn.lastHovered=e.object,this.context.domElement.style.cursor="pointer")}onPointerExit(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||Fn.lastHovered===e.object&&(this.context.domElement.style.cursor="auto")}_waitingForDragStart=null;onPointerDown(e){!this.allowEdit(this.gameObject)||V.IsInWebXR||(Fn._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)&&(Fn._active>0&&(Fn._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,Fn);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);ih&&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=Kc();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(ih&&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=Kc();R.invokeOnChildren(t,i("onDragEnd"))}},Ji=Fn;I(Ji,"_active",0),I(Ji,"lastHovered");var nh=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(nh.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&&ye.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}ye.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)){ih&&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(ie(this._selected,e),ie(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),ie(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 be;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(){oe.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=nh;I(hc,"geometry",new Y.BufferGeometry().setFromPoints([new Y.Vector3(0,0,0),new Y.Vector3(0,-1,0)]));var Pi=class extends M{url=null;urlParameterName=null;localhost=null;awake(){this.context.connection.registerProvider(this)}getWebsocketUrl(){let e=this.url?Pi.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=Pi.IsLocalNetwork()&&t;return n&&(i=t),e?.startsWith("/")&&(i=(n?i:window.location.origin)+e),i}static IsLocalNetwork(e=window.location.hostname){return ct(e)}};var br=class extends M{filesBackendUrl;localhost;_dragOver;_drop;onEnable(){this.filesBackendUrl=this.filesBackendUrl?Pi.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 Uu(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 Uu(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 Gf(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 be;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()],br.prototype,"filesBackendUrl",2),v([y()],br.prototype,"localhost",2);import{Vector3 as Tx,Quaternion as Rx,Object3D as Jm}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 Tx(0,0,0),this._startQuaternion=this.object.quaternion?.clone()??new Rx(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),$.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(Jm)],Zi.prototype,"parent",2),v([y(Jm)],Zi.prototype,"object",2),v([y()],Zi.prototype,"limitCount",2),v([y()],Zi.prototype,"limitInterval",2);var ba=class{eventID;callback};v([y()],ba.prototype,"eventID",2),v([y(de)],ba.prototype,"callback",2);var so=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(ba)],so.prototype,"triggers",2);import*as en from"three";import*as va from"three";var Bn=class{get lightmap(){return this.lightmapTexture}set lightmap(e){e!==this.lightmapTexture&&(this.lightmapTexture=e,this.setupLightmap())}lightmapIndex=-1;lightmapScaleOffset=new va.Vector4(1,1,0,0);context;gameObject;lightmapTexture=null;lightmapScaleOffsetUniform={value:new va.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 va.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 Ix,Object3D as Ax,Vector4 as Dx}from"three";import{EquirectangularReflectionMapping as Sx,sRGBEncoding as Px,Vector3 as Zm}from"three";var hs=P("debugreflectionprobe"),$m=P("noreflectionprobe"),Ox=Symbol("reflectionProbeKey"),kx=Symbol("original material"),$i=class extends M{static get(e,t,i){if(!e||e.isObject3D!==!0||$m)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(Ne),this._boxHelper.updateBox(!0),hs&&this._boxHelper.showHelper(5592320,!0),this.texture&&(this.texture.mapping=Sx,this.texture.encoding=Px,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($m||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[Ox]=this,a[kx]=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(Zm)],Zt.prototype,"center",2),v([y(Zm)],Zt.prototype,"size",2);import{Layers as DH}from"three";var Mx=Symbol("customVisibilityFlag");function pc(o,e){o.layers[Mx]=e}var jH=Symbol("DidPatchLayers");var eg=P("noInstancing"),tg=!!P("debuglightmaps"),Lx=P("debuginstancing"),jx=P("debugprogressive"),Hx=P("noprogressive"),Fx=P("wireframe");var ps=class{path=null;asset=null;default};var nh=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=rh.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 nh(this)),this._sharedMaterials}static get shouldSuppressInstancing(){return eg}_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 Ix(.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 Bn(this.gameObject,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,tg)}}else if(this.isMultiMaterialObject(this.gameObject)&&this.sharedMaterials.length>0){for(let i of this.gameObject.children)if(!i.material?.isMeshBasicMaterial){let n=new Bn(i,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,tg),n.bindOnBeforeRender()}}}}if(Fx)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=Bx.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&&!eg&&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(){Wr.applyStencil(this)}onBeforeRender(){if(!this.gameObject)return;mc.envmap=this.scene.environment;let e=this.gameObject[al]===!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[al],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(!Hx&&r._didRequestTextureLOD===void 0&&this.allowProgressiveLoading&&(r._didRequestTextureLOD=0,jx&&console.log("Load material LOD",r.name),mi.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==rh.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(Dx)],ae.prototype,"lightmapScaleOffset",2),v([y()],ae.prototype,"enableInstancing",2),v([y()],ae.prototype,"renderOrder",2),v([y()],ae.prototype,"allowOcclusionWhenDynamic",2),v([y(Ax)],ae.prototype,"probeAnchor",2),v([y()],ae.prototype,"reflectionProbeUsage",2);var ao=class extends ae{},fs=class extends ao{awake(){super.awake(),this.allowOcclusionWhenDynamic=!1}},rh=(n=>(n[n.Off=0]="Off",n[n.On=1]="On",n[n.TwoSided=2]="TwoSided",n[n.ShadowsOnly=3]="ShadowsOnly",n))(rh||{}),oh=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}},Bx=new oh,sh=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)}},ah=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,Lx&&(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 sh(-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,ah.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=ah;I(fc,"nullMatrix",new en.Matrix4);import{Vector3 as ig}from"three";var ya=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)],ya.prototype,"connectedBody",2);var ms=class extends ya{createJoint(e,t){this.context.physics.addFixedJoint(e,t)}},vr=class extends ya{anchor;axis;createJoint(e,t){this.axis&&this.anchor&&this.context.physics.addHingeJoint(e,t,this.anchor,this.axis)}};v([y(ig)],vr.prototype,"anchor",2),v([y(ig)],vr.prototype,"axis",2);import{FlyControls as Ux}from"three/examples/jsm/controls/FlyControls";var gs=class extends M{_controls=null;onEnable(){let e=R.getComponent(this.gameObject,Z)?.cam;this._controls=new Ux(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 zx}from"three/examples/jsm/exporters/GLTFExporter.js";import{BufferAttribute as lh,Matrix4 as Gx,Vector3 as ng,Quaternion as Vx}from"three";var _a=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 Gx,a=new Array,c=new Array,u=new Array;for(let g=0;g<e.count;g++){e.getMatrixAt(g,s);let E=new ng,_=new Vx,x=new ng;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 lh(l,3)),ROTATION:i.processAccessor(new lh(d,4)),SCALE:i.processAccessor(new lh(h,3))},n[this.name]=!0}};import{Object3D as Wx,Vector3 as Nx}from"three";var bs=class extends Ne{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 zx,this.exporter.register(a=>new _a(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 Wx;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 Nx;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 lo=class extends M{awake(){Je.createIfNoneExists(this.context)}onEnable(){Je.instance?.register(this)}onDisable(){Je.instance?.unregister(this)}performRaycast(e=null){return null}},co=class extends lo{targets=null;raycastHits=[];start(){this.targets=[this.gameObject]}performRaycast(e=null){return this.targets?(e??=new be,e.targets=this.targets,e.results=this.raycastHits,this.context.physics.raycast(e)):null}},vs=class extends co{};import{Color as gc,GridHelper as Xx}from"three";var Un=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 Xx(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()],Un.prototype,"isGizmo",2),v([y(gc)],Un.prototype,"color0",2),v([y(gc)],Un.prototype,"color1",2);var Gn=class extends M{reverseArrangement=!1},ys=class extends Gn{},_s=class extends Gn{},xs=class extends Gn{};import{GroundProjectedEnv as Qx}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 dn(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 Qx(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 rg from"three-mesh-ui";import{Color as L}from"three";var qx=P("debugtext");var Ie=class extends yt{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){qx&&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[gt]===void 0&&(e[gt]=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 rg.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 xa(e,{fontColor:t.fontColor});if(i.push(n),e.type.length>6){let r=e.type.substring(6);t.fontColor=Yx(r)}else t.fontColor=new L(1,1,1)}else if(e.type=="b"){let n=new xa(e,{fontFamily:t.fontFamily,fontTexture:t.fontTexture});i.push(n),this.setFont(t,1)}else if(e.type=="i"){let n=new xa(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(Xe)],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 xa=class{tag;previousValues;constructor(e,t){this.tag=e,this.previousValues=t}};function Yx(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 uo=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(){uo&&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){uo&&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&&(uo&&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||"",uo&&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,uo&&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(uo&&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){uo&&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=Wd(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 og from"three-mesh-ui";import*as wa from"three";var sg=(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))(sg||{}),ws=class extends We{font;text;keymap;padding;margin;fontSize;borderRadius;colors={keyboardBack:8750469,panelBack:2500134,button:3552822,hovered:1842204,selected:1088605};awake(){super.awake();let e=sg[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,vt);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 wa.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 og.Keyboard(n),this.gameObject.scale.set(1,1,1),this.keyboard.keys.forEach(s=>{s.setupState({state:"normal",attributes:{offset:.003,backgroundColor:new wa.Color(this.colors.button),backgroundOpacity:1}}),s.setState("normal"),s.setupState({state:"hovered",attributes:{offset:.3,backgroundColor:new wa.Color(this.colors.hovered),backgroundOpacity:1}}),s.setupState({state:"pressed",attributes:{offset:.1,backgroundColor:new wa.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 st from"three";import{Color as Kx}from"three";function ch(o){return o*Math.PI/180}var ag=300,uh=P("debuglights");var qe=class extends M{type=0;range=1;spotAngle=1;innerSpotAngle=1;color=new st.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 st.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,mt)??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 st.DirectionalLight(this.color,this.intensity*Math.PI);if(t.position.set(0,0,-ag*.5).applyQuaternion(this.gameObject.quaternion),this.gameObject.add(t.target),pn(t.target,0,0,0),this.light=t,this.gameObject.position.set(0,0,0),this.gameObject.rotation.set(0,0,0),uh){let s=new st.DirectionalLightHelper(this.light,.2,this.color);this.context.scene.add(s)}break;case 0:let i=new st.SpotLight(this.color,this.intensity*Math.PI,this.range,ch(this.spotAngle/2),1-ch(this.innerSpotAngle/2)/ch(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 st.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),uh&&console.log("Override shadow bias?",this._overrideShadowBiasSettings,this.shadowBias,this.shadowNormalBias),this._overrideShadowBiasSettings===!0?(this.light.shadow.bias=this.shadowBias,this.light.shadow.normalBias=this.shadowNormalBias):(this.light.shadow.bias=this.shadowBias*1e-5,this.light.shadow.normalBias=this.shadowNormalBias*1e-4),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=ag*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,uh&&this.context.scene.add(new st.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(Kx)],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 CF=new st.Vector3(0,0,0);import*as bc from"three";import{Vector3 as Jx}from"three";var Es=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 dh=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}},yr=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&&(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 dh(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(Jx)],yr.prototype,"localReferencePoint",2),v([y(nn)],yr.prototype,"lodModels",2);var $x=P("logstats"),Cs=class extends M{onEnable(){console.log(this),$x&&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 hh=P("debugnestedgltf"),ho=class extends M{filePath;_isLoadingOrDoneLoading=!1;listenToProgress(e){this.filePath?.beginListenDownload(e)}preload(){this.filePath?.preload()}async start(){if(this._isLoadingOrDoneLoading)return;hh&&console.log(this,this.guid);let e=this.gameObject.parent;if(e){this._isLoadingOrDoneLoading=!0;let t=new Ue;t.idProvider=new Re(this.hash(this.guid)),t.parent=e,this.gameObject.updateMatrix();let i=this.gameObject.matrix;hh&&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(),hh&&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(it)],ho.prototype,"filePath",2);import{Quaternion as ew,Euler as tw,Vector3 as po,Plane as iw}from"three";var rn=class extends M{referenceSpace;from;affectPosition=!1;affectRotation=!1;alignLookDirection=!1;levelLookDirection=!1;levelPosition=!1;positionOffset=new po(0,0,0);rotationOffset=new po(0,0,0);offset=new po(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 iw(this.gameObject.up,0),c=B(this.referenceSpace);a.setFromNormalAndCoplanarPoint(this.gameObject.up,c);let u=new po(0,0,0);a.projectPoint(e,u),e.copy(u)}this.affectPosition&&ie(this.gameObject,e);let n=new tw(this.rotationOffset.x,this.rotationOffset.y,this.rotationOffset.z),r=new ew().setFromEuler(n);this.affectRotation&&et(this.gameObject,t.multiply(r));let s=new po;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(po)],rn.prototype,"positionOffset",2),v([y(po)],rn.prototype,"rotationOffset",2);import{Vector3 as vc,Quaternion as nw,Matrix4 as ph}from"three";var $F=new vc(1,1,1),eB=new vc(0,0,1),tB=Symbol("emitterMatrix"),_r=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 ph,r)}type="NeedleParticleSubEmitter";q_=new nw;v_=new vc;v2_=new vc;_emitterMatrix=new ph;_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 ph;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 rw,Material as lg,Mesh as cg,Object3D as ow,Quaternion as fh,Vector3 as Ea,Vector4 as sw}from"three";import{BatchedParticleRenderer as aw,ConstantColor as lw,ConstantValue as cw,ParticleSystem as uw,RenderMode as yc,TrailParticle as ug}from"three.quarks";var bg=P("debugparticles"),xr=class{particleSystem;_deserialize(e){let t=this.particleSystem;t&&!(t instanceof ve)&&typeof t.guid=="string"&&(bg&&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 cg&&(e=this.particleMesh.geometry),e===null&&(e=new Rs.BoxGeometry(1,1,1)),new cg(e,this.getMaterial())}};v([y()],on.prototype,"renderMode",2),v([y(lg)],on.prototype,"particleMaterial",2),v([y(lg)],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 Ca=class{type="value";toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}system;constructor(e){this.system=e}},mh=class extends Ca{genValue(){return this.system.textureSheetAnimation.getStartIndex()}},gh=class extends Ca{_lastPosition=new Ea;_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)}},bh=class extends Ca{genValue(){return 0}},wr=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.")}},vh=class extends wr{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)}}},dg=Symbol("particleRotation"),yh=class extends wr{type="NeedleRotation";initialize(e){e[dg]=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[dg])*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}}},hg=Symbol("sizeLerpFactor"),_h=class extends wr{type="NeedleSize";initialize(e){e[hg]=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[hg]).x);let r=this.system.worldScale.x/this.system.cameraScale;e.size=e.startSize*n*r}}},_c=Symbol("particleLife"),xc=Symbol("trailLifetime"),pg=Symbol("trailStartLength"),xh=class extends wr{type="NeedleTrail";initialize(e){e instanceof ug&&(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[pg]=e.length)}update(e){if(this.system.trails?.enabled&&e instanceof ug){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[pg],0,s)}}}},wc=Symbol("startVelocity"),fg=Symbol("gravityModifier"),Ec=Symbol("velocity lerp factor"),mg=new Ea,JB=new fh,wh=class extends wr{type="NeedleVelocity";_gravityDirection=new Ea;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[fg]=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[fg];n!==0&&(mg.copy(this._gravityDirection).multiplyScalar(n),i.add(mg)),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)}},gg=Symbol("colorLerpFactor"),Eh=class extends wr{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[gg]=Math.random()}update(e,t){if(this.system.colorOverLifetime.enabled){let i=e.age/e.life,n=this.system.colorOverLifetime.color.evaluate(i,e[gg]);e.color.set(n.r,n.g,n.b,n.alpha).multiply(e.startColor)}else e.color.copy(e.startColor)}},Ch=class{system;emission;get anim(){return this.system.textureSheetAnimation}constructor(e){this.system=e,this.emission=new gh(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 lw(new sw(1,1,1,1))}get emissionOverTime(){return this.emission}get emissionOverDistance(){return new bh(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 cw(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 Cl(new Q(1,1,1,1),1)}get startTileIndex(){return new mh(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}},Th=class{burstIndex=0;burstWaveIndex=0;time=0;waitEmiting=0},Rh=class extends M{play(e=!1){e&&R.foreachComponent(this.gameObject,t=>{t instanceof Rh&&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 Th),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 fh;get worldQuaternion(){return this.__worldQuaternion}_worldQuaternionInverted=new fh;get worldQuaternionInverted(){return this._worldQuaternionInverted}_worldScale=new Ea;get worldScale(){return this._worldScale}_worldPositionFrame=-1;_worldPos=new Ea;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 Hn)){let n=new Hn;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 xr)){let n=new xr;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 ow,this._container.matrixAutoUpdate=!1,this.main.simulationSpace==0?this.gameObject.add(this._container):this.context.scene.add(this._container),this._batchSystem=new aw,this._batchSystem.name=this.gameObject.name,this._container.add(this._batchSystem),this._interface=new Ch(this),this._particleSystem=new uw(this._batchSystem,this._interface),this._particleSystem.addBehavior(new _h(this)),this._particleSystem.addBehavior(new Eh(this)),this._particleSystem.addBehavior(new vh(this)),this._particleSystem.addBehavior(new yh(this)),this._particleSystem.addBehavior(new wh(this)),this._particleSystem.addBehavior(new xh(this));let e=this._particleSystem.emitter;this.context.scene.add(e),bg&&(console.log(this),this.gameObject.add(new rw(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 _r(this,this._particleSystem,e.particleSystem,t);this._particleSystem.addBehavior(i)}}}},ve=Rh;v([y(jn)],ve.prototype,"colorOverLifetime",2),v([y(_e)],ve.prototype,"main",2),v([y(_t)],ve.prototype,"emission",2),v([y(Kt)],ve.prototype,"sizeOverLifetime",2),v([y(ne)],ve.prototype,"shape",2),v([y(K)],ve.prototype,"noise",2),v([y(te)],ve.prototype,"trails",2),v([y(He)],ve.prototype,"velocityOverLifetime",2),v([y(ue)],ve.prototype,"limitVelocityOverLifetime",2),v([y(Jt)],ve.prototype,"inheritVelocity",2),v([y(Ri)],ve.prototype,"colorBySpeed",2),v([y(xe)],ve.prototype,"textureSheetAnimation",2),v([y(Ze)],ve.prototype,"rotationOverLifetime",2),v([y(Qe)],ve.prototype,"rotationBySpeed",2),v([y(ke)],ve.prototype,"sizeBySpeed",2);import*as yg from"three";function*vg(o,e=null){let t=e?e.time:G.Current.time,i=t.time;for(;t.time-i<o;)yield}var xt=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 vg(.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=xt.hashCode(e),i=xt.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 yg.Color(t/255,i/255,n/255)}};import{RGBELoader as pw}from"three/examples/jsm/loaders/RGBELoader.js";import{EXRLoader as fw}from"three/examples/jsm/loaders/EXRLoader";import{EquirectangularRefractionMapping as mw,sRGBEncoding as gw,TextureLoader as wg}from"three";var _g=P("debugautosync"),Sh=class{_syncers={};getOrCreateSyncer(e){if(!e.guid)return null;if(this._syncers[e.guid])return this._syncers[e.guid];let t=new Ph(e);return this._syncers[e.guid]=t,t}},xg=new Sh,Ph=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)){_g&&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 dw(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 hw(o){if(o.__autoPropertySyncHandler)return o.__autoPropertySyncHandler;let e=xg.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;_g&&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=xg.getOrCreateSyncer(this),Object.getOwnPropertyDescriptor(this,t)?.set===void 0&&Object.defineProperty(this,t,{set:function(u){let l=this[a];this[a]=u,dw(u,l)&&n?.call(this,u,l)!==!1&&hw(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;if(!e?.endsWith(".hdr")&&!e.endsWith(".exr")&&console.warn("Potentially invalid skybox url",this.url,"on",this.name),!this._loader){let n=e.endsWith(".exr"),r=e.endsWith(".hdr");n?this._loader=new fw:r?this._loader=new pw:this._loader=new wg}let t=await this._loader.loadAsync(e);if(!t||!this.enabled)return;this.url=e,t.mapping=mw,this._loader instanceof wg&&(t.encoding=gw),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 xw,ShaderMaterial as ww,Texture as Ew,Vector2 as Oh,Vector4 as Cw}from"three";function bw(){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 Eg(o){await bw(),o()}import{PlaneGeometry as vw,MeshBasicMaterial as yw,Mesh as _w}from"three";var Tc=class{static createPrimitive(e,t){let i;switch(e){case 0:let n=new vw(1,1,1,1),r=t?.material??new yw({color:16777215});i=new _w(n,r)}return t?.name&&(i.name=t.name),i}};var Rc=P("debugvideo");var Cg=(n=>(n[n.CameraFarPlane=0]="CameraFarPlane",n[n.CameraNearPlane=1]="CameraNearPlane",n[n.RenderTexture=2]="RenderTexture",n[n.MaterialOverride=3]="MaterialOverride",n))(Cg||{}),Te=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(),Eg(()=>{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 kh(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,Cg[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(xw)],Te.prototype,"renderer",2),v([y()],Te.prototype,"playOnAwake",2),v([y()],Te.prototype,"playOnEnable",2),v([y()],Te.prototype,"aspectMode",2),v([y()],Te.prototype,"renderMode",2),v([y()],Te.prototype,"targetMaterialProperty",2),v([y(ae)],Te.prototype,"targetMaterialRenderer",2),v([y(Ew)],Te.prototype,"targetTexture",2),v([y()],Te.prototype,"time",2),v([y()],Te.prototype,"playbackSpeed",1),v([y()],Te.prototype,"isLooping",1);var kh=class{context;constructor(e){this.context=e,this._input=new Mh(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 Ih(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},Mh=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 Oh;window.addEventListener("mousemove",n=>{if(this.overlay.enabled&&this.context.input.getPointerPressed(0)){let r=new Oh(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)}},Ih=class extends ww{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 Oh;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 Cw(0,0,1,1)}},this.vertexShader=`
247
+ `,defines:{USE_LIGHTMAP:""}})}};import{AxesHelper as Ix,Object3D as Ax,Vector4 as Dx}from"three";import{EquirectangularReflectionMapping as Sx,sRGBEncoding as Px,Vector3 as Zm}from"three";var hs=P("debugreflectionprobe"),$m=P("noreflectionprobe"),Ox=Symbol("reflectionProbeKey"),kx=Symbol("original material"),$i=class extends M{static get(e,t,i){if(!e||e.isObject3D!==!0||$m)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(Ne),this._boxHelper.updateBox(!0),hs&&this._boxHelper.showHelper(5592320,!0),this.texture&&(this.texture.mapping=Sx,this.texture.encoding=Px,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($m||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[Ox]=this,a[kx]=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(Zm)],Zt.prototype,"center",2),v([y(Zm)],Zt.prototype,"size",2);import{Layers as DH}from"three";var Mx=Symbol("customVisibilityFlag");function pc(o,e){o.layers[Mx]=e}var jH=Symbol("DidPatchLayers");var eg=P("noInstancing"),tg=!!P("debuglightmaps"),Lx=P("debuginstancing"),jx=P("debugprogressive"),Hx=P("noprogressive"),Fx=P("wireframe");var ps=class{path=null;asset=null;default};var rh=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=oh.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 rh(this)),this._sharedMaterials}static get shouldSuppressInstancing(){return eg}_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 Ix(.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 Bn(this.gameObject,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,tg)}}else if(this.isMultiMaterialObject(this.gameObject)&&this.sharedMaterials.length>0){for(let i of this.gameObject.children)if(!i.material?.isMeshBasicMaterial){let n=new Bn(i,this.context);this._lightmaps.push(n),n.init(this.lightmapIndex,this.lightmapScaleOffset,t,tg),n.bindOnBeforeRender()}}}}if(Fx)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=Bx.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&&!eg&&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(){Wr.applyStencil(this)}onBeforeRender(){if(!this.gameObject)return;mc.envmap=this.scene.environment;let e=this.gameObject[al]===!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[al],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(!Hx&&r._didRequestTextureLOD===void 0&&this.allowProgressiveLoading&&(r._didRequestTextureLOD=0,jx&&console.log("Load material LOD",r.name),mi.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==oh.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(Dx)],ae.prototype,"lightmapScaleOffset",2),v([y()],ae.prototype,"enableInstancing",2),v([y()],ae.prototype,"renderOrder",2),v([y()],ae.prototype,"allowOcclusionWhenDynamic",2),v([y(Ax)],ae.prototype,"probeAnchor",2),v([y()],ae.prototype,"reflectionProbeUsage",2);var ao=class extends ae{},fs=class extends ao{awake(){super.awake(),this.allowOcclusionWhenDynamic=!1}},oh=(n=>(n[n.Off=0]="Off",n[n.On=1]="On",n[n.TwoSided=2]="TwoSided",n[n.ShadowsOnly=3]="ShadowsOnly",n))(oh||{}),sh=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}},Bx=new sh,ah=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)}},lh=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,Lx&&(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 ah(-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,lh.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=lh;I(fc,"nullMatrix",new en.Matrix4);import{Vector3 as ig}from"three";var ya=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)],ya.prototype,"connectedBody",2);var ms=class extends ya{createJoint(e,t){this.context.physics.addFixedJoint(e,t)}},vr=class extends ya{anchor;axis;createJoint(e,t){this.axis&&this.anchor&&this.context.physics.addHingeJoint(e,t,this.anchor,this.axis)}};v([y(ig)],vr.prototype,"anchor",2),v([y(ig)],vr.prototype,"axis",2);import{FlyControls as Ux}from"three/examples/jsm/controls/FlyControls";var gs=class extends M{_controls=null;onEnable(){let e=R.getComponent(this.gameObject,Z)?.cam;this._controls=new Ux(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 zx}from"three/examples/jsm/exporters/GLTFExporter.js";import{BufferAttribute as ch,Matrix4 as Gx,Vector3 as ng,Quaternion as Vx}from"three";var _a=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 Gx,a=new Array,c=new Array,u=new Array;for(let g=0;g<e.count;g++){e.getMatrixAt(g,s);let E=new ng,_=new Vx,x=new ng;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 ch(l,3)),ROTATION:i.processAccessor(new ch(d,4)),SCALE:i.processAccessor(new ch(h,3))},n[this.name]=!0}};import{Object3D as Wx,Vector3 as Nx}from"three";var bs=class extends Ne{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 zx,this.exporter.register(a=>new _a(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 Wx;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 Nx;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 lo=class extends M{awake(){Je.createIfNoneExists(this.context)}onEnable(){Je.instance?.register(this)}onDisable(){Je.instance?.unregister(this)}performRaycast(e=null){return null}},co=class extends lo{targets=null;raycastHits=[];start(){this.targets=[this.gameObject]}performRaycast(e=null){return this.targets?(e??=new be,e.targets=this.targets,e.results=this.raycastHits,this.context.physics.raycast(e)):null}},vs=class extends co{};import{Color as gc,GridHelper as Xx}from"three";var Un=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 Xx(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()],Un.prototype,"isGizmo",2),v([y(gc)],Un.prototype,"color0",2),v([y(gc)],Un.prototype,"color1",2);var Gn=class extends M{reverseArrangement=!1},ys=class extends Gn{},_s=class extends Gn{},xs=class extends Gn{};import{GroundProjectedEnv as Qx}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 dn(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 Qx(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 rg from"three-mesh-ui";import{Color as L}from"three";var qx=P("debugtext");var Ie=class extends yt{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){qx&&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[gt]===void 0&&(e[gt]=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 rg.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 xa(e,{fontColor:t.fontColor});if(i.push(n),e.type.length>6){let r=e.type.substring(6);t.fontColor=Yx(r)}else t.fontColor=new L(1,1,1)}else if(e.type=="b"){let n=new xa(e,{fontFamily:t.fontFamily,fontTexture:t.fontTexture});i.push(n),this.setFont(t,1)}else if(e.type=="i"){let n=new xa(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(Xe)],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 xa=class{tag;previousValues;constructor(e,t){this.tag=e,this.previousValues=t}};function Yx(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 uo=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(){uo&&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){uo&&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&&(uo&&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||"",uo&&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,uo&&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(uo&&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){uo&&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=Nd(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 og from"three-mesh-ui";import*as wa from"three";var sg=(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))(sg||{}),ws=class extends We{font;text;keymap;padding;margin;fontSize;borderRadius;colors={keyboardBack:8750469,panelBack:2500134,button:3552822,hovered:1842204,selected:1088605};awake(){super.awake();let e=sg[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,vt);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 wa.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 og.Keyboard(n),this.gameObject.scale.set(1,1,1),this.keyboard.keys.forEach(s=>{s.setupState({state:"normal",attributes:{offset:.003,backgroundColor:new wa.Color(this.colors.button),backgroundOpacity:1}}),s.setState("normal"),s.setupState({state:"hovered",attributes:{offset:.3,backgroundColor:new wa.Color(this.colors.hovered),backgroundOpacity:1}}),s.setupState({state:"pressed",attributes:{offset:.1,backgroundColor:new wa.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 st from"three";import{Color as Kx}from"three";function uh(o){return o*Math.PI/180}var ag=300,dh=P("debuglights");var qe=class extends M{type=0;range=1;spotAngle=1;innerSpotAngle=1;color=new st.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 st.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,mt)??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 st.DirectionalLight(this.color,this.intensity*Math.PI);if(t.position.set(0,0,-ag*.5).applyQuaternion(this.gameObject.quaternion),this.gameObject.add(t.target),pn(t.target,0,0,0),this.light=t,this.gameObject.position.set(0,0,0),this.gameObject.rotation.set(0,0,0),dh){let s=new st.DirectionalLightHelper(this.light,.2,this.color);this.context.scene.add(s)}break;case 0:let i=new st.SpotLight(this.color,this.intensity*Math.PI,this.range,uh(this.spotAngle/2),1-uh(this.innerSpotAngle/2)/uh(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 st.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),dh&&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=ag*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,dh&&this.context.scene.add(new st.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(Kx)],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 CF=new st.Vector3(0,0,0);import*as bc from"three";import{Vector3 as Jx}from"three";var Es=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 hh=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}},yr=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&&(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 hh(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(Jx)],yr.prototype,"localReferencePoint",2),v([y(nn)],yr.prototype,"lodModels",2);var $x=P("logstats"),Cs=class extends M{onEnable(){console.log(this),$x&&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 ph=P("debugnestedgltf"),ho=class extends M{filePath;_isLoadingOrDoneLoading=!1;listenToProgress(e){this.filePath?.beginListenDownload(e)}preload(){this.filePath?.preload()}async start(){if(this._isLoadingOrDoneLoading)return;ph&&console.log(this,this.guid);let e=this.gameObject.parent;if(e){this._isLoadingOrDoneLoading=!0;let t=new Ue;t.idProvider=new Re(this.hash(this.guid)),t.parent=e,this.gameObject.updateMatrix();let i=this.gameObject.matrix;ph&&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(),ph&&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(it)],ho.prototype,"filePath",2);import{Quaternion as ew,Euler as tw,Vector3 as po,Plane as iw}from"three";var rn=class extends M{referenceSpace;from;affectPosition=!1;affectRotation=!1;alignLookDirection=!1;levelLookDirection=!1;levelPosition=!1;positionOffset=new po(0,0,0);rotationOffset=new po(0,0,0);offset=new po(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 iw(this.gameObject.up,0),c=B(this.referenceSpace);a.setFromNormalAndCoplanarPoint(this.gameObject.up,c);let u=new po(0,0,0);a.projectPoint(e,u),e.copy(u)}this.affectPosition&&ie(this.gameObject,e);let n=new tw(this.rotationOffset.x,this.rotationOffset.y,this.rotationOffset.z),r=new ew().setFromEuler(n);this.affectRotation&&et(this.gameObject,t.multiply(r));let s=new po;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(po)],rn.prototype,"positionOffset",2),v([y(po)],rn.prototype,"rotationOffset",2);import{Vector3 as vc,Quaternion as nw,Matrix4 as fh}from"three";var $F=new vc(1,1,1),eB=new vc(0,0,1),tB=Symbol("emitterMatrix"),_r=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 fh,r)}type="NeedleParticleSubEmitter";q_=new nw;v_=new vc;v2_=new vc;_emitterMatrix=new fh;_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 fh;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 rw,Material as lg,Mesh as cg,Object3D as ow,Quaternion as mh,Vector3 as Ea,Vector4 as sw}from"three";import{BatchedParticleRenderer as aw,ConstantColor as lw,ConstantValue as cw,ParticleSystem as uw,RenderMode as yc,TrailParticle as ug}from"three.quarks";var bg=P("debugparticles"),xr=class{particleSystem;_deserialize(e){let t=this.particleSystem;t&&!(t instanceof ve)&&typeof t.guid=="string"&&(bg&&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 cg&&(e=this.particleMesh.geometry),e===null&&(e=new Rs.BoxGeometry(1,1,1)),new cg(e,this.getMaterial())}};v([y()],on.prototype,"renderMode",2),v([y(lg)],on.prototype,"particleMaterial",2),v([y(lg)],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 Ca=class{type="value";toJSON(){throw new Error("Method not implemented.")}clone(){throw new Error("Method not implemented.")}system;constructor(e){this.system=e}},gh=class extends Ca{genValue(){return this.system.textureSheetAnimation.getStartIndex()}},bh=class extends Ca{_lastPosition=new Ea;_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)}},vh=class extends Ca{genValue(){return 0}},wr=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.")}},yh=class extends wr{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)}}},dg=Symbol("particleRotation"),_h=class extends wr{type="NeedleRotation";initialize(e){e[dg]=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[dg])*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}}},hg=Symbol("sizeLerpFactor"),xh=class extends wr{type="NeedleSize";initialize(e){e[hg]=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[hg]).x);let r=this.system.worldScale.x/this.system.cameraScale;e.size=e.startSize*n*r}}},_c=Symbol("particleLife"),xc=Symbol("trailLifetime"),pg=Symbol("trailStartLength"),wh=class extends wr{type="NeedleTrail";initialize(e){e instanceof ug&&(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[pg]=e.length)}update(e){if(this.system.trails?.enabled&&e instanceof ug){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[pg],0,s)}}}},wc=Symbol("startVelocity"),fg=Symbol("gravityModifier"),Ec=Symbol("velocity lerp factor"),mg=new Ea,JB=new mh,Eh=class extends wr{type="NeedleVelocity";_gravityDirection=new Ea;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[fg]=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[fg];n!==0&&(mg.copy(this._gravityDirection).multiplyScalar(n),i.add(mg)),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)}},gg=Symbol("colorLerpFactor"),Ch=class extends wr{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[gg]=Math.random()}update(e,t){if(this.system.colorOverLifetime.enabled){let i=e.age/e.life,n=this.system.colorOverLifetime.color.evaluate(i,e[gg]);e.color.set(n.r,n.g,n.b,n.alpha).multiply(e.startColor)}else e.color.copy(e.startColor)}},Th=class{system;emission;get anim(){return this.system.textureSheetAnimation}constructor(e){this.system=e,this.emission=new bh(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 lw(new sw(1,1,1,1))}get emissionOverTime(){return this.emission}get emissionOverDistance(){return new vh(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 cw(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 Cl(new Q(1,1,1,1),1)}get startTileIndex(){return new gh(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}},Rh=class{burstIndex=0;burstWaveIndex=0;time=0;waitEmiting=0},Sh=class extends M{play(e=!1){e&&R.foreachComponent(this.gameObject,t=>{t instanceof Sh&&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 Rh),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 mh;get worldQuaternion(){return this.__worldQuaternion}_worldQuaternionInverted=new mh;get worldQuaternionInverted(){return this._worldQuaternionInverted}_worldScale=new Ea;get worldScale(){return this._worldScale}_worldPositionFrame=-1;_worldPos=new Ea;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 Hn)){let n=new Hn;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 xr)){let n=new xr;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 ow,this._container.matrixAutoUpdate=!1,this.main.simulationSpace==0?this.gameObject.add(this._container):this.context.scene.add(this._container),this._batchSystem=new aw,this._batchSystem.name=this.gameObject.name,this._container.add(this._batchSystem),this._interface=new Th(this),this._particleSystem=new uw(this._batchSystem,this._interface),this._particleSystem.addBehavior(new xh(this)),this._particleSystem.addBehavior(new Ch(this)),this._particleSystem.addBehavior(new yh(this)),this._particleSystem.addBehavior(new _h(this)),this._particleSystem.addBehavior(new Eh(this)),this._particleSystem.addBehavior(new wh(this));let e=this._particleSystem.emitter;this.context.scene.add(e),bg&&(console.log(this),this.gameObject.add(new rw(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 _r(this,this._particleSystem,e.particleSystem,t);this._particleSystem.addBehavior(i)}}}},ve=Sh;v([y(jn)],ve.prototype,"colorOverLifetime",2),v([y(_e)],ve.prototype,"main",2),v([y(_t)],ve.prototype,"emission",2),v([y(Kt)],ve.prototype,"sizeOverLifetime",2),v([y(ne)],ve.prototype,"shape",2),v([y(K)],ve.prototype,"noise",2),v([y(te)],ve.prototype,"trails",2),v([y(He)],ve.prototype,"velocityOverLifetime",2),v([y(ue)],ve.prototype,"limitVelocityOverLifetime",2),v([y(Jt)],ve.prototype,"inheritVelocity",2),v([y(Ri)],ve.prototype,"colorBySpeed",2),v([y(xe)],ve.prototype,"textureSheetAnimation",2),v([y(Ze)],ve.prototype,"rotationOverLifetime",2),v([y(Qe)],ve.prototype,"rotationBySpeed",2),v([y(ke)],ve.prototype,"sizeBySpeed",2);import*as yg from"three";function*vg(o,e=null){let t=e?e.time:G.Current.time,i=t.time;for(;t.time-i<o;)yield}var xt=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 vg(.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=xt.hashCode(e),i=xt.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 yg.Color(t/255,i/255,n/255)}};import{RGBELoader as pw}from"three/examples/jsm/loaders/RGBELoader.js";import{EXRLoader as fw}from"three/examples/jsm/loaders/EXRLoader";import{EquirectangularRefractionMapping as mw,sRGBEncoding as gw,TextureLoader as wg}from"three";var _g=P("debugautosync"),Ph=class{_syncers={};getOrCreateSyncer(e){if(!e.guid)return null;if(this._syncers[e.guid])return this._syncers[e.guid];let t=new Oh(e);return this._syncers[e.guid]=t,t}},xg=new Ph,Oh=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)){_g&&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 dw(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 hw(o){if(o.__autoPropertySyncHandler)return o.__autoPropertySyncHandler;let e=xg.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;_g&&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=xg.getOrCreateSyncer(this),Object.getOwnPropertyDescriptor(this,t)?.set===void 0&&Object.defineProperty(this,t,{set:function(u){let l=this[a];this[a]=u,dw(u,l)&&n?.call(this,u,l)!==!1&&hw(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;if(!e?.endsWith(".hdr")&&!e.endsWith(".exr")&&console.warn("Potentially invalid skybox url",this.url,"on",this.name),!this._loader){let n=e.endsWith(".exr"),r=e.endsWith(".hdr");n?this._loader=new fw:r?this._loader=new pw:this._loader=new wg}let t=await this._loader.loadAsync(e);if(!t||!this.enabled)return;this.url=e,t.mapping=mw,this._loader instanceof wg&&(t.encoding=gw),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 xw,ShaderMaterial as ww,Texture as Ew,Vector2 as kh,Vector4 as Cw}from"three";function bw(){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 Eg(o){await bw(),o()}import{PlaneGeometry as vw,MeshBasicMaterial as yw,Mesh as _w}from"three";var Tc=class{static createPrimitive(e,t){let i;switch(e){case 0:let n=new vw(1,1,1,1),r=t?.material??new yw({color:16777215});i=new _w(n,r)}return t?.name&&(i.name=t.name),i}};var Rc=P("debugvideo");var Cg=(n=>(n[n.CameraFarPlane=0]="CameraFarPlane",n[n.CameraNearPlane=1]="CameraNearPlane",n[n.RenderTexture=2]="RenderTexture",n[n.MaterialOverride=3]="MaterialOverride",n))(Cg||{}),Te=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(),Eg(()=>{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 Mh(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,Cg[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(xw)],Te.prototype,"renderer",2),v([y()],Te.prototype,"playOnAwake",2),v([y()],Te.prototype,"playOnEnable",2),v([y()],Te.prototype,"aspectMode",2),v([y()],Te.prototype,"renderMode",2),v([y()],Te.prototype,"targetMaterialProperty",2),v([y(ae)],Te.prototype,"targetMaterialRenderer",2),v([y(Ew)],Te.prototype,"targetTexture",2),v([y()],Te.prototype,"time",2),v([y()],Te.prototype,"playbackSpeed",1),v([y()],Te.prototype,"isLooping",1);var Mh=class{context;constructor(e){this.context=e,this._input=new Ih(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 Ah(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},Ih=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 kh;window.addEventListener("mousemove",n=>{if(this.overlay.enabled&&this.context.input.getPointerPressed(0)){let r=new kh(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)}},Ah=class extends ww{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 kh;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 Cw(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 Tg=ja(fl(),1);import{EventDispatcher as Hh}from"three";var Rg=P("debugscreenshare");function Pc(o){if(!!o)for(let e of o.getTracks())e.stop()}var Er=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(){Rg&&console.log(this),se.registerWaitForAllowAudio(()=>{this.videoPlayer&&this._currentStream&&this._currentMode===2&&this.videoPlayer.setVideo(this._currentStream)})}start(){if(this.videoPlayer||(this.videoPlayer=R.getComponent(this.gameObject,Te)??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 jh(this.context,e),this._net.enable(),this._net.addEventListener(Sg.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(Te)],Er.prototype,"videoPlayer",2),v([y()],Er.prototype,"device",2);var Sg=(i=>(i.Connected="peer-user-connected",i.ReceiveVideo="receive-video",i.Disconnected="peer-user-disconnected",i))(Sg||{}),Ah=class{type="receive-video";stream;target;constructor(e,t){this.stream=e,this.target=t}},Dh=class{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}};var Lh=class extends Hh{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 Ah(n,this);this.dispatchEvent(r)}})}},Ss=class extends Hh{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 Tg.default(e)}this._enabled&&this.subscribePeerEvents()}}subscribePeerEvents(){!this._peer||(this._peer.on("open",this.onPeerConnectFn),this._peer.on("call",this.onPeerReceiveCallFn))}unsubscribePeerEvents(){}onPeerConnect(e){Rg&&console.log("Peer connected as",e),this.context.connection.send("peer-user-connected",new Dh(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 Lh(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 jh=class extends Hh{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 Tw,AdditiveBlending as Rw}from"three";var Cr=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=Rw,this.applyMaterialOptions(t),t.onBeforeCompile=i=>{i.fragmentShader=i.fragmentShader.replace("vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;",`vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
298
+ `}};var Tg=ja(fl(),1);import{EventDispatcher as Fh}from"three";var Rg=P("debugscreenshare");function Pc(o){if(!!o)for(let e of o.getTracks())e.stop()}var Er=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(){Rg&&console.log(this),se.registerWaitForAllowAudio(()=>{this.videoPlayer&&this._currentStream&&this._currentMode===2&&this.videoPlayer.setVideo(this._currentStream)})}start(){if(this.videoPlayer||(this.videoPlayer=R.getComponent(this.gameObject,Te)??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 Hh(this.context,e),this._net.enable(),this._net.addEventListener(Sg.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(Te)],Er.prototype,"videoPlayer",2),v([y()],Er.prototype,"device",2);var Sg=(i=>(i.Connected="peer-user-connected",i.ReceiveVideo="receive-video",i.Disconnected="peer-user-disconnected",i))(Sg||{}),Dh=class{type="receive-video";stream;target;constructor(e,t){this.stream=e,this.target=t}},Lh=class{guid;peerId;dontSave=!0;constructor(e,t){this.guid=e.id,this.peerId=t}};var jh=class extends Fh{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 Dh(n,this);this.dispatchEvent(r)}})}},Ss=class extends Fh{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 Tg.default(e)}this._enabled&&this.subscribePeerEvents()}}subscribePeerEvents(){!this._peer||(this._peer.on("open",this.onPeerConnectFn),this._peer.on("call",this.onPeerReceiveCallFn))}unsubscribePeerEvents(){}onPeerConnect(e){Rg&&console.log("Peer connected as",e),this.context.connection.send("peer-user-connected",new Lh(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 jh(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 Hh=class extends Fh{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 Tw,AdditiveBlending as Rw}from"three";var Cr=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=Rw,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 Tw;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()],Cr.prototype,"mode",2),v([y(Q)],Cr.prototype,"shadowColor",2);import*as kc from"three";import{Object3D as Sw}from"three";var Fh=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(Fh._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=Fh;I(Mt,"_invertForward",new kc.Quaternion().setFromAxisAngle(new kc.Vector3(0,1,0),Math.PI)),v([y(Sw)],Mt.prototype,"target",2),v([y()],Mt.prototype,"followFactor",2),v([y()],Mt.prototype,"rotateFactor",2),v([y()],Mt.prototype,"positionAxes",2);import*as Pg from"three";import{HTMLMesh as Pw}from"three/examples/jsm/interactive/HTMLMesh.js";import{InteractiveGroup as Ow}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 Ow(this.context.renderer,this.context.mainCamera);this.gameObject.add(t);let i=new Pw(e);t.add(i),i.visible=!1,console.log(i);let n=i.material;n.transparent=!0,setTimeout(()=>{i.visible=!0;let r=Ya(this.gameObject).clone();Ka(this.gameObject,0,0,0),this.gameObject.updateMatrixWorld();let s=new Pg.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 Mg}from"three";var Ta=P("debugspatialtrigger"),Og=new Mg,kg=new Mg;function kw(o,e){return Og.mask=o,kg.mask=e,Og.test(kg)}var It=class extends M{triggerMask=0;onEnter;onStay;onExit;start(){Ta&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(let e of Vn.triggers)kw(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){Ta&&console.log("ENTER TRIGGER",this.name,e.name,this,e),e.raiseOnEnterEvent(this),this.onEnter?.invoke(this,e)}onExitTrigger(e){Ta&&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 Ra=class extends M{triggerMask;boxHelper;start(){Ta&&console.log(this.name,this.triggerMask,this)}onEnable(){Ra.triggers.push(this),this.boxHelper||(this.boxHelper=R.addNewComponent(this.gameObject,Ne),this.boxHelper?.showHelper(null,Ta))}onDisable(){Ra.triggers.splice(Ra.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)}},Vn=Ra;I(Vn,"triggers",[]),v([y()],Vn.prototype,"triggerMask",2);import*as Tr 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 Uh(this.context,this),this._networking=new zh(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 Bh(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,Ve)}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 Tr.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)}}},Bh=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 Tr.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(Mw):i.quaternion.identity()}}},Mw=new Tr.Quaternion().setFromAxisAngle(new Tr.Vector3(0,1,0),Math.PI),Uh=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 be;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}}}},Gh=class{guid;dontSave=!0;targetUserId;stoppedFollowing;constructor(e,t,i){this.guid=e,this.targetUserId=t,this.stoppedFollowing=i}},Vh=class{guid;userId;constructor(e,t){this.guid=e.guid,this.userId=t}},zh=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 Gh(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 Vh(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 at from"three";import{Material as Iw,NearestFilter as Ig,Texture as Aw,Vector2 as Ag}from"three";var Nh=P("debugspriterenderer"),Mc=class{static getOrCreateGeometry(e){if(e._geometry)return e._geometry;if(e.guid&&Mc.cache[e.guid])return Nh&&console.log("Take cached geometry for sprite",e.guid),Mc.cache[e.guid];let t=new at.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 at.BufferAttribute(i,3)),t.setAttribute("uv",new at.BufferAttribute(n,2)),e.guid&&(this.cache[e.guid]=t),Nh&&console.log("Built sprite geometry",e,t),t}},Sa=Mc;I(Sa,"cache",{});var ei=class{guid;texture;triangles;uv;vertices;_geometry};v([y()],ei.prototype,"guid",2),v([y(Aw)],ei.prototype,"texture",2),v([Bo()],ei.prototype,"triangles",2),v([Bo()],ei.prototype,"uv",2),v([Bo()],ei.prototype,"vertices",2);var ks=class{name;offset;size};v([y()],ks.prototype,"name",2),v([y(Ag)],ks.prototype,"offset",2),v([y(Ag)],ks.prototype,"size",2);var Wh=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=at.sRGBEncoding,i.offset.set(t.offset.x,t.offset.y),i.minFilter==Ig&&i.magFilter==Ig&&(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,Nh&&(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=Sa.getOrCreateGeometry(e),this._currentSprite.material.map=e.texture;else{let t=new at.MeshBasicMaterial({color:16777215,side:at.DoubleSide});if(!t)return;if(this.color&&(t.color||(t.color=new at.Color),t.color.copy(this.color),t.opacity=this.color.alpha),t.alphaTest=.5,e.texture&&!t.wireframe){let i=e.texture;i[Wh]!==void 0&&i[Wh]!==this&&this.spriteFrames>1&&(i=e.texture=i.clone()),i[Wh]=this,t.map=i}this.sharedMaterial=t,this._currentSprite=new at.Mesh(Sa.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(Iw)],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 Ce).__init(this.bb_pos+t,this.bb):null}rot(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Ce).__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 Dw}from"three";var Ic="SCAM";Ho(Ic,Dt.getRootAsSyncedCameraModel);var Lt=new Ct,Xh=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=Ya(e);Dt.addPos(Lt,Ce.createVec3(Lt,r.x,r.y,r.z)),Dt.addRot(Lt,Ce.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 Xh(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,oe.markDirty(r);let s=e.pos();s&&pn(r,s.x(),s.y(),s.z());let a=e.rot();a&&Ka(r,a.x(),a.y(),a.z())}},Rr=Ac;I(Rr,"instances",[]),v([y([Dw,it])],Rr.prototype,"cameraPrefab",2);var Qh="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(Qh);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=bp(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(Qh);return e||P(this.urlParameterName)}setRandomRoomUrlParameter(){let e=Zc(),t=this.generateRoomName();P(this.urlParameterName)?e.set(this.urlParameterName,t):e.append(this.urlParameterName,t),fp(t,e)}generateRoomName(){return gp()+"_"+mp(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(Qh,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 Dg(){let o=P("testwindowcount")||0;o&&o>0&&Lw(o)}function Lw(o){if(P("testwindow"))return null;let e=new URL(window.location.href);yo(e.searchParams,es,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 Hw}from"three";var Ms=class extends M{awake(){Dg()}},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=Ad(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 Hw);import{MathUtils as Fw}from"three";import{TransformControls as Bw}from"three/examples/jsm/controls/TransformControls";import{OrbitControls as Uw}from"three/examples/jsm/controls/OrbitControls";var fo=class extends M{isGizmo=!0;control;orbit;awake(){this.isGizmo&&!Di||!this.context.mainCamera||(this.control=new Bw(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,Uw)??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(Fw.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()],fo.prototype,"isGizmo",2);import{Object3D as Vw}from"three";import*as Bg from"three";import{USDZExporter as zw}from"three/examples/jsm/exporters/USDZExporter";function Lg(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 jg(){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 Gw,KeyframeTrack as Hg}from"three";var jc=P("debugusdz");function Fg(o,e){let t=[],i=R.getComponentsInChildren(o,Pe),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 Hg(l+".position",[0,.01],[0,0,0,0,0,0]),h=new Hg(l+".quaternion",[0,.01],[0,0,0,1,0,0,0,1]);s.push(new Gw("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 Pa=P("debugusdz"),Sr=class extends M{objectToExport;autoExportAnimations=!1;extensions=[];link;webxr;webARSessionRoot;start(){Pa&&(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=Fa();(Pa||e&&t)&&(this.createQuicklookButton(),this.webARSessionRoot=R.findObjectOfType(mt)??void 0,this.lastCallback=this.quicklookCallback.bind(this),this.link=Lg(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 Bg.Matrix4().makeRotationY(Math.PI))}let e=new zw,t=[...this.extensions],i=new ir;t.push(i),this.autoExportAnimations&&Fg(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";Pa&&(r+="-"+jg()),e.debug=Pa;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"&&(Pa&&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(Vw)],Sr.prototype,"objectToExport",2),v([y()],Sr.prototype,"autoExportAnimations",2);import{Vector3 as Ww}from"three";var mo=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=bt.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),bt.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,xt);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<bt.Current.length;e++){let t=bt.Current[e];if(!t.controller||!t.selected)continue;this._grabModels.length<=e&&(this._grabModels.push(new mo),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 Ww;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),ie(i,s)}}};var Oa=class{};import*as Hc from"three";import{MeshLine as Nw,MeshLineMaterial as Xw}from"three.meshline";var Yh=class{id=0;points=[];line=new Nw;material;mesh;constructor(e,t){if(t&&(this.material=t.material),this.material||(this.material=this.defaultLineMaterial),t){let i=t.options;i&&Object.assign(this.material,i)}this.mesh=new Hc.Mesh(this.line,this.material),e.add(this.mesh)}appendPoint(e){let t=Yh.wp;t.set(e.x,e.y,e.z);let i=this.mesh?.parent;return i&&(t=i.worldToLocal(t),e.x=t.x,e.y=t.y,e.z=t.z),this.points.push(e.x,e.y,e.z),this.line.setPoints(this.points),e}defaultLineMaterial=new Xw({color:10066329,lineWidth:.01})},Ds=Yh;I(Ds,"wp",new Hc.Vector3);var go=class extends M{startLine(e,t){let i=Math.random()*Number.MAX_SAFE_INTEGER;return this.internalStartLine(e,i,!0,t)}updateLine(e,t){let i=this.inFlight[e.id];if(!i)return;t.point&&(t.point=i.appendPoint(t.point));let n=this.buffer[e.id];n&&(t.point&&n.push(t.point.x,t.point.y,t.point.z),n.length>5&&(this.sendLineUpdate(i,!1,void 0,n),n.length=0))}endLine(e,t=!0){let i=this.inFlight[e.id];if(!i)return;this.finished.push(i),delete this.inFlight[e.id],t&&this.sendLineUpdate(i,!0,0);let n=this.buffer[e.id];if(n){delete this.buffer[e.id];let r=n;r.length=0,this.freeBuffer.push(r)}return i}getLine(e){return this.inFlight[e.id]}finished=[];inFlight=[];buffer={};freeBuffer=new Array;awake(){this.context.connection.beginListen("line-start",e=>{this.onEnsureLine(e.id,e.parentGuid)}),this.context.connection.beginListen("line-update",e=>{let t=this.onEnsureLine(e.guid,e.parentGuid);t&&e.points&&(e.startIndex<=0?t.points=e.points:e.startIndex>=t.points.length&&t.points.push(...e.points),t.line.setPoints(t.points),t.material.lineWidth=e.width,t.material.color.fromArray(e.color),e.finished===!0&&this.endLine({id:t.id},!1))})}onEnsureLine(e,t){if(this.inFlight[e])return this.inFlight[e];let i=R.findByGuid(t,this.context.scene);return i?(this.internalStartLine(i,e,!1),this.inFlight[e]):null}internalStartLine(e,t,i=!0,n){let r=new Ds(e??this.context.scene,n);r.id=t,this.inFlight[t]=r,i&&this.sendLineStart(r);let s;return this.freeBuffer.length<=0?s=new Array:s=this.freeBuffer.pop(),this.buffer[t]=s,{id:t}}sendLineStart(e){let t=e.mesh.parent;this.context.connection.send("line-start",{id:e.id,parentGuid:t?t.guid:void 0})}sendLineUpdate(e,t,i,n){if(e){let r={parentGuid:e.mesh.parent.guid,guid:e.id,points:n?[...n]:e.points,width:e.material.lineWidth,color:e.material.color.toArray(),startIndex:i!==void 0?i:e.points.length,finished:t};this.context.connection.send("line-update",r)}}};import*as Ug from"three";import{Raycaster as Qw,Vector3 as qw}from"three";import{MeshLineMaterial as Yw}from"three.meshline";var Fc=class{isDrawing;lastHit;currentHandle;maxDistance;prevDistance;lastParent;constructor(){this.isDrawing=!1,this.lastHit=new qw,this.currentHandle=null,this.maxDistance=0,this.prevDistance=0,this.lastParent=null}},Bc=class extends M{lines;colliders;alignToSurface=!0;addToPaintedObject=!0;orbit;start(){this.lines||(this.lines=R.getComponent(this.gameObject,go),this.lines||(this.lines=R.addNewComponent(this.gameObject,go))),this.orbit=R.findObjectOfType(Ve,this.context)??void 0,this._states.mouse=new Fc;let e={};$.addEventListener("select-start",(t,i)=>{e[t.controller.uuid]=!0}),$.addEventListener("update",(t,i)=>{if(e[t.controller.uuid]===!0){let n=t.getRay();this.updateLine(t.controller.uuid,n,!0,!1,!1)}}),$.addEventListener("select-end",(t,i)=>{e[t.controller.uuid]=!1;let n=t.getRay();this.updateLine(t.controller.uuid,n,!0,!0,!1)})}_states={};update(){if(this.orbit&&this._states.mouse&&this.orbit&&(this.orbit.enabled=!this._states.mouse.isDrawing),!this.context.mainCamera)return;let e=this.context.input.getPointerPressedCount()>1,t=this.context.input.getPointerPositionRC(0);if(!t)return;Bc._raycaster.setFromCamera(t,this.context.mainCamera);let i=Bc._raycaster.ray;this.updateLine("mouse",i,this.context.input.getPointerPressed(0),this.context.input.getPointerUp(0),e||this.context.input.isKeyPressed("Alt"))}updateLine(e,t,i,n,r=!1){let s=this._states[e];if(s||(this._states[e]=new Fc,s=this._states[e]),n)s.isDrawing=!1,s.currentHandle&&(this.lines.endLine(s.currentHandle),s.currentHandle=null);else if(i){if(r)return s;let a=this.getHit(t),c=null,u=s.prevDistance;if(a)s.currentHandle||(s.maxDistance=a.distance),c=a.point,a.face&&c.add(a.face.normal.multiplyScalar(.01)),s.prevDistance=a.distance;else if(s.maxDistance>0){let l=s.maxDistance;if(!s.currentHandle&&s.lastHit){let d=B(this.context.mainCamera);l=s.lastHit.distanceTo(d)}c=t.origin.add(t.direction.multiplyScalar(s.maxDistance)),s.prevDistance=s.maxDistance}if(c){if(!s.currentHandle){let l=s.lastParent??this.gameObject;this.addToPaintedObject&&a&&(l=a.object),s.lastParent=l,s.currentHandle=this.lines.startLine(l,{material:this.createRandomMaterial()})}if(this.alignToSurface&&(s.prevDistance>s.maxDistance||Math.abs(u-s.prevDistance)>.2)){let l=s.maxDistance;c=t.origin.add(t.direction.multiplyScalar(l)),s.prevDistance=l}if(s.lastHit&&s.lastHit.distanceTo(c)<s.prevDistance*.01)return s;this.lines.updateLine(s.currentHandle,{point:c}),s.lastHit.copy(c)}s.isDrawing=s.currentHandle!==null}return s}_raycastOptions=new be;getHit(e){(!this.colliders||this.colliders.length===0)&&(this.colliders=[this.gameObject]),this._raycastOptions.targets=this.colliders,this._raycastOptions.ray=e;let t=this.context.physics.raycast(this._raycastOptions);if(t.length>0){for(let i of t)if(!!R.isActiveInHierarchy(i.object))return i}return null}createRandomMaterial(){let e;return this.context.connection.connectionId?e=xt.colorFromHashCode(xt.hashCode(this.context.connection.connectionId)):e=new Ug.Color("hsl("+(Math.random()*100).toFixed(0)+", 80%, 30%)"),new Yw({color:e,lineWidth:H.lerp(.005,.01,Math.random())})}},ka=Bc;I(ka,"_raycaster",new Qw);import{Object3D as Kw}from"three";var Ma=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(it)],Ma.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 Kw?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([Cc(),y()],ln.prototype,"owner",2);var Uc=class extends M{toggleKey="p";update(){this.context.input.isKeyDown("p")&&this.context.domElement.classList.toggle("presentation-mode")}};O.add("__Ignore",Oa);O.add("AlignmentConstraint",tr);O.add("Animation",Bt);O.add("AnimationCurve",gi);O.add("AnimationExtension",ir);O.add("AnimationTrackHandler",nr);O.add("Animator",Pe);O.add("AnimatorController",fi);O.add("AttachedObject",bt);O.add("AudioListener",bi);O.add("AudioSource",se);O.add("AudioTrackHandler",rr);O.add("Avatar_Brain_LookAt",Sn);O.add("Avatar_MouthShapes",ur);O.add("Avatar_MustacheShake",ns);O.add("Avatar_POI",ye);O.add("AvatarBlink_Simple",Qi);O.add("AvatarEyeLook_Rotation",qi);O.add("AvatarLoader",or);O.add("AvatarMarker",le);O.add("AvatarModel",Kr);O.add("AxesHelper",Mn);O.add("BaseUIComponent",We);O.add("BasicIKConstraint",rs);O.add("BoxCollider",pr);O.add("BoxGizmo",_i);O.add("BoxHelperComponent",Ne);O.add("Button",qt);O.add("CallInfo",vi);O.add("Camera",Z);O.add("Canvas",Xe);O.add("CanvasGroup",Ln);O.add("CapsuleCollider",Xt);O.add("CharacterController",Yi);O.add("CharacterControllerInput",Ti);O.add("Collider",Ot);O.add("ColorAdjustments",gr);O.add("ColorBySpeedModule",Ri);O.add("ColorOverLifetimeModule",jn);O.add("ControlTrackHandler",Rn);O.add("Deletable",ds);O.add("DeleteBox",ro);O.add("DeviceFlag",oo);O.add("DragControls",Ji);O.add("DropListener",br);O.add("Duplicatable",Zi);O.add("EmissionModule",_t);O.add("EventList",de);O.add("EventListEvent",Qr);O.add("EventSystem",Je);O.add("EventTrigger",so);O.add("FieldWithDefault",ps);O.add("FixedJoint",ms);O.add("FlyControls",gs);O.add("GltfExport",$t);O.add("GltfExportBox",bs);O.add("Gradient",Si);O.add("Graphic",yt);O.add("GraphicRaycaster",vs);O.add("GridHelper",Un);O.add("GridLayoutGroup",xs);O.add("GroundProjectedEnv",tn);O.add("HingeJoint",vr);O.add("HorizontalLayoutGroup",_s);O.add("Image",An);O.add("InheritVelocityModule",Jt);O.add("InputField",kt);O.add("Interactable",Vt);O.add("Keyboard",ws);O.add("LayoutGroup",Gn);O.add("Light",qe);O.add("LimitVelocityOverLifetimeModule",ue);O.add("LineInstanceHandler",Ds);O.add("LinesDrawer",ka);O.add("LinesManager",go);O.add("LODGroup",yr);O.add("LODModel",nn);O.add("LogStats",Cs);O.add("LookAtConstraint",_n);O.add("MainModule",_e);O.add("MaskableGraphic",In);O.add("MeshCollider",Zr);O.add("MeshRenderer",ao);O.add("MinMaxCurve",U);O.add("MinMaxGradient",Me);O.add("NestedGltf",ho);O.add("Networking",Pi);O.add("NoiseModule",K);O.add("ObjectRaycaster",co);O.add("OffsetConstraint",rn);O.add("OrbitControls",Ve);O.add("ParticleBurst",Hn);O.add("ParticleSubEmitter",_r);O.add("ParticleSystem",ve);O.add("ParticleSystemRenderer",on);O.add("PlayableDirector",Cn);O.add("PlayerColor",xt);O.add("PlayerState",ln);O.add("PlayerSync",Ma);O.add("PointerEventData",xi);O.add("PresentationMode",Uc);O.add("RawImage",to);O.add("Raycaster",lo);O.add("Rect",eo);O.add("RectTransform",vt);O.add("ReflectionProbe",Zt);O.add("RegisteredAnimationInfo",Nr);O.add("RemoteSkybox",Oi);O.add("Renderer",ae);O.add("RendererLightmap",Bn);O.add("RGBAColor",Q);O.add("Rigidbody",J);O.add("RotationBySpeedModule",Qe);O.add("RotationOverLifetimeModule",Ze);O.add("ScreenCapture",Er);O.add("ShadowCatcher",Cr);O.add("ShapeModule",ne);O.add("SignalAsset",qr);O.add("SignalReceiver",En);O.add("SignalReceiverEvent",Yr);O.add("SignalTrackHandler",Tn);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",Vn);O.add("SpatialTriggerReceiver",It);O.add("SpectatorCamera",Os);O.add("SphereCollider",hr);O.add("Sprite",ei);O.add("SpriteRenderer",sn);O.add("SpriteSheet",an);O.add("SubEmitterSystem",xr);O.add("SyncedCamera",Rr);O.add("SyncedRoom",ki);O.add("SyncedTransform",Pt);O.add("TeleportTarget",Jr);O.add("TestRunner",Ms);O.add("TestSimulateUserData",Is);O.add("Text",Ie);O.add("TextureSheetAnimationModule",xe);O.add("ToneMapping",mr);O.add("TrailModule",te);O.add("TransformData",Xr);O.add("TransformGizmo",fo);O.add("UIRaycastUtils",Ei);O.add("UIRootComponent",kn);O.add("UsageMarker",zt);O.add("USDZExporter",Sr);O.add("VelocityOverLifetimeModule",He);O.add("VerticalLayoutGroup",ys);O.add("VideoPlayer",Te);O.add("Voip",rt);O.add("Volume",no);O.add("VolumeComponent",Ki);O.add("VolumeParameter",cs);O.add("VolumeProfile",fr);O.add("VRUserState",Nt);O.add("WebAR",cr);O.add("WebARSessionRoot",mt);O.add("WebXR",V);O.add("WebXRAvatar",Gt);O.add("WebXRController",$);O.add("WebXRSync",On);O.add("XRFlag",Ee);O.add("XRGrabModel",mo);O.add("XRGrabRendering",As);O.add("XRRig",lr);O.add("XRState",St);var Gg=pe,Jw=P("debugtypestore");Jw&&console.log(O);function Vg(o,e){let i=du(o,e);return i!==void 0?i:null}var Zw=new Na;async function zg(o,e,t,i=null,n){if(!t)return;let r=[],s=i;typeof s=="number"&&(s=new Re(i));let a=new Co(t.scene);a.gltfId=e,a.context=o,a.gltf=t,a.nodeToObject=n?.nodeToObjectMap,a.implementationInformation=Zw;let c=[];if(t.scenes)for(let u of t.scenes)await Jh(a,u,c,r);if(t.children)for(let u of t.children)await Jh(a,u,c,r);o.new_scripts_pre_setup_callbacks.push(()=>{for(let u of c)$w(u,a);if(s){Kh(t,s);for(let u of t.scenes)Kh(u,s)}})}function Kh(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)Kh(t,e)}}var Ia=[];async function Jh(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),si(e,c,!1),t.push({instance:c,compData:s,obj:e})}else Gg&&console.debug("unknown component: "+s.name),Ia.includes(s.name)||Ia.push(s.name)}catch(a){console.error(s.name+" - "+a.message,a)}if(Ia.length>0){let s=Ia.join(", ");console.warn("unknown components: "+s),Ia.length=0,ct()&&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 Tw;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()],Cr.prototype,"mode",2),v([y(Q)],Cr.prototype,"shadowColor",2);import*as kc from"three";import{Object3D as Sw}from"three";var Bh=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(Bh._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=Bh;I(Mt,"_invertForward",new kc.Quaternion().setFromAxisAngle(new kc.Vector3(0,1,0),Math.PI)),v([y(Sw)],Mt.prototype,"target",2),v([y()],Mt.prototype,"followFactor",2),v([y()],Mt.prototype,"rotateFactor",2),v([y()],Mt.prototype,"positionAxes",2);import*as Pg from"three";import{HTMLMesh as Pw}from"three/examples/jsm/interactive/HTMLMesh.js";import{InteractiveGroup as Ow}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 Ow(this.context.renderer,this.context.mainCamera);this.gameObject.add(t);let i=new Pw(e);t.add(i),i.visible=!1,console.log(i);let n=i.material;n.transparent=!0,setTimeout(()=>{i.visible=!0;let r=Ya(this.gameObject).clone();Ka(this.gameObject,0,0,0),this.gameObject.updateMatrixWorld();let s=new Pg.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 Mg}from"three";var Ta=P("debugspatialtrigger"),Og=new Mg,kg=new Mg;function kw(o,e){return Og.mask=o,kg.mask=e,Og.test(kg)}var It=class extends M{triggerMask=0;onEnter;onStay;onExit;start(){Ta&&console.log(this.name,this.triggerMask,this)}update(){this.currentIntersected.length=0;for(let e of Vn.triggers)kw(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){Ta&&console.log("ENTER TRIGGER",this.name,e.name,this,e),e.raiseOnEnterEvent(this),this.onEnter?.invoke(this,e)}onExitTrigger(e){Ta&&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 Ra=class extends M{triggerMask;boxHelper;start(){Ta&&console.log(this.name,this.triggerMask,this)}onEnable(){Ra.triggers.push(this),this.boxHelper||(this.boxHelper=R.addNewComponent(this.gameObject,Ne),this.boxHelper?.showHelper(null,Ta))}onDisable(){Ra.triggers.splice(Ra.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)}},Vn=Ra;I(Vn,"triggers",[]),v([y()],Vn.prototype,"triggerMask",2);import*as Tr 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 Gh(this.context,this),this._networking=new Wh(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 Uh(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,Ve)}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 Tr.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)}}},Uh=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 Tr.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(Mw):i.quaternion.identity()}}},Mw=new Tr.Quaternion().setFromAxisAngle(new Tr.Vector3(0,1,0),Math.PI),Gh=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 be;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}}}},Vh=class{guid;dontSave=!0;targetUserId;stoppedFollowing;constructor(e,t,i){this.guid=e,this.targetUserId=t,this.stoppedFollowing=i}},zh=class{guid;userId;constructor(e,t){this.guid=e.guid,this.userId=t}},Wh=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 Vh(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 zh(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 at from"three";import{Material as Iw,NearestFilter as Ig,Texture as Aw,Vector2 as Ag}from"three";var Xh=P("debugspriterenderer"),Mc=class{static getOrCreateGeometry(e){if(e._geometry)return e._geometry;if(e.guid&&Mc.cache[e.guid])return Xh&&console.log("Take cached geometry for sprite",e.guid),Mc.cache[e.guid];let t=new at.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 at.BufferAttribute(i,3)),t.setAttribute("uv",new at.BufferAttribute(n,2)),e.guid&&(this.cache[e.guid]=t),Xh&&console.log("Built sprite geometry",e,t),t}},Sa=Mc;I(Sa,"cache",{});var ei=class{guid;texture;triangles;uv;vertices;_geometry};v([y()],ei.prototype,"guid",2),v([y(Aw)],ei.prototype,"texture",2),v([Bo()],ei.prototype,"triangles",2),v([Bo()],ei.prototype,"uv",2),v([Bo()],ei.prototype,"vertices",2);var ks=class{name;offset;size};v([y()],ks.prototype,"name",2),v([y(Ag)],ks.prototype,"offset",2),v([y(Ag)],ks.prototype,"size",2);var Nh=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=at.sRGBEncoding,i.offset.set(t.offset.x,t.offset.y),i.minFilter==Ig&&i.magFilter==Ig&&(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,Xh&&(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=Sa.getOrCreateGeometry(e),this._currentSprite.material.map=e.texture;else{let t=new at.MeshBasicMaterial({color:16777215,side:at.DoubleSide});if(!t)return;if(this.color&&(t.color||(t.color=new at.Color),t.color.copy(this.color),t.opacity=this.color.alpha),t.alphaTest=.5,e.texture&&!t.wireframe){let i=e.texture;i[Nh]!==void 0&&i[Nh]!==this&&this.spriteFrames>1&&(i=e.texture=i.clone()),i[Nh]=this,t.map=i}this.sharedMaterial=t,this._currentSprite=new at.Mesh(Sa.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(Iw)],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 Ce).__init(this.bb_pos+t,this.bb):null}rot(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Ce).__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 Dw}from"three";var Ic="SCAM";Ho(Ic,Dt.getRootAsSyncedCameraModel);var Lt=new Ct,Qh=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=Ya(e);Dt.addPos(Lt,Ce.createVec3(Lt,r.x,r.y,r.z)),Dt.addRot(Lt,Ce.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 Qh(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,oe.markDirty(r);let s=e.pos();s&&pn(r,s.x(),s.y(),s.z());let a=e.rot();a&&Ka(r,a.x(),a.y(),a.z())}},Rr=Ac;I(Rr,"instances",[]),v([y([Dw,it])],Rr.prototype,"cameraPrefab",2);var qh="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(qh);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=vp(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(qh);return e||P(this.urlParameterName)}setRandomRoomUrlParameter(){let e=Zc(),t=this.generateRoomName();P(this.urlParameterName)?e.set(this.urlParameterName,t):e.append(this.urlParameterName,t),mp(t,e)}generateRoomName(){return bp()+"_"+gp(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(qh,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 Dg(){let o=P("testwindowcount")||0;o&&o>0&&Lw(o)}function Lw(o){if(P("testwindow"))return null;let e=new URL(window.location.href);yo(e.searchParams,es,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 Hw}from"three";var Ms=class extends M{awake(){Dg()}},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=Dd(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 Hw);import{MathUtils as Fw}from"three";import{TransformControls as Bw}from"three/examples/jsm/controls/TransformControls";import{OrbitControls as Uw}from"three/examples/jsm/controls/OrbitControls";var fo=class extends M{isGizmo=!0;control;orbit;awake(){this.isGizmo&&!Di||!this.context.mainCamera||(this.control=new Bw(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,Uw)??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(Fw.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()],fo.prototype,"isGizmo",2);import{Object3D as Vw}from"three";import*as Bg from"three";import{USDZExporter as zw}from"three/examples/jsm/exporters/USDZExporter";function Lg(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 jg(){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 Gw,KeyframeTrack as Hg}from"three";var jc=P("debugusdz");function Fg(o,e){let t=[],i=R.getComponentsInChildren(o,Pe),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 Hg(l+".position",[0,.01],[0,0,0,0,0,0]),h=new Hg(l+".quaternion",[0,.01],[0,0,0,1,0,0,0,1]);s.push(new Gw("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 Pa=P("debugusdz"),Sr=class extends M{objectToExport;autoExportAnimations=!1;extensions=[];link;webxr;webARSessionRoot;start(){Pa&&(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=Fa();(Pa||e&&t)&&(this.createQuicklookButton(),this.webARSessionRoot=R.findObjectOfType(mt)??void 0,this.lastCallback=this.quicklookCallback.bind(this),this.link=Lg(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 Bg.Matrix4().makeRotationY(Math.PI))}let e=new zw,t=[...this.extensions],i=new ir;t.push(i),this.autoExportAnimations&&Fg(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";Pa&&(r+="-"+jg()),e.debug=Pa;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"&&(Pa&&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(Vw)],Sr.prototype,"objectToExport",2),v([y()],Sr.prototype,"autoExportAnimations",2);import{Vector3 as Ww}from"three";var mo=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=bt.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),bt.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,xt);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<bt.Current.length;e++){let t=bt.Current[e];if(!t.controller||!t.selected)continue;this._grabModels.length<=e&&(this._grabModels.push(new mo),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 Ww;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),ie(i,s)}}};var Oa=class{};import*as Hc from"three";import{MeshLine as Nw,MeshLineMaterial as Xw}from"three.meshline";var Kh=class{id=0;points=[];line=new Nw;material;mesh;constructor(e,t){if(t&&(this.material=t.material),this.material||(this.material=this.defaultLineMaterial),t){let i=t.options;i&&Object.assign(this.material,i)}this.mesh=new Hc.Mesh(this.line,this.material),e.add(this.mesh)}appendPoint(e){let t=Kh.wp;t.set(e.x,e.y,e.z);let i=this.mesh?.parent;return i&&(t=i.worldToLocal(t),e.x=t.x,e.y=t.y,e.z=t.z),this.points.push(e.x,e.y,e.z),this.line.setPoints(this.points),e}defaultLineMaterial=new Xw({color:10066329,lineWidth:.01})},Ds=Kh;I(Ds,"wp",new Hc.Vector3);var go=class extends M{startLine(e,t){let i=Math.random()*Number.MAX_SAFE_INTEGER;return this.internalStartLine(e,i,!0,t)}updateLine(e,t){let i=this.inFlight[e.id];if(!i)return;t.point&&(t.point=i.appendPoint(t.point));let n=this.buffer[e.id];n&&(t.point&&n.push(t.point.x,t.point.y,t.point.z),n.length>5&&(this.sendLineUpdate(i,!1,void 0,n),n.length=0))}endLine(e,t=!0){let i=this.inFlight[e.id];if(!i)return;this.finished.push(i),delete this.inFlight[e.id],t&&this.sendLineUpdate(i,!0,0);let n=this.buffer[e.id];if(n){delete this.buffer[e.id];let r=n;r.length=0,this.freeBuffer.push(r)}return i}getLine(e){return this.inFlight[e.id]}finished=[];inFlight=[];buffer={};freeBuffer=new Array;awake(){this.context.connection.beginListen("line-start",e=>{this.onEnsureLine(e.id,e.parentGuid)}),this.context.connection.beginListen("line-update",e=>{let t=this.onEnsureLine(e.guid,e.parentGuid);t&&e.points&&(e.startIndex<=0?t.points=e.points:e.startIndex>=t.points.length&&t.points.push(...e.points),t.line.setPoints(t.points),t.material.lineWidth=e.width,t.material.color.fromArray(e.color),e.finished===!0&&this.endLine({id:t.id},!1))})}onEnsureLine(e,t){if(this.inFlight[e])return this.inFlight[e];let i=R.findByGuid(t,this.context.scene);return i?(this.internalStartLine(i,e,!1),this.inFlight[e]):null}internalStartLine(e,t,i=!0,n){let r=new Ds(e??this.context.scene,n);r.id=t,this.inFlight[t]=r,i&&this.sendLineStart(r);let s;return this.freeBuffer.length<=0?s=new Array:s=this.freeBuffer.pop(),this.buffer[t]=s,{id:t}}sendLineStart(e){let t=e.mesh.parent;this.context.connection.send("line-start",{id:e.id,parentGuid:t?t.guid:void 0})}sendLineUpdate(e,t,i,n){if(e){let r={parentGuid:e.mesh.parent.guid,guid:e.id,points:n?[...n]:e.points,width:e.material.lineWidth,color:e.material.color.toArray(),startIndex:i!==void 0?i:e.points.length,finished:t};this.context.connection.send("line-update",r)}}};import*as Ug from"three";import{Raycaster as Qw,Vector3 as qw}from"three";import{MeshLineMaterial as Yw}from"three.meshline";var Fc=class{isDrawing;lastHit;currentHandle;maxDistance;prevDistance;lastParent;constructor(){this.isDrawing=!1,this.lastHit=new qw,this.currentHandle=null,this.maxDistance=0,this.prevDistance=0,this.lastParent=null}},Bc=class extends M{lines;colliders;alignToSurface=!0;addToPaintedObject=!0;orbit;start(){this.lines||(this.lines=R.getComponent(this.gameObject,go),this.lines||(this.lines=R.addNewComponent(this.gameObject,go))),this.orbit=R.findObjectOfType(Ve,this.context)??void 0,this._states.mouse=new Fc;let e={};$.addEventListener("select-start",(t,i)=>{e[t.controller.uuid]=!0}),$.addEventListener("update",(t,i)=>{if(e[t.controller.uuid]===!0){let n=t.getRay();this.updateLine(t.controller.uuid,n,!0,!1,!1)}}),$.addEventListener("select-end",(t,i)=>{e[t.controller.uuid]=!1;let n=t.getRay();this.updateLine(t.controller.uuid,n,!0,!0,!1)})}_states={};update(){if(this.orbit&&this._states.mouse&&this.orbit&&(this.orbit.enabled=!this._states.mouse.isDrawing),!this.context.mainCamera)return;let e=this.context.input.getPointerPressedCount()>1,t=this.context.input.getPointerPositionRC(0);if(!t)return;Bc._raycaster.setFromCamera(t,this.context.mainCamera);let i=Bc._raycaster.ray;this.updateLine("mouse",i,this.context.input.getPointerPressed(0),this.context.input.getPointerUp(0),e||this.context.input.isKeyPressed("Alt"))}updateLine(e,t,i,n,r=!1){let s=this._states[e];if(s||(this._states[e]=new Fc,s=this._states[e]),n)s.isDrawing=!1,s.currentHandle&&(this.lines.endLine(s.currentHandle),s.currentHandle=null);else if(i){if(r)return s;let a=this.getHit(t),c=null,u=s.prevDistance;if(a)s.currentHandle||(s.maxDistance=a.distance),c=a.point,a.face&&c.add(a.face.normal.multiplyScalar(.01)),s.prevDistance=a.distance;else if(s.maxDistance>0){let l=s.maxDistance;if(!s.currentHandle&&s.lastHit){let d=B(this.context.mainCamera);l=s.lastHit.distanceTo(d)}c=t.origin.add(t.direction.multiplyScalar(s.maxDistance)),s.prevDistance=s.maxDistance}if(c){if(!s.currentHandle){let l=s.lastParent??this.gameObject;this.addToPaintedObject&&a&&(l=a.object),s.lastParent=l,s.currentHandle=this.lines.startLine(l,{material:this.createRandomMaterial()})}if(this.alignToSurface&&(s.prevDistance>s.maxDistance||Math.abs(u-s.prevDistance)>.2)){let l=s.maxDistance;c=t.origin.add(t.direction.multiplyScalar(l)),s.prevDistance=l}if(s.lastHit&&s.lastHit.distanceTo(c)<s.prevDistance*.01)return s;this.lines.updateLine(s.currentHandle,{point:c}),s.lastHit.copy(c)}s.isDrawing=s.currentHandle!==null}return s}_raycastOptions=new be;getHit(e){(!this.colliders||this.colliders.length===0)&&(this.colliders=[this.gameObject]),this._raycastOptions.targets=this.colliders,this._raycastOptions.ray=e;let t=this.context.physics.raycast(this._raycastOptions);if(t.length>0){for(let i of t)if(!!R.isActiveInHierarchy(i.object))return i}return null}createRandomMaterial(){let e;return this.context.connection.connectionId?e=xt.colorFromHashCode(xt.hashCode(this.context.connection.connectionId)):e=new Ug.Color("hsl("+(Math.random()*100).toFixed(0)+", 80%, 30%)"),new Yw({color:e,lineWidth:H.lerp(.005,.01,Math.random())})}},ka=Bc;I(ka,"_raycaster",new Qw);import{Object3D as Kw}from"three";var Ma=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(it)],Ma.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 Kw?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([Cc(),y()],ln.prototype,"owner",2);var Uc=class extends M{toggleKey="p";update(){this.context.input.isKeyDown("p")&&this.context.domElement.classList.toggle("presentation-mode")}};O.add("__Ignore",Oa);O.add("AlignmentConstraint",tr);O.add("Animation",Bt);O.add("AnimationCurve",gi);O.add("AnimationExtension",ir);O.add("AnimationTrackHandler",nr);O.add("Animator",Pe);O.add("AnimatorController",fi);O.add("AttachedObject",bt);O.add("AudioListener",bi);O.add("AudioSource",se);O.add("AudioTrackHandler",rr);O.add("Avatar_Brain_LookAt",Sn);O.add("Avatar_MouthShapes",ur);O.add("Avatar_MustacheShake",ns);O.add("Avatar_POI",ye);O.add("AvatarBlink_Simple",Qi);O.add("AvatarEyeLook_Rotation",qi);O.add("AvatarLoader",or);O.add("AvatarMarker",le);O.add("AvatarModel",Kr);O.add("AxesHelper",Mn);O.add("BaseUIComponent",We);O.add("BasicIKConstraint",rs);O.add("BoxCollider",pr);O.add("BoxGizmo",_i);O.add("BoxHelperComponent",Ne);O.add("Button",qt);O.add("CallInfo",vi);O.add("Camera",Z);O.add("Canvas",Xe);O.add("CanvasGroup",Ln);O.add("CapsuleCollider",Xt);O.add("CharacterController",Yi);O.add("CharacterControllerInput",Ti);O.add("Collider",Ot);O.add("ColorAdjustments",gr);O.add("ColorBySpeedModule",Ri);O.add("ColorOverLifetimeModule",jn);O.add("ControlTrackHandler",Rn);O.add("Deletable",ds);O.add("DeleteBox",ro);O.add("DeviceFlag",oo);O.add("DragControls",Ji);O.add("DropListener",br);O.add("Duplicatable",Zi);O.add("EmissionModule",_t);O.add("EventList",de);O.add("EventListEvent",Qr);O.add("EventSystem",Je);O.add("EventTrigger",so);O.add("FieldWithDefault",ps);O.add("FixedJoint",ms);O.add("FlyControls",gs);O.add("GltfExport",$t);O.add("GltfExportBox",bs);O.add("Gradient",Si);O.add("Graphic",yt);O.add("GraphicRaycaster",vs);O.add("GridHelper",Un);O.add("GridLayoutGroup",xs);O.add("GroundProjectedEnv",tn);O.add("HingeJoint",vr);O.add("HorizontalLayoutGroup",_s);O.add("Image",An);O.add("InheritVelocityModule",Jt);O.add("InputField",kt);O.add("Interactable",Vt);O.add("Keyboard",ws);O.add("LayoutGroup",Gn);O.add("Light",qe);O.add("LimitVelocityOverLifetimeModule",ue);O.add("LineInstanceHandler",Ds);O.add("LinesDrawer",ka);O.add("LinesManager",go);O.add("LODGroup",yr);O.add("LODModel",nn);O.add("LogStats",Cs);O.add("LookAtConstraint",_n);O.add("MainModule",_e);O.add("MaskableGraphic",In);O.add("MeshCollider",Zr);O.add("MeshRenderer",ao);O.add("MinMaxCurve",U);O.add("MinMaxGradient",Me);O.add("NestedGltf",ho);O.add("Networking",Pi);O.add("NoiseModule",K);O.add("ObjectRaycaster",co);O.add("OffsetConstraint",rn);O.add("OrbitControls",Ve);O.add("ParticleBurst",Hn);O.add("ParticleSubEmitter",_r);O.add("ParticleSystem",ve);O.add("ParticleSystemRenderer",on);O.add("PlayableDirector",Cn);O.add("PlayerColor",xt);O.add("PlayerState",ln);O.add("PlayerSync",Ma);O.add("PointerEventData",xi);O.add("PresentationMode",Uc);O.add("RawImage",to);O.add("Raycaster",lo);O.add("Rect",eo);O.add("RectTransform",vt);O.add("ReflectionProbe",Zt);O.add("RegisteredAnimationInfo",Nr);O.add("RemoteSkybox",Oi);O.add("Renderer",ae);O.add("RendererLightmap",Bn);O.add("RGBAColor",Q);O.add("Rigidbody",J);O.add("RotationBySpeedModule",Qe);O.add("RotationOverLifetimeModule",Ze);O.add("ScreenCapture",Er);O.add("ShadowCatcher",Cr);O.add("ShapeModule",ne);O.add("SignalAsset",qr);O.add("SignalReceiver",En);O.add("SignalReceiverEvent",Yr);O.add("SignalTrackHandler",Tn);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",Vn);O.add("SpatialTriggerReceiver",It);O.add("SpectatorCamera",Os);O.add("SphereCollider",hr);O.add("Sprite",ei);O.add("SpriteRenderer",sn);O.add("SpriteSheet",an);O.add("SubEmitterSystem",xr);O.add("SyncedCamera",Rr);O.add("SyncedRoom",ki);O.add("SyncedTransform",Pt);O.add("TeleportTarget",Jr);O.add("TestRunner",Ms);O.add("TestSimulateUserData",Is);O.add("Text",Ie);O.add("TextureSheetAnimationModule",xe);O.add("ToneMapping",mr);O.add("TrailModule",te);O.add("TransformData",Xr);O.add("TransformGizmo",fo);O.add("UIRaycastUtils",Ei);O.add("UIRootComponent",kn);O.add("UsageMarker",zt);O.add("USDZExporter",Sr);O.add("VelocityOverLifetimeModule",He);O.add("VerticalLayoutGroup",ys);O.add("VideoPlayer",Te);O.add("Voip",rt);O.add("Volume",no);O.add("VolumeComponent",Ki);O.add("VolumeParameter",cs);O.add("VolumeProfile",fr);O.add("VRUserState",Nt);O.add("WebAR",cr);O.add("WebARSessionRoot",mt);O.add("WebXR",V);O.add("WebXRAvatar",Gt);O.add("WebXRController",$);O.add("WebXRSync",On);O.add("XRFlag",Ee);O.add("XRGrabModel",mo);O.add("XRGrabRendering",As);O.add("XRRig",lr);O.add("XRState",St);var Gg=pe,Jw=P("debugtypestore");Jw&&console.log(O);function Vg(o,e){let i=du(o,e);return i!==void 0?i:null}var Zw=new Na;async function zg(o,e,t,i=null,n){if(!t)return;let r=[],s=i;typeof s=="number"&&(s=new Re(i));let a=new Co(t.scene);a.gltfId=e,a.context=o,a.gltf=t,a.nodeToObject=n?.nodeToObjectMap,a.implementationInformation=Zw;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)$w(u,a);if(s){Jh(t,s);for(let u of t.scenes)Jh(u,s)}})}function Jh(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)Jh(t,e)}}var Ia=[];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),si(e,c,!1),t.push({instance:c,compData:s,obj:e})}else Gg&&console.debug("unknown component: "+s.name),Ia.includes(s.name)||Ia.push(s.name)}catch(a){console.error(s.name+" - "+a.message,a)}if(Ia.length>0){let s=Ia.join(", ");console.warn("unknown components: "+s),Ia.length=0,ct()&&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 Jh(o,r,t,i)}function $w(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,Gg&&console.debug("add "+i.name,i,t)}var Aa=class{createBuiltinComponents(e,t,i,n,r){return zg(e,t,i,n,r)}writeBuiltinComponentData(e,t){return Vg(e,t)}parseSync(e,t,i,n){return tE(e,t,i,n)}loadSync(e,t,i,n,r){return iE(e,t,i,n,r)}};wl(Aa);var eE=P("printGltf");var Pr=class{context;loader;path;gltf;constructor(e,t,i,n){this.context=e,this.path=t,this.loader=i,this.gltf=n}},Wg={};function Ls(o,e){if(Wg[o])for(let t of Wg[o])t(e)}async function Xg(o,e,t,i,n){eE&&console.log(t),await o.assets.registerGltf(t),await Ke().createBuiltinComponents(o,e,t,i,n)}function tE(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=new Ng;Rd(n,o,t);let s=Td(n);return new Promise((a,c)=>{try{xn(n,o),Ls(0,new Pr(o,t,n)),n.parse(e,t,async u=>{Ls(1,new Pr(o,t,n,u)),await Xg(o,t,u,i,s),Ls(10,new Pr(o,t,n,u)),a(u)},u=>{console.error("failed loading "+t,u),a(void 0)})}catch(u){console.error(u),c(u)}})}function iE(o,e,t,i=!1,n){let r=new Ng;Rd(r,o,e);let a=Td(r);return new Promise((c,u)=>{try{xn(r,o),Ls(0,new Pr(o,e,r)),r.load(e,async l=>{Ls(1,new Pr(o,e,r,l)),await Xg(o,e,l,t,a),Ls(10,new Pr(o,e,r,l)),c(l)},l=>{n?.call(r,l)},l=>{console.error("failed loading "+e,l),c(void 0)})}catch(l){console.error(l),u(l)}})}wl(Aa);var zn=P("debugwebcomponent"),Zh=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 Ke().loadSync(this.context,e,this.getHashFromString(e),!1);i||bn(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}},nE="needle-engine",Qg="vr",qg="desktop",rE=[Ui,Qg,qg],Da="ar-session-active",La="desktop-session-active",$h=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 Fl}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 Zh(this.getAttribute("id")??r??"",this._context),i&&i.length>0){if(!n)for(;Object.keys(Hl).length<=0;){if(!this.isConnected)return;await _o(10)}let a=Hl[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"),zn&&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 na(this)),l&&this._loadingView?.onLoadingBegin("begin load");let d=(g,E)=>{this._loadingProgress01=od(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"),zn&&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',Hl)}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&&(zn&&console.log(e+" attribute changed",i),this.registerEventFromAttribute(e,i));break;case"dracoDecoderPath":zn&&console.log("dracoDecoderPath",i),ad(i);break;case"dracoDecoderType":i==="wasm"||i==="js"?(zn&&console.log("dracoDecoderType",i),ld(i)):console.error("Invalid dracoDecoderType",i,"expected js or wasm");break;case"ktx2DecoderPath":zn&&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(Da),this.classList.remove(La);let e=this.getAROverlayContainer();e&&(e.classList.add(Da),e.classList.remove(La)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Ui))}onSetupVR(){this.classList.remove(Da),this.classList.remove(La),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Qg))}onSetupDesktop(){this.classList.remove(Da),this.classList.add(La);let e=this.getAROverlayContainer();e&&(e.classList.remove(Da),e.classList.add(La)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,qg))}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 rE)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&&(zn&&console.log("using custom draco decoder path",e),ad(e));let t=this.getAttribute("dracoDecoderType");t&&(zn&&console.log("using custom draco decoder type",t),ld(t));let i=this.getAttribute("ktx2DecoderPath");i&&(zn&&console.log("using custom ktx2 decoder path",i),cd(i))}};window.customElements.define(nE,$h);import*as oE from"three";om();var ep={Context:G};globalThis.Needle=ep;function Yg(o){for(let e in o)ep[e]=o[e]}Yg(Zu);Yg(qh);for(let o of Object.getOwnPropertyNames(R))switch(o){case"prototype":case"constructor":case"length":case"name":continue;default:ep[o]=R[o];break}globalThis.THREE?console.warn("Threejs is already imported"):globalThis.THREE=oE;export{tr as AlignmentConstraint,Bt as Animation,gi as AnimationCurve,ir as AnimationExtension,nr as AnimationTrackHandler,Pe as Animator,fi as AnimatorController,it as AssetReference,bt as AttachedObject,bi as AudioListener,se as AudioSource,rr as AudioTrackHandler,Qi as AvatarBlink_Simple,qi as AvatarEyeLook_Rotation,or as AvatarLoader,le as AvatarMarker,Kr as AvatarModel,Sn as Avatar_Brain_LookAt,ur as Avatar_MouthShapes,ns as Avatar_MustacheShake,ye as Avatar_POI,Mn as AxesHelper,We as BaseUIComponent,rs as BasicIKConstraint,M as Behaviour,pr as BoxCollider,_i as BoxGizmo,Ne as BoxHelperComponent,qt as Button,vi as CallInfo,Z as Camera,Xe as Canvas,Ln as CanvasGroup,Xt as CapsuleCollider,Yi as CharacterController,Ti as CharacterControllerInput,Ot as Collider,Qs as Collision,gr as ColorAdjustments,Ri as ColorBySpeedModule,jn as ColorOverLifetimeModule,Rn as ControlTrackHandler,ds as Deletable,ro as DeleteBox,oo as DeviceFlag,Ji as DragControls,br as DropListener,Zi as Duplicatable,_t as EmissionModule,de as EventList,Qr as EventListEvent,Je as EventSystem,so as EventTrigger,ps as FieldWithDefault,ms as FixedJoint,gs as FlyControls,Rt as FrameEvent,R as GameObject,Et as Gizmos,$t as GltfExport,bs as GltfExportBox,Si as Gradient,yt as Graphic,vs as GraphicRaycaster,Un as GridHelper,xs as GridLayoutGroup,tn as GroundProjectedEnv,Xb as HideFlags,vr as HingeJoint,_s as HorizontalLayoutGroup,An as Image,Jt as InheritVelocityModule,kt as InputField,oe as InstancingUtil,Ue as InstantiateOptions,Vt as Interactable,ws as Keyboard,yr as LODGroup,nn as LODModel,Gn as LayoutGroup,qe as Light,ue as LimitVelocityOverLifetimeModule,Cs as LogStats,Gs as LogType,_n as LookAtConstraint,_e as MainModule,In as MaskableGraphic,Zr as MeshCollider,ao as MeshRenderer,U as MinMaxCurve,Me as MinMaxGradient,ho as NestedGltf,Pi as Networking,K as NoiseModule,co as ObjectRaycaster,rn as OffsetConstraint,Ve as OrbitControls,Hn as ParticleBurst,_r as ParticleSubEmitter,ve as ParticleSystem,on as ParticleSystemRenderer,Cn as PlayableDirector,xt as PlayerColor,xi as PointerEventData,Q as RGBAColor,to as RawImage,lo as Raycaster,eo as Rect,vt as RectTransform,Zt as ReflectionProbe,Nr as RegisteredAnimationInfo,Oi as RemoteSkybox,ae as Renderer,Bn as RendererLightmap,J as Rigidbody,Qe as RotationBySpeedModule,Ze as RotationOverLifetimeModule,Er as ScreenCapture,Cr as ShadowCatcher,ne as ShapeModule,qr as SignalAsset,En as SignalReceiver,Yr as SignalReceiverEvent,Tn as SignalTrackHandler,ss as Size,ke as SizeBySpeedModule,Kt as SizeOverLifetimeModule,fs as SkinnedMeshRenderer,Mt as SmoothFollow,Ps as SpatialHtml,Vn as SpatialTrigger,It as SpatialTriggerReceiver,Os as SpectatorCamera,hr as SphereCollider,ei as Sprite,sn as SpriteRenderer,an as SpriteSheet,xr as SubEmitterSystem,Rr as SyncedCamera,ki as SyncedRoom,Pt as SyncedTransform,Jr as TeleportTarget,Ms as TestRunner,Is as TestSimulateUserData,Ie as Text,xe as TextureSheetAnimationModule,mr as ToneMapping,te as TrailModule,Xr as TransformData,fo as TransformGizmo,O as TypeStore,Ei as UIRaycastUtils,kn as UIRootComponent,Sr as USDZExporter,zt as UsageMarker,Nt as VRUserState,He as VelocityOverLifetimeModule,ys as VerticalLayoutGroup,Te as VideoPlayer,rt as Voip,no as Volume,Ki as VolumeComponent,cs as VolumeParameter,fr as VolumeProfile,cr as WebAR,mt as WebARSessionRoot,V as WebXR,Gt as WebXRAvatar,$ as WebXRController,On as WebXRSync,Ee as XRFlag,mo as XRGrabModel,As as XRGrabRendering,lr as XRRig,St as XRState,Oa as __Ignore,si as addNewComponent,Mo as apply,oi as destroy,af as destroyComponentInstance,Lr as findByGuid,cf as findObjectOfType,uf as findObjectsOfType,ai as foreachComponent,Hr as getComponent,Fr as getComponentInChildren,Po as getComponentInParent,Oo as getComponents,ko as getComponentsInChildren,Ys as getComponentsInParent,ol as getOrAddComponent,jr as instantiate,hf as isActiveInHierarchy,gn as isActiveSelf,Ba as isDevEnvironment,ll as isUsingInstancing,pf as markAsInstancedRendered,sf as moveComponentInstance,rl as removeComponent,y as serializable,Bo as serializeable,Io as setActive,Fe as showBalloonMessage,Xn as showBalloonWarning,nu as showDebugConsole,ui 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 Zh(o,r,t,i)}function $w(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,Gg&&console.debug("add "+i.name,i,t)}var Aa=class{createBuiltinComponents(e,t,i,n,r){return zg(e,t,i,n,r)}writeBuiltinComponentData(e,t){return Vg(e,t)}parseSync(e,t,i,n){return tE(e,t,i,n)}loadSync(e,t,i,n,r){return iE(e,t,i,n,r)}};wl(Aa);var eE=P("printGltf");var Pr=class{context;loader;path;gltf;constructor(e,t,i,n){this.context=e,this.path=t,this.loader=i,this.gltf=n}},Wg={};function Ls(o,e){if(Wg[o])for(let t of Wg[o])t(e)}async function Xg(o,e,t,i,n){eE&&console.log(t),await o.assets.registerGltf(t),await Ke().createBuiltinComponents(o,e,t,i,n)}function tE(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=new Ng;Sd(n,o,t);let s=Rd(n);return new Promise((a,c)=>{try{xn(n,o),Ls(0,new Pr(o,t,n)),n.parse(e,t,async u=>{Ls(1,new Pr(o,t,n,u)),await Xg(o,t,u,i,s),Ls(10,new Pr(o,t,n,u)),a(u)},u=>{console.error("failed loading "+t,u),a(void 0)})}catch(u){console.error(u),c(u)}})}function iE(o,e,t,i=!1,n){let r=new Ng;Sd(r,o,e);let a=Rd(r);return new Promise((c,u)=>{try{xn(r,o),Ls(0,new Pr(o,e,r)),r.load(e,async l=>{Ls(1,new Pr(o,e,r,l)),await Xg(o,e,l,t,a),Ls(10,new Pr(o,e,r,l)),c(l)},l=>{n?.call(r,l)},l=>{console.error("failed loading "+e,l),c(void 0)})}catch(l){console.error(l),u(l)}})}wl(Aa);var zn=P("debugwebcomponent"),$h=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 Ke().loadSync(this.context,e,this.getHashFromString(e),!1);i||bn(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}},nE="needle-engine",Qg="vr",qg="desktop",rE=[Ui,Qg,qg],Da="ar-session-active",La="desktop-session-active",ep=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 Fl}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 $h(this.getAttribute("id")??r??"",this._context),i&&i.length>0){if(!n)for(;Object.keys(Hl).length<=0;){if(!this.isConnected)return;await _o(10)}let a=Hl[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"),zn&&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 na(this)),l&&this._loadingView?.onLoadingBegin("begin load");let d=(g,E)=>{this._loadingProgress01=sd(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"),zn&&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',Hl)}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&&(zn&&console.log(e+" attribute changed",i),this.registerEventFromAttribute(e,i));break;case"dracoDecoderPath":zn&&console.log("dracoDecoderPath",i),ld(i);break;case"dracoDecoderType":i==="wasm"||i==="js"?(zn&&console.log("dracoDecoderType",i),cd(i)):console.error("Invalid dracoDecoderType",i,"expected js or wasm");break;case"ktx2DecoderPath":zn&&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(Da),this.classList.remove(La);let e=this.getAROverlayContainer();e&&(e.classList.add(Da),e.classList.remove(La)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,Ui))}onSetupVR(){this.classList.remove(Da),this.classList.remove(La),this.foreachHtmlElement(e=>this.setupElementsForMode(e,Qg))}onSetupDesktop(){this.classList.remove(Da),this.classList.add(La);let e=this.getAROverlayContainer();e&&(e.classList.remove(Da),e.classList.add(La)),this.foreachHtmlElement(t=>this.setupElementsForMode(t,qg))}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 rE)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&&(zn&&console.log("using custom draco decoder path",e),ld(e));let t=this.getAttribute("dracoDecoderType");t&&(zn&&console.log("using custom draco decoder type",t),cd(t));let i=this.getAttribute("ktx2DecoderPath");i&&(zn&&console.log("using custom ktx2 decoder path",i),ud(i))}};window.customElements.define(nE,ep);import*as oE from"three";om();var tp={Context:G};globalThis.Needle=tp;function Yg(o){for(let e in o)tp[e]=o[e]}Yg($u);Yg(Yh);for(let o of Object.getOwnPropertyNames(R))switch(o){case"prototype":case"constructor":case"length":case"name":continue;default:tp[o]=R[o];break}globalThis.THREE?console.warn("Threejs is already imported"):globalThis.THREE=oE;export{tr as AlignmentConstraint,Bt as Animation,gi as AnimationCurve,ir as AnimationExtension,nr as AnimationTrackHandler,Pe as Animator,fi as AnimatorController,it as AssetReference,bt as AttachedObject,bi as AudioListener,se as AudioSource,rr as AudioTrackHandler,Qi as AvatarBlink_Simple,qi as AvatarEyeLook_Rotation,or as AvatarLoader,le as AvatarMarker,Kr as AvatarModel,Sn as Avatar_Brain_LookAt,ur as Avatar_MouthShapes,ns as Avatar_MustacheShake,ye as Avatar_POI,Mn as AxesHelper,We as BaseUIComponent,rs as BasicIKConstraint,M as Behaviour,pr as BoxCollider,_i as BoxGizmo,Ne as BoxHelperComponent,qt as Button,vi as CallInfo,Z as Camera,Xe as Canvas,Ln as CanvasGroup,Xt as CapsuleCollider,Yi as CharacterController,Ti as CharacterControllerInput,Ot as Collider,Qs as Collision,gr as ColorAdjustments,Ri as ColorBySpeedModule,jn as ColorOverLifetimeModule,Rn as ControlTrackHandler,ds as Deletable,ro as DeleteBox,oo as DeviceFlag,Ji as DragControls,br as DropListener,Zi as Duplicatable,_t as EmissionModule,de as EventList,Qr as EventListEvent,Je as EventSystem,so as EventTrigger,ps as FieldWithDefault,ms as FixedJoint,gs as FlyControls,Rt as FrameEvent,R as GameObject,Et as Gizmos,$t as GltfExport,bs as GltfExportBox,Si as Gradient,yt as Graphic,vs as GraphicRaycaster,Un as GridHelper,xs as GridLayoutGroup,tn as GroundProjectedEnv,Xb as HideFlags,vr as HingeJoint,_s as HorizontalLayoutGroup,An as Image,Jt as InheritVelocityModule,kt as InputField,oe as InstancingUtil,Ue as InstantiateOptions,Vt as Interactable,ws as Keyboard,yr as LODGroup,nn as LODModel,Gn as LayoutGroup,qe as Light,ue as LimitVelocityOverLifetimeModule,Cs as LogStats,Gs as LogType,_n as LookAtConstraint,_e as MainModule,In as MaskableGraphic,Zr as MeshCollider,ao as MeshRenderer,U as MinMaxCurve,Me as MinMaxGradient,ho as NestedGltf,Pi as Networking,K as NoiseModule,co as ObjectRaycaster,rn as OffsetConstraint,Ve as OrbitControls,Hn as ParticleBurst,_r as ParticleSubEmitter,ve as ParticleSystem,on as ParticleSystemRenderer,Cn as PlayableDirector,xt as PlayerColor,xi as PointerEventData,Q as RGBAColor,to as RawImage,lo as Raycaster,eo as Rect,vt as RectTransform,Zt as ReflectionProbe,Nr as RegisteredAnimationInfo,Oi as RemoteSkybox,ae as Renderer,Bn as RendererLightmap,J as Rigidbody,Qe as RotationBySpeedModule,Ze as RotationOverLifetimeModule,Er as ScreenCapture,Cr as ShadowCatcher,ne as ShapeModule,qr as SignalAsset,En as SignalReceiver,Yr as SignalReceiverEvent,Tn as SignalTrackHandler,ss as Size,ke as SizeBySpeedModule,Kt as SizeOverLifetimeModule,fs as SkinnedMeshRenderer,Mt as SmoothFollow,Ps as SpatialHtml,Vn as SpatialTrigger,It as SpatialTriggerReceiver,Os as SpectatorCamera,hr as SphereCollider,ei as Sprite,sn as SpriteRenderer,an as SpriteSheet,xr as SubEmitterSystem,Rr as SyncedCamera,ki as SyncedRoom,Pt as SyncedTransform,Jr as TeleportTarget,Ms as TestRunner,Is as TestSimulateUserData,Ie as Text,xe as TextureSheetAnimationModule,mr as ToneMapping,te as TrailModule,Xr as TransformData,fo as TransformGizmo,O as TypeStore,Ei as UIRaycastUtils,kn as UIRootComponent,Sr as USDZExporter,zt as UsageMarker,Nt as VRUserState,He as VelocityOverLifetimeModule,ys as VerticalLayoutGroup,Te as VideoPlayer,rt as Voip,no as Volume,Ki as VolumeComponent,cs as VolumeParameter,fr as VolumeProfile,cr as WebAR,mt as WebARSessionRoot,V as WebXR,Gt as WebXRAvatar,$ as WebXRController,On as WebXRSync,Ee as XRFlag,mo as XRGrabModel,As as XRGrabRendering,lr as XRRig,St as XRState,Oa as __Ignore,si as addNewComponent,Mo as apply,oi as destroy,lf as destroyComponentInstance,Lr as findByGuid,uf as findObjectOfType,df as findObjectsOfType,ai as foreachComponent,Hr as getComponent,Fr as getComponentInChildren,Po as getComponentInParent,Oo as getComponents,ko as getComponentsInChildren,Ys as getComponentsInParent,ol as getOrAddComponent,jr as instantiate,pf as isActiveInHierarchy,gn as isActiveSelf,Ba as isDevEnvironment,ll as isUsingInstancing,ff as markAsInstancedRendered,af as moveComponentInstance,rl as removeComponent,y as serializable,Bo as serializeable,Io as setActive,Fe as showBalloonMessage,Xn as showBalloonWarning,nu as showDebugConsole,ui as validate};
314
314
  /*!
315
315
  * Determine if an object is a Buffer
316
316
  *