xushiting 3 years ago
parent
commit
7df5886fc8
4 changed files with 423 additions and 161 deletions
  1. 104 0
      src/back/Route.ts
  2. 28 77
      src/back/joystick.service.ts
  3. 262 73
      src/back/move.service.ts
  4. 29 11
      src/back/rotate.service.ts

+ 104 - 0
src/back/Route.ts

@@ -0,0 +1,104 @@
+import { Injectable } from '@nestjs/common';
+import { CacheService } from 'src/cache/cache.service';
+
+export class Route{
+    constructor(private cacheService: CacheService) {
+        
+    }
+    
+    async searchRoad(appId,startPointId,endPointId){
+
+        const startPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +startPointId);
+        const startPoint = JSON.parse(startPointRes);
+
+        const endPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +endPointId);
+        const endPoint = JSON.parse(endPointRes);
+
+        var openList=[],    //开启列表
+            closeList=[],   //关闭列表
+            result=[],      //结果数组
+            result_index;   //结果数组在开启列表中的序号
+
+        //openList.push({x:startPoint.x,y:startPoint.y,G:0});//把当前点加入到开启列表中,并且G是0
+        openList.push({breakPointId:startPointId,G:0});//把当前点加入到开启列表中,并且G是0
+
+        do{
+            var currentPointInfo = openList.pop();
+            const currentPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +currentPointInfo.breakPointId);   
+            const currentPoint = JSON.parse(currentPointRes);
+
+            closeList.push(currentPointInfo);
+            var surroundPoint=this.SurroundPoint(appId,currentPointInfo.breakPointId);
+            for(var i in surroundPoint) {
+                var neighPointId = surroundPoint[i];
+                const itemRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +neighPointId);   
+                const item = JSON.parse(itemRes);         
+                //g 到父节点的位置
+                var g = currentPointInfo.G + Math.sqrt( (currentPoint.position.x - item.position.x) * (currentPoint.position.x - item.position.x)+(currentPoint.position.y - item.position.y)*(currentPoint.position.y - item.position.y));
+                
+                if (this.existList(item, openList)!=-1) {       //如果不在开启列表中
+                    item['H'] = 0;
+                    item['G'] = g;
+                    item['F'] = item.H + item.G;
+                    item['parent'] = currentPoint;
+                    openList.push(item);
+                }
+                else {                                  //存在在开启列表中,比较目前的g值和之前的g的大小
+                    var index = this.existList(item, openList);
+                    //如果当前点的g更小
+                    if (g < openList[index].G) {
+                        openList[index].parent = currentPoint;
+                        openList[index].G = g;
+                        openList[index].F=g+openList[index].H;
+                    }
+
+                }
+            }
+            //如果开启列表空了,没有通路,结果为空
+            if(openList.length==0) {
+                break;
+            }
+            openList.sort(this.sortF);//这一步是为了循环回去的时候,找出 F 值最小的, 将它从 "开启列表" 中移掉
+        }while(!(result_index=this.existList({x:endPoint.position.x,y:endPoint.position.y},openList)));
+
+        //判断结果列表是否为空
+        if(!result_index) {
+            result=[];
+        }
+        else {
+            var currentObj=openList[result_index];
+            do{
+                //把路劲节点添加到result当中
+                result.unshift(currentObj.breakPointId);
+                currentObj=currentObj.parent;
+            }while (currentObj.position.x!=startPoint.position.x || currentObj.position.y!=startPoint.position.y);
+
+        }
+        return result;
+
+    }
+
+    //用F值对数组排序
+    sortF(a,b){
+        return b.F- a.F;
+    }
+
+    //获取周围点
+    async SurroundPoint(appId,curPointId){
+        //读redis里的数据
+        const breakPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +curPointId);
+        const breakPoint = JSON.parse(breakPointRes)
+        return breakPoint.contact;
+    }
+
+    //判断点是否存在在列表中,是的话返回的是序列号
+    existList(point,list) {
+        for(var i =0;i<list.length;++i) {
+            if(point.breakPointId==list[i].breakPointId) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}
+

+ 28 - 77
src/back/joystick.service.ts

@@ -111,6 +111,7 @@ export class JoystickService {
       const dir_action = actionRequest['dir_action'];
       const user = this.users[userId];
      
+      const appId = user.appId;
       //只是移动人物
       if(dir_action.speed_level<7){
         user.player.angle.yaw = dir_action.move_angle;
@@ -134,14 +135,21 @@ export class JoystickService {
         //去redis里找邻居点
         //key:breakpoints:app_id:10016:break_point_id:1
         //value:contact,position 
-        const contact = [];
+        const breakPointRes = await this.cacheService.get('breakpoints:app_id:'+appId+':break_point_id:'+breakPointId);
+        if (breakPointRes == null) {
+          return null;
+        }
+
+        const breakPoint = JSON.parse(breakPointRes);
+        const contact = breakPoint.contact;
         let chooseBreakPointId = null;
         let minOffsetAngle = null;
         let neighPoint = null
         let angle = 0;
         for(let i=0;i<contact.length;++i){
-            neighPoint = null           //通过contact[i],去redis里找
-            angle = 0;              //通过user.player.position;neighPoint.position获得角度
+            neighPoint = await this.cacheService.get('breakpoints:app_id:'+appId+':break_point_id:'+contact[i]);  //通过contact[i],去redis里找
+            angle = 0;                                              //通过user.player.position;neighPoint.position获得角度
+            //angle = MoveService.getAngle(user.player.position,{x:user.player.position.x+1,y:user.player.position.y},neighPoint.position) ;
             if(Math.abs(angle - dir_action.move_angle)<45&&(minOffsetAngle == null||Math.abs(angle - dir_action.move_angle)<minOffsetAngle)){
                 chooseBreakPointId = contact[i];
                 minOffsetAngle = Math.abs(angle - dir_action.move_angle);
@@ -175,84 +183,27 @@ export class JoystickService {
 
             //过渡
             //读redis里的数据,按照frame_index的大小排序
-            //key:moveframe:app_id+breakPointId+chooseBreakPointId+index
-            //value:frame_index,file_name,camera_position,camera_angle
-            let moveFrames = [];     //value赋值
-            //MoveService.createCacheReplys(moveFrames,traceId,userId,user.player.position,neighPoint.position)
+            const key ='moveframe:app_id:' +appId +':start_break_point_id:' +breakPointId +':end_break_point_id:' +chooseBreakPointId +':angle:' +user.camera.angle%45;
+            const moveFramesRes = await this.cacheService.get(key);
+            if (moveFramesRes == null) {
+                return replys;
+            }
+            const moveFrames = JSON.parse(moveFramesRes);
+            //读redis里的数据
+            const startBreakPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +breakPointId);
+            const startBreakPoint = JSON.parse(startBreakPointRes);
+
+            const endBreakPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +chooseBreakPointId);
+            const endBreakPoint = JSON.parse(endBreakPointRes);
+
+            let pathReplys = [];
+            //let pathReplys = MoveService.createCacheReplys(moveFrames,traceId,userId,breakPointId,startBreakPoint.position,endBreakPoint.position);
+            replys.push(pathReplys);
+            return replys;
         }
       }
-
-
-
-      const path = [100,99,97];    //需要计算路径
-      const angle = user.camera.angle.yaw%45;   //纠正需要
-      const index = Math.round(user.camera.angle.yaw/45);  //过渡需要
-
-      let replys = [];
-      let traceIds = [];
-      traceIds.push(traceId);  
-
-      //纠正,旋转传到缓存里
-      let checkReplys = [];
-      for(let i=0;i<angle;++i){
-         //let reply = rotateService.rotateForAngle(userId,(angle+i)%359);
-         //checkReplys.push(reply);
-      }
-      replys.push(checkReplys);
-
-      //过渡传到缓存里
-      this.reply.traceIds = traceIds;
-      this.reply['newUserStates'][0].userId = userId;
-      this.reply['actionResponses'][0].traceId = traceId;
-      
-      for(let i=0;i<path.length-1;++i){
-        let pathReplys = [];
-        let start_break_point_id = path[i];
-        let end_break_point_id = path[i+1];
-        //读redis里的数据,按照frame_index的大小排序
-        //key:moveframe:app_id+start_break_point_id+end_break_point_id+index
-        //value:frame_index,file_name,camera_position,camera_angle
-        let moveFrames = [];     //value赋值
-
-        //读redis里的数据
-        //key:breakpoints:app_id:10016:break_point_id:112
-        let startBreakPoint,endBreakPoint;    //value赋值
-        pathReplys = this.createCacheReplys(moveFrames,traceId,userId,startBreakPoint.position,endBreakPoint.position);
-        replys.push(pathReplys);
-      }
-
-      return replys;
-      
     } catch (error) {
       console.log('MoveService', error);
     }
   }
-
-  createCacheReplys(moveFrames,traceId,userId,startPosition,endPosition){
-
-    let replys = [];
-    for(let i = 1;i<moveFrames.length;++i){
-        let moveFrame = moveFrames[i];
-
-        let reply = JSON.parse(JSON.stringify(this.reply));
-        reply.traceIds.push(traceId);
-        reply['newUserStates'][0].userId = userId;
-    
-        reply['newUserStates'][0].playerState.player.position = {
-            x:(endPosition.x - startPosition.x)/moveFrames.length*i,
-            y:(endPosition.y - startPosition.y)/moveFrames.length*i,
-            z:(endPosition.z - startPosition.z)/moveFrames.length*i
-        }
-        reply['newUserStates'][0].playerState.player.angle = this.users[userId].player.angle;
-
-        reply['newUserStates'][0].playerState.camera.position = moveFrame.camera_position;
-        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;
-        replys.push(reply);
-    }
-    return replys;
-
-  }
 }

