xushiting 3 年之前
父節點
當前提交
feb334539c
共有 17 個文件被更改,包括 3020 次插入1188 次删除
  1. 2858 1100
      dist/js/index.js
  2. 1 1
      dist/js/index.js.map
  3. 5 4
      src/ActionsHandler.js
  4. 1 0
      src/Camera.js
  5. 72 17
      src/EngineProxy.js
  6. 3 3
      src/Http.js
  7. 7 6
      src/ModelManager.js
  8. 2 1
      src/NetworkController.js
  9. 2 1
      src/Panorama.js
  10. 1 0
      src/Signal.js
  11. 2 1
      src/Socket.js
  12. 23 29
      src/XSceneManager.js
  13. 23 20
      src/XverseAvatar.js
  14. 6 3
      src/Xverse_Room.js
  15. 1 1
      src/main.js
  16. 11 0
      src/util.js
  17. 2 1
      src/开发笔记.txt

文件差異過大導致無法顯示
+ 2858 - 1100
dist/js/index.js


文件差異過大導致無法顯示
+ 1 - 1
dist/js/index.js.map


+ 5 - 4
src/ActionsHandler.js

@@ -1,9 +1,10 @@
 //const logger = new Logger("actions-handler")
-// QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
 import Actions from "./enum/Actions.js"
 import {logger} from "./Logger.js"
 import {eventsManager} from "./EventsManager.js"
+import util from "./util.js"
 
