gemercheung il y a 3 ans
Parent
commit
ff16231394

+ 4 - 0
config.dev.yaml

@@ -2,6 +2,10 @@
 app:
   prefix: /mnt/metaverse/scene
 
+queueConfig:
+  move: 20
+  rotate: 20
+
 http:
   host: '0.0.0.0'
   port: 6688

+ 4 - 0
config.production.yaml

@@ -2,6 +2,10 @@
 app:
   prefix: /mnt/metaverse/scene
 
+queueConfig:
+  move: 20
+  rotate: 20
+
 http:
   host: '0.0.0.0'
   port: 6688

+ 5 - 0
config.production1.yaml

@@ -2,6 +2,11 @@
 app:
   prefix: /mnt/metaverse/scene
 
+queueConfig:
+  move: 20
+  rotate: 20
+
+
 http:
   host: '0.0.0.0'
   port: 6688

+ 4 - 18
config.yaml

@@ -1,22 +1,17 @@
 app:
   prefix: /mnt/metaverse/scene
 
+queueConfig:
+  move: 10
+  rotate: 10
+
 http:
   host: '0.0.0.0'
   port: 6688
 
-# grpc:
-#   url: '221.4.210.172:23000'
 grpc:
   url: '192.168.0.200:3000'
 
-# redis:
-#   port: 26379
-#   host: '221.4.210.172' #远程调试需要设置bindip 为0.0.0.0 并且设置密码
-#   password: '' # 非远程不需要密码
-#   decode_responses: true
-#   db: 9
-
 redis:
   port: 6379
   host: '120.24.252.95' #远程调试需要设置bindip 为0.0.0.0 并且设置密码
@@ -24,15 +19,6 @@ redis:
   decode_responses: true
   db: 9
 
-
-
-# queueRedis:
-#   port: 6379
-#   host: 'localhost' #远程调试需要设置bindip 为0.0.0.0 并且设置密码
-#   password: 'redis9394' # 非远程不需要密码
-#   decode_responses: true
-#   db: 14
-
 stun:
   server: ['stun:120.24.252.95:3478', 'stun:172.18.156.41:3478']
   portRangeBegin: 52000

+ 0 - 1
src/get-router/get-router.service.ts