+ 262 - 73
src/back/move.service.ts

@@ -10,6 +10,7 @@ export class MoveService {
     Joystick: 15,
   };
   private users = {};
+
   private reply = {
     traceIds: [],
     vehicle: null,
@@ -75,124 +76,312 @@ export class MoveService {
     ],
     actionResponses: [
       {
-          "actionType": 1,
-          "pointType": 100,
-          "extra": "",
-          "traceId": "",
-          "packetId": "",
-          "nps": [],
-          "peopleNum": 0,
-          "zoneId": "",
-          "echoMsg": "",
-          "reserveDetail": null,
-          "userWithAvatarList": [],
-          "newUserStates": [],
-          "code": 0,
-          "msg": ""
-      }
+        actionType: 1,
+        pointType: 100,
+        extra: '',
+        traceId: '',
+        packetId: '',
+        nps: [],
+        peopleNum: 0,
+        zoneId: '',
+        echoMsg: '',
+        reserveDetail: null,
+        userWithAvatarList: [],
+        newUserStates: [],
+        code: 0,
+        msg: '',
+      },
     ],
     getStateType: 0,
     code: 0,
     msg: 'OK',
   };
 
+  init(app_id, userId) {
+    const user = {
+      appId: null,
+      userId: null,
+      breakPointId: null,
+      roomId: null,
+      player: {
+        position: { x: -700, y: 0, z: 0 },
+        angle: {
+          pitch: 0,
+          yaw: 0,
+          roll: 0,
+        },
+      },
+      camera: {
+        position: { x: -1145, y: 0, z: 160 },
+        angle: {
+          pitch: 0,
+          yaw: 0,
+          roll: 0,
+        },
+      },
+      rotateInfo: {
+        frameIndex: 0,
+        horizontal_move: 0,
+        mediaSrc: null,
+      },
+      moveInfo: {},
+      // traceIds: [],
+      // actionResponses:[]
+    };
+
+    user.appId = app_id;
+    user.userId = userId;
+    user.breakPointId = 100;
+    this.users[userId] = user;
+  }
+
   async move(actionRequest) {
     try {
       const userId = actionRequest['user_id'];
       const traceId = actionRequest['trace_id'];
       const actionType = actionRequest['action_type'];
       const user = this.users[userId];
-     
+
       const appId = user.appId;
-      const path = [100,99,97];    //需要计算路径
-      const angle = user.camera.angle.yaw%45;   //纠正需要
-      const index = Math.round(user.camera.angle.yaw/45);  //过渡需要
+      const path = [100, 101, 102]; //需要计算路径
+      const angle = user.camera.angle.yaw % 45; //纠正需要
+      const index = Math.round(user.camera.angle.yaw / 45); //过渡需要
 
-      let replys = [];
-      let traceIds = [];
-      traceIds.push(traceId);  
+      const replys = {};
+      const traceIds = [];
+      traceIds.push(traceId);
 
       //纠正,旋转传到缓存里
-      let checkReplys = [];
-      for(let i=0;i<angle;++i){
-         //let reply = rotateService.rotateForAngle(userId,(angle+i)%359);
-         //reply.traceIds = [];
-         //reply.traceIds.push(traceId);
-         //let actionResponse = rotateService.createActionResponse(actionType,trace_id);
-         //reply.actionResponses = [];
-         //reply.actionResponses.push(actionResponse);
-         //checkReplys.push(reply);
+      const checkReplys = [];
+      for (let i = 0; i < angle; ++i) {
+        //let reply = rotateService.rotateForAngle(userId,(angle+i)%359);
+        //reply.traceIds = [];
+        //reply.traceIds.push(traceId);
+        //let actionResponse = rotateService.createActionResponse(actionType,trace_id);
+        //reply.actionResponses = [];
+        //reply.actionResponses.push(actionResponse);
+        //checkReplys.push(reply);
       }
-      replys.push(checkReplys);
+      replys['P' + user.breakPointId + 'T' + user.breakPointId] = checkReplys;
+      //replys.push(checkReplys);
 
       //过渡传到缓存里
       this.reply.traceIds = traceIds;
       this.reply['newUserStates'][0].userId = userId;
       this.reply['actionResponses'][0].traceId = traceId;
-      
-      for(let i=0;i<path.length-1;++i){
+
+      for (let i = 0; i < path.length - 1; ++i) {
         let pathReplys = [];
-        let start_break_point_id = path[i];
-        let end_break_point_id = path[i+1];
+        const start_break_point_id = path[i];
+        const end_break_point_id = path[i + 1];
         //读redis里的数据,按照frame_index的大小排序
-        let key = 'moveframe:app_id:'+appId+':start_break_point_id:'+start_break_point_id+':end_break_point_id:'+end_break_point_id+':angle:'+index;
-        let moveFrames = await this.cacheService.get(key);
-        if(moveFrames == null){
+        const key =
+          'moveframe:app_id:' +
+          appId +
+          ':start_break_point_id:' +
+          start_break_point_id +
+          ':end_break_point_id:' +
+          end_break_point_id +
+          ':angle:' +
+          index;
+        const moveFramesRes = await this.cacheService.get(key);
+        if (moveFramesRes == null) {
           return replys;
         }
-
+        const moveFrames = JSON.parse(moveFramesRes);
         //读redis里的数据
-        const startBreakPoint = await this.cacheService.get('breakpoints:app_id:'+appId+':break_point_id:'+start_break_point_id);
-        const endBreakPoint = await this.cacheService.get('breakpoints:app_id:'+appId+':break_point_id:'+end_break_point_id);
-        
-        pathReplys = this.createCacheReplys(moveFrames,traceId,userId,startBreakPoint.position,endBreakPoint.position);
-        replys.push(pathReplys);
-      }
+        const startBreakPointRes = await this.cacheService.get(
+          'breakpoints:app_id:' +
+            appId +
+            ':break_point_id:' +
+            start_break_point_id,
+        );
 
+        const startBreakPoint = JSON.parse(startBreakPointRes);
+
+        const endBreakPointRes = await this.cacheService.get(
+          'breakpoints:app_id:' +
+            appId +
+            ':break_point_id:' +
+            end_break_point_id,
+        );
+        const endBreakPoint = JSON.parse(endBreakPointRes);
+        pathReplys = this.createCacheReplys(
+          moveFrames,
+          traceId,
+          userId,
+          start_break_point_id,
+          startBreakPoint.position,
+          endBreakPoint.position,
+        );
+        //replys.push(pathReplys);
+        replys['P' + start_break_point_id + 'T' + end_break_point_id] =
+          pathReplys;
+      }
       return replys;
-      
     } catch (error) {
       console.log('MoveService', error);
     }
   }
 
-  createCacheReplys(moveFrames,traceId,userId,startPosition,endPosition){
+  createCacheReplys(
+    moveFrames,
+    traceId,
+    userId,
+    breakPointId,
+    startPosition,
+    endPosition,
+  ) {
+    const replys = [];
 
-    let replys = [];
-    for(let i = 1;i<moveFrames.length;++i){
-        let moveFrame = moveFrames[i];
+    const angle =
+      -1 *
+      this.getAngle(
+        startPosition,
+        {
+          x: startPosition.x + 1,
+          y: startPosition.y,
+        },
+        endPosition,
+      );
 
-        let reply = JSON.parse(JSON.stringify(this.reply));
-        reply.traceIds.push(traceId);
-        reply['newUserStates'][0].userId = userId;
-    
-        reply['newUserStates'][0].playerState.player.position = {
-            x:(endPosition.x - startPosition.x)/moveFrames.length*i,
-            y:(endPosition.y - startPosition.y)/moveFrames.length*i,
-            z:(endPosition.z - startPosition.z)/moveFrames.length*i
-        }
-        reply['newUserStates'][0].playerState.player.angle = this.users[userId].player.angle;
-
-        reply['newUserStates'][0].playerState.camera.position = moveFrame.camera_position;
-        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;
-        replys.push(reply);
+    for (let i = 1; i < moveFrames.length; i += 5) {
+      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;
+      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 =
+        '/' +
+        '0000000001' +
+        '/' +
+        breakPointId +
+        '/' +
+        moveFrame.file_name.substring(0, moveFrame.file_name.indexOf('.')) +
+        '/' +
+        moveFrame.file_name +
+        '?m=' +
+        new Date().getTime();
+
+      replys.push(reply);
     }
     return replys;
-
   }
 
   //需要通知user,人物和相机走到哪一个呼吸点位了
-  updateUser(userId,breakPointId,lastReply){
-    let user = this.users[userId];
+  updateUser(userId, breakPointId, lastReply) {
+    const user = this.users[userId];
     user.breakPointId = breakPointId;
 
-    user.player.position = lastReply['newUserStates'][0].playerState.player.position;
+    user.player.position =
+      lastReply['newUserStates'][0].playerState.player.position;
     user.player.angle = lastReply['newUserStates'][0].playerState.player.angle;
 
-    user.camera.position = lastReply['newUserStates'][0].playerState.camera.position;
+    user.camera.position =
+      lastReply['newUserStates'][0].playerState.camera.position;
     user.camera.angle = lastReply['newUserStates'][0].playerState.camera.angle;
   }
+
+  async getBreakPoints(actionRequest) {
+    const userId = actionRequest['user_id'];
+    const traceId = actionRequest['trace_id'];
+    const actionType = actionRequest['action_type'];
+
+    const user = this.users[userId];
+    const appId = user.appId;
+    const breakPointId = user.breakPointId;
+
+    const reply = {
+      actionType: actionType,
+      pointType: 100,
+      extra: '',
+      traceId: traceId,
+      packetId: '',
+      nps: [],
+      peopleNum: 0,
+      zoneId: '',
+      echoMsg: '',
+      reserveDetail: null,
+      userWithAvatarList: [],
+      newUserStates: [],
+      code: 0,
+      msg: '',
+    };
+
+    //const breakPoints = await this.cacheService.get('breakpoints:app_id:'+appId+':break_point_id:'+breakPointId);
+    //获取redis表全部元素,'breakpoints:app_id:'+appId+':break_point_id:'开头的
+    const breakPoints = [];
+    for (let i = 0; i < breakPoints.length; ++i) {
+      const position = breakPoints[i].position;
+      reply['nps'].push(position);
+    }
+    return reply;
+  }
+
+  getAngle(point, point1, point2) {
+    const x1 = point1.x - point.x;
+    const y1 = point1.y - point.y;
+
+    const x2 = point2.x - point.x;
+    const y2 = point2.y - point.y;
+
+    const dot = x1 * x2 + y1 * y2;
+    const det = x1 * y2 - y1 * x2;
+    const angle = (Math.atan2(det, dot) / Math.PI) * 180;
+    return (angle + 360) % 360;
+  }
+
+  async stop(traceId,userId,breakPointId,cameraAngle,playerAngle){
+    const user = this.users[userId];
+    user.breakPointId = breakPointId;
+    const appId = user.appId;
+
+    const breakPointRes = await this.cacheService.get('breakpoints:app_id:' +appId +':break_point_id:' +breakPointId);
+    const breakPoint = JSON.parse(breakPointRes);
+
+    user.player.position = breakPoint.position;
+    user.player.angle = playerAngle;
+
+    const rotateDataRes ='rotateframe:app_id:' +appId +':frame_index:' + cameraAngle.yaw +':break_point_id:' +breakPointId;
+    const rotateData = await this.cacheService.get(rotateDataRes);
+
+    user.camera.position = rotateData.cameraPosition;
+    user.camera.angle = rotateData.cameraAngle;
+
+    const reply = JSON.parse(JSON.stringify(this.reply));
+    reply.traceIds.push(traceId);
+    reply['newUserStates'][0].userId = userId;
+    reply['newUserStates'][0].playerState.player.position = breakPoint.position;
+    reply['newUserStates'][0].playerState.player.angle = playerAngle;
+    reply['newUserStates'][0].playerState.camera.position = rotateData.cameraPosition;
+    reply['newUserStates'][0].playerState.camera.angle = rotateData.cameraAngle;
+    reply['newUserStates'][0].playerState.cameraCenter = breakPoint.position;
+    reply['actionResponses'][0].traceId = traceId;
+    reply.mediaSrc ='/' +'0000000001' +'/' +breakPointId +'/' +rotateData.directory +'/' +rotateData.fileName +'?m=' +new Date().getTime();
+    return reply;
+  }
 }

+ 29 - 11
src/back/rotate.service.ts

@@ -266,7 +266,7 @@ export class RotateService {
       const redisData = await this.cacheService.get(key);
       if (redisData && redisData.length > 0) {
         const value = redisData ? JSON.parse(redisData) : null;
-        console.log('rotate-service', value);
+        // console.log('rotate-service', value);
         user.camera['position'] = value ? value.cameraPosition : '';
         user.camera['angle'] = value ? value.cameraAngle : '';
 
@@ -417,26 +417,44 @@ export class RotateService {
     }
   }
 
-  async ech(userId) {
+  async echo(userId) {
     const user = this.users[userId];
     const reply = JSON.parse(JSON.stringify(this.replies[userId]));
     reply['newUserStates'][0]['userId'] = userId;
-    reply['newUserStates'][0]['playerState'].player.position = user.player.position;
+    reply['newUserStates'][0]['playerState'].player.position =
+      user.player.position;
     reply['newUserStates'][0]['playerState'].player.angle = user.player.angle;
-    reply['newUserStates'][0]['playerState'].camera.position =  user.camera['position'];
-    reply['newUserStates'][0]['playerState'].camera.angle = user.camera['angle'];
-    reply['newUserStates'][0]['playerState'].cameraCenter = user.player.position;
+    reply['newUserStates'][0]['playerState'].camera.position =
+      user.camera['position'];
+    reply['newUserStates'][0]['playerState'].camera.angle =
+      user.camera['angle'];
+    reply['newUserStates'][0]['playerState'].cameraCenter =
+      user.player.position;
 
-    const key ='rotateframe:app_id:' +user.appId +':frame_index:' + user.rotateInfo.frameIndex +':break_point_id:' +user.breakPointId;
+    const key =
+      'rotateframe:app_id:' +
+      user.appId +
+      ':frame_index:' +
+      user.rotateInfo.frameIndex +
+      ':break_point_id:' +
+      user.breakPointId;
     const redisData = await this.cacheService.get(key);
     if (redisData && redisData.length > 0) {
       const value = redisData ? JSON.parse(redisData) : null;
-      reply.mediaSrc ='/' +'0000000001' +'/' +user.breakPointId +'/' +value.directory +'/' +value.fileName +'?m=' +new Date().getTime();
+      reply.mediaSrc =
+        '/' +
+        '0000000001' +
+        '/' +
+        user.breakPointId +
+        '/' +
+        value.directory +
+        '/' +
+        value.fileName +
+        '?m=' +
+        new Date().getTime();
       return reply;
-    }
-    else{
+    } else {
       return null;
     }
-    
   }
 }