+const QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
 export default class ActionsHandler {
     constructor(e) {
         this.currentActiveAction = null
@@ -26,7 +27,7 @@ export default class ActionsHandler {
 
     async sendData(e) {
         await this.beforeSend(e);
-        const t = uuid$1();
+        const t = util.uuid();
         if (this.room.networkController.sendRtcData(le(oe({}, e.data), {
             trace_id: t,
             user_id: this.room.options.userId
@@ -278,7 +279,7 @@ export default class ActionsHandler {
         }).then(async y=>{
             if (l === RenderType.ClientRotationPano && y) {
                 const b = await this.room.modelManager.findRoute(r, h)
-                  , {camera: T} = getRandomItem(b.birthPointList) || {};
+                  , {camera: T} = util.getRandomItem(b.birthPointList) || {};
                 await this.room.panorama.handleReceivePanorama(y, T)
             }
             return this.handleChangeSkin(e)
@@ -469,7 +470,7 @@ export default class ActionsHandler {
     }
     joystick(e) {
         const {degree: t, level: r=1} = e
-          , n = uuid$1();
+          , n = util.uuid();
         let o = -t + 90 + 360;
         o >= 360 && (o -= 360);
         const a = {

+ 1 - 0
src/Camera.js

@@ -1,6 +1,7 @@
 import {logger} from "./Logger.js"
 import CameraStates from "./enum/CameraStates.js"
 import Person from "./enum/Person.js"
+import EImageQuality from "./enum/EImageQuality.js"
 
 export default class Camera extends EventEmitter {
     constructor(e) {

+ 72 - 17
src/EngineProxy.js

@@ -1,5 +1,60 @@
-const log$a = new Logger("xverse-bus")
-class EngineProxy{
+//const logger = new Logger("xverse-bus")
+import {logger} from "./Logger.js"
+import CircularArray from "./CircularArray.js"
+import AssetTypeName from "./enum/AssetTypeName.js"
+import AssetClassName from "./enum/AssetClassName.js"
+import LoggerLevels from "./enum/LoggerLevels.js"
+import EShaderMode from "./enum/EShaderMode.js"
+import Http from "./Http.js"
+import XSceneManager from "./XSceneManager.js"
+
+const http = new Http
+  , isIndexedDbSupported = ()=>(window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB) !== void 0
+  , blobToDataURI = async i=>new Promise((e,t)=>{
+    const r = new FileReader;
+    r.readAsDataURL(i),
+    r.onload = function(n) {
+        var o;
+        e((o = n.target) == null ? void 0 : o.result)
+    }
+    ,
+    r.onerror = function(n) {
+        t(n)
+    }
+}
+)
+  , dataURItoBlob = i=>{
+    let e;
+    i.split(",")[0].indexOf("base64") >= 0 ? e = atob(i.split(",")[1]) : e = unescape(i.split(",")[1]);
+    const t = i.split(",")[0].split(":")[1].split(";")[0]
+      , r = new Uint8Array(e.length);
+    for (let o = 0; o < e.length; o++)
+        r[o] = e.charCodeAt(o);
+    return new Blob([r],{
+        type: t
+    })
+}
+  , urlMap = new Map
+  , urlTransformer = async(i,e=!1)=>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(t=>(urlMap.set(i, t),
+t));
+
+let sceneManager;
+function getSceneManager(i, e) {
+    return sceneManager || (sceneManager = new XSceneManager(i,e)),
+    sceneManager
+}
+
+export default class EngineProxy{
     constructor(e) {
         E(this, "_tvs", []);
         E(this, "isRenderFirstFrame", !1);
@@ -27,7 +82,7 @@ class EngineProxy{
         E(this, "systemStuckCnt", 0);
         E(this, "frameRenderNumber", 0);
         E(this, "_setFPS", (e,t=25)=>{
-            log$a.info("Set fps to", t);
+            logger.info("Set fps to", t);
             const r = t > 60 ? 60 : t < 24 ? 24 : t;
             e.Engine.stopRenderLoop();
             const n = 1e3 / r;
@@ -56,15 +111,15 @@ class EngineProxy{
                         this._checkSceneFrameCount > ye._CHECK_DURATION && (this._checkSceneDurationFrameNum = ye._CHECK_DURATION,
                         this._checkSceneFrameCount = 0,
                         this._checkSceneNotReadyCount++,
-                        (this._checkSceneNotReadyCount == 1 || this._checkSceneNotReadyCount % 100 == 0) && log$a.error(`[SDK] Scene not ready, skip render. loop: ${this._checkSceneNotReadyCount}`),
-                        this._checkSceneNotReadyCount > 10 && (log$a.error("[SDK] Scene not ready, reload later"),
+                        (this._checkSceneNotReadyCount == 1 || this._checkSceneNotReadyCount % 100 == 0) && logger.error(`[SDK] Scene not ready, skip render. loop: ${this._checkSceneNotReadyCount}`),
+                        this._checkSceneNotReadyCount > 10 && (logger.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
                         }),
-                        log$a.infoAndReportMeasurement({
+                        logger.infoAndReportMeasurement({
                             value: 0,
                             startTime: Date.now(),
                             metric: "renderError",
@@ -84,7 +139,7 @@ class EngineProxy{
                             this.room.stats.assign({
                                 renderErrorCount: this.renderErrorCount
                             }),
-                            log$a.infoAndReportMeasurement({
+                            logger.infoAndReportMeasurement({
                                 value: 0,
                                 startTime: Date.now(),
                                 metric: "renderError",
@@ -162,8 +217,8 @@ class EngineProxy{
     }
     async initEngine(e) {
         await this.updateBillboard(),
-        log$a.info("engine version:", VERSION$1);
-        const t = new Logger("engine");
+        logger.info("engine version:", VERSION$1);
+        const t = logger;
         t.setLevel(LoggerLevels.Warn);
         const r = {
             videoResOriArray: [{
@@ -224,7 +279,7 @@ class EngineProxy{
     }
     pause() {
         clearTimeout(this.renderTimer),
-        log$a.info("Invoke room.pause to pause render");
+        logger.info("Invoke room.pause to pause render");
         const e = {
             roomId: this.room.id,
             effects: [],
@@ -237,7 +292,7 @@ class EngineProxy{
     async resume() {
         this._setFPS(this.room.sceneManager),
         this.room.sceneManager.cameraComponent.cameraFovChange(this.room.sceneManager.yuvInfo),
-        log$a.info("Invoke room.resume to render");
+        logger.info("Invoke room.resume to render");
         const e = this._createAssetList(this.room.skin);
         await this.loadAssets(e, "")
     }
@@ -246,11 +301,11 @@ class EngineProxy{
         this.lightManager || (this.lightManager = this.room.sceneManager.lightComponent),
         e = e || this.room.skin;
         const t = ModelManager.findModel(e.models, AssetTypeName.Config, AssetClassName.Env);
-        return t ? (r = this.lightManager) == null ? void 0 : r.setIBL(t.modelUrl) : (log$a.error("env file not found"),
+        return t ? (r = this.lightManager) == null ? void 0 : r.setIBL(t.modelUrl) : (logger.error("env file not found"),
         Promise.resolve())
     }
     async _parseModelsAndLoad(e, t, r) {
-        log$a.info("Invoke _parseModelsAndLoad start", t);
+        logger.info("Invoke _parseModelsAndLoad start", t);
         const n = ["airship", "balloon", "default", "ground_feiting", "ground_reqiqiu"]
           , o = new Map;
         r == null && (r = "xxxx");
@@ -315,12 +370,12 @@ class EngineProxy{
     }
     async loadAssets(e, t="", r=8e3) {
         const n = Date.now();
-        return this._loadAssets(e, t)._timeout(r, new InitEngineTimeoutError(`loadAssets timeout(${r}ms)`)).then(o=>(log$a.infoAndReportMeasurement({
+        return this._loadAssets(e, t)._timeout(r, new InitEngineTimeoutError(`loadAssets timeout(${r}ms)`)).then(o=>(logger.infoAndReportMeasurement({
             tag: "loadAssets",
             startTime: n,
             metric: "loadAssets"
         }),
-        o)).catch(o=>(log$a.infoAndReportMeasurement({
+        o)).catch(o=>(logger.infoAndReportMeasurement({
             tag: "loadAssets",
             startTime: n,
             metric: "loadAssets",
@@ -385,7 +440,7 @@ class EngineProxy{
         ),
         t != "" && t != null && this._deleteAssetsLowpolyModel(t);
         const a = e.skinId;
-        log$a.info("====> from ", t, "  to  ", a),
+        logger.info("====> from ", t, "  to  ", a),
         this._tvs.forEach(f=>f.clean()),
         this._tvs = [];
         let s = EFitMode.cover;
@@ -402,7 +457,7 @@ class EngineProxy{
                 d = await urlTransformer(f.imageUrl)
             } catch (_) {
                 d = f.imageUrl,
-                log$a.error("urlTransformer error", _)
+                logger.error("urlTransformer error", _)
             }
             this.room.breathPointManager.addBreathPoint({
                 id: f.id,

+ 3 - 3
src/Http.js

@@ -3,7 +3,7 @@ import {logger} from "./Logger.js"
 import Xverse from "./Xverse.js"
 import {modelTable} from "./ModelTable.js"
 
-class Http extends EventEmitter {
+export default class Http extends EventEmitter {
     async get({url: e, useIndexedDb: t=!1, timeout: r=15e3, key: n, isOutPutObjectURL: o=!0}) {
         if (Xverse.NO_CACHE !== void 0 && (t = !Xverse.NO_CACHE),
         t)
@@ -94,8 +94,8 @@ class Http extends EventEmitter {
     }
 }
 
-const http = new Http();
-export { http };
+// const http = new Http();
+// export { http };
 
 // const http = new Http
 //   , isIndexedDbSupported = ()=>(window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB) !== void 0

+ 7 - 6
src/ModelManager.js

@@ -1,6 +1,7 @@
 //const log$f = new Logger("model-manager")
 import {logger} from "./Logger.js"
 import {http1} from "./Http1.js"
+import util from "./util.js"
 
 export default class ModelManager{
     constructor(e, t) {
@@ -165,20 +166,20 @@ export default class ModelManager{
                             step: u,
                             birthPointList: c.map(h=>({
                                 camera: h.camera && {
-                                    position: objectParseFloat(h.camera.position),
-                                    angle: objectParseFloat(h.camera.rotation)
+                                    position: util.objectParseFloat(h.camera.position),
+                                    angle: util.objectParseFloat(h.camera.rotation)
                                 },
                                 player: h.player && {
-                                    position: objectParseFloat(h.player.position),
-                                    angle: objectParseFloat(h.player.rotation)
+                                    position: util.objectParseFloat(h.player.position),
+                                    angle: util.objectParseFloat(h.player.rotation)
                                 }
                             }))
                         }
                     }
                     ),
                     pointList: t.pointList.map(n=>le(oe({}, n), {
-                        position: objectParseFloat(n.position),
-                        rotation: objectParseFloat(n.rotation)
+                        position: util.objectParseFloat(n.position),
+                        rotation: util.objectParseFloat(n.rotation)
                     })),
                     versionId: t.versionId,
                     isEnable: t.isEnable,

+ 2 - 1
src/NetworkController.js

@@ -5,6 +5,7 @@ import Rtcp from "./Rtcp.js"
 import NetworkMonitor from "./NetworkMonitor.js"
 import Stream from "./Stream.js"
 import InternalError from "./error/InternalError.js"
+import util from "./util.js"
 
 var workerSourceCode = `onmessage = function (event) {
     const data = event.data
@@ -238,7 +239,7 @@ export default class NetworkController extends EventEmitter {
         this.socket.send(e)
     }
     quit() {
-        const e = uuid$1()
+        const e = util.uuid()
           , t = {
             action_type: Actions.Exit,
             trace_id: e,

+ 2 - 1
src/Panorama.js

@@ -1,6 +1,7 @@
 import Codes from "./enum/Codes.js"
 import {logger} from "./Logger.js"
 import {eventsManager} from "./EventsManager.js"
+import util from "./util.js"
 
 class Panorama {
     constructor(e) {
@@ -30,7 +31,7 @@ class Panorama {
                     if (!o || !a)
                         return;
                     const s = await this.room.modelManager.findRoute(o, a)
-                      , {camera: l} = getRandomItem(s.birthPointList) || {};
+                      , {camera: l} = util.getRandomItem(s.birthPointList) || {};
                     l && this.room.sceneManager.cameraComponent.changeToFirstPersonView(le(oe({}, l), {
                         rotation: l.angle
                     }))

+ 1 - 0
src/Signal.js

@@ -2,6 +2,7 @@
 import Codes from "./enum/Codes.js"
 import {logger} from "./Logger.js"
 import {eventsManager} from "./EventsManager.js"
+import ECurrentShaderMode from "./enum/ECurrentShaderMode.js"
 
 export default class Signal {
     constructor(e) {

+ 2 - 1
src/Socket.js

@@ -3,6 +3,7 @@ import Heartbeat from "./Heartbeat.js"
 import Timeout from "./Timeout.js"
 import InitNetworkTimeoutError from "./error/InitNetworkTimeoutError.js"
 import {reporter} from "./Reporter.js"
+import util from "./util.js"
 
 export default class Socket extends EventEmitter {
     constructor(e) {
@@ -32,7 +33,7 @@ export default class Socket extends EventEmitter {
                 id: "start",
                 room_id: e,
                 user_id: t,
-                trace_id: uuid$1(),
+                trace_id: util.uuid(),
                 data: JSON.stringify({
                     avatar_components: JSON.stringify(a),
                     avatar_id: r,

+ 23 - 29
src/XSceneManager.js

@@ -1,13 +1,7 @@
-const log$t = new Logger$1("XSceneManager");
-var ECurrentShaderMode = (i=>(i[i.default = 0] = "default",
-i[i.video = 1] = "video",
-i[i.pano = 2] = "pano",
-i))(ECurrentShaderMode || {})
-  , EImageQuality = (i=>(i[i.low = 0] = "low",
-i[i.mid = 1] = "mid",
-i[i.high = 2] = "high",
-i))(EImageQuality || {});
-class XSceneManager {
+//const log$t = new Logger$1("XSceneManager");
+import {logger} from "./Logger.js"
+
+export default class XSceneManager {
     constructor(e, t) {
         E(this, "scene");
         E(this, "engine");
@@ -48,8 +42,8 @@ class XSceneManager {
                 webgl: t.version,
                 os: t.os
             };
-            log$t.warn(JSON.stringify(e)),
-            log$t.warn(JSON.stringify(r))
+            logger.warn(JSON.stringify(e)),
+            logger.warn(JSON.stringify(r))
         }
         );
         E(this, "addNewLowPolyMesh", async(e,t)=>(this._currentShader == null && await this.initSceneManager(),
@@ -219,9 +213,9 @@ class XSceneManager {
     }
     setImageQuality(e) {
         e == 0 ? (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1.8),
-        log$t.info("[Engine] change image quality to low, [" + this._initEngineScaleNumber * 1.8 + "]")) : e == 1 ? (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1.5),
-        log$t.info("[Engine] change image quality to mid, [" + this._initEngineScaleNumber * 1.5 + "]")) : e == 2 && (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1),
-        log$t.info("[Engine] change image quality to high, [" + this._initEngineScaleNumber * 1 + "]"))
+        logger.info("[Engine] change image quality to low, [" + this._initEngineScaleNumber * 1.8 + "]")) : e == 1 ? (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1.5),
+        logger.info("[Engine] change image quality to mid, [" + this._initEngineScaleNumber * 1.5 + "]")) : e == 2 && (this.engine.setHardwareScalingLevel(this._initEngineScaleNumber * 1),
+        logger.info("[Engine] change image quality to high, [" + this._initEngineScaleNumber * 1 + "]"))
     }
     setNonlinearCanvasResize(e) {
         this._nonlinearCanvasResize = e,
@@ -243,7 +237,7 @@ class XSceneManager {
                 t(!0)
             }
             ).catch(n=>{
-                log$t.error(`[Engine] set background image Error: ${n}`),
+                logger.error(`[Engine] set background image Error: ${n}`),
                 r(`[Engine] set background image Error: ${n}`)
             }
             )
@@ -310,22 +304,22 @@ class XSceneManager {
         try {
             this.scene.render()
         } catch (e) {
-            throw log$t.error(`[Engine] Render Error: ${e}`),
+            throw logger.error(`[Engine] Render Error: ${e}`),
             e
         }
     }
     isReadyToRender(e) {
         const {checkMesh: t=!0, checkEffect: r=!1, checkPostProgress: n=!1, checkParticle: o=!1, checkAnimation: a=!1, materialNameWhiteLists: s=[]} = e;
         if (this.scene._isDisposed)
-            return log$t.error("[Engine] this.scene._isDisposed== false "),
+            return logger.error("[Engine] this.scene._isDisposed== false "),
             !1;
         let l;
         const u = this.scene.getEngine();
         if (r && !u.areAllEffectsReady())
-            return log$t.error("[Engine] engine.areAllEffectsReady == false"),
+            return logger.error("[Engine] engine.areAllEffectsReady == false"),
             !1;
         if (a && this.scene._pendingData.length > 0)
-            return log$t.error("[Engine] scene._pendingData.length > 0 && animation error"),
+            return logger.error("[Engine] scene._pendingData.length > 0 && animation error"),
             !1;
         if (t) {
             for (l = 0; l < this.scene.meshes.length; l++) {
@@ -333,39 +327,39 @@ class XSceneManager {
                 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 log$t.error(`[Engine] scene. mesh isReady == false, mesh name:${c.name}, mesh xtype: ${c == null ? void 0 : c.xtype}, mesh xgroup: ${c == null ? void 0 : c.xgroup}, mesh xskinInfo: ${c == null ? void 0 : c.xskinInfo}`),
+                    return logger.error(`[Engine] scene. mesh isReady == false, mesh name:${c.name}, mesh xtype: ${c == null ? void 0 : c.xtype}, mesh xgroup: ${c == null ? void 0 : c.xgroup}, mesh xskinInfo: ${c == null ? void 0 : c.xskinInfo}`),
                     !1;
                 const h = c.hasThinInstances || c.getClassName() === "InstancedMesh" || c.getClassName() === "InstancedLinesMesh" || u.getCaps().instancedArrays && c.instances.length > 0;
                 for (const f of this.scene._isReadyForMeshStage)
                     if (!f.action(c, h))
-                        return log$t.error(`[Engine] scene._isReadyForMeshStage == false, mesh name:${c.name}, mesh xtype: ${c == null ? void 0 : c.xtype}, mesh xgroup: ${c == null ? void 0 : c.xgroup}, mesh xskinInfo: ${c == null ? void 0 : c.xskinInfo}`),
+                        return logger.error(`[Engine] scene._isReadyForMeshStage == false, mesh name:${c.name}, mesh xtype: ${c == null ? void 0 : c.xtype}, mesh xgroup: ${c == null ? void 0 : c.xgroup}, mesh xskinInfo: ${c == null ? void 0 : c.xskinInfo}`),
                         !1
             }
             for (l = 0; l < this.scene.geometries.length; l++)
                 if (this.scene.geometries[l].delayLoadState === 2)
-                    return log$t.error("[Engine] geometry.delayLoadState === 2"),
+                    return logger.error("[Engine] geometry.delayLoadState === 2"),
                     !1
         }
         if (n) {
             if (this.scene.activeCameras && this.scene.activeCameras.length > 0) {
                 for (const c of this.scene.activeCameras)
                     if (!c.isReady(!0))
-                        return log$t.error("[Engine] camera not ready === false, ", c.name),
+                        return logger.error("[Engine] camera not ready === false, ", c.name),
                         !1
             } else if (this.scene.activeCamera && !this.scene.activeCamera.isReady(!0))
-                return log$t.error("[Engine] activeCamera ready === false, ", this.scene.activeCamera.name),
+                return logger.error("[Engine] activeCamera ready === false, ", this.scene.activeCamera.name),
                 !1
         }
         if (o) {
             for (const c of this.scene.particleSystems)
                 if (!c.isReady())
-                    return log$t.error("[Engine] particleSystem ready === false, ", c.name),
+                    return logger.error("[Engine] particleSystem ready === false, ", c.name),
                     !1
         }
         return !0
     }
     changePanoShaderForLowModel(e) {
-        return log$t.info(`[Engine] changePanoShaderForLowModel: ${e}`),
+        return logger.info(`[Engine] changePanoShaderForLowModel: ${e}`),
         this._materialManager.allowYUVUpdate(),
         new Promise((t,r)=>{
             this._materialManager._isInDynamicRange(e) == !1 && r(!1),
@@ -379,13 +373,13 @@ class XSceneManager {
         )
     }
     changeVideoShaderForLowModel() {
-        return log$t.info("[Engine] changeVideoShaderForLowModel"),
+        return logger.info("[Engine] changeVideoShaderForLowModel"),
         this._currentShader = this._materialManager.getPureVideoShader(),
         this._materialManager.allowYUVUpdate(),
         this.changeShaderForLowModel()
     }
     changeDefaultShaderForLowModel() {
-        return log$t.info("[Engine] changeDefaultShaderForLowModel"),
+        return logger.info("[Engine] changeDefaultShaderForLowModel"),
         this._currentShader = this._materialManager.getDefaultShader(),
         this._materialManager.stopYUVUpdate(),
         this.changeShaderForLowModel()

+ 23 - 20
src/XverseAvatar.js

@@ -1,5 +1,8 @@
-const log$1 = new Logger("xverse-avatar");
-class XverseAvatar extends EventEmitter {
+//const logger = new Logger("xverse-avatar");
+import {logger} from "./Logger.js"
+import util from "./util.js"
+
+export default class XverseAvatar extends EventEmitter {
     constructor({userId: e, isHost: t, room: r, avatarId: n, isSelf: o, group: a=AvatarGroup.Npc}) {
         super();
         E(this, "xAvatar");
@@ -43,14 +46,14 @@ class XverseAvatar extends EventEmitter {
             if (!this._room.signal.isUpdatedYUV)
                 return;
             if (this.state !== "idle" && !r)
-                return log$1.debug("_playAnimation", "state is not idle"),
+                return logger.debug("_playAnimation", "state is not idle"),
                 Promise.resolve("_playAnimation, state is not idle");
             const n = Date.now();
             try {
                 if (!((o = this.xAvatar) != null && o.controller))
                     return Promise.reject(new InternalError(`[avatar: ${this.userId}] Play animation failed: ${e}, no controller`));
                 this.isSelf && setTimeout(()=>{
-                    log$1.infoAndReportMeasurement({
+                    logger.infoAndReportMeasurement({
                         tag: e,
                         startTime: n,
                         value: 0,
@@ -58,14 +61,14 @@ class XverseAvatar extends EventEmitter {
                     })
                 }
                 );
-                const a = uuid$1();
+                const a = util.uuid();
                 this._lastAnimTraceId = a,
                 await this.xAvatar.controller.playAnimation(e, t),
                 a === this._lastAnimTraceId && !this.isMoving && !t && e !== "Idle" && this.xAvatar.controller.playAnimation("Idle", t).catch(s=>{
-                    log$1.error(`[avatar: ${this.userId}] Play animation failed [force idle]`, s)
+                    logger.error(`[avatar: ${this.userId}] Play animation failed [force idle]`, s)
                 }
                 ),
-                this.isSelf && log$1.infoAndReportMeasurement({
+                this.isSelf && logger.infoAndReportMeasurement({
                     tag: e,
                     startTime: n,
                     extra: {
@@ -74,8 +77,8 @@ class XverseAvatar extends EventEmitter {
                     metric: "playAnimationEnd"
                 })
             } catch (a) {
-                return log$1.error(`[avatar: ${this.userId}] Play animation failed: ${e}`, a),
-                this.isSelf && log$1.infoAndReportMeasurement({
+                return logger.error(`[avatar: ${this.userId}] Play animation failed: ${e}`, a),
+                this.isSelf && logger.infoAndReportMeasurement({
                     tag: e,
                     startTime: n,
                     metric: "playAnimationEnd",
@@ -93,7 +96,7 @@ class XverseAvatar extends EventEmitter {
               , n = JSON.parse(JSON.stringify(e.avatarComponents));
             let o = avatarComponentsValidate(n, this._avatarModel);
             return !ChangeComponentsMode[t] && !o && (o = new ParamError(`changeComponents failed, mode: ${t} is invalid`)),
-            o ? (log$1.error(o),
+            o ? (logger.error(o),
             Promise.reject(o)) : this._changeComponents({
                 avatarComponents: n,
                 mode: t,
@@ -126,7 +129,7 @@ class XverseAvatar extends EventEmitter {
                     components: this.avatarComponents,
                     mode: r
                 }),
-                this.isSelf && log$1.infoAndReportMeasurement({
+                this.isSelf && logger.infoAndReportMeasurement({
                     tag: "changeComponents",
                     startTime: n,
                     metric: "changeComponents",
@@ -138,7 +141,7 @@ class XverseAvatar extends EventEmitter {
                 }),
                 this.avatarComponents
             } catch (a) {
-                return this.isSelf && log$1.infoAndReportMeasurement({
+                return this.isSelf && logger.infoAndReportMeasurement({
                     tag: "changeComponents",
                     startTime: n,
                     metric: "changeComponents",
@@ -167,7 +170,7 @@ class XverseAvatar extends EventEmitter {
                 return Promise.resolve(`avatar: ${this.userId} hide success`);
             {
                 const t = `avatar: ${this.userId} hide failed ${!this.xAvatar && "without instance: xAvatar"}`;
-                return log$1.warn(t),
+                return logger.warn(t),
                 Promise.reject(t)
             }
         }
@@ -178,7 +181,7 @@ class XverseAvatar extends EventEmitter {
                 return Promise.resolve(`avatar: ${this.userId} show success`);
             {
                 const t = `avatar: ${this.userId} show failed ${!this.xAvatar && "without instance: xAvatar"}`;
-                return log$1.warn(t),
+                return logger.warn(t),
                 Promise.reject(t)
             }
         }
@@ -283,7 +286,7 @@ class XverseAvatar extends EventEmitter {
     setConnectionStatus(e) {
         this.disconnected !== e && (this.disconnected = e,
         e ? this.emit("disconnected") : this.emit("reconnected"),
-        log$1.warn(`avatar ${this.userId} status changed, disconnected:`, e))
+        logger.warn(`avatar ${this.userId} status changed, disconnected:`, e))
     }
     setScale(e) {
         var t;
@@ -296,7 +299,7 @@ class XverseAvatar extends EventEmitter {
                 try {
                     await this.stopMoving()
                 } catch (a) {
-                    return log$1.error(`stopMoving error before playAnimation ${t}`, a),
+                    return logger.error(`stopMoving error before playAnimation ${t}`, a),
                     Promise.reject(`stopMoving error before playAnimation ${t}`)
                 }
             const o = {
@@ -343,7 +346,7 @@ class XverseAvatar extends EventEmitter {
             return Promise.reject(new ParamError("avatar position is empty"));
         if (typeof r != "string" || typeof r == "string" && r.length > 64) {
             const a = "extra shoud be string which length less than 64";
-            return log$1.warn(a),
+            return logger.warn(a),
             Promise.reject(new ParamError(a))
         }
         const o = getDistance(this.position, t) / 100 > 100 ? MotionType.Run : MotionType.Walk;
@@ -365,7 +368,7 @@ class XverseAvatar extends EventEmitter {
     say(e, t) {
         if (this.sayTimer && window.clearTimeout(this.sayTimer),
         !this.xAvatar) {
-            log$1.error("say failed, without instance: xAvatar");
+            logger.error("say failed, without instance: xAvatar");
             return
         }
         this.xAvatar.say(e, {
@@ -380,7 +383,7 @@ class XverseAvatar extends EventEmitter {
     silent() {
         var e;
         if (!this.xAvatar) {
-            log$1.error("silent failed, without instance: xAvatar");
+            logger.error("silent failed, without instance: xAvatar");
             return
         }
         (e = this.xAvatar) == null || e.silent()
@@ -414,7 +417,7 @@ class XverseAvatar extends EventEmitter {
     }
     setPickBoxScale(e=1) {
         return this.xAvatar ? (this.xAvatar.setPickBoxScale(e),
-        !0) : (log$1.error("setPickBoxScale failed, without instance: xAvatar"),
+        !0) : (logger.error("setPickBoxScale failed, without instance: xAvatar"),
         !1)
     }
     transfer(e) {

+ 6 - 3
src/Xverse_Room.js

@@ -18,7 +18,10 @@ import NetworkController from "./NetworkController.js"
 import InitNetworkTimeoutError from "./error/InitNetworkTimeoutError.js"
 import InitConfigTimeoutError from "./error/InitConfigTimeoutError.js"
 import InitDecoderTimeoutError from "./error/InitDecoderTimeoutError.js"
+import InitEngineError from "./error/InitEngineError.js"
 import {eventsManager} from "./EventsManager.js"
+import EngineProxy from "./EngineProxy.js"
+import EImageQuality from "./enum/EImageQuality.js"
 
 export default class Xverse_Room extends EventEmitter {
     constructor(e) {
@@ -454,7 +457,7 @@ export default class Xverse_Room extends EventEmitter {
                 attitude: r.attitude,
                 versionId: t.versionId
             });
-            const {camera: n, player: o} = getRandomItem(r.birthPointList) || this.options;
+            const {camera: n, player: o} = util.getRandomItem(r.birthPointList) || this.options;
             this.options.camera || this.updateCurrentNetworkOptions({
                 camera: n
             }),
@@ -516,8 +519,8 @@ export default class Xverse_Room extends EventEmitter {
     }
     async getSkin(e) {
         let t = null;
-        if (t = (this.skinList = await this.modelManager.getSkinsList()).find(n=>n.id === e || n.id === e),
-        t)
+        t = (this.skinList = await this.modelManager.getSkinsList()).find(n=>n.id === e || n.id === e)
+        if (t)
             return t;
         {
             const n = `skin is invalid: skinId: ${e}`;

+ 1 - 1
src/main.js

@@ -30,7 +30,7 @@ const l = async()=>{
 
         room = await xverse.joinRoom({
             canvas: document.getElementById('canvas'),
-            skinId: 10092,
+            skinId: '10092',
             avatarId: 'KGe_Boy',
             roomId: 'e629ef3e-022d-4e64-8654-703bb96410eb',
             userId: '1f7acca1db9d5',

+ 11 - 0
src/util.js

@@ -74,6 +74,17 @@ var util = {
     },
     isSupported() {
         return typeof RTCPeerConnection == "function" && this.isWebAssemblySupported()
+    },
+    objectParseFloat(i){
+        const e = {};
+        return i && Object.keys(i).forEach(t=>{
+            e[t] = parseFloat(i[t])
+        }
+        ),
+        e
+    },
+    getRandomItem(i){
+        i.length === 0 ? null : i[Math.floor(Math.random() * i.length)]
     }
 }
 export default util

+ 2 - 1
src/开发笔记.txt

@@ -1 +1,2 @@
-1. Logger不能用单例模式,里面的module对应的是类的名称
+1. Logger不能用单例模式,里面的module对应的是类的名称
+2. BABYLON