/** * Name: Metaverse * Date: 2022/4/12 * Author: https://www.4dkankan.com * Copyright © 2022 4DAGE Co., Ltd. All rights reserved. * Licensed under the GLP license */ (function (factory) { typeof define === 'function' && define.amd ? define(factory) : factory(); })((function () { 'use strict'; function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function createCommonjsModule(fn) { var module = { exports: {} }; return fn(module, module.exports), module.exports; } /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var runtime_1 = createCommonjsModule(function (module) { var runtime = (function (exports) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined$1; // More compressible than void 0. var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); return obj[key]; } try { // IE 8 has a broken Object.defineProperty that only works on DOM objects. define({}, ""); } catch (err) { define = function(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, // .throw, and .return methods. generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we // already have an existing method we want to call, so there's no need // to create a new function object. We can even get away with assuming // the method takes exactly one argument, since that happens to be true // in every case, so we don't have to touch the arguments object. The // only additional allocation required is the completion record, which // has a stable shape and so hopefully should be cheap to allocate. function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as // breaking out of the dispatch switch statement. var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and // .constructor.prototype properties for functions that return Generator // objects. For full spec compliance, you may wish to configure your // minifier not to mangle the names of these two functions. function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that // don't natively support it. var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { // This environment has a native %IteratorPrototype%; use it instead // of the polyfill. IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = GeneratorFunctionPrototype; define(Gp, "constructor", GeneratorFunctionPrototype); define(GeneratorFunctionPrototype, "constructor", GeneratorFunction); GeneratorFunction.displayName = define( GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction" ); // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function(method) { define(prototype, method, function(arg) { return this._invoke(method, arg); }); }); } exports.isGeneratorFunction = function(genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports.mark = function(genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; define(genFun, toStringTagSymbol, "GeneratorFunction"); } genFun.prototype = Object.create(Gp); return genFun; }; // Within the body of any async function, `await x` is transformed to // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test // `hasOwn.call(value, "__await")` to determine if the yielded value is // meant to be awaited. exports.awrap = function(arg) { return { __await: arg }; }; function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return PromiseImpl.resolve(value.__await).then(function(value) { invoke("next", value, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }); } return PromiseImpl.resolve(value).then(function(unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. result.value = unwrapped; resolve(result); }, function(error) { // If a rejected Promise was yielded, throw the rejection back // into the async generator function so it can be handled there. return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, // so that results are always delivered in the correct order. If // enqueue has not been called before, then it is important to // call invoke immediately, without waiting on a callback to fire, // so that the async generator function has the opportunity to do // any necessary setup in a predictable way. This predictability // is why the Promise constructor synchronously invokes its // executor callback, and why async functions synchronously // execute code before the first await. Since we implement simple // async functions in terms of async generators, it is especially // important to get this right, even though it requires care. previousPromise ? previousPromise.then( callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg ) : callInvokeWithMethodAndArg(); } // Define the unified helper method that is used to implement .next, // .throw, and .return (see defineIteratorMethods). this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }); exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) { if (PromiseImpl === void 0) PromiseImpl = Promise; var iter = new AsyncIterator( wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl ); return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } // Be forgiving, per 25.3.3.3.3 of the spec: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { // Setting context._sent for legacy support of Babel's // function.sent implementation. context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { // If an exception is thrown from innerFn, we leave state === // GenStateExecuting and loop back for another invocation. state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; // Dispatch the exception by looping back around to the // context.dispatchException(context.arg) call above. context.method = "throw"; context.arg = record.arg; } } }; } // Call delegate.iterator[context.method](context.arg) and handle the // result, either by returning a { value, done } result from the // delegate iterator, or by modifying context.method and context.arg, // setting context.delegate to null, and returning the ContinueSentinel. function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined$1) { // A .throw or .return when the delegate iterator has no .throw // method always terminates the yield* loop. context.delegate = null; if (context.method === "throw") { // Note: ["return"] must be used for ES3 parsing compatibility. if (delegate.iterator["return"]) { // If the delegate iterator has a return method, give it a // chance to clean up. context.method = "return"; context.arg = undefined$1; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { // If maybeInvokeDelegate(context) changed context.method from // "return" to "throw", let that override the TypeError below. return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError( "The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (! info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { // Assign the result of the finished delegate to the temporary // variable specified by delegate.resultName (see delegateYield). context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield). context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the // exception, let the outer generator proceed normally. If // context.method was "next", forget context.arg since it has been // "consumed" by the delegate iterator. If context.method was // "return", allow the original .return call to continue in the // outer generator. if (context.method !== "return") { context.method = "next"; context.arg = undefined$1; } } else { // Re-yield the result returned by the delegate method. return info; } // The delegate iterator is finished, so forget it and continue with // the outer generator. context.delegate = null; return ContinueSentinel; } // Define Generator.prototype.{next,throw,return} in terms of the // unified ._invoke helper method. defineIteratorMethods(Gp); define(Gp, toStringTagSymbol, "Generator"); // A Generator should always return itself as the iterator object when the // @@iterator function is called on it. Some browsers' implementations of the // iterator prototype chain incorrectly implement this, causing the Generator // object to not be returned from this call. This ensures that doesn't happen. // See https://github.com/facebook/regenerator/issues/274 for more details. define(Gp, iteratorSymbol, function() { return this; }); define(Gp, "toString", function() { return "[object Generator]"; }); function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { // The root entry object (effectively a try statement without a catch // or a finally block) gives us a place to store values thrown from // locations where there is no enclosing try statement. this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports.keys = function(object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); // Rather than returning an object with a next method, we keep // things simple and return the next function itself. return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } // To avoid creating an additional object, we just hang the .value // and .done properties off the next function object itself. This // also ensures that the minifier will not anonymize the function. next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined$1; next.done = true; return next; }; return next.next = next; } } // Return an iterator with no values. return { next: doneResult }; } exports.values = values; function doneResult() { return { value: undefined$1, done: true }; } Context.prototype = { constructor: Context, reset: function(skipTempReset) { this.prev = 0; this.next = 0; // Resetting context._sent for legacy support of Babel's // function.sent implementation. this.sent = this._sent = undefined$1; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined$1; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { // Not sure about the optimal order of these conditions: if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined$1; } } } }, stop: function() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { // If the dispatched exception was caught by a catch block, // then let that catch block handle the exception normally. context.method = "next"; context.arg = undefined$1; } return !! caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { // Exception thrown outside of any try block that could handle // it, so set the completion value of the entire function to // throw the exception. return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { // Ignore the finally entry if control is not jumping to a // location outside the try/catch block. finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } // The context.catch method must only be called with a location // argument that corresponds to a known catch block. throw new Error("illegal catch attempt"); }, delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { // Deliberately forget the last sent value so that we don't // accidentally pass it on to the delegate. this.arg = undefined$1; } return ContinueSentinel; } }; // Regardless of whether this script is executing as a CommonJS module // or not, return the runtime object so that we can declare the variable // regeneratorRuntime in the outer scope, which allows this module to be // injected easily by `bin/regenerator --include-runtime script.js`. return exports; }( // If this script is executing as a CommonJS module, use module.exports // as the regeneratorRuntime namespace. Otherwise create a new empty // object. Either way, the resulting object will be used to initialize // the regeneratorRuntime variable at the top of this file. module.exports )); try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { // This module should not be running in strict mode, so the above // assignment should always work unless something is misconfigured. Just // in case runtime.js accidentally runs in strict mode, in modern engines // we can explicitly access globalThis. In older engines we can escape // strict mode using a global Function call. This could conceivably fail // if a Content Security Policy forbids using Function, but in that case // the proper solution is to fix the accidental strict mode problem. If // you've misconfigured your bundler to force strict mode and applied a // CSP to forbid Function, and you're not willing to fix either of those // problems, please detail your unique predicament in a GitHub issue. if (typeof globalThis === "object") { globalThis.regeneratorRuntime = runtime; } else { Function("r", "regeneratorRuntime = r")(runtime); } } }); var regenerator = runtime_1; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var Codes = { Success: 0, Param: 1001, Internal: 1002, Timeout: 1003, Authentication: 1004, TokenExpired: 1005, Unsupported: 1006, InitNetworkTimeout: 1007, InitDecoderTimeout: 1008, InitConfigTimeout: 1009, InitEngineTimeout: 1010, InitEngine: 1011, ActionBlocked: 1012, PreloadCanceled: 1013, FrequencyLimit: 1014, UsersUpperLimit: 2e3, RoomsUpperLimit: 2001, ServerParam: 2002, LackOfToken: 2003, LoginFailed: 2004, VerifyServiceDown: 2005, CreateSessionFailed: 2006, RtcConnection: 2008, DoActionFailed: 2009, StateSyncFailed: 2010, BroadcastFailed: 2011, DataAbnormal: 2012, GetOnVehicle: 2015, RepeatLogin: 2017, RoomDoseNotExist: 2018, TicketExpire: 2019, ServerRateLimit: 2020, DoActionBlocked: 2333, ActionMaybeDelay: 2334, ActionResponseTimeout: 2999 }; function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } function _isNativeReflectConstruct$R() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _construct(Parent, args, Class) { if (_isNativeReflectConstruct$R()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } function _createSuper$Q(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$Q(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$Q() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var XverseError = /*#__PURE__*/function (_Error) { _inherits(XverseError, _Error); var _super = _createSuper$Q(XverseError); function XverseError(e, t) { var _this; _classCallCheck(this, XverseError); _this = _super.call(this, t); _this.code = e; return _this; } _createClass(XverseError, [{ key: "toJSON", value: function toJSON() { return { code: this.code, message: this.message }; } }, { key: "toString", value: function toString() { if (Object(this) !== this) throw new TypeError(); var t = this.name; t = t === void 0 ? "Error" : String(t); var r = this.message; r = r === void 0 ? "" : String(r); var n = this.code; return r = n === void 0 ? r : n + "," + r, t === "" ? r : r === "" ? t : t + ": " + r; } }]); return XverseError; }( /*#__PURE__*/_wrapNativeSuper(Error)); function _createSuper$P(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$P(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$P() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ParamError$1 = /*#__PURE__*/function (_XverseError) { _inherits(ParamError, _XverseError); var _super = _createSuper$P(ParamError); function ParamError(e) { _classCallCheck(this, ParamError); return _super.call(this, 1001, e || "\u53C2\u6570\u9519\u8BEF"); } return _createClass(ParamError); }(XverseError); function _createSuper$O(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$O(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$O() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var InternalError = /*#__PURE__*/function (_XverseError) { _inherits(InternalError, _XverseError); var _super = _createSuper$O(InternalError); function InternalError(e) { _classCallCheck(this, InternalError); return _super.call(this, 1002, e || "\u5185\u90E8\u9519\u8BEF"); } return _createClass(InternalError); }(XverseError); function _createSuper$N(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$N(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$N() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var TimeoutError = /*#__PURE__*/function (_XverseError) { _inherits(TimeoutError, _XverseError); var _super = _createSuper$N(TimeoutError); function TimeoutError(e) { _classCallCheck(this, TimeoutError); return _super.call(this, 1003, e || "\u8D85\u65F6"); } return _createClass(TimeoutError); }(XverseError); function _createSuper$M(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$M(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$M() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var AuthenticationError$1 = /*#__PURE__*/function (_XverseError) { _inherits(AuthenticationError, _XverseError); var _super = _createSuper$M(AuthenticationError); function AuthenticationError(e) { _classCallCheck(this, AuthenticationError); return _super.call(this, 1004, e || "\u9274\u6743\u5931\u8D25"); } return _createClass(AuthenticationError); }(XverseError); function _createSuper$L(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$L(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$L() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var TokenExpiredError$1 = /*#__PURE__*/function (_XverseError) { _inherits(TokenExpiredError, _XverseError); var _super = _createSuper$L(TokenExpiredError); function TokenExpiredError(e) { _classCallCheck(this, TokenExpiredError); return _super.call(this, 1005, e || "Token \u5DF2\u8FC7\u671F"); } return _createClass(TokenExpiredError); }(XverseError); function _createSuper$K(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$K(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$K() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var UnsupportedError$1 = /*#__PURE__*/function (_XverseError) { _inherits(UnsupportedError, _XverseError); var _super = _createSuper$K(UnsupportedError); function UnsupportedError(e) { _classCallCheck(this, UnsupportedError); return _super.call(this, 1006, e || "\u624B\u673A\u7CFB\u7EDF\u4E0D\u652F\u6301XVerse"); } return _createClass(UnsupportedError); }(XverseError); function _createSuper$J(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$J(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$J() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var InitNetworkTimeoutError = /*#__PURE__*/function (_XverseError) { _inherits(InitNetworkTimeoutError, _XverseError); var _super = _createSuper$J(InitNetworkTimeoutError); function InitNetworkTimeoutError(e) { _classCallCheck(this, InitNetworkTimeoutError); return _super.call(this, 1007, e || "\u7F51\u7EDC\u521D\u59CB\u5316\u8D85\u65F6"); } return _createClass(InitNetworkTimeoutError); }(XverseError); function _createSuper$I(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$I(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$I() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var InitDecoderTimeoutError = /*#__PURE__*/function (_XverseError) { _inherits(InitDecoderTimeoutError, _XverseError); var _super = _createSuper$I(InitDecoderTimeoutError); function InitDecoderTimeoutError(e) { _classCallCheck(this, InitDecoderTimeoutError); return _super.call(this, 1008, e || "Decoder \u521D\u59CB\u5316\u8D85\u65F6"); } return _createClass(InitDecoderTimeoutError); }(XverseError); function _createSuper$H(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$H(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$H() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var InitConfigTimeoutError = /*#__PURE__*/function (_XverseError) { _inherits(InitConfigTimeoutError, _XverseError); var _super = _createSuper$H(InitConfigTimeoutError); function InitConfigTimeoutError(e) { _classCallCheck(this, InitConfigTimeoutError); return _super.call(this, 1009, e || "\u914D\u7F6E\u521D\u59CB\u5316\u8D85\u65F6"); } return _createClass(InitConfigTimeoutError); }(XverseError); function _createSuper$G(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$G(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$G() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var InitEngineTimeoutError = /*#__PURE__*/function (_XverseError) { _inherits(InitEngineTimeoutError, _XverseError); var _super = _createSuper$G(InitEngineTimeoutError); function InitEngineTimeoutError(e) { _classCallCheck(this, InitEngineTimeoutError); return _super.call(this, 1010, e || "\u5F15\u64CE\u521D\u59CB\u5316\u8D85\u65F6"); } return _createClass(InitEngineTimeoutError); }(XverseError); function _createSuper$F(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$F(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$F() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var InitEngineError = /*#__PURE__*/function (_XverseError) { _inherits(InitEngineError, _XverseError); var _super = _createSuper$F(InitEngineError); function InitEngineError(e) { _classCallCheck(this, InitEngineError); return _super.call(this, 1011, e || "\u5F15\u64CE\u521D\u59CB\u5316\u9519\u8BEF"); } return _createClass(InitEngineError); }(XverseError); function _createSuper$E(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$E(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$E() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ActionBlockedError = /*#__PURE__*/function (_XverseError) { _inherits(ActionBlockedError, _XverseError); var _super = _createSuper$E(ActionBlockedError); function ActionBlockedError(e) { _classCallCheck(this, ActionBlockedError); return _super.call(this, 1012, e || "\u52A8\u4F5C\u88AB\u5C4F\u853D"); } return _createClass(ActionBlockedError); }(XverseError); function _createSuper$D(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$D(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$D() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var PreloadCanceledError$1 = /*#__PURE__*/function (_XverseError) { _inherits(PreloadCanceledError, _XverseError); var _super = _createSuper$D(PreloadCanceledError); function PreloadCanceledError(e) { _classCallCheck(this, PreloadCanceledError); return _super.call(this, 1013, e || "\u9884\u52A0\u8F7D\u88AB\u53D6\u6D88"); } return _createClass(PreloadCanceledError); }(XverseError); function _createSuper$C(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$C(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$C() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var FrequencyLimitError$1 = /*#__PURE__*/function (_XverseError) { _inherits(FrequencyLimitError, _XverseError); var _super = _createSuper$C(FrequencyLimitError); function FrequencyLimitError(e) { _classCallCheck(this, FrequencyLimitError); return _super.call(this, 1014, e || "\u9891\u7387\u9650\u5236"); } return _createClass(FrequencyLimitError); }(XverseError); function _createSuper$B(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$B(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$B() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var UsersUpperLimitError = /*#__PURE__*/function (_XverseError) { _inherits(UsersUpperLimitError, _XverseError); var _super = _createSuper$B(UsersUpperLimitError); function UsersUpperLimitError(e) { _classCallCheck(this, UsersUpperLimitError); return _super.call(this, 2e3, e || "\u76F4\u64AD\u95F4\u4EBA\u6570\u5DF2\u6EE1"); } return _createClass(UsersUpperLimitError); }(XverseError); function _createSuper$A(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$A(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$A() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var RoomsUpperLimitError = /*#__PURE__*/function (_XverseError) { _inherits(RoomsUpperLimitError, _XverseError); var _super = _createSuper$A(RoomsUpperLimitError); function RoomsUpperLimitError(e) { _classCallCheck(this, RoomsUpperLimitError); return _super.call(this, 2001, e || "\u623F\u95F4\u5230\u8FBE\u4E0A\u9650"); } return _createClass(RoomsUpperLimitError); }(XverseError); function _createSuper$z(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$z(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$z() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ServerParamError = /*#__PURE__*/function (_XverseError) { _inherits(ServerParamError, _XverseError); var _super = _createSuper$z(ServerParamError); function ServerParamError(e) { _classCallCheck(this, ServerParamError); return _super.call(this, 2002, e || "\u670D\u52A1\u5668\u53C2\u6570\u9519\u8BEF"); } return _createClass(ServerParamError); }(XverseError); function _createSuper$y(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$y(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$y() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var LackOfTokenError = /*#__PURE__*/function (_XverseError) { _inherits(LackOfTokenError, _XverseError); var _super = _createSuper$y(LackOfTokenError); function LackOfTokenError(e) { _classCallCheck(this, LackOfTokenError); return _super.call(this, 2003, e || "\u7F3A\u5C11 Token"); } return _createClass(LackOfTokenError); }(XverseError); function _createSuper$x(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$x(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$x() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var LoginFailedError = /*#__PURE__*/function (_XverseError) { _inherits(LoginFailedError, _XverseError); var _super = _createSuper$x(LoginFailedError); function LoginFailedError(e) { _classCallCheck(this, LoginFailedError); return _super.call(this, 2004, e || "\u8FDB\u5165\u623F\u95F4\u5931\u8D25"); } return _createClass(LoginFailedError); }(XverseError); function _createSuper$w(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$w(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$w() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var VerifyServiceDownError = /*#__PURE__*/function (_XverseError) { _inherits(VerifyServiceDownError, _XverseError); var _super = _createSuper$w(VerifyServiceDownError); function VerifyServiceDownError(e) { _classCallCheck(this, VerifyServiceDownError); return _super.call(this, 2005, e || "\u9274\u6743\u670D\u52A1\u5F02\u5E38"); } return _createClass(VerifyServiceDownError); }(XverseError); function _createSuper$v(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$v(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$v() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var CreateSessionFailedError = /*#__PURE__*/function (_XverseError) { _inherits(CreateSessionFailedError, _XverseError); var _super = _createSuper$v(CreateSessionFailedError); function CreateSessionFailedError(e) { _classCallCheck(this, CreateSessionFailedError); return _super.call(this, 2006, e || "\u521B\u5EFA session \u5931\u8D25"); } return _createClass(CreateSessionFailedError); }(XverseError); function _createSuper$u(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$u(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$u() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var RtcConnectionError = /*#__PURE__*/function (_XverseError) { _inherits(RtcConnectionError, _XverseError); var _super = _createSuper$u(RtcConnectionError); function RtcConnectionError(e) { _classCallCheck(this, RtcConnectionError); return _super.call(this, 2008, e || "RTC\u5EFA\u8054\u5931\u8D25"); } return _createClass(RtcConnectionError); }(XverseError); function _createSuper$t(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$t(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$t() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var DoActionFailedError = /*#__PURE__*/function (_XverseError) { _inherits(DoActionFailedError, _XverseError); var _super = _createSuper$t(DoActionFailedError); function DoActionFailedError(e) { _classCallCheck(this, DoActionFailedError); return _super.call(this, 2009, e || "\u52A8\u4F5C\u6267\u884C\u5931\u8D25"); } return _createClass(DoActionFailedError); }(XverseError); function _createSuper$s(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$s(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$s() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var StateSyncFailedError = /*#__PURE__*/function (_XverseError) { _inherits(StateSyncFailedError, _XverseError); var _super = _createSuper$s(StateSyncFailedError); function StateSyncFailedError(e) { _classCallCheck(this, StateSyncFailedError); return _super.call(this, 2010, e || "\u72B6\u6001\u540C\u6B65\u5931\u8D25"); } return _createClass(StateSyncFailedError); }(XverseError); function _createSuper$r(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$r(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$r() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var BroadcastFailedError = /*#__PURE__*/function (_XverseError) { _inherits(BroadcastFailedError, _XverseError); var _super = _createSuper$r(BroadcastFailedError); function BroadcastFailedError(e) { _classCallCheck(this, BroadcastFailedError); return _super.call(this, 2011, e || "\u5E7F\u64AD\u63A5\u53E3\u63A5\u53E3\u5F02\u5E38"); } return _createClass(BroadcastFailedError); }(XverseError); function _createSuper$q(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$q(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$q() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var DataAbnormalError = /*#__PURE__*/function (_XverseError) { _inherits(DataAbnormalError, _XverseError); var _super = _createSuper$q(DataAbnormalError); function DataAbnormalError(e) { _classCallCheck(this, DataAbnormalError); return _super.call(this, 2012, e || "\u6570\u636E\u5F02\u5E38"); } return _createClass(DataAbnormalError); }(XverseError); function _createSuper$p(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$p(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$p() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var GetOnVehicleError = /*#__PURE__*/function (_XverseError) { _inherits(GetOnVehicleError, _XverseError); var _super = _createSuper$p(GetOnVehicleError); function GetOnVehicleError(e) { _classCallCheck(this, GetOnVehicleError); return _super.call(this, 2015, e || "\u4E0A\u8F7D\u5177\u5931\u8D25\u9700\u8981\u9884\u7EA6"); } return _createClass(GetOnVehicleError); }(XverseError); function _createSuper$o(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$o(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$o() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var RepeatLoginError = /*#__PURE__*/function (_XverseError) { _inherits(RepeatLoginError, _XverseError); var _super = _createSuper$o(RepeatLoginError); function RepeatLoginError(e) { _classCallCheck(this, RepeatLoginError); return _super.call(this, 2017, e || "\u5F02\u5730\u767B\u5F55"); } return _createClass(RepeatLoginError); }(XverseError); function _createSuper$n(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$n(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$n() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var RoomDoseNotExistError = /*#__PURE__*/function (_XverseError) { _inherits(RoomDoseNotExistError, _XverseError); var _super = _createSuper$n(RoomDoseNotExistError); function RoomDoseNotExistError(e) { _classCallCheck(this, RoomDoseNotExistError); return _super.call(this, 2018, e || "\u6307\u5B9A\u623F\u95F4\u4E0D\u5B58\u5728"); } return _createClass(RoomDoseNotExistError); }(XverseError); function _createSuper$m(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$m(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$m() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var TicketExpireError = /*#__PURE__*/function (_XverseError) { _inherits(TicketExpireError, _XverseError); var _super = _createSuper$m(TicketExpireError); function TicketExpireError(e) { _classCallCheck(this, TicketExpireError); return _super.call(this, 2019, e || "\u7968\u636E\u8FC7\u671F"); } return _createClass(TicketExpireError); }(XverseError); function _createSuper$l(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$l(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$l() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ServerRateLimitError = /*#__PURE__*/function (_XverseError) { _inherits(ServerRateLimitError, _XverseError); var _super = _createSuper$l(ServerRateLimitError); function ServerRateLimitError(e) { _classCallCheck(this, ServerRateLimitError); return _super.call(this, 2020, e || "\u670D\u52A1\u7AEF\u9891\u7387\u9650\u5236"); } return _createClass(ServerRateLimitError); }(XverseError); function _createSuper$k(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$k(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$k() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var DoActionBlockedError = /*#__PURE__*/function (_XverseError) { _inherits(DoActionBlockedError, _XverseError); var _super = _createSuper$k(DoActionBlockedError); function DoActionBlockedError(e) { _classCallCheck(this, DoActionBlockedError); return _super.call(this, 2333, e || "\u52A8\u4F5C\u88AB\u5C4F\u853D"); } return _createClass(DoActionBlockedError); }(XverseError); function _createSuper$j(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$j(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$j() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ActionMaybeDelayError = /*#__PURE__*/function (_XverseError) { _inherits(ActionMaybeDelayError, _XverseError); var _super = _createSuper$j(ActionMaybeDelayError); function ActionMaybeDelayError(e) { _classCallCheck(this, ActionMaybeDelayError); return _super.call(this, 2334, e || "\u52A8\u4F5C\u53EF\u80FD\u5EF6\u8FDF\u6267\u884C"); } return _createClass(ActionMaybeDelayError); }(XverseError); function _createSuper$i(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$i(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$i() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ActionResponseTimeoutError$1 = /*#__PURE__*/function (_XverseError) { _inherits(ActionResponseTimeoutError, _XverseError); var _super = _createSuper$i(ActionResponseTimeoutError); function ActionResponseTimeoutError(e) { _classCallCheck(this, ActionResponseTimeoutError); return _super.call(this, 2999, e || "action\u56DE\u5305\u8D85\u65F6"); } return _createClass(ActionResponseTimeoutError); }(XverseError); var CodeErrorMap = { 1001: ParamError$1, 1002: InternalError, 1003: TimeoutError, 1004: AuthenticationError$1, 1005: TokenExpiredError$1, 1006: UnsupportedError$1, 1007: InitNetworkTimeoutError, 1008: InitDecoderTimeoutError, 1009: InitConfigTimeoutError, 1010: InitEngineTimeoutError, 1011: InitEngineError, 1012: ActionBlockedError, 1013: PreloadCanceledError$1, 1014: FrequencyLimitError$1, 2e3: UsersUpperLimitError, 2001: RoomsUpperLimitError, 2002: ServerParamError, 2003: LackOfTokenError, 2004: LoginFailedError, 2005: VerifyServiceDownError, 2006: CreateSessionFailedError, 2008: RtcConnectionError, 2009: DoActionFailedError, 2010: StateSyncFailedError, 2011: BroadcastFailedError, 2012: DataAbnormalError, 2015: GetOnVehicleError, 2017: RepeatLoginError, 2018: RoomDoseNotExistError, 2019: TicketExpireError, 2020: ServerRateLimitError, 2333: DoActionBlockedError, 2334: ActionMaybeDelayError, 2999: ActionResponseTimeoutError$1 }; var util = { uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (i) { var e = Math.random() * 16 | 0; return (i === "x" ? e : e & 3 | 8).toString(16); }); }, getFormattedDate(i) { var e = i.getMonth() + 1, t = i.getDate(), r = i.getHours(), n = i.getMinutes(), o = i.getSeconds(), a = i.getMilliseconds(), s = (e < 10 ? "0" : "") + e, l = (t < 10 ? "0" : "") + t, u = (r < 10 ? "0" : "") + r, c = (n < 10 ? "0" : "") + n, h = (o < 10 ? "0" : "") + o; return i.getFullYear() + "-" + s + "-" + l + " " + u + ":" + c + ":" + h + "." + a; }, createInstance(i) { var e = new Axios(i), t = bind(Axios.prototype.request, e); return utils.extend(t, Axios.prototype, e), utils.extend(t, e), t.create = function (n) { return createInstance(mergeConfig(i, n)); }, t; }, mapLimit(i, e, t) { return new Promise(function (r, n) { var o = i.length; var a = e - 1, s = 0; var l = function l(u) { u.forEach(function (c) { t(c).then(function () { if (s++, s === o) { r(); return; } a++; var h = i[a]; h && l([h]); }, function (h) { n(h); }); }); }; l(i.slice(0, e)); }); }, isWebAssemblySupported() { try { if (typeof WebAssembly == "object" && typeof WebAssembly.instantiate == "function") { var i = new WebAssembly.Module(Uint8Array.of(0, 97, 115, 109, 1, 0, 0, 0)); if (i instanceof WebAssembly.Module) return new WebAssembly.Instance(i) instanceof WebAssembly.Instance; } } catch (_unused) {} return console.log("wasm is not supported"), !1; }, isSupported() { return typeof RTCPeerConnection == "function" && this.isWebAssemblySupported(); }, objectParseFloat(i) { var e = {}; return i && Object.keys(i).forEach(function (t) { e[t] = parseFloat(i[t]); }), e; }, getRandomItem(i) { i.length === 0 ? null : i[Math.floor(Math.random() * i.length)]; }, getErrorByCode(i) { if (i === Codes.Success) return InternalError; var e = CodeErrorMap[i]; return e || console.warn("unkown code", i), e || InternalError; }, getDistance(i, e) { var t = i.x, r = i.y, n = i.z, o = e.x, a = e.y, s = e.z; return Math.sqrt(Math.pow(Math.abs(t - o), 2) + Math.pow(Math.abs(r - a), 2) + Math.pow(Math.abs(n - s), 2)); } }; function _createSuper$h(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$h(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$h() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Reporter = /*#__PURE__*/function (_EventEmitter) { _inherits(Reporter, _EventEmitter); var _super = _createSuper$h(Reporter); function Reporter() { var _this; _classCallCheck(this, Reporter); _this = _super.call(this); _this._header = {}; _this._body = {}; _this._queue = []; _this._disabled = !1; _this._interval = null; _this._reportUrl = null; _this.isDocumentLoaded = function () { return document.readyState === "complete"; }; _this._header.logModuleId = REPORT_MODULE_TYPE, _this._header.url = location.href, _this._header.enviroment = ENV, _this._header.networkType = window.navigator.connection ? window.navigator.connection.type : "unknown", _this._interval = window.setInterval(function () { _this._flushReport(); }, 10 * 1e3); return _this; } _createClass(Reporter, [{ key: "disable", value: function disable() { this._disabled = !0, this._interval && window.clearInterval(this._interval); } }, { key: "updateHeader", value: function updateHeader(e) { Object.assign(this._header, e); } }, { key: "updateBody", value: function updateBody(e) { Object.assign(this._body, e); } }, { key: "updateReportUrl", value: function updateReportUrl(e) { this._reportUrl = e; } }, { key: "report", value: function report(e, t, r) { var _this2 = this; if (this._disabled) return; r || (r = {}); var _r = r, n = _r.immediate, o = _r.sampleRate; if (o && o > Math.random()) return; this.updateBody({ logTime: util.getFormattedDate(new Date()), logTimestamp: Date.now() }); var a = function a(s) { var l = oe(le(oe({}, _this2._body), { type: e }), s); _this2._queue.push(l), e === "measurement" && _this2.emit("report", s); }; Array.isArray(t) ? t.forEach(function (s) { return a(s); }) : a(t), (n || this._queue.length >= REPORT_NUM_PER_REQUEST) && this._flushReport(); } }, { key: "_flushReport", value: function _flushReport() { if (this._disabled || !this._queue.length || !this.isDocumentLoaded()) return; var e = { header: this._header, body: this._queue.splice(0, REPORT_NUM_PER_REQUEST) }; this._post(e); } }, { key: "_post", value: function _post(e) { var t = this._reportUrl || REPORT_URL.DEV; return new Promise(function (r, n) { var o = new XMLHttpRequest(); o.open("POST", t), o.setRequestHeader("Content-Type", "application/json"); try { o.send(JSON.stringify(e)); } catch (a) { console.error(a); } o.addEventListener("readystatechange", function () { if (o.readyState == 4) return o.status == 200 ? r(o) : n("Unable to send log"); }); }); } }]); return Reporter; }(EventEmitter); var reporter$1 = new Reporter(); function _arrayLikeToArray$7(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray$7(arr); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _unsupportedIterableToArray$7(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$7(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$7(o, minLen); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$7(arr) || _nonIterableSpread(); } var Logger = /*#__PURE__*/function () { function Logger(e) { _classCallCheck(this, Logger); this.level = 3; this.module = e; } _createClass(Logger, [{ key: "setLevel", value: function setLevel(e) { this.level = e; } }, { key: "atleast", value: function atleast(e) { return e >= this.level && e >= this.level; } }, { key: "print", value: function print(e, t) { for (var _len = arguments.length, r = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { r[_key - 2] = arguments[_key]; } if (this.atleast(t)) { var _console$n; var n = e == "debug" ? "info" : e, o = this.prefix(e); (_console$n = console[n]).call.apply(_console$n, [null, o].concat(r)); } if (e !== "debug" && e !== "info") { var _n = r.map(function (o) { if (o instanceof Object) try { return JSON.stringify(o); } catch (_unused) { return o; } else return o; }).join(","); reporter$1.report("log", { message: _n, level: e, module: this.module }); } } }, { key: "debug", value: function debug() { for (var _len2 = arguments.length, e = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { e[_key2] = arguments[_key2]; } return this.print.apply(this, ["debug", 1].concat(e)); } }, { key: "info", value: function info() { for (var _len3 = arguments.length, e = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { e[_key3] = arguments[_key3]; } return this.print.apply(this, ["info", 2].concat(e)); } }, { key: "infoAndReportLog", value: function infoAndReportLog(e) { for (var _len4 = arguments.length, t = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { t[_key4 - 1] = arguments[_key4]; } var r = e.reportOptions; delete e.reportOptions, reporter$1.report("log", e, r), t.length || (t = [e.message]), this.debug.apply(this, _toConsumableArray(t)); } }, { key: "infoAndReportMeasurement", value: function infoAndReportMeasurement(e) { for (var _len5 = arguments.length, t = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { t[_key5 - 1] = arguments[_key5]; } var n; var r = e.reportOptions; if (e.startTime) { var o = Date.now(); e.value === void 0 && (e.endTime = o), e.value === void 0 && (e.value = o - e.startTime); } if (e.error ? e.code = ((n = e.error) == null ? void 0 : n.code) || Codes.Internal : e.code = Codes.Success, reporter$1.report("measurement", e, r), t.length || (t = [e]), e.level === 4 || e.error) { this.error.apply(this, _toConsumableArray(t)); return; } this.warn.apply(this, _toConsumableArray(t)); } }, { key: "warn", value: function warn() { for (var _len6 = arguments.length, e = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { e[_key6] = arguments[_key6]; } return this.print.apply(this, ["warn", 3].concat(e)); } }, { key: "error", value: function error() { for (var _len7 = arguments.length, e = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { e[_key7] = arguments[_key7]; } return this.print.apply(this, ["error", 4].concat(e)); } }, { key: "prefix", value: function prefix(e) { return "[".concat(this.module, "][").concat(e, "] ").concat(util.getFormattedDate(new Date()), ":"); } }], [{ key: "setLevel", value: function setLevel(e) { this.level = e; } }]); return Logger; }(); var logger$1 = new Logger(); var AxiosCanceler = /*#__PURE__*/function () { function AxiosCanceler() { _classCallCheck(this, AxiosCanceler); this.pendingMap = new Map(); } _createClass(AxiosCanceler, [{ key: "addPending", value: function addPending(e) { var _this = this; return new axios.CancelToken(function (t) { _this.pendingMap.has(e) || _this.pendingMap.set(e, t); }); } }, { key: "removeAllPending", value: function removeAllPending() { this.pendingMap.forEach(function (e) { e && isFunction(e) && e(); }), this.pendingMap.clear(); } }, { key: "removePending", value: function removePending(e) { if (this.pendingMap.has(e)) { var t = this.pendingMap.get(e); t && t(e), this.pendingMap.delete(e); } } }, { key: "removeCancelToken", value: function removeCancelToken(e) { this.pendingMap.has(e) && this.pendingMap.delete(e); } }, { key: "reset", value: function reset() { this.pendingMap = new Map(); } }]); return AxiosCanceler; }(); function _createSuper$g(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$g(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$g() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Http1 = /*#__PURE__*/function (_EventEmitter) { _inherits(Http1, _EventEmitter); var _super = _createSuper$g(Http1); function Http1() { var _this; _classCallCheck(this, Http1); _this = _super.call(this); _this.instatnce = axios.create(), _this.canceler = new AxiosCanceler(); return _this; } _createClass(Http1, [{ key: "requestConstant", value: function requestConstant() { return { x_nounce: this.randomString(), x_timestamp: new Date().getTime(), x_os: "web" }; } }, { key: "requestParams", value: function requestParams(e) { return oe({}, e.params); } }, { key: "get", value: function get(e) { return this.request(le(oe({}, e), { method: "GET" })); } }, { key: "post", value: function post(e) { return this.request(le(oe({}, e), { method: "POST" })); } }, { key: "request", value: function request(e) { var _this2 = this; var t = e.url, _e$timeout = e.timeout, r = _e$timeout === void 0 ? 1e4 : _e$timeout, n = e.method, o = e.key, a = e.beforeRequest, s = e.responseType, l = e.data; var _e$retry = e.retry, u = _e$retry === void 0 ? 0 : _e$retry; var c = this.patchUrl(t), h = this.canceler.addPending(t); a && isFunction(a) && a(e); var f = this.requestParams(e); var d = { url: c, method: n, timeout: r, cancelToken: h, responseType: s, params: f }; n === "POST" && (d = oe({ data: l }, d)); var _ = Date.now(), g = function g() { return _this2.instatnce.request(d).then(function (m) { return o && logger$1.infoAndReportMeasurement({ metric: "http", startTime: _, extra: t, group: "http", tag: o }), _this2.canceler.removeCancelToken(t), m; }).catch(function (m) { var v = axios.isCancel(m); return u > 0 && !v ? (u--, logger$1.warn("request ".concat(t, " retry, left retry count"), u), g()) : (logger$1.infoAndReportMeasurement({ metric: "http", startTime: _, error: m, extra: { url: t, isCanceled: v }, tag: o, group: "http" }), _this2.canceler.removeCancelToken(t), Promise.reject(m)); }); }; return g(); } }, { key: "patchUrl", value: function patchUrl(e) { return e; } }, { key: "randomString", value: function randomString() { var e = ""; var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", r = t.length; for (var n = 0; n < 8; n++) { e += t.charAt(Math.floor(Math.random() * r)); } return e; } }]); return Http1; }(EventEmitter); var http1 = new Http1(); var ModelManager = /*#__PURE__*/function () { function ModelManager(e, t) { _classCallCheck(this, ModelManager); this.avatarModelList = []; this.skinList = []; this.applicationConfig = null; this.config = null; this.appId = e, this.releaseId = t; } _createClass(ModelManager, [{ key: "findSkinConfig", value: function () { var _findSkinConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t, n; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = null; _context.next = 3; return this.getSkinsList(); case 3: t = (this.skinList = _context.sent).find(function (n) { return n.id === e; }); if (!t) { _context.next = 6; break; } return _context.abrupt("return", t); case 6: n = "skin is invalid: skinId: ".concat(e); return _context.abrupt("return", Promise.reject(new ParamError(n))); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function findSkinConfig(_x) { return _findSkinConfig.apply(this, arguments); } return findSkinConfig; }() }, { key: "findRoute", value: function () { var _findRoute = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e, t) { var n, o; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.findSkinConfig(e); case 2: n = _context2.sent.routeList.find(function (o) { return o.pathName === t; }); if (n) { _context2.next = 6; break; } o = "find path failed: skinId: ".concat(e, ", pathName: ").concat(t); return _context2.abrupt("return", Promise.reject(new ParamError(o))); case 6: return _context2.abrupt("return", (logger$1.debug("find route success", n), n)); case 7: case "end": return _context2.stop(); } } }, _callee2, this); })); function findRoute(_x2, _x3) { return _findRoute.apply(this, arguments); } return findRoute; }() }, { key: "findAssetList", value: function () { var _findAssetList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var r, n; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.findSkinConfig(e); case 2: r = _context3.sent.assetList; if (r) { _context3.next = 6; break; } n = "find path failed: skinId: ".concat(e); return _context3.abrupt("return", Promise.reject(new ParamError(n))); case 6: return _context3.abrupt("return", (logger$1.debug("find route success", r), r)); case 7: case "end": return _context3.stop(); } } }, _callee3, this); })); function findAssetList(_x4) { return _findAssetList.apply(this, arguments); } return findAssetList; }() }, { key: "findAsset", value: function () { var _findAsset = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e, t) { var r, n, o, a, _args4 = arguments; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: r = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : "id"; _context4.next = 3; return this.findSkinConfig(e); case 3: n = _context4.sent; if (!Array.isArray(t)) { _context4.next = 6; break; } return _context4.abrupt("return", t.map(function (a) { return n.models.find(function (s) { return s[r] === a; }); }).filter(Boolean)); case 6: o = n.models.find(function (a) { return a[r] === t; }); if (o) { _context4.next = 10; break; } a = "find asset failed: skinId: ".concat(e, ", keyValue: ").concat(t); return _context4.abrupt("return", Promise.reject(new ParamError(a))); case 10: return _context4.abrupt("return", (logger$1.debug("find asset success", o), o)); case 11: case "end": return _context4.stop(); } } }, _callee4, this); })); function findAsset(_x5, _x6) { return _findAsset.apply(this, arguments); } return findAsset; }() }, { key: "findPoint", value: function () { var _findPoint = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(e, t) { var n, o; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return this.findSkinConfig(e); case 2: n = _context5.sent.pointList.find(function (o) { return o.id === t; }); if (n) { _context5.next = 6; break; } o = "find point failed: skinId: ".concat(e, ", id: ").concat(t); return _context5.abrupt("return", Promise.reject(new ParamError(o))); case 6: return _context5.abrupt("return", (logger$1.debug("find point success", n), n)); case 7: case "end": return _context5.stop(); } } }, _callee5, this); })); function findPoint(_x7, _x8) { return _findPoint.apply(this, arguments); } return findPoint; }() }, { key: "requestConfig", value: function () { var _requestConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6() { var t, r, _ref, n, o; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: if (!this.config) { _context6.next = 2; break; } return _context6.abrupt("return", this.config); case 2: // let e = `https://static.xverse.cn/console/config/${this.appId}/config.json`; // this.releaseId && (e = `https://static.xverse.cn/console/config/${this.appId}/${this.releaseId}/config.json`); // const t = Xverse.USE_TME_CDN ? "https://static.xverse.cn/tmeland/config/tme_config.json" : e; t = './assets/config.json'; _context6.prev = 3; _context6.next = 6; return http1.get({ url: "".concat(t, "?t=").concat(Date.now()), key: "config", timeout: 6e3, retry: 2 }); case 6: r = _context6.sent; _ref = r.data.data || {}, n = _ref.config, o = _ref.preload; if (n) { _context6.next = 10; break; } throw new Error("config data parse error" + r.data); case 10: return _context6.abrupt("return", (this.config = { config: n, preload: o }, logger$1.debug("get config success", this.config), this.config)); case 13: _context6.prev = 13; _context6.t0 = _context6["catch"](3); return _context6.abrupt("return", Promise.reject(_context6.t0)); case 16: case "end": return _context6.stop(); } } }, _callee6, this, [[3, 13]]); })); function requestConfig() { return _requestConfig.apply(this, arguments); } return requestConfig; }() }, { key: "getApplicationConfig", value: function () { var _getApplicationConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7() { var e; return regenerator.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: if (!this.applicationConfig) { _context7.next = 2; break; } return _context7.abrupt("return", this.applicationConfig); case 2: _context7.prev = 2; _context7.next = 5; return this.requestConfig(); case 5: e = _context7.sent; return _context7.abrupt("return", (this.applicationConfig = e.config, this.applicationConfig)); case 9: _context7.prev = 9; _context7.t0 = _context7["catch"](2); return _context7.abrupt("return", Promise.reject(_context7.t0)); case 12: case "end": return _context7.stop(); } } }, _callee7, this, [[2, 9]]); })); function getApplicationConfig() { return _getApplicationConfig.apply(this, arguments); } return getApplicationConfig; }() }, { key: "getAvatarModelList", value: function () { var _getAvatarModelList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee8() { var _yield$this$getApplic, e; return regenerator.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: if (!this.avatarModelList.length) { _context8.next = 2; break; } return _context8.abrupt("return", this.avatarModelList); case 2: _context8.prev = 2; _context8.next = 5; return this.getApplicationConfig(); case 5: _yield$this$getApplic = _context8.sent; e = _yield$this$getApplic.avatars; return _context8.abrupt("return", (this.avatarModelList = e.map(function (t) { return { name: t.name, id: t.id, modelUrl: t.url, gender: t.gender, components: t.components }; }), this.avatarModelList)); case 10: _context8.prev = 10; _context8.t0 = _context8["catch"](2); return _context8.abrupt("return", (logger$1.error(_context8.t0), [])); case 13: case "end": return _context8.stop(); } } }, _callee8, this, [[2, 10]]); })); function getAvatarModelList() { return _getAvatarModelList.apply(this, arguments); } return getAvatarModelList; }() }, { key: "getSkinsList", value: function () { var _getSkinsList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee9() { var _yield$this$getApplic2, e; return regenerator.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: if (!this.skinList.length) { _context9.next = 2; break; } return _context9.abrupt("return", this.skinList); case 2: _context9.prev = 2; _context9.next = 5; return this.getApplicationConfig(); case 5: _yield$this$getApplic2 = _context9.sent; e = _yield$this$getApplic2.skins; return _context9.abrupt("return", (this.skinList = e.map(function (t) { var r; return { name: t.name, dataVersion: t.id + t.versionId, id: t.id, fov: parseInt(t.fov || 90), models: t.assetList.map(function (n) { var o = n.assetId, a = n.url, s = n.thumbnailUrl, l = n.typeName, u = n.className; return { id: o, modelUrl: a, name: n.name, thumbnailUrl: s, typeName: l, className: u === "\u4F4E\u6A21" ? "\u7C97\u6A21" : u }; }), routeList: (r = t.routeList) == null ? void 0 : r.map(function (n) { var o = n.areaName, a = n.attitude, s = n.id, l = n.pathName, u = n.step, c = n.birthPointList; return { areaName: o, attitude: a, id: s, pathName: l, step: u, birthPointList: c.map(function (h) { return { camera: h.camera && { position: util.objectParseFloat(h.camera.position), angle: util.objectParseFloat(h.camera.rotation) }, player: h.player && { position: util.objectParseFloat(h.player.position), angle: util.objectParseFloat(h.player.rotation) } }; }) }; }), pointList: t.pointList.map(function (n) { return le(oe({}, n), { position: util.objectParseFloat(n.position), rotation: util.objectParseFloat(n.rotation) }); }), versionId: t.versionId, isEnable: t.isEnable, assetList: t.assetList, visibleRules: t.visibleRules, animationList: t.animationList }; }), this.skinList)); case 10: _context9.prev = 10; _context9.t0 = _context9["catch"](2); return _context9.abrupt("return", (logger$1.error(_context9.t0), [])); case 13: case "end": return _context9.stop(); } } }, _callee9, this, [[2, 10]]); })); function getSkinsList() { return _getSkinsList.apply(this, arguments); } return getSkinsList; }() }, { key: "getBreathPointTextrueList", value: function () { var _getBreathPointTextrueList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee10() { return regenerator.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: return _context10.abrupt("return", [{ url: TEXTURE_URL }]); case 1: case "end": return _context10.stop(); } } }, _callee10); })); function getBreathPointTextrueList() { return _getBreathPointTextrueList.apply(this, arguments); } return getBreathPointTextrueList; }() }], [{ key: "getInstance", value: function getInstance(e, t) { //getInstance(e, t) { return this.instance || (this.instance = new ModelManager(e, t)), this.instance; } }, { key: "findModels", value: function findModels(e, t, r) { //findModels(e, t, r) { return e.filter(function (o) { return o.typeName === t && o.className === r; }); } }, { key: "findModel", value: function findModel(e, t, r) { //findModel(e, t, r) { var n = e.filter(function (o) { return o.typeName === t && o.className === r; })[0]; return n || null; } }]); return ModelManager; }(); // export { modelManager }; var JoyStick = /*#__PURE__*/function () { function JoyStick(e) { _classCallCheck(this, JoyStick); this._zone = document.createElement("div"); this._joystick = null; this._room = e; } _createClass(JoyStick, [{ key: "init", value: function init(e) { var _this = this; var _e$interval = e.interval, t = _e$interval === void 0 ? 33 : _e$interval, _e$triggerDistance = e.triggerDistance, r = _e$triggerDistance === void 0 ? 25 : _e$triggerDistance, _e$style = e.style, n = _e$style === void 0 ? { left: 0, bottom: 0 } : _e$style, o = function o(u, c) { _this._room.actionsHandler.joystick({ degree: Math.floor(u), level: Math.floor(c / 5) }); }, a = this._zone; document.body.appendChild(a), a.style.position = "absolute", a.style.width = "200px", a.style.height = "200px", a.style.left = String(n.left), a.style.bottom = String(n.bottom), a.style.zIndex = "999", a.style.userSelect = "none", a.style.webkitUserSelect = "none", this._joystick = nipplejs.create({ zone: a, mode: "static", position: { left: "50%", top: "50%" }, color: "white" }); var s, l; return this._joystick.on("move", function (u, c) { s = c; }), this._joystick.on("start", function () { l = window.setInterval(function () { s && s.distance > r && o && o(s.angle.degree, s.distance); }, t); }), this._joystick.on("end", function () { l && window.clearInterval(l), l = void 0; }), this._joystick; } }, { key: "show", value: function show() { if (!this._joystick) throw new Error("joystick is not created"); this._zone.style.display = "block"; } }, { key: "hide", value: function hide() { if (!this._joystick) throw new Error("joystick is not created"); this._zone.style.display = "none"; } }]); return JoyStick; }(); var CoreBroadcastType$1 = { PlayAnimation: 'PlayAnimation' }; var AvatarGroup = { Npc: 'npc', User: 'user' }; var MessageHandleType$1 = { MHT_Undefined: 0, MHT_RoomMulticast: 1, MHT_FollowListMulticast: 2, MHT_CustomTargetSync: 3 }; var Broadcast$1 = /*#__PURE__*/function () { function Broadcast(e, t) { _classCallCheck(this, Broadcast); this.room = e; this.handlers = []; this.init(t); } _createClass(Broadcast, [{ key: "init", value: function init(t) { this.handlers.push(t); } }, { key: "handleBroadcast", value: function () { var _handleBroadcast = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 1; JSON.parse(e.broadcastAction.data); _context.next = 9; break; case 5: _context.prev = 5; _context.t0 = _context["catch"](1); logger$1.error(_context.t0); return _context.abrupt("return"); case 9: case "end": return _context.stop(); } } }, _callee, null, [[1, 5]]); })); function handleBroadcast(_x) { return _handleBroadcast.apply(this, arguments); } return handleBroadcast; }() }, { key: "broadcast", value: function broadcast(e) { var t = e.data, _e$msgType = e.msgType, r = _e$msgType === void 0 ? MessageHandleType$1.MHT_FollowListMulticast : _e$msgType, n = e.targetUserIds; return this.room.actionsHandler.broadcast({ data: t, msgType: r, targetUserIds: n }); } }]); return Broadcast; }(); var XAvatarLoader = /*#__PURE__*/function () { function XAvatarLoader() { _classCallCheck(this, XAvatarLoader); E(this, "containers", new Map()); E(this, "meshes", new Map()); E(this, "animations", new Map()); E(this, "aniPath", new Map()); E(this, "binPath", new Map()); E(this, "texPath", new Map()); E(this, "matPath", new Map()); E(this, "mshPath", new Map()); E(this, "rootPath", new Map()); E(this, "meshTexList", new Map()); E(this, "_enableIdb", !0); E(this, "_mappings", new Map()); E(this, "_sharedTex", new Map()); E(this, "avaliableAnimation", new Map()); E(this, "enableShareTexture", !0); E(this, "enableShareAnimation", !0); E(this, "fillEmptyLod", !0); var e = new BABYLON.GLTFFileLoader(); BABYLON.SceneLoader.RegisterPlugin(e), e.preprocessUrlAsync = function (t) { var r = avatarLoader._mappings.get(t); return r ? Promise.resolve(r) : Promise.resolve(t); }; } _createClass(XAvatarLoader, [{ key: "getParsedUrl", value: function getParsedUrl(e, t, r) { var _this = this; return new Promise(function (o, a) { if (!r || r.indexOf(".zip") === -1) return o(r); var s = _this.rootPath.get(r); if (s) return o(s); { var l = ".zip", u = r.replace(l, "") + COMPONENT_LIST_PREFIX; e.urlTransformer(u, !0).then(function (c) { if (!c) return a("Loading Failed"); new Response(c).json().then(function (h) { var _, g, m, v, y, b, T; var f = r.replace(l, ""), d = f + ((_ = h == null ? void 0 : h.components) == null ? void 0 : _.url.replace("./", "")); if (_this.rootPath.set(r, d), h.components ? (h.components.url && _this.mshPath.set(t, f + "/" + ((g = h == null ? void 0 : h.components) == null ? void 0 : g.url.replace("./", ""))), h.components.url_lod2 && _this.mshPath.set(t + "_" + avatarSetting.lod[1].level, f + "/" + ((m = h == null ? void 0 : h.components) == null ? void 0 : m.url_lod2.replace("./", ""))), h.components.url_lod4 && _this.mshPath.set(t + "_" + avatarSetting.lod[2].level, f + "/" + ((v = h == null ? void 0 : h.components) == null ? void 0 : v.url_lod4.replace("./", "")))) : (h.meshes.url && _this.mshPath.set(t, f + "/" + ((y = h == null ? void 0 : h.meshes) == null ? void 0 : y.url.replace("./", ""))), h.meshes.url_lod2 && _this.mshPath.set(t + "_" + avatarSetting.lod[1].level, f + "/" + ((b = h == null ? void 0 : h.meshes) == null ? void 0 : b.url_lod2.replace("./", ""))), h.meshes.url_lod4 && _this.mshPath.set(t + "_" + avatarSetting.lod[2].level, f + "/" + ((T = h == null ? void 0 : h.meshes) == null ? void 0 : T.url_lod4.replace("./", "")))), h.materials && h.materials.forEach(function (C) { var A = f + "/" + C.url; _this.matPath.set(C.name, A); }), h.bin) { var C = f + "/" + h.bin.url; _this.binPath.set(t, C); var A = f + "/" + h.bin.url_lod2; _this.binPath.set(t + "_" + avatarSetting.lod[1].level, A); var S = f + "/" + h.bin.url_lod4; _this.binPath.set(t + "_" + avatarSetting.lod[2].level, S); } return h.textures && h.textures.forEach(function (C) { var A = f + "/" + C.url; _this.texPath.set(C.url, A); var S = _this.meshTexList.get(h.components.url); C.type === "png" && (S ? S.find(function (P) { return P === C.name; }) || S.push(C.url) : _this.meshTexList.set(t, [C.name])); }), o(d); }).catch(function (h) { logger$1.error("[Engine] parse json file error,".concat(h)); }); }).catch(function (c) { logger$1.error("[Engine] ulrtransform error, cannot find resource in db,".concat(c)); }); } }); } }, { key: "parse", value: function () { var _parse = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e, t) { var _this2 = this; var r; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: r = []; t.forEach(function (n) { _this2._setAnimationList(n.id, n.animations), r.push(_this2.getParsedUrl(e, n.id, n.url)), n.components.forEach(function (o) { o.units.forEach(function (a) { r.push(_this2.getParsedUrl(e, a.name, a.url)); }); }); }); _context.next = 4; return Promise.all(r); case 4: case "end": return _context.stop(); } } }, _callee); })); function parse(_x, _x2) { return _parse.apply(this, arguments); } return parse; }() }, { key: "_setAnimationList", value: function _setAnimationList(e, t) { var _this3 = this; t ? t.forEach(function (r) { _this3.aniPath.set(e + "_" + r.name, r.url); }) : logger$1.error("[Engine] no animation list exist, please check config for details"); } }, { key: "disposeContainer", value: function disposeContainer() { var _this4 = this; this.containers.forEach(function (e, t) { e.xReferenceCount < 1 && (_this4.enableShareTexture && e.textures.length > 0 && e.textures[0].xReferenceCount != null && (e.textures[0].xReferenceCount--, e.textures = []), e.dispose(), _this4.containers.delete(t)); }), this._sharedTex.forEach(function (e, t) { e.xReferenceCount == 0 && (e.dispose(), _this4._sharedTex.delete(t)); }); } }, { key: "enableIdb", set: function set(e) { this._enableIdb = e; } }, { key: "getGlbPath", value: function getGlbPath(e) { return this.aniPath.get(e + ".glb"); } }, { key: "getGltfPath", value: function getGltfPath(e) { return this.mshPath.get(e + ".gltf"); } }, { key: "getPngUrl", value: function getPngUrl(e) { return this.texPath.get(e + ".png"); } }, { key: "getMeshUrl", value: function getMeshUrl(e) { return this.mshPath.get(e); } }, { key: "_getSourceKey", value: function _getSourceKey(e, t) { return t && avatarSetting.lod[t] ? e + avatarSetting.lod[t].fileName.split(".")[0] : e; } }, { key: "_getAnimPath", value: function _getAnimPath(e, t) { var r = this.aniPath.get(t + "_animations_" + t.split("_")[1]); return r || (r = this.aniPath.get(t + "_" + e)), r; } }, { key: "load", value: function load(e, t, r, n) { var _this5 = this; return new Promise(function (o, a) { _this5.loadGlb(e, t, r).then(function (s) { return s ? o(s) : a("[Engine] container load failed"); }).catch(function () { return a("[Engine] container load failed"); }); }); } }, { key: "_searchAnimation", value: function _searchAnimation(e, t) { var r; return this.containers.forEach(function (n, o) { var a = t.split("_")[0]; o.indexOf(a) != -1 && o.indexOf(e) != -1 && (r = n); }), r; } }, { key: "loadAnimRes", value: function loadAnimRes(e, t, r) { var _this6 = this; return new Promise(function (n, o) { var a = _this6._getAnimPath(t, r), s = getAnimationKey(t, r); if (a && _this6.containers.get(a)) return n(_this6.containers.get(a)); if (a) _this6._loadGlbFromBlob(e, s, a).then(function (l) { return l.animationGroups.length == 0 ? (_this6.containers.delete(s), l.dispose(), Promise.reject("container does not contains animation data")) : n(l); });else return o("no such url"); }); } }, { key: "loadGlb", value: function loadGlb(e, t, r) { var n = this.getMeshUrl(this._getSourceKey(t, r)); return !n && this.fillEmptyLod && (r = 0, n = this.getMeshUrl(this._getSourceKey(t, r))), n && this.containers.get(n) ? Promise.resolve(this.containers.get(n)) : n ? this._enableIdb ? Promise.resolve(this._loadGlbFromBlob(e, this._getSourceKey(t, r), n)) : Promise.resolve(this._loadGlbFromUrl(e, this._getSourceKey(t, r), n)) : Promise.reject("no such url"); } }, { key: "loadGltf", value: function loadGltf(e, t, r, n) { var o = this._getSourceKey(t, r || 0); var a = this.getGltfPath(o); return !a && this.fillEmptyLod && (a = this.getGltfPath(t)), a && this.containers.get(a) ? Promise.resolve(this.containers.get(a)) : this._enableIdb ? this._loadGltfFromBlob(e, t, r, n) : a ? this._loadGltfFromUrl(e, t, a.replace(t + ".gltf", "")) : Promise.reject(); } }, { key: "loadSubsequence", value: function loadSubsequence() {} }, { key: "loadVAT", value: function loadVAT() {} }, { key: "getResourceName", value: function getResourceName(e) { return this.meshTexList.get(e); } }, { key: "_loadGltfFromUrl", value: function _loadGltfFromUrl(e, t, r) { return BABYLON.SceneLoader.LoadAssetContainerAsync(r, t + ".gltf", e.Scene, null, ".gltf"); } }, { key: "_loadGlbFromBlob", value: function _loadGlbFromBlob(e, t, r) { var _this7 = this; return new Promise(function (n, o) { e.urlTransformer(r).then(function (a) { BABYLON.SceneLoader.LoadAssetContainerAsync("", a, e.Scene, null, ".glb").then(function (s) { if (s) { if (_this7.enableShareTexture && s.textures.length > 0) { var l = t.indexOf("_lod") != -1 ? t.slice(0, -5) : t, u = _this7._sharedTex.get(l); u ? (s.meshes[1].material._albedoTexture = u, s.textures.forEach(function (c) { c.dispose(); }), s.textures = [u], u.xReferenceCount++) : (_this7._sharedTex.set(l, s.textures[0]), s.textures[0].xReferenceCount = 1); } return s.addAllToScene(), s.xReferenceCount = 0, s.meshes.forEach(function (l) { l.setEnabled(!1); }), _this7.containers.set(r, s), n(s); } else o("glb file load failed"); }); }); }); } }, { key: "_loadGlbFromUrl", value: function _loadGlbFromUrl(e, t, r) { var _this8 = this; return new Promise(function (n, o) { BABYLON.SceneLoader.LoadAssetContainerAsync("", r, e.Scene, null, ".glb").then(function (a) { if (a) { if (a.addAllToScene(), a.meshes.forEach(function (s) { s.setEnabled(!1); }), _this8.enableShareTexture && a.textures.length > 0) { var s = t.indexOf("_lod") != -1 ? t.slice(0, -5) : t, l = _this8._sharedTex.get(s); l ? (a.meshes[1].material._albedoTexture = l, a.textures.forEach(function (u) { u.dispose(); }), a.textures = [l], l.xReferenceCount++) : (_this8._sharedTex.set(s, a.textures[0]), a.textures[0].xReferenceCount = 1); } return a.xReferenceCount = 0, _this8.containers.set(r, a), n(a); } else o("glb file load failed"); }); }); } }, { key: "_loadGltfFromBlob", value: function _loadGltfFromBlob(e, t, r, n) { var _this9 = this; return new Promise(function (o, a) { var s = []; var l = _this9._getSourceKey(t, r), u = _this9.getGltfPath(l); if (!u && _this9.fillEmptyLod && (r = 0, l = _this9._getSourceKey(t, r), u = _this9.getGltfPath(l)), !u) return a("[Engine] gltf path incorrect ".concat(l, ",cancel.")); var c = _this9.mshPath.get(l + ".gltf"); if (!c) return a("cannot find asset mshPath"); var h = _this9.binPath.get(l + ".bin"); if (!h) return a("cannot find asset binPath"); if (!n) { var _ = _this9.meshTexList.get(t); if (!_ || _.length == 0) return a("cannot find texture"); n = _[0]; } var f = _this9.texPath.get(n + ".png"); if (!f) return a(); var d = _this9.texPath.get(n + "-astc.ktx"); if (!d) return a(); s.push(_this9._blobMapping(e, c)), s.push(_this9._blobMapping(e, h)), s.push(_this9._blobMapping(e, f)), s.push(_this9._blobMapping(e, d)), Promise.all(s).then(function () { var _ = u.replace(l + ".gltf", ""); BABYLON.SceneLoader.LoadAssetContainerAsync(_, l + ".gltf", e.Scene, null, ".gltf").then(function (g) { var v; _this9.containers.set(u, g), g.addAllToScene(), g.meshes.forEach(function (y) { y.setEnabled(!1); }); var m = _this9._sharedTex.get(t); m ? ((v = g.meshes[1].material._albedoTexture) == null || v.dispose(), g.meshes[1].material._albedoTexture = m) : _this9._sharedTex.set(t, g.meshes[1].material._albedoTexture), o(g); }); }); }); } }, { key: "_blobMapping", value: function _blobMapping(e, t) { var _this10 = this; return new Promise(function (r, n) { e.urlTransformer(t).then(function (o) { return o ? (_this10._mappings.set(t, o), r(t)) : n("[Engine] url urlTransformer parse error ".concat(t)); }); }); } }]); return XAvatarLoader; }(); var avatarLoader = new XAvatarLoader(); var SyncEventType = { Reset: 0, Appear: 1, Disappear: 2, Move: 3, ChangeRenderInfo: 4, KeepAlive: 5, Rotate: 6, ET_RemoveVisitor: 7 }; var GetStateTypes = { Default: 0, Event: 1 }; var EAvatarRelationRank = { Self: 0, Npc: 1, Friend: 2, Stranger: 3, Robot: 4, Unknown: 5 }; var Person = { Third: 0, First: 1 }; var MotionType = { Walk: 'walk', Run: 'run', Fly: 'fly' }; var Queue = /*#__PURE__*/function () { function Queue() { _classCallCheck(this, Queue); E(this, "queue", []); E(this, "currentAction"); } _createClass(Queue, [{ key: "append", value: function () { var _append = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t, r; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(this.queue.length === 0 || ((t = this.currentAction) == null ? void 0 : t.type) === e.type && this.queue.length === 1)) { _context.next = 7; break; } this.queue = []; this.queue.push(e); _context.next = 5; return this.go(); case 5: _context.next = 8; break; case 7: ((r = this.queue[this.queue.length - 1]) == null ? void 0 : r.type) === e.type && this.queue.pop(), this.queue.push(e); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function append(_x) { return _append.apply(this, arguments); } return append; }() }, { key: "go", value: function () { var _go = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { var e; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!(this.queue.length !== 0)) { _context2.next = 9; break; } e = this.queue[0]; this.currentAction = e; _context2.next = 5; return e.action(); case 5: this.currentAction = void 0; this.queue.splice(0, 1); _context2.next = 9; return this.go(); case 9: case "end": return _context2.stop(); } } }, _callee2, this); })); function go() { return _go.apply(this, arguments); } return go; }() }, { key: "reject", value: function () { var _reject = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3() { return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: this.queue = []; case 1: case "end": return _context3.stop(); } } }, _callee3, this); })); function reject() { return _reject.apply(this, arguments); } return reject; }() }]); return Queue; }(); function _createForOfIteratorHelper$6(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$6(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$6(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$6(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$6(o, minLen); } function _arrayLikeToArray$6(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _createSuper$f(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$f(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$f() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var XverseAvatar = /*#__PURE__*/function (_EventEmitter) { _inherits(XverseAvatar, _EventEmitter); var _super = _createSuper$f(XverseAvatar); function XverseAvatar(_ref) { var _this; var e = _ref.userId, t = _ref.isHost, r = _ref.room, n = _ref.avatarId, o = _ref.isSelf, _ref$group = _ref.group, a = _ref$group === void 0 ? AvatarGroup.Npc : _ref$group; _classCallCheck(this, XverseAvatar); _this = _super.call(this); E(_assertThisInitialized(_this), "xAvatar"); E(_assertThisInitialized(_this), "_isHost", !1); E(_assertThisInitialized(_this), "_room"); E(_assertThisInitialized(_this), "_withModel", !1); E(_assertThisInitialized(_this), "_userId"); E(_assertThisInitialized(_this), "group", AvatarGroup.User); E(_assertThisInitialized(_this), "state", "idle"); E(_assertThisInitialized(_this), "isLoading", !0); E(_assertThisInitialized(_this), "_isMoving", !1); E(_assertThisInitialized(_this), "_isRotating", !1); E(_assertThisInitialized(_this), "_failed", !1); E(_assertThisInitialized(_this), "disconnected", !1); E(_assertThisInitialized(_this), "_avatarId"); E(_assertThisInitialized(_this), "prioritySync", !1); E(_assertThisInitialized(_this), "priority", EAvatarRelationRank.Stranger); E(_assertThisInitialized(_this), "_avatarModel"); E(_assertThisInitialized(_this), "_motionType", MotionType.Walk); E(_assertThisInitialized(_this), "isSelf", !1); E(_assertThisInitialized(_this), "_lastAnimTraceId", ""); E(_assertThisInitialized(_this), "statusSyncQueue", new Queue()); E(_assertThisInitialized(_this), "extraInfo", {}); E(_assertThisInitialized(_this), "setPosition", function (e) { var t; !_this._room.signal.isUpdatedYUV || (t = _this.xAvatar) == null || t.setPosition(positionPrecisionProtect(e)); }); E(_assertThisInitialized(_this), "setRotation", function (e) { var t; !_this._room.signal.isUpdatedYUV || (t = _this.xAvatar) == null || t.setRotation(rotationPrecisionProtect(e)); }); E(_assertThisInitialized(_this), "stopAnimation", function () { var e, t; (t = (e = _this.xAvatar) == null ? void 0 : e.controller) == null || t.stopAnimation(); }); E(_assertThisInitialized(_this), "_playAnimation", /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t, r, o, n, _a, _args = arguments; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = _args.length > 1 && _args[1] !== undefined ? _args[1] : !0; r = _args.length > 2 && _args[2] !== undefined ? _args[2] : !1; if (_this._room.signal.isUpdatedYUV) { _context.next = 4; break; } return _context.abrupt("return"); case 4: if (!(_this.state !== "idle" && !r)) { _context.next = 6; break; } return _context.abrupt("return", (logger$1.debug("_playAnimation", "state is not idle"), Promise.resolve("_playAnimation, state is not idle"))); case 6: n = Date.now(); _context.prev = 7; if ((o = _this.xAvatar) != null && o.controller) { _context.next = 10; break; } return _context.abrupt("return", Promise.reject(new InternalError("[avatar: ".concat(_this.userId, "] Play animation failed: ").concat(e, ", no controller")))); case 10: _this.isSelf && setTimeout(function () { logger$1.infoAndReportMeasurement({ tag: e, startTime: n, value: 0, metric: "playAnimationStart" }); }); _a = util.uuid(); _this._lastAnimTraceId = _a; _context.next = 15; return _this.xAvatar.controller.playAnimation(e, t); case 15: _a === _this._lastAnimTraceId && !_this.isMoving && !t && e !== "Idle" && _this.xAvatar.controller.playAnimation("Idle", t).catch(function (s) { logger$1.error("[avatar: ".concat(_this.userId, "] Play animation failed [force idle]"), s); }); _this.isSelf && logger$1.infoAndReportMeasurement({ tag: e, startTime: n, extra: { loop: t }, metric: "playAnimationEnd" }); _context.next = 22; break; case 19: _context.prev = 19; _context.t0 = _context["catch"](7); return _context.abrupt("return", (logger$1.error("[avatar: ".concat(_this.userId, "] Play animation failed: ").concat(e), _context.t0), _this.isSelf && logger$1.infoAndReportMeasurement({ tag: e, startTime: n, metric: "playAnimationEnd", error: _context.t0, extra: { loop: t } }), Promise.reject(_context.t0))); case 22: case "end": return _context.stop(); } } }, _callee, null, [[7, 19]]); })); return function (_x) { return _ref2.apply(this, arguments); }; }()); E(_assertThisInitialized(_this), "changeComponents", /*#__PURE__*/function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e) { var _ref4, t, _ref4$endAnimation, r, n, o; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _ref4 = e || {}, t = _ref4.mode, _ref4$endAnimation = _ref4.endAnimation, r = _ref4$endAnimation === void 0 ? "" : _ref4$endAnimation, n = JSON.parse(JSON.stringify(e.avatarComponents)); o = avatarComponentsValidate(n, _this._avatarModel); return _context2.abrupt("return", (!ChangeComponentsMode[t] && !o && (o = new ParamError("changeComponents failed, mode: ".concat(t, " is invalid"))), o ? (logger$1.error(o), Promise.reject(o)) : _this._changeComponents({ avatarComponents: n, mode: t, endAnimation: r }).then(function () { _this.isSelf && t !== ChangeComponentsMode.Preview && _this.avatarComponentsSync(_this.avatarComponents); }))); case 3: case "end": return _context2.stop(); } } }, _callee2); })); return function (_x2) { return _ref3.apply(this, arguments); }; }()); E(_assertThisInitialized(_this), "_changeComponents", /*#__PURE__*/function () { var _ref5 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var o, _ref6, _ref6$avatarComponent, t, r, n, _a2, s, l, _iterator, _step, u, c, h, f, d; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _ref6 = e || {}, _ref6$avatarComponent = _ref6.avatarComponents, t = _ref6$avatarComponent === void 0 ? [] : _ref6$avatarComponent, r = _ref6.mode, n = Date.now(); _context3.prev = 1; if (_this.xAvatar) { _context3.next = 4; break; } return _context3.abrupt("return", Promise.reject(new InternalError("changeComponents failed, without instance: xAvatar"))); case 4: _context3.next = 6; return avatarComponentsModify(_this._avatarModel, t); case 6: _a2 = _context3.sent; s = []; _context3.next = 10; return avatarComponentsParser(_this._avatarModel, _a2, _this.avatarComponents); case 10: l = _context3.sent; if (!(l.length === 0)) { _context3.next = 13; break; } return _context3.abrupt("return", _this.avatarComponents); case 13: _context3.next = 15; return _this.beforeChangeComponentsHook(e); case 15: _iterator = _createForOfIteratorHelper$6(l); try { for (_iterator.s(); !(_step = _iterator.n()).done;) { u = _step.value; c = u.id, h = u.type, f = u.url, d = u.suitComb; s.push((o = _this.xAvatar) == null ? void 0 : o.addComponent(c, h, f, d)); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } _context3.next = 19; return Promise.all(s); case 19: _this.emit("componentsChanged", { components: _this.avatarComponents, mode: r }); _this.isSelf && logger$1.infoAndReportMeasurement({ tag: "changeComponents", startTime: n, metric: "changeComponents", extra: { inputComponents: t, finalComponents: _this.avatarComponents, mode: ChangeComponentsMode[r] } }); return _context3.abrupt("return", _this.avatarComponents); case 24: _context3.prev = 24; _context3.t0 = _context3["catch"](1); return _context3.abrupt("return", (_this.isSelf && logger$1.infoAndReportMeasurement({ tag: "changeComponents", startTime: n, metric: "changeComponents", error: _context3.t0, extra: { inputComponents: t, finalComponents: _this.avatarComponents, mode: ChangeComponentsMode[r] } }), Promise.reject(_context3.t0))); case 27: case "end": return _context3.stop(); } } }, _callee3, null, [[1, 24]]); })); return function (_x3) { return _ref5.apply(this, arguments); }; }()); E(_assertThisInitialized(_this), "avatarComponentsSync", function (e) { e = e.map(function (t) { return { type: t.type, id: t.id }; }), _this._room.actionsHandler.avatarComponentsSync(e); }); E(_assertThisInitialized(_this), "hide", function () { var e; if ((e = _this.xAvatar) != null && e.hide()) return Promise.resolve("avatar: ".concat(_this.userId, " hide success")); { var _t = "avatar: ".concat(_this.userId, " hide failed ").concat(!_this.xAvatar && "without instance: xAvatar"); return logger$1.warn(_t), Promise.reject(_t); } }); E(_assertThisInitialized(_this), "show", function () { var e; if ((e = _this.xAvatar) != null && e.show()) return Promise.resolve("avatar: ".concat(_this.userId, " show success")); { var _t2 = "avatar: ".concat(_this.userId, " show failed ").concat(!_this.xAvatar && "without instance: xAvatar"); return logger$1.warn(_t2), Promise.reject(_t2); } }); E(_assertThisInitialized(_this), "sayTimer"); _this._userId = e, _this._room = r, _this.isSelf = o || !1, _this._withModel = !!n, _this._isHost = t || !1, _this._avatarId = n, _this.group = a, _this._room.modelManager.getAvatarModelList().then(function (s) { var l = s.find(function (u) { return u.id === n; }); l && (_this._avatarModel = l); }); return _this; } _createClass(XverseAvatar, [{ key: "avatarId", get: function get() { return this._avatarId; } }, { key: "isRender", get: function get() { var e; return !!((e = this.xAvatar) != null && e.isRender); } }, { key: "isHidden", get: function get() { var e; return !!((e = this.xAvatar) != null && e.isHide); } }, { key: "motionType", get: function get() { return this._motionType; }, set: function set(e) { this._motionType = e; } }, { key: "nickname", get: function get() { var e; return (e = this.xAvatar) == null ? void 0 : e.nickName; } }, { key: "words", get: function get() { var e; return (e = this.xAvatar) == null ? void 0 : e.words; } }, { key: "isHost", get: function get() { return this._isHost; } }, { key: "failed", get: function get() { return this._failed; } }, { key: "scale", get: function get() { var e; return (e = this.xAvatar) == null ? void 0 : e.scale; } }, { key: "animations", get: function get() { var e; return !this.xAvatar || !this.xAvatar.controller ? [] : ((e = this.xAvatar) == null ? void 0 : e.getAvaliableAnimations()) || []; } }, { key: "position", get: function get() { var e; return (e = this.xAvatar) == null ? void 0 : e.position; } }, { key: "rotation", get: function get() { var e; return (e = this.xAvatar) == null ? void 0 : e.rotation; } }, { key: "pose", get: function get() { return { position: this.position, angle: this.rotation }; } }, { key: "id", get: function get() { return this.userId; } }, { key: "isMoving", get: function get() { return this._isMoving; }, set: function set(e) { this._isMoving = e, this.state = e ? "moving" : "idle"; } }, { key: "isRotating", get: function get() { return this._isRotating; }, set: function set(e) { this._isRotating = e, this.state = e ? "rotating" : "idle"; } }, { key: "withModel", get: function get() { return this._withModel; } }, { key: "avatarComponents", get: function get() { var e; return JSON.parse(JSON.stringify(((e = this.xAvatar) == null ? void 0 : e.clothesList) || [])); } }, { key: "userId", get: function get() { return this._userId; } }, { key: "removeWhenDisconnected", get: function get() { return this.extraInfo && this.extraInfo.removeWhenDisconnected !== void 0 ? this.extraInfo.removeWhenDisconnected : !0; } }, { key: "setConnectionStatus", value: function setConnectionStatus(e) { this.disconnected !== e && (this.disconnected = e, e ? this.emit("disconnected") : this.emit("reconnected"), logger$1.warn("avatar ".concat(this.userId, " status changed, disconnected:"), e)); } }, { key: "setScale", value: function setScale(e) { var t; (t = this.xAvatar) == null || t.setScale(e > 0 ? e : 1); } }, { key: "playAnimation", value: function () { var _playAnimation = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) { var _this2 = this; var _ref7, t, r, n, o; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _ref7 = e || {}, t = _ref7.animationName, r = _ref7.loop, n = _ref7.extra; if (!this.isSelf) { _context4.next = 13; break; } if (!this.isMoving) { _context4.next = 11; break; } _context4.prev = 3; _context4.next = 6; return this.stopMoving(); case 6: _context4.next = 11; break; case 8: _context4.prev = 8; _context4.t0 = _context4["catch"](3); return _context4.abrupt("return", (logger$1.error("stopMoving error before playAnimation ".concat(t), _context4.t0), Promise.reject("stopMoving error before playAnimation ".concat(t)))); case 11: o = { info: { userId: this.userId, animation: t, loop: r, extra: encodeURIComponent(n || "") }, broadcastType: CoreBroadcastType.PlayAnimation }; this._room.avatarManager.broadcast.broadcast({ data: o }); case 13: return _context4.abrupt("return", (this.emit("animationStart", { animationName: t, extra: safeDecodeURIComponent(n || "") }), this._playAnimation(t, r).then(function () { _this2.emit("animationEnd", { animationName: t, extra: safeDecodeURIComponent(n || "") }); }))); case 14: case "end": return _context4.stop(); } } }, _callee4, this, [[3, 8]]); })); function playAnimation(_x4) { return _playAnimation.apply(this, arguments); } return playAnimation; }() }, { key: "beforeChangeComponentsHook", value: function () { var _beforeChangeComponentsHook = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(e) { return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: case "end": return _context5.stop(); } } }, _callee5); })); function beforeChangeComponentsHook(_x5) { return _beforeChangeComponentsHook.apply(this, arguments); } return beforeChangeComponentsHook; }() }, { key: "turnTo", value: function turnTo(e) { var _this3 = this; if (this._room.viewMode === "observer") { this._room.sceneManager.cameraComponent.MainCamera.setTarget(ue4Position2Xverse(e.point)); return; } return this._room.actionsHandler.turnTo(e).then(function () { _this3.emit("viewChanged", { extra: (e == null ? void 0 : e.extra) || "" }); }); } }, { key: "moveTo", value: function () { var _moveTo = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e) { var _ref8, t, _ref8$extra, r, a, o; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _ref8 = e || {}, t = _ref8.point, _ref8$extra = _ref8.extra, r = _ref8$extra === void 0 ? "" : _ref8$extra; if (this.position) { _context6.next = 3; break; } return _context6.abrupt("return", Promise.reject(new ParamError("avatar position is empty"))); case 3: if (!(typeof r != "string" || typeof r == "string" && r.length > 64)) { _context6.next = 6; break; } a = "extra shoud be string which length less than 64"; return _context6.abrupt("return", (logger$1.warn(a), Promise.reject(new ParamError(a)))); case 6: o = util.getDistance(this.position, t) / 100 > 100 ? MotionType.Run : MotionType.Walk; return _context6.abrupt("return", this._room.actionsHandler.moveTo({ point: t, motionType: o, extra: r })); case 8: case "end": return _context6.stop(); } } }, _callee6, this); })); function moveTo(_x6) { return _moveTo.apply(this, arguments); } return moveTo; }() }, { key: "stopMoving", value: function () { var _stopMoving = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7() { return regenerator.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: return _context7.abrupt("return", this._room.actionsHandler.stopMoving()); case 1: case "end": return _context7.stop(); } } }, _callee7, this); })); function stopMoving() { return _stopMoving.apply(this, arguments); } return stopMoving; }() }, { key: "rotateTo", value: function rotateTo(e) { return this._room.actionsHandler.rotateTo(e); } }, { key: "setRayCast", value: function setRayCast(e) { this.xAvatar && (this.xAvatar.isRayCastEnable = e); } }, { key: "say", value: function say(e, t) { var _this4 = this; if (this.sayTimer && window.clearTimeout(this.sayTimer), !this.xAvatar) { logger$1.error("say failed, without instance: xAvatar"); return; } this.xAvatar.say(e, { scale: this.xAvatar.scale, isUser: this.group === AvatarGroup.User }), !(t === void 0 || t <= 0) && (this.sayTimer = window.setTimeout(function () { _this4.silent(); }, t)); } }, { key: "silent", value: function silent() { var e; if (!this.xAvatar) { logger$1.error("silent failed, without instance: xAvatar"); return; } (e = this.xAvatar) == null || e.silent(); } }, { key: "setMotionType", value: function setMotionType(_ref9) { var _this5 = this; var _ref9$type = _ref9.type, e = _ref9$type === void 0 ? MotionType.Walk : _ref9$type; return this.motionType === e ? Promise.resolve() : this._room.actionsHandler.setMotionType(e).then(function () { _this5._motionType = e; }); } }, { key: "setNickname", value: function setNickname(e) { return this._room.actionsHandler.setNickName(encodeURIComponent(e)); } }, { key: "_setNickname", value: function _setNickname(e) { var r, n; if (!e) return; var t = safeDecodeURIComponent(e); ((r = this.xAvatar) == null ? void 0 : r.nickName) !== t && (this.isSelf && (this._room.updateCurrentNetworkOptions({ nickname: t }), this._room.options.nickname = t), (n = this.xAvatar) == null || n.setNickName(t, { scale: this.xAvatar.scale })); } }, { key: "_move", value: function _move(e) { var s; var _ref10 = e || {}, t = _ref10.start, r = _ref10.end, n = _ref10.walkSpeed, _ref10$moveAnimation = _ref10.moveAnimation, o = _ref10$moveAnimation === void 0 ? "Walking" : _ref10$moveAnimation, _ref10$inter = _ref10.inter, a = _ref10$inter === void 0 ? [] : _ref10$inter; return (s = this.xAvatar) == null ? void 0 : s.move(t, r, n, o, a); } }, { key: "setPickBoxScale", value: function setPickBoxScale() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; return this.xAvatar ? (this.xAvatar.setPickBoxScale(e), !0) : (logger$1.error("setPickBoxScale failed, without instance: xAvatar"), !1); } }, { key: "transfer", value: function transfer(e) { var t = e.player, r = e.camera, n = e.areaName, o = e.attitude, a = e.pathName; return this._room.actionsHandler.transfer({ renderType: RenderType.RotationVideo, player: t, camera: r, areaName: n, attitude: o, pathName: a, tag: "transfer" }); } }, { key: "avatarLoadedHook", value: function avatarLoadedHook() {} }, { key: "avatarStartMovingHook", value: function avatarStartMovingHook() {} }, { key: "avatarStopMovingHook", value: function avatarStopMovingHook() {} }, { key: "statusSync", value: function () { var _statusSync = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee8(e) { var _this6 = this; var t, r, n, _e$event$rotateEvent, o, s, _o, _a3, _s; return regenerator.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: _context8.prev = 0; if (!((t = e.event) != null && t.rotateEvent)) { _context8.next = 10; break; } _e$event$rotateEvent = e.event.rotateEvent, o = _e$event$rotateEvent.angle, s = this.motionType === MotionType.Run ? "Running" : "Walking"; _context8.t0 = this.rotation; if (!_context8.t0) { _context8.next = 10; break; } this.rotation.yaw = this.rotation.yaw % 360; o.yaw - this.rotation.yaw > 180 && (o.yaw = 180 - o.yaw); this.isRotating = !0; _context8.next = 10; return this.xAvatar.rotateTo(o, this.rotation, s).then(function () { _this6._playAnimation("Idle", !0), _this6.isRotating = !1; }); case 10: if (!(e.event && (((r = e.event) == null ? void 0 : r.points.length) || 0) > 1 && !this.isSelf)) { _context8.next = 17; break; } this.isMoving = !0, e.playerState.attitude && (this._motionType = e.playerState.attitude); _o = this.motionType === MotionType.Run ? "Running" : "Walking", _a3 = this._room.skin.routeList.find(function (l) { return l.areaName === _this6._room.currentState.areaName; }), _s = ((_a3 == null ? void 0 : _a3.step) || 7.5) * 30 * (25 / 30); _context8.t1 = this.position; if (!_context8.t1) { _context8.next = 17; break; } _context8.next = 17; return this._move({ start: this.position, end: e.event.points[e.event.points.length - 1], walkSpeed: _s, moveAnimation: _o, inter: (n = e.event) == null ? void 0 : n.points.slice(0, -1) }).then(function () { _this6.isMoving = !1; }); case 17: _context8.next = 22; break; case 19: _context8.prev = 19; _context8.t2 = _context8["catch"](0); return _context8.abrupt("return"); case 22: case "end": return _context8.stop(); } } }, _callee8, this, [[0, 19]]); })); function statusSync(_x7) { return _statusSync.apply(this, arguments); } return statusSync; }() }]); return XverseAvatar; }(EventEmitter); function _createSuper$e(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$e(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$e() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var XverseAvatarManager = /*#__PURE__*/function (_EventEmitter) { _inherits(XverseAvatarManager, _EventEmitter); var _super = _createSuper$e(XverseAvatarManager); function XverseAvatarManager(e) { var _this; _classCallCheck(this, XverseAvatarManager); _this = _super.call(this); _this.xAvatarManager = null; _this.avatars = new Map(); _this.syncAvatarsLength = 0; _this._room = e; _this._usersStatistics(); _this.broadcast = _this.setupBroadcast(); e.on("skinChanged", function () { _this.avatars.forEach(function (t) { t.disconnected && _this.removeAvatar(t.userId, !0); }); }); return _this; } _createClass(XverseAvatarManager, [{ key: "setupBroadcast", value: function setupBroadcast() { var _this2 = this; return new Broadcast$1(this._room, /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t, r, n, o, a, _r$loop, s, l; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = e.broadcastType, r = e.info; if (!(t !== CoreBroadcastType$1.PlayAnimation)) { _context.next = 3; break; } return _context.abrupt("return"); case 3: n = r.userId, o = r.animation, a = r.extra, _r$loop = r.loop, s = _r$loop === void 0 ? !1 : _r$loop, l = _this2.avatars.get(n); _context.t0 = l && !l.isSelf; if (!_context.t0) { _context.next = 10; break; } l.emit("animationStart", { animationName: o, extra: decodeURIComponent(a) }); _context.next = 9; return l == null ? void 0 : l._playAnimation(o, s); case 9: l.emit("animationEnd", { animationName: o, extra: decodeURIComponent(a) }); case 10: case "end": return _context.stop(); } } }, _callee); })); return function (_x) { return _ref.apply(this, arguments); }; }()); } }, { key: "hideAll", value: function hideAll() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0; this.xAvatarManager.hideAll(e); } }, { key: "showAll", value: function showAll() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0; this.xAvatarManager.showAll(e); } }, { key: "init", value: function () { var _init = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { var e, t; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: this.xAvatarManager = this._room.sceneManager.avatarComponent; _context2.prev = 1; _context2.next = 4; return this._room.modelManager.getApplicationConfig(); case 4: e = _context2.sent; t = e.avatars; if (!t) { _context2.next = 10; break; } _context2.next = 9; return avatarLoader.parse(this._room.sceneManager, t); case 9: return _context2.abrupt("return"); case 10: return _context2.abrupt("return", Promise.reject("cannot find avatar config list")); case 13: _context2.prev = 13; _context2.t0 = _context2["catch"](1); return _context2.abrupt("return", (logger$1.error(_context2.t0), Promise.reject("avatar mananger init error!"))); case 16: case "end": return _context2.stop(); } } }, _callee2, this, [[1, 13]]); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "handleAvatar", value: function () { var _handleAvatar2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var _this3 = this; var r, t, n, o, _n, a; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (!(this._room.viewMode === "simple" || !this._room.joined || !e.newUserStates)) { _context3.next = 2; break; } return _context3.abrupt("return"); case 2: t = e.newUserStates; if (((r = this._room._userAvatar) == null ? void 0 : r.isMoving) && this._room._userAvatar.motionType === MotionType.Run) { n = t.filter(function (a) { return a.userId === _this3._room.userId; }), o = t.filter(function (a) { return a.userId !== _this3._room.userId; }).slice(0, 2); t = n.concat(o); } if (e.getStateType === GetStateTypes.Event) { this.syncAvatarsLength = (t || []).length; _n = this._room.avatars.filter(function (s) { return s.group == AvatarGroup.User; }); _n.filter(function (s) { return !(t != null && t.find(function (l) { return l.userId == s.userId; })); }).forEach(function (s) { _this3.removeAvatar(s.userId); }); a = t.filter(function (s) { return !_n.find(function (l) { return l.userId == s.userId; }); }); this._handleAvatar(a); } this._handleAvatar(t); case 6: case "end": return _context3.stop(); } } }, _callee3, this); })); function handleAvatar(_x2) { return _handleAvatar2.apply(this, arguments); } return handleAvatar; }() }, { key: "_handleAvatar", value: function () { var _handleAvatar3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) { var _this4 = this; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: e == null || e.forEach(function (t) { var n, o, a, s, l, u, c, h, f; var r = _this4._room.userId === t.userId; if (((n = t.event) == null ? void 0 : n.type) === SyncEventType.ET_RemoveVisitor) { var d = (a = (o = t.event) == null ? void 0 : o.removeVisitorEvent) == null ? void 0 : a.removeVisitorEvent, _ = JSON.parse(safeDecodeURIComponent(((l = (s = t.event) == null ? void 0 : s.removeVisitorEvent) == null ? void 0 : l.extraInfo) || "")), g = _.code, m = _.msg; d === RemoveVisitorType.RVT_ChangeToObserver ? _this4._room.audienceViewModeHook() : d === RemoveVisitorType.RVT_MoveOutOfTheRoom && _this4._room.leave(), _this4._room.emit("visitorStatusChanged", { code: g, msg: m }); } if (t.event && [SyncEventType.Appear, SyncEventType.Reset].includes(t.event.type) || !t.event) { var _d = _this4.avatars.get(t.userId); if (t.playerState.avatarId && (_d == null ? void 0 : _d.avatarId) !== t.playerState.avatarId && (_d = void 0, _this4.removeAvatar(t.userId)), _d) { if (_d.disconnected && _d.setConnectionStatus(!1), (u = t.event) != null && u.id && _this4._room.actionsHandler.confirmEvent(t.event.id), t.playerState.nickName && (_d == null || _d._setNickname(t.playerState.nickName)), t.playerState.avatarComponents && !_d.isSelf && _d.xAvatar) { var _2 = safeParseComponents(t.playerState.avatarComponents); _d._changeComponents({ avatarComponents: _2, mode: ChangeComponentsMode.Preview }); } } else { var _t$playerState$player = t.playerState.player, _3 = _t$playerState$player.position, _g = _t$playerState$player.angle, _m = t.playerState.avatarId, v = t.playerState.prioritySync, y = safelyJsonParse(t.playerState.extra); if (!_m) return; var b = safeParseComponents(t.playerState.avatarComponents), T = safeDecodeURIComponent(t.playerState.nickName), C = _this4.calculatePriority(t.userId, y); _this4.addAvatar({ userId: t.userId, isHost: t.playerState.isHost, nickname: T, avatarPosition: _3, avatarRotation: _g, avatarScale: t.playerState.avatarSize, avatarId: _m, avatarComponents: t.playerState.person === Person.First ? [] : b, priority: C, group: AvatarGroup.User, prioritySync: v, extraInfo: y }).then(function () { var A; (A = t.event) != null && A.id && _this4._room.actionsHandler.confirmEvent(t.event.id), _this4.updateAvatarPositionAndRotation(t), r && (_this4.xAvatarManager.setMainAvatar(t.userId), _this4._room.emit("userAvatarLoaded"), logger$1.info("userAvatarLoaded")); }).catch(function (A) { r && (_this4.xAvatarManager.setMainAvatar(t.userId), _this4._room.emit("userAvatarFailed", { error: A }), logger$1.error("userAvatarFailed", A)); }); } } if (t.event && SyncEventType.Disappear === t.event.type && ((c = t == null ? void 0 : t.event) != null && c.id && _this4._room.actionsHandler.confirmEvent(t.event.id), _this4.removeAvatar(t.userId)), t.event && [SyncEventType.Move, SyncEventType.ChangeRenderInfo].includes(t.event.type) || !t.event) { (h = t == null ? void 0 : t.event) != null && h.id && _this4._room.actionsHandler.confirmEvent(t.event.id); var _d2 = _this4.avatars.get(t.userId); _d2 && _d2.withModel && !_d2.isLoading && _this4.updateAvatarPositionAndRotation(t); } if (!r && ((f = t.event) == null ? void 0 : f.type) === SyncEventType.Rotate) { var _d3 = _this4.avatars.get(t.userId); _d3.statusSyncQueue.append({ type: QueueType.Rotate, action: function action() { return _d3.statusSync(t); } }); } }); case 1: case "end": return _context4.stop(); } } }, _callee4); })); function _handleAvatar(_x3) { return _handleAvatar3.apply(this, arguments); } return _handleAvatar; }() }, { key: "calculatePriority", value: function calculatePriority(e, t) { var n; return e === this._room.userId ? EAvatarRelationRank.Self : (n = this._room.options.firends) != null && n.includes(e) ? EAvatarRelationRank.Friend : EAvatarRelationRank.Stranger; } }, { key: "updateAvatarPositionAndRotation", value: function updateAvatarPositionAndRotation(e) { var t, r; if ((t = e == null ? void 0 : e.playerState) != null && t.player) { var _e$playerState$player = e.playerState.player, n = _e$playerState$player.position, o = _e$playerState$player.angle; var a = this.avatars.get(e.userId); if (!a) return; if (n = positionPrecisionProtect(n), o = rotationPrecisionProtect(o), a.isSelf && !this._room.networkController.rtcp.workers.inPanoMode && (a.setPosition(n), a.setRotation(o)), e.event && (((r = e.event) == null ? void 0 : r.points.length) || 0) > 1 && !a.isSelf && a.statusSyncQueue.append({ type: QueueType.Move, action: function action() { return a.statusSync(e); } }), e.renderInfo && a.isSelf) { var _e$renderInfo = e.renderInfo, s = _e$renderInfo.isMoving, l = _e$renderInfo.isRotating; this._updateAvatarMovingStatus({ id: e.userId, isMoving: !!s, isRotating: !!l }); } } } }, { key: "addAvatar", value: function () { var _addAvatar = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(e) { var t, r, n, o, a, s, _e$avatarComponents, l, u, _e$group, c, _e$avatarScale, h, f, d, _, g, v, y, b, T, C; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: t = e.userId, r = e.isHost, n = e.avatarPosition, o = e.avatarId, a = e.avatarRotation, s = e.nickname, _e$avatarComponents = e.avatarComponents, l = _e$avatarComponents === void 0 ? [] : _e$avatarComponents, u = e.priority, _e$group = e.group, c = _e$group === void 0 ? AvatarGroup.Npc : _e$group, _e$avatarScale = e.avatarScale, h = _e$avatarScale === void 0 ? DEFAULT_AVATAR_SCALE : _e$avatarScale, f = e.extraInfo, d = e.prioritySync, _ = t === this._room.userId; g = this.avatars.get(t); if (!g) { _context5.next = 4; break; } return _context5.abrupt("return", Promise.resolve(g)); case 4: if (!(g = new XverseAvatarManager.subAvatar({ userId: t, isHost: r, isSelf: _, room: this._room, avatarComponents: l, avatarId: o, nickname: s, group: c }), this.avatars.set(t, g), !g.withModel)) { _context5.next = 6; break; } return _context5.abrupt("return", (g.isLoading = !1, g.avatarLoadedHook(), this._room.emit("avatarChanged", { avatars: this._room.avatars }), g)); case 6: _context5.next = 8; return this._room.modelManager.getAvatarModelList(); case 8: v = _context5.sent.find(function (b) { return b.id === o; }); y = Date.now(); if (v) { _context5.next = 12; break; } return _context5.abrupt("return", (this._room.emit("avatarChanged", { avatars: this._room.avatars }), this.avatars.delete(t), Promise.reject("no such avatar model with id: ".concat(o)))); case 12: _context5.prev = 12; _context5.next = 15; return avatarComponentsModify(v, l); case 15: b = _context5.sent; b = b.filter(function (A) { return A.type != "pendant"; }); _context5.next = 19; return avatarComponentsParser(v, b); case 19: T = _context5.sent; _context5.next = 22; return this.xAvatarManager.loadAvatar({ id: t, avatarType: o, priority: u, avatarManager: this.xAvatarManager, assets: T, status: { avatarPosition: n, avatarRotation: a, avatarScale: h } })._timeout(8e3, new TimeoutError("loadAvatar timeout(8s)")); case 22: C = _context5.sent; return _context5.abrupt("return", (C.setPickBoxScale(t === this._room.userId ? 0 : 1), g.xAvatar = C, g.setScale(h), g.extraInfo = f, g.priority = u, g.isLoading = !1, g.prioritySync = !!d, g._playAnimation("Idle", !0, !0), g.avatarLoadedHook(), this._room.emit("avatarChanged", { avatars: this._room.avatars }), s && g._setNickname(s), t === this._room.userId && (logger$1.infoAndReportMeasurement({ metric: "avatarLoadDuration", startTime: y, group: "costs" }), logger$1.infoAndReportMeasurement({ metric: "avatarLoadAt", startTime: this._room._startTime, group: "costs" })), g)); case 26: _context5.prev = 26; _context5.t0 = _context5["catch"](12); return _context5.abrupt("return", (g.isLoading = !1, this._room.emit("avatarChanged", { avatars: this._room.avatars }), logger$1.error(_context5.t0), Promise.reject(_context5.t0))); case 29: case "end": return _context5.stop(); } } }, _callee5, this, [[12, 26]]); })); function addAvatar(_x4) { return _addAvatar.apply(this, arguments); } return addAvatar; }() }, { key: "removeAvatar", value: function removeAvatar(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; var r = this.avatars.get(e); if (!!r) { if (r.removeWhenDisconnected || t) { r.xAvatar && this.xAvatarManager.deleteAvatar(r.xAvatar), this.avatars.delete(e), this._room.emit("avatarChanged", { avatars: this._room.avatars }); return; } r.setConnectionStatus(!0); } } }, { key: "clearOtherUsers", value: function clearOtherUsers() { var _this5 = this; this.avatars.forEach(function (e) { !e.isSelf && e.group === AvatarGroup.User && _this5.removeAvatar(e.userId); }); } }, { key: "_updateAvatarMovingStatus", value: function () { var _updateAvatarMovingStatus2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e) { var t, r, n, o, a, _a; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: t = e.id, r = e.isMoving, n = e.isRotating, o = this.avatars.get(t); if (!!o) { if (o.isRotating !== n) { o.isRotating = n; a = "Idle"; n && (a = "Walking", o.motionType === MotionType.Run && (a = "Running")), o._playAnimation(a, !0, !0), logger$1.infoAndReportMeasurement({ startTime: Date.now(), value: 0, metric: n ? "userAvatarStartRotating" : "userAvatarStopRotating", extra: { motionType: o.motionType, moveToExtra: this._room.moveToExtra } }); } if (o.isMoving !== r) { o.isMoving = r; _a = "Idle"; r && (_a = "Walking", o.motionType === MotionType.Run && (_a = "Running")), r ? (o.avatarStartMovingHook(), o.emit("startMoving", { target: o, extra: this._room.moveToExtra })) : (o.avatarStopMovingHook(), o.emit("stopMoving", { target: o, extra: this._room.moveToExtra })), o._playAnimation(_a, !0, !0), logger$1.infoAndReportMeasurement({ startTime: Date.now(), value: 0, metric: r ? "userAvatarStartMoving" : "userAvatarStopMoving", extra: { motionType: o.motionType, moveToExtra: this._room.moveToExtra } }); } } case 2: case "end": return _context6.stop(); } } }, _callee6, this); })); function _updateAvatarMovingStatus(_x5) { return _updateAvatarMovingStatus2.apply(this, arguments); } return _updateAvatarMovingStatus; }() }, { key: "_usersStatistics", value: function _usersStatistics() { var _this6 = this; this.on("userAvatarLoaded", function () { window.setInterval(function () { var e = _this6._room.avatars.filter(function (r) { return r.group === AvatarGroup.User; }).length || 0, t = _this6._room.avatars.filter(function (r) { return r.group === AvatarGroup.User && r.isRender; }).length || 0; _this6._room.stats.assign({ userNum: e, syncUserNum: _this6.syncAvatarsLength, renderedUserNum: t }); }, 3e3); }); } }]); return XverseAvatarManager; }(EventEmitter); E(XverseAvatarManager, "subAvatar", XverseAvatar); var PathManager = /*#__PURE__*/function () { function PathManager() { _classCallCheck(this, PathManager); this.currentArea = ''; this.currentPathName = ''; this.currentAttitude = ''; this.speed = 0; } _createClass(PathManager, [{ key: "getSpeed", value: function getSpeed(e) { var t = { guangchang: { [MotionType.Walk]: 17, [MotionType.Run]: 51 }, tower: { [MotionType.Walk]: 12.5, [MotionType.Run]: 25 }, zhiboting: { [MotionType.Walk]: 12.5, [MotionType.Run]: 25 }, youxiting: { [MotionType.Walk]: 12.5, [MotionType.Run]: 25 }, diqing: { [MotionType.Walk]: 12.5, [MotionType.Run]: 25 } }, r = t[this.currentArea] || t.guangchang; return this.speed = r[e] * 30, this.speed; } }]); return PathManager; }(); var CameraStates = { Normal: 0, ItemView: 1, CGView: 2, PathView: 3 }; var EImageQuality = { low: 0, mid: 1, high: 2 }; var Actions = { Clicking: 1, PlayCG: 6, Back: 7, ChangeRoom: 8, ChangeSkin: 13, Joystick: 15, Transfer: 18, GetOnVehicle: 22, GetOffVehicle: 23, StopMoving: 34, UnaryActionLine: 1e3, Init: 1001, Exit: 1002, SetIFrameInfo: 1003, GetNeighborPoints: 1004, ReserveSeat: 1005, GetReserveStatus: 1006, ChangeNickname: 1007, ChangeBitRateInfo: 1008, Echo: 1009, SetPlayerState: 1010, TurnTo: 1011, TurnToFace: 1012, RotateTo: 1013, Rotation: 1014, CameraTurnTo: 1015, ConfirmEvent: 1016, Broadcast: 1017, NotifyActionLine: 2e4, AudienceChangeToVisitor: 1020, VisitorChangeToAudience: 1021, RemoveVisitor: 1022, GetUserWithAvatar: 1023 }; function _createSuper$d(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$d(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$d() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Camera = /*#__PURE__*/function (_EventEmitter) { _inherits(Camera, _EventEmitter); var _super = _createSuper$d(Camera); function Camera(e) { var _this; _classCallCheck(this, Camera); _this = _super.call(this); _this.initialFov = 0; _this._state = CameraStates.Normal; _this._person = Person.Third; _this._cameraFollowing = !0; _this._room = e; return _this; } _createClass(Camera, [{ key: "checkPointOnLeftOrRight", value: function checkPointOnLeftOrRight(e) { var t = ue4Position2Xverse(e); if (!t || this.checkPointInView(e)) return; var o = this._room.scene.activeCamera; if (!o) return; var a = [o.target.x, o.target.y, o.target.z], s = [o.position.x, o.position.y, o.position.z], l = t.x, u = t.y, c = t.z, h = calNormVector(s, a), f = calNormVector(s, [l, u, c]); return vectorCrossMulti(h, f) < 0 ? Direction.Right : Direction.Left; } }, { key: "checkPointInView", value: function checkPointInView(e, t, r) { var n = ue4Position2Xverse({ x: e, y: t, z: r }); if (!n) return !1; for (var o = 0; o < 6; o++) { if (this._room.scene.frustumPlanes[o].dotCoordinate(n) < 0) return !1; } return !0; } }, { key: "person", get: function get() { return this._person; } }, { key: "state", get: function get() { return this._state; } }, { key: "pose", get: function get() { return this._room.currentClickingState.camera; } }, { key: "cameraFollowing", get: function get() { return this._cameraFollowing; }, set: function set(e) { logger$1.info("cameraFollowing setter", e), this.setCameraFollowing({ isFollowHost: e }); } }, { key: "setCameraFollowing", value: function setCameraFollowing(_ref) { _ref.isFollowHost; } }, { key: "handleRenderInfo", value: function handleRenderInfo(e) { var t = e.renderInfo.cameraStateType, r = this._room.sceneManager; if (t !== this._state && (this._state = t, logger$1.debug("camera._state changed to", CameraStates[t]), t === CameraStates.CGView ? (r.cameraComponent.switchToCgCamera(), r.staticmeshComponent.getCgMesh().show()) : (r.cameraComponent.switchToMainCamera(), r.staticmeshComponent.getCgMesh().hide()), this.emit("stateChanged", { state: t })), this._room.isHost) return; var n = e.playerState.isFollowHost; !!n !== this._cameraFollowing && (this._cameraFollowing = !!n, this.emit("cameraFollowingChanged", { cameraFollowing: !!n })); } }, { key: "setCameraState", value: function setCameraState(_ref2) { var e = _ref2.state; if (this._state === e) { logger$1.warn("You are already in ".concat(CameraStates[e], " camera state")); return; } e === CameraStates.Normal || this._state === CameraStates.ItemView && logger$1.warn("CloseUp camera state can only be triggerd by room internally"); } }, { key: "turnToFace", value: function turnToFace(_ref3) { var _ref3$extra = _ref3.extra, e = _ref3$extra === void 0 ? "" : _ref3$extra, _ref3$offset = _ref3.offset, t = _ref3$offset === void 0 ? 0 : _ref3$offset; var r = { action_type: Actions.TurnToFace, turn_to_face_action: { offset: t } }; return this.emit("viewChanged", { extra: e }), this._room.actionsHandler.sendData({ data: r }); } }, { key: "isInDefaultView", value: function isInDefaultView() { if (!this._room.isHost) { logger$1.warn("It is recommended to call the function on the host side"); return; } if (!this._room._currentClickingState) return logger$1.error("CurrentState should not be empty"), !1; var _this$_room$_currentC = this._room._currentClickingState, e = _this$_room$_currentC.camera, t = _this$_room$_currentC.player; return Math.abs(t.angle.yaw - 180 - e.angle.yaw) % 360 <= 4; } }, { key: "screenShot", value: function () { var _screenShot = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(_ref4) { var e, _ref4$autoSave, t, r, n, o; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: e = _ref4.name, _ref4$autoSave = _ref4.autoSave, t = _ref4$autoSave === void 0 ? !1 : _ref4$autoSave; r = this._room.scene.getEngine(), n = this._room.scene.activeCamera; _context.prev = 2; this._room.sceneManager.setImageQuality(EImageQuality.high); _context.next = 6; return CreateScreenshotAsync(r, n, { precision: 1 }); case 6: o = _context.sent; return _context.abrupt("return", (this._room.sceneManager.setImageQuality(EImageQuality.low), t === !0 && downloadFileByBase64(o, e), Promise.resolve(o))); case 10: _context.prev = 10; _context.t0 = _context["catch"](2); return _context.abrupt("return", (this._room.sceneManager.setImageQuality(EImageQuality.low), Promise.reject(_context.t0))); case 13: case "end": return _context.stop(); } } }, _callee, this, [[2, 10]]); })); function screenShot(_x) { return _screenShot.apply(this, arguments); } return screenShot; }() }, { key: "changeToFirstPerson", value: function changeToFirstPerson(e, t, r) { var _this2 = this; var n = e.camera, o = e.player, a = e.attitude, s = e.areaName, l = e.pathName; return this._room.actionsHandler.requestPanorama({ camera: n, player: o, attitude: a, areaName: s, pathName: l }, t, r).then(function () { _this2._room.networkController.rtcp.workers.changePanoMode(!0); var _ref5 = o || {}, u = _ref5.position, c = _ref5.angle; _this2._room.sceneManager.cameraComponent.changeToFirstPersonView({ position: u, rotation: c }); }); } }, { key: "setPerson", value: function setPerson(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { camera: this._room._currentClickingState.camera, player: this._room._currentClickingState.player }; var r = Date.now(); return this._setPerson(e, t).then(function (n) { return logger$1.infoAndReportMeasurement({ tag: Person[e], startTime: r, metric: "setPerson" }), n; }).catch(function (n) { return logger$1.infoAndReportMeasurement({ tag: Person[e], startTime: r, metric: "setPerson", error: n }), Promise.reject(n); }); } }, { key: "_setPerson", value: function _setPerson(e) { var _this3 = this; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { camera: this._room._currentClickingState.camera, player: this._room._currentClickingState.player }; return e !== Person.First && e !== Person.Third ? Promise.reject("invalid person " + e) : !t.camera || !t.player ? Promise.reject(new ParamError("wrong camera or player")) : e === Person.First ? this._room.panorama.access({ camera: t.camera, player: t.player, tag: "setPerson" }).then(function () { var o, a; _this3._person = e, (o = _this3._room._userAvatar) == null || o.hide(); var _ref6 = ((a = _this3._room.currentClickingState) == null ? void 0 : a.camera) || {}, r = _ref6.position, n = _ref6.angle; !r || !n || _this3._room.sceneManager.cameraComponent.changeToFirstPersonView({ position: r, rotation: n }); }) : this._room.panorama.exit({ camera: t.camera, player: t.player }).then(function () { var r, n; _this3._person = e, (r = _this3._room._userAvatar) != null && r.xAvatar && ((n = _this3._room._userAvatar) == null || n.xAvatar.show()); }); } }, { key: "setCameraPose", value: function setCameraPose(e) { this._room.sceneManager.cameraComponent.setCameraPose({ position: e.position, rotation: e.angle }); } }, { key: "setMainCameraRotationLimit", value: function setMainCameraRotationLimit(e) { var t = e.limitAxis, r = e.limitRotation; this._room.sceneManager.cameraComponent.setMainCameraRotationLimit(t, r); } }]); return Camera; }(EventEmitter); function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$c() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var numberFormat = new Intl.NumberFormat(window.navigator.language, { maximumFractionDigits: 0 }); var Stats = /*#__PURE__*/function (_EventEmitter) { _inherits(Stats, _EventEmitter); var _super = _createSuper$c(Stats); function Stats(e) { var _this; _classCallCheck(this, Stats); _this = _super.call(this); _this._netInterval = null; _this._disabled = !1; _this._show = !1; _this._aggregatedStats = {}; _this._displayElement = null; _this._extraStats = {}; _this._networkSamples = []; _this.externalStats = null; _this.constructedTime = null; _this.room = e, _this.constructedTime = Date.now(), _this._interval = window.setInterval(function () { var t, r, n; _this._disabled || _this.onStats((n = (r = (t = e.networkController) == null ? void 0 : t.rtcp) == null ? void 0 : r.workers) == null ? void 0 : n.uploadDataToServer()); }, 1e3), _this._netInterval = window.setInterval(function () { _this.getIsWeakNet(); }, NET_INTERVAL * 1e3); return _this; } _createClass(Stats, [{ key: "isShow", get: function get() { return this._show; } }, { key: "assign", value: function assign(e) { Object.assign(this._extraStats, e), ((e == null ? void 0 : e.hb) || (e == null ? void 0 : e.rtt)) && this.startStatsNetSamples(); } }, { key: "appendExternalStats", value: function appendExternalStats(e) { var _this2 = this; var t = {}; if (!e || typeof e != "object") { console.warn("appendExternalStats should be plain object"); return; } Object.keys(e).forEach(function (r) { Object.prototype.hasOwnProperty.call(_this2._aggregatedStats, r) ? console.warn("".concat(r, " is duplicate with internal stats")) : t[r] = e[r]; }), !(Object.keys(t).length > 10) && (this.externalStats = t); } }, { key: "getRtt", value: function getRtt() { var e = this._extraStats.rtt; return typeof e != "number" ? 0 : e > 999 ? 999 : e; } }, { key: "enable", value: function enable() { this._disabled = !1; } }, { key: "disable", value: function disable() { this._disabled = !0; } }, { key: "disableNet", value: function disableNet() { this._netInterval && window.clearInterval(this._netInterval); } }, { key: "show", value: function show() { this._show = !0, this._render(); } }, { key: "hide", value: function hide() { this._show = !1, this._displayElement && document.body.removeChild(this._displayElement), this._displayElement = null; } }, { key: "getIsWeakNet", value: function getIsWeakNet() { var _this3 = this; var e = !1; var t = this._networkSamples.length - 1; if (t < 0) return; var r = this._networkSamples[t].time, n = this._networkSamples[0].time, o = r - n, a = 1e3 * (DURATION - 2); if (o < a) return; var s = this._networkSamples.map(function (g) { return _this3.isNetDelay(g, "rtt"); }), l = this._networkSamples.map(function (g) { return _this3.isNetDelay(g, "hb"); }), u = s.reduce(function (g, m) { return g + m; }, 0), c = l.reduce(function (g, m) { return g + m; }, 0), h = Math.floor(u / this._networkSamples.length) * 100, f = Math.floor(c / this._networkSamples.length) * 100, d = 70; (h >= d || f >= d) && (e = !0); var _ = this.room.viewMode === "observer" || this.room.viewMode === "serverless"; e && !_ && (logger$1.infoAndReportMeasurement({ metric: "weakNetwork", startTime: Date.now(), extra: { msg: this._networkSamples.slice(20), netDelayRTTValues: u, netDelayHBValues: c } }), this.emit("weakNetwork")); } }, { key: "startStatsNetSamples", value: function startStatsNetSamples() { var _this$_extraStats = this._extraStats, e = _this$_extraStats.rtt, t = _this$_extraStats.hb; if (e || t) { var r = { rtt: e, hb: t, time: new Date().getTime() }; this._networkSamples.push(r); var n = this._networkSamples.length - 1; if (n < 0) return; var o = this._networkSamples[n].time, a = 1e3 * DURATION; this._networkSamples = this._networkSamples.filter(function (s) { return s.time > o - a; }); } } }, { key: "isNetDelay", value: function isNetDelay(e, t) { return t === "rtt" ? e.rtt > RTT_MAX_VALUE ? 1 : 0 : t === "hb" && e.hb > HB_MAX_VALUE ? 1 : 0; } }, { key: "getPreciesTimer", value: function getPreciesTimer(e, t) { var r = t * 1e3, n = new Date().getTime(); var o = 0; o++; var a = new Date().getTime() - (n + o * 1e3), s = r - a, l = setTimeout(function () { clearTimeout(l), e(); }, s); } }, { key: "_render", value: function _render() { var c, h, f, d, _, g, m, v, y, b, T, C, A, S, P, R, M, x, I, w; if (!this._aggregatedStats) return; this._displayElement || (this._displayElement = document.createElement("div"), this._displayElement.style.position = "absolute", this._displayElement.style.top = "10px", this._displayElement.style.left = "200px", this._displayElement.style.width = "200px", this._displayElement.style.backgroundColor = "rgba(0,0,0,.5)", this._displayElement.style.color = "white", this._displayElement.style.textAlign = "left", this._displayElement.style.fontSize = "8px", this._displayElement.style.lineHeight = "10px", document.body.appendChild(this._displayElement)); var e = [], t = Date.now() - this.constructedTime, r = Math.floor(t / 1e3 % 60), n = Math.floor(t / (1e3 * 60) % 60), o = Math.floor(t / (1e3 * 60 * 60) % 24), a = o < 10 ? "0" + o.toString() : o.toString(), s = n < 10 ? "0" + n : n, l = r < 10 ? "0" + r : r; e.push({ key: new Date(Math.floor(this._aggregatedStats.timestamp || 0)).toLocaleString("en-GB"), value: a + ":" + s + ":" + l }), e.push({ key: "rtt: " + this._extraStats.rtt + " hb: " + this._extraStats.hb, value: "FPS: " + this._extraStats.fps + " avatar: " + ((c = this.room._userAvatar) == null ? void 0 : c.state) }), e.push({ key: "SDK: " + Xverse$1.SUB_PACKAGE_VERSION, value: "ENGINE:" + VERSION$1 + " uid:" + this._extraStats.userId }), e.push({ key: "\u540C\u6B65/\u6709\u6548/\u663E\u793A\u73A9\u5BB6", value: "".concat(this._extraStats.syncUserNum || 0, "/").concat(this._extraStats.userNum || 0, "/").concat(this._extraStats.renderedUserNum || 0) }), e.push({ key: "media/meta bitrate(kbps)", value: numberFormat.format(this._aggregatedStats.mediaBitrate || 0) + "/" + numberFormat.format(this._aggregatedStats.metaBitrate || 0) }), e.push({ key: ":----------------Decoding---------------", value: "" }), e.push({ key: "-max/avg decodeTime(ms)", value: numberFormat.format(this._aggregatedStats.decodeTimeMaxFrame || 0) + "/" + numberFormat.format(this._aggregatedStats.decodeTimePerFrame || 0) }), e.push({ key: "-frmAwait/Lost/Drop", value: numberFormat.format(this._aggregatedStats.framesAwait || 0) + "/" + numberFormat.format(this._aggregatedStats.packetsLost || 0) + "/" + numberFormat.format(this._aggregatedStats.packetsDrop || 0) + "/" + numberFormat.format(this._aggregatedStats.updateDropFrame) || 0 }), e.push({ key: ":----------------FrameLoop-------------", value: "" }), e.push({ key: "interval(max/avg/>40)", value: (((h = this._extraStats.maxFrameTime) == null ? void 0 : h.toFixed(1)) || 0) + "/" + (((f = this._extraStats.avgFrameTime) == null ? void 0 : f.toFixed(0)) || 0) + "/" + this._extraStats.engineSloppyCnt }), e.push({ key: "systemStuck", value: this._extraStats.systemStuckCnt }), e.push({ key: "--update", value: (this._aggregatedStats.maxGraphicTime.toFixed(1) || 0) + "/" + (((d = this._aggregatedStats.averageGraphicTime) == null ? void 0 : d.toFixed(0)) || 0) }), e.push({ key: "--timeout", value: (((_ = this._extraStats.maxTimeoutTime) == null ? void 0 : _.toFixed(1)) || 0) + "/" + ((g = this._extraStats.avgTimeoutTime) == null ? void 0 : g.toFixed(0)) || 0 }), e.push({ key: "--render", value: (((m = this._extraStats.maxRenderFrameTime) == null ? void 0 : m.toFixed(1)) || 0) + "/" + (((v = this._extraStats.renderFrameTime) == null ? void 0 : v.toFixed(0)) || 0) }), e.push({ key: "---anim/regBR/clip(avg ms)", value: (this._extraStats.animationTime.toFixed(2) || 0) + " / " + (this._extraStats.registerBeforeRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.meshSelectTime.toFixed(2) || 0) }), e.push({ key: "---anim/regBR/clip(max ms)", value: (this._extraStats.maxAnimationTime.toFixed(2) || 0) + " / " + (this._extraStats.maxRegisterBeforeRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.maxMeshSelectTime.toFixed(2) || 0) }), e.push({ key: "---rTR/drC/regAF(avg ms)", value: (this._extraStats.renderTargetRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.drawcallTime.toFixed(2) || 0) + " / " + (this._extraStats.registerAfterRenderTime.toFixed(2) || 0) }), e.push({ key: "---rTR/drC/regAF(max ms)", value: (this._extraStats.maxRenderTargetRenderTime.toFixed(2) || 0) + " / " + (this._extraStats.maxDrawcallTime.toFixed(2) || 0) + " / " + (this._extraStats.maxRegisterAfterRenderTime.toFixed(2) || 0) }), e.push({ key: "--tri/drC/pati/bones/anim(Num)", value: (this._extraStats.triangle || 0) + " / " + (this._extraStats.drawcall.toFixed(0) || 0) + " / " + (this._extraStats.activeParticles.toFixed(0) || 0) + " / " + (this._extraStats.activeBones.toFixed(0) || 0) + " / " + (this._extraStats.activeAnimation.toFixed(0) || 0) }), e.push({ key: "--rootN/mesh/geo/tex/mat(Num)", value: (this._extraStats.totalRootNodes.toFixed(0) || 0) + " / " + (this._extraStats.totalMeshes.toFixed(0) || 0) + " / " + (this._extraStats.totalGeometries.toFixed(0) || 0) + " / " + (this._extraStats.totalTextures.toFixed(0) || 0) + " / " + (this._extraStats.totalMaterials.toFixed(0) || 0) }), e.push({ key: "--registerBF/AF(Num)", value: (this._extraStats.registerBeforeCount.toFixed(0) || 0) + " / " + (this._extraStats.registerAfterCount.toFixed(0) || 0) }), e.push({ key: ":----------------Rotation-------------------", value: "" }), e.push({ key: "Total(ms/miss)", value: (((y = this._aggregatedStats.avgOverallTime) == null ? void 0 : y.toFixed(2)) || 0) + "/" + (this._aggregatedStats.responseMissPs + this._aggregatedStats.processMissPs + this._aggregatedStats.displayMissPs) }), e.push({ key: "--rotateRsp", value: (((b = this._aggregatedStats.avgResponseTime) == null ? void 0 : b.toFixed(1)) || 0) + "/" + this._aggregatedStats.responseMissPs }), e.push({ key: "--rotateProc", value: (((T = this._aggregatedStats.avgProcessTime) == null ? void 0 : T.toFixed(1)) || 0) + "/" + this._aggregatedStats.processMissPs }), e.push({ key: "--rotateShow", value: (((C = this._aggregatedStats.avgDisplayTime) == null ? void 0 : C.toFixed(1)) || 0) + "/" + this._aggregatedStats.displayMissPs }), ((A = this.room._userAvatar) == null ? void 0 : A.state) == "moving", e.push({ key: ":----------------Move----------------------", value: "" }), e.push({ key: "-startDelay", value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.moveResponseDelay || 0 : this._aggregatedStats.flyResponseDelay || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.moveProcessDelay || 0 : this._aggregatedStats.flyProcessDelay || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.moveDisplayDelay || 0 : this._aggregatedStats.flyDisplayDelay || 0) }), (((S = this.room._userAvatar) == null ? void 0 : S.state) == "moving" || this._aggregatedStats.moveEvent == "GetOnAirship" || this._aggregatedStats.moveEvent == "GetOnVehicle") && e.push({ key: "-srvInterFrm(max/avg)", value: (this._aggregatedStats.maxServerDiff || 0) + "/" + (this._aggregatedStats.avgServerDiff.toFixed(1) || 0) }), e.push({ key: "-interFrameDelay", value: "(max/avg/jank)" }), e.push({ key: "--toDisplay", value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.maxDisplayMoveDiff || 0 : this._aggregatedStats.maxDisplayFlyDiff || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.avgDisplayMoveDiff.toFixed(1) || 0 : this._aggregatedStats.avgDisplayFlyDiff.toFixed(1) || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? ((P = this._aggregatedStats.moveDisplayJank) == null ? void 0 : P.toFixed(3)) || 0 : ((R = this._aggregatedStats.flyDisplayJank) == null ? void 0 : R.toFixed(3)) || 0) }), e.push({ key: "--received", value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.maxResponseMoveDiff || 0 : this._aggregatedStats.maxResponseFlyDiff || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.avgResponseMoveDiff.toFixed(1) || 0 : this._aggregatedStats.avgResponseFlyDiff.toFixed(1) || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? ((M = this._aggregatedStats.moveResponseJank) == null ? void 0 : M.toFixed(3)) || 0 : ((x = this._aggregatedStats.flyResponseJank) == null ? void 0 : x.toFixed(3)) || 0) }), e.push({ key: "--decoded", value: (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.maxProcessMoveDiff || 0 : this._aggregatedStats.maxProcessFlyDiff || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? this._aggregatedStats.avgProcessMoveDiff.toFixed(1) || 0 : this._aggregatedStats.avgProcessFlyDiff.toFixed(1) || 0) + "/" + (this._aggregatedStats.moveEvent == "MoveTo" ? ((I = this._aggregatedStats.moveProcessJank) == null ? void 0 : I.toFixed(3)) || 0 : ((w = this._aggregatedStats.flyProcessJank) == null ? void 0 : w.toFixed(3)) || 0) }), e.push({ key: ":----------------DevInfo-----------------", value: "" }), e.push({ key: "sd", value: (this._aggregatedStats.sdMoveResponseLongTime.toFixed(1) || 0) + "/" + (this._aggregatedStats.sdMoveProcessLongTime.toFixed(1) || 0) + "/" + (this._aggregatedStats.sdMoveDisplayLongTime.toFixed(1) || 0) }), e.push({ key: "----hardwareInfo", value: this._extraStats.hardwareInfo }); var u = ""; for (var _i = 0, _e = e; _i < _e.length; _i++) { var O = _e[_i]; u += "
".concat(O.key, ": ").concat(O.value, "
"); } this._displayElement.innerHTML = u; } }, { key: "onStats", value: function onStats(e) { var _this4 = this; var n; if (!e) return; var t = {}, r = this; r._aggregatedStats || (r._aggregatedStats = {}), t.timestamp = e.timestamp, t.mediaBytesReceived = e.mediaBytesReceived, t.metaBytesReceived = e.metaBytesReceived, t.packetsLost = e.packetsLost, t.frameHeight = e.frameHeight, t.frameWidth = e.frameWidth, t.framesReceivedUI = e.framesReceived, t.framesReceived = e.framesReceivedWorker, t.framesDecoded = e.framesDecoded, t.framesEmited = e.framesEmited, t.decodeTimePerFrame = e.decodeTimePerFrame, t.decodeTimeMaxFrame = e.decodeTimeMaxFrame, t.packetsDrop = e.packetsDrop, t.framesAwait = e.framesAwait, t.updateDropFrame = e.updateDropFrame, t.firstMediaArraval = e.firstMediaArraval, t.firstYUVDecoded = e.firstYUVDecoded, t.firstRender = e.firstRender, t.returnFrames = e.returnFrames, t.sendOutBuffer = e.sendOutBuffer, t.averageGraphicTime = e.averageGraphicTime, t.maxGraphicTime = e.maxGraphicTime, t.jankTimes = e.jankTimes, t.bigJankTimes = e.bigJankTimes, t.decodeJankTimes = e.decodeJankTimes, t.bigDecodeJankTimes = e.bigDecodeJankTimes, t.serverFrameFast = e.serverFrameFast, t.serverFrameSlow = e.serverFrameSlow, t.clientFrameFast = e.clientFrameFast, t.clientFrameSlow = e.clientFrameSlow, t.rtcMessageReceived = e.rtcMessageReceived, t.rtcBytesReceived = e.rtcBytesReceived, t.receiveIframes = e.receiveIframes, t.decodeIframes = e.decodeIframes, t.avgResponseTime = e.avgResponseTime, t.avgProcessTime = e.avgProcessTime, t.avgDisplayTime = e.avgDisplayTime, t.avgOverallTime = e.avgOverallTime, t.overallTimeCount = e.overallTimeCount, t.responseMiss = e.responseMiss, t.processMiss = e.processMiss, t.displayMiss = e.displayMiss, t.avgResponseMoveDiff = e.avgResponseMoveDiff, t.avgProcessMoveDiff = e.avgProcessMoveDiff, t.avgDisplayMoveDiff = e.avgDisplayMoveDiff, t.maxResponseMoveDiff = e.maxResponseMoveDiff, t.maxProcessMoveDiff = e.maxProcessMoveDiff, t.maxDisplayMoveDiff = e.maxDisplayMoveDiff, t.moveResponseDelay = e.moveResponseDelay, t.moveProcessDelay = e.moveProcessDelay, t.moveDisplayDelay = e.moveDisplayDelay, t.moveResponseJank = e.moveResponseJank, t.moveProcessJank = e.moveProcessJank, t.moveDisplayJank = e.moveDisplayJank, t.avgMetaParseTime = e.avgMetaParseTime, t.maxMetaParseTime = e.maxMetaParseTime, t.moveResponseCounts = e.moveResponseCounts, t.moveProcessCounts = e.moveProcessCounts, t.moveDisplayCounts = e.moveDisplayCounts, t.MoveDisplayCountGood = e.MoveDisplayCountGood, t.MoveDisplayCountWell = e.MoveDisplayCountWell, t.MoveDisplayCountFair = e.MoveDisplayCountFair, t.MoveDisplayCountBad = e.MoveDisplayCountBad, t.MoveDisplayCountRest = e.MoveDisplayCountRest, t.avgServerDiff = e.avgServerDiff, t.maxServerDiff = e.maxServerDiff, t.avgResponseFlyDiff = e.avgResponseFlyDiff, t.avgProcessFlyDiff = e.avgProcessFlyDiff, t.avgDisplayFlyDiff = e.avgDisplayFlyDiff, t.maxResponseFlyDiff = e.maxResponseFlyDiff, t.maxProcessFlyDiff = e.maxProcessFlyDiff, t.maxDisplayFlyDiff = e.maxDisplayFlyDiff, t.flyResponseCounts = e.flyResponseCounts, t.flyProcessCounts = e.flyProcessCounts, t.flyDisplayCounts = e.flyDisplayCounts, t.flyResponseJank = e.flyResponseJank, t.flyProcessJank = e.flyProcessJank, t.flyDisplayJank = e.flyDisplayJank, t.flyResponseDelay = e.flyResponseDelay, t.flyProcessDelay = e.flyProcessDelay, t.flyDisplayDelay = e.flyDisplayDelay, t.moveEvent = e.moveEvent, t.sdMoveResponseLongTime = e.sdMoveResponseLongTime, t.sdMoveProcessLongTime = e.sdMoveProcessLongTime, t.sdMoveDisplayLongTime = e.sdMoveDisplayLongTime, r._aggregatedStats && r._aggregatedStats.timestamp && (t.mediaBitrate = 8 * (t.mediaBytesReceived - r._aggregatedStats.mediaBytesReceived) / 1e3, t.mediaBitrate = Math.round(t.mediaBitrate || 0), t.metaBitrate = 8 * (t.metaBytesReceived - r._aggregatedStats.metaBytesReceived) / 1e3, t.metaBitrate = Math.round(t.metaBitrate || 0), t.rtcMessagePs = t.rtcMessageReceived - r._aggregatedStats.rtcMessageReceived, t.rtcBitrate = 8 * (t.rtcBytesReceived - r._aggregatedStats.rtcBytesReceived) / 1e3, t.rtcBitrate = Math.round(t.rtcBitrate || 0), t.framesEmitedPs = t.framesEmited - r._aggregatedStats.framesEmited, t.framesEmitedPs = Math.round(t.framesEmitedPs || 0), t.framesReceivedPs = t.framesReceived - r._aggregatedStats.framesReceived, t.framesReceivedPs = Math.round(t.framesReceivedPs || 0), t.framesDecodedPs = t.framesDecoded - r._aggregatedStats.framesDecoded, t.framesDecodedPs = Math.round(t.framesDecodedPs || 0), t.returnFramesPs = t.returnFrames - r._aggregatedStats.returnFrames, t.returnFramesPs = Math.round(t.returnFramesPs || 0), t.responseMissPs = t.responseMiss - r._aggregatedStats.responseMiss, t.processMissPs = t.processMiss - r._aggregatedStats.processMiss, t.displayMissPs = t.displayMiss - r._aggregatedStats.displayMiss, t.returnFrames = e.returnFrames), this._show && this._render(), t.registerBeforeRenderTime = this._extraStats.registerBeforeRenderTime, t.registerAfterRenderTime = this._extraStats.registerAfterRenderTime, t.renderTargetRenderTime = this._extraStats.renderTargetRenderTime, t.renderFrameTime = this._extraStats.renderFrameTime, t.maxRenderFrameTime = this._extraStats.maxRenderFrameTime, t.interFrameTime = this._extraStats.interFrameTime, t.animationTime = this._extraStats.animationTime, t.meshSelectTime = this._extraStats.meshSelectTime, t.drawcall = this._extraStats.drawcall, t.drawcallTime = this._extraStats.drawcallTime, t.triangle = this._extraStats.triangle, t.registerAfterCount = this._extraStats.registerAfterCount, t.registerBeforeCount = this._extraStats.registerBeforeCount, t.fps = this._extraStats.fps, t.rtt = this._extraStats.rtt, t.hb = this._extraStats.hb, t.avgFrameTime = this._extraStats.avgFrameTime, t.avgTimeoutTime = this._extraStats.avgTimeoutTime, t.engineSloppyCnt = this._extraStats.engineSloppyCnt, t.systemStuckCnt = this._extraStats.systemStuckCnt, t.avatarState = (n = this.room._userAvatar) == null ? void 0 : n.state, t.maxFrameTime = this._extraStats.maxFrameTime, t.maxTimeoutTime = this._extraStats.maxTimeoutTime, t.activeParticles = this._extraStats.activeParticles, t.activeBones = this._extraStats.activeBones, t.activeAnimation = this._extraStats.activeAnimation, t.totalRootNodes = this._extraStats.totalRootNodes, t.totalGeometries = this._extraStats.totalGeometries, t.totalMeshes = this._extraStats.totalMeshes, t.totalTextures = this._extraStats.totalTextures, t.totalMaterials = this._extraStats.totalMaterials, t.hardwareInfo = this._extraStats.hardwareInfo, t.maxInterFrameTime = this._extraStats.maxInterFrameTime, t.maxDrawcallTime = this._extraStats.maxDrawcallTime, t.maxMeshSelectTime = this._extraStats.maxMeshSelectTime, t.maxAnimationTime = this._extraStats.maxAnimationTime, t.maxRegisterBeforeRenderTime = this._extraStats.maxRegisterBeforeRenderTime, t.maxRegisterAfterRenderTime = this._extraStats.maxRegisterAfterRenderTime, t.maxRenderTargetRenderTime = this._extraStats.maxRenderTargetRenderTime, this.externalStats && Object.keys(this.externalStats || {}).forEach(function (o) { t[o] = _this4.externalStats[o]; }), r._aggregatedStats = t, this.emit("stats", { stats: t }); } }]); return Stats; }(EventEmitter); function _createSuper$b(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$b(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$b() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var EventsManager = /*#__PURE__*/function (_EventEmitter) { _inherits(EventsManager, _EventEmitter); var _super = _createSuper$b(EventsManager); function EventsManager() { var _this; _classCallCheck(this, EventsManager); _this = _super.apply(this, arguments); E(_assertThisInitialized(_this), "events", new Map()); E(_assertThisInitialized(_this), "specialEvents", new Map()); return _this; } _createClass(EventsManager, [{ key: "remove", value: function remove(e, t, r, n) { if (this.specialEvents.has(e) && !n && t === Codes.Success) return; this.events.get(e) && (this.emit(e, { code: t, data: r }), this.events.delete(e), this.specialEvents.delete(e)); } }, { key: "track", value: function () { var _track = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e, t) { var _this2 = this; var r, _ref, n, _ref$noReport, o, a, s, l, u, c; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: r = e.traceId; this.emitTraceIdToDecoder(e); _ref = t || {}, n = _ref.sampleRate, _ref$noReport = _ref.noReport, o = _ref$noReport === void 0 ? !1 : _ref$noReport, a = _ref.special; if (!(n && Math.random() > n)) { _context.next = 5; break; } return _context.abrupt("return", Promise.resolve()); case 5: s = Actions[e.event] + "Action", l = e.tag; this.events.set(r, !0), a && this.specialEvents.set(r, !0); u = Date.now(); c = null; return _context.abrupt("return", new Promise(function (h, f) { if (o) return _this2.off(r), _this2.events.delete(r), h(void 0); _this2.on(r, function (_ref2) { var _ = _ref2.code, g = _ref2.data, m = _ref2.msg; if (_ === Codes.Success) h(g), _this2.off(r), logger$1.infoAndReportMeasurement({ metric: s, tag: l, extra: e.extra, startTime: u, traceId: r });else { if (_ === Codes.ActionMaybeDelay) return; if (_ === Codes.DoActionBlocked && e.event === Actions.Rotation) { logger$1.debug(s + " response code: " + _); return; } var v = util.getErrorByCode(_), y = new v(m); _this2.off(r), f(y), _this2.emit("actionResponseError", { error: y, event: e, tag: l }), logger$1.infoAndReportMeasurement({ metric: s, tag: l, extra: e.extra, error: y, startTime: u, traceId: r }); } }); var d = e.timeout || 2e3; c = window.setTimeout(function () { if (c && clearTimeout(c), !_this2.events.get(r)) return; var _ = new ActionResponseTimeoutError("".concat(s, " timeout in ").concat(d, "ms")); _this2.emit("actionResponseTimeout", { error: _, event: e, tag: l }), f(_), _this2.events.delete(r), _this2.off(r), logger$1.infoAndReportMeasurement({ metric: s, tag: l, extra: e.extra, error: _, startTime: u, traceId: r }); }, d); })); case 10: case "end": return _context.stop(); } } }, _callee, this); })); function track(_x, _x2) { return _track.apply(this, arguments); } return track; }() }, { key: "emitTraceIdToDecoder", value: function emitTraceIdToDecoder(e) { if (e.event === Actions.Rotation || e.event === Actions.Clicking || e.event === Actions.GetOnVehicle || e.event === Actions.GetOffVehicle) { var t = { [Actions.Rotation]: "Rotation", [Actions.GetOnVehicle]: "GetOnVehicle", [Actions.GetOffVehicle]: "GetOffVehicle", [Actions.Clicking]: "MoveTo" }; this.emit("traceId", { traceId: e.traceId, timestamp: Date.now(), event: t[e.event] }); } } }]); return EventsManager; }(EventEmitter); var eventsManager = new EventsManager(); var ClickType = { Screen: 0, ThreeDimension: 1, ThreeDimensionQuick: 2, IgnoreView: 3 }; var QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle]; var ActionsHandler = /*#__PURE__*/function () { function ActionsHandler(e) { _classCallCheck(this, ActionsHandler); this.currentActiveAction = null; this.room = e; } _createClass(ActionsHandler, [{ key: "avatarComponentsSync", value: function () { var _avatarComponentsSync = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = { action_type: Actions.SetPlayerState, set_player_state_action: { player_state: { avatar_components: JSON.stringify(e) } } }; this.sendData({ data: t }); case 2: case "end": return _context.stop(); } } }, _callee, this); })); function avatarComponentsSync(_x) { return _avatarComponentsSync.apply(this, arguments); } return avatarComponentsSync; }() }, { key: "sendData", value: function () { var _sendData = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e) { var _this = this; var t, _e$sampleRate, r, _e$timeout, n, o, a, s; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.beforeSend(e); case 2: t = util.uuid(); if (!(this.room.networkController.sendRtcData(le(oe({}, e.data), { trace_id: t, user_id: this.room.options.userId })), e.track === !1)) { _context2.next = 5; break; } return _context2.abrupt("return", Promise.resolve(null)); case 5: _e$sampleRate = e.sampleRate, r = _e$sampleRate === void 0 ? 1 : _e$sampleRate, _e$timeout = e.timeout, n = _e$timeout === void 0 ? 2e3 : _e$timeout, o = e.tag, a = e.data, s = e.special; return _context2.abrupt("return", eventsManager.track({ timeout: n, traceId: t, event: a.action_type, tag: o, extra: a }, { special: s, sampleRate: r, noReport: this.room.viewMode === "serverless" || this.room.options.viewMode === "serverless" }).finally(function () { QueueActions.includes(e.data.action_type) && (_this.currentActiveAction = void 0); })); case 7: case "end": return _context2.stop(); } } }, _callee2, this); })); function sendData(_x2) { return _sendData.apply(this, arguments); } return sendData; }() }, { key: "beforeSend", value: function () { var _beforeSend = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var o, t, r; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: t = (o = this.room._userAvatar) == null ? void 0 : o.isMoving, r = e.data.action_type; if (!QueueActions.includes(r)) { _context3.next = 5; break; } if (!this.currentActiveAction) { _context3.next = 4; break; } return _context3.abrupt("return", (logger$1.error("".concat(Actions[this.currentActiveAction], " still pending, reject ").concat(Actions[r])), Promise.reject(new FrequencyLimitError("".concat(Actions[r], " action request frequency limit"))))); case 4: this.currentActiveAction = r; case 5: if (!(t && QueueActions.includes(e.data.action_type))) { _context3.next = 14; break; } _context3.prev = 6; _context3.next = 9; return this.stopMoving(); case 9: _context3.next = 14; break; case 11: _context3.prev = 11; _context3.t0 = _context3["catch"](6); this.currentActiveAction = void 0, logger$1.error("before action stopMoving failed", _context3.t0); case 14: case "end": return _context3.stop(); } } }, _callee3, this, [[6, 11]]); })); function beforeSend(_x3) { return _beforeSend.apply(this, arguments); } return beforeSend; }() }, { key: "moveTo", value: function () { var _moveTo = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) { var t, _e$extra, r, n, o; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: t = e.point, _e$extra = e.extra, r = _e$extra === void 0 ? "" : _e$extra, n = e.motionType, o = { action_type: Actions.Clicking, clicking_action: { clicking_point: t, clicking_type: ClickType.IgnoreView, extra: encodeURIComponent(r), attitude: n }, clicking_state: this.room._currentClickingState }; return _context4.abrupt("return", this.sendData({ data: o })); case 2: case "end": return _context4.stop(); } } }, _callee4, this); })); function moveTo(_x4) { return _moveTo.apply(this, arguments); } return moveTo; }() }, { key: "transfer", value: function transfer(e) { var _this2 = this; var t = e.renderType, r = e.player, n = e.camera, o = e.areaName, a = e.attitude, s = e.pathName, l = e.person, u = e.noMedia, c = e.timeout, h = e.tag, f = e.special, d = { data: { action_type: Actions.Transfer, transfer_action: { render_type: t, player: r, camera: n, areaName: o, attitude: a, pathName: s, person: { type: l }, noMedia: u, tiles: [0, 1, 2, 4] } }, special: f, timeout: c || 4e3, tag: h }; return this.sendData(d).then(function (_) { return typeof l != "undefined" && _this2.room.updateCurrentNetworkOptions({ person: l, rotationRenderType: t }), _; }); } }, { key: "changeRotationRenderType", value: function changeRotationRenderType(e) { var t = e.renderType, r = e.player, n = e.camera, o = e.areaName, a = e.attitude, s = e.pathName; return this.transfer({ renderType: t, player: r, camera: n, areaName: o, attitude: a, pathName: s, tag: "changeToRotationVideo" }); } }, { key: "requestPanorama", value: function requestPanorama(e, t, r) { var n = e.camera, o = e.player, a = e.areaName, s = e.attitude, l = e.pathName, u = e.tag; return this.transfer({ renderType: RenderType.ClientRotationPano, player: o, camera: n, person: Person.First, areaName: a, attitude: s, pathName: l, noMedia: t, timeout: r, tag: u || "requestPanorama", special: !t }); } }, { key: "setMotionType", value: function setMotionType(e) { return this.transfer({ attitude: e, tag: "setMotionType" }); } }, { key: "setNickName", value: function setNickName(e) { var t = { action_type: Actions.ChangeNickname, change_nickname_action: { nickname: e } }; return this.sendData({ data: t }); } }, { key: "getReserveSeat", value: function getReserveSeat(_ref) { var e = _ref.routeId, t = _ref.name; var r = { action_type: Actions.ReserveSeat, reserve_seat_action: { route_id: e, name: t } }; return this.sendData({ data: r }); } }, { key: "getReserveStatus", value: function getReserveStatus(_ref2) { var e = _ref2.routeId, t = _ref2.name, r = _ref2.need_detail; var n = { action_type: Actions.GetReserveStatus, get_reserve_status_action: { route_id: e, name: t, need_detail: r } }; return this.sendData({ data: n, timeout: 2e3 }).then(function (o) { return o.reserveDetail; }); } }, { key: "stopMoving", value: function stopMoving() { var e = { action_type: Actions.StopMoving, stop_move_action: {} }; return this.sendData({ data: e }); } }, { key: "getOnVehicle", value: function getOnVehicle(_ref3) { var e = _ref3.routeId, t = _ref3.name, r = _ref3.camera; var n = { action_type: Actions.GetOnVehicle, get_on_vehicle_action: { route_id: e, name: t, camera: r } }; return this.sendData({ data: n }); } }, { key: "getOffVehicle", value: function getOffVehicle(_ref4) { var e = _ref4.renderType, t = _ref4.player, r = _ref4.camera; var n = { action_type: Actions.GetOffVehicle, get_off_vehicle_action: { render_type: e, player: t, camera: r } }; return this.sendData({ data: n }); } }, { key: "confirmEvent", value: function confirmEvent(e) { var t = { action_type: Actions.ConfirmEvent, confirm_event_action: { id: e } }; return this.sendData({ data: t, track: !1 }); } }, { key: "echo", value: function echo(e) { var t = { action_type: Actions.Echo, echo_msg: { echoMsg: e } }; return this.sendData({ data: t, track: !1 }); } }, { key: "changeSkin", value: function () { var _changeSkin = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e) { var _this3 = this; var t, r, n, _e$landingType, o, a, s, l, u, c, h, f, d, _, _e$roomTypeId, g, m, y, v; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: t = e.special === void 0 ? e.renderType === RenderType.ClientRotationPano : e.special, r = e.skinId, n = e.mode, _e$landingType = e.landingType, o = _e$landingType === void 0 ? LandingType.Stay : _e$landingType, a = e.landingPoint, s = e.landingCamera, l = e.renderType, u = e.areaName, c = e.attitude, h = e.pathName, f = e.person, d = e.noMedia, _ = e.timeout, _e$roomTypeId = e.roomTypeId, g = _e$roomTypeId === void 0 ? "" : _e$roomTypeId, m = this.room.skinList.filter(function (y) { return y.id === r; })[0]; if (m) { _context6.next = 4; break; } y = "skin ".concat(r, " is invalid"); return _context6.abrupt("return", (logger$1.error(y), Promise.reject(new ParamError(y)))); case 4: v = { action_type: Actions.ChangeSkin, change_skin_action: { skinID: r, mode: n === ChangeMode.Preview ? ChangeMode.Preview : ChangeMode.Confirm, skin_data_version: r + m.versionId, landing_type: o, landing_point: a, landing_camera: s, render_wrapper: { render_type: l }, areaName: u, attitude: c, noMedia: d, person: f, pathName: h, roomTypeId: g } }; return _context6.abrupt("return", this.sendData({ data: v, timeout: _ || 6e3, special: t }).then( /*#__PURE__*/function () { var _ref5 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(y) { var b, _ref6, T; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: if (!(l === RenderType.ClientRotationPano && y)) { _context5.next = 8; break; } _context5.next = 3; return _this3.room.modelManager.findRoute(r, h); case 3: b = _context5.sent; _ref6 = util.getRandomItem(b.birthPointList) || {}; T = _ref6.camera; _context5.next = 8; return _this3.room.panorama.handleReceivePanorama(y, T); case 8: return _context5.abrupt("return", _this3.handleChangeSkin(e)); case 9: case "end": return _context5.stop(); } } }, _callee5); })); return function (_x6) { return _ref5.apply(this, arguments); }; }()).catch(function (y) { return d ? _this3.handleChangeSkin(e) : Promise.reject(y); })); case 6: case "end": return _context6.stop(); } } }, _callee6, this); })); function changeSkin(_x5) { return _changeSkin.apply(this, arguments); } return changeSkin; }() }, { key: "handleChangeSkin", value: function handleChangeSkin(e) { var _this4 = this; var t = e.skinId, r = e.mode, n = e.renderType, o = e.areaName, a = e.attitude, s = e.pathName; return this.room.sceneManager.staticmeshComponent.getCgMesh().show(), this.room.sceneManager.cameraComponent.switchToCgCamera(), this.room.engineProxy._updateSkinAssets(t).then(function () { _this4.room.sceneManager.staticmeshComponent.getCgMesh().hide(), _this4.room.sceneManager.cameraComponent.switchToMainCamera(), _this4.room.pathManager.currentArea = o, logger$1.info("changeSkin _updateSkinAssets susccss"), _this4.room.updateCurrentNetworkOptions({ pathName: s, attitude: a, areaName: o }), _this4.room.skinChangedHook(), _this4.room.emit("skinChanged", { skin: { id: t }, mode: r }), n === RenderType.ClientRotationPano && _this4.room.sceneManager.cameraComponent.allowMainCameraController(); }); } }, { key: "rotate", value: function rotate(_ref7) { var e = _ref7.pitch, t = _ref7.yaw; var n; if (this.room.disableRotate || this.room.isPano || ((n = this.room._userAvatar) == null ? void 0 : n._isChangingComponentsMode)) return; var r = { action_type: Actions.Rotation, rotation_action: { vertical_move: e, horizontal_move: -t } }; this.sendData({ data: r, sampleRate: .02 }); } }, { key: "turnTo", value: function turnTo(e) { var _ref8 = e || {}, t = _ref8.point, _ref8$timeout = _ref8.timeout, r = _ref8$timeout === void 0 ? 2e3 : _ref8$timeout, _ref8$offset = _ref8.offset, n = _ref8$offset === void 0 ? 8 : _ref8$offset, o = { action_type: Actions.TurnTo, turn_to_action: { turn_to_point: t, offset: n } }; return this.sendData({ data: o, timeout: r }); } }, { key: "rotateTo", value: function rotateTo(e) { var _ref9 = e || {}, t = _ref9.point, _ref9$offset = _ref9.offset, r = _ref9$offset === void 0 ? 0 : _ref9$offset, _ref9$speed = _ref9.speed, n = _ref9$speed === void 0 ? 3 : _ref9$speed, o = { action_type: Actions.RotateTo, rotate_to_action: { rotate_to_point: t, offset: r, speed: n } }; return this.sendData({ data: o }); } }, { key: "broadcast", value: function broadcast(e) { var t = e.data, _e$msgType = e.msgType, r = _e$msgType === void 0 ? MessageHandleType.MHT_FollowListMulticast : _e$msgType, n = e.targetUserIds; if (r === MessageHandleType.MHT_CustomTargetSync && !Array.isArray(n)) return Promise.reject(new ParamError("param targetUserIds is required when msgType is ".concat(MessageHandleType[r]))); var o = { action_type: Actions.Broadcast, broadcast_action: { data: JSON.stringify(t), user_id: this.room.options.userId, msgType: r } }; return Array.isArray(n) && r === MessageHandleType.MHT_CustomTargetSync && (o.broadcast_action.target_user_ids = n), this.room.actionsHandler.sendData({ data: o, tag: t.broadcastType }); } }, { key: "getNeighborPoints", value: function getNeighborPoints(e) { var t = e.point, _e$containSelf = e.containSelf, r = _e$containSelf === void 0 ? !1 : _e$containSelf, _e$searchRange = e.searchRange, n = _e$searchRange === void 0 ? 500 : _e$searchRange, o = { action_type: Actions.GetNeighborPoints, get_neighbor_points_action: { point: t, level: 1, containSelf: r, searchRange: n } }; return this.sendData({ data: o }).then(function (a) { return a.nps; }); } }, { key: "playCG", value: function playCG(e) { var t = { action_type: Actions.PlayCG, play_cg_action: { cg_name: e } }; return this.sendData({ data: t }); } }, { key: "audienceToVisitor", value: function audienceToVisitor(e) { var t = e.avatarId, r = e.avatarComponents, n = e.player, o = e.camera, a = { action_type: Actions.AudienceChangeToVisitor, audienceChangeToVisitorAction: { avatarID: t, avatarComponents: r, player: n, camera: o } }; return logger$1.debug("send data: audience to visitor"), this.sendData({ data: a }); } }, { key: "visitorToAudience", value: function visitorToAudience(e) { var t = e.renderType, r = e.player, n = e.camera, o = e.areaName, a = e.attitude, s = e.pathName, l = e.person, u = e.noMedia, c = { action_type: Actions.VisitorChangeToAudience, visitorChangeToAudienceAction: { transferAction: { render_type: t, player: r, camera: n, areaName: o, attitude: a, pathName: s, person: { type: l }, noMedia: u, tiles: [0, 1, 2, 4] } } }; return logger$1.debug("send data: visitor to audience"), this.sendData({ data: c }); } }, { key: "removeVisitor", value: function removeVisitor(e) { var t = e.removeType, r = e.userIDList, _e$extraInfo = e.extraInfo, n = _e$extraInfo === void 0 ? "" : _e$extraInfo, o = { action_type: Actions.RemoveVisitor, removeVisitorAction: { removeVisitorEvent: t, userIDList: r, extraInfo: encodeURIComponent(n) } }; return logger$1.debug("send data: remove visitor"), this.sendData({ data: o }); } }, { key: "getUserWithAvatar", value: function getUserWithAvatar(e, t) { var r = { action_type: Actions.GetUserWithAvatar, getUserWithAvatarAction: { userType: e, roomID: t } }; return logger$1.debug("send data: get user with avatar"), this.sendData({ data: r }).then(function (n) { return n.userWithAvatarList; }); } }, { key: "joystick", value: function joystick(e) { var t = e.degree, _e$level = e.level, r = _e$level === void 0 ? 1 : _e$level, n = util.uuid(); var o = -t + 90 + 360; o >= 360 && (o -= 360); var a = { action_type: Actions.Joystick, dir_action: { move_angle: o, speed_level: r }, trace_id: n, user_id: this.room.options.userId, packet_id: n }; return this.sendData({ data: a, track: !1 }); } }]); return ActionsHandler; }(); var ECurrentShaderMode = { default: 0, video: 1, pano: 2 }; var PointType = { Path: 0, Item: 1, Closeup: 2, NoValidMatched: 3 }; var Signal = /*#__PURE__*/function () { function Signal(e) { _classCallCheck(this, Signal); this.signalHandleActived = !0; this.isUpdatedYUV = !0; this._room = e; } _createClass(Signal, [{ key: "handleSignal", value: function handleSignal(e) { var _this = this; var a, s, l; if (!this.signalHandleActived) return; var t = e.signal, r = e.alreadyUpdateYUV; if (this.handleActionResponses(t), this._room.handleSignalHook(t), !r) { var u = (a = t.newUserStates) == null ? void 0 : a.find(function (c) { return c.userId === _this._room.userId; }); if ((u == null ? void 0 : u.renderInfo) && ((s = this._room._userAvatar) == null ? void 0 : s.isMoving)) { logger$1.debug("stream stoped, make avatar to stop"); var _u$renderInfo = u.renderInfo, c = _u$renderInfo.isMoving, h = _u$renderInfo.isRotating; this._room.avatarManager._updateAvatarMovingStatus({ id: u.userId, isMoving: !!c, isRotating: !!h }); } return; } this.isUpdatedYUV = r; var n = t; if (!t) { logger$1.warn("metadata signal is empty"); return; } if (n.code === Codes.RepeatLogin) { this._room.handleRepetLogin(); return; } n.code !== void 0 && n.code !== Codes.Success && n.code !== Codes.ActionMaybeDelay && n.code !== Codes.DoActionBlocked && n.code !== Codes.GetOnVehicle && (logger$1.error("signal errcode: ", n), this._room.emit("error", n)); var o = (l = n.newUserStates) == null ? void 0 : l.find(function (u) { return u.userId === _this._room.userId; }); if (n.broadcastAction) try { var _u = JSON.parse(n.broadcastAction.data); Broadcast.handlers.forEach(function (c) { return c(_u); }); } catch (u) { logger$1.error(u); } if (n.newUserStates && n.newUserStates.length > 0 && this._room.avatarManager.handleAvatar(n), o != null && o.playerState) { this._room._currentClickingState = o.playerState; var _o$playerState = o.playerState, _u2 = _o$playerState.pathName, _c = _o$playerState.attitude, _h = _o$playerState.areaName, f = _o$playerState.skinId; if (_u2 && (this._room.pathManager.currentPathName = _u2, this._room.updateCurrentState({ pathName: _u2 })), f && this.udpateSkinInfo(f), _h && this._room.updateCurrentState({ areaName: _h }), _c) { var d = this._room.skin.routeList.find(function (g) { return g.areaName === _this._room.currentState.areaName; }), _ = ((d == null ? void 0 : d.step) || 7.5) * 30; this._room.updateCurrentState({ speed: _, attitude: _c }), this._room.pathManager.currentAttitude = _c, this._room._userAvatar && (this._room._userAvatar.motionType = _c); } this._room.sceneManager.getCurrentShaderMode() !== ECurrentShaderMode.pano && !this._room.isPano && o.playerState.camera && this._room.camera.setCameraPose(o.playerState.camera); } if (o != null && o.renderInfo && this._room.camera.handleRenderInfo(o), n.actionType !== void 0) { var _u3 = n.actionType, _c2 = n.code, _h2 = n.echoMsg, _f = n.traceId; _u3 === Actions.Echo && _c2 === Codes.Success && this._room.networkController.rtcp.heartbeat.pong(_h2, _f), _c2 !== Codes.Success ? eventsManager.remove(_f, _c2) : [Actions.GetReserveStatus, Actions.Broadcast, Actions.ChangeNickname, Actions.ConfirmEvent, Actions.ReserveSeat, Actions.Rotation, Actions.TurnTo, Actions.RotateTo, Actions.SetPlayerState, Actions.GetNeighborPoints, Actions.TurnToFace, Actions.AudienceChangeToVisitor, Actions.RemoveVisitor, Actions.GetUserWithAvatar].includes(_u3) && eventsManager.remove(_f, _c2, n); } } }, { key: "handleActionResponses", value: function handleActionResponses(e) { var _this2 = this; !(e != null && e.actionResponses) || e.actionResponses.length === 0 || e.actionResponses.forEach(function (t) { if (t.actionType == null) return; var r = t.pointType, n = t.extra, o = t.actionType, a = t.traceId, s = t.code, l = t.msg; o === Actions.GetNeighborPoints ? eventsManager.remove(a, s, t.nps) : o === Actions.GetUserWithAvatar ? eventsManager.remove(a, s, t.userWithAvatarList) : eventsManager.remove(a, s, l), r === PointType.Path && o === Actions.Clicking && (_this2._room.moveToExtra = decodeURIComponent(n)); }); } }, { key: "udpateSkinInfo", value: function () { var _udpateSkinInfo = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: this._room.updateCurrentState({ skinId: e }); _context.next = 3; return this._room.skinList.find(function (r) { return r.id === e; }); case 3: t = _context.sent; t && this._room.updateCurrentState({ skin: t }); case 5: case "end": return _context.stop(); } } }, _callee, this); })); function udpateSkinInfo(_x) { return _udpateSkinInfo.apply(this, arguments); } return udpateSkinInfo; }() }]); return Signal; }(); function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$a() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var XverseEffectManager = /*#__PURE__*/function (_EventEmitter) { _inherits(XverseEffectManager, _EventEmitter); var _super = _createSuper$a(XverseEffectManager); function XverseEffectManager(e) { var _this; _classCallCheck(this, XverseEffectManager); _this = _super.call(this); E(_assertThisInitialized(_this), "effects", new Map()); E(_assertThisInitialized(_this), "room"); _this.room = e; return _this; } _createClass(XverseEffectManager, [{ key: "addEffect", value: function () { var _addEffect = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var o, t, r, _e$type, n, a; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = e.jsonPath, r = e.id, _e$type = e.type, n = _e$type === void 0 ? IEffectType.SubSequence : _e$type; _context.prev = 1; this.effects.get(r) && ((o = this.effects.get(r)) == null || o.dispose()); a = new Ae.subEffect({ id: r, jsonPath: t, type: n, room: this.room }); this.effects.set(r, a); _context.next = 7; return a.init(); case 7: return _context.abrupt("return", a); case 10: _context.prev = 10; _context.t0 = _context["catch"](1); return _context.abrupt("return", (this.effects.delete(r), logger$1.error(_context.t0), Promise.reject(_context.t0))); case 13: case "end": return _context.stop(); } } }, _callee, this, [[1, 10]]); })); function addEffect(_x) { return _addEffect.apply(this, arguments); } return addEffect; }() }, { key: "clearEffects", value: function clearEffects() { var _this2 = this; this.effects.forEach(function (e) { e.dispose(), _this2.effects.delete(e.id); }); } }, { key: "removeEffect", value: function removeEffect(e) { var t = this.effects.get(e); t == null || t.dispose(), t && this.effects.delete(t.id); } }]); return XverseEffectManager; }(EventEmitter); var Heartbeat = /*#__PURE__*/function () { function Heartbeat(e) { var _this = this; _classCallCheck(this, Heartbeat); E(this, "_interval", null); E(this, "ping", function () { var e = Date.now().toString(); _this.handler.ping(e); }); this.handler = e; } _createClass(Heartbeat, [{ key: "ping", value: function ping() { var e = Date.now().toString(); this.handler.ping(e); } }, { key: "start", value: function start() { this.stop(), logger$1.debug("Setting ping interval to ".concat(PING_INTERVAL_MS, "ms")), this._interval = window.setInterval(this.ping, PING_INTERVAL_MS); } }, { key: "stop", value: function stop() { logger$1.debug("stop heartbeat"), this._interval && window.clearInterval(this._interval); } }, { key: "pong", value: function pong(e, t) { !e || typeof e == "string" && this.handler.pong(Date.now() - Number(e), t); } }]); return Heartbeat; }(); var Timeout$1 = /*#__PURE__*/function () { function Timeout(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !0; _classCallCheck(this, Timeout); this._timeout = null; this._fn = e, this._delay = t, r && this.start(); } _createClass(Timeout, [{ key: "delay", get: function get() { return this._delay; } }, { key: "isSet", get: function get() { return !!this._timeout; } }, { key: "setDelay", value: function setDelay(e) { this._delay = e; } }, { key: "start", value: function start() { var _this = this; this.isSet || (this._timeout = window.setTimeout(function () { var e = _this._fn; _this.clear(), e(); }, this._delay)); } }, { key: "clear", value: function clear() { window.clearTimeout(this._timeout), this._timeout = void 0; } }, { key: "reset", value: function reset() { this.clear(), this.start(); } }]); return Timeout; }(); function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Socket = /*#__PURE__*/function (_EventEmitter) { _inherits(Socket, _EventEmitter); var _super = _createSuper$9(Socket); function Socket(e) { var _this; _classCallCheck(this, Socket); _this = _super.call(this); E(_assertThisInitialized(_this), "_ws"); E(_assertThisInitialized(_this), "_openTimer"); E(_assertThisInitialized(_this), "connected", !1); E(_assertThisInitialized(_this), "_hasTimeout", !1); E(_assertThisInitialized(_this), "heartbeat"); E(_assertThisInitialized(_this), "latency", function (e, t) { return _this.send({ id: "checkLatency", data: JSON.stringify(e), packet_id: t }); }); E(_assertThisInitialized(_this), "send", function (e) { if (_this.wsNoReady()) return; var t = JSON.stringify(e); e.id !== "heartbeat" && logger$1.info("send ws frame", t), _this._ws.send(t); }); E(_assertThisInitialized(_this), "startGame", function () { var _this$network$room$cu = _this.network.room.currentNetworkOptions, e = _this$network$room$cu.roomId, t = _this$network$room$cu.userId, r = _this$network$room$cu.avatarId, n = _this$network$room$cu.skinId, o = _this$network$room$cu.role, a = _this$network$room$cu.avatarComponents, s = _this$network$room$cu.versionId, l = _this$network$room$cu.rotationRenderType, u = _this$network$room$cu.isAllSync, c = _this$network$room$cu.nickname, h = _this$network$room$cu.avatarScale, f = _this$network$room$cu.appId, d = _this$network$room$cu.camera, _ = _this$network$room$cu.player, g = _this$network$room$cu.firends, m = _this$network$room$cu.syncByEvent, v = _this$network$room$cu.areaName, y = _this$network$room$cu.attitude, b = _this$network$room$cu.pathName, T = _this$network$room$cu.person, _this$network$room$cu2 = _this$network$room$cu.roomTypeId, C = _this$network$room$cu2 === void 0 ? "" : _this$network$room$cu2, A = _this$network$room$cu.syncToOthers, S = _this$network$room$cu.hasAvatar, P = _this$network$room$cu.prioritySync, _this$network$room$cu3 = _this$network$room$cu.extra, R = _this$network$room$cu3 === void 0 ? {} : _this$network$room$cu3, M = _this$network$room$cu.removeWhenDisconnected; R.removeWhenDisconnected = M; var x = { id: "start", room_id: e, user_id: t, trace_id: util.uuid(), data: JSON.stringify({ avatar_components: JSON.stringify(a), avatar_id: r, skin_id: n, is_host: o ? o == "host" : !0, skin_data_version: n !== void 0 && s !== void 0 ? n + s : void 0, rotation_render_type: l, is_all_sync: u, nick_name: encodeURIComponent(c || ""), app_id: f, camera: d, player: _, person: T, firends: JSON.stringify(g), sync_by_event: m, area_name: v, path_name: b, attitude: y, room_type_id: C, syncToOthers: A, hasAvatar: S, avatarSize: h, prioritySync: P, extra: JSON.stringify(R) }) }; _this.send(x), logger$1.warn("startGame", le(oe({}, x), { data: JSON.parse(x.data) })); }); _this.network = e, _this.heartbeat = new Heartbeat({ ping: function ping(t) { var r; if (!_this.connected) { _this.heartbeat.stop(), (r = e.room.stats) == null || r.assign({ rtt: 0 }); return; } _this.send({ id: "heartbeat", data: t }); }, pong(t) { var r; (r = e.room.stats) == null || r.assign({ rtt: t }); } }); return _this; } _createClass(Socket, [{ key: "connection", get: function get() { return this._ws; } }, { key: "start", value: function start() { var _this2 = this; this._hasTimeout = !1; var e = this.getAddress(); logger$1.info("connecting to ".concat(e)); var t = Date.now(); this._ws = new WebSocket(e), this._openTimer = new Timeout$1(function () { var r = "Failed to open websocket in ".concat(DEFAULT_OPEN_TIMEOUT_MS, " ms"); _this2._hasTimeout = !0, _this2.emit("socketClosed", new InitNetworkTimeoutError(r)); }, DEFAULT_OPEN_TIMEOUT_MS), this._ws.onopen = function () { var r; (r = _this2._openTimer) == null || r.clear(), _this2.connected = !0, _this2.heartbeat.start(), _this2.network.room.currentNetworkOptions.reconnect || (logger$1.infoAndReportMeasurement({ metric: "wsOpenedAt", group: "joinRoom", startTime: _this2.network.room._startTime }), logger$1.infoAndReportMeasurement({ metric: "wsOpenedCost", group: "joinRoom", startTime: t })); }, this.handleWSEvent(); } }, { key: "getAddress", value: function getAddress() { var _this$network$room$cu4 = this.network.room.currentNetworkOptions, e = _this$network$room$cu4.wsServerUrl, t = _this$network$room$cu4.reconnect, r = _this$network$room$cu4.sessionId, n = _this$network$room$cu4.token, o = _this$network$room$cu4.roomId, a = _this$network$room$cu4.userId, s = _this$network$room$cu4.pageSession, l = this.network.room.skinId; var u = e; t && (u = u + "?reconnect=true&lastSessionID=".concat(r)); var c = "userId=".concat(a, "&roomId=").concat(o, "&pageSession=").concat(s) + (this.network.room.isHost ? "&skinId=".concat(l) : "") + (n ? "&token=".concat(n) : ""); return u = u.indexOf("?") > -1 ? u + "&" + c : u + "?" + c, u; } }, { key: "handleWSEvent", value: function handleWSEvent() { var _this3 = this; var e = this._ws; e.addEventListener("error", function (t) { _this3.connected = !1, logger$1.error("webscoket error", t), _this3.emit("socketClosed", new InternalError("connect to address error: " + _this3.network.room.currentNetworkOptions.wsServerUrl)); }), e.addEventListener("close", function (t) { _this3.connected = !1, _this3._onClose(t); }), e.addEventListener("message", function (t) { if (!t || _this3._hasTimeout || !_this3.connected) return; var r = null; try { r = JSON.parse(t.data); } catch (o) { logger$1.error(o); return; } if (!r) return; var n = r.id; if (!!n) switch (n !== "heartbeat" && logger$1.info("receive ws frame: ".concat(t.data)), n) { case "fail": break; case "init": try { var o = r.data.slice(-37, -1); reporter$1.updateBody({ serverSession: o }); } catch (o) { console.error(o); } _this3.network.rtcp.start(); break; case "heartbeat": _this3.heartbeat.pong(r.data); break; case "offer": _this3.network.rtcp.setRemoteDescription(r.data, _this3.network.stream.el); break; case "ice_candidate": _this3.network.rtcp.addCandidate(r.data); break; case "start": _this3.emit("gameRoomAvailable", r); break; case "error": try { var _JSON$parse = JSON.parse(r.data), _o = _JSON$parse.Code, a = _JSON$parse.Msg; if (_o) { if (_o == 3003) return _this3.emit("socketClosed", new TokenExpiredError()); if (authenticationErrorCodes.indexOf(_o) > -1) return _this3.emit("socketClosed", new AuthenticationError("\u9274\u6743\u9519\u8BEF:" + a)); { var s = util.getErrorByCode(_o); _this3.emit("socketClosed", new s(a)); } } } catch (o) { logger$1.error(o), _this3.emit("socketClosed", new InternalError(r.data)); } break; case "checkLatency": { var _o2 = r.packet_id, _a = r.data.split(","); _this3.onLatencyCheck({ packetId: _o2, addresses: _a }); break; } default: logger$1.warn("unkown ws message type", n, r); } }); } }, { key: "onLatencyCheck", value: function onLatencyCheck(e) { var _this4 = this; var t = _toConsumableArray(new Set(e.addresses || [])); Promise.all(t.map(function (r) { return { [r]: 9999 }; })).then(function (r) { var n = Object.assign.apply(Object, [{}].concat(_toConsumableArray(r))); _this4.latency(n, e.packetId); }); } }, { key: "wsNoReady", value: function wsNoReady() { return this._ws.readyState == WebSocket.CLOSED || this._ws.readyState == WebSocket.CLOSING || this._ws.readyState == WebSocket.CONNECTING; } }, { key: "prepareReconnect", value: function prepareReconnect() { this._close({ code: WS_CLOSE_RECONNECT, reason: "reconnect" }); } }, { key: "_onClose", value: function _onClose(_ref) { var e = _ref.code, t = _ref.reason; this._openTimer && this._openTimer.clear(), logger$1.warn("ws closed: ".concat(e, " ") + t), [WS_CLOSE_RECONNECT, WS_CLOSE_NORMAL].includes(e) || this.emit("socketClosed", new InternalError("Websocket error")); } }, { key: "_close", value: function _close(_ref2) { var e = _ref2.code, t = _ref2.reason; var r; (r = this._ws) == null || r.close(e, t); } }, { key: "quit", value: function quit() { this._close({ code: WS_CLOSE_NORMAL, reason: "quit" }); } }]); return Socket; }(EventEmitter); function add(i, e) { return e == -1 && (e = 0), i + e; } function max(i, e) { return Math.max(i, e); } function count_sd(i, e) { function t(r, n) { var o = 0; return n == -1 ? o = 0 : o = (n - e) * (n - e), r + o; } return Math.sqrt(i.reduce(t, 0) / i.reduce(count_valid, 0)) || 0; } function count_valid(i, e) { var t = 0; return e != -1 && (t = 1), i + t; } function count_less(i, e) { function t(r, n) { var o = 0; return n != -1 && n < e && (o = 1), r + o; } return i.reduce(t, 0); } var CircularArray = /*#__PURE__*/function () { function CircularArray(e, t, r) { _classCallCheck(this, CircularArray); this.sum = 0, this.incomingSum = 0, this.count = 0, this.incomingCount = 0, this.max = 0, this.incomingMax = 0, this.goodLess = 0, this.wellLess = 0, this.fairLess = 0, this.badLess = 0, this.countLess = !1, this.lessThreshes = [], this.incomingData = [], this.circularData = Array(e).fill(-1), this.circularPtr = 0, this.circularLength = e, t && (this.countLess = !0, this.lessThreshes = r); } _createClass(CircularArray, [{ key: "add", value: function add(e) { this.circularData[this.circularPtr] != -1 ? (this.sum -= this.circularData[this.circularPtr], Math.abs(this.circularData[this.circularPtr] - this.max) < .01 && (this.circularData[this.circularPtr] = -1, this.max = this.getMax(!1))) : this.count += 1, this.sum += e, this.incomingSum += e, this.incomingCount += 1, this.max < e && (this.max = e), this.incomingMax < e && (this.incomingMax = e), this.circularData[this.circularPtr] = e, this.circularPtr = (this.circularPtr + 1) % this.circularLength, this.incomingData.push(e), this.incomingData.length > this.circularLength && (this.clearIncoming(), this.incomingCount = 0, this.incomingSum = 0); } }, { key: "computeAvg", value: function computeAvg(e) { return e.reduce(add, 0) / e.reduce(count_valid, 0) || 0; } }, { key: "computeMax", value: function computeMax(e) { return e.reduce(max, 0) || 0; } }, { key: "computeThreshPercent", value: function computeThreshPercent(e) { if (this.countLess) { var t = count_less(e, this.lessThreshes[0]) || 0, r = count_less(e, this.lessThreshes[1]) || 0, n = count_less(e, this.lessThreshes[2]) || 0, o = count_less(e, this.lessThreshes[3]) || 0, a = e.reduce(count_valid, 0); return [t, r, n, o, a]; } else return [0, 0, 0, 0, 0]; } }, { key: "getAvg", value: function getAvg() { var e = this.sum / this.count || 0, t = this.computeAvg(this.circularData) || 0; return Math.abs(e - t) > .01 && console.error("avg value mismatch: ", e, t), this.computeAvg(this.circularData) || 0; } }, { key: "getMax", value: function getMax() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0; var t = this.computeMax(this.circularData) || 0; return e && Math.abs(t - this.max) > .01 && console.error("max value mismatch: ", this.max, t), this.computeMax(this.circularData) || 0; } }, { key: "getStandardDeviation", value: function getStandardDeviation() { return count_sd(this.circularData, this.getAvg()); } }, { key: "getThreshPercent", value: function getThreshPercent() { return this.computeThreshPercent(this.circularData); } }, { key: "getIncomingMax", value: function getIncomingMax() { return this.computeMax(this.incomingData) || 0; } }, { key: "getIncomingAvg", value: function getIncomingAvg() { return this.computeAvg(this.incomingData) || 0; } }, { key: "getIncomingStandardDeviation", value: function getIncomingStandardDeviation() { return count_sd(this.incomingData, this.getIncomingAvg()); } }, { key: "getIncomingThreshPercent", value: function getIncomingThreshPercent() { return this.computeThreshPercent(this.incomingData); } }, { key: "clearFastComputeItem", value: function clearFastComputeItem() { this.sum = 0, this.incomingSum = 0, this.count = 0, this.incomingCount = 0, this.max = 0, this.incomingMax = 0, this.goodLess = 0, this.wellLess = 0, this.fairLess = 0, this.badLess = 0; } }, { key: "clearIncoming", value: function clearIncoming() { for (; this.incomingData.length > 0;) { this.incomingData.pop(); } } }, { key: "clear", value: function clear() { this.circularData.fill(-1), this.circularPtr = 0, this.clearFastComputeItem(), this.clearIncoming(); } }]); return CircularArray; }(); function _createForOfIteratorHelper$5(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$5(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$5(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$5(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$5(o, minLen); } function _arrayLikeToArray$5(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var defaultLogger = { info: console.log, debug: console.log, error: console.error, infoAndReportMeasurement: function infoAndReportMeasurement() {} }; var USER_ID = "987412365", PAGE_SESSION = "aaabbbccc", SERVER_SESSION = "cccbbbaaa", COS_PREFIX = "error-bitstreams-auto-uploaded-from-application/", FRAME_COMPOSE_LENGTH = 5; var Workers = /*#__PURE__*/function () { function Workers(e, t) { var _this = this; _classCallCheck(this, Workers); this.rtcp = e, this.cacheSize = 0, this.cacheBuffer = new Uint8Array(262144), this.cacheFrameCnt = 0, this.startReceiveTime = 0, this.cacheFrameComposes = new Array(0), this.cacheSizes = new Array(5).fill(0), this.cacheFrameCnts = new Array(5).fill(-1), this.cacheStartReceiveTimes = new Array(5).fill(0), this.cacheBuffers = [new Uint8Array(262144), new Uint8Array(262144), new Uint8Array(262144), new Uint8Array(262144), new Uint8Array(262144)], this.panoCacheSize = 0, this.panoCacheBuffer = new Uint8Array(2097152), this.cachePanoTileID = 0, this.receivedMedia = 0, this.receivedMedia_worker = 0, this.receivedYUV = 0, this.receivedEmit = 0, this.returnFrames = 0, this.lastReturnFrames = 0, this.lastReceivedEmit = 0, this.mediaBytesReceived = 0, this.metaBytesReceived = 0, this.noWasmBytesReceived = 0, this.rtcBytesReceived = 0, this.rtcMessageReceived = 0, this.packetsDrop = 0, this.framesAwait = 0, this.sendOutBuffer = 0, this.decodeTimePerFrame = 0, this.decodeTimeMaxFrame = 0, this.lastRenderTs = 0, this.JankTimes = 0, this.bigJankTimes = 0, this.DecodeJankTimes = 0, this.bigDecodeJankTimes = 0, this.saveframe = !1, this.SaveMediaStream = !1, this.packetsLost = 0, this.showAllReceivedMetadata = !1, this.firstMediaArraval = 0, this.firstMediaReceived = !1, this.firstYUVDecoded = 0, this.firstRender = 0, this.firstYUVReceived = !1, this.reconnectSignal = !1, this.serverFrameSlow = 0, this.serverFrameFast = 0, this.clientFrameSlow = 0, this.clientFrameFast = 0, this.lastServerTS = 0, this.lastClientTS = 0, this.lastSeq = 0, this.lastIsPureMeta = !1, this.lastHBPacketTs = 0, this.HBPacketInterval = 0, this.lastHBPacketSrvSentTs = 0, this.HBPacketIntervalSrvSent = 0, this.cachedLength = 2, this.cachedStreams = new Array(this.cachedLength), this.cachedMetas = new Array(this.cachedLength), this.cachedPtss = new Array(this.cachedLength), this.cachedRender = Array(this.cachedLength).fill(!1), this.cachedResolution = new Array(this.cachedLength), this.getPtr = 0, this.setPtr = 0, this.receiveIframes = 0, this.decodeIframes = 0, this.prevSenderTs = -1, this.serverSendTimeArray = new CircularArray(120, !1, []), this.inPanoMode = !1, this.PanoStatus = { x: 0, y: 0, z: 0, tiles: [] }, this.DynamicPanoTest = !1, this.PanoMask = new ArrayBuffer(8), this.PanoView = new DataView(this.PanoMask), this.userId_test = "", this.PendingMasks = [], this.traceIdMap = new Map(), this.responseTimeArray = [], this.processTimeArray = [], this.displayTimeArray = [], this.overallTimeArray = [], this.responseMiss = 0, this.processMiss = 0, this.displayMiss = 0, this.updateYUVCircular = new CircularArray(120, !1, []), this.updateDropFrame = 0, this.metaParseAraay = [], this.responseMoveMiss = 0, this.processMoveMiss = 0, this.displayMoveMiss = 0, this.MovingTraceId = "", this.PendingMovingTraceId = "", this.inMovingMode = !1, this.StartMovingTs = 0, this.PendingStartMovingTs = 0, this.moveEvent = "", this.MoveToFrameCnt = 0, this.lastIsMoving = 0, this.MoveResponseDelay = 0, this.MoveProcessDelay = 0, this.MoveDisplayDelay = 0, this.lastMoveResponseTime = 0, this.lastMoveProcessTime = 0, this.lastMoveDisplayTime = 0, this.moveResponseCircular = new CircularArray(120, !0, [STUCK_STAGE_GOOD, STUCK_STAGE_WELL, STUCK_STAGE_FAIR, STUCK_STAGE_BAD]), this.moveProcessCircular = new CircularArray(120, !0, [STUCK_STAGE_GOOD, STUCK_STAGE_WELL, STUCK_STAGE_FAIR, STUCK_STAGE_BAD]), this.moveDisplayCircular = new CircularArray(120, !0, [STUCK_STAGE_GOOD, STUCK_STAGE_WELL, STUCK_STAGE_FAIR, STUCK_STAGE_BAD]), this.moveStartPts = -1, this.frameServerCircular = new CircularArray(120, !1, []), this.srvMetaIntervalCircular = new CircularArray(120, !1, []), this.srvMediaIntervalCircular = new CircularArray(120, !1, []), this.srvHBMetaIntervalCircular = new CircularArray(120, !1, []), this.srvHBMetaIntervalSrvSentCircular = new CircularArray(120, !1, []), this.frameClientCircular = new CircularArray(120, !1, []), this.firstUpdateYUV = !0, this.functionMap = new Map(), this.WASM_VERSION = "WASM-1.1", this.frameHistory = [], this.getVersion = function () { return DECODER_VERSION; }, this.downloadBlob = function (r, n, o) { var a = new Blob([r], { type: o }), s = window.URL.createObjectURL(a); _this.downloadURL(s, n), setTimeout(function () { return window.URL.revokeObjectURL(s); }, 1e3); }, this.downloadURL = function (r, n) { var o = document.createElement("a"); o.href = r, o.download = n, document.body.appendChild(o), o.style.display = "none", o.click(), o.remove(); }, this.Stringify = function (r) { var n = ""; for (var a = 0; a < r.length / 8192; a++) { n += String.fromCharCode.apply(null, r.slice(a * 8192, (a + 1) * 8192)); } return n; }, this._rtcp = e; } _createClass(Workers, [{ key: "registerLogger", value: function registerLogger(e) {//defaultLogger = e } }, { key: "registerFunction", value: function registerFunction(e, t) { this.functionMap.set(e, t); } }, { key: "hasFrmCntInCache", value: function hasFrmCntInCache(e) { var t = -1; for (var r = 0; r < this.cacheFrameComposes.length; r++) { this.cacheFrameComposes[r].frameCnt == e && (t = r); } return t; } }, { key: "requestPanoramaTest", value: function requestPanoramaTest(e, t, r, n, o) { var a = o, s = { action_type: 16, change_rotation_render_type_action: { render_type: 5, player: { position: { x: 0, y: 0, z: 0 }, angle: { yaw: 0, pitch: 0, roll: 0 } }, camera: { position: { x: e, y: t, z: r }, angle: { yaw: 0, pitch: 0, roll: 0 } }, client_pano_titles_bitmap: n }, trace_id: a, user_id: this.userId_test, packet_id: a }; defaultLogger.debug("send data: ", s), this._rtcp.sendData(s); } }, { key: "onRotateInPanoMode", value: function onRotateInPanoMode(e) { var t = e.traceId, r = {}; r.width = 1280, r.height = 720, r.horz_fov = 92, r.angle = { yaw: 100, pitch: 30 }; var n = new ArrayBuffer(8), o = new DataView(n); getTilesInView(r, n); var a = n.slice(0); this.PendingMasks.unshift({ buffer: a, angle: r.angle }), MaskSetToOne(18, this.PanoView), operateForDataView(o, this.PanoView, o, function (s, l) { return s ^ s & l; }), this.requestPanoramaTest(0, 0, 0, [o.getUint8(0), o.getUint8(1), o.getUint8(2), o.getUint8(3), o.getUint8(4), o.getUint8(5), o.getUint8(6), o.getUint8(7)], t); } }, { key: "processMetaWithTraceId", value: function processMetaWithTraceId(e) { var _iterator = _createForOfIteratorHelper$5(e.traceIds), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var t = _step.value; if (this.traceIdMap.has(t)) { var r = this.traceIdMap.get(t); r != null && (r.receiveTime = Date.now(), r.status = 1); } if (t == this.PendingMovingTraceId) { this.inMovingMode = !0, this.MovingTraceId = this.PendingMovingTraceId, this.StartMovingTs = this.PendingStartMovingTs, this.PendingMovingTraceId = "", this.PendingStartMovingTs = 0, defaultLogger.info("MoveTo TraceId match", this.StartMovingTs, Date.now()); var _r = Date.now(); this.lastMoveResponseTime = _r, this.lastMoveProcessTime = _r, this.lastMoveDisplayTime = _r, this.frameServerCircular.clear(), this.frameClientCircular.clear(); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "onTraceId", value: function onTraceId(e) { var _this2 = this; var r = e.traceId, n = e.timestamp, o = e.event; if (o === "Rotation") { var a = { traceId: r, pts: 0, startTime: n, receiveTime: 0, readyTime: 0, displayTime: 0, status: 0 }; this.traceIdMap.set(r, a); var s = setTimeout(function () { if (s && clearTimeout(s), _this2.traceIdMap.has(r)) { var l = _this2.traceIdMap.get(r); switch (l == null ? void 0 : l.status) { case 0: { _this2.responseMiss += 1; break; } case 1: { _this2.processMiss += 1; var u = l.receiveTime - l.startTime; _this2.responseTimeArray.push(u); break; } case 2: { _this2.displayMiss += 1; var _u = l.receiveTime - l.startTime, c = l.readyTime - l.receiveTime; _this2.responseTimeArray.push(_u), _this2.processTimeArray.push(c); break; } case 3: defaultLogger.debug("status is 3"); } } }, 1e3); } else o === "MoveTo" ? (defaultLogger.info("receive moveto traceId ", r, " at timestamp", n), this.PendingMovingTraceId = r, this.PendingStartMovingTs = n, this.moveEvent = o, this.frameServerCircular.clear()) : o === "GetOnAirship" || o === "GetOnVehicle" ? (defaultLogger.info("receive airship traceId ", r, " at timestamp ", n), this.PendingMovingTraceId = r, this.PendingStartMovingTs = n, this.moveEvent = o, this.frameServerCircular.clear()) : (o === "GetOffAirship" || o === "GetOffVehicle") && this.clearMoveArray(); } }, { key: "executeFunction", value: function executeFunction(e, t) { if (this.functionMap.has(e)) { var r = this.functionMap.get(e); r != null && r(t); } } }, { key: "UpdateStats", value: function UpdateStats(e) { var _this3 = this; var t; (t = this._rtcp.connection) == null || t.getStats(null).then(function (r) { r.forEach(function (n) { n.type == "data-channel" && (_this3.rtcMessageReceived = n.messagesReceived - n.messagesSent, _this3.rtcBytesReceived = n.bytesReceived); }); }), this.receivedMedia_worker = e.data.framesReceived, this.receivedYUV = e.data.framesDecoded, this.receivedEmit = e.data.framesRendered, this.mediaBytesReceived = e.data.mediaBytesReceived, this.metaBytesReceived = e.data.metaBytesReceived, this.packetsLost = e.data.packetsLost, this.packetsDrop = e.data.packetsDrop, this.framesAwait = e.data.framesAwait, this.decodeTimePerFrame = e.data.decodeTimePerFrame, this.decodeTimeMaxFrame = e.data.decodeTimeMaxFrame, this.returnFrames = e.data.framesReturned, this.sendOutBuffer = e.data.sendOutBuffer, this.DecodeJankTimes = e.data.JankTimes, this.bigDecodeJankTimes = e.data.bigJankTimes, this.receiveIframes = e.data.receivedIframe, this.decodeIframes = e.data.decodedIframe; } }, { key: "ReceiveDecodeMessage", value: function ReceiveDecodeMessage(e) { var n; if (!this.firstYUVReceived) { this.firstYUVDecoded = e.data.yuv_ts; var o = this.firstYUVDecoded - this.rtcp.network.room._startTime; defaultLogger.infoAndReportMeasurement({ metric: "firstYUVDecodedAt", value: o, group: "joinRoom" }), this.firstRender = Date.now(); var a = this.firstYUVDecoded - this.rtcp.network.room._startTime; defaultLogger.infoAndReportMeasurement({ metric: "firstRenderAt", value: a, group: "joinRoom" }), this.firstYUVReceived = !0, this.lastRenderTs = Date.now(); } !this.cachedRender[this.setPtr] && this.cachedMetas[this.setPtr] != null && (this.cachedStreams[this.setPtr] != null && this.cachedStreams[this.setPtr].byteLength != 0 && (e.data.data == null ? (this.executeFunction("stream", { stream: this.cachedStreams[this.setPtr], width: this.cachedResolution[this.setPtr].width, height: this.cachedResolution[this.setPtr].height, pts: this.cachedPtss[this.setPtr] }), this.executeFunction("signal", { signal: this.cachedMetas[this.setPtr], pts: this.cachedPtss[this.setPtr], alreadyUpdateYUV: !0 })) : this.updateDropFrame += 1, this.decoderWorker.postMessage({ t: 2, frameCnt: this.cachedPtss[this.setPtr], buffer: this.cachedStreams[this.setPtr] }, [this.cachedStreams[this.setPtr].buffer])), this.getPtr = (this.getPtr + 1) % this.cachedLength); var t = e.data.metadata; if ((n = t == null ? void 0 : t.traceIds) != null && n.length) { var _iterator2 = _createForOfIteratorHelper$5(t.traceIds), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _o = _step2.value; if (this.traceIdMap.has(_o)) { var _a = this.traceIdMap.get(_o); _a != null && (_a.readyTime = Date.now(), _a.status = 2); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } if (e.data.pts == this.moveStartPts && (this.MoveProcessDelay = Date.now() - this.StartMovingTs), this.userId_test = this.rtcp.network.room.userId, this.inMovingMode) { var _o2 = Date.now(), _a2 = _o2 - this.lastMoveProcessTime; this.moveProcessCircular.add(_a2), this.lastMoveProcessTime = _o2; } var r = this.setPtr; this.cachedStreams[r] = e.data.data, this.cachedMetas[r] = e.data.metadata, this.cachedPtss[r] = e.data.pts, this.cachedRender[r] = !1, this.cachedResolution[r] = { width: e.data.width, height: e.data.height }, this.setPtr = (this.setPtr + 1) % this.cachedLength; } }, { key: "SendCacheFrameInfo", value: function SendCacheFrameInfo(e) { var _this4 = this; var h, f, d, _, g, m, v; var t = e.data.cachedKey, r = e.data.metadata, n = t, o = r, a = (d = (f = (h = o.newUserStates) == null ? void 0 : h.find(function (y) { return y.userId === _this4.rtcp.network.room.userId; })) == null ? void 0 : f.playerState) == null ? void 0 : d.roomTypeId, s = this.rtcp.network.room.skinId, l = (v = (m = (g = (_ = o.newUserStates) == null ? void 0 : _.find(function (y) { return y.userId === _this4._rtcp.network.room.userId; })) == null ? void 0 : g.playerState) == null ? void 0 : m.player) == null ? void 0 : v.position, u = { MsgType: 1, FrameCacheMsg: { FrameIndex: n, RoomTypeId: a, SkinID: s, Position: l } }; var c = ""; try { c = JSON.stringify(u); } catch (y) { defaultLogger.error(y); return; } } }, { key: "ReceivePanoramaDecodeMessage", value: function ReceivePanoramaDecodeMessage(e) { defaultLogger.info("Receive Panorama Image in Workers.ts"), MaskSetToOne(e.data.tileId, this.PanoView); var t = 0, r; var n = this.PendingMasks.length; for (t = 0; t < n; t++) { var o = this.PendingMasks[t].buffer, a = new DataView(o), s = new ArrayBuffer(8), l = new DataView(s); if (operateForDataView(this.PanoView, a, l, function (u, c) { return c ^ u & c; }), IsAll0(l)) { r = this.PendingMasks[t].angle; break; } } for (var _o3 = t; _o3 < n; _o3++) { this.PendingMasks.pop(); } this.executeFunction("panorama", { data: e.data.data, tileId: e.data.tileId, pos: { x: e.data.x, y: e.data.y, z: e.data.z }, uuid: e.data.uuid, finished: !0, matchAngle: r }); } }, { key: "enable_decoder_queue_logging", value: function enable_decoder_queue_logging() { this.decoderWorker.postMessage({ t: 100, status: !0 }); } }, { key: "disable_decoder_queue_logging", value: function disable_decoder_queue_logging() { this.decoderWorker.postMessage({ t: 100, status: !1 }); } }, { key: "init", value: function () { var _init = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { var _this5 = this; var e, r, n, t, _args = arguments; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: e = _args.length > 0 && _args[0] !== undefined ? _args[0] : { width: 1280, height: 720 }; for (r = 0; r < FRAME_COMPOSE_LENGTH; r++) { n = { buffer: new Uint8Array(2621440), size: 0, startReceiveTime: 0, serverTime: 0, frameCnt: -1 }; this.cacheFrameComposes.push(n); } t = new Blob([decoder], { type: "application/javascript" }); this.decoderWorker = new Worker(URL.createObjectURL(t)); this.decoderWorker.postMessage({ t: 9, url: WASM_URLS[WASM_Version], jitterLength: DECODER_PASSIVE_JITTER }); this.decoderWorker.postMessage({ t: 1, config: e }); return _context.abrupt("return", new Promise(function (r) { _this5.decoderWorker.onmessage = function (n) { switch (n.data.t) { case 0: _this5.ReceiveDecodeMessage(n); break; case 1: _this5.UpdateStats(n); break; case 2: r(); break; case 3: _this5.SendCacheFrameInfo(n); break; case 4: { var o = new Date().toISOString(), a = USER_ID + "-" + PAGE_SESSION + "-" + SERVER_SESSION + "-" + o + ".264"; uploadStream(COS_PREFIX + a, n.data.fileObj); break; } case 5: _this5.executeFunction("signal", { signal: n.data.metadata, pts: -1, alreadyUpdateYUV: !1 }); break; case 6: defaultLogger.infoAndReportMeasurement(n.data), defaultLogger.debug("WASM Ready Cost"); break; case 7: _this5.ReceivePanoramaDecodeMessage(n); break; case 8: { var _o4 = { MstType: 0 }; var _a3 = ""; try { _a3 = JSON.stringify(_o4); } catch (l) { defaultLogger.error(l); return; } var s = "wasm:" + _a3; _this5._rtcp.sendStringData(s); break; } case 9: { defaultLogger.info(n.data.printMsg); break; } case 10: { defaultLogger.error(n.data.printMsg), _this5.executeFunction("error", { code: n.data.code, message: n.data.printMsg }); break; } default: defaultLogger.error("Receive unknown message event from decoder"), defaultLogger.debug(n.data); break; } }; })); case 7: case "end": return _context.stop(); } } }, _callee, this); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "UpdateYUV", value: function UpdateYUV() { var t, r; var e = this.getPtr; if (this.cachedMetas[e] != null && !this.cachedRender[e]) { var n = Date.now(); if (this.firstUpdateYUV) { var h = ((t = this.cachedStreams[e]) == null ? void 0 : t.byteLength) || 0; defaultLogger.infoAndReportMeasurement({ metric: "firstUpdateStreamLength", value: h, group: "joinRoom" }), this.firstUpdateYUV = !1; } this.cachedStreams[e] != null && this.executeFunction("stream", { stream: this.cachedStreams[e], width: this.cachedResolution[e].width, height: this.cachedResolution[e].height, pts: this.cachedPtss[e] }); var o = Date.now(); this.cachedStreams[e] != null && this.decoderWorker.postMessage({ t: 2, frameCnt: this.cachedPtss[e], buffer: this.cachedStreams[e] }, [this.cachedStreams[e].buffer]); var a = Date.now(), s = o - n, l = a - o; (s > 33 || l > 10) && defaultLogger.debug("[wwwarning] updateYUV takes ", s, " ms, postMessage takes ", l, " ms for index ", this.cachedPtss[e]), o - this.lastRenderTs > 84 && this.JankTimes++, o - this.lastRenderTs > 125 && this.bigJankTimes++, this.lastRenderTs = o; var u = o - n; this.updateYUVCircular.add(u); var c = this.cachedMetas[e]; if ((r = c == null ? void 0 : c.traceIds) != null && r.length) { var _iterator3 = _createForOfIteratorHelper$5(c.traceIds), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _h = _step3.value; if (this.traceIdMap.has(_h)) { var f = this.traceIdMap.get(_h); if (f != null) { f.displayTime = Date.now(), f.status = 3; var d = f.receiveTime - f.startTime, _ = f.readyTime - f.receiveTime, g = f.displayTime - f.readyTime, m = f.displayTime - f.startTime; this.responseTimeArray.push(d), this.processTimeArray.push(_), this.displayTimeArray.push(g), this.overallTimeArray.push(m), this.traceIdMap.delete(_h); } } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } if (this.cachedPtss[e] == this.moveStartPts && (this.MoveDisplayDelay = Date.now() - this.StartMovingTs), this.inMovingMode) { var _h2 = Date.now(), _f = _h2 - this.lastMoveDisplayTime; this.moveDisplayCircular.add(_f), this.lastMoveDisplayTime = _h2; } this.executeFunction("signal", { signal: this.cachedMetas[e], pts: this.cachedPtss[e], alreadyUpdateYUV: !0 }), this.cachedRender[e] = !0, this.getPtr = (this.getPtr + 1) % this.cachedLength; } } }, { key: "unmarshalPano", value: function unmarshalPano(e) { var t = new DataView(e); if (t.getUint32(0) != 1723558763) return !1; console.log("Receive Pano Message"), t.getUint16(4); var n = t.getUint16(6), o = t.getUint32(8), a = t.getUint32(12) - (1 << 30) * 2, s = t.getUint32(16) - (1 << 30) * 2, l = t.getUint32(20) - (1 << 30) * 2, u = t.getUint32(24), c = new Uint8Array(e).subarray(28, 64), h = String.fromCharCode.apply(null, c), f = t.getUint32(64), d = e.byteLength - n; if (d == u) { var g = { data: new Uint8Array(e).subarray(n), mediaLen: u, tileId: o, uuid: h, x: a, y: s, z: l }; this.decoderWorker.postMessage({ t: 8, data: g }); } else { var _ = new Uint8Array(e, n, d); if (this.cachePanoTileID == o) { if (this.panoCacheBuffer.set(_, f), this.panoCacheSize += d, this.panoCacheSize === u) { var m = { data: new Uint8Array(this.panoCacheBuffer).slice(0, u), mediaLen: u, tileId: o, uuid: h, x: a, y: s, z: l }; this.decoderWorker.postMessage({ t: 8, data: m }), this.panoCacheSize = 0; } } else this.panoCacheBuffer.set(_, f), this.panoCacheSize = d, this.cachePanoTileID = o; } return !0; } }, { key: "clearMoveArray", value: function clearMoveArray() { this.MovingTraceId = "", this.inMovingMode = !1, this.StartMovingTs = 0, this.MoveToFrameCnt = 0, this.MoveResponseDelay = 0, this.MoveProcessDelay = 0, this.MoveDisplayDelay = 0, this.moveStartPts = -1, this.moveResponseCircular.clear(), this.moveProcessCircular.clear(), this.moveDisplayCircular.clear(), this.moveEvent = ""; } }, { key: "getIsMoving", value: function getIsMoving(e) { var t; if (typeof e.newUserStates != "undefined") for (var r = 0; r < e.newUserStates.length; r++) { var n = e.newUserStates[r]; if (n.userId == this.rtcp.network.room.userId) { t = n.renderInfo.isMoving; break; } } return t; } }, { key: "isHeartBeatPacket", value: function isHeartBeatPacket(e, t) { return new DataView(e).getUint32(0) == 2009889916; } }, { key: "resetSendTimeDiff", value: function resetSendTimeDiff() { this.prevSenderTs = 0, this.serverSendTimeArray.clear(); } }, { key: "calcSendTimeDiff", value: function calcSendTimeDiff(e) { if (this.prevSenderTs == -1) { this.prevSenderTs = e; return; } var t = e - this.prevSenderTs; this.serverSendTimeArray.add(t), this.prevSenderTs = e; } }, { key: "unmarshalStream", value: function unmarshalStream(e) { var _this6 = this; var T, C, A, S, P, R, M, x, I, w; var t = new DataView(e); if (t.getUint32(0) != 1437227610) return !1; t.getUint16(4); var n = t.getUint16(6), o = t.getUint16(8), a = o, s = t.getUint16(10); var l = !1; s == 1 && (l = !0); var u = t.getUint32(12), c = t.getUint32(16), h = t.getUint32(20), f = t.getUint16(24), d = t.getUint16(26), _ = t.getUint32(28), g = t.getUint32(n - 4), m = u + c, v = e.byteLength - n, y = new Uint8Array(e, n, v); this.calcSendTimeDiff(h); var b; if (this.inPanoMode && (c > 0 || f)) return defaultLogger.error("Stream Protocal Violation: receive illegal stream in Pano mode"), !0; if (v === m) { this.receivedMedia++; var O = new Uint8Array(e).subarray(n); h - this.lastServerTS > 60 ? this.serverFrameSlow++ : h - this.lastServerTS < 16 && this.serverFrameFast++; var D = Date.now(); D - this.lastClientTS > 60 ? this.clientFrameSlow++ : D - this.lastClientTS < 16 && this.clientFrameFast++; var F = c === 0, V = h - this.lastServerTS; this.lastServerTS != 0 && ((o + 65536 - this.lastSeq) % 65536 === 1 && this.lastIsPureMeta == F && (F ? this.srvMetaIntervalCircular.add(V) : this.srvMediaIntervalCircular.add(V)), this.frameServerCircular.add(V), this.frameClientCircular.add(D - this.lastClientTS)), this.lastSeq = o, this.lastIsPureMeta = F, this.lastServerTS = h, this.lastClientTS = D; var N = O.subarray(0, u), L = Date.now(), k = JSON.parse(this.Stringify(N)), U = Date.now(); this.showAllReceivedMetadata && console.log(h, D, k), this.metaParseAraay.push(U - L), (T = k.traceIds) != null && T.length && this.processMetaWithTraceId(k), c != 0 && this.moveStartPts == -1 && this.inMovingMode && (this.moveStartPts = o), this.moveStartPts == o && (this.MoveResponseDelay = Date.now() - this.StartMovingTs, console.log("move response delay: ", o, this.moveStartPts, this.MoveResponseDelay)); var z = this.getIsMoving(k); if (this.inMovingMode && z == 0 && this.lastIsMoving == 1 && this.clearMoveArray(), typeof z != "undefined" && (this.lastIsMoving = z), this.inMovingMode) { var G = Date.now(), W = G - this.lastMoveResponseTime; this.moveResponseCircular.add(W), this.lastMoveResponseTime = G; } (f || d) && (b = (P = (S = (A = (C = k.newUserStates) == null ? void 0 : C.find(function (G) { return G.userId === _this6._rtcp.network.room.userId; })) == null ? void 0 : A.playerState) == null ? void 0 : S.player) == null ? void 0 : P.position); var H = { t: 0, data: O, mediaLen: c, metaLen: u, metadata: k, frameCnt: a, server_ts: h, isIDR: l, cacheRequest: d, cached: f, cachedKey: _, position: b }; if (this.inPanoMode) return this.executeFunction("signal", { signal: k, pts: -1, alreadyUpdateYUV: !0 }), !0; if (this.decoderWorker.postMessage(H, [O.buffer]), !this.firstMediaReceived) { this.firstMediaArraval = Date.now(); var _G = this.firstMediaArraval - this.rtcp.network.room._startTime; defaultLogger.infoAndReportMeasurement({ metric: "firstMediaArravalAt", value: _G, group: "joinRoom" }), this.firstMediaReceived = !0; } } else { var _O = this.hasFrmCntInCache(a); if (_O != -1) { if (this.cacheFrameComposes[_O].buffer.set(y, g), this.cacheFrameComposes[_O].size += v, this.cacheFrameComposes[_O].size === m) { var _D = new Uint8Array(this.cacheFrameComposes[_O].buffer).slice(0, m); this.cacheFrameComposes[_O].frameCnt = -1, this.cacheFrameComposes[_O].size = 0, this.cacheFrameComposes[_O].startReceiveTime = 0, this.cacheFrameComposes[_O].serverTime = 0, this.receivedMedia++, h - this.lastServerTS > 60 ? this.serverFrameSlow++ : h - this.lastServerTS < 16 && this.serverFrameFast++; var _F = Date.now(); _F - this.lastClientTS > 60 ? this.clientFrameSlow++ : _F - this.lastClientTS < 16 && this.clientFrameFast++, this.lastServerTS != 0 && (this.frameServerCircular.add(h - this.lastServerTS), this.frameClientCircular.add(_F - this.lastClientTS)), this.lastServerTS = h, this.lastClientTS = _F; var _V = _D.subarray(0, u), _N = Date.now(), _L = JSON.parse(this.Stringify(_V)), _k = Date.now(); this.showAllReceivedMetadata && console.log(h, _F, _L), this.metaParseAraay.push(_k - _N), (R = _L.traceIds) != null && R.length && this.processMetaWithTraceId(_L), c != 0 && this.moveStartPts == -1 && this.inMovingMode && (this.moveStartPts = o), this.moveStartPts == o && (this.MoveResponseDelay = Date.now() - this.StartMovingTs); var _U = this.getIsMoving(_L); if (this.inMovingMode && _U == 0 && this.lastIsMoving == 1 && this.clearMoveArray(), typeof _U != "undefined" && (this.lastIsMoving = _U), this.inMovingMode) { var _H = Date.now(), _G2 = _H - this.lastMoveResponseTime; this.moveResponseCircular.add(_G2), this.lastMoveResponseTime = _H; } (f || d) && (b = (w = (I = (x = (M = _L.newUserStates) == null ? void 0 : M.find(function (H) { return H.userId === _this6._rtcp.network.room.userId; })) == null ? void 0 : x.playerState) == null ? void 0 : I.player) == null ? void 0 : w.position); var _z = { t: 0, data: _D, mediaLen: c, metaLen: u, metadata: _L, frameCnt: a, server_ts: h, isIDR: l, cacheRequest: d, cached: f, cachedKey: _, position: b }; if (this.inPanoMode) return this.executeFunction("signal", { signal: _L, pts: -1, alreadyUpdateYUV: !0 }), !0; if (this.decoderWorker.postMessage(_z, [_D.buffer]), !this.firstMediaReceived) { this.firstMediaArraval = Date.now(); var _H2 = this.firstMediaArraval - this.rtcp.network.room._startTime; defaultLogger.infoAndReportMeasurement({ metric: "firstMediaArravalAt", value: _H2, group: "joinRoom" }), this.firstMediaReceived = !0; } } else this.cacheFrameComposes[_O].size > m && defaultLogger.debug("I frame exceed, cache size is ", this.cacheSize, ", total size is ", m); } else if (_O == -1) { var _D2 = this.hasFrmCntInCache(-1); if (_D2 == -1) { var _F2 = Date.now() + 1e18, _V2 = -1; for (var _N2 = 0; _N2 < this.cacheFrameComposes.length; _N2++) { this.cacheFrameComposes[_N2].serverTime < _F2 && (_F2 = this.cacheFrameComposes[_N2].serverTime, _V2 = _N2); } _D2 = _V2; } this.cacheFrameComposes[_D2].buffer.set(y, g), this.cacheFrameComposes[_D2].size = v, this.cacheFrameComposes[_D2].frameCnt = a, this.cacheFrameComposes[_D2].startReceiveTime = Date.now(), this.cacheFrameComposes[_D2].serverTime = h; } } return !0; } }, { key: "reset", value: function reset() { defaultLogger.debug("Worker reset is called"), this.cacheFrameCnt = 0, this.receivedMedia = 0, this.reconnectSignal = !0, this.decoderWorker.postMessage({ t: 4 }); } }, { key: "dataHandleOff", value: function dataHandleOff(e) { defaultLogger.debug("hhh"); } }, { key: "dataHandle", value: function dataHandle(e) { this.saveframe && (this.decoderWorker.postMessage({ t: 6 }), this.saveframe = !1), this.SaveMediaStream && (this.decoderWorker.postMessage({ t: 7 }), this.SaveMediaStream = !1); var t = new Uint8Array(e); if (t.length >= 4 && this.isHeartBeatPacket(t.buffer, t.length) == !0) return; if (t.length > 36 && this.unmarshalStream(t.buffer) == !0) { this.reconnectSignal && (this.executeFunction("reconnectedFrame", {}), this.reconnectSignal = !1); return; } if (t.length > 20 && this.unmarshalPano(t.buffer) == !0) return; this.noWasmBytesReceived += e.byteLength; var r = JSON.parse(this.Stringify(t)); this.executeFunction("signal", { signal: r, pts: -1, alreadyUpdateYUV: !0 }); } }, { key: "changePanoMode", value: function changePanoMode(e) { this.inPanoMode = e; } }, { key: "uploadDataToServer", value: function uploadDataToServer() { this.DynamicPanoTest == !0 && (this.onRotateInPanoMode({ traceId: "b2e1a296-6438-4371-8a31-687beb724ebe" }), this.DynamicPanoTest = !1); function e(ie, ee) { return ee == -1 && (ee = 0), ie + ee; } function t(ie, ee) { return Math.max(ie, ee); } var r = this.responseTimeArray.reduce(e, 0) / this.responseTimeArray.length || 0, n = this.processTimeArray.reduce(e, 0) / this.processTimeArray.length || 0, o = this.displayTimeArray.reduce(e, 0) / this.displayTimeArray.length || 0, a = this.overallTimeArray.reduce(e, 0) / this.overallTimeArray.length || 0, s = this.overallTimeArray.length; this.responseTimeArray = [], this.processTimeArray = [], this.displayTimeArray = [], this.overallTimeArray = []; var l = this.moveResponseCircular.getThreshPercent(), u = l[0], c = l[1], h = l[2], f = l[3], d = l[4], _ = d - f, g = 1 - c / d || 0, m = [u, c - u, h - c, f - h, _], v = this.moveProcessCircular.getThreshPercent(), y = v[0], b = v[1], T = v[2], C = v[3], A = v[4], S = A - C, P = 1 - b / A || 0, R = [y, b - y, T - b, C - T, S], M = this.moveDisplayCircular.getThreshPercent(), x = M[0], I = M[1], w = M[2], O = M[3], D = M[4], F = D - O, V = 1 - I / D || 0, N = [x, I - x, w - I, O - w, F], L = x, k = I - x, U = w - I, z = O - w, H = F, G = this.moveResponseCircular.getAvg(), W = this.moveProcessCircular.getAvg(), j = this.moveDisplayCircular.getAvg(), B = this.moveResponseCircular.getMax(), X = this.moveProcessCircular.getMax(), $ = this.moveDisplayCircular.getMax(), Y = this.moveResponseCircular.getStandardDeviation(), K = this.moveProcessCircular.getStandardDeviation(), Z = this.moveDisplayCircular.getStandardDeviation(); this.moveResponseCircular.getIncomingAvg(), this.moveProcessCircular.getIncomingAvg(), this.moveDisplayCircular.getIncomingAvg(), this.moveResponseCircular.getIncomingMax(), this.moveProcessCircular.getIncomingMax(), this.moveDisplayCircular.getIncomingMax(), this.moveResponseCircular.clearIncoming(), this.moveProcessCircular.clearIncoming(), this.moveDisplayCircular.clearIncoming(); var q = this.frameServerCircular.getAvg(), J = this.frameServerCircular.getMax(); this.frameClientCircular.getAvg(), this.frameClientCircular.getMax(); var Q = this.metaParseAraay.reduce(e, 0) / this.metaParseAraay.length || 0, te = this.metaParseAraay.reduce(t, 0); this.metaParseAraay = []; var re = { mediaBytesReceived: this.mediaBytesReceived, metaBytesReceived: this.metaBytesReceived, packetsLost: this.packetsLost, timestamp: Date.now(), frameHeight: 1280, frameWidth: 720, framesReceived: this.receivedMedia, framesReceivedWorker: this.receivedMedia_worker, framesDecoded: this.receivedYUV, framesEmited: this.receivedEmit, decodeTimePerFrame: this.decodeTimePerFrame, decodeTimeMaxFrame: this.decodeTimeMaxFrame, packetsDrop: this.packetsDrop, framesAwait: this.framesAwait, firstMediaArraval: this.firstMediaArraval, firstYUVDecoded: this.firstYUVDecoded, firstRender: this.firstRender, returnFrames: this.returnFrames, sendOutBuffer: this.sendOutBuffer, maxGraphicTime: this.updateYUVCircular.getMax(), averageGraphicTime: this.updateYUVCircular.getAvg(), jankTimes: this.JankTimes, bigJankTimes: this.bigJankTimes, decodeJankTimes: this.DecodeJankTimes, bigDecodeJankTimes: this.bigDecodeJankTimes, serverFrameSlow: this.serverFrameSlow, serverFrameFast: this.serverFrameFast, clientFrameSlow: this.clientFrameSlow, clientFrameFast: this.clientFrameFast, rtcMessageReceived: this.rtcMessageReceived, rtcBytesReceived: this.rtcBytesReceived - this.noWasmBytesReceived, receiveIframes: this.receiveIframes, decodeIframes: this.decodeIframes, avgResponseTime: r, avgProcessTime: n, avgDisplayTime: o, avgOverallTime: a, overallTimeCount: s, responseMiss: this.responseMiss, processMiss: this.processMiss, displayMiss: this.displayMiss, updateDropFrame: this.updateDropFrame, moveEvent: this.moveEvent, avgResponseMoveDiff: this.moveEvent == "MoveTo" ? G : 0, avgProcessMoveDiff: this.moveEvent == "MoveTo" ? W : 0, avgDisplayMoveDiff: this.moveEvent == "MoveTo" ? j : 0, maxResponseMoveDiff: this.moveEvent == "MoveTo" ? B : 0, maxProcessMoveDiff: this.moveEvent == "MoveTo" ? X : 0, maxDisplayMoveDiff: this.moveEvent == "MoveTo" ? $ : 0, moveResponseJank: this.moveEvent == "MoveTo" ? g : 0, moveProcessJank: this.moveEvent == "MoveTo" ? P : 0, moveDisplayJank: this.moveEvent == "MoveTo" ? V : 0, moveResponseCounts: this.moveEvent == "MoveTo" ? m.toString() : "0,0,0,0,0", moveProcessCounts: this.moveEvent == "MoveTo" ? R.toString() : "0,0,0,0,0", moveDisplayCounts: this.moveEvent == "MoveTo" ? N.toString() : "0,0,0,0,0", MoveDisplayCountGood: this.moveEvent == "MoveTo" ? L.toString() : "0", MoveDisplayCountWell: this.moveEvent == "MoveTo" ? k.toString() : "0", MoveDisplayCountFair: this.moveEvent == "MoveTo" ? U.toString() : "0", MoveDisplayCountBad: this.moveEvent == "MoveTo" ? z.toString() : "0", MoveDisplayCountRest: this.moveEvent == "MoveTo" ? H.toString() : "0", moveResponseDelay: this.moveEvent == "MoveTo" ? this.MoveResponseDelay : 0, moveProcessDelay: this.moveEvent == "MoveTo" ? this.MoveProcessDelay : 0, moveDisplayDelay: this.moveEvent == "MoveTo" ? this.MoveDisplayDelay : 0, sdMoveResponseLongTime: Y, sdMoveProcessLongTime: K, sdMoveDisplayLongTime: Z, avgResponseFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? G : 0, avgProcessFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? W : 0, avgDisplayFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? j : 0, maxResponseFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? B : 0, maxProcessFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? X : 0, maxDisplayFlyDiff: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? $ : 0, flyResponseJank: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? g : 0, flyProcessJank: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? P : 0, flyDisplayJank: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? V : 0, flyResponseCounts: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? m.toString() : "0,0,0,0,0", flyProcessCounts: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? R.toString() : "0,0,0,0,0", flyDisplayCounts: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? N.toString() : "0,0,0,0,0", flyResponseDelay: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? this.MoveResponseDelay : 0, flyProcessDelay: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? this.MoveProcessDelay : 0, flyDisplayDelay: this.moveEvent == "GetOnVehicle" || this.moveEvent == "GetOnAirship" ? this.MoveDisplayDelay : 0, avgMetaParseTime: Q, maxMetaParseTime: te, avgServerDiff: q, maxServerDiff: J, streamType: WASM_Version }; return this.lastReturnFrames = this.returnFrames, this.lastReceivedEmit = this.receivedEmit, re; } }]); return Workers; }(); function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Rtcp = /*#__PURE__*/function (_EventEmitter) { _inherits(Rtcp, _EventEmitter); var _super = _createSuper$8(Rtcp); function Rtcp(e) { var _this; _classCallCheck(this, Rtcp); _this = _super.call(this); E(_assertThisInitialized(_this), "connection", null); E(_assertThisInitialized(_this), "inputChannel", null); E(_assertThisInitialized(_this), "mediaStream"); E(_assertThisInitialized(_this), "socket"); E(_assertThisInitialized(_this), "connected", !1); E(_assertThisInitialized(_this), "candidates", []); E(_assertThisInitialized(_this), "isAnswered", !1); E(_assertThisInitialized(_this), "isFlushing", !1); E(_assertThisInitialized(_this), "inputReady", !1); E(_assertThisInitialized(_this), "workers"); E(_assertThisInitialized(_this), "actived", !0); E(_assertThisInitialized(_this), "heartbeat"); E(_assertThisInitialized(_this), "onIcecandidate", function (e) { if (e.candidate != null) { var t = JSON.stringify(e.candidate); logger$1.debug("Got ice candidate: ".concat(t)), _this.network.socket.send({ id: "ice_candidate", data: btoa(t) }); } }); E(_assertThisInitialized(_this), "onIcecandidateerror", function (e) { logger$1.error("onicecandidateerror", e.errorCode, e.errorText, e); }); E(_assertThisInitialized(_this), "onIceStateChange", function (e) { switch (e.target.iceGatheringState) { case "gathering": logger$1.info("ice gathering"); break; case "complete": logger$1.info("Ice gathering completed"); } }); E(_assertThisInitialized(_this), "onIceConnectionStateChange", function () { if (!!_this.connection) switch (logger$1.info("iceConnectionState: ".concat(_this.connection.iceConnectionState)), _this.connection.iceConnectionState) { case "connected": { _this.connected = !0; break; } case "disconnected": { _this.connected = !1, _this.emit("rtcDisconnected"); break; } case "failed": { _this.emit("rtcDisconnected"), _this.connected = !1; break; } } }); E(_assertThisInitialized(_this), "setRemoteDescription", /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e, t) { var a, s, l, r, n, o, u; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (_this.connection) { _context.next = 2; break; } return _context.abrupt("return"); case 2: r = JSON.parse(atob(e)), n = new RTCSessionDescription(r); _context.next = 5; return _this.connection.setRemoteDescription(n); case 5: _context.next = 7; return _this.connection.createAnswer(); case 7: o = _context.sent; if (o.sdp = (a = o.sdp) == null ? void 0 : a.replace(/(a=fmtp:111 .*)/g, "$1;stereo=1;sprop-stereo=1"), ((l = (s = o.sdp) == null ? void 0 : s.match(/a=mid:1/g)) == null ? void 0 : l.length) == 2) { u = o.sdp.lastIndexOf("a=mid:1"); o.sdp = o.sdp.slice(0, u) + "a=mid:2" + o.sdp.slice(u + 7); } _context.prev = 9; _context.next = 12; return _this.connection.setLocalDescription(o); case 12: _context.next = 17; break; case 14: _context.prev = 14; _context.t0 = _context["catch"](9); logger$1.error("error", _context.t0); case 17: _this.isAnswered = !0, _this.network.rtcp.flushCandidate(), _this.network.socket.send({ id: "answer", data: btoa(JSON.stringify(o)) }), t.srcObject = _this.mediaStream; case 18: case "end": return _context.stop(); } } }, _callee, null, [[9, 14]]); })); return function (_x, _x2) { return _ref.apply(this, arguments); }; }()); E(_assertThisInitialized(_this), "flushCandidate", function () { _this.isFlushing || !_this.isAnswered || (_this.isFlushing = !0, _this.candidates.forEach(function (e) { var t = atob(e), r = JSON.parse(t); if (/172\./.test(r.candidate)) return; var n = new RTCIceCandidate(r); _this.connection && _this.connection.addIceCandidate(n).then(function () {}, function (o) { logger$1.info("add candidate failed", o); }); }), _this.isFlushing = !1); }); E(_assertThisInitialized(_this), "input", function (e) { var t; !_this.actived || !_this.inputChannel || _this.inputChannel.readyState === "open" && ((t = _this.inputChannel) == null || t.send(e)); }); _this.network = e, _this.workers = new Workers(_assertThisInitialized(_this), logger$1), _this.workers.registerLogger(logger$1), _this.workers.registerFunction("data", function (t) { _this.emit("data", t); }), _this.heartbeat = new Heartbeat({ ping: function ping(t) { e.room.actionsHandler.echo(t); }, pong(t, r) { var n; r && t > 500 && logger$1.warn("high hb value ".concat(t, ", traceId:") + r), (n = e.room.stats) == null || n.assign({ hb: t }); } }); return _this; } _createClass(Rtcp, [{ key: "start", value: function start() { var _this2 = this; this.connection = new RTCPeerConnection(); var e = Date.now(); this.connection.ondatachannel = function (t) { logger$1.info("ondatachannel: ".concat(t.channel.label)); _this2.inputChannel = t.channel; _this2.inputChannel.onopen = function () { var r; logger$1.info("The input channel has opened, id:", (r = _this2.inputChannel) == null ? void 0 : r.id), _this2.inputReady = !0, _this2.emit("rtcConnected"), _this2.network.room.currentNetworkOptions.reconnect || (logger$1.infoAndReportMeasurement({ metric: "datachannelOpenedAt", startTime: _this2.network.room._startTime, group: "joinRoom" }), logger$1.infoAndReportMeasurement({ metric: "datachannelOpenedCost", startTime: e, group: "joinRoom" })); console.log('this.inputChannel', _this2.inputChannel); }, _this2.inputChannel.onclose = function () { var r; return logger$1.info("The input channel has closed, id:", (r = _this2.inputChannel) == null ? void 0 : r.id); }, _this2.inputChannel.onmessage = function (r) { // console.log('this.workers',this.workers) //console.log('inputChannel',r.data) _this2.workers.dataHandle(r.data); }; }, this.connection.oniceconnectionstatechange = this.onIceConnectionStateChange, this.connection.onicegatheringstatechange = this.onIceStateChange, this.connection.onicecandidate = this.onIcecandidate, this.connection.onicecandidateerror = this.onIcecandidateerror, this.network.socket.send({ id: "init_webrtc", data: JSON.stringify({ is_mobile: !0 }) }); } }, { key: "addCandidate", value: function addCandidate(e) { e === "" ? this.network.rtcp.flushCandidate() : this.candidates.push(e); } }, { key: "disconnect", value: function disconnect() { var e, t, r; this.heartbeat.stop(), logger$1.info("ready to close datachannel, id", (e = this.inputChannel) == null ? void 0 : e.id), (t = this.inputChannel) == null || t.close(), (r = this.connection) == null || r.close(), this.connection = null, this.inputChannel = null; } }, { key: "sendStringData", value: function sendStringData(e) { console.log('e', e); this.input(e); } }, { key: "sendData", value: function sendData(e) { var t = ""; try { t = JSON.stringify(e); } catch (r) { logger$1.error(r); return; } this.input(t); } }]); return Rtcp; }(EventEmitter); var NetworkMonitor = /*#__PURE__*/function () { function NetworkMonitor(e) { _classCallCheck(this, NetworkMonitor); this._listener = e; } _createClass(NetworkMonitor, [{ key: "isOnline", get: function get() { var e = window.navigator; return typeof e.onLine == "boolean" ? e.onLine : !0; } }, { key: "start", value: function start() { window.addEventListener("online", this._listener), window.addEventListener("offline", this._listener); } }, { key: "stop", value: function stop() { window.removeEventListener("online", this._listener), window.removeEventListener("offline", this._listener); } }]); return NetworkMonitor; }(); var Stream = /*#__PURE__*/function () { function Stream(e) { _classCallCheck(this, Stream); this.el = null; this._streamPlayTimer = null; if (!e) { this.el = this.createVideoElement(); return; } this.el = e; } _createClass(Stream, [{ key: "play", value: function play() { var _this = this; return new Promise(function (e, t) { _this._streamPlayTimer = new Timeout(function () { t(new InternalError("Stream play timeout")); }, 5e3), _this.el && _this.el.play().then(function () { var r; e(), logger$1.info("Media can autoplay"), (r = _this._streamPlayTimer) == null || r.clear(); }).catch(function (r) { var n; logger$1.error("Media Failed to autoplay"), logger$1.error(r), t(new InternalError("Media Failed to autoplay")), (n = _this._streamPlayTimer) == null || n.clear(); }); }); } }, { key: "createVideoElement", value: function createVideoElement() { var e = document.createElement("video"); return e.muted = !0, e.autoplay = !1, e.playsInline = !0, e.setAttribute("autostart", "false"), e.setAttribute("controls", "controls"), e.setAttribute("muted", "true"), e.setAttribute("preload", "auto"), e.setAttribute("hidden", "hidden"), document.body.appendChild(e), e; } }]); return Stream; }(); function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var workerSourceCode = "onmessage = function (event) {\n const data = event.data\n if (!data) return\n \n if (data.type === 'start') {\n const startTime = Date.now()\n const request = new XMLHttpRequest()\n request.open('GET', data.url)\n try {\n request.send()\n } catch (error) {\n console.error(error)\n }\n request.addEventListener('readystatechange', () => {\n if (request.readyState == 4) {\n if (request.status == 200) {\n postMessage(Date.now() - startTime)\n }\n }\n })\n }\n }\n "; var NetworkController = /*#__PURE__*/function (_EventEmitter) { _inherits(NetworkController, _EventEmitter); var _super = _createSuper$7(NetworkController); function NetworkController(e) { var _this; _classCallCheck(this, NetworkController); _this = _super.call(this); _this.socket = null; _this.rtcp = null; _this.stream = null; _this._state = 'connecting'; _this._networkMonitor = null; _this.blockedActions = []; _this.reconnectCount = 0; _this.room = e, _this.socket = new Socket(_assertThisInitialized(_this)); _this.rtcp = new Rtcp(_assertThisInitialized(_this)); _this.stream = new Stream(); _this._networkMonitor = new NetworkMonitor(function () { logger$1.info("network changed, online:", _this._networkMonitor.isOnline), _this._state === "disconnected" && _this._networkMonitor.isOnline && (logger$1.info("network back to online, try to reconnect"), _this.reconnect()); }); _this.checkNetworkQuality(_this.room.currentNetworkOptions.wsServerUrl); _this._networkMonitor.start(); new VisibilityChangeHandler().subscribe(function (r) { var n, o; r ? ((o = _this.room.stats) == null || o.disable(), logger$1.infoAndReportMeasurement({ metric: "pageHide", startTime: Date.now() })) : ((n = _this.room.stats) == null || n.enable(), logger$1.infoAndReportMeasurement({ metric: "pageShow", startTime: Date.now(), extra: { state: _this._state } }), _this._state === "disconnected" && _this.reconnect()); }); return _this; } _createClass(NetworkController, [{ key: "startGame", value: function startGame() { var _this2 = this; return new Promise(function (e, t) { if (!_this2.rtcp.connected) return t(new InternalError("Game cannot load. Please refresh")); if (!_this2.rtcp.inputReady) return t(new InternalError("Game is not ready yet. Please wait")); _this2.socket.on("gameRoomAvailable", function (r) { _this2.setState("connected"), e(r), _this2.rtcp.heartbeat.start(); }), _this2.socket.on("socketClosed", function (r) { t(r); }), _this2.socket.startGame(); }); } }, { key: "addBlockedActions", value: function addBlockedActions(e) { var _this$blockedActions; (_this$blockedActions = this.blockedActions).push.apply(_this$blockedActions, _toConsumableArray(e)); } }, { key: "removeBlockedActions", value: function removeBlockedActions(e) { if (!e) { this.blockedActions = []; return; } var t = this.blockedActions.indexOf(e); this.blockedActions.splice(t, 1); } }, { key: "setState", value: function setState(e) { this._state !== e && (logger$1.info("Set network state to ", e), this._state = e); } }, { key: "connectAndStart", value: function () { var _connectAndStart = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", this.connect(e).then(this.startGame)); case 1: case "end": return _context.stop(); } } }, _callee, this); })); function connectAndStart(_x) { return _connectAndStart.apply(this, arguments); } return connectAndStart; }() }, { key: "connect", value: function () { var _connect = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { var _this3 = this; var e, _args2 = arguments; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: e = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : !1; this.room.updateCurrentNetworkOptions({ reconnect: e }); return _context2.abrupt("return", new Promise(function (t, r) { _this3.rtcp.on("rtcConnected", function () { _this3.setState("connected"), t(); }), _this3.rtcp.on("rtcDisconnected", function () { logger$1.info("rtc disconnected"), _this3._state === "connecting" ? (_this3.setState("disconnected"), r(new InternalError("rtc connect failed"))) : (_this3.setState("disconnected"), logger$1.info("rtc disconnected, start to reconnect"), _this3.reconnect()); }), _this3.socket.on("socketQuit", function () { logger$1.info("socket quit success"), _this3.setState("closed"); }), _this3.socket.on("socketClosed", function (n) { _this3._state === "connecting" && (_this3.setState("disconnected"), r(n)), r(n); }), _this3.socket.start(); })); case 3: case "end": return _context2.stop(); } } }, _callee2, this); })); function connect() { return _connect.apply(this, arguments); } return connect; }() }, { key: "reconnect", value: function reconnect() { var _this4 = this; if (this.room.viewMode === "observer") return; var e = Date.now(); if (this.reconnectCount++, this.reconnectCount > MAX_RECONNECT_COUNT) { logger$1.error("reconnect failed, reached max reconnect count", MAX_RECONNECT_COUNT), this.reconnectCount = 0, this.emit("stateChanged", { state: "disconnected" }); return; } return logger$1.info("start reconnect, count:", this.reconnectCount), this._reconnect().then(function () { logger$1.infoAndReportMeasurement({ startTime: e, metric: "reconnect" }); }).catch(function (t) { if (logger$1.infoAndReportMeasurement({ startTime: e, metric: "reconnect", error: t }), t.code === Codes.RepeatLogin) { _this4.room.handleRepetLogin(); return; } var r = 1e3; logger$1.info("reconnect failed, wait " + r + " ms for next reconnect"), setTimeout(function () { _this4.reconnect(); }, r); }); } }, { key: "_reconnect", value: function _reconnect() { var _this5 = this; return this._state === "closed" ? (logger$1.warn("connection closed already"), Promise.reject()) : this._state === "connecting" ? (logger$1.warn("connection is already in connecting state"), Promise.reject()) : this._state !== "disconnected" ? Promise.reject() : (this.prepareReconnect(), this._state = "connecting", this.emit("stateChanged", { state: "reconnecting", count: this.reconnectCount }), this.socket.off("gameRoomAvailable"), this.socket.off("socketClosed"), this.rtcp.off("rtcDisconnected"), this.rtcp.off("rtcConnected"), this.connectAndStart(!0).then(function (_ref) { var e = _ref.session_id; _this5.room.updateCurrentNetworkOptions({ sessionId: e }), reporter.updateBody({ serverSession: e }), logger$1.info("reconnect success"), _this5.setState("connected"), _this5.reconnectCount = 0, _this5.emit("stateChanged", { state: "reconnected" }); })); } }, { key: "prepareReconnect", value: function prepareReconnect() { this.rtcp.disconnect(), this.socket.prepareReconnect(), this.prepareReconnectOptions(); } }, { key: "prepareReconnectOptions", value: function prepareReconnectOptions() { var _ref2 = this.room.currentClickingState || {}, e = _ref2.camera, t = _ref2.player; e && t && this.room.updateCurrentNetworkOptions({ camera: e, player: t }); } }, { key: "sendRtcData", value: function sendRtcData(e) { if (this.blockedActions.includes(e.action_type)) { logger$1.info("action: ".concat(Actions[e.action_type], " was blocked")); return; } this.rtcp.sendData(e); } }, { key: "sendSocketData", value: function sendSocketData(e) { logger$1.debug("ws send ->", e), this.socket.send(e); } }, { key: "quit", value: function quit() { var e = util.uuid(), t = { action_type: Actions.Exit, trace_id: e, exit_action: {}, user_id: this.room.options.userId, packet_id: e }; this.setState("closed"), this.socket.quit(), this.sendRtcData(t); } }, { key: "checkNetworkQuality", value: function checkNetworkQuality(i) { var worker = null; if (!i) return; var e = Date.now(); if (this.pingOthers("https://www.baidu.com", function (t, r) { logger$1.infoAndReportMeasurement({ metric: "baiduRtt", group: "http", value: r, startTime: e }); }), !worker) { var t = new Blob([workerSourceCode], { type: "application/javascript" }); worker = new Worker(URL.createObjectURL(t)), worker.onmessage = function (r) { logger$1.infoAndReportMeasurement({ metric: "workerRtt", group: "http", startTime: e, value: r.data }); }; } } }, { key: "pingOthers", value: function pingOthers(i, e) { var t = !1; var r = new Image(); r.onload = o, r.onerror = a; var n = Date.now(); function o(l) { t = !0, s(); } function a(l) {} function s() { var l = Date.now() - n; if (typeof e == "function") return t ? e(null, l) : (console.error("error loading resource"), e("error", l)); } r.src = i + "/favicon.ico?" + +new Date(); } }]); return NetworkController; }(EventEmitter); var AssetTypeName = { Config: 'CONFIG', Model: 'MODEL', Vedio: 'VEDIO', Media: 'MEDIA', Effects: 'EFFECTS', Gift: 'GIFT', Textures: 'TEXTURES' }; var AssetClassName = { Effects: '\u7279\u6548', Tv: 'TV', Lpm: '\u7C97\u6A21', Reward: '\u571F\u8C6A\u699C', Env: '\u73AF\u5883\u5149', Gbq: '\u544A\u767D\u5899', BreathPoint: '\u547C\u5438\u70B9', Gifts: '\u9001\u793C', Panorama: '\u5168\u666F\u56FE', GiftBubble: '\u9001\u793C\u6C14\u6CE1', SayBubble: '\u804A\u5929\u6C14\u6CE1' }; var LoggerLevels$1 = { Debug: 1, Info: 2, Warn: 3, Error: 4, Off: 5 }; var EShaderMode = { default: 0, video: 1, videoAndPano: 2 }; var EFitMode = { fill: 'fill', contain: 'contain', cover: 'cover' }; var BaseTable = /*#__PURE__*/function () { function BaseTable(e, t) { _classCallCheck(this, BaseTable); this.db = null; this.isCreatingTable = !1; this.hasCleared = !1; this.dbName = e, this.dbVersion = t; } _createClass(BaseTable, [{ key: "clearDataBase", value: function () { var _clearDataBase = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var _this = this; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", this.hasCleared || (e && (this.hasCleared = !0), !window.indexedDB.databases) ? Promise.resolve() : new Promise(function (t, r) { var n = window.indexedDB.deleteDatabase(_this.dbName); n.onsuccess = function () { t(); }, n.onerror = r; })); case 1: case "end": return _context.stop(); } } }, _callee, this); })); function clearDataBase(_x) { return _clearDataBase.apply(this, arguments); } return clearDataBase; }() }, { key: "tableName", value: function tableName() { throw new Error("Derived class have to override 'tableName', and set a proper table name!"); } }, { key: "keyPath", value: function keyPath() { throw new Error("Derived class have to override 'keyPath', and set a proper index name!"); } }, { key: "index", value: function index() { throw new Error("Derived class have to override 'index', and set a proper index name!"); } }, { key: "checkAndOpenDatabase", value: function () { var _checkAndOpenDatabase = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { var _this2 = this; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: return _context2.abrupt("return", this.db ? Promise.resolve(this.db) : new Promise(function (e, t) { var n = setTimeout(function () { logger$1.info("wait db to open for", 200), _this2.db ? e(_this2.db) : e(_this2.checkAndOpenDatabase()), clearTimeout(n); }, 200); _this2.openDatabase(_this2.dbName, _this2.dbVersion || 1, function () { _this2.db && !_this2.isCreatingTable && e(_this2.db), logger$1.info("successCallback called, this.db: ".concat(!!_this2.db, ", this.isCreatingStore: ").concat(_this2.isCreatingTable)), clearTimeout(n); }, function () { t(new Error("Failed to open database!")), clearTimeout(n); }, function () { _this2.db && e(_this2.db), clearTimeout(n), logger$1.info("successCallback called, this.db: ".concat(!!_this2.db, ", this.isCreatingStore: ").concat(_this2.isCreatingTable)); }); })); case 1: case "end": return _context2.stop(); } } }, _callee2, this); })); function checkAndOpenDatabase() { return _checkAndOpenDatabase.apply(this, arguments); } return checkAndOpenDatabase; }() }, { key: "openDatabase", value: function openDatabase(e, t, r, n, o) { var _this3 = this; if (this.isCreatingTable) return; this.isCreatingTable = !0, logger$1.info(e, t); var a = window.indexedDB.open(e, t), s = this.tableName(); a.onsuccess = function (l) { _this3.db = a.result, logger$1.info("IndexedDb ".concat(e, " is opened.")), _this3.db.objectStoreNames.contains(s) && (_this3.isCreatingTable = !1), r && r(l); }, a.onerror = function (l) { var u; logger$1.error("Failed to open database", (u = l == null ? void 0 : l.srcElement) == null ? void 0 : u.error), _this3.isCreatingTable = !1, n && n(l), _this3.clearDataBase(!0); }, a.onupgradeneeded = function (l) { var u = l.target.result, c = _this3.index(); logger$1.info("Creating table ".concat(s, ".")); var h = u.objectStoreNames.contains(s); if (h) h = u.transaction([s], "readwrite").objectStore(s);else { var f = _this3.keyPath(); h = u.createObjectStore(s, { keyPath: f }); } c.map(function (f) { h.createIndex(f, f, { unique: !1 }); }), _this3.isCreatingTable = !1, logger$1.info("Table ".concat(s, " opened")), o && o(l); }; } }, { key: "add", value: function () { var _add = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var t, o; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: t = this.tableName(); _context3.next = 3; return this.checkAndOpenDatabase(); case 3: o = _context3.sent.transaction([t], "readwrite").objectStore(t).add(e); return _context3.abrupt("return", new Promise(function (a, s) { o.onsuccess = function (l) { a(l); }, o.onerror = function (l) { var u; logger$1.error((u = l.srcElement) == null ? void 0 : u.error), s(l); }; })); case 5: case "end": return _context3.stop(); } } }, _callee3, this); })); function add(_x2) { return _add.apply(this, arguments); } return add; }() }, { key: "put", value: function () { var _put = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) { var t, o; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: t = this.tableName(); _context4.next = 3; return this.checkAndOpenDatabase(); case 3: o = _context4.sent.transaction([t], "readwrite").objectStore(t).put(e); return _context4.abrupt("return", new Promise(function (a, s) { o.onsuccess = function (l) { a(l); }, o.onerror = function (l) { var u; logger$1.error("db put error", (u = l.srcElement) == null ? void 0 : u.error), s(l); }; })); case 5: case "end": return _context4.stop(); } } }, _callee4, this); })); function put(_x3) { return _put.apply(this, arguments); } return put; }() }, { key: "delete", value: function _delete(e, t, r) { var n = this.tableName(); this.checkAndOpenDatabase().then(function (o) { var s = o.transaction([n], "readwrite").objectStore(n).delete(e); s.onsuccess = t, s.onerror = r; }); } }, { key: "update", value: function update() { this.checkAndOpenDatabase().then(function (e) {}); } }, { key: "getAllKeys", value: function () { var _getAllKeys = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5() { var e, t; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: e = this.tableName(); _context5.next = 3; return this.checkAndOpenDatabase(); case 3: t = _context5.sent; return _context5.abrupt("return", new Promise(function (r, n) { var a = t.transaction([e], "readonly").objectStore(e).getAllKeys(); a.onsuccess = function (s) { r(s.target.result); }, a.onerror = function (s) { logger$1.error("db getAllKeys error", s), n(s); }; })); case 5: case "end": return _context5.stop(); } } }, _callee5, this); })); function getAllKeys() { return _getAllKeys.apply(this, arguments); } return getAllKeys; }() }, { key: "query", value: function () { var _query = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e, t) { var r, n; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: r = this.tableName(); _context6.next = 3; return this.checkAndOpenDatabase(); case 3: n = _context6.sent; return _context6.abrupt("return", new Promise(function (o, a) { var u = n.transaction([r], "readonly").objectStore(r).index(e).get(t); u.onsuccess = function (c) { var f; var h = (f = c == null ? void 0 : c.target) == null ? void 0 : f.result; o && o(h); }, u.onerror = function (c) { logger$1.error("db query error", c), a(c); }; })); case 5: case "end": return _context6.stop(); } } }, _callee6, this); })); function query(_x4, _x5) { return _query.apply(this, arguments); } return query; }() }, { key: "sleep", value: function () { var _sleep = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7(e) { return regenerator.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: return _context7.abrupt("return", new Promise(function (t) { setTimeout(function () { t(""); }, e); })); case 1: case "end": return _context7.stop(); } } }, _callee7); })); function sleep(_x6) { return _sleep.apply(this, arguments); } return sleep; }() }]); return BaseTable; }(); function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ModelTable = /*#__PURE__*/function (_BaseTable) { _inherits(ModelTable, _BaseTable); var _super = _createSuper$6(ModelTable); function ModelTable() { _classCallCheck(this, ModelTable); return _super.call(this, "XverseDatabase", 1); } _createClass(ModelTable, [{ key: "tableName", value: function tableName() { return "models"; } }, { key: "index", value: function index() { return ["url"]; } }, { key: "keyPath", value: function keyPath() { return "url"; } }]); return ModelTable; }(BaseTable); var modelTable = new ModelTable(); function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var isIndexedDbSupported = function isIndexedDbSupported() { return (window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB) !== void 0; }; var dataURItoBlob = function dataURItoBlob(i) { var e; i.split(",")[0].indexOf("base64") >= 0 ? e = atob(i.split(",")[1]) : e = unescape(i.split(",")[1]); var t = i.split(",")[0].split(":")[1].split(";")[0], r = new Uint8Array(e.length); for (var o = 0; o < e.length; o++) { r[o] = e.charCodeAt(o); } return new Blob([r], { type: t }); }; var Http = /*#__PURE__*/function (_EventEmitter) { _inherits(Http, _EventEmitter); var _super = _createSuper$5(Http); function Http() { _classCallCheck(this, Http); return _super.apply(this, arguments); } _createClass(Http, [{ key: "get", value: function () { var _get = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(_ref) { var e, _ref$useIndexedDb, t, _ref$timeout, r, n, _ref$isOutPutObjectUR, o, a, s, l; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: e = _ref.url, _ref$useIndexedDb = _ref.useIndexedDb, t = _ref$useIndexedDb === void 0 ? !1 : _ref$useIndexedDb, _ref$timeout = _ref.timeout, r = _ref$timeout === void 0 ? 15e3 : _ref$timeout, n = _ref.key, _ref$isOutPutObjectUR = _ref.isOutPutObjectURL, o = _ref$isOutPutObjectUR === void 0 ? !0 : _ref$isOutPutObjectUR; if (!(Xverse.NO_CACHE !== void 0 && (t = !Xverse.NO_CACHE), t)) { _context2.next = 25; break; } if (!isIndexedDbSupported()) { _context2.next = 22; break; } window.performance.now(); a = null; _context2.prev = 5; _context2.next = 8; return modelTable.query("url", e); case 8: a = _context2.sent; _context2.next = 14; break; case 11: _context2.prev = 11; _context2.t0 = _context2["catch"](5); return _context2.abrupt("return", (logger$1.debug(_context2.t0), logger$1.warn("cache query error", e), Promise.resolve(e))); case 14: if (!(a && a.model)) { _context2.next = 19; break; } s = dataURItoBlob(a.model), l = Promise.resolve(o ? URL.createObjectURL(s) : s); return _context2.abrupt("return", (window.performance.now(), l)); case 19: return _context2.abrupt("return", this.request({ url: e, timeout: r, contentType: "blob", key: n }).then( /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(s) { var l; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return blobToDataURI(s.response); case 2: l = _context.sent; _context.prev = 3; _context.next = 6; return modelTable.put({ url: e, model: l }); case 6: _context.next = 11; break; case 8: _context.prev = 8; _context.t0 = _context["catch"](3); logger$1.warn("unable to add data to indexedDB", _context.t0); case 11: return _context.abrupt("return", Promise.resolve(o ? URL.createObjectURL(s.response) : s.response)); case 12: case "end": return _context.stop(); } } }, _callee, null, [[3, 8]]); })); return function (_x2) { return _ref2.apply(this, arguments); }; }())); case 20: _context2.next = 23; break; case 22: return _context2.abrupt("return", this.request({ url: e, timeout: r, contentType: "blob", key: n }).then(function (a) { var s = a.response; return Promise.resolve(o ? URL.createObjectURL(s) : s); }).catch(function (a) { return Promise.reject(a); })); case 23: _context2.next = 26; break; case 25: return _context2.abrupt("return", this.request({ url: e, timeout: r, key: n }).then(function (a) { return a.getResponseHeader("content-type") === "application/json" ? Promise.resolve(JSON.parse(a.responseText)) : Promise.resolve(a.responseText); })); case 26: case "end": return _context2.stop(); } } }, _callee2, this, [[5, 11]]); })); function get(_x) { return _get.apply(this, arguments); } return get; }() }, { key: "request", value: function request(e) { var _this = this; var _e$timeout = e.timeout, t = _e$timeout === void 0 ? 3e4 : _e$timeout, r = e.contentType; e.key; var o = e.onRequestStart, a = e.url; return new Promise(function (s, l) { window.performance.now(); var u = new XMLHttpRequest(); r && (u.responseType = r), u.timeout = t, u.addEventListener("readystatechange", function () { if (u.readyState == 4) { if (u.status == 200) return window.performance.now(), _this.emit("loadend", { message: "request ".concat(a, " load success") }), s(u); { var c = "Unable to load the request ".concat(a); return _this.emit("error", { message: c }), logger$1.error(c), l(c); } } }), o && o(u), u.open("GET", a), u.send(); }); } }]); return Http; }(EventEmitter); // const http = new Http(); var Logger1 = /*#__PURE__*/function () { function Logger1(e) { _classCallCheck(this, Logger1); E(this, "module"); this.module = e; } _createClass(Logger1, [{ key: "debug", value: function debug() { var _Logger1$instance; return (_Logger1$instance = Logger1.instance).debug.apply(_Logger1$instance, arguments); } }, { key: "info", value: function info() { var _Logger1$instance2; return (_Logger1$instance2 = Logger1.instance).info.apply(_Logger1$instance2, arguments); } }, { key: "warn", value: function warn() { var _Logger1$instance3; return (_Logger1$instance3 = Logger1.instance).warn.apply(_Logger1$instance3, arguments); } }, { key: "error", value: function error() { var _Logger1$instance4; return (_Logger1$instance4 = Logger1.instance).error.apply(_Logger1$instance4, arguments); } }], [{ key: "setLogger", value: function setLogger(e) { Logger1.instance = e; } }]); return Logger1; }(); var XCameraComponent = /*#__PURE__*/function () { function XCameraComponent(e, t, r) { var _this = this; _classCallCheck(this, XCameraComponent); E(this, "maincameraRotLimitObserver", null); E(this, "mainCamera"); E(this, "cgCamera"); E(this, "saveCameraPose"); E(this, "_cameraPose"); E(this, "scene"); E(this, "canvas"); E(this, "yuvInfo"); E(this, "forceKeepVertical", !1); E(this, "initCamera", function (e) { var _e$maxZ = e.maxZ, t = _e$maxZ === void 0 ? 1e4 : _e$maxZ, _e$minZ = e.minZ, r = _e$minZ === void 0 ? .1 : _e$minZ, _e$angularSensibility = e.angularSensibility, n = _e$angularSensibility === void 0 ? 2e3 : _e$angularSensibility; _this.mainCamera = new BABYLON.FreeCamera("camera_main", new BABYLON.Vector3(0, 1e3, 0), _this.scene), _this.mainCamera.mode = BABYLON.Camera.PERSPECTIVE_CAMERA, _this.mainCamera.speed = .1, _this.mainCamera.angularSensibility = n, _this.mainCamera.setTarget(new BABYLON.Vector3(0, 1010, 0)), _this.mainCamera.minZ = r, _this.mainCamera.fov = Math.PI * _this.yuvInfo.fov / 180, _this.mainCamera.maxZ = t, _this.mainCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED, _this.cgCamera = new BABYLON.FreeCamera("camera_temp", new BABYLON.Vector3(0, 1e3, 0), _this.scene), _this.cgCamera.mode = BABYLON.Camera.PERSPECTIVE_CAMERA, _this.cgCamera.speed = .1, _this.cgCamera.setTarget(new BABYLON.Vector3(0, 1010, 0)), _this.cgCamera.maxZ = t, _this.cgCamera.minZ = r, _this.cgCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED, _this.cameraFovChange(_this.yuvInfo); }); E(this, "cameraFovChange", function (e) { _this.yuvInfo = e; var t = e.width, r = e.height, n = _this.canvas.width, o = _this.canvas.height, a = e.fov; if (_this.forceKeepVertical == !0) { var s = t / (2 * Math.tan(Math.PI * a / 360)), l = 2 * Math.atan(r / (2 * s)); _this.mainCamera.fov = l, _this.cgCamera.fov = l, _this.mainCamera.fovMode = BABYLON.Camera.FOVMODE_VERTICAL_FIXED, _this.cgCamera.fovMode = BABYLON.Camera.FOVMODE_VERTICAL_FIXED; } else if (_this.mainCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED, _this.cgCamera.fovMode = BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED, n / o < t / r && _this.mainCamera.fov) { var _s = o, _l = n, u = _s * t / r / (2 * Math.tan(a * Math.PI / 360)), c = 2 * Math.atan(_l / (2 * u)); _this.mainCamera.fov = c, _this.cgCamera.fov = c; } else _this.mainCamera.fov = Math.PI * a / 180, _this.cgCamera.fov = Math.PI * a / 180; }); E(this, "setCameraPose", function (e) { var n; var t = ue4Position2Xverse(e.position); var r = null; e.rotation != null && (r = ue4Rotation2Xverse(e.rotation)), _this._cameraPose = { position: t }, r != null && (_this._cameraPose.rotation = r), _this.scene.activeCamera === _this.mainCamera && !((n = _this.mainCamera) != null && n.isDisposed()) && _this._setCamPositionRotation(_this.mainCamera, _this._cameraPose); }); E(this, "_setCamPositionRotation", function (e, t) { var r, n; t.position && (e.position = (r = t.position) == null ? void 0 : r.clone()), t.rotation && (e.rotation = (n = t.rotation) == null ? void 0 : n.clone()); }); E(this, "switchCamera", function (e) { var t; (t = _this.scene.activeCamera) == null || t.detachControl(_this.canvas), _this.scene.activeCamera = e; }); E(this, "reCalXYZRot", function (e, t) { return e = e % (2 * Math.PI), Math.abs(t - e) >= Math.PI && (e = e - 2 * Math.PI), e; }); E(this, "_moveCam", function (e, t, r, n, o, a, s, l) { var u = function u(v, y, b) { return v.x = _this.reCalXYZRot(v.x, y.x), v.y = _this.reCalXYZRot(v.y, y.y), v.z = _this.reCalXYZRot(v.z, y.z), new BABYLON.Vector3((y.x - v.x) * b + v.x, (y.y - v.y) * b + v.y, (y.z - v.z) * b + v.z); }, c = function c(v, y, b) { return new BABYLON.Vector3((y.x - v.x) * b + v.x, (y.y - v.y) * b + v.y, (y.z - v.z) * b + v.z); }, h = new Animation("myAnimation1", "position", s, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT); var f = [], d = t, _ = r; for (var v = 0; v < a; ++v) { f.push({ frame: v, value: c(d, _, v / a) }); } f.push({ frame: f.length, value: c(d, _, 1) }), h.setKeys(f); var g = new Animation("myAnimation2", "rotation", s, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT); f = [], d = n, _ = o; for (var _v = 0; _v < a; ++_v) { f.push({ frame: _v, value: u(d, _, _v / a) }); } f.push({ frame: f.length, value: u(d, _, 1) }), g.setKeys(f), e.animations.push(g), e.animations.push(h); var m = _this.scene.beginAnimation(e, 0, a, !1); m.onAnimationEnd = function () { l(), m.stop(), m.animationStarted = !1; }; }); this.scene = t, this.canvas = e, this.yuvInfo = r.yuvInfo, r.forceKeepVertical != null && (this.forceKeepVertical = r.forceKeepVertical), this.initCamera(r.cameraParam); } _createClass(XCameraComponent, [{ key: "MainCamera", get: function get() { return this.mainCamera; } }, { key: "CgCamera", get: function get() { return this.cgCamera; } }, { key: "getCameraHorizonFov", value: function getCameraHorizonFov() { return this.mainCamera.fovMode == BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED ? this.mainCamera.fov : Math.PI * this.yuvInfo.fov / 180; } }, { key: "changeMainCameraRotationDamping", value: function changeMainCameraRotationDamping() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2e3; this.mainCamera.angularSensibility = e; } }, { key: "removeMainCameraRotationLimit", value: function removeMainCameraRotationLimit() { this.maincameraRotLimitObserver != null && this.mainCamera.onAfterCheckInputsObservable.remove(this.maincameraRotLimitObserver); } }, { key: "setMainCameraInfo", value: function setMainCameraInfo(e) { var _e$maxZ2 = e.maxZ, t = _e$maxZ2 === void 0 ? 1e4 : _e$maxZ2, _e$minZ2 = e.minZ, r = _e$minZ2 === void 0 ? .1 : _e$minZ2, _e$angularSensibility2 = e.angularSensibility, n = _e$angularSensibility2 === void 0 ? 2e3 : _e$angularSensibility2; this.mainCamera.maxZ = t, this.mainCamera.minZ = r, this.mainCamera.angularSensibility = n; } }, { key: "getMainCameraInfo", value: function getMainCameraInfo() { return { maxZ: this.mainCamera.maxZ, minZ: this.mainCamera.minZ, angularSensibility: this.mainCamera.angularSensibility }; } }, { key: "_limitAngle", value: function _limitAngle(e, t) { return Math.abs(Math.abs(t[0] - t[1]) - 360) < 1e-6 || (e = (e % 360 + 360) % 360, t[0] = (t[0] % 360 + 360) % 360, t[1] = (t[1] % 360 + 360) % 360, t[0] > t[1] ? e > t[1] && e < t[0] && (Math.abs(e - t[0]) < Math.abs(e - t[1]) ? e = t[0] : e = t[1]) : e < t[0] ? e = t[0] : e > t[1] && (e = t[1])), e; } }, { key: "setMainCameraRotationLimit", value: function setMainCameraRotationLimit(e, t) { var _this2 = this; this.maincameraRotLimitObserver != null && this.removeMainCameraRotationLimit(); var r = this.mainCamera, n = e.yaw, o = e.pitch, a = e.roll, s = t.yaw, l = t.pitch, u = t.roll; if (s < 0 || l < 0 || u < 0) throw new Error("\u76F8\u673A\u65CB\u8F6C\u9650\u5236\u53EA\u80FD\u8BBE\u7F6E\u4E3A\u5927\u4E8E0"); var c = [o - l, o + l], h = [n - s, n + s], f = [a - u, a + u]; this.maincameraRotLimitObserver = r.onAfterCheckInputsObservable.add(function () { var _xverseRotation2Ue = xverseRotation2Ue4(r.rotation), d = _xverseRotation2Ue.pitch, _ = _xverseRotation2Ue.yaw, g = _xverseRotation2Ue.roll; d = _this2._limitAngle(d, c), _ = _this2._limitAngle(_, h), g = _this2._limitAngle(g, f), r.rotation = ue4Rotation2Xverse({ pitch: d, yaw: _, roll: g }); }); } }, { key: "setMainCameraRotationLimitByAnchor", value: function setMainCameraRotationLimitByAnchor(e, t, r) { this.maincameraRotLimitObserver != null && this.removeMainCameraRotationLimit(); var n = this.mainCamera, o = ue4Rotation2Xverse_mesh(t), a = ue4Rotation2Xverse_mesh(r); a != null && o != null && e.mesh != null && (this.maincameraRotLimitObserver = n.onAfterCheckInputsObservable.add(function () { var s = e.mesh.rotation; r.yaw > 0 && (n.rotation.y <= s.y - a.y + o.y ? n.rotation.y = s.y - a.y + o.y : n.rotation.y >= s.y + a.y + o.y && (n.rotation.y = s.y + a.y + o.y)), r.pitch > 0 && (n.rotation.x <= s.x - a.x + o.x ? n.rotation.x = s.x - a.x + o.x : n.rotation.x >= s.x + a.x + o.x && (n.rotation.x = s.x + a.x + o.x)), r.roll > 0 && (n.rotation.z <= s.z - a.z + o.z ? n.rotation.z = s.z - a.z + o.z : n.rotation.z >= s.z + a.z + o.z && (n.rotation.z = s.z + a.z + o.z)); })); } }, { key: "getCameraPose", value: function getCameraPose() { var e = xversePosition2Ue4({ x: this.mainCamera.position.x, y: this.mainCamera.position.y, z: this.mainCamera.position.z }), t = xverseRotation2Ue4({ x: this.mainCamera.rotation.x, y: this.mainCamera.rotation.y, z: this.mainCamera.rotation.z }); return { position: e, rotation: t }; } }, { key: "changeCameraFov", value: function changeCameraFov(e, t) { this.mainCamera.fov = e, t != null && (this.mainCamera.fovMode = t == 0 ? BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED : BABYLON.Camera.FOVMODE_VERTICAL_FIXED); } }, { key: "controlCameraRotation", value: function controlCameraRotation(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : .5; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : .5; var o = { pitch: n * t * 180, yaw: r * e * 180, roll: 0 }; this.addRot(o); } }, { key: "addRot", value: function addRot(e) { var t = this.mainCamera, r = ue4Rotation2Xverse_mesh(e); r != null && t.rotation.addInPlace(r); } }, { key: "getCameraFov", value: function getCameraFov() { return this.mainCamera.fov; } }, { key: "allowMainCameraController", value: function allowMainCameraController() { this.mainCamera.attachControl(this.canvas, !0); } }, { key: "detachMainCameraController", value: function detachMainCameraController() { this.mainCamera.detachControl(this.canvas); } }, { key: "forceChangeSavedCameraPose", value: function forceChangeSavedCameraPose(e) { this.saveCameraPose != null && (e.position != null && (this.saveCameraPose.position = ue4Position2Xverse(e.position)), e.rotation != null && (this.saveCameraPose.rotation = ue4Rotation2Xverse(e.rotation))); } }, { key: "changeToFirstPersonView", value: function changeToFirstPersonView(e) { this.saveCameraPose = { position: this.mainCamera.position.clone(), rotation: this.mainCamera.rotation.clone() }, this.mainCamera.attachControl(this.canvas, !0), e.position != null && (this.mainCamera.position = ue4Position2Xverse(e.position)), e.rotation != null && (this.mainCamera.rotation = ue4Rotation2Xverse(e.rotation)); } }, { key: "changeToThirdPersonView", value: function changeToThirdPersonView() { this.saveCameraPose != null && this.mainCamera != null && (this.mainCamera.position = this.saveCameraPose.position.clone(), this.mainCamera.rotation = this.saveCameraPose.rotation.clone(), this.mainCamera.detachControl(this.canvas)); } }, { key: "switchToMainCamera", value: function switchToMainCamera() { this.switchCamera(this.mainCamera); } }, { key: "switchToCgCamera", value: function switchToCgCamera() { this.switchCamera(this.cgCamera); } }, { key: "moveMainCamera", value: function moveMainCamera(e, t, r, n, o) { this._moveCam(this.mainCamera, this.mainCamera.position, e, this.mainCamera.rotation, t, r, n, o); } }]); return XCameraComponent; }(); var EMeshType = { XAvatar: 'XAvatar', XStaticMesh: 'XStaticMesh', XBreathPoint: 'breathpoint', Decal: 'decal', Cgplane: 'cgplane', Tv: 'tv', XSubSequence: 'XSubSequence', XBillboard: 'XBillboard' }; var XStaticMesh = /*#__PURE__*/function () { function XStaticMesh(_ref) { var _this = this; var e = _ref.id, t = _ref.mesh, _ref$group = _ref.group, r = _ref$group === void 0 ? "default" : _ref$group, _ref$lod = _ref.lod, n = _ref$lod === void 0 ? 0 : _ref$lod, _ref$xtype = _ref.xtype, o = _ref$xtype === void 0 ? EMeshType.XStaticMesh : _ref$xtype, _ref$skinInfo = _ref.skinInfo, a = _ref$skinInfo === void 0 ? "default" : _ref$skinInfo, _ref$url = _ref.url, s = _ref$url === void 0 ? "" : _ref$url; _classCallCheck(this, XStaticMesh); E(this, "_mesh"); E(this, "_id", "-1"); E(this, "_group"); E(this, "_lod"); E(this, "_isMoving", !1); E(this, "_isRotating", !1); E(this, "_isVisible", !0); E(this, "_skinInfo"); E(this, "setVisibility", function (e, t) { Array.isArray(e) ? e.forEach(function (r) { _this.setVisibility(r, t); }) : e.isAnInstance || (e.visibility = t); }); E(this, "setPickable", function (e, t) { Array.isArray(e) ? e.forEach(function (r) { _this.setPickable(r, t); }) : ("isPickable" in e && (e.isPickable = t), e.setEnabled(t)); }); E(this, "hide", function () { var e; _this._isVisible = !1, _this.mesh && _this.setVisibility(_this.mesh, 0), _this.mesh && _this.setPickable(_this.mesh, !1), (e = _this.mesh) == null || e.getChildMeshes().forEach(function (t) { _this.setVisibility(t, 0), _this.setPickable(t, !1); }); }); E(this, "show", function () { var e; _this._isVisible = !0, _this.mesh && _this.setVisibility(_this.mesh, 1), _this.mesh && _this.setPickable(_this.mesh, !0), (e = _this.mesh) == null || e.getChildMeshes().forEach(function (t) { _this.setVisibility(t, 1), _this.setPickable(t, !0); }); }); E(this, "attachToAvatar", function (e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { x: 0, y: .5, z: 0 }; var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { yaw: 0, pitch: 0, roll: 0 }; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { x: .35, y: .35, z: .35 }; var o = ue4Scaling2Xverse(n), a = ue4Rotation2Xverse(r), s = ue4Position2Xverse(t), l = _this._mesh; e && l ? (e.setParent(l), e.position = s, e.rotation = a, e.scaling = o) : logger$1.error("[Engine] avatar or attachment not found!"); }); E(this, "detachFromAvatar", function (e) { _this._mesh && e ? _this._mesh.removeChild(e) : logger$1.error("[Engine] avatar not found!"); }); this._id = e, this._mesh = t, this._group = r, this._lod = n, this._skinInfo = a, this.unallowMove(), this._mesh.xtype = o, this._mesh.xid = e, this._mesh.xgroup = this._group, this._mesh.xlod = this._lod, this._mesh.xskinInfo = this._skinInfo, this._mesh.xurl = s; } _createClass(XStaticMesh, [{ key: "mesh", get: function get() { return this._mesh; } }, { key: "position", get: function get() { var o; if (!this._mesh) return null; var _ref2 = (o = this._mesh) == null ? void 0 : o.position, e = _ref2.x, t = _ref2.y, r = _ref2.z; return xversePosition2Ue4({ x: e, y: t, z: r }); } }, { key: "id", get: function get() { return this._id; } }, { key: "group", get: function get() { return this._group; } }, { key: "isMoving", get: function get() { return this._isMoving; } }, { key: "isVisible", get: function get() { return this._isVisible; } }, { key: "isRotating", get: function get() { return this._isRotating; } }, { key: "skinInfo", get: function get() { return this._skinInfo; } }, { key: "allowMove", value: function allowMove() { this._mesh != null && (this._mesh.getChildMeshes().forEach(function (e) { e.unfreezeWorldMatrix(); }), this._mesh.unfreezeWorldMatrix()); } }, { key: "unallowMove", value: function unallowMove() { this._mesh != null && (this._mesh.getChildMeshes().forEach(function (e) { e.freezeWorldMatrix(); }), this._mesh.freezeWorldMatrix()); } }, { key: "getID", value: function getID() { return this._id; } }, { key: "setPosition", value: function setPosition(e) { if (this._mesh) { var t = ue4Position2Xverse(e); this._mesh.position = t; } else logger$1.error("[Engine] no root for positioning"); } }, { key: "setRotation", value: function setRotation(e) { var t = ue4Rotation2Xverse_mesh(e); this._mesh ? this._mesh.rotation = t : logger$1.error("[Engine] no root for rotating"); } }, { key: "setScale", value: function setScale(e) { this._mesh ? this._mesh.scaling = new BABYLON.Vector3(e, e, -e) : logger$1.error("[Engine] no root for scaling"); } }, { key: "disableAvatar", value: function disableAvatar() { var e; (e = this._mesh) == null || e.setEnabled(!1); } }, { key: "enableAvatar", value: function enableAvatar() { var e; (e = this._mesh) == null || e.setEnabled(!0); } }, { key: "togglePickable", value: function togglePickable(e) { var t; (t = this.mesh) == null || t.getChildMeshes().forEach(function (r) { "instances" in r && "isPickable" in r && (r.isPickable = e); }), this.mesh != null && "isPickable" in this.mesh && (this.mesh.isPickable = e); } }, { key: "setMaterial", value: function setMaterial(e) { var t; (t = this.mesh) == null || t.getChildMeshes().forEach(function (r) { "instances" in r && "material" in r && (r.material = e); }), this.mesh != null && "material" in this.mesh && (this.mesh.material = e); } }, { key: "dispose", value: function dispose() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; !this.mesh.isDisposed() && this.mesh.dispose(e, t); } }]); return XStaticMesh; }(); function _createSuper$4(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$4(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$4() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var XLowpolyModelError = /*#__PURE__*/function (_XverseError) { _inherits(XLowpolyModelError, _XverseError); var _super = _createSuper$4(XLowpolyModelError); function XLowpolyModelError(e) { _classCallCheck(this, XLowpolyModelError); return _super.call(this, 5204, e || "[Engine] \u4F20\u5165\u6A21\u578Burl\u9519\u8BEF"); } return _createClass(XLowpolyModelError); }(XverseError); var XStaticMeshFromOneGltf = /*#__PURE__*/function () { function XStaticMeshFromOneGltf(e, t) { var _this = this; _classCallCheck(this, XStaticMeshFromOneGltf); E(this, "_scene"); E(this, "_url"); E(this, "_group"); E(this, "_pickable"); E(this, "_meshes"); E(this, "_id"); E(this, "_lod"); E(this, "_groupUuid"); E(this, "_isInScene"); E(this, "_skinInfo"); E(this, "loadMesh", function (e, t) { var r = _this._meshes.length, n = t ? 1 : 0, o = _this._url; return BABYLON.SceneLoader.LoadAssetContainerAsync("", o, _this._scene, function () { _this._scene.blockMaterialDirtyMechanism = !0; }, ".glb").then(function (a) { for (var s = a.materials.length - 1; s >= 0; --s) { a.materials[s].dispose(); } _this._scene.blockMaterialDirtyMechanism = !0; for (var _s = 0; _s < a.meshes.length; ++_s) { var l = a.meshes[_s]; if ("instances" in l) { "visibility" in l && (l.visibility = 0), "isPickable" in l && (l.isPickable = _this._pickable), e != null && (l.material = e), "hasVertexAlpha" in l && (l.hasVertexAlpha = !1); var u = new XStaticMesh({ id: _this._groupUuid + "-" + Math.random().toString(36).substr(2, 5), mesh: l, lod: _this._lod, group: _this._group, url: _this._url, xtype: EMeshType.XStaticMesh, skinInfo: _this._skinInfo }); _this._meshes.push(u); } _this._scene.addMesh(l); } return !0; }).then(function () { _this._isInScene = !0; for (var a = r; a < _this._meshes.length; ++a) { _this._meshes[a].mesh.visibility = n; } return Promise.resolve(!0); }).catch(function (a) { logger$1.error("[Engine] input gltf mesh uri error! " + a), Promise.reject(new XLowpolyModelError("[Engine] input gltf mesh uri error! " + a)); }); }); this._meshes = [], this._scene = e, this._url = t.url, t.group != null ? this._group = t.group : this._group = "default", t.pick != null ? this._pickable = t.pick : this._pickable = !1, t.id != null ? this._id = t.id : this._id = "default", t.lod != null ? this._lod = t.lod : this._lod = -1, t.skinInfo != null ? this._skinInfo = t.skinInfo : this._skinInfo = "default", this._groupUuid = util.uuid(), this._isInScene = !1; } _createClass(XStaticMeshFromOneGltf, [{ key: "isinscene", get: function get() { return this._isInScene; } }, { key: "groupUuid", get: function get() { return this._groupUuid; } }, { key: "skinInfo", get: function get() { return this._skinInfo; } }, { key: "group", get: function get() { return this._group; } }, { key: "meshes", get: function get() { return this._meshes; } }, { key: "url", get: function get() { return this._url; } }, { key: "id", get: function get() { return this._id; } }, { key: "lod", get: function get() { return this._lod; } }, { key: "removeFromScene", value: function removeFromScene() { if (this._isInScene) { this._isInScene = !1; for (var e = 0, t = this._meshes.length; e < t; ++e) { this._meshes[e].mesh != null && this._scene.removeMesh(this._meshes[e].mesh); } } } }, { key: "addToScene", value: function addToScene() { if (this._isInScene == !1) { this._isInScene = !0; for (var e = 0, t = this._meshes.length; e < t; ++e) { this._meshes[e].mesh != null && this._scene.addMesh(this._meshes[e].mesh); } } } }, { key: "toggleVisibility", value: function toggleVisibility(e) { var t = e ? 1 : 0; for (var r = 0, n = this._meshes.length; r < n; ++r) { "visibility" in this._meshes[r].mesh && (this._meshes[r].mesh.visibility = t); } } }, { key: "togglePickable", value: function togglePickable(e) { for (var t = 0, r = this._meshes.length; t < r; ++t) { "isPickable" in this._meshes[t].mesh && (this._meshes[t].mesh.isPickable = e); } } }, { key: "setMaterial", value: function setMaterial(e) { for (var t = 0, r = this._meshes.length; t < r; ++t) { "material" in this._meshes[t].mesh && (this._meshes[t].mesh.material = e); } } }, { key: "dispose", value: function dispose() { for (var e = 0, t = this._meshes.length; e < t; ++e) { this._meshes[e].mesh.dispose(!1, !1); } } }]); return XStaticMeshFromOneGltf; }(); var XStaticMeshComponent = /*#__PURE__*/function () { function XStaticMeshComponent(e) { var _this = this; _classCallCheck(this, XStaticMeshComponent); E(this, "scene"); E(this, "_staticmeshes"); E(this, "_lowModel_group"); E(this, "_CgPlane"); E(this, "_rootDir"); E(this, "_abosoluteUrl"); E(this, "_partMeshSkinInfo"); E(this, "_meshInfoJson"); E(this, "_orijson"); E(this, "_notUsedRegionLists"); E(this, "_meshInfoKeys"); E(this, "_currentUpdateRegionCount"); E(this, "_currentMeshUsedLod"); E(this, "_currentPartGroup"); E(this, "_allowRegionUpdate"); E(this, "_allowRegionForceLod"); E(this, "_forceLod"); E(this, "_scenemanager"); E(this, "regionIdInCamera"); E(this, "regionIdInCameraConst"); E(this, "_cameraInRegionId"); E(this, "_meshVis"); E(this, "_doMeshVisChangeNumber"); E(this, "_meshVisTypeName"); E(this, "_visCheckDurationFrameNumber"); E(this, "_regionLodRule"); E(this, "reg_staticmesh_partupdate", function () { if (_this._allowRegionUpdate && (_this.scene.getFrameId(), _this._meshUpdateFrame()), _this._allowRegionForceLod) { _this.scene.getFrameId() % 2 == 0 && _this.setOneRegionLod(_this._meshInfoKeys[_this._currentUpdateRegionCount % _this._meshInfoKeys.length].toString(), _this._forceLod); var t = !0; var r = Array.from(_this._currentMeshUsedLod.keys()); if (r.length > 0) { for (var n = 0; n < r.length; ++n) { _this._currentMeshUsedLod.get(r[n]) != _this._forceLod && (t = !1); } t && (_this._allowRegionForceLod = !1); } } }); E(this, "setMeshInfo", function (e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; _this._abosoluteUrl != e && (_this._abosoluteUrl.length > 0 && _this.deleteLastRegionMesh(), _this._partMeshSkinInfo = t, _this._abosoluteUrl = e, _this._rootDir = _this._abosoluteUrl.slice(0, -4) + "/", _this.parseJson(_this._rootDir + "meshInfo.json").then(function () { _this.startMeshUpdate(); })); }); E(this, "_meshUpdateFrame", function () { { var _e = _this._meshInfoKeys[_this._currentUpdateRegionCount % _this._meshInfoKeys.length]; var t = !0; var r = 3; if (_this._scenemanager != null && _this._scenemanager.cameraComponent != null) { var n = _this._getMainPlayerPosition(); if (n != null) { if (_this._cameraInRegionId >= 0) { var a = _this.getRegionIdWhichIncludeCamera(n); (_this._cameraInRegionId != a || _this.regionIdInCamera.length == 0) && (_this._cameraInRegionId = a, _this.regionIdInCamera = _this._getNeighborId(_this._cameraInRegionId.toString()), _this.regionIdInCameraConst = _this.regionIdInCamera.slice()); var s = _this.regionIdInCamera.pop(); for (; s != null;) { if (_this._notUsedRegionLists.indexOf(s) >= 0) s = _this.regionIdInCamera.pop();else break; } s != null && (_e = s.toString()); } else _this._cameraInRegionId = _this.getRegionIdWhichIncludeCamera(n); if (_this._currentMeshUsedLod.size == 0 || _this._notUsedRegionLists.indexOf(parseInt(_e)) >= 0) { _e = _this._cameraInRegionId.toString(); var _a = _this._getNeighborId(_e); for (; _a.length == 0 && (_e = _this.getNearestRegionIdWithCamera(n).toString()), _this._notUsedRegionLists.indexOf(parseInt(_e)) >= 0;) { _e = _a.pop().toString(); } } var o = _this._meshInfoJson[_this._cameraInRegionId.toString()].lod; r = 3, _this._cameraInRegionId.toString() == _e ? r = _this._regionLodRule[0] : o[0].indexOf(parseInt(_e)) >= 0 ? r = _this._regionLodRule[1] : o[1].indexOf(parseInt(_e)) >= 0 ? r = _this._regionLodRule[2] : o[2].indexOf(parseInt(_e)) >= 0 ? r = _this._regionLodRule[3] : r = _this._regionLodRule[4]; } } _this.setOneRegionLod(_e, r, t), _this.updateRegionNotInLocalNeighbor(), _this.cleanRootNodes(); } }); E(this, "updateRegionNotInLocalNeighbor", function () { Array.from(_this._currentMeshUsedLod.keys()).forEach(function (t) { _this.regionIdInCameraConst.indexOf(parseInt(t)) < 0 && _this.setOneRegionLod(t, -1); }); }); E(this, "cleanRootNodes", function () { if (_this.scene.getFrameId() % 3 == 0) { var _e2 = []; _this.scene.rootNodes.forEach(function (t) { (t.getClassName() == "TransformNode" && t.getChildren().length == 0 || t.getClassName() == "Mesh" && t.name == "__root__" && t.getChildren().length == 0) && _e2.push(t); }), _e2.forEach(function (t) { t.dispose(); }); } }); E(this, "setOneRegionLod", function (e, t) { _this._currentUpdateRegionCount++; var n = _this._calHashCode(_this._rootDir), o = "region_" + n + "_" + e; if (t < 0) { _this._currentMeshUsedLod.has(e) && (_this._currentMeshUsedLod.delete(e), _this._currentPartGroup.delete(o), _this.deleteMeshesByCustomProperty("group", "region_" + n + "_" + e)); return; } var a = _this._rootDir + e + "_lod" + t + "_xverse.glb", s = _this._currentMeshUsedLod.get(e); _this._currentPartGroup.add(o), s != null ? s != t && (_this._currentMeshUsedLod.set(e, t), _this._scenemanager.addNewLowPolyMesh({ url: a, group: "region_" + n + "_" + e, pick: !0, lod: t, skinInfo: _this._partMeshSkinInfo }, [{ group: "region_" + n + "_" + e, mode: 0 }])) : (_this._currentMeshUsedLod.set(e, t), _this._scenemanager.addNewLowPolyMesh({ url: a, group: "region_" + n + "_" + e, pick: !0, lod: t, skinInfo: _this._partMeshSkinInfo })); }); E(this, "checkPointInView", function (_ref) { var e = _ref.x, t = _ref.y, r = _ref.z; var n = ue4Position2Xverse({ x: e, y: t, z: r }); if (!n) return !1; for (var o = 0; o < 6; o++) { if (_this.scene.frustumPlanes[o].dotCoordinate(n) < 0) return !1; } return !0; }); E(this, "addNewLowPolyMesh", function (e, t, r) { if (!e.url.endsWith("glb") && !e.url.startsWith("blob:")) return e.url.endsWith("zip") ? (_this.setMeshInfo(e.url, e.skinInfo), Promise.resolve(!0)) : (logger$1.error("[Engine] input model path is error! ", e.url), Promise.reject(new XLowpolyModelError("[Engine] input model path is error! " + e.url))); { var n = e.url; return new Promise(function (o, a) { return _this._scenemanager.urlTransformer(e.url).then(function (s) { e.url = s; var l = new XStaticMeshFromOneGltf(_this.scene, e), u = Date.now(); return new Promise(function (c, h) { l.loadMesh(r, !0).then(function (f) { var d = Date.now(); if (_this._scenemanager.engineRunTimeStats.timeArray_loadStaticMesh.add(d - u), f == !0) { var _ = _this.getLowModelType(e); var g = 0; if (_this._lowModel_group.has(_) && (g = _this._lowModel_group.get(_).length), r != null && _this._scenemanager.currentShader != null && _this._scenemanager.currentShader.name != r.name && l.setMaterial(_this._scenemanager.currentShader), _this._allowRegionUpdate == !1 && _.startsWith("region_")) l.dispose();else if (_this._staticmeshes.push(l), _this.lowmodelGroupMapAddValue(_, l), t != null && t.length > 0) { var m = []; for (var v = 0; v < t.length; ++v) { m.push(t[v].group), _this.updateLowModelGroup(t[v], _, g); } } _this._scenemanager.engineRunTimeStats.timeArray_updateStaticMesh.add(Date.now() - d), c(!0); } else h(new XLowpolyModelError("[Engine] after lowmodel error!")); }).catch(function (f) { logger$1.error("[Engine] load Mesh [" + n + "] error! " + f), h(new XLowpolyModelError("[Engine] load Mesh [".concat(n, "] error! ").concat(f))); }); }); }).then(function (s) { s == !0 ? (logger$1.info("[Engine] load Mesh [".concat(n, "] successfully.")), o(!0)) : a(!1); }).catch(function (s) { logger$1.error("[Engine] addNewLowPolyMesh [" + n + "] error! " + s), a(new XLowpolyModelError("[Engine] addNewLowPolyMesh [".concat(n, "] error! ").concat(s))); }); }); } }); E(this, "toggleLowModelVisibility", function (e) { var t = e.vis, _e$groupName = e.groupName, r = _e$groupName === void 0 ? "" : _e$groupName, _e$skinInfo = e.skinInfo, n = _e$skinInfo === void 0 ? "" : _e$skinInfo; _this._meshVis = t, _this._meshVisTypeName = { groupName: r, skinInfo: n }, _this._doMeshVisChangeNumber = 0, r == Te.ALL_MESHES || _this._currentPartGroup.has(r) == !0 || _this._partMeshSkinInfo == n ? t == !1 ? (_this._visCheckDurationFrameNumber = 100, _this.stopMeshUpdate()) : (_this._visCheckDurationFrameNumber = 1, _this.startMeshUpdate()) : _this._visCheckDurationFrameNumber = 1; }); E(this, "reg_staticmesh_visibility", function () { if (_this._doMeshVisChangeNumber >= 0) if (_this._doMeshVisChangeNumber < _this._visCheckDurationFrameNumber) { if (_this._doMeshVisChangeNumber = _this._doMeshVisChangeNumber + 1, _this._meshVisTypeName.groupName == Te.ALL_MESHES) _this._lowModel_group.forEach(function (e, t) { for (var r = 0, n = e.length; r < n; ++r) { e[r].toggleVisibility(_this._meshVis); } });else { if (_this._lowModel_group.has(_this._meshVisTypeName.groupName)) for (var _e3 = 0; _e3 < _this._lowModel_group.get(_this._meshVisTypeName.groupName).length; ++_e3) { _this._lowModel_group.get(_this._meshVisTypeName.groupName)[_e3].toggleVisibility(_this._meshVis); } if (_this._meshVisTypeName.skinInfo != "") for (var _e4 = 0; _e4 < _this._staticmeshes.length; ++_e4) { _this._staticmeshes[_e4].skinInfo == _this._meshVisTypeName.skinInfo && _this._staticmeshes[_e4].toggleVisibility(_this._meshVis); } } } else _this._meshVis = !0, _this._meshVisTypeName = { groupName: "", skinInfo: "" }, _this._doMeshVisChangeNumber = -1; }); E(this, "_getMeshesByCustomProperty", function (e, t) { var r = []; return _this._staticmeshes.forEach(function (n) { n[e] != null && n[e] == t && (r = r.concat(n.meshes)); }), r; }); this._lowModel_group = new Map(), this._staticmeshes = [], this._meshInfoJson = null, this._meshInfoKeys = [], this._currentUpdateRegionCount = 0, this._abosoluteUrl = "", this._partMeshSkinInfo = "", this._forceLod = 3, this._allowRegionUpdate = !1, this._allowRegionForceLod = !1, this._currentMeshUsedLod = new Map(), this._currentPartGroup = new Set(), this._scenemanager = e, this.scene = e.Scene, this.regionIdInCamera = [], this.regionIdInCameraConst = [], this._cameraInRegionId = -1, this._rootDir = "", this._meshVis = !0, this._meshVisTypeName = { groupName: "", skinInfo: "" }, this._doMeshVisChangeNumber = -1, this._visCheckDurationFrameNumber = -1, this._regionLodRule = [0, 1, 3, 3, -1], this.initCgLowModel(), this._regionPartLoop(); } _createClass(XStaticMeshComponent, [{ key: "cameraInRegionId", get: function get() { return this._cameraInRegionId; } }, { key: "setRegionLodRule", value: function setRegionLodRule(e) { return e.length != 5 ? !1 : (e.forEach(function (t) {}), this._regionLodRule = e, !0); } }, { key: "lowModel_group", get: function get() { return this._lowModel_group; } }, { key: "_regionPartLoop", value: function _regionPartLoop() { this.scene.registerBeforeRender(this.reg_staticmesh_partupdate), this.scene.registerAfterRender(this.reg_staticmesh_visibility); } }, { key: "_globalSearchCameraInWhichRegion", value: function _globalSearchCameraInWhichRegion(e, t) { var r = -1; for (var n = 0; n < t.length; ++n) { var o = this._meshInfoJson[t[n].toString()].boundingbox, a = o[0], s = o[1]; if (e.x >= a[0] && e.x <= s[0] && e.y >= a[1] && e.y <= s[1] && e.z >= a[2] && e.z <= s[2] || e.x >= s[0] && e.x <= a[0] && e.y >= s[1] && e.y <= a[1] && e.z >= s[2] && e.z <= a[2]) { r = parseInt(t[n].toString()); break; } } return r; } }, { key: "getRegionIdByPosition", value: function getRegionIdByPosition(e) { return this.getRegionIdWhichIncludeCamera(e); } }, { key: "getRegionIdWhichIncludeCamera", value: function getRegionIdWhichIncludeCamera(e) { var t = -1; if (this._allowRegionUpdate == !1) return t; if (this._cameraInRegionId == -1 ? t = this._globalSearchCameraInWhichRegion(e, this._meshInfoKeys) : (t = this._globalSearchCameraInWhichRegion(e, this.regionIdInCameraConst), t == -1 && (t = this._globalSearchCameraInWhichRegion(e, this._meshInfoKeys))), t == -1) { var r = 1e7; for (var n = 0; n < this._meshInfoKeys.length; ++n) { var o = this._meshInfoJson[this._meshInfoKeys[n]].center, a = Math.abs(e.x - o[0]) + Math.abs(e.y - o[1]); r > a && (r = a, t = parseInt(this._meshInfoKeys[n])); } } return t; } }, { key: "getNearestRegionIdWithCamera", value: function getNearestRegionIdWithCamera(e) { var t = 1, r = 1e7; for (var n = 0; n < this._meshInfoKeys.length; ++n) { if (this._notUsedRegionLists.indexOf(parseInt(this._meshInfoKeys[n])) >= 0) continue; var o = this._meshInfoJson[this._meshInfoKeys[n]].center, a = Math.abs(e.x - o[0]) + Math.abs(e.y - o[1]); r > a && (r = a, t = parseInt(this._meshInfoKeys[n])); } return t; } }, { key: "_getNeighborId", value: function _getNeighborId(e) { var t = this._meshInfoJson[e].lod; var r = []; var n = Object.keys(t); for (var o = n.length - 1; o >= 0; --o) { r = r.concat(t[n[o]]); } return r.push(parseInt(e)), r; } }, { key: "_getMainPlayerPosition", value: function _getMainPlayerPosition() { var e = this._scenemanager.cameraComponent.getCameraPose().position, t = this._scenemanager.avatarComponent.getMainAvatar(); if (t != null && t != null) { var r = t.position; if (r != null) return r; } return e; } }, { key: "_calHashCode", value: function _calHashCode(e) { return hashCode(e) + "_" + this._partMeshSkinInfo; } }, { key: "forceAllRegionLod", value: function forceAllRegionLod() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3; e < 0 && (e = 0), e > 3 && (e = 3), this.stopMeshUpdate(), this._allowRegionForceLod = !0, this._forceLod = e; } }, { key: "deleteLastRegionMesh", value: function deleteLastRegionMesh() { if (this._rootDir != "") { var e = this._calHashCode(this._rootDir); this._currentMeshUsedLod.clear(), this._currentPartGroup.clear(), this._meshInfoJson = null, this._meshInfoKeys = [], this._currentUpdateRegionCount = 0, this._orijson = null, this._notUsedRegionLists = [], this._partMeshSkinInfo = "", this._abosoluteUrl = "", this.stopMeshUpdate(), this.deleteMeshesByCustomProperty("group", "region_" + e, !0); } } }, { key: "startMeshUpdate", value: function startMeshUpdate() { this._allowRegionUpdate == !1 && this._meshInfoJson != null && this._abosoluteUrl != "" && this._meshInfoKeys.length > 0 && (this._allowRegionUpdate = !0); } }, { key: "stopMeshUpdate", value: function stopMeshUpdate() { this._allowRegionUpdate = !1; } }, { key: "parseJson", value: function parseJson(e) { var _this2 = this; return new Promise(function (t, r) { return _this2._scenemanager.urlTransformer(e).then(function (n) { var o = new XMLHttpRequest(); o.open("get", n), o.send(null), o.onload = function () { if (o.status == 200) { var a = JSON.parse(o.responseText); _this2._orijson = a, _this2._meshInfoJson = _this2._orijson.usedRegion, _this2._notUsedRegionLists = _this2._orijson.notUsedRegion, _this2._meshInfoKeys = Object.keys(_this2._meshInfoJson), logger$1.info("[Engine] parse zip mesh info successful"), t(); } }, o.onerror = function () { logger$1.error("[Engine] load zip mesh info json error, (provided by blob): ".concat(n)), r(new XLowpolyJsonError("[Engine] load zip mesh info json error, (provided by blob): ".concat(n))); }; }).catch(function (n) { logger$1.error("[Engine] load zip mesh info json error: ".concat(n, ", link:").concat(e)), r(new XLowpolyJsonError("[Engine] load zip mesh info json error: ".concat(n, ", link: ").concat(e))); }); }); } }, { key: "initCgLowModel", value: function initCgLowModel() { var e = BABYLON.MeshBuilder.CreatePlane("CgPlane", { size: 400 }); e.position = new BABYLON.Vector3(0, 1010, 0), e.rotation = new BABYLON.Vector3(3 * Math.PI / 2, 0, 0), this._CgPlane = new XStaticMesh({ id: "CgPlane", mesh: e, xtype: EMeshType.Cgplane }), this._CgPlane.hide(); } }, { key: "getLowModelType", value: function getLowModelType(e) { var t = ""; return e.group != null ? t = e.group : t = "default", t; } }, { key: "lowmodelGroupMapAddValue", value: function lowmodelGroupMapAddValue(e, t) { var r = this._lowModel_group.get(e); r != null ? (r.push(t), this._lowModel_group.set(e, r)) : this._lowModel_group.set(e, [t]); } }, { key: "updateLowModelGroup", value: function updateLowModelGroup(e, t, r) { var n = r; e.group == t || (n = -1), e.mode == 0 ? this.deleteLowModelGroup(e.group, n) : e.mode == 1 ? this.toggleVisibleLowModelGroup(!1, e.group, n) : e.mode == 2 && this.toggleVisibleLowModelGroup(!0, e.group, n); } }, { key: "toggleVisibleLowModelGroup", value: function toggleVisibleLowModelGroup(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1; if (this._lowModel_group.has(t)) { var n = this._lowModel_group.get(t); var o = n.length; r >= 0 && o >= r && (o = r); for (var a = 0; a < o; ++a) { n[a].toggleVisibility(e); } } } }, { key: "deleteLowModelGroup", value: function deleteLowModelGroup(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1; if (this._lowModel_group.has(e)) { var o = this._lowModel_group.get(e); var a = o.length; t >= 0 && a >= t && (a = t); for (var s = 0; s < a; ++s) { o[s].dispose(); } t >= 0 ? this._lowModel_group.set(e, this._lowModel_group.get(e).slice(a)) : this._lowModel_group.delete(e); } var r = this._lowModel_group.get(e), n = []; r != null && r.length > 0 ? this._staticmeshes.forEach(function (o) { if (o.group != e) n.push(o);else for (var _a2 = 0; _a2 < r.length; ++_a2) { o.groupUuid == r[_a2].groupUuid && n.push(o); } }) : this._staticmeshes.forEach(function (o) { o.group != e && n.push(o); }), this._staticmeshes = n; } }, { key: "deleteMeshesByGroup", value: function deleteMeshesByGroup(e) { this.deleteLowModelGroup(e); } }, { key: "deleteMeshesById", value: function deleteMeshesById(e) { this.deleteMeshesByCustomProperty("id", e); } }, { key: "deleteMeshesByLoD", value: function deleteMeshesByLoD(e) { this.deleteMeshesByCustomProperty("lod", e); } }, { key: "deleteMeshesBySkinInfo", value: function deleteMeshesBySkinInfo(e) { this.deleteMeshesByCustomProperty("skinInfo", e); } }, { key: "removeMeshesFromSceneByGroup", value: function removeMeshesFromSceneByGroup(e) { this.removeMeshesFromSceneByCustomProperty("group", e); } }, { key: "removeMeshesFromSceneById", value: function removeMeshesFromSceneById(e) { this.removeMeshesFromSceneByCustomProperty("id", e); } }, { key: "addMeshesToSceneByGroup", value: function addMeshesToSceneByGroup(e) { this.addMeshesToSceneByCustomProperty("group", e); } }, { key: "addMeshesToSceneById", value: function addMeshesToSceneById(e) { this.addMeshesToSceneByCustomProperty("id", e); } }, { key: "removeMeshesFromSceneByCustomProperty", value: function removeMeshesFromSceneByCustomProperty(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1; this._staticmeshes.forEach(function (n) { n.isinscene && n[e] != null && (r ? n[e].indexOf(t) < 0 || n.removeFromScene() : n[e] != t || n.removeFromScene()); }); } }, { key: "addMeshesToSceneByCustomProperty", value: function addMeshesToSceneByCustomProperty(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1; this._staticmeshes.forEach(function (n) { n.isinscene == !1 && n[e] != null && (r ? n[e].indexOf(t) < 0 || n.addToScene() : n[e] != t || n.addToScene()); }); } }, { key: "deleteMeshesByCustomProperty", value: function deleteMeshesByCustomProperty(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1; var n = []; this._staticmeshes.forEach(function (a) { a[e] != null && (r ? a[e].indexOf(t) < 0 ? n.push(a) : a.dispose() : a[e] != t ? n.push(a) : a.dispose()); }), this._staticmeshes = n; var o = Array.from(this._lowModel_group.keys()); for (var a = 0; a < o.length; ++a) { var s = o[a], l = this._lowModel_group.get(s); if (l != null) { var u = []; for (var c = 0; c < l.length; ++c) { l[c][e] != null && (r ? l[c][e].indexOf(t) < 0 && u.push(l[c]) : l[c][e] != t && u.push(l[c])); } u.length > 0 ? this._lowModel_group.set(s, u) : this._lowModel_group.delete(s); } } } }, { key: "getMeshes", value: function getMeshes() { var e = []; for (var t = 0; t < this._staticmeshes.length; ++t) { e = e.concat(this._staticmeshes[t].meshes); } return e; } }, { key: "getCgMesh", value: function getCgMesh() { return this._CgPlane; } }, { key: "getMeshesByGroup", value: function getMeshesByGroup() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "default"; var t = this._lowModel_group.get(e); if (t != null) { var r = []; for (var n = 0; n < t.length; ++n) { r = r.concat(t[n].meshes); } return r; } else return null; } }, { key: "getMeshesByGroup2", value: function getMeshesByGroup2() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "default"; return this._getMeshesByCustomProperty("group", e); } }]); return XStaticMeshComponent; }(); var XVideoRawYUV = /*#__PURE__*/function () { function XVideoRawYUV(e, t) { var _this = this; _classCallCheck(this, XVideoRawYUV); E(this, "scene"); E(this, "_videoRawYUVTexture"); E(this, "videosResOriArray"); E(this, "_currentVideoId"); this.scene = e, this._videoRawYUVTexture = [], this.videosResOriArray = t, this._currentVideoId = -1; for (var r = 0; r < t.length; ++r) { (function (n) { var o = BABYLON.RawTexture.CreateLuminanceTexture(null, t[n].width, t[n].height * 1.5, _this.scene, !1, !0); o.name = "videoTex_" + t[n].width + "_" + t[n].height, _this._videoRawYUVTexture.push(o); })(r); } } _createClass(XVideoRawYUV, [{ key: "inRange", value: function inRange(e) { return e >= 0 && e < this._videoRawYUVTexture.length; } }, { key: "getVideoYUVTex", value: function getVideoYUVTex(e) { return this.inRange(e) ? this._videoRawYUVTexture[e] : null; } }, { key: "findId", value: function findId(e, t) { var r = 0; for (var n = 0; n < this.videosResOriArray.length; ++n) { if (this.videosResOriArray[n].width == e && this.videosResOriArray[n].height == t) { r = n; break; } } return r; } }, { key: "getCurrentVideoTexId", value: function getCurrentVideoTexId() { return this._currentVideoId; } }, { key: "setCurrentVideoTexId", value: function setCurrentVideoTexId(e) { this._currentVideoId = e; } }]); return XVideoRawYUV; }(); var XMaterialComponent = /*#__PURE__*/function () { function XMaterialComponent(e, t) { var _this = this; _classCallCheck(this, XMaterialComponent); E(this, "scene"); E(this, "engine"); E(this, "yuvInfo"); E(this, "shaderMode"); E(this, "_panoInfo"); E(this, "_dynamic_size"); E(this, "_dynamic_babylonpose"); E(this, "_dynamic_textures"); E(this, "_dynamic_shaders"); E(this, "_scenemanager"); E(this, "_videoTexture"); E(this, "_videoElement"); E(this, "_lowModelShader"); E(this, "_defaultShader"); E(this, "_inputYUV420", !0); E(this, "_inputPanoYUV420", !0); E(this, "_videoRawYUVTexArray"); E(this, "_isUpdateYUV", !0); E(this, "initMaterial", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", new Promise(function (e, t) { _this._initDefaultShader(), _this.shaderMode == 2 ? _this.initDynamicData(_this._panoInfo.dynamicRange, _this._panoInfo.width, _this._panoInfo.height).then(function () { _this._initPureVideoShader(), _this._prepareRender(_this.yuvInfo); }) : _this.shaderMode == 1 ? (_this._initPureVideoShader(), _this._prepareRender(_this.yuvInfo)) : _this.shaderMode == 0, e(!0); })); case 1: case "end": return _context.stop(); } } }, _callee); }))); E(this, "_initPureVideoContent", function (e) { _this._inputYUV420 ? _this._videoRawYUVTexArray.getVideoYUVTex(0) != null && (_this._lowModelShader.setTexture("texture_video", _this._videoRawYUVTexArray.getVideoYUVTex(0)), _this._lowModelShader.setFloat("isYUV", 1), BABYLON.Texture.WhenAllReady([_this._videoRawYUVTexArray.getVideoYUVTex(0)], function () { _this._changePureVideoLowModelShaderCanvasSize(e); })) : (_this._videoElement = e.videoElement, _this._videoTexture || (_this._videoTexture = new VideoTexture("InterVideoTexture", _this._videoElement, _this.scene, !0, !1)), BABYLON.Texture.WhenAllReady([_this._videoTexture], function () { _this._changePureVideoLowModelShaderCanvasSize({ width: _this._videoElement.height, height: _this._videoElement.width, fov: e.fov }); }), _this._lowModelShader.setTexture("texture_video", _this._videoTexture), _this._lowModelShader.setFloat("isYUV", 0)); }); E(this, "_changePureVideoLowModelShaderCanvasSize", function (e) { var a; var t = e.fov || 50, r = e.width || 720, n = e.height || 1280, o = r / (2 * Math.tan(Math.PI * t / 360)); (a = _this._lowModelShader) == null || a.setVector3("focal_width_height", new BABYLON.Vector3(o, r, n)); }); E(this, "updateRawYUVData", function (e, t, r) { var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; var o, a; if (n == -1 && (n = _this.yuvInfo.fov), _this._isUpdateYUV == !0) { var s = { width: t, height: r, fov: n }, l = _this._videoRawYUVTexArray.findId(t, r), u = _this._videoRawYUVTexArray.getCurrentVideoTexId(); (u < 0 || l != u || n != _this.yuvInfo.fov) && (_this.yuvInfo.width = t, _this.yuvInfo.height = r, _this.yuvInfo.fov = n, _this._videoRawYUVTexArray.setCurrentVideoTexId(l), _this._changeVideoRes(l), _this._changePureVideoLowModelShaderCanvasSize(s), _this._scenemanager.cameraComponent.cameraFovChange(s), _this._scenemanager.yuvInfo = s), (o = _this._videoRawYUVTexArray.getVideoYUVTex(l)) == null || o.update(e), (a = _this._videoRawYUVTexArray.getVideoYUVTex(l)) == null || a.updateSamplingMode(BABYLON.Texture.BILINEAR_SAMPLINGMODE); } }); E(this, "_changeVideoRes", function (e) { _this._lowModelShader.setTexture("texture_video", _this._videoRawYUVTexArray.getVideoYUVTex(e)); }); E(this, "initDynamicData", function (e, t, r) { return new Promise(function (n, o) { _this.setDynamicSize(e).then(function (a) { if (a) { for (var s = 0; s < e; ++s) { (function (l) { _this.initDynamicTexture(l, t, r), _this.initDynamicShaders(l).then(function () { _this._updatePanoShaderInput(l); }); })(s); } n(!0); } else o(new XMaterialError("[Engine] DynamicRoomSize (".concat(e, ") is too small"))); }); }).catch(function (n) { return logger$1.error("[Engine] ".concat(n)); }); }); E(this, "_initDefaultShader", function () { _this._defaultShader == null && (_this._defaultShader = new BABYLON.GridMaterial("GridShader", _this.scene), _this._defaultShader.gridRatio = 50, _this._defaultShader.lineColor = new BABYLON.Color3(0, 0, .5), _this._defaultShader.majorUnitFrequency = 1, _this._defaultShader.mainColor = new BABYLON.Color3(.6, .6, .6), _this._defaultShader.backFaceCulling = !1); }); E(this, "_initPureVideoShader", function () { if (_this._lowModelShader == null) { var _e = new BABYLON.ShaderMaterial("PureVideoShader", _this.scene, { vertexSource: pureVideoVertex, fragmentSource: pureVideoFragment }, { attributes: ["uv", "position", "world0", "world1", "world2", "world3"], uniforms: ["view", "projection", "worldViewProjection", "world"], defines: ["#define SHADOWFULLFLOAT"] }); _e.setTexture("shadowSampler", null), _e.setMatrix("lightSpaceMatrix", null), _e.setFloat("haveShadowLight", 0), _e.setTexture("texture_video", null), _e.setFloat("isYUV", _this._inputYUV420 ? 1 : 0), _e.setFloat("fireworkLight", 0), _e.setVector3("fireworkLightPosition", new BABYLON.Vector3(0, 0, 0)), _e.setVector3("focal_width_height", new BABYLON.Vector3(772.022491, 720, 1280)), _e.backFaceCulling = !1, _this._lowModelShader = _e; } }); E(this, "setDynamicSize", function (e) { return new Promise(function (t, r) { e >= 1 && e <= 100 ? (_this._dynamic_size = e, t(!0)) : (_this._dynamic_size = 1, t(!1)); }); }); E(this, "_isInDynamicRange", function (e) { return e < _this._dynamic_size && e >= 0; }); E(this, "initDynamicTexture", function (e, t, r) { _this._isInDynamicRange(e) && (_this._dynamic_textures[e] != null && (_this._dynamic_textures[e].dispose(), _this._dynamic_textures[e] = null), _this._dynamic_textures[e] = new BABYLON.RawTexture(null, t, r * 1.5, BABYLON.Engine.TEXTUREFORMAT_LUMINANCE, _this.scene, !1, !0, BABYLON.Texture.NEAREST_SAMPLINGMODE, BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE), _this._dynamic_textures[e].name = "Pano_Dynamic_" + e + "_" + Date.now()); }); E(this, "initDynamicShaders", function (e) { return logger$1.info("[Engine] Material init dynamic shader."), new Promise(function (t, r) { _this._dynamic_shaders[e] != null && _this._dynamic_shaders[e].dispose(); var n = new BABYLON.ShaderMaterial("Pano_Shader_" + e, _this.scene, { vertexSource: panoVertex, fragmentSource: panoFragment }, { attributes: ["uv", "position", "world0", "world1", "world2", "world3"], uniforms: ["view", "projection", "worldViewProjection", "world"], defines: ["#define SHADOWFULLFLOAT"] }); n.setTexture("texture_pano", null), n.setVector3("centre_pose", new BABYLON.Vector3(0, 0, 0)), n.setFloat("isYUV", _this._inputPanoYUV420 ? 1 : 0), n.setTexture("shadowSampler", null), n.setMatrix("lightSpaceMatrix", null), n.setFloat("haveShadowLight", 0), n.setFloat("fireworkLight", 0), n.setVector3("fireworkLightPosition", new BABYLON.Vector3(0, 0, 0)), n.backFaceCulling = !1, _this._dynamic_shaders[e] = n, t(!0); }); }); this._scenemanager = e, this.scene = e.Scene, this.engine = this.scene.getEngine(), this.shaderMode = 1, this._dynamic_textures = [], this._dynamic_shaders = [], this._dynamic_babylonpose = [], this._videoRawYUVTexArray = new XVideoRawYUV(this.scene, t.videoResOriArray), this.shaderMode = t.shaderMode, t.yuvInfo != null && (this.yuvInfo = t.yuvInfo), t.panoInfo != null && this.setPanoInfo(t.panoInfo); } _createClass(XMaterialComponent, [{ key: "stopYUVUpdate", value: function stopYUVUpdate() { this._isUpdateYUV = !1; } }, { key: "allowYUVUpdate", value: function allowYUVUpdate() { this._isUpdateYUV = !0; } }, { key: "setPanoInfo", value: function setPanoInfo(e) { this._panoInfo = e; } }, { key: "_prepareRender", value: function _prepareRender(e) { e && (this._initPureVideoContent(e), this._updatePureVideoShaderInput()); } }, { key: "getPureVideoShader", value: function getPureVideoShader() { return this._lowModelShader; } }, { key: "getDefaultShader", value: function getDefaultShader() { return this._defaultShader; } }, { key: "updatePanoPartYUV", value: function updatePanoPartYUV(e, t, r) { var n = t.subarray(0, r.width * r.height), o = t.subarray(r.width * r.height, r.width * r.height * 1.25), a = t.subarray(r.width * r.height * 1.25), s = this._panoInfo.width, l = this._panoInfo.height; if (this._dynamic_textures[e] != null) { var u = this._dynamic_textures[e].getInternalTexture(); if (u != null && u != null) { var c = this.engine._getTextureTarget(u); this.engine._bindTextureDirectly(c, u, !0), this.engine.updateTextureData(u, n, r.startX, l * 1.5 - r.startY - r.height, r.width, r.height), this.engine.updateTextureData(u, o, r.startX * .5, (l - r.startY - r.height) * .5, r.width * .5 - 1, r.height * .5 - 1), this.engine.updateTextureData(u, a, r.startX * .5 + s * .5, (l - r.startY - r.height) * .5, r.width * .5, r.height * .5), this.engine._bindTextureDirectly(c, null); } } } }, { key: "changePanoImg", value: function changePanoImg(e, t) { var _this2 = this; if (logger$1.info("[Engine] changePanoImg, id=".concat(e, ", pose=").concat(t.pose.position.x, ",").concat(t.pose.position.y, ",").concat(t.pose.position.z)), !this._isInDynamicRange(e)) return logger$1.error("[Engine] ".concat(e, " is bigger than dynamic size set in PanoInfo")), Promise.reject(new XMaterialError("[Engine] ".concat(e, " is bigger than dynamic size set in PanoInfo"))); var r = ue4Position2Xverse(t.pose.position); return r && (this._dynamic_babylonpose[e] = { position: r }), new Promise(function (n, o) { try { typeof t.data == "string" ? (_this2.setPanoYUV420(!1), _this2._dynamic_textures[e].updateURL(t.data, null, function () { _this2._dynamic_textures[e].updateSamplingMode(BABYLON.Texture.NEAREST_SAMPLINGMODE); })) : (_this2.isPanoYUV420() == !1 && _this2.initDynamicTexture(e, _this2._panoInfo.width, _this2._panoInfo.height), _this2.setPanoYUV420(!0), _this2._dynamic_textures[e].update(t.data), _this2._dynamic_textures[e].updateSamplingMode(BABYLON.Texture.NEAREST_SAMPLINGMODE)), n(_this2); } catch (a) { o(new XMaterialError("[Engine] ChangePanoImg Error! ".concat(a))); } }).then(function (n) { return t.fov != null && _this2._scenemanager.cameraComponent.changeCameraFov(t.fov * Math.PI / 180), _this2._dynamic_shaders[e].setFloat("isYUV", _this2._inputPanoYUV420 ? 1 : 0), _this2._dynamic_shaders[e].setTexture("texture_pano", _this2._dynamic_textures[e]), _this2._dynamic_shaders[e].setVector3("centre_pose", _this2._dynamic_babylonpose[e].position), !0; }); } }, { key: "setYUV420", value: function setYUV420(e) { this._inputYUV420 = e; } }, { key: "isYUV420", value: function isYUV420() { return this._inputYUV420; } }, { key: "setPanoYUV420", value: function setPanoYUV420(e) { this._inputPanoYUV420 = e; } }, { key: "isPanoYUV420", value: function isPanoYUV420() { return this._inputPanoYUV420; } }, { key: "getDynamicShader", value: function getDynamicShader(e) { return this._dynamic_shaders[e]; } }, { key: "_updatePureVideoShaderInput", value: function _updatePureVideoShaderInput() { var _this3 = this; var e, t, r, n, o, a, s, l, u, c; if (this.scene.getLightByName("AvatarLight") ? ((e = this._lowModelShader) == null || e.setFloat("haveShadowLight", 1), (n = this._lowModelShader) == null || n.setTexture("shadowSampler", (r = (t = this.scene.getLightByName("AvatarLight")) == null ? void 0 : t.getShadowGenerator()) == null ? void 0 : r.getShadowMapForRendering()), (s = this._lowModelShader) == null || s.setMatrix("lightSpaceMatrix", (a = (o = this.scene.getLightByName("AvatarLight")) == null ? void 0 : o.getShadowGenerator()) == null ? void 0 : a.getTransformMatrix())) : ((l = this._lowModelShader) == null || l.setTexture("shadowSampler", this._videoTexture), (u = this._lowModelShader) == null || u.setMatrix("lightSpaceMatrix", new Matrix()), (c = this._lowModelShader) == null || c.setFloat("haveShadowLight", 0)), this.scene.getLightByName("fireworkLight")) this.scene.registerBeforeRender(function () { var h; _this3._lowModelShader.setFloat("fireworkLight", _this3.scene.getLightByName("fireworkLight").getScaledIntensity()), _this3._lowModelShader.setVector3("fireworkLightPosition", (h = _this3.scene.getLightByName("fireworkLight")) == null ? void 0 : h.position); });else { var h = new BABYLON.PointLight("fireworkLight", new BABYLON.Vector3(0, 0, 0), this.scene); h.intensity = 0; } } }, { key: "_updatePanoShaderInput", value: function _updatePanoShaderInput(e) { var _this4 = this; var t, r, n, o, a, s, l, u, c, h; if (this._isInDynamicRange(e)) if (this.scene.getLightByName("AvatarLight") ? ((t = this._dynamic_shaders[e]) == null || t.setFloat("haveShadowLight", 1), (o = this._dynamic_shaders[e]) == null || o.setTexture("shadowSampler", (n = (r = this.scene.getLightByName("AvatarLight")) == null ? void 0 : r.getShadowGenerator()) == null ? void 0 : n.getShadowMapForRendering()), (l = this._dynamic_shaders[e]) == null || l.setMatrix("lightSpaceMatrix", (s = (a = this.scene.getLightByName("AvatarLight")) == null ? void 0 : a.getShadowGenerator()) == null ? void 0 : s.getTransformMatrix())) : ((u = this._dynamic_shaders[e]) == null || u.setTexture("shadowSampler", null), (c = this._dynamic_shaders[e]) == null || c.setMatrix("lightSpaceMatrix", new Matrix()), (h = this._dynamic_shaders[e]) == null || h.setFloat("haveShadowLight", 0)), this.scene.getLightByName("fireworkLight")) this.scene.registerBeforeRender(function () { var f; _this4._dynamic_shaders[e].setFloat("fireworkLight", _this4.scene.getLightByName("fireworkLight").getScaledIntensity()), _this4._dynamic_shaders[e].setVector3("fireworkLightPosition", (f = _this4.scene.getLightByName("fireworkLight")) == null ? void 0 : f.position); });else { var f = new BABYLON.PointLight("fireworkLight", new BABYLON.Vector3(0, 0, 0), this.scene); f.intensity = 0; } } }]); return XMaterialComponent; }(); var XStats = /*#__PURE__*/function () { function XStats(e) { _classCallCheck(this, XStats); E(this, "scene"); E(this, "sceneInstrumentation"); E(this, "engineInstrumentation"); E(this, "caps"); E(this, "engine"); E(this, "_canvas"); E(this, "_osversion"); E(this, "_scenemanager"); this._scenemanager = e, this.scene = e.Scene, this._canvas = e.canvas, this.initSceneInstrument(); } _createClass(XStats, [{ key: "initSceneInstrument", value: function initSceneInstrument() { this.sceneInstrumentation = new BABYLON.SceneInstrumentation(this.scene), this.sceneInstrumentation.captureCameraRenderTime = !0, this.sceneInstrumentation.captureActiveMeshesEvaluationTime = !0, this.sceneInstrumentation.captureRenderTargetsRenderTime = !0, this.sceneInstrumentation.captureFrameTime = !0, this.sceneInstrumentation.captureRenderTime = !0, this.sceneInstrumentation.captureInterFrameTime = !0, this.sceneInstrumentation.captureParticlesRenderTime = !0, this.sceneInstrumentation.captureSpritesRenderTime = !0, this.sceneInstrumentation.capturePhysicsTime = !0, this.sceneInstrumentation.captureAnimationsTime = !0, this.engineInstrumentation = new BABYLON.EngineInstrumentation(this.scene.getEngine()), this.caps = this.scene.getEngine().getCaps(), this.engine = this.scene.getEngine(), this._osversion = this.osVersion(); } }, { key: "getFrameTimeCounter", value: function getFrameTimeCounter() { return this.sceneInstrumentation.frameTimeCounter.current; } }, { key: "getInterFrameTimeCounter", value: function getInterFrameTimeCounter() { return this.sceneInstrumentation.interFrameTimeCounter.current; } }, { key: "getActiveMeshEvaluationTime", value: function getActiveMeshEvaluationTime() { return this.sceneInstrumentation.activeMeshesEvaluationTimeCounter.current; } }, { key: "getDrawCall", value: function getDrawCall() { return this.sceneInstrumentation.drawCallsCounter.current; } }, { key: "getDrawCallTime", value: function getDrawCallTime() { return this.sceneInstrumentation.renderTimeCounter.current; } }, { key: "getAnimationTime", value: function getAnimationTime() { return this.sceneInstrumentation.animationsTimeCounter.current; } }, { key: "getActiveMesh", value: function getActiveMesh() { return this.scene.getActiveMeshes().length; } }, { key: "getActiveFaces", value: function getActiveFaces() { return Math.round(this.scene.getActiveIndices() / 3); } }, { key: "getActiveBones", value: function getActiveBones() { return this.scene.getActiveBones(); } }, { key: "getActiveAnimation", value: function getActiveAnimation() { return this.scene._activeAnimatables.length; } }, { key: "getActiveParticles", value: function getActiveParticles() { return this.scene.getActiveParticles(); } }, { key: "getTotalMaterials", value: function getTotalMaterials() { return this.scene.materials.length; } }, { key: "getTotalTextures", value: function getTotalTextures() { return this.scene.textures.length; } }, { key: "getTotalGeometries", value: function getTotalGeometries() { return this.scene.geometries.length; } }, { key: "getTotalMeshes", value: function getTotalMeshes() { return this.scene.meshes.length; } }, { key: "getCameraRenderTime", value: function getCameraRenderTime() { return this.sceneInstrumentation.cameraRenderTimeCounter.current; } }, { key: "getTotalRootNodes", value: function getTotalRootNodes() { return this.scene.rootNodes.length; } }, { key: "getRenderTargetRenderTime", value: function getRenderTargetRenderTime() { var e = this.getDrawCallTime(), t = this.getActiveMeshEvaluationTime(), r = this.getCameraRenderTime() - (t + e); return this.getRTT1Time() + r; } }, { key: "getRegisterBeforeRenderTime", value: function getRegisterBeforeRenderTime() { return this.sceneInstrumentation.registerBeforeTimeCounter.current; } }, { key: "getRegisterAfterRenderTime", value: function getRegisterAfterRenderTime() { return this.sceneInstrumentation.registerAfterTimeCounter.current; } }, { key: "getRTT1Time", value: function getRTT1Time() { return this.sceneInstrumentation.getRTT1TimeCounter.current; } }, { key: "getRegisterBeforeRenderObserverLength", value: function getRegisterBeforeRenderObserverLength() { return this.scene.onBeforeRenderObservable.observers.length; } }, { key: "getRegisterAfterRenderObserverLength", value: function getRegisterAfterRenderObserverLength() { return this.scene.onAfterRenderObservable.observers.length; } }, { key: "getTotalMeshByType", value: function getTotalMeshByType() { var e = new Map(); return this.scene.meshes.forEach(function (t) { e.has(t.xtype) ? e.set(t.xtype, e.get(t.xtype) + 1) : e.set(t.xtype, 1); }), e; } }, { key: "getHardwareRenderInfo", value: function getHardwareRenderInfo() { return { maxTexturesUnits: this.caps.maxTexturesImageUnits, maxVertexTextureImageUnits: this.caps.maxVertexTextureImageUnits, maxCombinedTexturesImageUnits: this.caps.maxCombinedTexturesImageUnits, maxTextureSize: this.caps.maxTextureSize, maxSamples: this.caps.maxSamples, maxCubemapTextureSize: this.caps.maxCubemapTextureSize, maxRenderTextureSize: this.caps.maxRenderTextureSize, maxVertexAttribs: this.caps.maxVertexAttribs, maxVaryingVectors: this.caps.maxVaryingVectors, maxVertexUniformVectors: this.caps.maxVertexUniformVectors, maxFragmentUniformVectors: this.caps.maxFragmentUniformVectors, standardDerivatives: this.caps.standardDerivatives, supportTextureCompress: { s3tc: this.caps.s3tc !== void 0, s3tc_srgb: this.caps.s3tc_srgb !== void 0, pvrtc: this.caps.pvrtc !== void 0, etc1: this.caps.etc1 !== void 0, etc2: this.caps.etc2 !== void 0, astc: this.caps.astc !== void 0, bptc: this.caps.bptc !== void 0 }, textureFloat: this.caps.textureFloat, vertexArrayObject: this.caps.vertexArrayObject, textureAnisotropicFilterExtension: this.caps.textureAnisotropicFilterExtension !== void 0, maxAnisotropy: this.caps.maxAnisotropy, instancedArrays: this.caps.instancedArrays, uintIndices: this.caps.uintIndices, highPrecisionShaders: this.caps.highPrecisionShaderSupported, fragmentDepth: this.caps.fragmentDepthSupported, textureFloatLinearFiltering: this.caps.textureFloatLinearFiltering, renderToTextureFloat: this.caps.textureFloatRender, textureHalfFloat: this.caps.textureHalfFloat, textureHalfFloatLinearFiltering: this.caps.textureHalfFloatLinearFiltering, textureHalfFloatRender: this.caps.textureHalfFloatRender, textureLOD: this.caps.textureLOD, drawBuffersExtension: this.caps.drawBuffersExtension, depthTextureExtension: this.caps.depthTextureExtension, colorBufferFloat: this.caps.colorBufferFloat, supportTimerQuery: this.caps.timerQuery !== void 0, canUseTimestampForTimerQuery: this.caps.canUseTimestampForTimerQuery, supportOcclusionQuery: this.caps.supportOcclusionQuery, multiview: this.caps.multiview, oculusMultiview: this.caps.oculusMultiview, maxMSAASamples: this.caps.maxMSAASamples, blendMinMax: this.caps.blendMinMax, canUseGLInstanceID: this.caps.canUseGLInstanceID, canUseGLVertexID: this.caps.canUseGLVertexID, supportComputeShaders: this.caps.supportComputeShaders, supportSRGBBuffers: this.caps.supportSRGBBuffers, supportStencil: this.engine.isStencilEnable }; } }, { key: "getSystemInfo", value: function getSystemInfo() { return { resolution: "real: " + this.engine.getRenderWidth() + "x" + this.engine.getRenderHeight() + " cavs: " + this._canvas.clientWidth + "x" + this._canvas.clientHeight, hardwareScalingLevel: this.engine.getHardwareScalingLevel().toFixed(2).toString() + "_" + this._scenemanager.initEngineScaleNumber.toFixed(2).toString(), driver: this.engine.getGlInfo().renderer, vender: this.engine.getGlInfo().vendor, version: this.engine.getGlInfo().version, os: this._osversion }; } }, { key: "getFps", value: function getFps() { var e = this.sceneInstrumentation.frameTimeCounter.lastSecAverage, t = this.sceneInstrumentation.interFrameTimeCounter.lastSecAverage; return 1e3 / (e + t); } }, { key: "osVersion", value: function osVersion() { var e = window.navigator.userAgent; var t; return /iphone|ipad|ipod/gi.test(e) ? t = e.match(/OS (\d+)_(\d+)_?(\d+)?/) : /android/gi.test(e) && (t = e.match(/Android (\d+)/)), t != null && t.length > 0 ? t[0] : null; } }]); return XStats; }(); function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray$7(arr, i) || _nonIterableRest(); } var BreathPoint = /*#__PURE__*/function () { function BreathPoint(e) { _classCallCheck(this, BreathPoint); E(this, "_staticmesh"); E(this, "_id"); E(this, "_mat"); E(this, "_type"); E(this, "_maxVisibleRegion"); E(this, "_skinInfo"); E(this, "_scene"); E(this, "_isInScene"); var t = e.mesh, r = e.id, n = e.position, o = e.rotation, a = e.mat, _e$type = e.type, s = _e$type === void 0 ? "default" : _e$type, _e$maxVisibleRegion = e.maxVisibleRegion, l = _e$maxVisibleRegion === void 0 ? -1 : _e$maxVisibleRegion, u = e.scene, _e$skinInfo = e.skinInfo, c = _e$skinInfo === void 0 ? "default" : _e$skinInfo; this._id = r, t.mesh.position = ue4Position2Xverse(n), t.mesh.rotation = ue4Rotation2Xverse(o), this._staticmesh = t, this._mat = a, this._type = s, this._maxVisibleRegion = l, this._scene = u, this._skinInfo = c, this._isInScene = !0; } _createClass(BreathPoint, [{ key: "isInScene", get: function get() { return this._isInScene; } }, { key: "skinInfo", get: function get() { return this._skinInfo; } }, { key: "maxvisibleregion", get: function get() { return this._maxVisibleRegion; } }, { key: "getMesh", value: function getMesh() { return this._staticmesh; } }, { key: "mesh", get: function get() { return this._staticmesh.mesh; } }, { key: "toggleVisibility", value: function toggleVisibility(e) { e == !0 ? this._staticmesh.show() : this._staticmesh.hide(); } }, { key: "changePickable", value: function changePickable(e) { this._staticmesh.mesh.isPickable = e; } }, { key: "removeFromScene", value: function removeFromScene() { this._isInScene && (this._staticmesh.mesh != null && this._scene.removeMesh(this._staticmesh.mesh), this._isInScene = !1); } }, { key: "addToScene", value: function addToScene() { this._isInScene == !1 && (this._staticmesh.mesh != null && this._scene.addMesh(this._staticmesh.mesh), this._isInScene = !0); } }, { key: "dispose", value: function dispose() { var e; (e = this._staticmesh.mesh) == null || e.dispose(!1, !1); } }, { key: "position", get: function get() { return xversePosition2Ue4(this._staticmesh.mesh.position); }, set: function set(e) { this._staticmesh.mesh.position = ue4Position2Xverse(e); } }, { key: "rotation", get: function get() { return xverseRotation2Ue4(this._staticmesh.mesh.rotation); }, set: function set(e) { this._staticmesh.mesh.rotation = ue4Rotation2Xverse(e); } }]); return BreathPoint; }(); function _createForOfIteratorHelper$4(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$4(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$4(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$4(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$4(o, minLen); } function _arrayLikeToArray$4(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var XBreathPointManager = /*#__PURE__*/function () { function XBreathPointManager(e) { var _this = this; _classCallCheck(this, XBreathPointManager); E(this, "_scene"); E(this, "materialMap", new Map()); E(this, "breathPoints", new Map()); E(this, "_sceneManager"); E(this, "_allIds", new Set()); E(this, "_loopBPKeys", []); E(this, "addBreathPoint", /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var t, r, n, _e$spriteSheet, o, _e$spriteWidthNumber, a, _e$spriteHeightNumber, s, l, _e$rotation, u, _e$size, c, _e$width, h, _e$height, f, _e$fps, d, _e$billboardMode, _, _e$forceLeaveGround, g, _e$type, m, _e$lifeTime, v, _e$backfaceculling, y, _e$maxVisibleRegion, b, _e$skinInfo, T, I, C, _I, _I2, A, _I3, S, P, R, M, x; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = [{ url: "https://static.xverse.cn/qqktv/texture.png" }]; if (!(t.length <= 0)) { _context.next = 4; break; } logger$1.warn("[Engine] BreathPoint get texture list error: textureList.length <= 0"), new XBreathPointError("[Engine] BreathPoint get texture list error!"); return _context.abrupt("return"); case 4: r = t[0], n = e.id, _e$spriteSheet = e.spriteSheet, o = _e$spriteSheet === void 0 ? r.url : _e$spriteSheet, _e$spriteWidthNumber = e.spriteWidthNumber, a = _e$spriteWidthNumber === void 0 ? 20 : _e$spriteWidthNumber, _e$spriteHeightNumber = e.spriteHeightNumber, s = _e$spriteHeightNumber === void 0 ? 1 : _e$spriteHeightNumber, l = e.position, _e$rotation = e.rotation, u = _e$rotation === void 0 ? { pitch: -90, yaw: 270, roll: 0 } : _e$rotation, _e$size = e.size, c = _e$size === void 0 ? .6 : _e$size, _e$width = e.width, h = _e$width === void 0 ? -1 : _e$width, _e$height = e.height, f = _e$height === void 0 ? -1 : _e$height, _e$fps = e.fps, d = _e$fps === void 0 ? 30 : _e$fps, _e$billboardMode = e.billboardMode, _ = _e$billboardMode === void 0 ? !1 : _e$billboardMode, _e$forceLeaveGround = e.forceLeaveGround, g = _e$forceLeaveGround === void 0 ? !1 : _e$forceLeaveGround, _e$type = e.type, m = _e$type === void 0 ? "default" : _e$type, _e$lifeTime = e.lifeTime, v = _e$lifeTime === void 0 ? -1 : _e$lifeTime, _e$backfaceculling = e.backfaceculling, y = _e$backfaceculling === void 0 ? !0 : _e$backfaceculling, _e$maxVisibleRegion = e.maxVisibleRegion, b = _e$maxVisibleRegion === void 0 ? -1 : _e$maxVisibleRegion, _e$skinInfo = e.skinInfo, T = _e$skinInfo === void 0 ? "default" : _e$skinInfo; if (!_this.breathPoints.get(n)) { _context.next = 8; break; } logger$1.warn("[Engine] Cannot add breathPoint with an existing id: [" + n + "]"), new XBreathPointError("[Engine] Cannot add breathPoint with an existing id: [" + n + "]"); return _context.abrupt("return"); case 8: if (g) { I = _this.castRay(new BABYLON.Vector3(l.x, l.y, l.z)) * scaleFromUE4toXverse; I != 0 ? l.z = l.z - I + 1 : l.z = l.z + 1; } if (_this.materialMap.get(m)) { _I = _this.materialMap.get(m); _I.count = _I.count + 1, C = _I.mat; } else { _I2 = new BABYLON.Texture(o, _this._scene, !0, !0, BABYLON.Texture.BILINEAR_SAMPLINGMODE, null, function () { logger$1.error("[Engine] Breathpoint create texture error."), new XBreathPointError("[Engine] Breathpoint create texture error."); }, null, !0); _I2.name = "TexBreathPoint_" + n, C = new BABYLON.StandardMaterial("MaterialBreathPoint_".concat(n), _this._scene), C.alpha = 1, C.emissiveTexture = _I2, C.backFaceCulling = y, C.diffuseTexture = _I2, C.diffuseTexture.hasAlpha = !0, C.useAlphaFromDiffuseTexture = !0, _this.materialMap.set(m, { mat: C, count: 1, lastRenderTime: Date.now(), fps: d, spriteWidthNumber: a, spriteHeightNumber: s, spriteSheet: o, texture: _I2 }); } A = new Array(6); for (_I3 = 0; _I3 < 6; _I3++) { A[_I3] = new BABYLON.Vector4(0, 0, 0, 0); } A[0] = new BABYLON.Vector4(0, 0, 1 / a, 1 / s), A[1] = new BABYLON.Vector4(0, 0, 1 / a, 1 / s); S = {}; h > 0 && f > 0 ? S = { width: h, height: f, depth: .01, faceUV: A } : S = { size: c, depth: .01, faceUV: A }; P = BABYLON.MeshBuilder.CreateBox(n, S, _this._scene); P.material = C; R = new XStaticMesh({ id: n, mesh: P, xtype: EMeshType.XBreathPoint, skinInfo: T }); M = u; _ && (P.billboardMode = BABYLON.Mesh.BILLBOARDMODE_ALL, R.allowMove(), M = { pitch: 0, yaw: 270, roll: 0 }); x = new BreathPoint({ type: m, mesh: R, id: n, position: l, rotation: M, mat: C, maxVisibleRegion: b, scene: _this._scene, skinInfo: T }); _this.breathPoints.set(n, x), _this._allIds.add(n), v > 0 && setTimeout(function () { _this.clearBreathPoints(n); }, v * 1e3); case 22: case "end": return _context.stop(); } } }, _callee); })); return function (_x) { return _ref.apply(this, arguments); }; }()); E(this, "reg_breathpoint_update", function () { var e = new Date().getTime(); if (_this.materialMap != null) { var _iterator = _createForOfIteratorHelper$4(_this.materialMap), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var _step$value = _slicedToArray(_step.value, 2), t = _step$value[0], r = _step$value[1]; e - r.lastRenderTime > 1e3 / r.fps && (r.lastRenderTime = e, Math.abs(r.mat.diffuseTexture.uOffset - (1 - 1 / r.spriteWidthNumber)) < 1e-6 ? (r.mat.diffuseTexture.uOffset = 0, Math.abs(r.mat.diffuseTexture.vOffset - (1 - 1 / r.spriteHeightNumber)) < 1e-6 ? r.mat.diffuseTexture.vOffset = 0 : r.mat.diffuseTexture.vOffset += 1 / r.spriteHeightNumber) : r.mat.diffuseTexture.uOffset += 1 / r.spriteWidthNumber); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }); E(this, "reg_breathpoint_autovisible", function () { if (_this._scene.getFrameId() % 2 == 0) if (_this._loopBPKeys.length == 0) _this._loopBPKeys = Array.from(_this._allIds);else { var _e = _this._getMainPlayerPosition(); for (var t = 0; t < 5 && _this._loopBPKeys.length > 0; ++t) { var r = _this._loopBPKeys.pop(); if (r != null) { var n = _this.getBreathPoint(r); if (n != null && n.maxvisibleregion >= 0 && n.mesh.visibility == 1) { var o = n.mesh.position; calcDistance3DVector(_e, o) >= n.maxvisibleregion ? n == null || n.removeFromScene() : n == null || n.addToScene(); } } } } }); this._sceneManager = e, this._scene = e.Scene, this._scene.registerBeforeRender(this.reg_breathpoint_update), this._scene.registerBeforeRender(this.reg_breathpoint_autovisible); } _createClass(XBreathPointManager, [{ key: "setAllBreathPointVisibility", value: function setAllBreathPointVisibility(e) { var _iterator2 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _step2$value = _slicedToArray(_step2.value, 2), t = _step2$value[0], r = _step2$value[1]; r.toggleVisibility(e); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } }, { key: "toggleBPVisibilityBySkinInfo", value: function toggleBPVisibilityBySkinInfo(e, t) { var _iterator3 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _step3$value = _slicedToArray(_step3.value, 2), r = _step3$value[0], n = _step3$value[1]; n.skinInfo == e && n.toggleVisibility(t); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } }, { key: "toggleBPVisibilityById", value: function toggleBPVisibilityById(e, t) { var r = this.getBreathPoint(e); r != null && r.toggleVisibility(t); } }, { key: "getBreathPointBySkinInfo", value: function getBreathPointBySkinInfo(e) { var t = []; var _iterator4 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _step4$value = _slicedToArray(_step4.value, 2), r = _step4$value[0], n = _step4$value[1]; n.skinInfo == e && t.push(n); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } return t; } }, { key: "getAllBreathPoint", value: function getAllBreathPoint() { return this.breathPoints; } }, { key: "getBreathPoint", value: function getBreathPoint(e) { return this.breathPoints.get(e); } }, { key: "delete", value: function _delete(e) { var t = this.breathPoints.get(e); if (t != null) { t.dispose(), this._allIds.delete(e); var r = this.materialMap.get(t._type); r != null && (r.count = r.count - 1, r.count <= 0 && (r.count = 0, r.texture.dispose(), r.mat.dispose(!0, !0), this.materialMap.delete(t._type))), this.breathPoints.delete(e); } } }, { key: "castRay", value: function castRay(e) { var s; e = ue4Position2Xverse({ x: e.x, y: e.y, z: e.z }); var t = new BABYLON.Vector3(0, -1, 0), r = new BABYLON.Ray(e, t, length), n = [], o = (s = this._sceneManager) == null ? void 0 : s.getGround({ x: e.x, y: e.y, z: e.z }); var a = r.intersectsMeshes(o); if (a.length > 0) { var l = a[0]; if (l && l.pickedMesh) { var u = l.distance; t.y = 1; var c = r.intersectsMeshes(n); var h = 1e8; if (c.length > 0) { var f = c[0]; return f && f.pickedMesh && (h = -f.distance), h == 1e8 ? u : Math.abs(h) < Math.abs(u) ? h : u; } } } else if (t.y = 1, a = r.intersectsMeshes(n), a.length > 0) { var _l = a[0]; if (_l && _l.pickedMesh) return _l.distance; } return 0; } }, { key: "changePickable", value: function changePickable(e) { var _iterator5 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var _step5$value = _slicedToArray(_step5.value, 2), t = _step5$value[0], r = _step5$value[1]; r.changePickable(e); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } } }, { key: "clearBreathPoints", value: function clearBreathPoints(e) { logger$1.info("[Engine] clearBreathPoints: ".concat(e)); var _iterator6 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var _step6$value = _slicedToArray(_step6.value, 2), t = _step6$value[0], r = _step6$value[1]; (r._type == e || r._id == e) && this.delete(r._id); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } }, { key: "clearBreathPointsBySkinInfo", value: function clearBreathPointsBySkinInfo(e) { logger$1.info("[Engine] clearBreathPointsBySkinInfo: ".concat(e)); var _iterator7 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var _step7$value = _slicedToArray(_step7.value, 2), t = _step7$value[0], r = _step7$value[1]; r.skinInfo == e && this.delete(r._id); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } } }, { key: "clearAllBreathPoints", value: function clearAllBreathPoints() { logger$1.info("[Engine] ClearAllBreathPoints"); var _iterator8 = _createForOfIteratorHelper$4(this.breathPoints.entries()), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var _step8$value = _slicedToArray(_step8.value, 2), e = _step8$value[0], t = _step8$value[1]; this.delete(t._id); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } } }, { key: "_getMainPlayerPosition", value: function _getMainPlayerPosition() { var r; var e = this._sceneManager.cameraComponent.MainCamera.position, t = this._sceneManager.avatarComponent.getMainAvatar(); if (t != null && t != null) { var n = (r = t == null ? void 0 : t.rootNode) == null ? void 0 : r.position; if (n != null) return n; } return e; } }, { key: "changeBreathPointPose", value: function changeBreathPointPose(e, t, r) { var n = new BABYLON.Vector3(e.position.x, e.position.y, e.position.z); if (this.breathPoints.get(r) != null) { logger$1.info("[Engine] changeBreathPointPose, id:".concat(r)); var o = this.breathPoints.get(r), a = o.mesh.position; var s = a.subtract(n); s = BABYLON.Vector3.Normalize(s); var l = BABYLON.Vector3.Distance(a, n), u = new Ray(n, s, l), c = this._scene.multiPickWithRay(u); if (c) { for (var h = 0; h < c.length; h++) { if (c[h].pickedMesh != null && t.mesh.name.indexOf(c[h].pickedMesh.name) >= 0) { var f = c[h].pickedPoint; o.mesh.position = n.add(f.subtract(n).scale(.99)), this.breathPoints.set(r, o); } } } } else logger$1.warn("[Engine] changeBreathPointPose, id:".concat(r, " is not existing!")); } }]); return XBreathPointManager; }(); function _createForOfIteratorHelper$3(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$3(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$3(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$3(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$3(o, minLen); } function _arrayLikeToArray$3(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var XDecalManager = /*#__PURE__*/function () { function XDecalManager(e) { _classCallCheck(this, XDecalManager); E(this, "scene"); E(this, "_decal"); E(this, "_mat"); E(this, "_sharedMat"); E(this, "_scenemanager"); this._decal = new Map(), this._mat = new Map(), this._sharedMat = new Map(), this._scenemanager = e, this.scene = e.Scene; } _createClass(XDecalManager, [{ key: "decals", get: function get() { return Array.from(this._decal.values()); } }, { key: "getMesh", value: function getMesh() { return this._decal; } }, { key: "addDecal", value: function () { var _addDecal = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var _this = this; var t, r, _e$skinInfo, n; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: t = e.id, r = e.meshPath, _e$skinInfo = e.skinInfo, n = _e$skinInfo === void 0 ? "default" : _e$skinInfo; return _context.abrupt("return", this._decal.get(t) ? (logger.warn("[Engine] Cannot add decal with an existing id: [".concat(t, "], meshPath: ").concat(r, ", skinInfo:").concat(n)), Promise.resolve(!0)) : (logger.info("[Engine] addDecal wiht id:[".concat(t, "], meshPath: ").concat(r, ", skinInfo:").concat(n)), new Promise(function (o, a) { return _this._scenemanager.urlTransformer(r).then(function (s) { return new Promise(function (l, u) { if (_this._decal.get(t)) l(!0);else { var c = new XDecal({ id: t, scene: _this.scene, meshPath: s, skinInfo: n }); _this._decal.set(t, c), c.loadModel().then(function () { l(!0); }).catch(function (h) { logger.error("[Engine] addDecal Error! id: [".concat(t, "], meshpath:").concat(r, ", skin: ").concat(n, ". ").concat(h)), u(new XDecalError("[Engine] addDecal Error! id: [".concat(t, "], meshpath:").concat(r, ", skin: ").concat(n, ". ").concat(h))); }); } }); }).then(function (s) { s == !0 ? o(!0) : a(!1); }).catch(function (s) { logger.error("[Engine] Add Decal error! id: [".concat(t, "], meshpath:").concat(r, ", skin:").concat(n, ". ").concat(s)), a(new XDecalError("[Engine] addDecal error! id: [".concat(t, "], meshpath:").concat(r, ", skin:").concat(n, ". ").concat(s))); }); }))); case 2: case "end": return _context.stop(); } } }, _callee, this); })); function addDecal(_x) { return _addDecal.apply(this, arguments); } return addDecal; }() }, { key: "setDecalTexture", value: function setDecalTexture(e) { var _this2 = this; var t = e.id, r = e.buffer, _e$isDynamic = e.isDynamic, n = _e$isDynamic === void 0 ? !1 : _e$isDynamic, _e$width = e.width, o = _e$width === void 0 ? 1100 : _e$width, _e$height = e.height, a = _e$height === void 0 ? 25 : _e$height, _e$slots = e.slots, s = _e$slots === void 0 ? 1 : _e$slots, _e$visibleSlots = e.visibleSlots, l = _e$visibleSlots === void 0 ? 1 : _e$visibleSlots, u = !0; return logger.info("[Engine] setDecalTexture wiht id:[".concat(t, "]")), new Promise(function (c, h) { var f = _this2._decal.get(t); if (f != null) { if (_this2._mat.get(t) != null) _this2.changeDecalTexture({ id: t, buffer: r, isUrl: u, isDynamic: n, width: o, height: a, slots: s, visibleSlots: l }), c(!0);else { var d = new XDecalMaterial(t, _this2.scene); d.setTexture(r, u, n, o, a, s, l).then(function () { f.setMat(d.getMat()), _this2._decal.set(t, f), _this2._mat.set(t, d), c(!0); }).catch(function (_) { logger.error("[Engine] setDecalTexture Error! " + _), h(new XDecalTextureError("[Engine] decal set texture error! ".concat(_))); }); } } else logger.error("[Engine] Error! decal id: [" + t + "] is not find!"), h(new XDecalTextureError("[Engine] decal id: [".concat(t, "] is not find!"))); }); } }, { key: "shareDecal", value: function () { var _shareDecal = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e) { var _this3 = this; var t, r, n, _e$skinInfo2, o; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: t = e.idTar, r = e.meshPath, n = e.idSrc, _e$skinInfo2 = e.skinInfo, o = _e$skinInfo2 === void 0 ? "default" : _e$skinInfo2; return _context2.abrupt("return", this._decal.has(n) && !this._decal.has(t) && this._mat.has(n) && !this._mat.has(t) ? (logger.info("[Engine] shareDecal wiht idTar:[".concat(t, "], idSrc:[").concat(n, "], skinInfo: ").concat(o, ", meshPath: ").concat(r)), new Promise(function (a, s) { return _this3._scenemanager.urlTransformer(r).then(function (l) { var u = new XDecal({ id: t, scene: _this3.scene, meshPath: l, skinInfo: o }), c = _this3._mat.get(n); c != null && (u.setMat(c.getMat()), u.sourceMatId = n, _this3._decal.set(t, u), _this3.addSharedMatCount(n)), a(!0); }).catch(function (l) { s(new XDecalError("[Engine] decal shareDecal error! ".concat(l))); }); })) : (logger.error("[Engine] shareDecal Error. idSrc: [".concat(n, "] not exist! or idTar: [").concat(t, "] exists!")), Promise.reject("[Engine] shareDecal Error. idSrc: [".concat(n, "] not exist! or idTar: [").concat(t, "] exists!")))); case 2: case "end": return _context2.stop(); } } }, _callee2, this); })); function shareDecal(_x2) { return _shareDecal.apply(this, arguments); } return shareDecal; }() }, { key: "changeDecalModel", value: function () { var _changeDecalModel = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var _this4 = this; var t, r, n; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: t = e.id, r = e.meshPath, n = this._decal.get(t); return _context3.abrupt("return", new Promise(function (o, a) { return n != null ? (logger.info("[Engine] changeDecalModel id:".concat(t)), n.changeModel(r).then(function () { _this4._decal.set(t, n), o(!0); })) : (logger.warn("[Engine] changeDecalModel id:".concat(t, " is not exist")), a("[Engine] changeDecalModel id:".concat(t, " is not exist"))); })); case 2: case "end": return _context3.stop(); } } }, _callee3, this); })); function changeDecalModel(_x3) { return _changeDecalModel.apply(this, arguments); } return changeDecalModel; }() }, { key: "changeDecalTexture", value: function changeDecalTexture(e) { var t = e.id, r = e.buffer, _e$isUrl = e.isUrl, n = _e$isUrl === void 0 ? !1 : _e$isUrl, _e$isDynamic2 = e.isDynamic, o = _e$isDynamic2 === void 0 ? !1 : _e$isDynamic2, _e$width2 = e.width, a = _e$width2 === void 0 ? 1110 : _e$width2, _e$height2 = e.height, s = _e$height2 === void 0 ? 25 : _e$height2, _e$slots2 = e.slots, l = _e$slots2 === void 0 ? 1 : _e$slots2, _e$visibleSlots2 = e.visibleSlots, u = _e$visibleSlots2 === void 0 ? 1 : _e$visibleSlots2, c = this._mat.get(t); c != null && this._decal.has(t) ? (c.changeTexture(r, n, o, a, s, l, u), this._mat.set(t, c)) : logger.error("[Engine] changeDecalTexture Error. id:".concat(t, " is not exist")); } }, { key: "deleteDecal", value: function deleteDecal(e) { var t, r; if (this._decal.has(e)) { var n = this._decal.get(e); n != null && n.cleanMesh(), this._sharedMat.get(e) != null ? this.minusSharedMatCount(e) : this._mat.get(e) != null ? ((t = this._mat.get(e)) == null || t.cleanTexture(), this._mat.delete(e)) : ((r = n.sourceMatId) == null ? void 0 : r.length) > 0 && this.minusSharedMatCount(n.sourceMatId), this._decal.delete(e); } } }, { key: "deleteDecalBySkinInfo", value: function deleteDecalBySkinInfo(e) { var _iterator = _createForOfIteratorHelper$3(this._decal.entries()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var _step$value = _slicedToArray(_step.value, 2), t = _step$value[0], r = _step$value[1]; r.skinInfo == e && this.deleteDecal(t); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "addSharedMatCount", value: function addSharedMatCount(e) { var t = this._sharedMat.get(e); t != null ? this._sharedMat.set(e, t + 1) : this._sharedMat.set(e, 1); } }, { key: "minusSharedMatCount", value: function minusSharedMatCount(e) { var r; var t = this._sharedMat.get(e); t != null && (this._sharedMat.set(e, t - 1), t == 0 && (this._sharedMat.delete(e), (r = this._mat.get(e)) == null || r.cleanTexture(), this._mat.delete(e))); } }, { key: "toggle", value: function toggle(e, t) { var r = this._decal.get(e); r == null || r.toggle(t); } }, { key: "toggleDecalBySkinInfo", value: function toggleDecalBySkinInfo(e, t) { var _iterator2 = _createForOfIteratorHelper$3(this._decal.entries()), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _step2$value = _slicedToArray(_step2.value, 2), r = _step2$value[0], n = _step2$value[1]; n.skinInfo == e && n.toggle(t); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } }, { key: "updateTexAsWords", value: function updateTexAsWords(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _r$clearArea = r.clearArea, n = _r$clearArea === void 0 ? !0 : _r$clearArea, _r$w = r.w, o = _r$w === void 0 ? 480 : _r$w, _r$h = r.h, a = _r$h === void 0 ? 480 : _r$h, _r$y = r.y, s = _r$y === void 0 ? a / 2 : _r$y, _r$fontsize = r.fontsize, l = _r$fontsize === void 0 ? 70 : _r$fontsize, _r$slots = r.slots, u = _r$slots === void 0 ? 1 : _r$slots, _r$visibleSlots = r.visibleSlots, c = _r$visibleSlots === void 0 ? 1 : _r$visibleSlots, _r$font = r.font, h = _r$font === void 0 ? "black-body" : _r$font, _r$color = r.color, f = _r$color === void 0 ? "white" : _r$color, _r$fontweight = r.fontweight, d = _r$fontweight === void 0 ? 100 : _r$fontweight; var _r$x = r.x, _ = _r$x === void 0 ? o / 2 : _r$x; var g = this._mat.get(e); if (g) { _ == -1 && (_ = (g.getUOffset() + c / u) % 1 * o * u); var v = g.getMat().diffuseTexture, y = v.getContext(); n && y.clearRect(_ - o / 2, s - a / 2, o, a), y.textAlign = "center", y.textBaseline = "middle", v.drawText(t, _, s, d + " " + l + "px " + h, f, "transparent", !0), v.hasAlpha = !0, v.update(); } } }, { key: "updateTexAsImg", value: function () { var _updateTexAsImg = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e, t) { var _this5 = this; var r, _r$clearArea2, n, _r$w2, o, _r$h2, a, _r$x2, s, _r$y2, l, _r$clearW, u, _r$clearH, c, _args4 = arguments; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: r = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {}; _r$clearArea2 = r.clearArea, n = _r$clearArea2 === void 0 ? !0 : _r$clearArea2, _r$w2 = r.w, o = _r$w2 === void 0 ? 480 : _r$w2, _r$h2 = r.h, a = _r$h2 === void 0 ? 480 : _r$h2, _r$x2 = r.x, s = _r$x2 === void 0 ? o / 2 : _r$x2, _r$y2 = r.y, l = _r$y2 === void 0 ? a / 2 : _r$y2, _r$clearW = r.clearW, u = _r$clearW === void 0 ? o : _r$clearW, _r$clearH = r.clearH, c = _r$clearH === void 0 ? a : _r$clearH; return _context4.abrupt("return", t == null || t == null || t == "" ? (logger.error("[Engine] updateTexAsImg Error. id: [".concat(e, "], newBuffer is Null or \"\"!")), Promise.reject(new XDecalError("[Engine] updateTexAsImg Error. id: [".concat(e, "], newBuffer is Null or \"\"!")))) : new Promise(function (h, f) { return _this5._scenemanager.urlTransformer(t).then(function (d) { return new Promise(function (_, g) { var m = _this5._mat.get(e); if (m) { var y = m.getMat().diffuseTexture; if (typeof t == "string") { var b = new Image(); b.crossOrigin = "anonymous", b.src = d, b.onload = function () { var T = y.getContext(); n && T.clearRect(s - u / 2, l - c / 2, u, c), T.drawImage(b, s - o / 2, l - a / 2, o, a), y.update(), _(!0); }, b.onerror = function () { logger.error("[Engine] updateTexAsImg Error.newImg load error. id: [".concat(e, "], decalMat is Null or undefined!")), g(new XDecalError("[Engine] updateTexAsImg Error. id: [".concat(e, "], decalMat is Null or undefined!"))); }; } else logger.error("[Engine] updateTexAsImg Error. id: [".concat(e, "], Buffer is not string!")), g(new XDecalError("[Engine] updateTexAsImg Error. id: [".concat(e, "], Buffer is not string!"))); } else logger.error("[Engine] updateTexAsImg Error. id: [".concat(e, "], decalMat is Null or undefined!")), g(new XDecalError("[Engine] updateTexAsImg Error. id: [".concat(e, "], decalMat is Null or undefined!"))); }).then(function (_) { _ == !0 ? h(!0) : (logger.error("[Engine] updateTexAsImg Error. id: [".concat(e, "] !")), f(new XDecalError("[Engine] updateTexAsImg error! id: [".concat(e, "]")))); }).catch(function (_) { logger.error("[Engine] updateTexAsImg Error. id: [".concat(e, "]. ").concat(_)); }); }); })); case 3: case "end": return _context4.stop(); } } }, _callee4); })); function updateTexAsImg(_x4, _x5) { return _updateTexAsImg.apply(this, arguments); } return updateTexAsImg; }() }, { key: "startAnime", value: function startAnime(e, t) { logger.info("[Engine] Decal Start Anime. [".concat(e, "]")); var _t$speed = t.speed, r = _t$speed === void 0 ? .001 : _t$speed, n = t.callback, o = this._mat.get(e); o ? (o.do_animation(r), n && o.uOffsetObserverable.add(n)) : (logger.error("[Engine] startAnime Error. id: [".concat(e, "] is not exist!")), new XDecalError("[Engine] startAnime Error. id: [".concat(e, "] is not exist!"))); } }]); return XDecalManager; }(); var PoolObject = /*#__PURE__*/function () { function PoolObject(e, t, r) { var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !0; _classCallCheck(this, PoolObject); E(this, "data"); E(this, "nextFree"); E(this, "previousFree"); E(this, "free"); this.data = e, this.nextFree = t, this.previousFree = r, this.free = n; } _createClass(PoolObject, [{ key: "dispose", value: function dispose() { this.data && this.data instanceof BABYLON.Mesh && this.data.dispose(!0, !0), this.previousFree = null, this.nextFree = null, this.data = null; } }]); return PoolObject; }(); var Pool = /*#__PURE__*/function () { function Pool(e, t, r, n) { _classCallCheck(this, Pool); this.lastFree = null; this.nextFree = null; this._pool = [], this.objCreator = e, this.objReseter = t; for (var _len = arguments.length, o = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++) { o[_key - 4] = arguments[_key]; } for (var a = 0; a < n; a++) { this.addNewObject(this.newPoolObject.apply(this, o)); } this.capacity = r; } _createClass(Pool, [{ key: "addNewObject", value: function addNewObject(e) { return this._pool.push(e), this.release(e), e; } }, { key: "release", value: function release(e) { e.free = !0, e.nextFree = null, e.previousFree = this.lastFree, this.lastFree ? this.lastFree.nextFree = e : this.nextFree = e, this.lastFree = e, this.objReseter(e); } }, { key: "getFree", value: function getFree() { var t = this.nextFree ? this.nextFree : this.addNewObject(this.newPoolObject.apply(this, arguments)); return t.free = !1, this.nextFree = t.nextFree, this.nextFree || (this.lastFree = null), t; } }, { key: "newPoolObject", value: function newPoolObject() { var t = this.objCreator.apply(this, arguments); return new PoolObject(t, this.nextFree, this.lastFree); } }, { key: "releaseAll", value: function releaseAll() { var _this = this; this._pool.forEach(function (e) { return _this.release(e); }); } }, { key: "clean", value: function clean() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var r = this.nextFree; if (!r) return; var n = 0; for (; r;) { n += 1, r = r.nextFree; } var o = !1; if (n > e && this._pool.length > this.capacity && (o = !0), o) for (r = this.nextFree; r;) { r.free = !1, this.nextFree = r.nextFree; var a = this._pool.indexOf(r); this._pool.splice(a, 1), this.nextFree || (this.lastFree = null), r == null || r.dispose(), r = this.nextFree; } } }]); return Pool; }(); var BillboardStatus = { SHOW: 1, HIDE: 0, DISPOSE: -1 }; function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var AvatarAnimationError$1 = /*#__PURE__*/function (_XverseError) { _inherits(AvatarAnimationError, _XverseError); var _super = _createSuper$3(AvatarAnimationError); function AvatarAnimationError(e) { _classCallCheck(this, AvatarAnimationError); return _super.call(this, 5101, e || "[Engine] \u89D2\u8272\u52A8\u753B\u64AD\u653E\u5931\u8D25"); } return _createClass(AvatarAnimationError); }(XverseError); function _createForOfIteratorHelper$2(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$2(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$2(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); } function _arrayLikeToArray$2(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var XAnimationController = /*#__PURE__*/function () { function XAnimationController(e) { var _this = this; _classCallCheck(this, XAnimationController); E(this, "iBodyAnim"); E(this, "animations", []); E(this, "defaultAnimation", "Idle"); E(this, "onPlay", "Idle"); E(this, "loop", !0); E(this, "animationExtras", []); E(this, "enableBlend", !1); E(this, "enableSkLod", !1); E(this, "_boneMap", new Map()); E(this, "_lodMask", new Map()); E(this, "activeFaceAnimation"); E(this, "iFaceAnim"); E(this, "_scene"); E(this, "_avatar"); E(this, "onPlayObservable", new Observable()); E(this, "postObserver"); E(this, "playAnimation", function (e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var n = arguments.length > 3 ? arguments[3] : undefined; var o = arguments.length > 4 ? arguments[4] : undefined; var a = arguments.length > 5 ? arguments[5] : undefined; return new Promise(function (s, l) { if (_this._isPlaying(e, r) || (_this._registerAnimInfo(e, t, r, n, o, a), !_this._isAnimate())) return s(null); _this._prerocess(e, t), _this._avatar.avatarManager.loadAnimation(_this._avatar.avatarType, e).then(function (u) { if (!u) return l(new AvatarAnimationError$1("animation group does not exist")); var c = _this._mappingSkeleton(u); if (!c) return l(new AvatarAnimationError$1("mapping animation failed")); if (c && _this._isAnimationValid(c)) return c.dispose(), l(new AvatarAnimationError$1("mapping animation failed")); if (_this.enableSkLod && _this.skeletonMask(c, r), _this.detachAnimation(r), r == 0 ? _this.iBodyAnim.animGroup = c : r == 1 && (_this.iFaceAnim.animGroup = c), !_this._playAnimation(r)) return l(new AvatarAnimationError$1("[Engine] play animation failed, animtion resource does not match current character")); _this._playEffect(), _this.postObserver = c.onAnimationEndObservable.addOnce(function () { return _this._postprocess(r), s(null); }); }); }); }); E(this, "stopAnimation", function () { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var t, r, n, o; switch (e) { case 0: _this.iBodyAnim && _this.iBodyAnim.animGroup && ((t = _this.iBodyAnim) == null || t.animGroup.stop()); break; case 1: _this.iFaceAnim && _this.iFaceAnim.animGroup && ((r = _this.iFaceAnim) == null || r.animGroup.stop()); break; case 2: _this.iBodyAnim && _this.iBodyAnim.animGroup && ((n = _this.iBodyAnim) == null || n.animGroup.stop()), _this.iFaceAnim && _this.iFaceAnim.animGroup && ((o = _this.iFaceAnim) == null || o.animGroup.stop()); break; } }); E(this, "pauseAnimation", function () { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var t, r, n, o; switch (e) { case 0: _this.iBodyAnim && _this.iBodyAnim.animGroup && ((t = _this.iBodyAnim) == null || t.animGroup.pause()); break; case 1: _this.iFaceAnim && _this.iFaceAnim.animGroup && ((r = _this.iFaceAnim) == null || r.animGroup.pause()); break; case 2: _this.iBodyAnim && _this.iBodyAnim.animGroup && ((n = _this.iBodyAnim) == null || n.animGroup.pause()), _this.iFaceAnim && _this.iFaceAnim.animGroup && ((o = _this.iFaceAnim) == null || o.animGroup.pause()); break; } }); E(this, "resetAnimation", function () { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var t, r, n, o; switch (e) { case 0: _this.iBodyAnim && _this.iBodyAnim.animGroup && ((t = _this.iBodyAnim) == null || t.animGroup.reset()); break; case 1: _this.iFaceAnim && _this.iFaceAnim.animGroup && ((r = _this.iFaceAnim) == null || r.animGroup.reset()); break; case 2: _this.iBodyAnim && _this.iBodyAnim.animGroup && ((n = _this.iBodyAnim) == null || n.animGroup.reset()), _this.iFaceAnim && _this.iFaceAnim.animGroup && ((o = _this.iFaceAnim) == null || o.animGroup.reset()); break; } }); this._avatar = e, this._scene = e.avatarManager.scene, this.animationExtras.push(action.Cheering.animName), this._boneMap = new Map(); } _createClass(XAnimationController, [{ key: "_isPlaying", value: function _isPlaying(e, t) { return t == 0 && this.iBodyAnim != null && this.iBodyAnim.animGroup && e == this.iBodyAnim.name ? !0 : !!(t == 1 && this.iFaceAnim != null && this.iFaceAnim.animGroup && e == this.iFaceAnim.name); } }, { key: "activeAnimation", value: function activeAnimation() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var t, r; switch (e) { case 0: return (t = this.iBodyAnim) == null ? void 0 : t.animGroup; case 1: return (r = this.iFaceAnim) == null ? void 0 : r.animGroup; default: return; } } }, { key: "enableAnimationBlend", value: function enableAnimationBlend() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : .1; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var r, n, o, a; if (t == 0 && ((r = this.iBodyAnim) == null ? void 0 : r.animGroup)) { var _iterator = _createForOfIteratorHelper$2((n = this.iBodyAnim) == null ? void 0 : n.animGroup.targetedAnimations), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var s = _step.value; s.animation.enableBlending = !0, s.animation.blendingSpeed = e; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } else if (t == 0 && ((o = this.iFaceAnim) == null ? void 0 : o.animGroup)) { var _iterator2 = _createForOfIteratorHelper$2((a = this.iFaceAnim) == null ? void 0 : a.animGroup.targetedAnimations), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _s = _step2.value; _s.animation.enableBlending = !0, _s.animation.blendingSpeed = e; } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } }, { key: "disableAnimationBlend", value: function disableAnimationBlend() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var t, r, n, o; if (e == 0 && ((t = this.iBodyAnim) == null ? void 0 : t.animGroup)) { var _iterator3 = _createForOfIteratorHelper$2((r = this.iBodyAnim) == null ? void 0 : r.animGroup.targetedAnimations), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var a = _step3.value; a.animation.enableBlending = !1; } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } else if (e == 0 && ((n = this.iFaceAnim) == null ? void 0 : n.animGroup)) { var _iterator4 = _createForOfIteratorHelper$2((o = this.iFaceAnim) == null ? void 0 : o.animGroup.targetedAnimations), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _a = _step4.value; _a.animation.enableBlending = !1; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } } } }, { key: "skeletonMask", value: function skeletonMask(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (t == 0) { var r = this._lodMask.get(this._avatar.distLevel); if (r) for (var n = 0; n < e.targetedAnimations.length; ++n) { r.includes(e.targetedAnimations[n].target.name) || (e.targetedAnimations.splice(n, 1), n--); } return !0; } return !1; } }, { key: "detachAnimation", value: function detachAnimation() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2; var t, r; switch (e) { case 0: this.iBodyAnim && this.iBodyAnim.animGroup && (this.iBodyAnim.animGroup._parentContainer.xReferenceCount && this.iBodyAnim.animGroup._parentContainer.xReferenceCount--, this.iBodyAnim.animGroup.stop(), this.iBodyAnim.animGroup.dispose(), this.iBodyAnim.animGroup = void 0); break; case 1: this.iFaceAnim && this.iFaceAnim.animGroup && (this.iFaceAnim.animGroup._parentContainer.xReferenceCount && this.iFaceAnim.animGroup._parentContainer.xReferenceCount--, this.iFaceAnim.animGroup.stop(), this.iFaceAnim.animGroup.dispose(), this.iFaceAnim.animGroup = void 0); break; case 2: this.iBodyAnim && this.iBodyAnim.animGroup && (this.iBodyAnim.animGroup._parentContainer.xReferenceCount && this.iBodyAnim.animGroup._parentContainer.xReferenceCount--, (t = this.iBodyAnim) == null || t.animGroup.stop(), (r = this.iBodyAnim) == null || r.animGroup.dispose(), this.iBodyAnim.animGroup = void 0), this.iFaceAnim && this.iFaceAnim.animGroup && (this.iFaceAnim.animGroup._parentContainer.xReferenceCount && this.iFaceAnim.animGroup._parentContainer.xReferenceCount--, this.iFaceAnim.animGroup.stop(), this.iFaceAnim.animGroup.dispose(), this.iFaceAnim.animGroup = void 0); break; } } }, { key: "blendAnimation", value: function blendAnimation() {} }, { key: "getAnimation", value: function getAnimation(e, t) { return avatarLoader.animations.get(getAnimationKey(t, e)); } }, { key: "_mappingSkeleton", value: function _mappingSkeleton(e) { var _this2 = this; if (e) { var t = e.clone(e.name, function (r) { var o, a, s; var n = r.name.split(" ").length > 2 ? r.name.split(" ")[2] : r.name; if (_this2._boneMap.size === ((o = _this2._avatar.skeleton) == null ? void 0 : o.bones.length)) return _this2._boneMap.get(n); { var l = (s = (a = _this2._avatar.skeleton) == null ? void 0 : a.bones.find(function (u) { return u.name === r.name || u.name === r.name.split(" ")[2]; })) == null ? void 0 : s.getTransformNode(); return l && (l.name = n, _this2._boneMap.set(n, l)), l; } }); return t._parentContainer = e._parentContainer, t; } else return; } }, { key: "removeAnimation", value: function removeAnimation(e) { var t = avatarLoader.containers.get(e.name); t && (t.dispose(), avatarLoader.containers.delete(e.name), avatarLoader.animations.delete(getAnimationKey(e.name, e.skType))); } }, { key: "_setPosition", value: function _setPosition(e, t) { this._avatar.priority === 0 && this._avatar.isRender && e === this.defaultAnimation && e != this.onPlay && !this._avatar.isSelected && this._avatar.setPosition(this._avatar.position, !0); } }, { key: "_registerAnimInfo", value: function _registerAnimInfo(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var n = arguments.length > 3 ? arguments[3] : undefined; var o = arguments.length > 4 ? arguments[4] : undefined; var a = arguments.length > 5 ? arguments[5] : undefined; var s = { name: e, skType: this._avatar.avatarType, loop: t, playSpeed: n, currentFrame: 0, startFrame: o, endFrame: a }; r == 0 ? this.iBodyAnim == null ? this.iBodyAnim = s : (this.iBodyAnim.name = e, this.iBodyAnim.skType = this._avatar.avatarType, this.iBodyAnim.loop = t, this.iBodyAnim.playSpeed = n, this.iBodyAnim.currentFrame = 0, this.iBodyAnim.startFrame = o, this.iBodyAnim.endFrame = a) : r == 1 && (this.iFaceAnim == null ? this.iFaceAnim = s : (this.iFaceAnim.name = e, this.iFaceAnim.skType = this._avatar.avatarType, this.iFaceAnim.loop = t, this.iFaceAnim.playSpeed = n, this.iFaceAnim.currentFrame = 0, this.iFaceAnim.startFrame = o, this.iFaceAnim.endFrame = a)), this.onPlay = e, this.loop = t; } }, { key: "_isAnimate", value: function _isAnimate() { var e; return !(!this._avatar.isRender || !this._avatar.skeleton || ((e = this._avatar.rootNode) == null ? void 0 : e.getChildMeshes().length) == 0); } }, { key: "_prerocess", value: function _prerocess(e, t) { this._avatar.isRayCastEnable && this._setPosition(e, t), this._avatar.priority === 0 && logger$1.info("start play animation: ".concat(e, " on avatar ").concat(this._avatar.id)); } }, { key: "_playEffect", value: function _playEffect() { var _this3 = this; this.animationExtras.indexOf(this.iBodyAnim.name) != -1 && action.Cheering.attachPair.forEach(function (t) { _this3._avatar.attachExtraProp(t.obj, t.bone, new BABYLON.Vector3(t.offset.x, t.offset.y, t.offset.z), new BABYLON.Vector3(t.rotate.x, t.rotate.y, t.rotate.z)), _this3._avatar.showExtra(t.obj); }); } }, { key: "_playAnimation", value: function _playAnimation() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var t, r; return e == 0 && this.iBodyAnim && ((t = this.iBodyAnim) == null ? void 0 : t.animGroup) ? (this.onPlayObservable.notifyObservers(this._scene), this.iBodyAnim.animGroup.start(this.loop, this.iBodyAnim.playSpeed, this.iBodyAnim.startFrame, this.iBodyAnim.endFrame, !1), !0) : e == 1 && this.iFaceAnim && ((r = this.iFaceAnim) == null ? void 0 : r.animGroup) ? (this.iFaceAnim.animGroup.start(this.loop, this.iFaceAnim.playSpeed, this.iFaceAnim.startFrame, this.iFaceAnim.endFrame, !1), !0) : !1; } }, { key: "_postprocess", value: function _postprocess(e) { var r, n; var t; e == 0 ? t = (r = this.iBodyAnim) == null ? void 0 : r.name : e == 1 && (t = (n = this.iFaceAnim) == null ? void 0 : n.name), t === action.Cheering.animName && this._avatar.disposeExtra(); } }, { key: "_isAnimationValid", value: function _isAnimationValid(e) { for (var t = 0; t < e.targetedAnimations.length; ++t) { if (e.targetedAnimations[t].target) return !1; } return !0; } }]); return XAnimationController; }(); var XAvatarComopnent = /*#__PURE__*/function () { function XAvatarComopnent() { _classCallCheck(this, XAvatarComopnent); E(this, "resourceIdList", []); E(this, "skeleton"); E(this, "extraProp"); E(this, "extras", []); E(this, "body"); } _createClass(XAvatarComopnent, [{ key: "addBodyComp", value: function addBodyComp(e, t) { return !e.rootNode || t.root.getChildMeshes().length === 0 ? (t.isRender = !1, !1) : (this.body = t, this.body.root.parent = e.rootNode, t.isRender = !0, this.body.root.getChildMeshes()[0] && (this.body.root.getChildMeshes()[0].xtype = EMeshType.XAvatar, this.body.root.getChildMeshes()[0].xid = e.id), this.skeleton = t.skeleton, !0); } }, { key: "addClothesComp", value: function addClothesComp(e, t) { var _this = this; return !e.rootNode || !this.skeleton || !t.root ? (t.isRender = !1, !1) : (t.root.xtype = EMeshType.XAvatar, t.root.xid = e.id, t.isRender = !0, t.root.parent = e.rootNode.getChildMeshes()[0], this.resourceIdList.push(t), t.root.skeleton = this.skeleton, t.root.getChildMeshes().forEach(function (r) { r.skeleton = _this.skeleton; }), !0); } }, { key: "clearClothesComp", value: function clearClothesComp(e) { e.root.getChildMeshes().forEach(function (t) { t.skeleton = null, t.dispose(), t.xid = void 0; }), e.root.dispose(), this.resourceIdList = this.resourceIdList.filter(function (t) { return t.uId != e.uId; }); } }, { key: "clearAllClothesComps", value: function clearAllClothesComps() { this.resourceIdList.forEach(function (e) { var t; e.root.parent = null, e.root._parentContainer.xReferenceCount && (e.root._parentContainer.xReferenceCount--, e.root._parentContainer = null), e.isRender = !1, e.isSelected = !1, e.root.getChildMeshes().forEach(function (r) { r.skeleton = null, r.dispose(); }), (t = e.root.skeleton) == null || t.dispose(), e.root.dispose(); }), this.resourceIdList = []; } }, { key: "dispose", value: function dispose(e) { this.body ? (this.body.root._parentContainer.xReferenceCount && (this.body.root._parentContainer.xReferenceCount--, this.body.root._parentContainer = null), this.clearAllClothesComps(), this.body.isRender = !1, this.body.skeleton.dispose(), this.body.skeleton = null, this.body.root.dispose(), this.body = void 0, this.skeleton && (this.skeleton.dispose(), this.skeleton = void 0)) : logger$1.warn("[Engine] no body to dispose"); } }, { key: "changeClothesComp", value: function changeClothesComp(e, t, r, n, o) { var _this2 = this; return new Promise(function (a) { if (r === "pendant" || _this2.resourceIdList.some(function (s) { return s.name === t; })) return a(); if (e.isHide || !e.isRender) o.concat(r).forEach(function (l) { e.clothesList = e.clothesList.filter(function (c) { return c.type != l; }); var u = { type: r, id: t, url: n, lod: 0 }; e.clothesList.push(u); }), a();else { var s = o.concat(r); e.avatarManager.loadDecoration(r, t, 0).then(function (l) { if (l) { e.attachDecoration(l); var u = { type: r, id: t, url: n }; e.clothesList.push(u), l.root.setEnabled(!0), s.forEach(function (c) { var h = _this2.resourceIdList.filter(function (f) { return f.type === c; }); if (h.length > 1) { (function () { var f = h.filter(function (d) { return d.name === t; }); if (f.length > 1) { var _loop = function _loop(d) { e.detachDecoration(f[d]), e.clothesList = e.clothesList.filter(function (g) { return g.id != f[d].name; }); var _ = { type: r, id: t, url: n }; e.clothesList.push(_); }; for (var d = 1; d < f.length; ++d) { _loop(d); } } })(); } h[0] && h[0].name != t && _this2._readyToDetach(e, r) && (e.detachDecoration(h[0]), e.clothesList = e.clothesList.filter(function (f) { return f.id != h[0].name; })); }); } return a(); }); } }); } }, { key: "_readyToDetach", value: function _readyToDetach(e, t) { return !((t == "clothes" || t == "pants") && e.clothesList.filter(function (n) { return n.type === "suit"; }).length == 1 && (!e.clothesList.some(function (n) { return n.type === "pants"; }) || !e.clothesList.some(function (n) { return n.type === "clothes"; }))); } }, { key: "addDecoComp", value: function addDecoComp(e, t, r, n, o) { if (e.isRender) { var a = e.avatarManager.extraComps.get(t), s = a == null ? void 0 : a.clone(t, void 0); if (!a) { logger$1.error("\u6CA1\u6709\u5BF9\u5E94\u7684\u7EC4\u4EF6"); return; } this.extras.push(s); var l = this.skeleton.bones.find(function (u) { return u.name === r; }); s.position = n, s.rotation = o, s.attachToBone(l, e.rootNode.getChildMeshes()[0]); } } }, { key: "showExtra", value: function showExtra(e) { this.extras.forEach(function (t) { t.name.indexOf(e) > 0 && t.setEnabled(!0); }); } }, { key: "hideExtra", value: function hideExtra(e) { this.extras.forEach(function (t) { t.name.indexOf(e) > 0 && t.setEnabled(!1); }); } }, { key: "disposeExtra", value: function disposeExtra() { this.extras.forEach(function (e) { e.dispose(); }), this.extras = []; } }]); return XAvatarComopnent; }(); var XStateMachine = /*#__PURE__*/function () { function XStateMachine(e) { _classCallCheck(this, XStateMachine); E(this, "state"); E(this, "isMoving"); E(this, "isRotating"); E(this, "_observer"); E(this, "_movingObserver"); E(this, "_scene"); this._scene = e; } _createClass(XStateMachine, [{ key: "rotateTo", value: function rotateTo(e, t, r, n) { var _this = this; return new Promise(function (o, a) { var h; var s = e.avatarManager.scene; if (r && e.setRotation(r), t == r) return o(); e.priority === 0 && logger$1.info("avatar ".concat(e.id, " starts to rotate from ").concat(r, " to ").concat(t)); var l = 0; var u = 1e3 / 25, c = calcDistance3DAngle(t, e.rotation) / u; _this._movingObserver && s.onBeforeRenderObservable.remove(_this._movingObserver), (h = e.controller) == null || h.playAnimation(n || "Walking", !0), _this._movingObserver = s == null ? void 0 : s.onBeforeRenderObservable.add(function () { var f; if (l < 1) { if (!e.rootNode) return e.setRotation(t), o(); var d = BABYLON.Vector3.Lerp(e.rootNode.rotation, ue4Rotation2Xverse(t), l); e.setRotation(xverseRotation2Ue4(d)), l += u / (c * 1e3); } else return s.onBeforeRenderObservable.remove(_this._movingObserver), (f = e.controller) == null || f.playAnimation("Idle", !0), o(); }); }); } }, { key: "_filterPathPoint", value: function _filterPathPoint(e) { var t = 0; var r = 1e-4; if (e.length <= 1) return []; for (; t < e.length - 1;) { calcDistance3D(e[t], e[t + 1]) < r ? e.splice(t, 1) : t++; } return e; } }, { key: "moveTo", value: function moveTo(e, t, r, n, o, a) { var _this2 = this; return new Promise(function (s, l) { var m; var u = e.avatarManager.scene; e.priority === 0 && logger$1.info("avatar ".concat(e.id, " starts to move from ").concat(t, " to ").concat(r)); var c = 0; a ? a = a.concat(r) : a = [r], a = _this2._filterPathPoint(a); var h = t, f = a.shift(); if (!f) return l("[Engine input path error]"); var d = calcDistance3D(h, f) / n; var _ = 1e3 / 25; e.rootNode.lookAt(ue4Position2Xverse(f)); var g = xverseRotation2Ue4({ x: e.rootNode.rotation.x, y: e.rootNode.rotation.y, z: e.rootNode.rotation.z }); g && (g.roll = 0, g.pitch = 0, e.setRotation(g)), _this2._movingObserver && u.onBeforeRenderObservable.remove(_this2._movingObserver), (m = e.controller) == null || m.playAnimation(o, !0), _this2._movingObserver = u == null ? void 0 : u.onBeforeRenderObservable.add(function () { var v; if (c < 1) { var y = BABYLON.Vector3.Lerp(ue4Position2Xverse(h), ue4Position2Xverse(f), c); if (e.setPosition(xversePosition2Ue4(y)), !e.rootNode) return e.setPosition(r), s(); c += _ / (d * 1e3); } else if (h = f, f = a.shift(), f) { d = calcDistance3D(h, f) / n, e.rootNode.lookAt(ue4Position2Xverse(f)); var _y = xverseRotation2Ue4({ x: e.rootNode.rotation.x, y: e.rootNode.rotation.y, z: e.rootNode.rotation.z }); _y && (_y.roll = 0, _y.pitch = 0, e.setRotation(_y)), c = 0; } else return u.onBeforeRenderObservable.remove(_this2._movingObserver), (v = e.controller) == null || v.playAnimation("Idle", !0), s(); }); }); } }, { key: "lookAt", value: function lookAt(e, t, r) { return new Promise(function (n) { var _, g; var o = ue4Position2Xverse(t), s = e.rootNode.position.subtract(o).length(), l = new BABYLON.Vector3(s * Math.sin(e.rootNode.rotation.y), 0, s * Math.cos(e.rootNode.rotation.y)), u = (_ = e.rootNode) == null ? void 0 : _.position.add(l); var c = 0; var h = r || 1 / 100, f = (g = e.rootNode) == null ? void 0 : g.getScene(), d = f == null ? void 0 : f.onBeforeRenderObservable.add(function () { var y, b; var m = (y = e.controller) == null ? void 0 : y.animations.find(function (T) { return T.name == "Idle"; }); (m == null ? void 0 : m.isPlaying) != !0 && (m == null || m.play()); var v = BABYLON.Vector3.Lerp(u, o, c); c < 1 ? ((b = e.rootNode) == null || b.lookAt(v), c += h) : (d && f.onBeforeRenderObservable.remove(d), n()); }); }); } }, { key: "sendObjectTo", value: function sendObjectTo(e, t, r) { var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2; var o = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; var a = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : { x: 0, y: 0, z: 150 }; return new Promise(function (s, l) { var u; if (!r.loaded) l("Gift has not inited!");else { var c = (u = e.rootNode) == null ? void 0 : u.getScene(); var h = 0; var f = 1 / (n * 25), d = f, _ = o / 100, g = 8 * _ * f * f; var m = .5 * g / f, v = ue4Position2Xverse(e.position); var y = ue4Position2Xverse(a), b = ue4Position2Xverse(e.position), T = c == null ? void 0 : c.onBeforeRenderObservable.add(function () { (!t || !e.position || !t.position) && (T && c.onBeforeRenderObservable.remove(T), l("Invalid receiver when shoot gift!")), r.loaded || (T && c.onBeforeRenderObservable.remove(T), s()); var C = ue4Position2Xverse(t.position), A = new BABYLON.Vector3((C.x - b.x) * f, m, (C.z - b.z) * f); m = m - g, h < 1 ? (v = v.add(A), r.setPositionVector(v.add(y)), h += d) : (s(), T && c.onBeforeRenderObservable.remove(T)); }); } }); } }, { key: "roll", value: function roll(e, t, r, n) { var o, a; this._observer && ((o = this._scene) == null || o.onBeforeRenderObservable.remove(this._observer)), t && (r = r != null ? r : 1, n = n != null ? n : 1, this._observer = (a = this._scene) == null ? void 0 : a.onBeforeRenderObservable.add(function () { e.rootNode.rotation.y += r * .1 * n, e.rootNode.rotation.y %= Math.PI * 2; })); } }, { key: "disposeObsever", value: function disposeObsever() { this._movingObserver && this._scene.onBeforeRenderObservable.remove(this._movingObserver); } }]); return XStateMachine; }(); var XAvatarBillboardComponent = /*#__PURE__*/function () { function XAvatarBillboardComponent(e) { var _this = this; _classCallCheck(this, XAvatarBillboardComponent); E(this, "_nickName", ""); E(this, "_words", ""); E(this, "_isNameVisible", !0); E(this, "_isBubbleVisible", !0); E(this, "_isGiftButtonsVisible", !1); E(this, "withinVisualRange", !1); E(this, "_bubble"); E(this, "_nameBoard"); E(this, "_giftButtons", new Map()); E(this, "_buttonTex", new Map()); E(this, "_nameLinesLimit", 2); E(this, "_nameLengthPerLine", 16); E(this, "_scene"); E(this, "_pickBbox", null); E(this, "bbox"); E(this, "_height", .26); E(this, "_attachmentObservers", new Map()); E(this, "attachToAvatar", function (e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { x: 0, y: 0, z: 0 }; var o = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : !1; var a = arguments.length > 5 ? arguments[5] : undefined; var s = arguments.length > 6 ? arguments[6] : undefined; var l = e.rootNode; if (_this.bbox || e.getBbox(), t && l) { var u = a || t.uniqueId; var c = _this._attachmentObservers.get(u); if (c) if (o) _this._scene.onBeforeRenderObservable.remove(c), _this._attachmentObservers.delete(u);else return; var h = ue4Position2Xverse(n); r ? (t.setParent(l), t.position = h) : (c = _this._scene.onBeforeRenderObservable.add(function () { var f = 0; s ? (f = e.rootNode.rotation.y / Math.PI * 180 + 90, e.rootNode.rotation.y && (t.rotation.y = e.rootNode.rotation.y)) : f = e.avatarManager.sceneManager.cameraComponent.getCameraPose().rotation.yaw, f || (f = 0); var d = new BABYLON.Vector3(0, _this._height, 0); e.controller && e.controller.activeAnimation() && e.controller.activeAnimation().animatables[0] && (_this._height = d.y = (e.controller.activeAnimation().animatables[0].target.position.y * .01 - .66) * e.scale), d.y < .07 * e.scale && (d.y = 0), t.position.x = l.position.x + h.x * Math.sin(f * Math.PI / 180) + h.z * Math.cos(f * Math.PI / 180), t.position.z = l.position.z + h.x * Math.cos(f * Math.PI / 180) - h.z * Math.sin(f * Math.PI / 180), t.position.y = l.position.y + _this.bbox.maximum.y + h.y + d.y; }), _this._attachmentObservers.set(u, c)); } else logger$1.error("avatar or attachment not found!"); }); E(this, "detachFromAvatar", function (e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1; var n = _this._attachmentObservers.get(t.uniqueId); n && _this._scene.onBeforeRenderObservable.remove(n), e.rootNode ? (t.setEnabled(!1), t.parent = null, r && t.dispose()) : logger$1.error("avatar not found!"); }); E(this, "getBbox", function (e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _t$isConst = t.isConst, r = _t$isConst === void 0 ? !1 : _t$isConst, _t$changeWithAvatar = t.changeWithAvatar, n = _t$changeWithAvatar === void 0 ? !1 : _t$changeWithAvatar; var _t$localCenter = t.localCenter, o = _t$localCenter === void 0 ? { x: 0, y: 0, z: 75 } : _t$localCenter, _t$width = t.width, a = _t$width === void 0 ? 1.32 : _t$width, _t$height = t.height, s = _t$height === void 0 ? 1.5 : _t$height, _t$depth = t.depth, l = _t$depth === void 0 ? .44 : _t$depth; if (n) { var u = e.scale; o = { x: o.x * u, y: o.y * u, z: o.z * u }, a *= u, s *= u, l *= u; } if (e.rootNode) { var _u = new BABYLON.Vector3(0, 0, 0), c = new BABYLON.Vector3(0, 0, 0); if (r) { var f = ue4Position2Xverse(o); _u = _u.add(f.add(new BABYLON.Vector3(-a / 2, -s / 2, -l / 2))), c = c.add(f.add(new BABYLON.Vector3(a / 2, s / 2, l / 2))); } else if (_u = _u.add(new BABYLON.Vector3(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY)), c = c.add(new BABYLON.Vector3(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY)), e.isRender) { e.rootNode.getChildMeshes().forEach(function (_) { var g = _.getBoundingInfo().boundingBox.minimum, m = _.getBoundingInfo().boundingBox.maximum; _u.x = Math.min(_u.x, g.x), c.x = Math.max(c.x, m.x), _u.y = Math.min(_u.y, g.y), c.y = Math.max(c.y, m.y), _u.z = Math.min(_u.z, g.z), c.z = Math.max(c.z, m.z); }); var _f = c.x - _u.x, d = c.z - _u.z; _u.x -= e.scale * _f / 2, c.x += e.scale * _f / 2, c.y *= e.scale, _u.z -= e.scale * d / 2, c.z += e.scale * d / 2; } else { var _f2 = e.avatarManager.getMainAvatar(); _f2 && _f2.bbComponent.bbox && (_u.x = _f2.bbComponent.bbox.minimum.x, c.x = _f2.bbComponent.bbox.maximum.x, _u.y = _f2.bbComponent.bbox.minimum.y, c.y = _f2.bbComponent.bbox.maximum.y, _u.z = _f2.bbComponent.bbox.minimum.z, c.z = _f2.bbComponent.bbox.maximum.z); } var h = e.rootNode.computeWorldMatrix(!0); if (_this.bbox ? _this.bbox.reConstruct(_u, c, h) : _this.bbox = new BABYLON.BoundingBox(_u, c, h), _this._pickBbox == null) { var _f3 = _this.createPickBoundingbox(e, _this.bbox); _this.attachToAvatar(e, _f3.data, !1, { x: 0, y: 0, z: 0 }, !1, "pickbox"), _this._pickBbox = _f3; } } else logger$1.error("avatar not found!"); }); this._scene = e; } _createClass(XAvatarBillboardComponent, [{ key: "isNameVisible", get: function get() { return this._isNameVisible; } }, { key: "isBubbleVisible", get: function get() { return this._isBubbleVisible; } }, { key: "isGiftButtonsVisible", get: function get() { return this._isGiftButtonsVisible; } }, { key: "words", get: function get() { return this._words; } }, { key: "nickName", get: function get() { return this._nickName; } }, { key: "giftButtons", get: function get() { return this._giftButtons; } }, { key: "bubble", get: function get() { return this._bubble; } }, { key: "nameBoard", get: function get() { return this._nameBoard; } }, { key: "setNicknameStatus", value: function setNicknameStatus(e) { if (this.nameBoard && this.nameBoard.setStatus(e), e == BillboardStatus.DISPOSE) { var t = this._attachmentObservers.get("nickname"); t && (this._scene.onBeforeRenderObservable.remove(t), this._attachmentObservers.delete("nickname")); } } }, { key: "setBubbleStatus", value: function setBubbleStatus(e) { if (this.bubble && this.bubble.setStatus(e), e == BillboardStatus.DISPOSE) { var t = this._attachmentObservers.get("bubble"); t && (this._scene.onBeforeRenderObservable.remove(t), this._attachmentObservers.delete("bubble")); } } }, { key: "setButtonsStatus", value: function setButtonsStatus(e) { var _this2 = this; this.giftButtons && this.giftButtons.size != 0 && this.giftButtons.forEach(function (t) { if (t.setStatus(e), e == BillboardStatus.DISPOSE && t.getMesh()) { var r = "button_" + t.getMesh().xid, n = _this2._attachmentObservers.get(r); n && (_this2._scene.onBeforeRenderObservable.remove(n), _this2._attachmentObservers.delete(r)); } }); } }, { key: "setGiftButtonsVisible", value: function setGiftButtonsVisible(e) { this.setButtonsStatus(e ? BillboardStatus.SHOW : BillboardStatus.DISPOSE); } }, { key: "dispose", value: function dispose(e) { var _this3 = this; this._attachmentObservers.forEach(function (t) { _this3._scene.onBeforeRenderObservable.remove(t); }), this._attachmentObservers.clear(), this.updateBillboardStatus(e, BillboardStatus.DISPOSE), this._buttonTex.clear(), this._pickBbox && (e.avatarManager.bboxMeshPool.release(this._pickBbox), this._pickBbox = null); } }, { key: "updateBillboardStatus", value: function updateBillboardStatus(e, t) { this.bbox || e.getBbox(), e.isRender ? (e.setBubbleStatus(t), e.setButtonsStatus(t), e.setNicknameStatus(t)) : (e.setBubbleStatus(BillboardStatus.DISPOSE), e.setButtonsStatus(BillboardStatus.DISPOSE), e.enableNickname ? e.setNicknameStatus(t) : e.setNicknameStatus(BillboardStatus.DISPOSE)); } }, { key: "disposeBillBoard", value: function disposeBillBoard(e) { var _this4 = this; this._attachmentObservers.forEach(function (t) { _this4._scene.onBeforeRenderObservable.remove(t); }), this._attachmentObservers.clear(), this.updateBillboardStatus(e, BillboardStatus.DISPOSE), this._buttonTex.clear(), this._pickBbox && (e.avatarManager.bboxMeshPool.release(this._pickBbox), this._pickBbox = null); } }, { key: "setPickBoxScale", value: function setPickBoxScale(e) { this._pickBbox && this._pickBbox.data && (this._pickBbox.data.scaling = new BABYLON.Vector3(e, e, e)); } }, { key: "setIsPickable", value: function setIsPickable(e, t) { e.rootNode && e.rootNode.getChildMeshes().forEach(function (r) { r.isPickable = t; }), this._pickBbox && this._pickBbox.data && (this._pickBbox.data.isPickable = t); } }, { key: "initNameboard", value: function initNameboard(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; this._nameBoard == null && (this._nameBoard = e.avatarManager.sceneManager.billboardComponent.addBillboard("name-" + e.id, !1, !0)), this._nameBoard.init("nickname", t / 300, t / 300); } }, { key: "initBubble", value: function initBubble(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; this._bubble == null && (this._bubble = e.avatarManager.sceneManager.billboardComponent.addBillboard("bubble-" + e.id, !1, !0)), e.isRender && this._bubble.init("bubble", t / 250, t / 250); } }, { key: "say", value: function say(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._words; var _ref = arguments.length > 2 ? arguments[2] : undefined, r = _ref.id, n = _ref.isUser, o = _ref.background, _ref$font = _ref.font, a = _ref$font === void 0 ? "Arial" : _ref$font, _ref$fontsize = _ref.fontsize, s = _ref$fontsize === void 0 ? 38 : _ref$fontsize, _ref$fontcolor = _ref.fontcolor, l = _ref$fontcolor === void 0 ? "#ffffff" : _ref$fontcolor, _ref$fontstyle = _ref.fontstyle, u = _ref$fontstyle === void 0 ? "bold" : _ref$fontstyle, _ref$linesize = _ref.linesize, c = _ref$linesize === void 0 ? 22 : _ref$linesize, h = _ref.linelimit, _ref$offsets = _ref.offsets, f = _ref$offsets === void 0 ? { x: 0, y: 0, z: 40 } : _ref$offsets, d = _ref.scale, _ref$compensationZ = _ref.compensationZ, _ = _ref$compensationZ === void 0 ? 11.2 : _ref$compensationZ, _ref$reregistAnyway = _ref.reregistAnyway, g = _ref$reregistAnyway === void 0 ? !0 : _ref$reregistAnyway; (!this.bubble || this.bubble.getMesh() == null) && e.initBubble(), this._words = t; var m; n != null && (m = n ? XBillboardManager.userBubbleUrls : XBillboardManager.npcBubbleUrls), this._bubble && (this._bubble.DEFAULT_CONFIGS = { id: r, isUser: n, background: o || m, font: a, fontsize: s, fontcolor: l, fontstyle: u, linesize: c, linelimit: h, offsets: f, scale: d, compensationZ: _, reregistAnyway: g }, this._bubble.getMesh() && (this._bubble.drawBillboard({ imageList: o || m }, { texts: this._words, font: a, fontsize: s, fontcolor: l, fontstyle: u, linesize: c }, { offsets: f, scale: d, compensationZ: _ }), this.attachToAvatar(e, this._bubble.getMesh(), !1, this._bubble.offsets, g, "bubble"), r && this._bubble.setId(r))), this.setButtonsStatus(BillboardStatus.DISPOSE); } }, { key: "silent", value: function silent() { this.setBubbleStatus(BillboardStatus.DISPOSE), this._words = ""; } }, { key: "setNickName", value: function setNickName(e, t, _ref2) { var r = _ref2.id, n = _ref2.isUser, o = _ref2.background, _ref2$font = _ref2.font, a = _ref2$font === void 0 ? "Arial" : _ref2$font, _ref2$fontsize = _ref2.fontsize, s = _ref2$fontsize === void 0 ? 40 : _ref2$fontsize, _ref2$fontcolor = _ref2.fontcolor, l = _ref2$fontcolor === void 0 ? "#ffffff" : _ref2$fontcolor, _ref2$fontstyle = _ref2.fontstyle, u = _ref2$fontstyle === void 0 ? "bold" : _ref2$fontstyle, _ref2$linesize = _ref2.linesize, c = _ref2$linesize === void 0 ? 22 : _ref2$linesize, h = _ref2.linelimit, _ref2$offsets = _ref2.offsets, f = _ref2$offsets === void 0 ? { x: 0, y: 0, z: 15 } : _ref2$offsets, d = _ref2.scale, _ref2$compensationZ = _ref2.compensationZ, _ = _ref2$compensationZ === void 0 ? 0 : _ref2$compensationZ, _ref2$reregistAnyway = _ref2.reregistAnyway, g = _ref2$reregistAnyway === void 0 ? !1 : _ref2$reregistAnyway; this._nickName = t, (!this.nameBoard || this.nameBoard.getMesh() == null) && this.initNameboard(e), this._nameBoard && this._nameBoard.getMesh() && (this._nameBoard.DEFAULT_CONFIGS = { id: r, isUser: n, background: o, font: a, fontsize: s, fontcolor: l, fontstyle: u, linesize: c, linelimit: h, offsets: f, scale: d, compensationZ: _, reregistAnyway: g }, this._nameBoard.drawBillboard({}, { texts: this._nickName, font: a, fontsize: s, fontcolor: l, fontstyle: u, linesize: c, linelimit: h }, { offsets: f, scale: d, compensationZ: 0 }), this.attachToAvatar(e, this._nameBoard.getMesh(), !1, this._nameBoard.offsets, g, "nickname"), r && this._nameBoard.setId(r)); } }, { key: "generateButtons", value: function generateButtons(e) { var _this5 = this; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var r = arguments.length > 2 ? arguments[2] : undefined; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 85; if (t && (this._buttonTex = t, this.clearButtons()), this._buttonTex.size == 0) return; var o = (this._buttonTex.size - 1) / 2; this._buttonTex.forEach(function (a, s) { var l = _this5._giftButtons.get(s); l || (l = e.avatarManager.sceneManager.billboardComponent.addBillboard("button-" + s + e.id, !0, !1), l.init(s, r / 240, r / 240)); var u = { x: r * o * 70, y: 0, z: r * (n - 20 * (o * o)) }; l.drawBillboard({ imageList: [a] }, {}, { offsets: u, scale: r }), _this5.attachToAvatar(e, l.getMesh(), !1, l.offsets, !0, "button_" + s), _this5._giftButtons.set(s, l), o -= 1; }), this.setBubbleStatus(BillboardStatus.DISPOSE); } }, { key: "clearButtons", value: function clearButtons() { this._giftButtons.forEach(function (e) { e.dispose(); }), this._giftButtons.clear(); } }, { key: "createPickBoundingbox", value: function createPickBoundingbox(e, t) { var r = t.extendSize.x * 2, n = t.extendSize.y * 2, o = t.extendSize.z * 2, a = this._scene, s = Math.max(r, o), l = e.avatarManager.bboxMeshPool.getFree(a, s, n, s), u = l.data; return u && (u.position = t.centerWorld, u.setEnabled(!1), u.isPickable = !0, u.xtype = EMeshType.XAvatar, u.xid = e.id), l; } }]); return XAvatarBillboardComponent; }(); var castRayOffsetY = .01; var castRayTeleportationOffset = 10; var XAvatar = /*#__PURE__*/function () { function XAvatar(_ref) { var _this = this; var e = _ref.id, t = _ref.avatarType, r = _ref.priority, n = _ref.avatarManager, o = _ref.assets, a = _ref.status; _classCallCheck(this, XAvatar); E(this, "id", "-1"); E(this, "priority", 0); E(this, "isRender", !1); E(this, "distLevel", 0); E(this, "isInLoadingList", !1); E(this, "isHide", !1); E(this, "component"); E(this, "controller"); E(this, "stateMachine"); E(this, "bbComponent"); E(this, "_avatarType"); E(this, "clothesList", []); E(this, "isSelected", !1); E(this, "pendingLod", !1); E(this, "_previousReceivedPosition", new BABYLON.Vector3(0, 1e4, 0)); E(this, "_avatarPosition"); E(this, "_avatarRotation"); E(this, "_avatarScale"); E(this, "rootNode"); E(this, "distToCam", 1e11); E(this, "enableNickname", !0); E(this, "distance", 1e11); E(this, "isCulling", !1); E(this, "reslevel", 0); E(this, "isInLoadingQueue", !1); E(this, "_isRayCastEnable"); E(this, "_scene"); E(this, "_avatarManager"); E(this, "_transparent", 0); E(this, "hide", function () { return _this.isHide = !0, _this._hide(), !_this.isRender; }); E(this, "_show", function () { var e; _this.isHide || (_this.setIsPickable(!0), _this.priority == 0 && (_this.rootNode.setEnabled(!0), _this.isRender = !0, _this.avatarManager._updateBillboardStatus(_this, BillboardStatus.SHOW), (e = _this.controller) == null || e.playAnimation(_this.controller.onPlay, _this.controller.loop))); }); E(this, "show", function () { return _this.isHide = !1, _this._show(), !!_this.isRender; }); E(this, "setAnimations", function (e) { _this.controller.animations = e; }); E(this, "attachToAvatar", function (e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { x: 0, y: 0, z: 0 }; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !1; var o = arguments.length > 4 ? arguments[4] : undefined; var a = arguments.length > 5 ? arguments[5] : undefined; return _this.bbComponent.attachToAvatar(_this, e, t, r, n, o, a); }); E(this, "detachFromAvatar", function (e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; return _this.bbComponent.detachFromAvatar(_this, e, t); }); E(this, "getBbox", function () { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _this.bbComponent.getBbox(_this, e); }); this.id = e, this._avatarManager = n, this._scene = this.avatarManager.scene, this.clothesList = o, this._avatarType = t, this.priority = r || 0, this.controller = new XAnimationController(this), this.component = new XAvatarComopnent(), this.stateMachine = new XStateMachine(this._scene), this.bbComponent = new XAvatarBillboardComponent(this._scene), this.rootNode = new BABYLON.TransformNode(e, this._avatarManager.scene), this._avatarScale = a.avatarScale == null ? 1 : a.avatarScale, this._avatarRotation = a.avatarRotation == null ? { pitch: 0, yaw: 0, roll: 0 } : a.avatarRotation, this._avatarPosition = a.avatarPosition == null ? { x: 0, y: 0, z: 0 } : a.avatarPosition, this.setPosition(this._avatarPosition), this.setRotation(this._avatarRotation), this.setScale(this.scale), this._isRayCastEnable = avatarSetting.isRayCastEnable, this._scene.registerBeforeRender(function () { _this.tick(); }); } _createClass(XAvatar, [{ key: "tick", value: function tick() { this.cullingTick(); } }, { key: "cullingTick", value: function cullingTick() { var _this2 = this; var e; this.isCulling && ((e = this.rootNode) == null || e.getChildMeshes().forEach(function (t) { _this2.distToCam < 50 ? t.visibility = 0 : t.visibility = _this2._transparent; })); } }, { key: "setTransParentThresh", value: function setTransParentThresh(e) { this._transparent = e; } }, { key: "isNameVisible", get: function get() { return this.bbComponent.isNameVisible; } }, { key: "isBubbleVisible", get: function get() { return this.bbComponent.isBubbleVisible; } }, { key: "isGiftButtonsVisible", get: function get() { return this.bbComponent.isGiftButtonsVisible; } }, { key: "words", get: function get() { return this.bbComponent.words; } }, { key: "nickName", get: function get() { return this.bbComponent.nickName; } }, { key: "giftButtons", get: function get() { return this.bbComponent.giftButtons; } }, { key: "bubble", get: function get() { return this.bbComponent.bubble; } }, { key: "nameBoard", get: function get() { return this.bbComponent.nameBoard; } }, { key: "avatarManager", get: function get() { return this._avatarManager; } }, { key: "withinVisibleRange", set: function set(e) { this.bbComponent.withinVisualRange = e; } }, { key: "setNicknameStatus", value: function setNicknameStatus(e) { return this.bbComponent.setNicknameStatus(e); } }, { key: "setBubbleStatus", value: function setBubbleStatus(e) { return this.bbComponent.setBubbleStatus(e); } }, { key: "setButtonsStatus", value: function setButtonsStatus(e) { return this.bbComponent.setBubbleStatus(e); } }, { key: "setGiftButtonsVisible", value: function setGiftButtonsVisible(e) { return this.bbComponent.setGiftButtonsVisible(e); } }, { key: "avatarType", get: function get() { return this._avatarType; } }, { key: "attachBody", value: function attachBody(e) { return this.component.addBodyComp(this, e); } }, { key: "attachDecoration", value: function attachDecoration(e) { return this.component.addClothesComp(this, e); } }, { key: "detachDecoration", value: function detachDecoration(e) { return this.component.clearClothesComp(e); } }, { key: "detachDecorationAll", value: function detachDecorationAll() { return this.component.clearAllClothesComps(); } }, { key: "skeleton", get: function get() { return this.component.skeleton; } }, { key: "position", get: function get() { return this._avatarPosition; } }, { key: "rotation", get: function get() { return this._avatarRotation; } }, { key: "scale", get: function get() { return this._avatarScale; } }, { key: "_hide_culling", value: function _hide_culling() { this.bbComponent.updateBillboardStatus(this, BillboardStatus.HIDE), this.isCulling = !0; } }, { key: "_show_culling", value: function _show_culling() { this.isCulling && (this.rootNode && this.rootNode.getChildMeshes().forEach(function (e) { e.visibility = 1; }), this.bbComponent.updateBillboardStatus(this, BillboardStatus.SHOW), this.isCulling = !1); } }, { key: "_hide", value: function _hide() { !this.isHide || (this.setIsPickable(!1), this.priority == 0 ? (this.rootNode.setEnabled(!1), this.isRender = !1, this.bbComponent.updateBillboardStatus(this, BillboardStatus.HIDE)) : this.isRender && (this.avatarManager.currentLODUsers[this.distLevel]--, this.removeAvatarFromScene())); } }, { key: "rotate", value: function rotate(e, t, r) { return this.stateMachine.roll(this, e, t, r); } }, { key: "isRayCastEnable", get: function get() { return this._isRayCastEnable; }, set: function set(e) { this._isRayCastEnable = e; } }, { key: "getAvatarId", value: function getAvatarId() { return this.id; } }, { key: "getAvaliableAnimations", value: function getAvaliableAnimations() { var e = avatarLoader.avaliableAnimation.get(this.avatarType); return e || []; } }, { key: "setPosition", value: function setPosition(e) { var _this3 = this; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; if (this._avatarPosition = e, this.rootNode) { var r = ue4Position2Xverse(this._avatarPosition); var n = !1; this.avatarManager.getMainAvatar() && (this.id != this.avatarManager.getMainAvatar().id || (Math.abs(r.y - this._previousReceivedPosition.y) > castRayOffsetY && (n = !0), r.subtract(this._previousReceivedPosition).length() > castRayTeleportationOffset && (n = !0))), this._isRayCastEnable ? n || t ? this._castRay(e).then(function (o) { _this3.rootNode.position = r, _this3.rootNode.position.y -= o; }).catch(function (o) { Promise.reject(o); }) : (this.rootNode.position.x = r.x, this.rootNode.position.z = r.z) : this.rootNode.position = r, this._previousReceivedPosition = r.clone(); } return Promise.resolve(e); } }, { key: "setRotation", value: function setRotation(e) { if (this._avatarRotation = e, this.rootNode) { var t = { pitch: e.pitch, yaw: e.yaw + 180, roll: e.roll }, r = ue4Rotation2Xverse(t); this.rootNode.rotation = r; } } }, { key: "setAvatarVisible", value: function setAvatarVisible(e) { this.rootNode && (this.rootNode.setEnabled(e), this.rootNode.getChildMeshes().forEach(function (t) { t.setEnabled(e); })); } }, { key: "setScale", value: function setScale(e) { this._avatarScale = e, this.rootNode && (this.rootNode.scaling = new BABYLON.Vector3(e, e, e)), this.bbComponent.bbox && this.getBbox(); } }, { key: "_removeAvatarFromScene", value: function _removeAvatarFromScene() { var e, t; this.isRender = !1, (e = this.controller) == null || e.detachAnimation(), this.component.dispose(this), (t = this.avatarManager.sceneManager) == null || t.lightComponent.removeShadow(this); } }, { key: "removeAvatarFromScene", value: function removeAvatarFromScene() { this._removeAvatarFromScene(), this._disposeBillBoard(); } }, { key: "_disposeBillBoard", value: function _disposeBillBoard() { this.bbComponent.disposeBillBoard(this); } }, { key: "addComponent", value: function addComponent(e, t, r, n) { return this.component.changeClothesComp(this, e, t, r, n); } }, { key: "_castRay", value: function _castRay(e) { var _this4 = this; return new Promise(function (t, r) { var d; var n = ue4Position2Xverse(e), o = new BABYLON.Vector3(0, -1, 0), a = 1.5 * _this4.scale, s = 100 * a, l = a, u = new BABYLON.Vector3(n.x, n.y + l, +n.z), c = new BABYLON.Ray(u, o, s), h = (d = _this4.avatarManager.sceneManager) == null ? void 0 : d.getGround(e); if (!h || h.length <= 0) return logger.warn("\u89D2\u8272 id= ".concat(_this4.id, " \u627E\u4E0D\u5230\u5730\u9762\uFF0C\u5F53\u524D\u9AD8\u5EA6\u4E3A\u4E0B\u53D1\u9AD8\u5EA6")), t(0); var f = c.intersectsMeshes(h); if (f.length > 0) return t(f[0].distance - l); if (o.y = 1, f = c.intersectsMeshes(h), f.length > 0) return t(-(f[0].distance - l)); }); } }, { key: "setPickBoxScale", value: function setPickBoxScale(e) { return this.bbComponent.setPickBoxScale(e); } }, { key: "setIsPickable", value: function setIsPickable(e) { return this.bbComponent.setIsPickable(this, e); } }, { key: "createPickBoundingbox", value: function createPickBoundingbox(e) { return this.bbComponent.createPickBoundingbox(this, e); } }, { key: "scaleBbox", value: function scaleBbox(e) { this.bbComponent.bbox && this.bbComponent.bbox.scale(e); } }, { key: "rotateTo", value: function rotateTo(e, t, r) { return this.stateMachine.rotateTo(this, e, t, r); } }, { key: "faceTo", value: function faceTo(e, t) { return this.stateMachine.lookAt(this, e, t); } }, { key: "removeObserver", value: function removeObserver() { this.stateMachine.disposeObsever(); } }, { key: "move", value: function move(e, t, r, n, o) { return this.stateMachine.moveTo(this, e, t, r, n, o); } }, { key: "initNameboard", value: function initNameboard() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; return this.bbComponent.initNameboard(this, e); } }, { key: "initBubble", value: function initBubble() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; return this.bbComponent.initBubble(this, e); } }, { key: "say", value: function say(e, _ref2) { var t = _ref2.id, r = _ref2.isUser, n = _ref2.background, _ref2$font = _ref2.font, o = _ref2$font === void 0 ? "Arial" : _ref2$font, _ref2$fontsize = _ref2.fontsize, a = _ref2$fontsize === void 0 ? 38 : _ref2$fontsize, _ref2$fontcolor = _ref2.fontcolor, s = _ref2$fontcolor === void 0 ? "#ffffff" : _ref2$fontcolor, _ref2$fontstyle = _ref2.fontstyle, l = _ref2$fontstyle === void 0 ? "bold" : _ref2$fontstyle, _ref2$linesize = _ref2.linesize, u = _ref2$linesize === void 0 ? 22 : _ref2$linesize, c = _ref2.linelimit, _ref2$offsets = _ref2.offsets, h = _ref2$offsets === void 0 ? { x: 0, y: 0, z: 40 } : _ref2$offsets, _ref2$scale = _ref2.scale, f = _ref2$scale === void 0 ? this._avatarScale : _ref2$scale, _ref2$compensationZ = _ref2.compensationZ, d = _ref2$compensationZ === void 0 ? 11.2 : _ref2$compensationZ, _ref2$reregistAnyway = _ref2.reregistAnyway, _ = _ref2$reregistAnyway === void 0 ? !0 : _ref2$reregistAnyway; return this.bbComponent.say(this, e, { id: t, isUser: r, background: n, font: o, fontsize: a, fontcolor: s, fontstyle: l, linesize: u, linelimit: c, offsets: h, scale: f, compensationZ: d, reregistAnyway: _ }); } }, { key: "silent", value: function silent() { return this.bbComponent.silent(); } }, { key: "setNickName", value: function setNickName(e, _ref3) { var t = _ref3.id, r = _ref3.isUser, n = _ref3.background, _ref3$font = _ref3.font, o = _ref3$font === void 0 ? "Arial" : _ref3$font, _ref3$fontsize = _ref3.fontsize, a = _ref3$fontsize === void 0 ? 40 : _ref3$fontsize, _ref3$fontcolor = _ref3.fontcolor, s = _ref3$fontcolor === void 0 ? "#ffffff" : _ref3$fontcolor, _ref3$fontstyle = _ref3.fontstyle, l = _ref3$fontstyle === void 0 ? "bold" : _ref3$fontstyle, _ref3$linesize = _ref3.linesize, u = _ref3$linesize === void 0 ? 22 : _ref3$linesize, c = _ref3.linelimit, _ref3$offsets = _ref3.offsets, h = _ref3$offsets === void 0 ? { x: 0, y: 0, z: 15 } : _ref3$offsets, _ref3$scale = _ref3.scale, f = _ref3$scale === void 0 ? this._avatarScale : _ref3$scale, _ref3$compensationZ = _ref3.compensationZ, d = _ref3$compensationZ === void 0 ? 0 : _ref3$compensationZ, _ref3$reregistAnyway = _ref3.reregistAnyway, _ = _ref3$reregistAnyway === void 0 ? !1 : _ref3$reregistAnyway; return this.bbComponent.setNickName(this, e, { id: t, isUser: r, background: n, font: o, fontsize: a, fontcolor: s, fontstyle: l, linesize: u, linelimit: c, offsets: h, scale: f, compensationZ: d, reregistAnyway: _ }); } }, { key: "generateButtons", value: function generateButtons() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._avatarScale; var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 85; return this.bbComponent.generateButtons(this, e, t, r); } }, { key: "clearButtons", value: function clearButtons() { return this.bbComponent.clearButtons(); } }, { key: "attachExtraProp", value: function attachExtraProp(e, t, r, n) { return this.component.addDecoComp(this, e, t, r, n); } }, { key: "showExtra", value: function showExtra(e) { return this.component.showExtra(e); } }, { key: "hideExtra", value: function hideExtra(e) { return this.component.hideExtra(e); } }, { key: "disposeExtra", value: function disposeExtra() { return this.component.disposeExtra(); } }, { key: "getSkeletonPositionByName", value: function getSkeletonPositionByName(e) { var t; if (this.skeleton) { var r = this.skeleton.bones.find(function (n) { return n.name.replace("Clone of ", "") == e; }); if (r && r.getTransformNode() && ((t = r.getTransformNode()) == null ? void 0 : t.position)) { var n = r.getTransformNode().position; return xversePosition2Ue4({ x: n.x, y: n.y, z: n.z }); } } } }, { key: "shootTo", value: function shootTo(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; var o = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { x: 0, y: 0, z: 150 }; return this.stateMachine.sendObjectTo(this, e, t, r, n, o); } }]); return XAvatar; }(); function _createForOfIteratorHelper$1(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$1(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$1(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen); } function _arrayLikeToArray$1(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var XAvatarManager = /*#__PURE__*/function () { function XAvatarManager(e) { var _this = this; _classCallCheck(this, XAvatarManager); this.characterMap = new Map(); this.curAnimList = []; this.extraComps = new Map(); this._mainUser = null; this._lodSettings = null; this.maxBillBoardDist = 0; this.maxAvatarNum = 0; this.currentLODUsers = []; this.bboxMeshPool = null; this._distLevels = []; this._maxLODUsers = []; this._cullingDistance = 0; this._maxDistRange = null; this._delayTime = 100; this._queueLength = -1; this._queue = []; this._processList = []; this._process = null; this._updateLoopObserver = null; this._avatarInDistance = []; this._renderedAvatar = []; this._enableNickname = !0; this._tickObserver = null; this._tickInterval = null; this._defaultAnims = null; this._tickDispose = 0; this._disposeTime = 100; this.avatarLoader = avatarLoader; this._scene = e.mainScene; this._sceneManager = e; this.initAvatarMap(); this._initSettings(); this._maxDistRange = this._distLevels[this._distLevels.length - 1], this.bboxMeshPool = new Pool(this.createBboxAsset, this.resetBboxAsset, 0, this.maxAvatarNum, this._sceneManager.Scene, 0, 0, 0), this._tickInterval = 250; var t = 0; this._tickObserver = this._scene.onAfterRenderObservable.add(function () { t += 1, t == _this._tickInterval && (_this.tick(), t = 0); }); } _createClass(XAvatarManager, [{ key: "tick", value: function tick() { this.bboxMeshPool.clean(0); } }, { key: "createBboxAsset", value: function createBboxAsset(e, t, r, n) { return BABYLON.MeshBuilder.CreateBox("avatarBbox", { width: t, height: r, depth: n }, e); } }, { key: "resetBboxAsset", value: function resetBboxAsset(e) { var t = e.data; return t.setEnabled(!1), t.isPickable = !1, e; } }, { key: "_initSettings", value: function _initSettings() { this._defaultAnims = avatarSetting.defaultIdle, this._lodSettings = avatarSetting.lod, this._distLevels = avatarSetting.lod.map(function (e) { return e.dist; }), this._maxLODUsers = avatarSetting.lod.map(function (e) { return e.quota; }), this.currentLODUsers = new Array(this._distLevels.length).fill(0), this.maxAvatarNum = avatarSetting.maxAvatarNum, this.maxBillBoardDist = avatarSetting.maxBillBoardDist, this._cullingDistance = avatarSetting.cullingDistance; } }, { key: "maxRenderNum", value: function maxRenderNum() { var e = 0; return this._maxLODUsers.forEach(function (t) { e += t; }), e; } }, { key: "curRenderNum", value: function curRenderNum() { var e = 0; return this.currentLODUsers.forEach(function (t) { e += t; }), e; } }, { key: "setLoDLevels", value: function setLoDLevels(e) { this._distLevels = e; } }, { key: "cullingDistance", get: function get() { return this._cullingDistance; }, set: function set(e) { this._cullingDistance = e; } }, { key: "getLoDLevels", value: function getLoDLevels() { return this._distLevels; } }, { key: "setLodUserLimits", value: function setLodUserLimits(e, t) { this._maxLODUsers.length > e && (this._maxLODUsers[e] = t); } }, { key: "setLodDist", value: function setLodDist(e, t) { this._distLevels[e] = t; } }, { key: "setMaxDistRange", value: function setMaxDistRange(e) { this._maxDistRange = e, this._distLevels[this._distLevels.length - 1] = e; } }, { key: "scene", get: function get() { return this._scene; } }, { key: "setMainAvatar", value: function setMainAvatar(e) { var t; this._mainUser = (t = this.characterMap.get(0)) == null ? void 0 : t.get(e); } }, { key: "getMainAvatar", value: function getMainAvatar() { return this._mainUser; } }, { key: "enableAllNickname", value: function enableAllNickname(e) { var _this2 = this; return this.characterMap.forEach(function (t, r) { r != 0 && t.forEach(function (n, o) { _this2._updateBillboardStatus(n, e ? BillboardStatus.SHOW : BillboardStatus.HIDE); }); }), this._enableNickname = e; } }, { key: "getAvatarById", value: function getAvatarById(e) { var t; return this.characterMap.forEach(function (r, n) { r.get(e) && (t = r.get(e)); }), t; } }, { key: "getAvatarNums", value: function getAvatarNums() { var e = 0; return this.characterMap.forEach(function (t, r) { e += t.size; }), e; } }, { key: "registerAvatar", value: function registerAvatar(e) { this.characterMap.get(e.priority).set(e.id, e); } }, { key: "unregisterAvatar", value: function unregisterAvatar(e) { this.characterMap.get(e.priority).delete(e.id); } }, { key: "initAvatarMap", value: function initAvatarMap() { this.characterMap.set(0, new Map()), this.characterMap.set(1, new Map()), this.characterMap.set(2, new Map()), this.characterMap.set(3, new Map()), this.characterMap.set(4, new Map()), this.characterMap.set(5, new Map()); } }, { key: "loadAvatar", value: function loadAvatar(_ref) { var _this3 = this; var e = _ref.id, t = _ref.avatarType, r = _ref.priority, n = _ref.avatarManager, o = _ref.assets, a = _ref.status; return new Promise(function (s, l) { if (_this3.getAvatarById(e)) return l(new DuplicateAvatarIDError("[Engine] cannot init avatar with the same id = ".concat(e))); if (_this3.getAvatarNums() > _this3.maxAvatarNum) return l(new ExceedMaxAvatarNumError("[Engine] \u8D85\u51FA\u6700\u5927\u89D2\u8272\u9650\u5236 ".concat(_this3.maxAvatarNum))); var u = new XAvatar({ id: e, avatarType: t, priority: r, avatarManager: n, assets: o, status: a }); if (_this3.registerAvatar(u), r == 0) _this3.setMainAvatar(u.id), _this3.addAvatarToScene(u, 0).then(function (c) { return logger$1.debug("[Engine] avatar ".concat(u.id, " has been added to scene")), c ? (_this3._updateBillboardStatus(c, BillboardStatus.SHOW), setTimeout(function () { _this3.launchProcessLoadingLoop(); }, _this3._delayTime), s(c)) : (u.removeAvatarFromScene(), l(new AvatarAssetLoadingError())); }).catch(function (c) { return u.removeAvatarFromScene(), l(new AvatarAssetLoadingError(c)); });else return s(u); }); } }, { key: "deleteAvatar", value: function deleteAvatar(e) { return e.isRender ? (e.removeAvatarFromScene(), this.currentLODUsers[e.distLevel]--) : e.bbComponent.disposeBillBoard(e), this._processList = this._processList.filter(function (t) { return t.id !== e.id; }), this.unregisterAvatar(e), e.rootNode && (e.rootNode.dispose(), e.rootNode = void 0), e.bbComponent.bbox && e.bbComponent.bbox.dispose(), e.removeObserver(), e; } }, { key: "_checkLODLevel", value: function _checkLODLevel(e) { if (e < this._distLevels[0]) return 0; for (var t = 1; t < this._distLevels.length; ++t) { if (e >= this._distLevels[t - 1] && e < this._distLevels[t]) return t; } return this._distLevels.length - 1; } }, { key: "sceneManager", get: function get() { return this._sceneManager; } }, { key: "launchProcessLoadingLoop", value: function launchProcessLoadingLoop() { this._updateAvatarStatus(); } }, { key: "stopProcessLoadingLoop", value: function stopProcessLoadingLoop() { var e; this._updateLoopObserver && ((e = this._scene) == null || e.onBeforeRenderObservable.remove(this._updateLoopObserver)); } }, { key: "_distToMain", value: function _distToMain(e) { var n; var t = (n = this._mainUser) == null ? void 0 : n.position, r = e.position; if (r && t) { var o = this.sceneManager.cameraComponent.MainCamera.getFrontPosition(1).subtract(this.sceneManager.cameraComponent.MainCamera.position).normalize(), a = e.rootNode.position.subtract(this.sceneManager.cameraComponent.MainCamera.position).normalize(); var s = 1; if (o && a) { var l = a.multiply(o); s = Math.acos(l.x + l.y + l.z) < this.sceneManager.cameraComponent.MainCamera.fov / 2 ? 1 : 1e11; } return calcDistance3D(t, r) * s; } else return logger$1.warn("user position or camera position is not correct!"), 1e11; } }, { key: "_distToCamera", value: function _distToCamera(e) { var n; var t = (n = this._sceneManager) == null ? void 0 : n.cameraComponent.getCameraPose().position, r = e.position; return r && t ? calcDistance3D(t, r) : (logger$1.warn("user position or camera position is not correct!"), 1e11); } }, { key: "showAll", value: function showAll(e) { this.characterMap.forEach(function (t, r) { e && r == 0 && t.forEach(function (n, o) { n.show(); }), r != 0 && t.forEach(function (n, o) { n.show(); }); }); } }, { key: "hideAll", value: function hideAll(e) { this.characterMap.forEach(function (t, r) { e && r == 0 && t.forEach(function (n, o) { n.hide(); }), r != 0 && t.forEach(function (n, o) { n.hide(); }); }); } }, { key: "_assemblyAvatar", value: function _assemblyAvatar(e, t) { var _this4 = this; var n, o; var r = e.get(avatarSetting.body); if (r && !t.attachBody(r)) { t.isInLoadingList = !1, e.clear(); return; } var _iterator = _createForOfIteratorHelper$1(e), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var a = _step.value; if (a[0] != avatarSetting.body && a[0] != avatarSetting.animations && !t.attachDecoration(a[1])) { t.isInLoadingList = !1, t.removeAvatarFromScene(), e.clear(); return; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } t.isRender = !0, (n = t.controller) == null || n.playAnimation(t.controller.onPlay, t.controller.loop), (o = t.controller) == null || o.onPlayObservable.addOnce(function () { var a, s; if (!_this4.getAvatarById(t.id)) { t.isInLoadingList = !1, t.removeAvatarFromScene(), _this4.currentLODUsers[t.distLevel]--; return; } if (_this4.getAvatarById(t.id).rootNode.getChildMeshes().length < e.size) { logger$1.error("this avatar does not have complete components, render failed. current list ".concat((a = _this4.getAvatarById(t.id)) == null ? void 0 : a.clothesList, ",avatar: ").concat(t.id, ",").concat(t.nickName)), t.isInLoadingList = !1, t.removeAvatarFromScene(), _this4.currentLODUsers[t.distLevel]--; return; } t.setIsPickable(!0), t.isInLoadingList = !1, t.setAvatarVisible(!0), (s = _this4._sceneManager) == null || s.lightComponent.setShadow(t), t.getBbox(), t.nameBoard && t.nickName.length > 0 && t.setNickName(t.nickName, t.nameBoard.DEFAULT_CONFIGS), t.bubble && t.words.length > 0 && t.say(t.words, t.bubble.DEFAULT_CONFIGS), logger$1.debug("[Engine] avatar ".concat(t.id, " has been added to scene, current number of users : ").concat(_this4.currentLODUsers)); }); } }, { key: "_disposeUnusedAssets", value: function _disposeUnusedAssets() { this._tickDispose++, this._tickDispose > this._disposeTime && (avatarLoader.disposeContainer(), this._tickDispose = 0); } }, { key: "_addResourcesToList", value: function _addResourcesToList(e, t) { var _this5 = this; return e.clothesList.forEach(function (r) { r.lod = t, _this5._queue.push(r); }), this._queue.push({ type: avatarSetting.animations, id: this._defaultAnims }), this._queue.push({ type: avatarSetting.body, id: e.avatarType, lod: t }), !0; } }, { key: "_updateBillboardStatus", value: function _updateBillboardStatus(e, t) { e.bbComponent.updateBillboardStatus(e, t); } }, { key: "_processLayer", value: function _processLayer(e) { var _this6 = this; var t = this.characterMap.get(e), r = []; for (t == null || t.forEach(function (n) { n.distToCam = _this6._distToCamera(n); var o = n.distToCam < _this6._cullingDistance; if (n.isRender && (!n.isHide && o ? n._hide_culling() : n._show_culling()), n.priority != 0) { n.distance = _this6._distToMain(n); var _a = BillboardStatus.SHOW; n.distance < _this6._maxDistRange && (o ? _a = BillboardStatus.HIDE : n._show_culling(), _this6._updateBillboardStatus(n, _a)), n.isHide || (n.isInLoadingList ? _this6.currentLODUsers[n.distLevel]++ : r.push(n)); } }), r.sort(function (n, o) { return o.distance - n.distance; }); r.length > 0 && this.curRenderNum() < this.maxRenderNum();) { var n = r.pop(); var o = this._checkLODLevel(n.distance), a = !1; for (var s = 0; s < this._maxLODUsers.length; ++s) { if (this.currentLODUsers[s] < this._maxLODUsers[s]) { o = s, a = !0; break; } } if (!a || n.distance > this._maxDistRange) { if (n.isRender) { n._removeAvatarFromScene(); var _s = BillboardStatus.HIDE; n.distance < this._maxDistRange && (_s = BillboardStatus.SHOW), this._updateBillboardStatus(n, _s); } break; } o != n.distLevel ? (n.isRender && (n.pendingLod = !0), n.distLevel = o, this._processList.push(n), n.isInLoadingList = !0) : n.isRender || (this._processList.push(n), n.isInLoadingList = !0), this.currentLODUsers[o]++; } return this.curRenderNum() >= this.maxRenderNum() && r.forEach(function (n) { if (n.isRender) { n._removeAvatarFromScene(); var _o = BillboardStatus.HIDE; n.distance < _this6._maxDistRange && (_o = BillboardStatus.SHOW), _this6._updateBillboardStatus(n, _o); } }), this.curRenderNum() < this.maxRenderNum(); } }, { key: "_updateAvatar", value: function _updateAvatar() { var _this7 = this; this.currentLODUsers = [0, 0, 0]; var e = [5, 4, 3, 2, 1, 0]; for (; e.length > 0;) { var t = e.pop(); if (!this._processLayer(t)) { e.forEach(function (n) { var o; (o = _this7.characterMap.get(n)) == null || o.forEach(function (a) { a.distance = _this7._distToMain(a); var s = BillboardStatus.HIDE; a.distToCam < _this7._maxDistRange && (s = BillboardStatus.SHOW, a.isRender && a._removeAvatarFromScene()), _this7._updateBillboardStatus(a, s); }); }); break; } } } }, { key: "_updateAvatarStatus", value: function _updateAvatarStatus() { var _this8 = this; var e = new Map(); this._updateLoopObserver = this.scene.onBeforeRenderObservable.add(function () { var t; if (_this8._disposeUnusedAssets(), !(_this8.getAvatarNums() <= 0)) { if (!_this8._process && _this8._processList.length == 0 && _this8._updateAvatar(), !_this8._process && _this8._processList.length > 0) { var r = _this8._processList.shift(); r != _this8._process && !r.isCulling ? _this8._addResourcesToList(r, r.distLevel) ? (_this8._process = r, _this8._queueLength = _this8._queue.length) : (_this8._process = void 0, _this8._queue = [], r.isInLoadingList = !1) : r.isInLoadingList = !1; } if (e.size === _this8._queueLength && _this8._process) { _this8._process.pendingLod && (_this8._process.pendingLod = !1, _this8._process._removeAvatarFromScene()); var _r = Date.now(); _this8._assemblyAvatar(e, _this8._process), (t = _this8._sceneManager) == null || t.engineRunTimeStats.timeArray_addAvatarToScene.add(Date.now() - _r), _this8._updateBillboardStatus(_this8._process, BillboardStatus.SHOW), e.clear(), _this8._queue = [], _this8._process.isInLoadingList = !1, _this8._process = void 0, _this8._disposeUnusedAssets(); } _this8._loadResByList(e); } }); } }, { key: "_loadResByList", value: function _loadResByList(e) { var _this9 = this; var t = 0; var r = 5; if (!this._process) { e.clear(); return; } var _loop = function _loop() { var n = Date.now(), o = _this9._queue.pop(); setTimeout(function () { o ? o.type === avatarSetting.body ? _this9.loadBody(o.type, o.id, o.lod).then(function (a) { a && e.set(avatarSetting.body, a), t += Date.now() - n; }).catch(function (a) { _this9._process && (_this9._process.isHide = !0, _this9.currentLODUsers[_this9._process.distLevel]--, e.clear(), _this9._queue = [], _this9._process.isInLoadingList = !1, _this9._process = void 0, t += 100), logger$1.warn("[Engine] body ".concat(o.id, " uri error, type ").concat(o.type, ", avatar has been hided") + a); }) : o.type === avatarSetting.animations ? _this9.loadAnimation(_this9._process.avatarType, o.id).then(function (a) { a && e.set(avatarSetting.animations, a), t += Date.now() - n; }).catch(function (a) { _this9._process && (_this9._process.isHide = !0, _this9.currentLODUsers[_this9._process.distLevel]--, e.clear(), _this9._queue = [], _this9._process.isInLoadingList = !1, _this9._process = void 0, t += 100), logger$1.warn("animation ".concat(o.id, " uri error, type ").concat(o.type, ", avatar has been hided") + a); }) : _this9.loadDecoration(o.type, o.id, o.lod).then(function (a) { a && e.set(a.type, a), t += Date.now() - n; }).catch(function (a) { _this9._process && (_this9._process.isHide = !0, _this9.currentLODUsers[_this9._process.distLevel]--, e.clear(), _this9._queue = [], _this9._process.isInLoadingList = !1, _this9._process = void 0, t += 100), logger$1.warn("component ".concat(o.id, " uri error, type ").concat(o.type, ", avatar has been hided") + a); }) : t += 100; }, 0); }; for (; t < r && this._queue.length > 0;) { _loop(); } } }, { key: "_validateContainer", value: function _validateContainer(e) { return !e.meshes || e.meshes.length <= 1 ? (logger$1.warn("import container has no valid meshes"), !1) : !e.skeletons || e.skeletons.length == 0 ? (logger$1.warn("import container has no valid skeletons"), !1) : !0; } }, { key: "_getAssetContainer", value: function _getAssetContainer(e, t) { var _this10 = this; return new Promise(function (r, n) { var o = _this10._getSourceKey(e, t || 0), a = avatarLoader.containers.get(o); if (a) return r(a); avatarLoader.load(_this10.sceneManager, e, t).then(function (s) { return s ? _this10._validateContainer(s) ? (avatarLoader.containers.set(o, s), r(s)) : n(new ContainerLoadingFailedError("[Engine] :: cannot load body type ".concat(e, "."))) : n(new ContainerLoadingFailedError("[Engine] container load failed cannot load body type ".concat(e, "."))); }).catch(function (s) { return n(new ContainerLoadingFailedError("[Engine] ".concat(s, " :: cannot load body type ").concat(e, "."))); }); }); } }, { key: "_clipContainerRes", value: function _clipContainerRes(e) { e.transformNodes.forEach(function (t) { t.dispose(); }), e.transformNodes = [], e.skeletons.forEach(function (t) { t.dispose(); }), e.skeletons = []; } }, { key: "loadBody", value: function loadBody(e, t, r) { var _this11 = this; return new Promise(function (n, o) { return avatarLoader.load(_this11.sceneManager, t, r).then(function (a) { if (a) { var s = a.instantiateModelsToScene(); a.xReferenceCount++; var l = { isRender: !1, uId: Math.random(), root: s.rootNodes[0], skeletonType: e, name: t, animations: s.animationGroups, skeleton: s.skeletons[0], lod: r }; return s.rootNodes[0]._parentContainer = a, s.rootNodes[0].setEnabled(!1), n(l); } else return o(new ContainerLoadingFailedError("[Engine] container failed instanciates failed")); }).catch(function () { return o(new ContainerLoadingFailedError("[Engine] body type ".concat(e, " instanciates failed"))); }); }); } }, { key: "updateAnimationLists", value: function updateAnimationLists(e, t) { return new Promise(function (r, n) { return avatarLoader.avaliableAnimation.set(t, e), r(); }); } }, { key: "loadAnimation", value: function loadAnimation(e, t) { var _this12 = this; return new Promise(function (r, n) { return avatarLoader.loadAnimRes(_this12.sceneManager, t, e).then(function (o) { if (o) { var a; var s = _this12.avatarLoader.animations; return o.animationGroups.forEach(function (l) { l.stop(), l.name === t && (a = l, a.pContainer = o), s.set(getAnimationKey(l.name, e), l); }), _this12._clipContainerRes(o), o.xReferenceCount++, r(a); } else return n(new ContainerLoadingFailedError("[Engine] container failed instanciates failed")); }); }); } }, { key: "loadDecoration", value: function loadDecoration(e, t, r) { var _this13 = this; return new Promise(function (n, o) { return avatarLoader.load(_this13.sceneManager, t, r).then(function (a) { if (a) { _this13._clipContainerRes(a); var s = a.meshes[1].clone(a.meshes[1].name, null); if (!s) { logger$1.warn("[Engine] decoration does not exist!"), n(null); return; } var l = { isRender: !1, uId: Math.random(), root: s, type: e, name: t, isSelected: !1, lod: r }; if (a.xReferenceCount++, s._parentContainer = a, a.meshes.length > 1) for (var u = 2; u < a.meshes.length; u++) { s.addChild(a.meshes[u].clone(a.meshes[u].name, null)); } s.setEnabled(!1), l.isSelected = !0, n(l); } else return o(new ContainerLoadingFailedError("[Engine] container failed, instanciates failed.")); }).catch(function () { return o(new ContainerLoadingFailedError("[Engine] body type ".concat(e, " instanciates failed."))); }); }); } }, { key: "_getSourceKey", value: function _getSourceKey(e, t) { return t && avatarSetting.lod[t] ? e + avatarSetting.lod[t].fileName.split(".")[0] : e; } }, { key: "addAvatarToScene", value: function addAvatarToScene(e, t) { var _this14 = this; var r = Date.now(); return new Promise(function (n, o) { _this14.loadBody(e.avatarType, e.avatarType, t).then(function (a) { var s; if (!a) return e.isInLoadingList = !1, o(new ContainerLoadingFailedError("[Engine] avatar ".concat(e.id, " instanciates failed"))); if (e.attachBody(a), a.animations.length > 0) return a.animations.forEach(function (l) { l.stop(); }), e.setAnimations(a.animations), (s = e.controller) == null || s.playAnimation(e.controller.onPlay, !0), e.isRender = !0, e.isInLoadingList = !1, e.setAvatarVisible(!0), n(e); _this14.loadAnimation(e.avatarType, _this14._defaultAnims).then(function (l) { if (!l) return e.removeAvatarFromScene(), e.isInLoadingList = !1, o(new AvatarAnimationError()); var u = []; e.clothesList.length > 0 && e.clothesList.forEach(function (c) { u.push(_this14.loadDecoration(c.type, c.id, t)); }), Promise.all(u).then(function (c) { var d, _, g, m; c.forEach(function (v) { if (v && !v.isRender) e.attachDecoration(v);else return e.isInLoadingList = !1, e.removeAvatarFromScene(), o(new AvatarAssetLoadingError()); }), e.isRender = !0, (d = e.controller) == null || d.playAnimation(e.controller.onPlay, e.controller.loop), e.setAvatarVisible(!0); var h = avatarLoader.mshPath.get("meshes/ygb.glb"), f = avatarLoader.matPath.get(avatarResources.ygb.mesh); h && f ? _this14.loadExtra(f, h).then(function (v) { var y; e.isRender = !0, e.isInLoadingList = !1, e.distLevel = t, (y = _this14._sceneManager) == null || y.engineRunTimeStats.timeArray_addAvatarToScene.add(Date.now() - r), n(e); }) : (e.isRender = !0, e.isInLoadingList = !1, e.distLevel = t, (_ = _this14._sceneManager) == null || _.engineRunTimeStats.timeArray_addAvatarToScene.add(Date.now() - r), n(e)), (g = _this14._sceneManager) == null || g.lightComponent.setShadow(e), e.isInLoadingList = !1, e.distLevel = t, (m = _this14._sceneManager) == null || m.engineRunTimeStats.timeArray_addAvatarToScene.add(Date.now() - r), n(e); }).catch(function () { return o(new AvatarAssetLoadingError("[Engine] avatar ".concat(e.id, " instanciates failed."))); }); }).catch(function () { return o(new AvatarAssetLoadingError("[Engine] avatar ".concat(e.id, " instanciates failed."))); }); }).catch(function () { return o(new AvatarAssetLoadingError("[Engine] avatar ".concat(e.id, " instanciates failed."))); }); }); } }, { key: "loadExtra", value: function loadExtra(e, t) { var _this15 = this; var r = avatarResources.ygb.name; return new Promise(function (n, o) { var a; (a = _this15.sceneManager) == null || a.urlTransformer(e).then(function (s) { BABYLON.SceneLoader.LoadAssetContainerAsync("", s, _this15.scene, null, avatarSetting.fileType).then(function (l) { var c; _this15.extraComps.set(r, l.meshes[0]); var u = new NodeMaterial("material_".concat(r), _this15._scene, { emitComments: !1 }); (c = _this15.sceneManager) == null || c.urlTransformer(t).then(function (h) { u.loadAsync(h).then(function () { l.meshes[2].material.dispose(!0, !0), u.build(!1), l.meshes[2].material = u, n(l.meshes[2]); }); }); }); }); }); } }, { key: "getAvatarList", value: function getAvatarList() { var e = []; return this.characterMap.forEach(function (t, r) { t.forEach(function (n, o) { e.push(n); }); }), e; } }, { key: "_debug_avatar", value: function _debug_avatar() { var t, r; console.error("===>currentLODUsers", this.currentLODUsers), console.error("===>maxLODUsers", this._maxLODUsers), console.error("===>Loddist", this.getLoDLevels()), console.error("===> main character loc", (r = (t = this._mainUser) == null ? void 0 : t.rootNode) == null ? void 0 : r.position); var e = 0; this.getAvatarList().forEach(function (n) { n.isRender && (console.error("avatar id : ".concat(n.id, ",lod ").concat(n.distLevel, ",is Hide ").concat(n.isHide, ", distance ").concat(n.distance, ", is pending ").concat(n.isInLoadingList)), e++); }), console.error("========= avatar num", e), console.error("loop:", this._updateLoopObserver ? "on" : "false", "=> process", this._process, "===> comp", this._processList), console.error("===>maxLODUsers", this._maxLODUsers); } }]); return XAvatarManager; }(); var XBillboard = /*#__PURE__*/function () { function XBillboard(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1; _classCallCheck(this, XBillboard); E(this, "_mesh", null); E(this, "_texture", null); E(this, "_scalingFactor", 1); E(this, "offsets", null); E(this, "_pickable"); E(this, "_background", null); E(this, "_billboardManager"); E(this, "poolobj", null); E(this, "_usePool"); E(this, "_initMeshScale", new BABYLON.Vector3(1, 1, 1)); E(this, "_status", -1); E(this, "_stageChanged", !1); E(this, "DEFAULT_CONFIGS", {}); this._billboardManager = e, this._pickable = t, this._usePool = r; } _createClass(XBillboard, [{ key: "scalingFactor", set: function set(e) { this._scalingFactor = e; } }, { key: "background", set: function set(e) { this._background = e; } }, { key: "size", get: function get() { return -1; } }, { key: "setStatus", value: function setStatus(e) { e != this._status && (this._stageChanged = !0, this._status = e); } }, { key: "status", get: function get() { return this._status; } }, { key: "stageChanged", get: function get() { return this._stageChanged; }, set: function set(e) { this._stageChanged = e; } }, { key: "init", value: function init() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : .001; var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : .001; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !1; var o = this._billboardManager.sceneManager.Scene; if (this._usePool) { var a = this._billboardManager.billboardPool.getFree(o, t, r, n); this._mesh = a.data, this._mesh.isPickable = this._pickable, this._mesh.xid = e, this._mesh.xtype = EMeshType.XBillboard, this._texture = this._mesh.material.diffuseTexture, this.poolobj = a; } else this._mesh = this._billboardManager.createBillboardAsset(o, n); this._mesh.isPickable = this._pickable, this._initMeshScale.x = t * 1e3, this._initMeshScale.y = r * 1e3, this._mesh.xid = e, this._mesh.xtype = EMeshType.XBillboard, this._texture = this._mesh.material.diffuseTexture, this.setStatus(1), this._stageChanged = !0; } }, { key: "dispose", value: function dispose() { this._usePool ? this.poolobj && (this._billboardManager.billboardPool.release(this.poolobj), this._mesh = null, this._texture = null, this.poolobj = null) : this._mesh && (this._mesh.dispose(!0, !0), this._mesh = null, this._texture = null), this._background = null; } }, { key: "getMesh", value: function getMesh() { return this._mesh; } }, { key: "updateImage", value: function updateImage(e) { var _this = this; return new Promise(function (t) { if (_this._texture == null) { logger$1.error("[Engine]Billboard texture not found"); return; } var r = _this._mesh, n = _this._texture, o = _this._scalingFactor, a = _this._initMeshScale.x, s = _this._initMeshScale.y, l = _this._texture.getContext(), u = _this._texture.getSize(); l.clearRect(0, 0, u.width, u.height); var c = new Image(); c.crossOrigin = "anonymous", c.src = e, c.onload = function () { var h = c.width * o, f = c.height * o; r.scaling.x = h * a, r.scaling.y = f * s, n.scaleTo(h, f), l.drawImage(c, 0, 0, h, f), n.hasAlpha = !0, n.update(), t(); }; }); } }, { key: "show", value: function show() { this._mesh && (this._mesh.setEnabled(!0), this._mesh.isPickable = this._pickable); } }, { key: "hide", value: function hide() { this._mesh && (this._mesh.setEnabled(!1), this._mesh.isPickable = !1); } }, { key: "setId", value: function setId(e) { this._mesh && (this._mesh.xid = e); } }, { key: "setPosition", value: function setPosition(e) { if (e && this._mesh) { var t = ue4Position2Xverse(e); this._mesh.position = t; } } }, { key: "updateText", value: function updateText(e, t) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !0; var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; var o = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 30; var a = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "monospace"; var s = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : "black"; var l = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : "bold"; var u = arguments.length > 8 ? arguments[8] : undefined; if (this._texture == null) { logger$1.error("[Engine]Billboard texture not found"); return; } var c = this._texture, h = this._mesh, f = this._scalingFactor, d = this._initMeshScale.x, _ = this._initMeshScale.y; if (e != "") { var g = this._texture.getContext(), m = this._texture.getSize(); g.clearRect(0, 0, m.width, m.height); var v = new Image(); if (r) { t != null ? t ? this._background = this._billboardManager.userBackGroundBlob : this._background = this._billboardManager.npcBackGroundBlob : this._background || (this._background = this._billboardManager.userBackGroundBlob); var y = e, b = u && u < n.length - 1 ? u : n.length - 1; if (this._background) { if (b > this._background.length) { for (var T = 0; T < b - this._background.length; T++) { n.pop(); } b = n.length - 1, y = e.slice(0, n[b] - 1) + String.fromCharCode(8230); } v.crossOrigin = "anonymous", v.src = this._background[b - 1], v.onload = function () { var T = v.width * f, C = v.height * f; h.scaling.x = T * d, h.scaling.y = C * _, c.scaleTo(T, C), g.textAlign = "center", g.textBaseline = "middle", g.drawImage(v, 0, 0, T, C); for (var A = 0; A < b; A++) { c.drawText(y.slice(n[0 + A], n[1 + A]), T / 2, C * (A + 1) / (b + 1) + (A - (b - 1) / 2) * f * 10, l + " " + o * f + "px " + a, s, "transparent", !0); } c.hasAlpha = !0; }; } } else { var _y = u && u < n.length - 1 ? u : n.length - 1, _b = 480 * f, _T = 60 * f * _y; this._mesh.scaling = new BABYLON.Vector3(_b * d, _T * _, 1), c.scaleTo(_b, _T); var C = c.getContext(); C.textAlign = "center", C.textBaseline = "middle"; for (var A = 0; A < _y; A++) { c.drawText(e.slice(n[0 + A], n[1 + A]), _b / 2 + 2 * f, _T * (A + 1) / (_y + 1) + (A - (_y - 1) / 2) * f * 10 + 2 * f, l + " " + o * f + "px " + a, "#333333", "transparent", !0), c.drawText(e.slice(n[0 + A], n[1 + A]), _b / 2, _T * (A + 1) / (_y + 1) + (A - (_y - 1) / 2) * f * 10, l + " " + o * f + "px " + a, s, "transparent", !0); } c.hasAlpha = !0; } } else this.clearText(); } }, { key: "drawBillboard", value: function drawBillboard(e, t, r) { var _this2 = this; var m; var n = e.imageList, o = t.texts, _t$font = t.font, a = _t$font === void 0 ? "monospace" : _t$font, _t$fontsize = t.fontsize, s = _t$fontsize === void 0 ? 40 : _t$fontsize, _t$fontcolor = t.fontcolor, l = _t$fontcolor === void 0 ? "#ffffff" : _t$fontcolor, _t$fontstyle = t.fontstyle, u = _t$fontstyle === void 0 ? "" : _t$fontstyle, _t$linesize = t.linesize, c = _t$linesize === void 0 ? 20 : _t$linesize, h = t.linelimit, f = r.position, d = r.offsets, _ = r.scale, _r$compensationZ = r.compensationZ, g = _r$compensationZ === void 0 ? 0 : _r$compensationZ; if (this.scalingFactor = _ || 1, d && (this.offsets = { x: d.x * this._scalingFactor, y: d.y * this._scalingFactor, z: d.z * this._scalingFactor }), this.offsets || (this.offsets = { x: 0, y: 0, z: 0 }), this.setPosition(f), n && !o) (m = this._billboardManager.sceneManager) == null || m.urlTransformer(n[0]).then(function (v) { _this2.updateImage(v); });else if (o && !n) { var _getStringBoundaries = getStringBoundaries(o, c, XBillboardManager$1.alphaWidthMap), _getStringBoundaries2 = _slicedToArray(_getStringBoundaries, 2), v = _getStringBoundaries2[0], y = _getStringBoundaries2[1]; this.offsets.z += this._scalingFactor * g * (y.length - 1), this.updateText(v, void 0, !1, y, s, a, l, u, h); } else if (o && n) { this.background = n; var _getStringBoundaries3 = getStringBoundaries(o, c, XBillboardManager$1.alphaWidthMap), _getStringBoundaries4 = _slicedToArray(_getStringBoundaries3, 2), _v = _getStringBoundaries4[0], _y2 = _getStringBoundaries4[1]; this.offsets.z += this._scalingFactor * g * (_y2.length - 1), this.updateText(_v, void 0, !0, _y2, s, a, l, u, h); } this.setStatus(1); } }, { key: "clearText", value: function clearText() { if (this._texture != null) { var e = this._texture.getContext(), t = this._texture.getSize(); e.clearRect(0, 0, t.width, t.height), this._texture.update(); } } }]); return XBillboard; }(); var texRootDir = "https://app-asset-1258211750.file.myqcloud.com/1/textures/"; var XBillboardManager$1 = /*#__PURE__*/function () { function XBillboardManager(e) { var _this = this; _classCallCheck(this, XBillboardManager); E(this, "billboardMap", new Map()); E(this, "sceneManager"); E(this, "billboardPool"); E(this, "userBackGroundBlob", new Array()); E(this, "npcBackGroundBlob", new Array()); E(this, "tickObserver"); E(this, "tickInterval"); E(this, "_updateLoopObserver"); this.sceneManager = e, this.billboardPool = new Pool(this.createBillboardAsset, this.resetBillboardAsset, 0, 60, this.sceneManager.Scene, !1), this.tickInterval = 250; var t = 0; this.tickObserver = this.sceneManager.Scene.onAfterRenderObservable.add(function () { t += 1, t == _this.tickInterval && (_this.tick(), t = 0); }), this.launchBillboardStatusLoop(); } _createClass(XBillboardManager, [{ key: "tick", value: function tick() { this.billboardPool.clean(0, this.sceneManager.Scene, !1); } }, { key: "createBillboardAsset", value: function createBillboardAsset(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; var r = BABYLON.MeshBuilder.CreatePlane("billboard-", { height: .001, width: .001, sideOrientation: BABYLON.Mesh.DOUBLESIDE }, e); r.isPickable = !0, r.setEnabled(!1); var n = new BABYLON.DynamicTexture("billboard-tex-", { width: .001 + 1, height: .001 + 1 }, e, t, BABYLON.Texture.BILINEAR_SAMPLINGMODE); n.hasAlpha = !0; var o = new BABYLON.StandardMaterial("billboard-mat-", e); return o.diffuseTexture = n, o.emissiveColor = new BABYLON.Color3(.95, .95, .95), o.useAlphaFromDiffuseTexture = !0, r.material = o, r.billboardMode = BABYLON.Mesh.BILLBOARDMODE_Y, r.position.y = 0, r; } }, { key: "resetBillboardAsset", value: function resetBillboardAsset(e) { var t = e.data; return t.setEnabled(!1), t.isPickable = !1, e; } }, { key: "loadBackGroundTexToIDB", value: function () { var _loadBackGroundTexToIDB = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { var _this2 = this; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: XBillboardManager.userBubbleUrls.forEach(function (r) { _this2.sceneManager.urlTransformer(r).then(function (n) { _this2.userBackGroundBlob.push(n); }); }), XBillboardManager.npcBubbleUrls.forEach(function (r) { _this2.sceneManager.urlTransformer(r).then(function (n) { _this2.npcBackGroundBlob.push(n); }); }); case 1: case "end": return _context.stop(); } } }, _callee); })); function loadBackGroundTexToIDB() { return _loadBackGroundTexToIDB.apply(this, arguments); } return loadBackGroundTexToIDB; }() }, { key: "addBillboardToMap", value: function addBillboardToMap(e, t) { this.billboardMap.set(e, t); } }, { key: "addBillboard", value: function addBillboard(e, t, r) { var n = this.getBillboard(e); return n || (n = new XBillboard(this, t, r), this.addBillboardToMap(e, n)), n; } }, { key: "generateStaticBillboard", value: function generateStaticBillboard(e, _ref) { var _ref$id = _ref.id, t = _ref$id === void 0 ? "billboard" : _ref$id, r = _ref.isUser, n = _ref.background, _ref$font = _ref.font, o = _ref$font === void 0 ? "Arial" : _ref$font, _ref$fontsize = _ref.fontsize, a = _ref$fontsize === void 0 ? 40 : _ref$fontsize, _ref$fontcolor = _ref.fontcolor, s = _ref$fontcolor === void 0 ? "#ffffff" : _ref$fontcolor, _ref$fontstyle = _ref.fontstyle, l = _ref$fontstyle === void 0 ? "600" : _ref$fontstyle, _ref$linesize = _ref.linesize, u = _ref$linesize === void 0 ? 16 : _ref$linesize, c = _ref.linelimit, _ref$scale = _ref.scale, h = _ref$scale === void 0 ? 1 : _ref$scale, _ref$width = _ref.width, f = _ref$width === void 0 ? .01 : _ref$width, _ref$height = _ref.height, d = _ref$height === void 0 ? .01 : _ref$height, _ref$position = _ref.position, _ = _ref$position === void 0 ? { x: 0, y: 0, z: 0 } : _ref$position; var g = this.addBillboard(t, !1, !0); g.getMesh() == null && g.init(t, f, d); var m; r != null && (m = r ? XBillboardManager.userBubbleUrls : XBillboardManager.npcBubbleUrls), g && g.getMesh() && (g.DEFAULT_CONFIGS = { id: t, isUser: r, background: n, font: o, fontsize: a, fontcolor: s, fontstyle: l, linesize: u, linelimit: c, scale: h, width: f, height: d, position: _ }, g.drawBillboard({ imageList: n || m }, { texts: e, font: o, fontsize: a, fontcolor: s, fontstyle: l, linesize: u, linelimit: c }, { position: _, scale: h }), t && g.setId(t), g.setStatus(BillboardStatus.SHOW)); } }, { key: "getBillboard", value: function getBillboard(e) { return this.billboardMap.get(e); } }, { key: "toggle", value: function toggle(e, t) { var r; (r = this.getBillboard(e)) == null || r.setStatus(t ? BillboardStatus.SHOW : BillboardStatus.HIDE); } }, { key: "removeBillboard", value: function removeBillboard(e) { var t = this.getBillboard(e); t && (t.setStatus(BillboardStatus.DISPOSE), this.billboardMap.delete(e)); } }, { key: "launchBillboardStatusLoop", value: function launchBillboardStatusLoop() { var _this3 = this; this._updateLoopObserver = this.sceneManager.Scene.onBeforeRenderObservable.add(function () { _this3.billboardMap.size <= 0 || _this3.billboardMap.forEach(function (e) { e.stageChanged && (e.status == BillboardStatus.SHOW ? e.show() : e.status == BillboardStatus.HIDE ? e.hide() : (e.hide(), e.dispose()), e.stageChanged = !1); }); }); } }]); return XBillboardManager; }(); E(XBillboardManager$1, "alphaWidthMap", new Map()), E(XBillboardManager$1, "userBubbleUrls", [texRootDir + "bubble01.png", texRootDir + "bubble02.png", texRootDir + "bubble03.png"]), E(XBillboardManager$1, "npcBubbleUrls", [texRootDir + "bubble01_npc.png", texRootDir + "bubble02_npc.png", texRootDir + "bubble03_npc.png"]); var XLightManager = /*#__PURE__*/function () { function XLightManager(e) { _classCallCheck(this, XLightManager); E(this, "_scene"); E(this, "_envTexture"); E(this, "_shadowLight"); E(this, "_shadowGenerator"); E(this, "_avatarShadowMeshMap"); E(this, "_cullingShadowObservers"); E(this, "sceneManager"); this.sceneManager = e, this._scene = this.sceneManager.Scene, this._envTexture = null, this.shadowLean = .1; var t = new BABYLON.Vector3(this.shadowLean, -1, 0), r = 1024; this._shadowLight = new BABYLON.DirectionalLight("AvatarLight", t, this._scene), this._shadowLight.shadowMaxZ = 5e3, this._shadowLight.intensity = 0, this.attachLightToCamera(this._shadowLight), this._shadowGenerator = new BABYLON.ShadowGenerator(r, this._shadowLight, !0), this._avatarShadowMeshMap = new Map(), this._cullingShadowObservers = new Map(); } _createClass(XLightManager, [{ key: "shadowLean", set: function set(e) { e = Math.min(e, 1), e = Math.max(e, -1), this._shadowLight && (this._shadowLight.direction = new BABYLON.Vector3(e, -1, 0)); } }, { key: "setIBL", value: function setIBL(e) { var _this = this; return new Promise(function (t, r) { _this.sceneManager.urlTransformer(e).then(function (n) { var o; if (n == ((o = _this._envTexture) == null ? void 0 : o.url)) return t("env set success"); _this._envTexture != null && _this.disposeIBL(), _this._envTexture = BABYLON.CubeTexture.CreateFromPrefilteredData(n, _this._scene, ".env"), _this._scene.environmentTexture = _this._envTexture, _this._envTexture.onLoadObservable.addOnce(function () { t("env set success"), logger$1.info("env set success"); }); }).catch(function () { r("env set fail"); }); }); } }, { key: "disposeIBL", value: function disposeIBL() { this._envTexture == null ? logger$1.info("env not exist") : (this._envTexture.dispose(), this._envTexture = null, this._scene.environmentTexture = null, logger$1.info("env dispose success")); } }, { key: "removeShadow", value: function removeShadow(e) { var t; if (this._avatarShadowMeshMap.has(e)) { this._avatarShadowMeshMap.delete(e), this._cullingShadowObservers.get(e) && (this._scene.onBeforeRenderObservable.remove(this._cullingShadowObservers.get(e)), this._cullingShadowObservers.delete(e)); var r = e.rootNode; r && ((t = this._shadowGenerator) == null || t.removeShadowCaster(r)); } else return; } }, { key: "setShadow", value: function setShadow(e) { if (this._avatarShadowMeshMap.has(e)) return; e.rootNode && this._avatarShadowMeshMap.set(e, e.rootNode.getChildMeshes()); var t = 20, r = 10, n = this.cullingShadow(t, r, e); this._cullingShadowObservers.set(e, n); } }, { key: "cullingShadow", value: function cullingShadow(e, t, r) { var _this2 = this; var n = 0; var o = function o() { var s, l; if (n == t) { var u = _this2._avatarShadowMeshMap.get(r), c = (s = r.rootNode) == null ? void 0 : s.getChildMeshes(), h = _this2._scene.activeCamera; u == null || u.forEach(function (f) { var d; (d = _this2._shadowGenerator) == null || d.removeShadowCaster(f, !1); }), c == null || c.forEach(function (f) { var d; (d = _this2._shadowGenerator) == null || d.addShadowCaster(f, !1); }), h && r.rootNode && ((l = r.rootNode.position) == null ? void 0 : l.subtract(h.position).length()) > e && (c == null || c.forEach(function (f) { var d; (d = _this2._shadowGenerator) == null || d.removeShadowCaster(f, !1); })), c && _this2._avatarShadowMeshMap.set(r, c), n = 0; } else n += 1; }; return this._scene.onBeforeRenderObservable.add(o); } }, { key: "attachLightToCamera", value: function attachLightToCamera(e) { var _this3 = this; var t = e, r = 15, n = function n() { var o = _this3._scene.activeCamera; if (o) { var a = t.direction, s = new BABYLON.Vector3(r * a.x, r * a.y, r * a.z), l = o.position; t.position = l.subtract(s); } }; return t && this._scene.registerBeforeRender(n), n; } }]); return XLightManager; }(); var RunTimeArray = /*#__PURE__*/function () { function RunTimeArray() { _classCallCheck(this, RunTimeArray); E(this, "circularData"); this.circularData = []; } _createClass(RunTimeArray, [{ key: "add", value: function add(e) { this.circularData.length > 1e3 && this.circularData.shift(), this.circularData.push(e); } }, { key: "getAvg", value: function getAvg() { var e = 0; for (var t = 0; t < this.circularData.length; t++) { e += this.circularData[t]; } return { sum: e, avg: e / this.circularData.length || 0 }; } }, { key: "getMax", value: function getMax() { var e = 0; for (var t = 0; t < this.circularData.length; t++) { e < this.circularData[t] && (e = this.circularData[t]); } return e || 0; } }, { key: "clear", value: function clear() { this.circularData = []; } }, { key: "getStat", value: function getStat() { var e = this.getAvg(), t = { sum: e.sum, avg: e.avg, max: this.getMax() }; return this.clear(), t; } }]); return RunTimeArray; }(); var XEngineRunTimeStats = /*#__PURE__*/_createClass(function XEngineRunTimeStats() { _classCallCheck(this, XEngineRunTimeStats); E(this, "timeArray_loadStaticMesh", new RunTimeArray()); E(this, "timeArray_updateStaticMesh", new RunTimeArray()); E(this, "timeArray_addAvatarToScene", new RunTimeArray()); }); function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var getAlphaWidthMap = function getAlphaWidthMap(i, e) { var t = new BABYLON.DynamicTexture("test", 3, e), r = new Map(); for (var n = 32; n < 127; n++) { var o = String.fromCodePoint(n), a = 2 + "px " + i; t.drawText(o, null, null, a, "#000000", "#ffffff", !0); var s = t.getContext(); s.font = a; var l = s.measureText(o).width; r.set(n, l); } return t.dispose(), r; }; var XSceneManager = /*#__PURE__*/function () { function XSceneManager(e, t) { var _this = this; _classCallCheck(this, XSceneManager); E(this, "scene"); E(this, "engine"); E(this, "canvas"); E(this, "gl"); E(this, "_yuvInfo"); E(this, "cameraParam"); E(this, "shaderMode"); E(this, "panoInfo"); E(this, "_initEngineScaleNumber"); E(this, "_forceKeepVertical", !1); E(this, "_currentShader"); E(this, "_currentPanoId"); E(this, "_renderStatusCheckCount", 0); E(this, "_renderStatusNotChecktCount", 0); E(this, "_nonlinearCanvasResize", !1); E(this, "_bChangeEngineSize", !0); E(this, "_cameraManager"); E(this, "_lowpolyManager"); E(this, "_materialManager"); E(this, "_statisticManager"); E(this, "_breathPointManager"); E(this, "_skytv"); E(this, "_mv", []); E(this, "_decalManager"); E(this, "_lightManager"); E(this, "_avatarManager"); E(this, "urlTransformer"); E(this, "_billboardManager"); E(this, "_backgroundImg"); E(this, "engineRunTimeStats"); E(this, "uploadHardwareSystemInfo", function () { var e = _this.statisticComponent.getHardwareRenderInfo(), t = _this.statisticComponent.getSystemInfo(), r = { driver: t.driver, vender: t.vender, webgl: t.version, os: t.os }; logger$1.warn(JSON.stringify(e)), logger$1.warn(JSON.stringify(r)); }); E(this, "addNewLowPolyMesh", /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e, t) { return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.t0 = _this._currentShader == null; if (!_context.t0) { _context.next = 4; break; } _context.next = 4; return _this.initSceneManager(); case 4: return _context.abrupt("return", _this._lowpolyManager.addNewLowPolyMesh(e, t, _this._currentShader)); case 5: case "end": return _context.stop(); } } }, _callee); })); return function (_x, _x2) { return _ref.apply(this, arguments); }; }()); E(this, "initSceneManager", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return _this._materialManager.initMaterial(); case 2: return _context2.abrupt("return", _this.applyShader()); case 3: case "end": return _context2.stop(); } } }, _callee2); }))); E(this, "registerAfterRender", function () { var e; if (_this._forceKeepVertical) { var _t = _this.canvas.width, _r = _this.canvas.height; var _n = 0, _o = [[0, 0, 0, 0], [0, 0, 0, 0]]; if (((e = _this._cameraManager.MainCamera) == null ? void 0 : e.fovMode) === BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED ? (_n = Math.ceil((_r - _this._yuvInfo.height * _t / _this._yuvInfo.width) / 2), _o = [[0, 0, _t, _n], [0, _r - _n, _t, _n]]) : (_n = Math.ceil((_t - _this._yuvInfo.width * _r / _this._yuvInfo.height) / 2), _o = [[0, 0, _n, _r], [_t - _n, 0, _n, _r]]), _n > 0) { _this.gl.enable(_this.gl.SCISSOR_TEST); for (var a = 0; a < _o.length; ++a) { _this.gl.scissor(_o[a][0], _o[a][1], _o[a][2], _o[a][3]), _this.gl.clearColor(0, 0, 0, 1), _this.gl.clear(_this.gl.COLOR_BUFFER_BIT); } _this.gl.disable(_this.gl.SCISSOR_TEST); } } }); E(this, "resetRender", function () { _this.scene.environmentTexture && (_this.scene.environmentTexture._texture ? _this.lightComponent.setIBL(_this.scene.environmentTexture._texture.url) : _this.scene.environmentTexture.url && _this.lightComponent.setIBL(_this.scene.environmentTexture.url)); }); var r = /iphone|ipad/gi.test(window.navigator.userAgent) || t.disableWebGL2, n = new BABYLON.Engine(e, !0, { preserveDrawingBuffer: !0, stencil: !0, disableWebGL2Support: r }, !0), o = new BABYLON.Scene(n); this.scene = o, this.engine = n, this.canvas = e, this.scene.clearColor = new BABYLON.Color4(.7, .7, .7, 1), this.engine.getCaps().parallelShaderCompile = void 0, this._initEngineScaleNumber = this.engine.getHardwareScalingLevel(), this.engine.enableOfflineSupport = !1, this.engine.doNotHandleContextLost = !0, this.scene.clearCachedVertexData(), this.scene.cleanCachedTextureBuffer(), this.urlTransformer = t.urlTransformer || function (s) { return Promise.resolve(s); }, t.logger && Logger1.setLogger(t.logger), this.gl = e.getContext("webgl2", { preserveDrawingBuffer: !0 }) || e.getContext("webgl", { preserveDrawingBuffer: !0 }) || e.getContext("experimental-webgl", { preserveDrawingBuffer: !0 }), this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, 1), this._currentPanoId = 0, t.forceKeepVertical != null && (this._forceKeepVertical = t.forceKeepVertical), t.panoInfo != null && (this.panoInfo = t.panoInfo), t.shaderMode != null && (this.shaderMode = t.shaderMode), t.yuvInfo != null ? this._yuvInfo = t.yuvInfo : this._yuvInfo = { width: t.videoResOriArray[0].width, height: t.videoResOriArray[0].height, fov: 50 }, t.cameraParam != null && (this.cameraParam = t.cameraParam), t.nonlinearCanvasResize != null && (this._nonlinearCanvasResize = t.nonlinearCanvasResize), this._cameraManager = new XCameraComponent(this.canvas, this.scene, { cameraParam: this.cameraParam, yuvInfo: this._yuvInfo, forceKeepVertical: this._forceKeepVertical }), this._lowpolyManager = new XStaticMeshComponent(this), this._materialManager = new XMaterialComponent(this, { videoResOriArray: t.videoResOriArray, yuvInfo: this._yuvInfo, panoInfo: this.panoInfo, shaderMode: this.shaderMode }), this._statisticManager = new XStats(this), this._breathPointManager = new XBreathPointManager(this), this._decalManager = new XDecalManager(this), this._avatarManager = new XAvatarManager(this), this._billboardManager = new XBillboardManager$1(this), this.billboardComponent.loadBackGroundTexToIDB(), this._lightManager = new XLightManager(this), this.postprocessing(), this.initSceneManager(), this.engineRunTimeStats = new XEngineRunTimeStats(), /iphone/gi.test(window.navigator.userAgent) && window.devicePixelRatio && window.devicePixelRatio === 3 && window.screen.width === 375 && window.screen.height === 812 ? this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 2) : this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1.8), this.scene.registerBeforeRender(function () { _this._nonlinearCanvasResize && _this._bChangeEngineSize && (_this.setEngineSize(_this._yuvInfo), _this._bChangeEngineSize = !1); }), this.scene.registerAfterRender(function () { _this._nonlinearCanvasResize || _this.registerAfterRender(); }), window.addEventListener("resize", function () { _this._nonlinearCanvasResize ? _this._bChangeEngineSize = !0 : _this.engine.resize(); }), XBillboardManager$1.alphaWidthMap = getAlphaWidthMap("Arial", this.scene), this.uploadHardwareSystemInfo(); } _createClass(XSceneManager, [{ key: "yuvInfo", get: function get() { return this.getCurrentShaderMode() == 1 ? this._yuvInfo : { width: -1, height: -1, fov: -1 }; }, set: function set(e) { this.getCurrentShaderMode() == 1 && (this._yuvInfo = e, this._cameraManager.cameraFovChange(e)); } }, { key: "mainScene", get: function get() { return this.scene; } }, { key: "cameraComponent", get: function get() { return this._cameraManager; } }, { key: "staticmeshComponent", get: function get() { return this._lowpolyManager; } }, { key: "materialComponent", get: function get() { return this._materialManager; } }, { key: "statisticComponent", get: function get() { return this._statisticManager; } }, { key: "avatarComponent", get: function get() { return this._avatarManager; } }, { key: "lightComponent", get: function get() { return this._lightManager; } }, { key: "Engine", get: function get() { return this.engine; } }, { key: "Scene", get: function get() { return this.scene; } }, { key: "billboardComponent", get: function get() { return this._billboardManager; } }, { key: "breathPointComponent", get: function get() { return this._breathPointManager; } }, { key: "skytvComponent", get: function get() { return this._skytv; } }, { key: "mvComponent", get: function get() { return this._mv; } }, { key: "decalComponent", get: function get() { return this._decalManager; } }, { key: "currentShader", get: function get() { return this._currentShader; } }, { key: "initEngineScaleNumber", get: function get() { return this._initEngineScaleNumber; } }, { key: "setImageQuality", value: function setImageQuality(e) { e == 0 ? (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1.8), logger$1.info("[Engine] change image quality to low, [" + this._initEngineScaleNumber * 1.8 + "]")) : e == 1 ? (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1.5), logger$1.info("[Engine] change image quality to mid, [" + this._initEngineScaleNumber * 1.5 + "]")) : e == 2 && (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1), logger$1.info("[Engine] change image quality to high, [" + this._initEngineScaleNumber * 1 + "]")); } }, { key: "setNonlinearCanvasResize", value: function setNonlinearCanvasResize(e) { this._nonlinearCanvasResize = e, this._bChangeEngineSize = e, e || this.engine.resize(); } }, { key: "setBackgroundColor", value: function setBackgroundColor(e) { this.scene.clearColor = new Color4(e.r, e.g, e.b, e.a); } }, { key: "setBackgroundImg", value: function setBackgroundImg(e) { var _this2 = this; return this._backgroundImg != null && this._backgroundImg.url == e ? Promise.resolve(!0) : new Promise(function (t, r) { _this2.urlTransformer(e).then(function (n) { _this2._backgroundImg == null ? _this2._backgroundImg = { layer: new Layer("tex_background_" + Date.now(), n, _this2.Scene, !0), url: e } : _this2._backgroundImg.url != e && _this2._backgroundImg.layer != null && _this2._backgroundImg.layer.texture != null && (_this2._backgroundImg.layer.texture.updateURL(n), _this2._backgroundImg.layer.name = "tex_background_" + Date.now(), _this2._backgroundImg.url = e), t(!0); }).catch(function (n) { logger$1.error("[Engine] set background image Error: ".concat(n)), r("[Engine] set background image Error: ".concat(n)); }); }); } }, { key: "cleanTheWholeScene", value: function cleanTheWholeScene() { var _this3 = this; var e = this.scene.getFrameId(); this.scene.onBeforeRenderObservable.clear(), this.scene.onAfterRenderObservable.clear(), this.scene.clearCachedVertexData(), this.scene.cleanCachedTextureBuffer(), this.scene.registerBeforeRender(function () { _this3.scene.getFrameId() - e > 5 && _this3.scene.dispose(); }); } }, { key: "getAreaAvatar", value: function getAreaAvatar(e, t) { var r = []; return this._avatarManager.getAvatarList().forEach(function (n) { var o = e, a = n.position; a && o && calcDistance3D(o, a) < t && r.push(n.id); }), r; } }, { key: "setEngineSize", value: function setEngineSize(e) { var t = e.width, r = e.height, n = this.canvas.width; this.canvas.height, this.engine.setSize(Math.round(n), Math.round(n * (r / t))); } }, { key: "getCurrentShaderMode", value: function getCurrentShaderMode() { return this._currentShader === this._materialManager.getDefaultShader() ? 0 : this._currentShader === this._materialManager.getPureVideoShader() ? 1 : 2; } }, { key: "addSkyTV", value: function addSkyTV(e, t) { return this._skytv = new XTelevision(this.scene, e, this, t), this._skytv; } }, { key: "addMv", value: function addMv(e, t) { this._mv.push(new XTelevision(this.scene, e, this, t)); } }, { key: "addMeshInfo", value: function addMeshInfo(e) { this._lowpolyManager.setMeshInfo(e); } }, { key: "applyShader", value: function applyShader() { var _this4 = this; return new Promise(function (e, t) { _this4.shaderMode == EShaderMode.videoAndPano || _this4.shaderMode == EShaderMode.video ? _this4.changeVideoShaderForLowModel() : _this4.shaderMode == EShaderMode.default && _this4.changeDefaultShaderForLowModel(), e(!0); }); } }, { key: "changeHardwareScaling", value: function changeHardwareScaling(e) { e < 1 ? e = 1 : e > 2.5 && (e = 2.5), this._bChangeEngineSize = !0, this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * e); } }, { key: "getCurrentUsedPanoId", value: function getCurrentUsedPanoId() { return this._currentPanoId; } }, { key: "render", value: function render() { try { this.scene.render(); } catch (e) { throw logger$1.error("[Engine] Render Error: ".concat(e)), e; } } }, { key: "isReadyToRender", value: function isReadyToRender(e) { var _e$checkMesh = e.checkMesh, t = _e$checkMesh === void 0 ? !0 : _e$checkMesh, _e$checkEffect = e.checkEffect, r = _e$checkEffect === void 0 ? !1 : _e$checkEffect, _e$checkPostProgress = e.checkPostProgress, n = _e$checkPostProgress === void 0 ? !1 : _e$checkPostProgress, _e$checkParticle = e.checkParticle, o = _e$checkParticle === void 0 ? !1 : _e$checkParticle, _e$checkAnimation = e.checkAnimation, a = _e$checkAnimation === void 0 ? !1 : _e$checkAnimation; e.materialNameWhiteLists; if (this.scene._isDisposed) return logger$1.error("[Engine] this.scene._isDisposed== false "), !1; var l; var u = this.scene.getEngine(); if (r && !u.areAllEffectsReady()) return logger$1.error("[Engine] engine.areAllEffectsReady == false"), !1; if (a && this.scene._pendingData.length > 0) return logger$1.error("[Engine] scene._pendingData.length > 0 && animation error"), !1; if (t) { for (l = 0; l < this.scene.meshes.length; l++) { var c = this.scene.meshes[l]; if (!c.isEnabled() || !c.subMeshes || c.subMeshes.length === 0 || c != null && c.material != null && !(c.material.name.startsWith("Pure") || c.material.name.startsWith("Pano"))) continue; if (!c.isReady(!0)) return logger$1.error("[Engine] scene. mesh isReady == false, mesh name:".concat(c.name, ", mesh xtype: ").concat(c == null ? void 0 : c.xtype, ", mesh xgroup: ").concat(c == null ? void 0 : c.xgroup, ", mesh xskinInfo: ").concat(c == null ? void 0 : c.xskinInfo)), !1; var h = c.hasThinInstances || c.getClassName() === "InstancedMesh" || c.getClassName() === "InstancedLinesMesh" || u.getCaps().instancedArrays && c.instances.length > 0; var _iterator = _createForOfIteratorHelper(this.scene._isReadyForMeshStage), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var f = _step.value; if (!f.action(c, h)) return logger$1.error("[Engine] scene._isReadyForMeshStage == false, mesh name:".concat(c.name, ", mesh xtype: ").concat(c == null ? void 0 : c.xtype, ", mesh xgroup: ").concat(c == null ? void 0 : c.xgroup, ", mesh xskinInfo: ").concat(c == null ? void 0 : c.xskinInfo)), !1; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } for (l = 0; l < this.scene.geometries.length; l++) { if (this.scene.geometries[l].delayLoadState === 2) return logger$1.error("[Engine] geometry.delayLoadState === 2"), !1; } } if (n) { if (this.scene.activeCameras && this.scene.activeCameras.length > 0) { var _iterator2 = _createForOfIteratorHelper(this.scene.activeCameras), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _c = _step2.value; if (!_c.isReady(!0)) return logger$1.error("[Engine] camera not ready === false, ", _c.name), !1; } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } else if (this.scene.activeCamera && !this.scene.activeCamera.isReady(!0)) return logger$1.error("[Engine] activeCamera ready === false, ", this.scene.activeCamera.name), !1; } if (o) { var _iterator3 = _createForOfIteratorHelper(this.scene.particleSystems), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _c2 = _step3.value; if (!_c2.isReady()) return logger$1.error("[Engine] particleSystem ready === false, ", _c2.name), !1; } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } return !0; } }, { key: "changePanoShaderForLowModel", value: function changePanoShaderForLowModel(e) { var _this5 = this; return logger$1.info("[Engine] changePanoShaderForLowModel: ".concat(e)), this._materialManager.allowYUVUpdate(), new Promise(function (t, r) { _this5._materialManager._isInDynamicRange(e) == !1 && r(!1), _this5._currentPanoId = e, _this5._currentShader = _this5._materialManager.getDynamicShader(e), _this5.changeShaderForLowModel().then(function () { t(!0); }); }); } }, { key: "changeVideoShaderForLowModel", value: function changeVideoShaderForLowModel() { return logger$1.info("[Engine] changeVideoShaderForLowModel"), this._currentShader = this._materialManager.getPureVideoShader(), this._materialManager.allowYUVUpdate(), this.changeShaderForLowModel(); } }, { key: "changeDefaultShaderForLowModel", value: function changeDefaultShaderForLowModel() { return logger$1.info("[Engine] changeDefaultShaderForLowModel"), this._currentShader = this._materialManager.getDefaultShader(), this._materialManager.stopYUVUpdate(), this.changeShaderForLowModel(); } }, { key: "changeShaderForLowModel", value: function changeShaderForLowModel() { var _this6 = this; return new Promise(function (e, t) { _this6._lowpolyManager.getMeshes().forEach(function (r) { r.setMaterial(_this6._currentShader); }), _this6._lowpolyManager.getCgMesh().mesh.material = _this6._currentShader, e(!0); }); } }, { key: "setIBL", value: function setIBL(e) { this._lightManager.setIBL(e); } }, { key: "postprocessing", value: function postprocessing() { var e = new BABYLON.DefaultRenderingPipeline("default", !0, this.scene); e.imageProcessingEnabled = !1, e.bloomEnabled = !0, e.bloomThreshold = 1, e.bloomWeight = 1, e.bloomKernel = 64, e.bloomScale = .1; } }, { key: "getGround", value: function getGround(e) { var t = this._lowpolyManager.getMeshes(), r = []; return t.forEach(function (n) { n.mesh.name.indexOf("SM_Stage") >= 0 && r.push(n.mesh); }), this.Scene.meshes.forEach(function (n) { n.name.split("_")[0] === "ground" && r.push(n); }), r; } }]); return XSceneManager; }(); var http = new Http(); var urlMap = new Map(), urlTransformer = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(i) { var e, _args2 = arguments; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: e = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : !1; return _context2.abrupt("return", typeof i != "string" ? (console.warn("url transformer error", i), i) : i.startsWith("blob:") ? i : e ? http.get({ url: i, useIndexedDb: !0, key: "url", isOutPutObjectURL: !1 }) : urlMap.has(i) ? urlMap.get(i) : http.get({ url: i, useIndexedDb: !0, key: "url" }).then(function (t) { return urlMap.set(i, t), t; })); case 2: case "end": return _context2.stop(); } } }, _callee2); })); return function urlTransformer(_x2) { return _ref2.apply(this, arguments); }; }(); var sceneManager; function getSceneManager(i, e) { return sceneManager || (sceneManager = new XSceneManager(i, e)), sceneManager; } var EngineProxy = /*#__PURE__*/function () { function EngineProxy(e) { var _this = this; _classCallCheck(this, EngineProxy); E(this, "_tvs", []); E(this, "isRenderFirstFrame", !1); E(this, "_idleTime", 0); E(this, "renderTimer"); E(this, "lightManager"); E(this, "_checkSceneNotReadyCount", 0); E(this, "_checkSceneDurationFrameNum", 0); E(this, "_checkSceneFrameCount", 0); E(this, "timeoutCircularArray", new CircularArray(120, !1, [])); E(this, "frameCircularArray", new CircularArray(120, !1, [])); E(this, "interFrameCircularArray", new CircularArray(120, !1, [])); E(this, "drawCallCntCircularArray", new CircularArray(120, !1, [])); E(this, "activeFacesCircularArray", new CircularArray(120, !1, [])); E(this, "renderTimeCircularArray", new CircularArray(120, !1, [])); E(this, "drawCallTimeCircularArray", new CircularArray(120, !1, [])); E(this, "animationCircularArray", new CircularArray(120, !1, [])); E(this, "meshSelectCircularArray", new CircularArray(120, !1, [])); E(this, "renderTargetCircularArray", new CircularArray(120, !1, [])); E(this, "regBeforeRenderCircularArray", new CircularArray(120, !1, [])); E(this, "regAfterRenderCircularArray", new CircularArray(120, !1, [])); E(this, "renderCnt", 0); E(this, "renderErrorCount", 0); E(this, "engineSloppyCnt", 0); E(this, "systemStuckCnt", 0); E(this, "frameRenderNumber", 0); E(this, "_setFPS", function (e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 25; logger$1.info("Set fps to", t); var r = t > 60 ? 60 : t < 24 ? 24 : t; e.Engine.stopRenderLoop(); var n = 1e3 / r; var o = Date.now(), a = Date.now(), s = n, l = 1; var u = function u() { var T; var c = Date.now(), h = c - o, f = c - a; a = c, _this.frameCircularArray.add(f), h - s > n && (_this.systemStuckCnt += 1); var d = h / s; l = .9 * l + .1 * d; var _ = Date.now(); var g = 0, m = 0; if (_this.room.isUpdatedRawYUVData || _this.room.isPano) { if (_this.isRenderFirstFrame = !0, _this._checkSceneDurationFrameNum > 0) _this._checkSceneFrameCount++, _this.room.sceneManager.isReadyToRender({}) && _this._checkSceneDurationFrameNum--, _this._checkSceneFrameCount > EngineProxy._CHECK_DURATION && (_this._checkSceneDurationFrameNum = EngineProxy._CHECK_DURATION, _this._checkSceneFrameCount = 0, _this._checkSceneNotReadyCount++, (_this._checkSceneNotReadyCount == 1 || _this._checkSceneNotReadyCount % 100 == 0) && logger$1.error("[SDK] Scene not ready, skip render. loop: ".concat(_this._checkSceneNotReadyCount)), _this._checkSceneNotReadyCount > 10 && (logger$1.error("[SDK] Scene not ready, reload later"), _this.room.proxyEvents("renderError", { error: new Error("[SDK] Scene not ready, skip render and reload.") })), _this.room.stats.assign({ renderErrorCount: _this._checkSceneNotReadyCount }), logger$1.infoAndReportMeasurement({ value: 0, startTime: Date.now(), metric: "renderError", error: new Error("[SDK] Scene not ready, skip render and reload."), reportOptions: { sampleRate: .1 } }));else try { e.render(); } catch (C) { _this.renderErrorCount++, _this.renderErrorCount > 10 && _this.room.proxyEvents("renderError", { error: C }), _this.room.stats.assign({ renderErrorCount: _this.renderErrorCount }), logger$1.infoAndReportMeasurement({ value: 0, startTime: Date.now(), metric: "renderError", error: C, reportOptions: { sampleRate: .1 } }); } g = Date.now() - _, _this.frameRenderNumber < 1e3 && _this.frameRenderNumber++, _this.room.networkController.rtcp.workers.UpdateYUV(), m = Date.now() - _ - g; } _this.isRenderFirstFrame || _this.room.networkController.rtcp.workers.UpdateYUV(); var y = Date.now() - _; o = c + y, s = Math.min(Math.max((n - y) / l, 5), 200), y > n && (s = 10, _this.engineSloppyCnt += 1), _this._idleTime = s; var b = s; if (s > 150 && console.log("lastGap is ", s, ", ratio is ", l, ", usedTimeMs is ", y, ", cpuRenderTime is ", g, ", cpuUpdateYUVTime is ", m), _this.timeoutCircularArray.add(b), _this.renderCnt % 25 == 0) { var C = _this.frameCircularArray.getAvg(), A = _this.timeoutCircularArray.getAvg(), S = _this.frameCircularArray.getMax(), P = _this.timeoutCircularArray.getMax(); (T = _this.room.stats) == null || T.assign({ avgFrameTime: C, avgTimeoutTime: A, maxFrameTime: S, maxTimeoutTime: P, systemStuckCnt: _this.systemStuckCnt }); } _this.renderTimer = window.setTimeout(u, s); }; _this.renderTimer = window.setTimeout(u, n / l); }); E(this, "updateStats", function () { var e; (e = _this.room.stats) == null || e.assign({ renderFrameTime: _this.renderTimeCircularArray.getAvg(), maxRenderFrameTime: _this.renderTimeCircularArray.getMax(), interFrameTime: _this.interFrameCircularArray.getAvg(), animationTime: _this.animationCircularArray.getAvg(), meshSelectTime: _this.meshSelectCircularArray.getAvg(), drawcallTime: _this.drawCallTimeCircularArray.getAvg(), idleTime: _this._idleTime, registerBeforeRenderTime: _this.regBeforeRenderCircularArray.getAvg(), registerAfterRenderTime: _this.regAfterRenderCircularArray.getAvg(), renderTargetRenderTime: _this.renderTargetCircularArray.getAvg(), fps: (1e3 / (_this.renderTimeCircularArray.getAvg() + _this.interFrameCircularArray.getAvg())).toFixed(2), drawcall: _this.drawCallCntCircularArray.getAvg(), engineSloppyCnt: _this.engineSloppyCnt, maxInterFrameTime: _this.interFrameCircularArray.getMax(), maxDrawcallTime: _this.drawCallTimeCircularArray.getMax(), maxMeshSelectTime: _this.meshSelectCircularArray.getMax(), maxAnimationTime: _this.animationCircularArray.getMax(), maxRegisterBeforeRenderTime: _this.regBeforeRenderCircularArray.getMax(), maxRegisterAfterRenderTime: _this.regAfterRenderCircularArray.getMax(), maxRenderTargetRenderTime: _this.renderTargetCircularArray.getMax(), avgFrameTime: _this.frameCircularArray.getAvg(), avgTimeoutTime: _this.timeoutCircularArray.getAvg(), maxFrameTime: _this.frameCircularArray.getMax(), maxTimeoutTime: _this.timeoutCircularArray.getMax() }); }); this.room = e; } _createClass(EngineProxy, [{ key: "initEngine", value: function () { var _initEngine = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e) { var t, r, n, o, a; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.updateBillboard(); case 2: logger$1.info("engine version:", VERSION$1); t = logger$1; t.setLevel(LoggerLevels$1.Warn); r = { videoResOriArray: [{ width: 720, height: 1280 }, { width: 1280, height: 720 }, { width: 480, height: 654 }, { width: 654, height: 480 }, { width: 1920, height: 1080 }, { width: 1080, height: 1920 }, { width: 414, height: 896 }], forceKeepVertical: this.room.options.objectFit !== "cover", panoInfo: { dynamicRange: 1, width: 4096, height: 2048 }, shaderMode: EShaderMode.videoAndPano, yuvInfo: { width: 1280, height: 720, fov: e.fov || DEFAULT_MAIN_CAMERA_FOV }, cameraParam: { maxZ: 1e4 }, urlTransformer, logger: t, disableWebGL2: this.room.options.disableWebGL2 || !1 }, n = this.room.options.resolution; n && (r.videoResOriArray.some(function (l) { return l.width === n.width && l.height === n.height; }) || r.videoResOriArray.push(n)); o = this.room.sceneManager = getSceneManager(this.room.canvas, r); this.room.setPictureQualityLevel(this.room.options.pictureQualityLevel || "high"); this.room.sceneManager.staticmeshComponent.setRegionLodRule([2, 2, -1, -1, -1]); this.room.scene = o.Scene; this.room.breathPointManager = o.breathPointComponent; this.lightManager = o.lightComponent; this.registerStats(); this.setEnv(e); _context3.next = 17; return this.room.avatarManager.init(); case 17: a = this._createAssetList(e); _context3.next = 20; return this.loadAssets(a, ""); case 20: this._setFPS(o); case 21: case "end": return _context3.stop(); } } }, _callee3, this); })); function initEngine(_x3) { return _initEngine.apply(this, arguments); } return initEngine; }() }, { key: "pause", value: function pause() { clearTimeout(this.renderTimer), logger$1.info("Invoke room.pause to pause render"); var e = { roomId: this.room.id, effects: [], lowPolyModels: [], breathPointsConfig: [], skinId: this.room.skinId }; return this.loadAssets(e, this.room.skinId); } }, { key: "resume", value: function () { var _resume = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4() { var e; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: this._setFPS(this.room.sceneManager), this.room.sceneManager.cameraComponent.cameraFovChange(this.room.sceneManager.yuvInfo), logger$1.info("Invoke room.resume to render"); e = this._createAssetList(this.room.skin); _context4.next = 4; return this.loadAssets(e, ""); case 4: case "end": return _context4.stop(); } } }, _callee4, this); })); function resume() { return _resume.apply(this, arguments); } return resume; }() }, { key: "setEnv", value: function setEnv(e) { var r; this.lightManager || (this.lightManager = this.room.sceneManager.lightComponent), e = e || this.room.skin; var t = ModelManager.findModel(e.models, AssetTypeName.Config, AssetClassName.Env); return t ? (r = this.lightManager) == null ? void 0 : r.setIBL(t.modelUrl) : (logger$1.error("env file not found"), Promise.resolve()); } }, { key: "_parseModelsAndLoad", value: function () { var _parseModelsAndLoad2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(e, t, r) { var n, o, a, u, c, h, _c, s, l, _u, _c2, _h; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: logger$1.info("Invoke _parseModelsAndLoad start", t); n = ["airship", "balloon", "default", "ground_feiting", "ground_reqiqiu"], o = new Map(); r == null && (r = "xxxx"); a = !0; u = 0; case 5: if (!(u < e.length)) { _context5.next = 20; break; } a = !0; c = 0; case 8: if (!(c < n.length)) { _context5.next = 16; break; } if (!(e[u].modelUrl.toLowerCase().indexOf(n[c]) >= 0)) { _context5.next = 13; break; } h = o.get(n[c]); h ? (h.push(e[u]), o.set(n[c], h)) : o.set(n[c], [e[u]]), a = !1; return _context5.abrupt("break", 16); case 13: ++c; _context5.next = 8; break; case 16: if (a) { _c = o.get("default"); _c ? (_c.push(e[u]), o.set("default", _c)) : o.set("default", [e[u]]); } case 17: ++u; _context5.next = 5; break; case 20: s = o.get(t) || []; if (!(this.room.viewMode === "simple" && (s = s.filter(function (u) { return !u.modelUrl.endsWith("zip"); })), !s)) { _context5.next = 23; break; } return _context5.abrupt("return", Promise.reject("no invalid scene model with group name: ".concat(t))); case 23: l = []; for (_u = 0; _u < s.length; ++_u) { _c2 = s[_u]; if (_c2.modelUrl.toLowerCase().endsWith("zip")) _c2.modelUrl.toLowerCase().endsWith("zip") && l.push(this.room.sceneManager.addNewLowPolyMesh({ url: _c2.modelUrl, skinInfo: r }));else { _h = t; l.push(this.room.sceneManager.addNewLowPolyMesh({ url: _c2.modelUrl, group: _h, pick: !0, skinInfo: r })); } } return _context5.abrupt("return", Promise.all(l)); case 26: case "end": return _context5.stop(); } } }, _callee5, this); })); function _parseModelsAndLoad(_x4, _x5, _x6) { return _parseModelsAndLoad2.apply(this, arguments); } return _parseModelsAndLoad; }() }, { key: "_deleteAssetsLowpolyModel", value: function () { var _deleteAssetsLowpolyModel2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e) { var t; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: this.room.sceneManager.staticmeshComponent.deleteMeshesBySkinInfo(e), this.room.sceneManager.breathPointComponent.clearBreathPointsBySkinInfo(e), this.room.sceneManager.decalComponent.deleteDecalBySkinInfo(e); t = []; this.room.sceneManager.Scene.meshes.forEach(function (r) { r.xskinInfo == e && t.push(r); }), t.forEach(function (r) { r.dispose(!1, !1); }); case 3: case "end": return _context6.stop(); } } }, _callee6, this); })); function _deleteAssetsLowpolyModel(_x7) { return _deleteAssetsLowpolyModel2.apply(this, arguments); } return _deleteAssetsLowpolyModel; }() }, { key: "loadLandAssets", value: function () { var _loadLandAssets = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7() { var _this2 = this; var e; return regenerator.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: e = this._createAssetList(this.room.skin); return _context7.abrupt("return", this.loadAssets(e, this.room.skinId).catch(function () { return _this2.loadAssets(e, _this2.room.skinId); })); case 2: case "end": return _context7.stop(); } } }, _callee7, this); })); function loadLandAssets() { return _loadLandAssets.apply(this, arguments); } return loadLandAssets; }() }, { key: "loadAssets", value: function () { var _loadAssets2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee8(e) { var t, r, n, _args8 = arguments; return regenerator.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: t = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : ""; r = _args8.length > 2 && _args8[2] !== undefined ? _args8[2] : 8e3; n = Date.now(); return _context8.abrupt("return", this._loadAssets(e, t)._timeout(r, new InitEngineTimeoutError("loadAssets timeout(".concat(r, "ms)"))).then(function (o) { return logger$1.infoAndReportMeasurement({ tag: "loadAssets", startTime: n, metric: "loadAssets" }), o; }).catch(function (o) { return logger$1.infoAndReportMeasurement({ tag: "loadAssets", startTime: n, metric: "loadAssets", error: o }), Promise.reject(o); })); case 4: case "end": return _context8.stop(); } } }, _callee8, this); })); function loadAssets(_x8) { return _loadAssets2.apply(this, arguments); } return loadAssets; }() }, { key: "_loadAssets", value: function () { var _loadAssets3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee9(e) { var t, r, _args9 = arguments; return regenerator.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: t = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : ""; _context9.prev = 1; r = []; r.push(this._loadAssetsLowpolyModel(e, t)); _context9.next = 6; return Promise.all(r); case 6: _context9.next = 8; return this.setEnv(); case 8: this._checkSceneDurationFrameNum = EngineProxy._CHECK_DURATION; this._checkSceneNotReadyCount = 0; this._checkSceneFrameCount = 0; this.updateAnimationList(); this.room.loadAssetsHook(); _context9.next = 18; break; case 15: _context9.prev = 15; _context9.t0 = _context9["catch"](1); return _context9.abrupt("return", Promise.reject(_context9.t0)); case 18: case "end": return _context9.stop(); } } }, _callee9, this, [[1, 15]]); })); function _loadAssets(_x9) { return _loadAssets3.apply(this, arguments); } return _loadAssets; }() }, { key: "updateAnimationList", value: function updateAnimationList() { var _this3 = this; if (this.room.avatarManager && this.room.avatarManager.xAvatarManager) { var e = this.room.skin.animationList; if (!e) return; e.forEach(function (t) { _this3.room.avatarManager.xAvatarManager.updateAnimationLists(t.animations, t.avatarId); }); } } }, { key: "_loadAssetsLowpolyModel", value: function () { var _loadAssetsLowpolyModel2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee11(e) { var _this4 = this; var t, r, n, o, a, s, u, c, h, _args11 = arguments; return regenerator.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: t = _args11.length > 1 && _args11[1] !== undefined ? _args11[1] : ""; r = [], n = [], o = []; e.lowPolyModels.forEach(function (f) { f.group === "TV" ? n.push({ id: "", name: "", thumbnailUrl: "", typeName: AssetTypeName.Model, className: AssetClassName.Tv, modelUrl: f.url }) : f.group === "\u544A\u767D\u5899" ? o.push({ id: "", name: "", thumbnailUrl: "", typeName: AssetTypeName.Model, className: AssetClassName.Lpm, modelUrl: f.url }) : r.push({ id: "", name: "", thumbnailUrl: "", typeName: AssetTypeName.Model, className: AssetClassName.Lpm, modelUrl: f.url }); }), t != "" && t != null && this._deleteAssetsLowpolyModel(t); a = e.skinId; logger$1.info("====> from ", t, " to ", a), this._tvs.forEach(function (f) { return f.clean(); }), this._tvs = []; s = EFitMode.cover; a == "10048" && (s = EFitMode.contain), Array.isArray(n) && n.forEach(function (f, d) { _this4._tvs.push(new TV("squareTv" + d, f.modelUrl, _this4.room, { fitMode: s })); }), e.breathPointsConfig.forEach( /*#__PURE__*/function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee10(f) { var d; return regenerator.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: _context10.prev = 0; _context10.next = 3; return urlTransformer(f.imageUrl); case 3: d = _context10.sent; _context10.next = 9; break; case 6: _context10.prev = 6; _context10.t0 = _context10["catch"](0); d = f.imageUrl, logger$1.error("urlTransformer error", _context10.t0); case 9: _this4.room.breathPointManager.addBreathPoint({ id: f.id, position: f.position, spriteSheet: d, rotation: f.rotation || { pitch: 0, yaw: 270, roll: 0 }, billboardMode: !0, type: f.type || "no_type", spriteWidthNumber: f.spriteWidthNum || 1, spriteHeightNumber: f.spriteHeightNum || 1, maxVisibleRegion: f.maxVisibleRegion || 150, width: f.width, height: f.height, skinInfo: f.skinId }); case 10: case "end": return _context10.stop(); } } }, _callee10, null, [[0, 6]]); })); return function (_x11) { return _ref3.apply(this, arguments); }; }()), o.forEach(function (f) { _this4.room.sceneManager.decalComponent.addDecal({ id: f.id || "gbq", meshPath: f.modelUrl, skinInfo: a }); }); u = this.room.sceneManager.staticmeshComponent.lowModel_group, c = Array.from(u.keys()).filter(function (f) { return !f.startsWith("region_"); }), h = ["airship", "balloon", "ground_feiting", "ground_reqiqiu", "default"]; return _context11.abrupt("return", new Promise(function (f, d) { Promise.all(h.map(function (_) { return _this4._parseModelsAndLoad(r, _, a); })).then(function () { var _ = !1; r.forEach(function (v) { v.modelUrl.endsWith("zip") && (_ = !0); }), _ == !1 && _this4.room.sceneManager.staticmeshComponent.deleteLastRegionMesh(), _this4.room.sceneManager.staticmeshComponent.lowModel_group; var g = Array.from(u.keys()).filter(function (v) { return !v.startsWith("region_"); }), m = c.filter(function (v) { return g.indexOf(v) < 0; }); m.length > 0 && m.forEach(function (v) { _this4.room.sceneManager.staticmeshComponent.deleteMeshesByGroup(v); }), f(!0); }).catch(function (_) { d(_); }); })); case 9: case "end": return _context11.stop(); } } }, _callee11, this); })); function _loadAssetsLowpolyModel(_x10) { return _loadAssetsLowpolyModel2.apply(this, arguments); } return _loadAssetsLowpolyModel; }() }, { key: "_updateSkinAssets", value: function () { var _updateSkinAssets2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee12(e) { var t, r, n; return regenerator.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: t = this.room.lastSkinId; _context12.next = 3; return this.room.getSkin(e); case 3: r = _context12.sent; n = this._createAssetList(r); _context12.prev = 5; _context12.next = 8; return this.loadAssets(n, t); case 8: this.room.updateCurrentState({ versionId: r.versionId, skinId: r.id, skin: r }); _context12.next = 16; break; case 11: _context12.prev = 11; _context12.t0 = _context12["catch"](5); _context12.next = 15; return this.loadAssets(n, t); case 15: this.room.updateCurrentState({ versionId: r.versionId, skinId: r.id, skin: r }); case 16: this.setEnv(r); case 17: case "end": return _context12.stop(); } } }, _callee12, this, [[5, 11]]); })); function _updateSkinAssets(_x12) { return _updateSkinAssets2.apply(this, arguments); } return _updateSkinAssets; }() }, { key: "_createAssetList", value: function _createAssetList(e) { var t = [], r = [], n = []; var o = e.models; var a = this.room.modelManager.config.preload; return this.room.viewMode === "simple" ? a && (o = a.baseUrls.map(function (l) { return l.modelUrl = l.url, l; })) : this.room.viewMode, ModelManager.findModels(o, AssetTypeName.Effects, AssetClassName.Effects).forEach(function (l) { t.push({ url: l.modelUrl, group: l.className, name: l.name }); }), ModelManager.findModels(o, AssetTypeName.Model, AssetClassName.Lpm).forEach(function (l) { r.push({ url: l.modelUrl, group: l.className }); }), ModelManager.findModels(o, AssetTypeName.Model, AssetClassName.Gbq).forEach(function (l) { r.push({ url: l.modelUrl, group: l.className }); }), ModelManager.findModels(o, AssetTypeName.Model, AssetClassName.Tv).forEach(function (l) { r.push({ url: l.modelUrl, group: l.className }); }), [].forEach(function (l) { l.skinId == e.id && n.push(l); }), { roomId: this.room.id, effects: t, lowPolyModels: r, breathPointsConfig: n, skinId: e.id }; } }, { key: "registerStats", value: function registerStats() { var _this5 = this; var e = this.room.sceneManager; this.room.scene.registerAfterRender(function () { var I; var t = e.statisticComponent.getInterFrameTimeCounter(), r = e.statisticComponent.getDrawCall(), n = e.statisticComponent.getActiveFaces(), o = e.statisticComponent.getFrameTimeCounter(), a = e.statisticComponent.getDrawCallTime(), s = e.statisticComponent.getAnimationTime(), l = e.statisticComponent.getActiveMeshEvaluationTime(), u = e.statisticComponent.getRenderTargetRenderTime(), c = e.statisticComponent.getRegisterBeforeRenderTime(), h = e.statisticComponent.getRegisterAfterRenderTime(), f = e.statisticComponent.getActiveParticles(), d = e.statisticComponent.getActiveBones(), _ = e.Scene._activeAnimatables.length, g = e.statisticComponent.getTotalRootNodes(), m = e.Scene.geometries.length, v = e.Scene.onBeforeRenderObservable.observers.length, y = e.Scene.onAfterRenderObservable.observers.length, b = e.statisticComponent.getTotalMeshes(), T = e.statisticComponent.getTotalTextures(), C = e.statisticComponent.getTotalMaterials(), A = e.statisticComponent.getSystemInfo(), S = A.resolution, P = A.driver; A.vender; var R = A.version, M = A.hardwareScalingLevel, x = S + "_" + P + "_" + R + "_" + M; _this5.interFrameCircularArray.add(t), _this5.renderTimeCircularArray.add(o), _this5.animationCircularArray.add(s), _this5.meshSelectCircularArray.add(l), _this5.drawCallTimeCircularArray.add(a), _this5.regAfterRenderCircularArray.add(h), _this5.regBeforeRenderCircularArray.add(c), _this5.renderTargetCircularArray.add(u), _this5.drawCallCntCircularArray.add(r), _this5.renderCnt += 1, _this5.renderCnt % 25 == 0 && ((I = _this5.room.stats) == null || I.assign({ renderFrameTime: _this5.renderTimeCircularArray.getAvg(), maxRenderFrameTime: _this5.renderTimeCircularArray.getMax(), interFrameTime: _this5.interFrameCircularArray.getAvg(), animationTime: _this5.animationCircularArray.getAvg(), meshSelectTime: _this5.meshSelectCircularArray.getAvg(), drawcallTime: _this5.drawCallTimeCircularArray.getAvg(), idleTime: _this5._idleTime, registerBeforeRenderTime: _this5.regBeforeRenderCircularArray.getAvg(), registerAfterRenderTime: _this5.regAfterRenderCircularArray.getAvg(), renderTargetRenderTime: _this5.renderTargetCircularArray.getAvg(), fps: (1e3 / (_this5.renderTimeCircularArray.getAvg() + _this5.interFrameCircularArray.getAvg())).toFixed(2), drawcall: _this5.drawCallCntCircularArray.getAvg(), triangle: n.toString(), engineSloppyCnt: _this5.engineSloppyCnt, maxInterFrameTime: _this5.interFrameCircularArray.getMax(), maxDrawcallTime: _this5.drawCallTimeCircularArray.getMax(), maxMeshSelectTime: _this5.meshSelectCircularArray.getMax(), maxAnimationTime: _this5.animationCircularArray.getMax(), maxRegisterBeforeRenderTime: _this5.regBeforeRenderCircularArray.getMax(), maxRegisterAfterRenderTime: _this5.regAfterRenderCircularArray.getMax(), maxRenderTargetRenderTime: _this5.renderTargetCircularArray.getMax(), activeParticles: f, activeBones: d, activeAnimation: _, totalMeshes: b, totalRootNodes: g, totalGeometries: m, totalTextures: T, totalMaterials: C, registerBeforeCount: v, registerAfterCount: y, hardwareInfo: x })); }); } }, { key: "updateBillboard", value: function () { var _updateBillboard = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee13() { var e, r, n, o, a, s; return regenerator.wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: e = this.room.options.skinId; _context13.next = 3; return this.room.modelManager.findAssetList(e); case 3: r = _context13.sent.filter(function (a) { return a.typeName === AssetTypeName.Textures && a.className === AssetClassName.SayBubble; }); n = ["bubble01", "bubble02", "bubble03"]; o = ["bubble01_npc", "bubble02_npc", "bubble03_npc"]; if (r.length) { a = r.filter(function (l) { return n.includes(l.name); }).map(function (l) { return l.url; }), s = r.filter(function (l) { return o.includes(l.name); }).map(function (l) { return l.url; }); a.length && (XBillboardManager$1.userBubbleUrls = a), s.length && (XBillboardManager$1.npcBubbleUrls = s); } case 7: case "end": return _context13.stop(); } } }, _callee13, this); })); function updateBillboard() { return _updateBillboard.apply(this, arguments); } return updateBillboard; }() }]); return EngineProxy; }(); function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var LongPressMesh = [EMeshType.XAvatar]; var StaticMeshEvent = /*#__PURE__*/function (_EventEmitter) { _inherits(StaticMeshEvent, _EventEmitter); var _super = _createSuper$2(StaticMeshEvent); function StaticMeshEvent(e) { var _this; _classCallCheck(this, StaticMeshEvent); _this = _super.call(this); E(_assertThisInitialized(_this), "scene"); E(_assertThisInitialized(_this), "_staringPointerTime", -1); E(_assertThisInitialized(_this), "_pickedMeshID", "0"); E(_assertThisInitialized(_this), "_pointerDownTime", -1); E(_assertThisInitialized(_this), "_currentPickPoint"); E(_assertThisInitialized(_this), "_longPressDelay", 500); E(_assertThisInitialized(_this), "_pointerTapDelay", 200); E(_assertThisInitialized(_this), "_pickedMeshType"); E(_assertThisInitialized(_this), "registerEvent", function () { _this.scene.onPrePointerObservable.add(_this.onDown, BABYLON.PointerEventTypes.POINTERDOWN), _this.scene.onPrePointerObservable.add(_this.onUp, BABYLON.PointerEventTypes.POINTERUP), _this.scene.onPrePointerObservable.add(_this.onDoubleTap, BABYLON.PointerEventTypes.POINTERDOUBLETAP), _this.scene.onDispose = function () { _this.scene.onPrePointerObservable.removeCallback(_this.onUp), _this.scene.onPrePointerObservable.removeCallback(_this.onDown), _this.scene.onPrePointerObservable.removeCallback(_this.onDoubleTap); }; }); E(_assertThisInitialized(_this), "onUp", function () { if (Date.now() - _this._pointerDownTime < _this._pointerTapDelay && !_this.scene._inputManager._isPointerSwiping()) { _this.scene._inputManager._totalPointersPressed = 0; var _e = _this._currentPickPoint; _e != null && LongPressMesh.indexOf(_e.type) == -1 && _this.scene._inputManager._totalPointersPressed == 0 && _this.emit("pointTap", _e), _e != null && LongPressMesh.indexOf(_e.type) != -1 && (_e = _this.onPointerTap(function (t) { return t.isPickable && LongPressMesh.indexOf(t.xtype) == -1; }), _e != null && _this.emit("pointTap", _e)); } }); E(_assertThisInitialized(_this), "onDown", function () { var e = _this.onPointerTap(function (t) { return t.isPickable; }); _this._currentPickPoint = e, _this._pointerDownTime = Date.now(), e != null && LongPressMesh.indexOf(e.type) != -1 && (_this._staringPointerTime = Date.now(), _this._pickedMeshID = e.id, _this._pickedMeshType = e.type, window.setTimeout(function () { e = _this.onPointerTap(function (t) { return t.isPickable && t.xtype == _this._pickedMeshType && t.xid == _this._pickedMeshID; }), e !== null && Date.now() - _this._staringPointerTime > _this._longPressDelay && !_this.scene._inputManager._isPointerSwiping() && _this.scene._inputManager._totalPointersPressed !== 0 && (_this._staringPointerTime = 0, _this.emit("longPress", e)); }, _this._longPressDelay)); }); E(_assertThisInitialized(_this), "onDoubleTap", function () { var e = _this.onPointerTap(void 0); e != null && _this.emit("pointDoubleTap", e); }); _this.manager = e, _this.scene = e.Scene, _this.registerEvent(), _this._currentPickPoint = null, _this._pickedMeshType = null; return _this; } _createClass(StaticMeshEvent, [{ key: "onPointerTap", value: function onPointerTap(e) { var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1; var n, o; var r = new BABYLON.PickingInfo(); if (t) { var a = this.scene.multiPick(this.scene.pointerX, this.scene.pointerY, e, void 0, void 0); a && a.length > 1 ? r = a[1] : a && (r = a[0]); } else r = this.scene.pick(this.scene.pointerX, this.scene.pointerY, e, !1, null); if (r.hit) { var _a = (n = r == null ? void 0 : r.pickedPoint) == null ? void 0 : n.asArray(); if (_a) { var _a2 = _slicedToArray(_a, 3), s = _a2[0], l = _a2[1], u = _a2[2], c = xversePosition2Ue4({ x: s, y: l, z: u }); return { name: (o = r.pickedMesh) == null ? void 0 : o.name, type: r.pickedMesh.xtype, id: r.pickedMesh.xid, point: c }; } } return null; } }]); return StaticMeshEvent; }(EventEmitter); var RotationEvent = /*#__PURE__*/function () { function RotationEvent(e) { var _this = this; _classCallCheck(this, RotationEvent); E(this, "touchStartX"); E(this, "touchStartY"); E(this, "handelResize"); E(this, "_room"); E(this, "_canvas"); E(this, "handleTouchStart", function (e) { var t = e.touches[0]; _this.touchStartX = t.pageX, _this.touchStartY = t.pageY, _this._room.emit("touchStart", { event: e }); }); E(this, "handleMouseDown", function (e) { _this.touchStartX = e.pageX, _this.touchStartY = e.pageY; }); E(this, "handleMouseMove", function (e) { if (!_this.touchStartX || !_this.touchStartY) return; var t = e.pageX, r = e.pageY, n = t - _this.touchStartX, o = r - _this.touchStartY, a = _this._room.options.canvas.offsetHeight, s = _this._room.options.canvas.offsetWidth; var l = 2 * o / a, u = 2 * n / s; l > 1 && (l = 1), u > 1 && (u = 1), _this._room.actionsHandler.rotate({ pitch: l, yaw: u }), _this.touchStartX = t, _this.touchStartY = r; }); E(this, "handleMouseUp", function () { _this.touchStartX = void 0, _this.touchStartY = void 0; }); E(this, "handleTouchMove", function (e) { if (!_this.touchStartX || !_this.touchStartY) return; var t = e.touches[0], r = t.pageX, n = t.pageY, o = r - _this.touchStartX, a = n - _this.touchStartY, s = _this._room.options.canvas.offsetHeight, l = _this._room.options.canvas.offsetWidth; var u = 2 * a / s, c = 2 * o / l; u > 1 && (u = 1), c > 1 && (c = 1), _this._room.actionsHandler.rotate({ pitch: u, yaw: c }), _this.touchStartX = r, _this.touchStartY = n, _this._room.emit("touchMove", { pitch: u, yaw: c, event: e }); }); E(this, "handleTouchEnd", function (e) { _this._room.emit("touchEnd", { event: e }); }); this._room = e, this._canvas = e.canvas, this.handelResize = this.reiszeChange(); } _createClass(RotationEvent, [{ key: "init", value: function init() { this._canvas.addEventListener("touchstart", this.handleTouchStart), this._canvas.addEventListener("touchmove", this.handleTouchMove), this._canvas.addEventListener("touchend", this.handleTouchEnd), this._room.scene.preventDefaultOnPointerDown = !1, this._room.scene.preventDefaultOnPointerUp = !1, this._canvas.addEventListener("mousedown", this.handleMouseDown), this._canvas.addEventListener("mousemove", this.handleMouseMove), this._canvas.addEventListener("mouseup", this.handleMouseUp); } }, { key: "clear", value: function clear() { this._canvas.removeEventListener("touchstart", this.handleTouchStart), this._canvas.removeEventListener("touchmove", this.handleTouchMove), this._canvas.removeEventListener("touchend", this.handleTouchEnd), this._canvas.removeEventListener("mousedown", this.handleMouseDown), this._canvas.removeEventListener("mousemove", this.handleMouseMove), this._canvas.removeEventListener("mouseup", this.handleMouseUp); } }, { key: "reiszeChange", value: function reiszeChange() { window.addEventListener("resize", function () {}); } }]); return RotationEvent; }(); var EventsController = /*#__PURE__*/function () { function EventsController(e) { var _this = this; _classCallCheck(this, EventsController); E(this, "staticmeshEvent"); E(this, "rotationEvent"); E(this, "resize", function () { _this.room.sceneManager.cameraComponent.cameraFovChange(_this.room.sceneManager.yuvInfo); }); E(this, "clickEvent", function (e) { var t = e.point, r = e.name, n = e.type, o = e.id; logger$1.debug("pointEvent", e), _this.room.proxyEvents("pointTap", { point: t, meshName: r, type: n, id: o }), _this.room.proxyEvents("_coreClick", e); }); E(this, "longPressEvent", function (e) { _this.room.proxyEvents("_corePress", e); }); E(this, "handleActionResponseTimeout", function (_ref) { var e = _ref.error, t = _ref.event; _this.room.proxyEvents("actionResponseTimeout", { error: e, event: t }); }); E(this, "handleNetworkStateChange", function (e) { var t = e.state, r = e.count; t == "reconnecting" ? _this.room.proxyEvents("reconnecting", { count: r || 1 }) : t === "reconnected" ? (_this.room.networkController.rtcp.workers.reset(), _this.room.proxyEvents("reconnected"), _this.room.afterReconnected()) : t === "disconnected" && _this.room.proxyEvents("disconnected"); }); this.room = e, this.staticmeshEvent = new StaticMeshEvent(this.room.sceneManager), this.rotationEvent = new RotationEvent(e); } _createClass(EventsController, [{ key: "bindEvents", value: function bindEvents() { window.addEventListener("orientationchange" in window ? "orientationchange" : "resize", this.resize), this.staticmeshEvent.on("pointTap", this.clickEvent), this.staticmeshEvent.on("longPress", this.longPressEvent), this.rotationEvent.init(), eventsManager.on("actionResponseTimeout", this.handleActionResponseTimeout), this.room.networkController.on("stateChanged", this.handleNetworkStateChange); } }, { key: "clearEvents", value: function clearEvents() { window.removeEventListener("orientationchange" in window ? "orientationchange" : "resize", this.resize), this.staticmeshEvent.off("pointTap", this.clickEvent), this.staticmeshEvent.off("longPress", this.longPressEvent), eventsManager.off("actionResponseTimeout", this.handleActionResponseTimeout), this.room.networkController.off("stateChanged", this.handleNetworkStateChange), this.rotationEvent.clear(); } }]); return EventsController; }(); var Panorama = /*#__PURE__*/function () { function Panorama(e) { var _this = this; _classCallCheck(this, Panorama); E(this, "_actived", !1); E(this, "handleReceivePanorama", /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e, t) { var r, n, _this$room$currentSta, o, a, s, _ref2, l; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: logger$1.warn("handle panorama", e.uuid, e.pos, e.finished); r = { data: e.data, pose: { position: e.pos } }, n = _this.room.sceneManager; _this.room.networkController.rtcp.workers.changePanoMode(!0); _context.next = 5; return n.materialComponent.changePanoImg(0, r); case 5: if (!e.finished) { _context.next = 23; break; } _context.next = 8; return n.changePanoShaderForLowModel(0); case 8: _this.room.isPano = !0; _this._actived = !0; if (!t) { _context.next = 14; break; } _this.room.sceneManager.cameraComponent.changeToFirstPersonView({ position: t.position, rotation: t.angle }); _context.next = 23; break; case 14: _this$room$currentSta = _this.room.currentState, o = _this$room$currentSta.skinId, a = _this$room$currentSta.pathName; if (!(!o || !a)) { _context.next = 17; break; } return _context.abrupt("return"); case 17: _context.next = 19; return _this.room.modelManager.findRoute(o, a); case 19: s = _context.sent; _ref2 = util.getRandomItem(s.birthPointList) || {}; l = _ref2.camera; l && _this.room.sceneManager.cameraComponent.changeToFirstPersonView(le(oe({}, l), { rotation: l.angle })); case 23: case "end": return _context.stop(); } } }, _callee); })); return function (_x, _x2) { return _ref.apply(this, arguments); }; }()); this.room = e; } _createClass(Panorama, [{ key: "actived", get: function get() { return this._actived; } }, { key: "bindListener", value: function bindListener(e) { var _this2 = this; this.room.networkController.rtcp.workers.registerFunction("panorama", function (r) { logger$1.warn("receive panorama", r.uuid, r.pos), r.uuid && eventsManager.remove(r.uuid, Codes.Success, r, !0), _this2.room.isFirstDataUsed || (_this2.room.isFirstDataUsed = !0, _this2.handleReceivePanorama(r, _this2.room.options.camera).then(e)); }); } }, { key: "access", value: function access(e, t, r) { var _this3 = this; var n = e.camera, o = e.player, a = e.attitude, s = e.areaName, l = e.pathName, u = e.tag; return this.room.actionsHandler.requestPanorama({ camera: n, player: o, attitude: a, areaName: s, pathName: l, tag: u }, t, r).then(function (c) { return _this3.handleReceivePanorama(c, o); }); } }, { key: "exit", value: function exit(e) { var _this4 = this; var t = e.camera, r = e.player, n = e.attitude, o = e.areaName, a = e.pathName; return this.room.networkController.rtcp.workers.changePanoMode(!1), this.room.actionsHandler.changeRotationRenderType({ renderType: RenderType.RotationVideo, player: r, camera: t, attitude: n, areaName: o, pathName: a }).then(function () { return _this4.handleExitPanorama(); }).catch(function (s) { return _this4.room.networkController.rtcp.workers.changePanoMode(!0), Promise.reject(s); }); } }, { key: "handleExitPanorama", value: function handleExitPanorama() { var e, t, r, n, o, a; this.room.isPano = !1, this._actived = !1, (n = (e = this.room.sceneManager) == null ? void 0 : e.cameraComponent) == null || n.forceChangeSavedCameraPose({ position: (t = this.room._currentClickingState) == null ? void 0 : t.camera.position, rotation: (r = this.room._currentClickingState) == null ? void 0 : r.camera.angle }), this.room.sceneManager.changeVideoShaderForLowModel(), (a = (o = this.room.sceneManager) == null ? void 0 : o.cameraComponent) == null || a.changeToThirdPersonView(); } }]); return Panorama; }(); var BREATH_POINT_TYPE = "debugBreathPoint", TAP_BREATH_POINT_TYPE = "debugTapBreathPoint", DEFAULT_SEARCH_RANGE = 1e3; var Debug = /*#__PURE__*/function () { function Debug(e) { _classCallCheck(this, Debug); E(this, "isShowNearbyBreathPoints", !1); E(this, "isShowTapBreathPoints", !1); E(this, "isSceneShading", !0); E(this, "searchRange", DEFAULT_SEARCH_RANGE); E(this, "nearbyBreathPointListening", !1); E(this, "tapBreathPointListening", !1); E(this, "dumpStreamTimer", 0); this.room = e; } _createClass(Debug, [{ key: "toggleStats", value: function toggleStats() { return this.room.stats.isShow ? this.room.stats.hide() : this.room.stats.show(); } }, { key: "toggleNearbyBreathPoint", value: function toggleNearbyBreathPoint() { var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SEARCH_RANGE; this.searchRange = e, this.isShowNearbyBreathPoints = !this.isShowNearbyBreathPoints, this.isShowNearbyBreathPoints ? (this.getPointsAndRender(), this.setupNearbyBreathPointListener()) : this.room.breathPointManager.clearBreathPoints(BREATH_POINT_TYPE); } }, { key: "toggleTapBreathPoint", value: function toggleTapBreathPoint() { this.isShowTapBreathPoints = !this.isShowTapBreathPoints, this.isShowTapBreathPoints ? this.setupTapPointListener() : this.room.breathPointManager.clearBreathPoints(TAP_BREATH_POINT_TYPE); } }, { key: "dumpStream", value: function dumpStream(e) { var _this = this; var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10 * 1e3; if (this.dumpStreamTimer) throw new Error("dumpStream running"); this.room.networkController.rtcp.workers.saveframe = !0, this.dumpStreamTimer = window.setTimeout(function () { _this.room.networkController.rtcp.workers.SaveMediaStream = !0, _this.dumpStreamTimer = 0, e && e(); }, t); } }, { key: "toggleSceneshading", value: function toggleSceneshading() { this.isSceneShading = !this.isSceneShading, this.isSceneShading ? this.room.sceneManager.changeVideoShaderForLowModel() : this.room.sceneManager.changeDefaultShaderForLowModel(); } }, { key: "setupTapPointListener", value: function setupTapPointListener() { var _this2 = this; this.tapBreathPointListening || (this.tapBreathPointListening = !0, this.room.on("_coreClick", function (_ref) { var e = _ref.point; _this2.isShowTapBreathPoints && _this2.renderTapBreathPoint({ id: "tapToint", position: e }); })); } }, { key: "renderTapBreathPoint", value: function renderTapBreathPoint(_ref2) { var e = _ref2.position, t = _ref2.id; var r; if (r = this.room.breathPointManager.breathPoints.get(t)) { r.position = e; return; } this.room.breathPointManager.addBreathPoint({ id: t, position: e, type: TAP_BREATH_POINT_TYPE, size: .8, forceLeaveGround: !0, billboardMode: !0, rotation: Math.abs(e.z) < 20 ? { pitch: 90, yaw: 0, roll: 0 } : { pitch: 0, yaw: 270, roll: 0 } }); } }, { key: "setupNearbyBreathPointListener", value: function setupNearbyBreathPointListener() { var _this3 = this; var e; this.nearbyBreathPointListening || (this.nearbyBreathPointListening = !0, (e = this.room._userAvatar) == null || e.on("stopMoving", function () { _this3.isShowNearbyBreathPoints && _this3.getPointsAndRender(); })); } }, { key: "getPointsAndRender", value: function () { var _getPointsAndRender = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { var _this4 = this; var r, n, e, t; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: e = this.searchRange; _context.t1 = (r = this.room._userAvatar) == null ? void 0 : r.position; if (!_context.t1) { _context.next = 6; break; } _context.next = 5; return this.getNeighborPoints({ point: (n = this.room._userAvatar) == null ? void 0 : n.position, containSelf: !0, searchRange: e }); case 5: _context.t1 = _context.sent; case 6: _context.t0 = _context.t1; if (_context.t0) { _context.next = 9; break; } _context.t0 = []; case 9: t = _context.t0; this.room.breathPointManager.breathPoints.forEach(function (o) { !!t.find(function (s) { return JSON.stringify(s) === o._id; }) || _this4.room.breathPointManager.clearBreathPoints(o._id); }), t.forEach(function (o) { var a = JSON.stringify(o); _this4.room.breathPointManager.breathPoints.get(a) || _this4.room.breathPointManager.addBreathPoint({ id: a, position: o, type: BREATH_POINT_TYPE, rotation: { pitch: 90, yaw: 0, roll: 0 }, forceLeaveGround: !0 }); }); case 11: case "end": return _context.stop(); } } }, _callee, this); })); function getPointsAndRender() { return _getPointsAndRender.apply(this, arguments); } return getPointsAndRender; }() }, { key: "getNeighborPoints", value: function getNeighborPoints(e) { var t = e.point, _e$containSelf = e.containSelf, r = _e$containSelf === void 0 ? !1 : _e$containSelf, _e$searchRange = e.searchRange, n = _e$searchRange === void 0 ? 500 : _e$searchRange; return this.room.actionsHandler.getNeighborPoints({ point: t, containSelf: r, searchRange: n }); } }]); return Debug; }(); function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Xverse_Room = /*#__PURE__*/function (_EventEmitter) { _inherits(Xverse_Room, _EventEmitter); var _super = _createSuper$1(Xverse_Room); function Xverse_Room(e) { var _this; _classCallCheck(this, Xverse_Room); _this = _super.call(this); E(_assertThisInitialized(_this), "disableAutoTurn", !1); E(_assertThisInitialized(_this), "options"); E(_assertThisInitialized(_this), "_currentNetworkOptions"); E(_assertThisInitialized(_this), "lastSkinId"); E(_assertThisInitialized(_this), "debug"); E(_assertThisInitialized(_this), "isFirstDataUsed", !1); E(_assertThisInitialized(_this), "userId", null); E(_assertThisInitialized(_this), "pathManager", new PathManager()); E(_assertThisInitialized(_this), "networkController"); E(_assertThisInitialized(_this), "_startTime", Date.now()); E(_assertThisInitialized(_this), "canvas"); E(_assertThisInitialized(_this), "modelManager"); E(_assertThisInitialized(_this), "eventsController"); E(_assertThisInitialized(_this), "panorama"); E(_assertThisInitialized(_this), "engineProxy"); E(_assertThisInitialized(_this), "_id"); E(_assertThisInitialized(_this), "skinList", []); E(_assertThisInitialized(_this), "isHost", !1); E(_assertThisInitialized(_this), "avatarManager", new XverseAvatarManager(_assertThisInitialized(_this))); E(_assertThisInitialized(_this), "effectManager", new XverseEffectManager(_assertThisInitialized(_this))); E(_assertThisInitialized(_this), "sceneManager"); E(_assertThisInitialized(_this), "scene"); E(_assertThisInitialized(_this), "breathPointManager"); E(_assertThisInitialized(_this), "_currentState"); E(_assertThisInitialized(_this), "joined", !1); E(_assertThisInitialized(_this), "disableRotate", !1); E(_assertThisInitialized(_this), "isPano", !1); E(_assertThisInitialized(_this), "movingByClick", !0); E(_assertThisInitialized(_this), "camera", new Camera(_assertThisInitialized(_this))); E(_assertThisInitialized(_this), "stats", new Stats(_assertThisInitialized(_this))); E(_assertThisInitialized(_this), "isUpdatedRawYUVData", !1); E(_assertThisInitialized(_this), "actionsHandler", new ActionsHandler(_assertThisInitialized(_this))); E(_assertThisInitialized(_this), "_currentClickingState", null); E(_assertThisInitialized(_this), "signal", new Signal(_assertThisInitialized(_this))); E(_assertThisInitialized(_this), "firstFrameTimestamp"); E(_assertThisInitialized(_this), "receiveRtcData", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { var e, t, r, n; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: logger$1.info("Invoke receiveRtcData"); e = !1, t = !1, r = !1, n = !1; return _context.abrupt("return", _this.viewMode === "serverless" ? (logger$1.warn("set view mode to serverless"), _this.setViewMode("observer").then(function () { return _assertThisInitialized(_this); }, function () { return _assertThisInitialized(_this); })) : new Promise(function (o) { var a = _this.networkController.rtcp.workers; a.registerFunction("signal", function (s) { _this.signal.handleSignal(s); }), a.registerFunction("stream", function (s) { var l; if (_this.emit("streamTimestamp", { timestamp: Date.now() }), t || (t = !0, logger$1.info("Invoke stream event")), s.stream) { r || (r = !0, logger$1.info("Invoke updateRawYUVData")), _this.isUpdatedRawYUVData = !1; var u = (l = _this._currentState.skin) == null ? void 0 : l.fov; _this.sceneManager.materialComponent.updateRawYUVData(s.stream, s.width, s.height, u), _this.isUpdatedRawYUVData = !0; } e || (logger$1.info("Invoke isAfterRenderRegistered"), e = !0, _this.scene.registerAfterRender(function () { _this.engineProxy.frameRenderNumber >= 2 && (n || (n = !0, logger$1.info("Invoke registerAfterRender")), _this.isFirstDataUsed || (logger$1.info("Invoke isStreamAvailable"), _this.isFirstDataUsed = !0, _this.firstFrameTimestamp = Date.now(), o(_assertThisInitialized(_this)), _this.afterJoinRoom())); })); }), _this.panorama.bindListener(function () { o(_assertThisInitialized(_this)), _this.afterJoinRoom(); }), a.registerFunction("reconnectedFrame", function () {}), logger$1.info("Invoke decoderWorker.postMessage"), a.decoderWorker.postMessage({ t: 5 }); })); case 3: case "end": return _context.stop(); } } }, _callee); }))); E(_assertThisInitialized(_this), "moveToExtra", ""); _this.options = e, _this.options.wsServerUrl || (_this.options.wsServerUrl = SERVER_URLS.DEV), _this.modelManager = ModelManager.getInstance(e.appId, e.releaseId), _this.updateReporter(); var n = e; n.canvas; var r = Oe(n, ["canvas"]); logger$1.infoAndReportMeasurement({ metric: "startJoinRoomAt", startTime: Date.now(), group: "joinRoom", extra: r, value: 0 }); return _this; } _createClass(Xverse_Room, [{ key: "currentNetworkOptions", get: function get() { return this._currentNetworkOptions; } }, { key: "viewMode", get: function get() { var e; return ((e = this._currentState) == null ? void 0 : e.viewMode) || "full"; } }, { key: "id", get: function get() { return this._id; } }, { key: "skinId", get: function get() { return this._currentState.skinId; } }, { key: "skin", get: function get() { return this._currentState.skin; } }, { key: "sessionId", get: function get() { return this.currentNetworkOptions.sessionId; } }, { key: "pictureQualityLevel", get: function get() { return this.currentState.pictureQualityLevel; } }, { key: "avatars", get: function get() { return Array.from(this.avatarManager.avatars.values()); } }, { key: "currentState", get: function get() { var e; return le(oe({}, this._currentState), { state: (e = this.networkController) == null ? void 0 : e._state }); } }, { key: "_userAvatar", get: function get() { var _this2 = this; return this.avatars.find(function (e) { return e.userId === _this2.userId; }); } }, { key: "tvs", get: function get() { return this.engineProxy._tvs; } }, { key: "tv", get: function get() { return this.tvs[0]; } }, { key: "currentClickingState", get: function get() { return this._currentClickingState; } }, { key: "afterJoinRoomHook", value: function afterJoinRoomHook() {} }, { key: "beforeJoinRoomResolveHook", value: function beforeJoinRoomResolveHook() {} }, { key: "afterReconnectedHook", value: function afterReconnectedHook() {} }, { key: "handleSignalHook", value: function handleSignalHook(e) {} }, { key: "skinChangedHook", value: function skinChangedHook() {} }, { key: "beforeStartGameHook", value: function () { var _beforeStartGameHook = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2(e) { return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: case "end": return _context2.stop(); } } }, _callee2); })); function beforeStartGameHook(_x) { return _beforeStartGameHook.apply(this, arguments); } return beforeStartGameHook; }() }, { key: "loadAssetsHook", value: function loadAssetsHook() {} }, { key: "afterUserAvatarLoadedHook", value: function afterUserAvatarLoadedHook() {} }, { key: "audienceViewModeHook", value: function audienceViewModeHook() {} }, { key: "setViewModeToObserver", value: function setViewModeToObserver() {} }, { key: "handleVehicleHook", value: function handleVehicleHook(e) {} }, { key: "updateReporter", value: function updateReporter() { var _this$options = this.options, e = _this$options.avatarId, t = _this$options.skinId, r = _this$options.userId, n = _this$options.roomId, o = _this$options.role, a = _this$options.appId, s = _this$options.wsServerUrl; reporter$1.updateHeader({ userId: r }), reporter$1.updateBody({ roomId: n, role: o, skinId: t, avatarId: e, appId: a, wsServerUrl: s }); } }, { key: "initRoom", value: function () { var _initRoom2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3() { var _this$options$timeout, e; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _this$options$timeout = this.options.timeout, e = _this$options$timeout === void 0 ? DEFAULT_JOINROOM_TIMEOUT : _this$options$timeout; if (!util.isSupported()) { _context3.next = 5; break; } return _context3.abrupt("return", this._initRoom()._timeout(e, new TimeoutError("initRoom timeout"))); case 5: return _context3.abrupt("return", Promise.reject(new UnsupportedError())); case 6: case "end": return _context3.stop(); } } }, _callee3, this); })); function initRoom() { return _initRoom2.apply(this, arguments); } return initRoom; }() }, { key: "_initRoom", value: function () { var _initRoom3 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4() { var e, _this$options2, t, r, n, o, a, s, l, u, c, _this$options2$isAllS, h, f, d, _, g, m, v, _this$options2$firend, y, _this$options2$syncBy, b, T, _this$options2$attitu, C, A, _this$options2$viewMo, S, P, R, M, _this$options2$hasAva, x, _this$options2$syncTo, I, _this$options2$priori, w, _this$options2$remove, O, D, F, V, N; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: e = this.validateOptions(this.options); if (!e) { _context4.next = 3; break; } return _context4.abrupt("return", (logger$1.error("initRoom param error", e), Promise.reject(e))); case 3: _this$options2 = this.options, t = _this$options2.canvas, r = _this$options2.avatarId, n = _this$options2.skinId, o = _this$options2.userId, a = _this$options2.wsServerUrl, s = _this$options2.role, l = _this$options2.token, u = _this$options2.pageSession, c = _this$options2.rotationRenderType, _this$options2$isAllS = _this$options2.isAllSync, h = _this$options2$isAllS === void 0 ? !1 : _this$options2$isAllS, f = _this$options2.appId, d = _this$options2.camera, _ = _this$options2.player, g = _this$options2.avatarComponents, m = _this$options2.nickname, v = _this$options2.avatarScale, _this$options2$firend = _this$options2.firends, y = _this$options2$firend === void 0 ? [] : _this$options2$firend, _this$options2$syncBy = _this$options2.syncByEvent, b = _this$options2$syncBy === void 0 ? !1 : _this$options2$syncBy, T = _this$options2.areaName, _this$options2$attitu = _this$options2.attitude, C = _this$options2$attitu === void 0 ? MotionType.Walk : _this$options2$attitu, A = _this$options2.pathName, _this$options2$viewMo = _this$options2.viewMode, S = _this$options2$viewMo === void 0 ? "full" : _this$options2$viewMo, P = _this$options2.person, R = _this$options2.roomId, M = _this$options2.roomTypeId, _this$options2$hasAva = _this$options2.hasAvatar, x = _this$options2$hasAva === void 0 ? !1 : _this$options2$hasAva, _this$options2$syncTo = _this$options2.syncToOthers, I = _this$options2$syncTo === void 0 ? !1 : _this$options2$syncTo, _this$options2$priori = _this$options2.prioritySync, w = _this$options2$priori === void 0 ? !1 : _this$options2$priori, _this$options2$remove = _this$options2.removeWhenDisconnected, O = _this$options2$remove === void 0 ? !0 : _this$options2$remove, D = _this$options2.extra; this.setCurrentNetworkOptions({ avatarId: r, skinId: n, roomId: R, userId: o, wsServerUrl: a, role: s, token: l, pageSession: u, rotationRenderType: c, isAllSync: h, appId: f, camera: d, player: _, avatarComponents: g, nickname: m, avatarScale: v, firends: y, syncByEvent: b, areaName: T, attitude: C, pathName: A, person: P, roomTypeId: M, hasAvatar: x, syncToOthers: I, prioritySync: w, extra: D, removeWhenDisconnected: O }); this.userId = o; this.canvas = t; T && (this.pathManager.currentArea = T); this.networkController = new NetworkController(this); this.setCurrentState({ areaName: T, pathName: A, attitude: C, speed: 0, viewMode: S, state: this.networkController._state, skinId: n }); _context4.prev = 10; _context4.next = 13; return Promise.all([this.initNetwork(), this.initConfig(), this.initWasm()]); case 13: logger$1.info("network config wasm all ready, start to create game"); _context4.next = 16; return this.requestCreateRoom({ skinId: n }); case 16: F = _context4.sent; V = F.routeList.find(function (L) { return L.areaName === T; }); N = ((V == null ? void 0 : V.step) || 7.5) * 30; this.updateCurrentState({ skin: F, skinId: F.id, versionId: F.versionId, speed: N }); _context4.next = 22; return this.initEngine(F); case 22: _context4.next = 27; break; case 24: _context4.prev = 24; _context4.t0 = _context4["catch"](10); return _context4.abrupt("return", Promise.reject(_context4.t0)); case 27: this.beforeJoinRoomResolve(); return _context4.abrupt("return", this.receiveRtcData()); case 29: case "end": return _context4.stop(); } } }, _callee4, this, [[10, 24]]); })); function _initRoom() { return _initRoom3.apply(this, arguments); } return _initRoom; }() }, { key: "beforeJoinRoomResolve", value: function beforeJoinRoomResolve() { this.setupStats(), this.eventsController = new EventsController(this), this.eventsController.bindEvents(), this.panorama = new Panorama(this), this.beforeJoinRoomResolveHook(); } }, { key: "afterJoinRoom", value: function afterJoinRoom() { this.joined = !0, this.viewMode === "observer" && this.setViewModeToObserver(), logger$1.infoAndReportMeasurement({ tag: this.viewMode, value: this.firstFrameTimestamp - this._startTime, startTime: Date.now(), metric: "joinRoom" }), this.camera.initialFov = this.sceneManager.cameraComponent.getCameraFov(), this.stats.on("stats", function (_ref2) { var e = _ref2.stats; reporter$1.report("stats", oe({}, e)); }), this.debug = new Debug(this), this.afterJoinRoomHook(); } }, { key: "afterReconnected", value: function afterReconnected() { this.avatarManager.clearOtherUsers(), this.afterReconnectedHook(); } }, { key: "leave", value: function leave() { var e, t; return logger$1.info("Invoke room.leave"), (e = this.eventsController) == null || e.clearEvents(), (t = this.networkController) == null || t.quit(), this; } }, { key: "validateOptions", value: function validateOptions(e) { var _ref3 = e || {}, t = _ref3.canvas, r = _ref3.avatarId, n = _ref3.skinId, o = _ref3.userId, a = _ref3.role; _ref3.roomId; var l = _ref3.token, u = _ref3.appId; _ref3.avatarComponents; var h = []; t instanceof HTMLCanvasElement || h.push(new ParamError$1("`canvas` must be instanceof of HTMLCanvasElement")); (!o || typeof o != "string") && h.push(new ParamError$1("`userId` must be string")); (!l || typeof l != "string") && h.push(new ParamError$1("`token` must be string")); (!u || typeof u != "string") && h.push(new ParamError$1("`appId` must be string")); a == "audience" || (!r || !n) && h.push(new ParamError$1("`avatarId` and `skinId` is required when create room")); return h[0]; } }, { key: "initNetwork", value: function () { var _initNetwork = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5() { var e; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: if (!(this.viewMode === "serverless")) { _context5.next = 2; break; } return _context5.abrupt("return", Promise.resolve()); case 2: e = Date.now(); _context5.prev = 3; _context5.next = 6; return this.networkController.connect()._timeout(8e3, new InitNetworkTimeoutError()); case 6: logger$1.infoAndReportMeasurement({ metric: "networkInitAt", startTime: this._startTime, group: "joinRoom" }); logger$1.infoAndReportMeasurement({ metric: "networkInitCost", startTime: e, group: "joinRoom" }); _context5.next = 13; break; case 10: _context5.prev = 10; _context5.t0 = _context5["catch"](3); throw logger$1.infoAndReportMeasurement({ metric: "networkInitAt", startTime: e, group: "joinRoom", error: _context5.t0 }), _context5.t0; case 13: case "end": return _context5.stop(); } } }, _callee5, this, [[3, 10]]); })); function initNetwork() { return _initNetwork.apply(this, arguments); } return initNetwork; }() }, { key: "initConfig", value: function () { var _initConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6() { var e; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: e = Date.now(); _context6.prev = 1; _context6.next = 4; return this.modelManager.getApplicationConfig()._timeout(8e3, new InitConfigTimeoutError()); case 4: logger$1.infoAndReportMeasurement({ metric: "configInitAt", startTime: this._startTime, group: "joinRoom" }); logger$1.infoAndReportMeasurement({ metric: "configInitCost", startTime: e, group: "joinRoom" }); _context6.next = 11; break; case 8: _context6.prev = 8; _context6.t0 = _context6["catch"](1); throw logger$1.infoAndReportMeasurement({ metric: "configInitAt", startTime: e, group: "joinRoom", error: _context6.t0 }), _context6.t0; case 11: case "end": return _context6.stop(); } } }, _callee6, this, [[1, 8]]); })); function initConfig() { return _initConfig.apply(this, arguments); } return initConfig; }() }, { key: "initEngine", value: function () { var _initEngine = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee7(e) { var t, n; return regenerator.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: t = Date.now(); _context7.prev = 1; this.engineProxy = new EngineProxy(this); _context7.next = 5; return this.engineProxy.initEngine(e); case 5: logger$1.infoAndReportMeasurement({ metric: "webglInitAt", startTime: this._startTime, group: "joinRoom" }); logger$1.infoAndReportMeasurement({ metric: "webglInitCost", startTime: t, group: "joinRoom" }); return _context7.abrupt("return"); case 10: _context7.prev = 10; _context7.t0 = _context7["catch"](1); n = _context7.t0; return _context7.abrupt("return", (_context7.t0.code !== Codes.InitEngineTimeout && (n = new InitEngineError()), logger$1.error(_context7.t0), logger$1.infoAndReportMeasurement({ metric: "webglInitAt", startTime: t, group: "joinRoom", error: n }), Promise.reject(n))); case 14: case "end": return _context7.stop(); } } }, _callee7, this, [[1, 10]]); })); function initEngine(_x2) { return _initEngine.apply(this, arguments); } return initEngine; }() }, { key: "initWasm", value: function () { var _initWasm = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee8() { var _this3 = this; var e; return regenerator.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: if (!(this.viewMode === "serverless")) { _context8.next = 2; break; } return _context8.abrupt("return", Promise.resolve()); case 2: e = Date.now(); _context8.prev = 3; _context8.next = 6; return this.networkController.rtcp.workers.init(this.options.resolution)._timeout(8e3, new InitDecoderTimeoutError()); case 6: this.networkController.rtcp.workers.registerFunction("error", function (t) { logger$1.error("decode error", t); var r = t.code, n = t.message; _this3.emit("error", { code: r, msg: n }); }); logger$1.infoAndReportMeasurement({ metric: "wasmInitAt", group: "joinRoom", startTime: this._startTime }); logger$1.infoAndReportMeasurement({ metric: "wasmInitCost", group: "joinRoom", startTime: e }); eventsManager.on("traceId", function (t) { _this3.networkController.rtcp.workers.onTraceId(t); }); _context8.next = 15; break; case 12: _context8.prev = 12; _context8.t0 = _context8["catch"](3); throw logger$1.infoAndReportMeasurement({ metric: "wasmInitAt", group: "joinRoom", startTime: e, error: _context8.t0 }), _context8.t0; case 15: case "end": return _context8.stop(); } } }, _callee8, this, [[3, 12]]); })); function initWasm() { return _initWasm.apply(this, arguments); } return initWasm; }() }, { key: "requestCreateRoom", value: function () { var _requestCreateRoom = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee9(_ref4) { var e, t, r, _ref5, n, o, _yield$this$networkCo, _r, _n, _o, a, s; return regenerator.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: e = _ref4.skinId; if (!e) { _context9.next = 11; break; } _context9.next = 4; return this.getSkin(e); case 4: t = _context9.sent; _context9.next = 7; return this.modelManager.findRoute(e, this.options.pathName); case 7: r = _context9.sent; this.updateCurrentNetworkOptions({ areaName: r.areaName, attitude: r.attitude, versionId: t.versionId }); _ref5 = util.getRandomItem(r.birthPointList) || this.options, n = _ref5.camera, o = _ref5.player; this.options.camera || this.updateCurrentNetworkOptions({ camera: n }), this.options.player || this.updateCurrentNetworkOptions({ player: o }); case 11: if (!(this.viewMode === "serverless")) { _context9.next = 13; break; } return _context9.abrupt("return", t); case 13: _context9.prev = 13; _context9.next = 16; return this.beforeStartGameHook(this.options); case 16: _context9.next = 18; return this.networkController.startGame(); case 18: _yield$this$networkCo = _context9.sent; _r = _yield$this$networkCo.room_id; _n = _yield$this$networkCo.data; _o = _yield$this$networkCo.session_id; this._id = _r; a = JSON.parse(_n); this.isHost = a.IsHost, e = a.SkinID || e; _context9.next = 27; return this.getSkin(e); case 27: s = _context9.sent; return _context9.abrupt("return", (this.updateCurrentNetworkOptions({ roomId: _r, sessionId: _o }), reporter$1.updateBody({ roomId: _r, skinId: e, serverSession: _o }), s)); case 31: _context9.prev = 31; _context9.t0 = _context9["catch"](13); throw logger$1.error("Request create room error", _context9.t0), _context9.t0; case 34: case "end": return _context9.stop(); } } }, _callee9, this, [[13, 31]]); })); function requestCreateRoom(_x3) { return _requestCreateRoom.apply(this, arguments); } return requestCreateRoom; }() }, { key: "pause", value: function pause() { return this.engineProxy.pause(); } }, { key: "resume", value: function resume() { return this.engineProxy.resume(); } }, { key: "reconnect", value: function reconnect() { this.networkController.reconnect(); } }, { key: "setViewMode", value: function () { var _setViewMode = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee10(e) { return regenerator.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: case "end": return _context10.stop(); } } }, _callee10); })); function setViewMode(_x4) { return _setViewMode.apply(this, arguments); } return setViewMode; }() }, { key: "handleRepetLogin", value: function handleRepetLogin() { logger$1.warn("receive " + Codes.RepeatLogin + " for repeat login"), this.emit("repeatLogin"), reporter$1.disable(), this.networkController.quit(); } }, { key: "setPictureQualityLevel", value: function setPictureQualityLevel(e) { var t = { high: EImageQuality.high, low: EImageQuality.low, average: EImageQuality.mid }; return this.updateCurrentState({ pictureQualityLevel: e }), this.sceneManager.setImageQuality(t[e]); } }, { key: "getSkin", value: function () { var _getSkin = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee11(e) { var t, n; return regenerator.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: t = null; _context11.next = 3; return this.modelManager.getSkinsList(); case 3: t = (this.skinList = _context11.sent).find(function (n) { return n.id === e || n.id === e; }); if (!t) { _context11.next = 6; break; } return _context11.abrupt("return", t); case 6: n = "skin is invalid: skinId: ".concat(e); return _context11.abrupt("return", Promise.reject(new ParamError$1(n))); case 8: case "end": return _context11.stop(); } } }, _callee11, this); })); function getSkin(_x5) { return _getSkin.apply(this, arguments); } return getSkin; }() }, { key: "setupStats", value: function setupStats() { this.stats.assign({ roomId: this.id, userId: this.userId }), setInterval(this.engineProxy.updateStats, 1e3); } }, { key: "proxyEvents", value: function proxyEvents(e, t) { this.emit(e, t); } }, { key: "setCurrentNetworkOptions", value: function setCurrentNetworkOptions(e) { this._currentNetworkOptions = e; } }, { key: "updateCurrentNetworkOptions", value: function updateCurrentNetworkOptions(e) { Object.assign(this._currentNetworkOptions, e), Object.assign(this.options, e); } }, { key: "setCurrentState", value: function setCurrentState(e) { this._currentState = e; } }, { key: "updateCurrentState", value: function updateCurrentState(e) { e.skinId && (this.lastSkinId = this.currentState.skinId, this.updateCurrentNetworkOptions({ skinId: e.skinId })), e.versionId && this.updateCurrentNetworkOptions({ versionId: e.versionId }), Object.assign(this._currentState, e); } }]); return Xverse_Room; }(EventEmitter); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var XverseRoom = /*#__PURE__*/function (_Xverse_Room) { _inherits(XverseRoom, _Xverse_Room); var _super = _createSuper(XverseRoom); function XverseRoom(e) { var _this; _classCallCheck(this, XverseRoom); _this = _super.call(this, e); _this.joyStick = new JoyStick(_assertThisInitialized(_this)); return _this; } _createClass(XverseRoom, [{ key: "afterJoinRoomHook", value: function afterJoinRoomHook() { this.joyStick.init({}); } }]); return XverseRoom; }(Xverse_Room); var Preload = /*#__PURE__*/function () { function Preload(e) { _classCallCheck(this, Preload); this.config = null; this.allKeys = []; this.oldResourcesDeleted = !1; this.requests = { simple: { stopped: !0, requests: {} }, observer: { stopped: !0, requests: {} }, full: { stopped: !0, requests: {} } }; this.modelManager = e, this.init(e.appId); } _createClass(Preload, [{ key: "init", value: function init(e) { reporter$1.updateBody({ appId: e }); } }, { key: "getConfig", value: function () { var _getConfig = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(e) { var _yield$this$modelMana, t; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!this.config) { _context.next = 2; break; } return _context.abrupt("return", this.config); case 2: _context.next = 4; return this.modelManager.requestConfig(); case 4: _yield$this$modelMana = _context.sent; t = _yield$this$modelMana.preload; return _context.abrupt("return", t ? (this.config = t, Promise.resolve(t)) : Promise.reject("no preload config")); case 7: case "end": return _context.stop(); } } }, _callee, this); })); function getConfig(_x) { return _getConfig.apply(this, arguments); } return getConfig; }() }, { key: "getAllKeys", value: function () { var _getAllKeys = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { var e, t; return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this.allKeys.length) { _context2.next = 2; break; } return _context2.abrupt("return", this.allKeys); case 2: _context2.prev = 2; _context2.next = 5; return modelTable.getAllKeys(); case 5: e = _context2.sent; this.allKeys = e; return _context2.abrupt("return", e); case 10: _context2.prev = 10; _context2.t0 = _context2["catch"](2); t = "preload getAllKeys error"; return _context2.abrupt("return", (logger$1.error(t), Promise.reject(t))); case 14: case "end": return _context2.stop(); } } }, _callee2, this, [[2, 10]]); })); function getAllKeys() { return _getAllKeys.apply(this, arguments); } return getAllKeys; }() }, { key: "stop", value: function stop(e) { e === "serverless" && (e = "observer"), this.requests[e].stopped = !0; var t = this.requests[e].requests; Object.keys(t).forEach(function (r) { http1.canceler.removePending(r), delete t[r]; }); } }, { key: "clearPreload", value: function clearPreload(e) { this.requests[e].stopped = !1, this.allKeys = []; } }, { key: "start", value: function () { var _start = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3(e, t, r) { var n, o, a, s, l, u, h, f, _s; return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: n = Date.now(), o = 0; _context3.prev = 1; if (!(e === "serverless" && (e = "observer"), !this.requests[e])) { _context3.next = 4; break; } return _context3.abrupt("return", Promise.reject(new ParamError("invalid stage name: " + e))); case 4: this.clearPreload(e); _context3.next = 7; return this.getConfig(e); case 7: a = _context3.sent; _context3.next = 10; return this.getAllKeys(); case 10: s = _context3.sent; _context3.prev = 11; _context3.next = 14; return this.deleteOldResources(a.assetUrls.map(function (d) { return d.url; }), s); case 14: _context3.next = 19; break; case 16: _context3.prev = 16; _context3.t0 = _context3["catch"](11); logger$1.error(_context3.t0); case 19: l = a.baseUrls, u = a.assetUrls; _context3.t1 = e; _context3.next = _context3.t1 === "simple" ? 23 : _context3.t1 === "observer" ? 25 : _context3.t1 === "full" ? 27 : 29; break; case 23: h = l; return _context3.abrupt("break", 30); case 25: h = u; return _context3.abrupt("break", 30); case 27: h = u; return _context3.abrupt("break", 30); case 29: h = u; case 30: f = h.filter(function (d) { return !s.includes(d.url); }); r && isFunction(r) && (f = f.filter(r)); o = f.length; logger$1.debug("keysNeedToPreload", f); f.length || t && t(h.length, h.length); n = Date.now(); _context3.next = 38; return this._preload(e, f, t); case 38: logger$1.infoAndReportMeasurement({ tag: e, startTime: n, metric: "assetsPreload", extra: { total: o } }); return _context3.abrupt("return"); case 42: _context3.prev = 42; _context3.t2 = _context3["catch"](1); _s = _context3.t2; return _context3.abrupt("return", ((this.requests[e].stopped || axios.isCancel(_context3.t2)) && (_s = new PreloadCanceledError()), logger$1.infoAndReportMeasurement({ tag: e, startTime: n, metric: "assetsPreload", extra: { total: o }, error: _s, reportOptions: { immediate: !0 } }), Promise.reject(_s))); case 46: case "end": return _context3.stop(); } } }, _callee3, this, [[1, 42], [11, 16]]); })); function start(_x2, _x3, _x4) { return _start.apply(this, arguments); } return start; }() }, { key: "deleteOldResources", value: function deleteOldResources(e, t) { if (!this.oldResourcesDeleted) this.oldResourcesDeleted = !0;else return Promise.resolve(); var r = t.filter(function (n) { return !e.includes(n); }); return logger$1.debug("keysNeedToDelete", r), logger$1.warn("keysNeedToDelete", r.length), Promise.all(r.map(function (n) { return modelTable.delete(n); })); } }, { key: "_preload", value: function () { var _preload2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee6(e, t, r) { var _this = this; var n, o, a; return regenerator.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: n = t.length; if (n) { _context6.next = 3; break; } return _context6.abrupt("return", Promise.resolve()); case 3: o = 0; a = window.setInterval(function () { r && r(o, n), o >= n && window.clearInterval(a); }, 1e3); return _context6.abrupt("return", util.mapLimit(t, 10, /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee5(s) { var l, u; return regenerator.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: l = s.size, u = s.url; return _context5.abrupt("return", _this.requests[e].stopped ? Promise.reject(new PreloadCanceledError()) : http1.get({ url: u, timeout: Preload.getTimeoutBySize(l), responseType: "blob", retry: 2, beforeRequest: function beforeRequest() { _this.requests[e].requests[u] = !0; } }).then( /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(c) { var h, f; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: h = c.data; if (h instanceof Blob) { _context4.next = 3; break; } return _context4.abrupt("return", (logger$1.error("request blob failed, type:", typeof h, u), Promise.reject("request blob failed " + u))); case 3: _context4.next = 5; return blobToDataURI(h); case 5: f = _context4.sent; _context4.prev = 6; _context4.next = 9; return modelTable.put({ url: u, model: f }); case 9: return _context4.abrupt("return"); case 12: _context4.prev = 12; _context4.t0 = _context4["catch"](6); return _context4.abrupt("return", (logger$1.error("unable to add data to indexedDB", _context4.t0), Promise.reject(new InternalError("preload db error")))); case 15: case "end": return _context4.stop(); } } }, _callee4, null, [[6, 12]]); })); return function (_x9) { return _ref2.apply(this, arguments); }; }()).then(function () { o++, delete _this.requests[e].requests[u]; }, function (c) { return delete _this.requests[e].requests[u], window.clearInterval(a), Promise.reject(c); })); case 2: case "end": return _context5.stop(); } } }, _callee5); })); return function (_x8) { return _ref.apply(this, arguments); }; }())); case 6: case "end": return _context6.stop(); } } }, _callee6); })); function _preload(_x5, _x6, _x7) { return _preload2.apply(this, arguments); } return _preload; }() }], [{ key: "getTimeoutBySize", value: function getTimeoutBySize(e) { return e ? e < 500 * 1e3 ? 30 * 1e3 : e < 1e3 * 1e3 ? 60 * 1e3 : 100 * 1e3 : 100 * 1e3; } }]); return Preload; }(); var RenderType$1 = { PathVideo: 0, RotationVideo: 1, RotationImage: 2, PanoramaImage: 3, CGVideo: 4, ClientRotationPano: 5, CloudRotationPano: 6 }; var Xverse = /*#__PURE__*/function () { function Xverse(e) { _classCallCheck(this, Xverse); e || (e = {}); var _e = e, t = _e.onLog, r = _e.env, n = _e.appId, o = _e.releaseId, a = _e.subPackageVersion; this.NO_CACHE = !1, this.env = r || "PROD", this.SUB_PACKAGE_VERSION = a, this.debug && logger$1.setLevel(LoggerLevels.Debug); var s = this.pageSession = util.uuid(); reporter$1.updateHeader({ pageSession: s }); reporter$1.updateReportUrl(REPORT_URL[this.env]); a && reporter$1.updateBody({ sdkVersion: a }); logger$1.infoAndReportMeasurement({ metric: "sdkInit", startTime: Date.now(), extra: { version: a, enviroment: r, pageSession: s } }); logger$1.debug("debug mode:", this.debug); reporter$1.on("report", function (l) { t && t(l); }); if (n) { this.appId = n, this.releaseId = o; var l = ModelManager.getInstance(n, o); this.preload = new Preload(l); } } _createClass(Xverse, [{ key: "isSupported", get: function get() { return isSupported(); } }, { key: "disableLogUpload", value: function disableLogUpload() { reporter$1.disable(), logger$1.debug("logger upload has been disabled"); } }, { key: "getSkinList", value: function () { var _getSkinList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", []); case 1: case "end": return _context.stop(); } } }, _callee); })); function getSkinList() { return _getSkinList.apply(this, arguments); } return getSkinList; }() }, { key: "getAvatarList", value: function () { var _getAvatarList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee2() { return regenerator.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: return _context2.abrupt("return", []); case 1: case "end": return _context2.stop(); } } }, _callee2); })); function getAvatarList() { return _getAvatarList.apply(this, arguments); } return getAvatarList; }() }, { key: "getGiftList", value: function () { var _getGiftList = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee3() { return regenerator.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: return _context3.abrupt("return", [{ id: "hack " }]); case 1: case "end": return _context3.stop(); } } }, _callee3); })); function getGiftList() { return _getGiftList.apply(this, arguments); } return getGiftList; }() }, { key: "joinRoom", value: function () { var _joinRoom = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee4(e) { var t, r, n, o; return regenerator.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: t = e.pathName || "thirdwalk", r = e.rotationRenderType || RenderType$1.RotationVideo, n = e.person || Person.Third, o = new XverseRoom(le(oe({}, e), { appId: e.appId || this.appId, releaseId: e.releaseId || this.releaseId, pageSession: this.pageSession, isAllSync: !0, rotationRenderType: r, syncByEvent: !0, pathName: t, person: n, role: e.role || "audience" })); return _context4.abrupt("return", o.initRoom().then(function () { return o; })); case 2: case "end": return _context4.stop(); } } }, _callee4, this); })); function joinRoom(_x) { return _joinRoom.apply(this, arguments); } return joinRoom; }() }]); return Xverse; }(); var xverse = new Xverse({ env: "DEV", appId: "10016", releaseId: '2203120033_29769e' }); var l = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() { var R, room; return regenerator.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; _context.next = 3; return (R = xverse.preload) == null ? void 0 : R.start('full', function (M, x) { }); case 3: _context.next = 12; break; case 5: _context.prev = 5; _context.t0 = _context["catch"](0); if (!(console.error(_context.t0), _context.t0.code === Codes.PreloadCanceled)) { _context.next = 10; break; } toast("\u9884\u52A0\u8F7D\u88AB\u53D6\u6D88"); return _context.abrupt("return"); case 10: toast("\u8FDB\u5165\u5931\u8D25, \u8BF7\u91CD\u8BD5"); return _context.abrupt("return"); case 12: _context.prev = 12; _context.next = 15; return xverse.joinRoom({ canvas: document.getElementById('canvas'), skinId: '10092', avatarId: 'KGe_Boy', roomId: 'e629ef3e-022d-4e64-8654-703bb96410eb', userId: '1f7acca1db9d5', wsServerUrl: 'wss://uat-eks.xverse.cn/ws', appId: "10016", token: " ", nickname: '1f7acca1db9d5', firends: ["user1"], viewMode: "full", resolution: { width: 1728, height: 720 }, pathName: 'thirdwalk', objectFit: null, hasAvatar: !0, syncToOthers: !0 }); case 15: room = _context.sent; window.room = room; u(); c(); //e(!1); _context.next = 26; break; case 21: _context.prev = 21; _context.t1 = _context["catch"](12); console.error(_context.t1); alert(_context.t1); return _context.abrupt("return"); case 26: case "end": return _context.stop(); } } }, _callee, null, [[0, 5], [12, 21]]); })); return function l() { return _ref.apply(this, arguments); }; }(); var u = function u() { window.room.on("_coreClick", function (_ref2) { var f = _ref2.point; window.room._userAvatar.moveTo({ point: f }); }); }; var c = function c() { window.room.on("repeatLogin", function () { toast("\u8BE5\u7528\u6237\u5DF2\u7ECF\u5728\u5176\u4ED6\u5730\u70B9\u767B\u5F55", { duration: 1e4 }); }), window.room.on("reconnecting", function (_ref3) { var f = _ref3.count; toast("\u5C1D\u8BD5\u7B2C".concat(f, "\u6B21\u91CD\u8FDE")); }), window.room.on("reconnected", function () { toast("\u91CD\u8FDE\u6210\u529F"); }), window.room.on("disconnected", function () { var f = toast("\u8FDE\u63A5\u5931\u8D25\uFF0C\u624B\u52A8\u70B9\u51FB\u91CD\u8BD5", { duration: 1e5, onClick() { f.hideToast(), window.room.reconnect(); } }); }); }; l(); })); //# sourceMappingURL=index.js.map