@@ -27,7 +27,6 @@ export class GetRouterService implements OnModuleInit {
     console.log('进入2 - searchRoad');
     //表示终点
     let endPoint;
-
     //const keys = this.cacheService.keys(`breakpoints:app_id:${appId}*`);
     let minDis = null;
     //for (let i = 0; i < keys.length; ++i) {

+ 66 - 7
src/move/move.service.ts

@@ -173,16 +173,15 @@ export class MoveService implements OnModuleInit {
 
       const appId = user.appId;
       const path = pathArray || [100, 101, 102]; //需要计算路径
-      const angle = user.camera.angle.yaw % 45; //纠正需要
+      let angle = user.camera.angle.yaw % 45; //纠正需要
       const replys = [];
       const traceIds = [];
       traceIds.push(traceId);
-
-      // debugger;
       //纠正,旋转传到缓存里
       const checkReplys = [];
       // console.log('矫正: ' + angle + ' 度');
       if (angle > 22) {
+        angle = 45 - angle;
         for (let i = 0; i < angle; ++i) {
           // console.warn('矫正一次:' + i);
           const reply = await this.rotateService.rotateForAngle(userId, 1);
@@ -219,11 +218,18 @@ export class MoveService implements OnModuleInit {
       }
       //replys['P' + user.breakPointId + 'T' + user.breakPointId] = checkReplys;
       replys.push(checkReplys);
+      if (checkReplys.length > 0) {
+        console.log(
+          'move-1' +
+            checkReplys[checkReplys.length - 1].newUserStates[0].playerState
+              .camera.angle.yaw,
+        );
+      }
       //过渡传到缓存里
       this.reply.traceIds = traceIds;
       this.reply['newUserStates'][0].userId = userId;
       this.reply['actionResponses'][0].traceId = traceId;
-      const index = Math.floor(user.camera.angle.yaw / 45); //过渡需要
+      const index = Math.floor((user.camera.angle.yaw + 1) / 45); //过渡需要
       for (let i = 0; i < path.length - 1; ++i) {
         let pathReplys = [];
         const start_break_point_id = path[i];
@@ -243,7 +249,6 @@ export class MoveService implements OnModuleInit {
           return replys;
         }
         const moveFrames = JSON.parse(moveFramesRes);
-        // debugger;
         //读redis里的数据
         const startBreakPointRes = await this.cacheService.get(
           'breakpoints:app_id:' +
@@ -307,7 +312,8 @@ export class MoveService implements OnModuleInit {
       endPosition,
     );
 
-    for (let i = 1; i < moveFrames.length; i += 2) {
+    let i;
+    for (i = 1; i < moveFrames.length; i += 3) {
       const moveFrame = moveFrames[i];
 
       const reply = JSON.parse(JSON.stringify(this.reply));
@@ -330,6 +336,60 @@ export class MoveService implements OnModuleInit {
 
       reply['newUserStates'][0].playerState.camera.position =
         moveFrame.camera_position;
+      if (i == 1) {
+        console.log('move-2' + moveFrame.camera_angle.yaw);
+      }
+      if (moveFrame.camera_angle.yaw < 0) {
+        moveFrame.camera_angle.yaw += 360;
+      } else if (moveFrame.camera_angle.yaw > 359) {
+        moveFrame.camera_angle.yaw -= 360;
+      }
+
+      reply['newUserStates'][0].playerState.camera.angle =
+        moveFrame.camera_angle;
+      reply['newUserStates'][0].playerState.cameraCenter =
+        reply['newUserStates'][0].playerState.player.position;
+
+      reply['actionResponses'][0].traceId = traceId;
+
+      reply.mediaSrc =
+        '/' +
+        appId +
+        '/' +
+        startBreakPointId +
+        '/' +
+        moveFrame.file_name.substring(0, moveFrame.file_name.indexOf('.')) +
+        '/' +
+        moveFrame.file_name +
+        '?m=' +
+        new Date().getTime();
+      reply.startBreakPointId = startBreakPointId;
+      reply.endBreakPointId = endBreakPointId;
+      replys.push(reply);
+    }
+    if (i != moveFrames.length - 1) {
+      i = moveFrames.length - 1;
+      const moveFrame = moveFrames[i];
+      const reply = JSON.parse(JSON.stringify(this.reply));
+      reply.traceIds.push(traceId);
+      reply['newUserStates'][0].userId = userId;
+
+      reply['newUserStates'][0].playerState.player.position = {
+        x:
+          startPosition.x +
+          ((endPosition.x - startPosition.x) / moveFrames.length) * i,
+        y:
+          startPosition.y +
+          ((endPosition.y - startPosition.y) / moveFrames.length) * i,
+        z:
+          startPosition.z +
+          ((endPosition.z - startPosition.z) / moveFrames.length) * i,
+      };
+
+      reply['newUserStates'][0].playerState.player.angle.yaw = angle;
+
+      reply['newUserStates'][0].playerState.camera.position =
+        moveFrame.camera_position;
       if (moveFrame.camera_angle.yaw < 0) {
         moveFrame.camera_angle.yaw += 360;
       } else if (moveFrame.camera_angle.yaw > 359) {
@@ -366,7 +426,6 @@ export class MoveService implements OnModuleInit {
     const user = this.users[userId];
     user.breakPointId = breakPointId;
 
-    // debugger;
     user.player.position =
       lastReply['newUserStates'][0].playerState.player.position;
     user.player.angle = lastReply['newUserStates'][0].playerState.player.angle;

+ 8 - 3
src/scene/scene.service.ts

@@ -60,9 +60,13 @@ export class SceneService implements OnModuleInit, OnModuleDestroy {
 
   private streamServiceSub: any;
   // private roRequestQueue: RxQueue = new DelayQueue(20);
-  private roQueue: RxQueue = new DelayQueue(10);
+  private roQueue: RxQueue = new DelayQueue(
+    Number(this.configService.get('queueConfig.rotate')) || 20,
+  );
   private clickQueue: RxQueue = new DebounceQueue(500);
-  private moveQueue: RxQueue = new DelayQueue(10);
+  private moveQueue: RxQueue = new DelayQueue(
+    Number(this.configService.get('queueConfig.move')) || 20,
+  );
   private joystickQueue: RxQueue = new DebounceQueue(500);
   private requestIFrameQueue: RxQueue = new DebounceQueue(2000);
 
@@ -131,6 +135,8 @@ export class SceneService implements OnModuleInit, OnModuleDestroy {
     Number.prototype.padLeft = function (n, str) {
       return Array(n - String(this).length + 1).join(str || '0') + this;
     };
+    this.logger.log('roQueue-period :' + Number(this.roQueue.period));
+    this.logger.log('moveQueue-period :' + Number(this.moveQueue.period));
   }
 
   public isHeaderOrLast(index: number, length: number): boolean {
@@ -546,7 +552,6 @@ export class SceneService implements OnModuleInit, OnModuleDestroy {
           // stream.metaData,
         );
 
-
         this.lastMoveStreamFrame.next(streamData);
         const res = await this.streamService.pushFrameToSteam(streamData);