xushiting 3 anni fa
parent
commit
7c4c1046bc

+ 3 - 0
src/main/java/com/fdkk/fdkkmeta/grpcService/SceneGrpcService.java

@@ -1,6 +1,7 @@
 package com.fdkk.fdkkmeta.grpcService;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
 import com.fdkk.fdkkmeta.domain.po.PointPO;
 import com.fdkk.fdkkmeta.grpc.*;
 
@@ -20,4 +21,6 @@ public interface SceneGrpcService {
     Point createPoint(String x,String y,String z);
     AngleUe4 createAngle(int pitch,int yaw,int roll);
     double calAngle(PointPO o, PointPO s, PointPO e);
+
+    int calAngleForBreakPointId(BreakpointsEntity breakpointsEntity1,BreakpointsEntity breakpointsEntity2);
 }

+ 14 - 0
src/main/java/com/fdkk/fdkkmeta/grpcService/SceneGrpcServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkk.fdkkmeta.grpcService;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
 import com.fdkk.fdkkmeta.domain.po.PointPO;
 import com.fdkk.fdkkmeta.grpc.*;
 import lombok.extern.slf4j.Slf4j;
@@ -179,4 +180,17 @@ public class SceneGrpcServiceImpl implements SceneGrpcService {
             return 360 - 180 * fi / Math.PI;
         }
     }
+
+    @Override
+    public int calAngleForBreakPointId(BreakpointsEntity breakpointsEntity1, BreakpointsEntity breakpointsEntity2){
+        PointPO startPosition = breakpointsEntity1.getPosition();
+        PointPO endPosition = breakpointsEntity2.getPosition();
+
+        PointPO temp = new PointPO();
+        temp.setX(startPosition.getX()+1);
+        temp.setY(startPosition.getY());
+        temp.setZ(startPosition.getZ());
+        int angle = (int)calAngle(startPosition, temp, endPosition);
+        return angle;
+    }
 }

+ 27 - 545
src/main/java/com/fdkk/fdkkmeta/grpcService/sceneGrpcServer.java

@@ -108,64 +108,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     @Override
     public void init(InitRequest request, StreamObserver<NormalReply> responseObserver)   {
 
-		/*
-			{
-				"id": "start",
-				"room_id": "e629ef3e-022d-4e64-8654-703bb96410eb",
-				"user_id": "f60d69e6e68cc",
-				"trace_id": "78c891ae-0f4e-4db0-bdec-f80ca6c0b66e",
-				"data": {
-					"avatar_id": "KGe_Boy",
-					"skin_id": "10089",
-					"is_host": false,
-					"skin_data_version": "1008900008",
-					"rotation_render_type": 1,
-					"is_all_sync": true,
-					"nick_name": "f60d69e6e68cc",
-					"app_id": "10016",
-					"camera": {
-						"position": {
-							"x": -1047.49,
-							"y": -1441.18,
-							"z": 87.75
-						},
-						"angle": {
-							"pitch": 0,
-							"yaw": 0,
-							"roll": 0
-						}
-					},
-					"player": {
-						"position": {
-							"x": -727.49,
-							"y": -1441.18,
-							"z": -32.25
-						},
-						"angle": {
-							"pitch": 0,
-							"yaw": 0,
-							"roll": 0
-						}
-					},
-					"person": 0,
-					"firends": [
-						"user1"
-					],
-					"sync_by_event": true,
-					"area_name": "LQC",
-					"path_name": "thirdwalk",
-					"attitude": "walk",
-					"room_type_id": "",
-					"syncToOthers": true,
-					"hasAvatar": true,
-					"prioritySync": false,
-					"extra": {
-						"removeWhenDisconnected": true
-					}
-				}
-			}
-		*/
-
     	try {
     		String user_id = request.getUserId();
     		String nick_name = request.getNickName();
@@ -201,14 +143,15 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			player_position.setY(Double.parseDouble(playerPoint.getY()));
 			player_position.setZ(Double.parseDouble(playerPoint.getZ()));
 			userEntity.setPlayerPosition(player_position);
-
+            //数据库user表中创建用户记录
             userService.save(userEntity);
-			//todo 存入redis
-			//redisCache.set("updateFrameMetadata:"+userEntity.getUserId(),a.toJSONString());
+
 			JSONObject myState = new JSONObject();
 			myState.put("isMoving",0);
+			//redis中写入用户状态信息
 			redisCache.setCacheObject("UserState:"+userEntity.getUserId(),myState);
 
+			//返回
 			NormalReply.Builder builder = NormalReply.newBuilder();
 			builder.setCode(1);
 			responseObserver.onNext(builder.build());
@@ -223,18 +166,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     @Override
     public void rotate(RotateRequest request, StreamObserver<NormalReply> responseObserver)   {
     	try {
-    		/*
-    		{
-    			"action_type":1014,
-    			"rotation_action":
-    			{
-    				"vertical_move":0,
-    				"horizontal_move":-0.020630372492836675
-    			},
-    			"trace_id":"b40a894e-cd59-4db5-8d75-a8466a0c9f15",
-    			"user_id":"0a3987974feb4"
-    		}
-    		*/
 			ActionPO rotateRequestPO = new ActionPO();
 
     		int action_type = request.getActionType();
@@ -245,12 +176,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			UserEntity user = userService.findUserId(user_id);
 			RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
 
-			JSONObject rotation_action = new JSONObject();
-//			rotation_action.put("vertical_move",rotationAction.getVerticalMove());
-//			rotation_action.put("horizontal_move",rotationAction.getHorizontalMove());
-
 			rotateRequestPO.setAction_type(action_type);
-			//rotateRequestPO.setRotation_action(rotation_action);
 			rotateRequestPO.setTrace_id(trace_id);
 			rotateRequestPO.setUser_id(user_id);
 
@@ -269,67 +195,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			rotateRequestPO.setFrameId(rotateFrameEntity.getId());
 			//每次存一帧
 			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(rotateRequestPO));
-			/*
-    		//这三个变量从user表和rotateframe表里取
-            UserEntity user = userService.findUserId(user_id);
-			Long breakPointId = user.getBreakPointId();
-            BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),breakPointId);
-            RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-
-            PointPO playerPoint = breakpointsEntity.getPosition();
-            Point playerPosition = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-            AnglePO playerAnglePO = user.getPlayerAngle();
-            AngleUe4 playerAngle = createAngle(playerAnglePO.getPitch(),playerAnglePO.getYaw(),playerAnglePO.getRoll());
-            Space player = createSpace(playerPosition,playerAngle);
-
-    		double hAngle = horizontal_move * 90;
-    		int offFrameIndex = (int)Math.ceil(hAngle);
-    		int currentFrame = rotateFrameEntity.getFrameIndex();      //从数据库里读取
-    		currentFrame +=offFrameIndex;
-			if(currentFrame<0){
-				currentFrame+=360;
-			}
-    		else{
-				currentFrame = currentFrame % 359;
-			}
-    		//currentFrame
-			log.info("currentFrame{}",currentFrame);
-			String appId = user.getAppId();
-			rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(appId,breakPointId,currentFrame);
-			PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
-			Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-			AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-            AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-    		Space camera = createSpace(cameraPosition,cameraAngle);
-
-    		//对准player
-    		Point cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-
-    		State playerState = createPlayerState( player, camera, cameraCenter);
-    		RenderInfo renderInfo = createRenderInfo();
-    		Event event = createEvent();
-    		UserState userState = createUserState( user_id, playerState, renderInfo, event);
-
-    		String frameSrc = metaConfig.getVideoFramePath()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName();
-            /// metaConfig.getVideoFramePath()
-            log.info("VideoFramePath{}", metaConfig.getVideoFramePath());
-			NormalReply.Builder builder = NormalReply.newBuilder();
-			builder.setCode(1);
-//			builder.addTraceIds(trace_id);
-//			//builder.setVehicle(null);
-//			builder.setVehicle("");
-//			builder.addNewUserStates(userState);
-//			builder.addActionResponses(0);//这个要查查
-//			builder.addNewUserStates(userState);
-//
-//			builder.setVehicle("");
-//			builder.setGetStateType(0);
-//			builder.setCode(0);
-//			builder.setMsg("OK");
-//			builder.setFrameSrc(frameSrc); //从数据库中获取对应的路径
-	        responseObserver.onNext(builder.build());
-	        responseObserver.onCompleted();
-	        */
+			//没有更新user表中的frame_id,因为这样太慢了,后续再处理
 			NormalReply.Builder builder = NormalReply.newBuilder();
 			builder.setCode(1);
 			responseObserver.onNext(builder.build());
@@ -459,6 +325,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			UserEntity user = userService.findUserId(user_id);
 			String appId = user.getAppId();
 			Long breakPointId = user.getBreakPointId();
+			BreakpointsEntity currentBreakpointsEntity = breakpointsService.getById(breakPointId);
 			Point end = clicking_action.getClickingPoint();
 			RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
 			//计算路径
@@ -482,7 +349,8 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 					//旋转矫正
 					if(i == 1){
 						AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-						cameraAnglePO = setRotateForMove( user, trace_id, cameraAnglePO.getYaw());
+						//旋转矫正:不仅存入redis,而且返回矫正后的角度
+						cameraAnglePO = setRotateForMove( user, trace_id, cameraAnglePO);
 						movePO.setCameraAngle(cameraAnglePO);
 					}
 				}
@@ -491,16 +359,15 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 				movePO.setUser_id(user_id);
 				movePO.setPath(path);
 
-				PointPO temp = new PointPO();
-				temp.setX(s.getX()+1);
-				temp.setY(s.getY());
-				temp.setZ(s.getZ());
 				Long lastBreakPointId = JSON.parseObject(JSONObject.toJSON(maps.get(maps.size() -1)).toString()).getLong("id");
 				BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(appId,lastBreakPointId);
-				double angle = sceneGrpcService.calAngle(s, temp, breakpointsEntity.getPosition());
+				int playerAngleYaw = sceneGrpcService.calAngleForBreakPointId(currentBreakpointsEntity,breakpointsEntity);
 				AnglePO playerAngle = user.getPlayerAngle();
-				playerAngle.setYaw((int)angle);
+				playerAngle.setYaw(playerAngleYaw);
 				movePO.setPlayerAngle(playerAngle);
+
+				int subFrameIndex = moveFrameService.getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle( user.getAppId(),path.getLongValue(0),path.getLongValue(1), movePO.getCameraAngle().getYaw()%45);
+				movePO.setSubFrameIndex(subFrameIndex);
 				redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(movePO));
 			}
 
@@ -515,17 +382,12 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 		}
 	}
 
-	private AnglePO setRotateForMove(UserEntity user,String trace_id,int angle){
+	private AnglePO setRotateForMove(UserEntity user,String trace_id,AnglePO cameraAngle){
+		int angle = cameraAngle.getYaw();
 		int offAngle = 0;
 		offAngle = angle%45;
 
-//						if(offAngle>45-offAngle) {
-//							offAngle = 45-offAngle;
-//						}
-//						else {
-//							offAngle = -1*offAngle;
-//						}
-		//先简单来,就累加
+		//先简单来,就累加。后续要再调试
 		//存储矫正的一组帧
 		offAngle = Math.abs(45 - offAngle);
 		RotateFrameEntity _rotateFrameEntity = null;
@@ -549,255 +411,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			return _rotateFrameEntity.getCameraAngle();
 		}
 	}
-	/*
-    //返回的是角度矫正数据
-    @Override
-    public void moveStart(StartMoveRequest request, StreamObserver<MoveReply> responseObserver)   {
-     	try {
-        	 // 1.从user表里获得当前人物所在的breakPoint_id
-        	 // 2.根据breakPoint_id,从breakpoints表里获得对应的起始坐标
-        	 // 3.根据request中的clicking_action里的clicking_point(目的地)以及当前起始坐标计算出路径
-        	 // 4.返回整个路径的一段
-
-     		int action_type= request.getActionType();
-     		ClickingAction clicking_action = request.getClickingAction();
-     		Point end = clicking_action.getClickingPoint();
-     		State clicking_state = request.getClickingState();
-     		String trace_id = request.getTraceId();
-     		String user_id = request.getUserId();
-
-			MoveReply.Builder builder = MoveReply.newBuilder();
-
-            UserEntity user = userService.findUserId(user_id);
-            String appId = user.getAppId();
-			Long breakPointId = user.getBreakPointId();
-			BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(appId,breakPointId);
-            RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-
-            boolean isEnd = false;
-     		//计算路径
-            RouteDto po=new RouteDto();
-            PointPO s=breakpointsEntity.getPosition();
-            PointPO e=new PointPO();
-            e.setX(Double.parseDouble(end.getX()));
-            e.setY(Double.parseDouble(end.getY()));
-            e.setZ(Double.parseDouble(end.getZ()));
-            po.setE_location(e);
-            po.setS_location(s);
-            po.setSceneCode(appId);
-            JSONArray maps = GetRoute.getRoute(metaConfig.getFreespacePath()+ File.separator +appId+"_target_freespace.json", po);
-            //处理路径数组,处理完成后放入缓存
-			//获得下一个要走的breakPointId
-			Long nextbreakPointId = 0L;
-			if (ObjectUtil.isNotNull(maps)&&maps.size()>=2){
-				nextbreakPointId = JSON.parseObject(JSONObject.toJSON(maps.get(1)).toString()).getLong("id");
-				maps.remove(0);
-				redisCache.setCacheObject("route:"+trace_id,maps);
-			}
-			else {
-				isEnd = true;
-			}
-
-     		//开始返回结果,一段一段的返回(每段是两个邻居点的过渡),第一段之前还要有角度的矫正
-     		//矫正的结果:
-            //moveFrameService.findById()
-            PointPO playerPoint = breakpointsEntity.getPosition();
-            Point playerPosition = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-            AnglePO playerAnglePO = user.getPlayerAngle();
-            AngleUe4 playerAngle = createAngle(playerAnglePO.getPitch(),playerAnglePO.getYaw(),playerAnglePO.getRoll());
-            Space player = createSpace(playerPosition,playerAngle);
-
-            AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-
-            int angle = cameraAnglePO.getYaw();
-            int offAngle = 0;
-            offAngle = angle%45;
-            if(offAngle>45-offAngle) {
-            	offAngle = 45-offAngle;
-            }
-            else {
-            	offAngle = -1*offAngle;
-            }
-			List<RotateFrameEntity> rotateFrameEntityList = rotateFrameService.findByAppIdAndBreakPointIdBetweenFrameIndex(appId, breakPointId, angle, offAngle + angle);
-			//循环
-            for(int i=0;i<rotateFrameEntityList.size();++i) {
-            	RotateFrameEntity _rotateFrameEntity = rotateFrameEntityList.get(i);
-            	PointPO cameraPoint = _rotateFrameEntity.getCameraPosition();
-                Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-                AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-                Space camera = createSpace(cameraPosition,cameraAngle);
-
-            	Point cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-            	String frameSrc = metaConfig.getVideoFramePath()+"/"+_rotateFrameEntity.getDirectory()+"/"+_rotateFrameEntity.getFileName();
-            	//添加player,camera,cameraCenter,frameSrc
-				builder.addPlayer(player);
-				builder.addCamera(camera);
-				builder.addCameraCenter(cameraCenter);
-				builder.addFrameSrc(frameSrc);
-            }
-
-            breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(appId,nextbreakPointId);
-            PointPO endPosition = breakpointsEntity.getPosition();
-
-            JSONObject p1 = new JSONObject();
-            p1.put("x", playerPoint.getX());
-            p1.put("y", playerPoint.getY());
-
-            JSONObject p2 = new JSONObject();
-			p2.put("x", playerPoint.getX()+1);
-			p2.put("y", playerPoint.getY());
-
-            JSONObject p3 = new JSONObject();
-			p3.put("x",endPosition.getX());
-			p3.put("y",endPosition.getY());
-
-			int _angle = (int)calAngle(p1,p2,p3);
-
-            List<MoveFrameEntity> moveFrameEntityList = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(appId, breakPointId, nextbreakPointId, (int)(offAngle + angle)/45);
-
-            double offsetX = endPosition.getX() - playerPoint.getX();
-            double offsetY = endPosition.getY() - playerPoint.getY();
-            double offsetZ = endPosition.getZ() - playerPoint.getZ();
-
-            for(int i=0;i<moveFrameEntityList.size();++i) {
-            	MoveFrameEntity _moveFrameEntityList = moveFrameEntityList.get(i);
-            	PointPO cameraPoint = _moveFrameEntityList.getCameraPosition();
-            	Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-            	AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-                Space _camera = createSpace(cameraPosition,cameraAngle);
-
-            	Point _cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-            	String _frameSrc = metaConfig.getVideoFramePath()+"/"+_moveFrameEntityList.getDirectory()+"/"+_moveFrameEntityList.getFileName();
-
-            	Point _playerPosition = createPoint(String.valueOf(playerPoint.getX()+offsetX/moveFrameEntityList.size()),String.valueOf(playerPoint.getY()+offsetY/moveFrameEntityList.size()),String.valueOf(playerPoint.getZ()+offsetZ/moveFrameEntityList.size()));
-				AngleUe4 _playerAngle = createAngle(playerAnglePO.getPitch(),_angle,playerAnglePO.getRoll());
-				Space _player = createSpace(_playerPosition,_playerAngle);
-            	//添加_player,camera,cameraCenter,frameSrc
-				builder.addPlayer(_player);
-				builder.addCamera(_camera);
-				builder.addCameraCenter(_cameraCenter);
-				builder.addFrameSrc(_frameSrc);
-            }
-
-//          PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
-//          Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-//          AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-//          Space camera = createSpace(cameraPosition,cameraAngle);
-
-//        	Point cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-//    		State playerState = createPlayerState( player, camera, cameraCenter);
-    		State playerState = createPlayerState( player, null, null);
-    		RenderInfo renderInfo = createRenderInfo();
-    		Event event = createEvent();
-    		UserState userState = createUserState( user_id, playerState, renderInfo, event);
-
-			//builder.addTraceIds()
-			//.setVehicle(null)
-			builder.setVehicle("");
-			builder.addNewUserStates( userState);
-			builder.addActionResponses(0);             //这个要查查
-			builder.setGetStateType(0);
-			builder.setCode(0);
-			builder.setMsg("OK");
-			builder.setIsEnd(isEnd);
-
-			responseObserver.onNext(builder.build());
-			responseObserver.onCompleted();
-    	}
-    	catch(Exception e) {
-    		e.printStackTrace();
-    	}
-    }
-
-    @Override
-    public void moveProcess(MoveNextNeighborRequest request, StreamObserver<MoveReply> responseObserver)   {
-     	try {
-        	 // 1.从user表里获得当前人物所在的breakPoint_id
-        	 // 2.根据breakPoint_id,从breakpoints表里获得对应的起始坐标
-        	 // 3.根据request中的clicking_action里的clicking_point(目的地)以及当前起始坐标计算出路径
-        	 // 4.返回整个路径的一段
-
-     		String user_id = request.getUserId();
-     		String trace_id = request.getTraceId();
-     		boolean needNext = request.getNext();
-
-     		boolean isEnd = false;
-
-            UserEntity user = userService.findUserId(user_id);
-            BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),user.getBreakPointId());
-            RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-     		//moveStart的结果参考moveStart
-     		//开始返回结果,一段一段的返回(每段是两个邻居点的过渡),第一段之前还要有角度的矫正
-     		//矫正的结果:
-            //moveFrameService.findById()
-            PointPO playerPoint = breakpointsEntity.getPosition();
-            Point playerPosition = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-            AnglePO playerAnglePO = user.getPlayerAngle();
-            AngleUe4 playerAngle = createAngle(playerAnglePO.getPitch(),playerAnglePO.getYaw(),playerAnglePO.getRoll());
-            Space player = createSpace(playerPosition,playerAngle);
-
-            AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-
-            int angle = cameraAnglePO.getYaw();
-            int offAngle = 0;
-            offAngle = angle%45;
-            if(offAngle>45-offAngle) {
-            	offAngle = 45-offAngle;
-            }
-            else {
-            	offAngle = -1*offAngle;
-            }
-			Long nextbreakPointId = 0L;
-			// 从缓存里面取 JSONArray cacheObject = redisCache.getCacheObject(trace_id);
-			if (needNext&&redisCache.hasKey(trace_id)){
-				JSONArray cacheObject = redisCache.getCacheObject(trace_id);
-				if (cacheObject.size()>=2){
-					 nextbreakPointId = JSON.parseObject(JSONObject.toJSON(cacheObject.get(1)).toString()).getLong("id");
-					cacheObject.remove(0);
-					redisCache.setCacheObject("route:"+trace_id,cacheObject);
-				}
-				else {
-					isEnd = true;
-				}
-			}
-			else {
-				isEnd = true;
-			}
-
-			//循环
-            //for()
-
-            PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
-            Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-            AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-            Space camera = createSpace(cameraPosition,cameraAngle);
-
-        	Point cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-    		State playerState = createPlayerState( player, camera, cameraCenter);
-    		RenderInfo renderInfo = createRenderInfo();
-    		Event event = createEvent();
-    		UserState userState = createUserState( user_id, playerState, renderInfo, event);
-    		MoveReply res = MoveReply.newBuilder()
-    				.setTraceIds(0, trace_id)
-    				//.setVehicle(null)
-					.setVehicle("")
-					.setNewUserStates(0, userState)
-    				.setActionResponses(0, 0)              //这个要查查
-    				.setGetStateType(0)
-    				.setCode(0)
-    				.setMsg("OK")
-    				//.setPlayer(index, value)
-    				//.setCamera(index, value)
-    				//.setCameraCenter(index, value)
-    				//.setFrameSrc(index, value)
-    				.setIsEnd(isEnd)
-    				.build();
-    	}
-    	catch(Exception e) {
-    		e.printStackTrace();
-    	}
-    }
-	*/
 
     @Override
     public void getBreakPoint(BreakPointRequest request, StreamObserver<BreakPointReply> responseObserver)   {
@@ -845,18 +458,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     public void joystick(JoystickRequest request, StreamObserver<NormalReply> responseObserver)   {
      	try {
             log.info("进入{}",request);
-        	/*
-    		{
-    			"action_type": 15,
-    			"dir_action": {
-    				"move_angle": 276,
-    				"speed_level": 8
-    			},
-    			"trace_id": "d0a45ade-b674-47dc-a546-36e981c78ae8",
-    			"user_id": "7ef177cb55c91",
-    			"packet_id": "d3a3b46a-33cf-486f-b8aa-36b26f786eeb"
-    		}
-    		*/
             int actionType = request.getActionType();
             DirAction dirAction = request.getDirAction();
      		String trace_id = request.getTraceId();
@@ -872,7 +473,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			playerAngle.setYaw(dirAction.getMoveAngle());
 			joystickPO.setPlayerAngle(playerAngle);
 			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
-
+			//速度不够,只是让人旋转
 			if(dirAction.getSpeedLevel()<7){
 				return;
 			}
@@ -882,28 +483,23 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), user.getBreakPointId());
 			BreakpointsEntity targetBreakpointsEntity = null;
 			List<Integer> neighBreakPointIds = breakpointsEntity.getContact();
-			PointPO playerPosition = breakpointsEntity.getPosition();
-			PointPO temp = new PointPO();
-			temp.setX(playerPosition.getX()+1);
-			temp.setY(playerPosition.getY());
-			temp.setZ(playerPosition.getZ());
+
 			double offAngle = 1000;
 			double moveAngle = dirAction.getMoveAngle();
-			double angle = 0;
+			int playerAngleYaw = 0;
 
 			if(neighBreakPointIds.size()>0){
 				for(int j=0;j<neighBreakPointIds.size();++j){
 					BreakpointsEntity _breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), (long)neighBreakPointIds.get(j));
-					angle = sceneGrpcService.calAngle(playerPosition, temp, _breakpointsEntity.getPosition());
-					if(Math.abs(angle - moveAngle)<offAngle){
-						offAngle = Math.abs(angle - moveAngle);
+					playerAngleYaw = sceneGrpcService.calAngleForBreakPointId(breakpointsEntity,_breakpointsEntity);
+					if(Math.abs(playerAngleYaw - moveAngle)<offAngle){
+						offAngle = Math.abs(playerAngleYaw - moveAngle);
 						targetBreakpointsEntity = _breakpointsEntity;
 					}
 				}
 				RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
 				AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-				cameraAnglePO = setRotateForMove( user, trace_id,cameraAnglePO.getYaw());
-
+				cameraAnglePO = setRotateForMove( user, trace_id,cameraAnglePO);
 				JSONArray path = new JSONArray();
 				path.add(user.getBreakPointId());
 				path.add(targetBreakpointsEntity.getBreakPointId());
@@ -914,22 +510,16 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 				movePO.setUser_id(user_id);
 				movePO.setPath(path);
 
-				playerAngle.setYaw((int)angle);
+				playerAngle.setYaw(playerAngleYaw);
 				movePO.setPlayerAngle(playerAngle);
+
 				movePO.setCameraAngle(cameraAnglePO);
 
-				//int subFrameIndex = moveFrameService
+				int subFrameIndex = moveFrameService.getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle( user.getAppId(),user.getBreakPointId(),targetBreakpointsEntity.getBreakPointId(), cameraAnglePO.getYaw()%45);
+				movePO.setSubFrameIndex(subFrameIndex);
 
 				redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(movePO));
 			}
-
-			//redisCache.setCacheObject("setCacheRequest:"+user_id,joystickPO);
-     		//UserEntity user = userService.findUserId(user_id);
-     		//Long breakPointId = user.getBreakPointId();
-     		//获得当前点所有邻居点
-			//TODO 获取棋盘邻居点 getContact
-			//BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), breakPointId);
-			//log.info("breakpointsEntity-getContact",breakpointsEntity.getContact());
 			//找到与角度move_angle最近的邻居点
      		//移动player,并且更新相机角度
 			NormalReply.Builder builder = NormalReply.newBuilder();
@@ -942,112 +532,4 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     	}
     }
 
-//    private UserState createUserState(String user_id,State state,RenderInfo renderInfo,Event event) {
-//    	UserState userState = UserState.newBuilder()
-//				.setUserId(user_id)
-//				.setPlayerState(state)
-//				.setRenderInfo(renderInfo)
-//				.setEvent(event)
-//				.setRelation(1)
-//				.build();
-//    	return userState;
-//    }
-
-//    private State createPlayerState(JSONObject userInfo) {
-//		State.Builder builder = State.newBuilder();
-//		builder.setRoomTypeId(userInfo.getString("roomTypeId"));
-//		builder.setPerson(0);
-//		builder.setAvatarId(userInfo.getString("avatarId"));
-//		builder.setSkinId(userInfo.getString("skinId"));
-//		builder.setRoomId(userInfo.getString("roomId"));
-//		builder.setIsHost(false);
-//		builder.setIsFollowHost(false);
-//		builder.setSkinDataVersion(userInfo.getString("skinDataVersion"));
-//		builder.setAvatarComponents("");
-//		builder.setNickName(userInfo.getString("nickName"));
-//		builder.setMovingMode(0);
-//		builder.setAttitude("walk");
-//		builder.setAreaName("");
-//		builder.setPathName("thirdwalk");
-//		builder.setPathId("thirdwalk");
-//		builder.setAvatarSize(1);
-//		if(userInfo.get("extra") != null){
-//			builder.setExtra((Extra)userInfo.get("extra"));
-//		}
-//		builder.setPrioritySync(false);
-//		builder.setPlayer((Space)userInfo.get("player"));
-//		if(userInfo.get("camera") != null){
-//			builder.setCamera((Space)userInfo.get("camera"));
-//		}
-//		if(userInfo.get("cameraCenter") != null){
-//			builder.setCamera((Space)userInfo.get("cameraCenter"));
-//		}
-//    	return builder.build();
-//    }
-//
-//    private RenderInfo createRenderInfo() {
-//    	RenderInfo renderInfo = RenderInfo.newBuilder()
-//    			.setRenderType(0)
-//    			//.setVideoFrame(null)
-//				.setVideoFrame("")
-//				.setCameraStateType(0)
-//    			.setIsMoving(0)
-//    			.setNeedIfr(0)
-//    			.setIsVideo(0)
-//    			.setStillFrame(0)
-//    			.setIsRotating(0)
-//    			.setIsFollowing(0)
-//    			.setClientPanoTreceId("")
-//    			.setPrefetchVideoId("")
-//    			.setNoMedia(false).build();
-//    	return renderInfo;
-//    }
-//
-//    private Event createEvent() {
-//    	Event event = Event.newBuilder().setId("").setType(0).build();
-//    	return event;
-//    }
-//
-//    private Space createSpace(Point position,AngleUe4 angle) {
-//    	Space space = Space.newBuilder().setPosition(position).setAngle(angle).build();
-//    	return space;
-//    }
-//
-//    private Point createPoint(String x,String y,String z) {
-//    	Point point = Point.newBuilder().setX(x).setY(y).setZ(z).build();
-//    	return point;
-//    }
-//
-//    private AngleUe4 createAngle(int pitch,int yaw,int roll) {
-//    	AngleUe4 angle = AngleUe4.newBuilder().setPitch(pitch).setYaw(yaw).setRoll(roll).build();
-//    	return angle;
-//    }
-//
-//    /**
-//     * 根据余弦定理计算线段1到线段2的夹角,线段1:起始点到原点,线段2:原点到结束点)
-//     * @param o 原点
-//     * @param s 起始点
-//     * @param e 结束点
-//     * @return
-//     */
-//    private double calAngle(JSONObject o, JSONObject s, JSONObject e) {
-//        double cosfi = 0;
-//        double fi = 0;
-//        double norm = 0;
-//        double dsx = s.getDoubleValue("x") - o.getDoubleValue("x");
-//        double dsy = s.getDoubleValue("y") - o.getDoubleValue("y");
-//        double dex = e.getDoubleValue("x") - o.getDoubleValue("x");
-//        double dey = e.getDoubleValue("y") - o.getDoubleValue("y");
-//        cosfi = dsx * dex + dsy * dey;
-//        norm = (dsx * dsx + dsy * dsy) * (dex * dex + dey * dey);
-//        cosfi /= Math.sqrt(norm);
-//        if (cosfi >= 1.0) return 0;
-//        if (cosfi <= -1.0) return Math.PI;
-//        fi = Math.acos(cosfi);
-//        if (180 * fi / Math.PI < 180) {
-//            return 180 * fi / Math.PI;
-//        } else {
-//            return 360 - 180 * fi / Math.PI;
-//        }
-//    }
 }

+ 2 - 0
src/main/java/com/fdkk/fdkkmeta/service/MoveFrameService.java

@@ -13,4 +13,6 @@ public interface MoveFrameService extends IBaseService<MoveFrameEntity> {
     List<MoveFrameEntity> findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId,Long startBreakPointId,Long endBreakPointId,Integer angle);
 
     MoveFrameEntity findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(String appId,Long startBreakPointId,Long endBreakPointId,Integer angle,int frameIndex);
+
+    int getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId,Long startBreakPointId,Long endBreakPointId,Integer angle);
 }

+ 10 - 0
src/main/java/com/fdkk/fdkkmeta/service/impl/MoveFrameServiceImpl.java

@@ -45,4 +45,14 @@ public class MoveFrameServiceImpl extends BaseServiceImpl<MoveFramesMapper, Move
         wrapper.eq(MoveFrameEntity::getFrameIndex, frameIndex);
         return getOne(wrapper);
     }
+
+    @Override
+    public int getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId, Long startBreakPointId, Long endBreakPointId, Integer angle) {
+        LambdaQueryWrapper<MoveFrameEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(MoveFrameEntity::getAppId, appId);
+        wrapper.eq(MoveFrameEntity::getStartBreakPointId, startBreakPointId);
+        wrapper.eq(MoveFrameEntity::getEndBreakPointId, endBreakPointId);
+        wrapper.eq(MoveFrameEntity::getAngle, angle);
+        return count(wrapper);
+    }
 }

+ 28 - 384
src/main/java/com/fdkk/fdkkmeta/task/UpdateFrameMetaTask.java

@@ -60,7 +60,6 @@ public class UpdateFrameMetaTask {
                    handle( userEntity,list);
                }
        );
-
    }
 
     private void handle(UserEntity user,List<ActionPO> list){
@@ -76,20 +75,19 @@ public class UpdateFrameMetaTask {
 
         ActionPO _actionPO = list.get(0);
         int firstActionType = _actionPO.getAction_type();
-
+        JSONArray path = _actionPO.getPath();
         if(firstActionType == 1014||firstActionType == 15){
             rotateJoystickList.add(_actionPO);
         }
         else if(firstActionType == 1){
-            JSONArray path = _actionPO.getPath();
             long startBreakPointId = path.getLongValue(0);
             long endBreakPointId = path.getLongValue(1);
+            BreakpointsEntity startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
+            BreakpointsEntity endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
+
             //过渡
             if(myState.getIntValue("isMoving") == 1){
                 MoveFrameEntity moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
-                BreakpointsEntity startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
-                BreakpointsEntity endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
-
                 if(moveFrameEntity==null){
                     path.remove(0);
                     //过渡下一段
@@ -100,7 +98,17 @@ public class UpdateFrameMetaTask {
                         _actionPO.setFrameIndex(0);
                         _actionPO.setStartPostion(null);
                         _actionPO.setEndPosition(null);
-                        moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
+                        moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),1);
+                        user.setFrameId(moveFrameEntity.getId());
+                        startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
+                        endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
+                        int _angle = sceneGrpcService.calAngleForBreakPointId(startBreakpointsEntity,endBreakpointsEntity);
+                        AnglePO playerAngle = user.getPlayerAngle();
+                        playerAngle.setYaw(_angle);
+                        user.setPlayerAngle(playerAngle);
+                        user.setBreakPointId(startBreakPointId);
+                        user.setPlayerPosition(startBreakpointsEntity.getPosition());
+                        userService.updateById(user);
                     }
                     //过渡全部结束
                     else{
@@ -112,7 +120,8 @@ public class UpdateFrameMetaTask {
                         user.setFrameId(moveFrameEntity.getId());
                         user.setPlayerAngle(_actionPO.getPlayerAngle());
                         user.setBreakPointId(endBreakPointId);
-                        /*************************************************************************************************************/
+                        userService.updateById(user);
+
                         myState.put("isMoving",0);
                         redisCache.setCacheObject("UserState"+user.getUserId(),myState);
                         //执行下一条记录
@@ -128,7 +137,9 @@ public class UpdateFrameMetaTask {
                 }
                 _actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
                 PointPO playerPosition = new PointPO();
-                playerPosition.setX((_actionPO.getEndPosition().getX() - _actionPO.getStartPostion().getX())/n*_actionPO.getFrameIndex());
+                playerPosition.setX((_actionPO.getEndPosition().getX() - _actionPO.getStartPostion().getX())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
+                playerPosition.setY((_actionPO.getEndPosition().getY() - _actionPO.getStartPostion().getY())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
+                playerPosition.setZ((_actionPO.getEndPosition().getZ() - _actionPO.getStartPostion().getZ())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
                 createMoveFrameMetadata(user.getUserId(),_actionPO.getPlayerAngle(), playerPosition, moveFrameEntity,_actionPO.getTrace_id());
                 //更新redis里的数据
                 redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
@@ -146,11 +157,15 @@ public class UpdateFrameMetaTask {
                     //过渡
                     myState.put("isMoving",1);
                     redisCache.setCacheObject("UserState"+user.getUserId(),myState);
-                    MoveFrameEntity moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getMoveAngle(),_actionPO.getFrameIndex()+1);
+                    MoveFrameEntity moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
                     //更新
-                    createMoveFrameMetadata( user, moveFrameEntity,_actionPO.getTrace_id());
+                    int _angle = sceneGrpcService.calAngleForBreakPointId(startBreakpointsEntity,endBreakpointsEntity);
+                    AnglePO playerAngle = user.getPlayerAngle();
+                    playerAngle.setYaw(_angle);
+                    createMoveFrameMetadata( user.getUserId(),playerAngle,startBreakpointsEntity.getPosition(), moveFrameEntity,_actionPO.getTrace_id());
                     _actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
-                    _actionPO.set
+                    _actionPO.setStartPostion(startBreakpointsEntity.getPosition());
+                    _actionPO.setEndPosition(endBreakpointsEntity.getPosition());
                     //更新redis里的数据
                     redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
                 }
@@ -175,377 +190,6 @@ public class UpdateFrameMetaTask {
         redisCache.lTrim("setCacheRequest"+user.getUserId(),rotateJoystickList.size(),-1);
     }
 
-//   
-//   private void handle(String userId){
-//       List<MovePO> list = redisCache.getCacheList("setCacheRequest:move:"+userId);
-//       if(list.size() == 0){
-//           createMetaDataForRotate(userId);
-//           createMetaDataForJoystick(userId);
-//       }
-//       else{
-//           MovePO movePO = list.get(0);
-//           UserEntity user = userService.findUserId(userId);
-//           //true表示可以过渡了,false表示需要继续旋转
-//           boolean flag = movePO.isRotated();
-//           if(!flag){
-//               boolean flag_rotated = rotateForMove( user, movePO);
-//               if(flag_rotated) {
-//                   //矫正完成
-//                   movePO.setRotated(true);
-//               }
-//               //设置
-//               /*********************************************************************************************/
-//               //redisCache.setCacheList("setCacheRequest:move:"+userId, Arrays.asList(movePO));
-//               return;
-//           }
-//           //可以过渡了
-//           else {
-//               flag = movePO.isMoving();
-//               //打断
-//               if(list.size()>1){
-//                   //删除第一个元素
-//                   /*********************************************************************************************/
-//                   return;
-//               }
-//               //还没开始过渡,只是打算过渡
-//               if(!flag) {
-//                   flag = createMetaDataForRotate(userId);
-//                   if(!flag){
-//                       flag = createMetaDataForJoystick(userId);
-//                   }
-//                   if(!flag){
-//                       //开始过渡
-//                       movePO.setMoving(true);
-//                       //过渡中
-//                       /*********************************************************************************************/
-//                   }
-//                   //有旋转/操作的动作,所以打断了过渡
-//                   else{
-//                       //删除第一个元素
-//                       /*********************************************************************************************/
-//                       return;
-//                   }
-//               }
-//               else{
-//                   //开始过渡
-//                   movePO.setMoving(true);
-//                   //过渡中
-//                   /*********************************************************************************************/
-//               }
-//           }
-//       }
-//   }
-
-   private boolean createMetaDataForRotate(String userId){
-       List<RotatePO> list = redisCache.getCacheList("setCacheRequest:rotate:"+userId);
-       UserEntity user = userService.findUserId(userId);
-       if(list.size()>0){
-           String[] traceIds = new String[list.size()];
-           JSONArray actionResponses = new JSONArray();
-           double horizontal_move = 0;
-           for(int i=0;i<list.size();++i){
-               RotatePO rotateRequestPO = list.get(i);
-               traceIds[i] = rotateRequestPO.getTrace_id();
-               horizontal_move += rotateRequestPO.getRotation_action().getDouble("horizontal_move");
-
-               //actionResponses
-               JSONObject actionResponse = sceneGrpcService.createActionResponse(rotateRequestPO.getAction_type(),traceIds[i]);
-               actionResponses.add(actionResponse);
-           }
-
-           RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-
-           double hAngle = horizontal_move * 90;
-           int offFrameIndex = (int)Math.ceil(hAngle);
-           int currentFrame = rotateFrameEntity.getFrameIndex();      //从数据库里读取
-           currentFrame +=offFrameIndex;
-           if(currentFrame<0){
-               currentFrame+=360;
-           }
-           else{
-               currentFrame = currentFrame % 359;
-           }
-
-           setRotate( user, traceIds, actionResponses, currentFrame);
-           /*
-           rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),user.getBreakPointId(),currentFrame);
-           PointPO playerPosition = user.getPlayerPosition();
-           Point playerPt = Point.newBuilder().setX(String.valueOf(playerPosition.getX())).setY(String.valueOf(playerPosition.getY())).setZ(String.valueOf(playerPosition.getZ())).build();
-           AnglePO playerAngle = user.getPlayerAngle();
-           AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
-           Space player = sceneGrpcService.createSpace(playerPt,playerAg);
-
-           PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
-           Point cameraPosition = sceneGrpcService.createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-           AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-           AngleUe4 cameraAngle = sceneGrpcService.createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-           Space camera = sceneGrpcService.createSpace(cameraPosition,cameraAngle);
-
-           MetaDataFramePO metaDataFramePO = new MetaDataFramePO();
-           metaDataFramePO.setTraceIds(traceIds);
-           metaDataFramePO.setVehicle(null);
-           State playerState = sceneGrpcService.createPlayerState2(player,camera,playerPt);
-
-           RenderInfo renderInfo = sceneGrpcService.createRenderInfo();
-           UserState userState = sceneGrpcService.createUserState( userId, playerState, renderInfo, null);
-
-           //newUserStates
-           JSONArray newUserStates = new JSONArray();
-           newUserStates.add(userState);
-           metaDataFramePO.setNewUserStates(newUserStates);
-           metaDataFramePO.setActionResponses(actionResponses);
-           metaDataFramePO.setGetStateType(0);
-           metaDataFramePO.setCode(0);
-           metaDataFramePO.setMsg("");
-
-           redisCache.setCacheObject("updateFrameMetadata:"+userId,metaDataFramePO);
-           */
-           //删除操作数据
-           redisCache.delete("setCacheRequest:rotate:"+userId);
-           //更新user表
-           return true;
-       }
-       return false;
-   }
-
-    private boolean createMetaDataForMove(String userId){
-        List<MovePO> list = redisCache.getCacheList("setCacheRequest:move:"+userId);
-        if(list.size()>0){
-            MovePO movePO = list.get(list.size()-1);
-            UserEntity user = userService.findUserId(userId);
-            JSONArray path = movePO.getPath();
-            //true表示可以过渡了,false表示需要继续旋转
-            boolean flag = rotateForMove( user,movePO);
-            if(flag){
-                //打断
-                /*********************************************************************************************/
-                //开始过渡
-                movePO.setMoving(true);
-                //过渡中
-                /*********************************************************************************************/
-            }
-            return true;
-        }
-        return false;
-    }
-
-    private boolean createMetaDataForJoystick(String userId){
-        List<JoystickPO> list = redisCache.getCacheList("setCacheRequest:joystick:"+userId);
-        UserEntity user = userService.findUserId(userId);
-        if(list.size()>0){
-            String[] traceIds = new String[list.size()];
-            JSONArray actionResponses = new JSONArray();
-
-            int moveAngle = 0;
-            for(int i=0;i<list.size();++i){
-                JoystickPO joystickRequestPO = list.get(i);
-                traceIds[i] = joystickRequestPO.getTrace_id();
-                int move_angle = joystickRequestPO.getDir_action().getIntValue("move_angle");
-                //actionResponses
-                JSONObject actionResponse = sceneGrpcService.createActionResponse(joystickRequestPO.getAction_type(),traceIds[i]);
-                actionResponses.add(actionResponse);
-
-                moveAngle = move_angle;
-            }
-
-            RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-            //只是人物转动
-            if(list.get(list.size() - 1).getDir_action().getIntValue("speed_level")<7){
-                PointPO playerPosition = user.getPlayerPosition();
-                Point playerPt = Point.newBuilder().setX(String.valueOf(playerPosition.getX())).setY(String.valueOf(playerPosition.getY())).setZ(String.valueOf(playerPosition.getZ())).build();
-                AnglePO playerAngle = user.getPlayerAngle();
-                AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(list.get(list.size() - 1).getDir_action().getIntValue("move_angle")).setRoll(playerAngle.getRoll()).build();
-                Space player = sceneGrpcService.createSpace(playerPt,playerAg);
-
-                PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
-                Point cameraPosition = sceneGrpcService.createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-                AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-                AngleUe4 cameraAngle = sceneGrpcService.createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-                Space camera = sceneGrpcService.createSpace(cameraPosition,cameraAngle);
-
-                MetaDataFramePO metaDataFramePO = new MetaDataFramePO();
-                metaDataFramePO.setTraceIds(traceIds);
-                metaDataFramePO.setVehicle(null);
-                State playerState = sceneGrpcService.createPlayerState2(player,camera,playerPt);
-
-                RenderInfo renderInfo = sceneGrpcService.createRenderInfo();
-                UserState userState = sceneGrpcService.createUserState( userId, playerState, renderInfo, null);
-
-                //newUserStates
-                JSONArray newUserStates = new JSONArray();
-                newUserStates.add(userState);
-                metaDataFramePO.setNewUserStates(newUserStates);
-                metaDataFramePO.setActionResponses(actionResponses);
-                metaDataFramePO.setGetStateType(0);
-                metaDataFramePO.setCode(0);
-                metaDataFramePO.setMsg("");
-
-                redisCache.setCacheObject("updateFrameMetadata:"+userId,metaDataFramePO);
-                //删除操作数据
-                //redisCache.delete("setCacheRequest:joystick:"+userId);
-                return true;
-            }
-            //需要过渡了
-            //邻居点里找角度最合适的点
-            BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), user.getBreakPointId());
-            BreakpointsEntity targetBreakpointsEntity = null;
-            List<Integer> neighBreakPointIds = breakpointsEntity.getContact();
-            PointPO playerPosition = breakpointsEntity.getPosition();
-            PointPO temp = new PointPO();
-            temp.setX(playerPosition.getX()+1);
-            temp.setY(playerPosition.getY());
-            temp.setZ(playerPosition.getZ());
-            double offAngle = 1000;
-            for(int j=0;j<neighBreakPointIds.size();++j){
-                BreakpointsEntity _breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), (long)neighBreakPointIds.get(j));
-                double angle = sceneGrpcService.calAngle(playerPosition, temp, _breakpointsEntity.getPosition());
-                if(Math.abs(angle - moveAngle)<offAngle){
-                    offAngle = Math.abs(angle - moveAngle);
-                    targetBreakpointsEntity = _breakpointsEntity;
-                }
-            }
-
-            //开始过渡
-            //更新user表
-
-        }
-        return false;
-    }
-
-    private void setRotate(UserEntity user,String[] traceIds,JSONArray actionResponses,int currentFrame){
-        RotateFrameEntity rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),user.getBreakPointId(),currentFrame);
-        PointPO playerPosition = user.getPlayerPosition();
-        Point playerPt = Point.newBuilder().setX(String.valueOf(playerPosition.getX())).setY(String.valueOf(playerPosition.getY())).setZ(String.valueOf(playerPosition.getZ())).build();
-        AnglePO playerAngle = user.getPlayerAngle();
-        AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
-        Space player = sceneGrpcService.createSpace(playerPt,playerAg);
-
-        PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
-        Point cameraPosition = sceneGrpcService.createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-        AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-        AngleUe4 cameraAngle = sceneGrpcService.createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-        Space camera = sceneGrpcService.createSpace(cameraPosition,cameraAngle);
-
-        MetaDataFramePO metaDataFramePO = new MetaDataFramePO();
-        metaDataFramePO.setTraceIds(traceIds);
-        metaDataFramePO.setVehicle(null);
-        State playerState = sceneGrpcService.createPlayerState2(player,camera,playerPt);
-
-        RenderInfo renderInfo = sceneGrpcService.createRenderInfo();
-        UserState userState = sceneGrpcService.createUserState( user.getUserId(), playerState, renderInfo, null);
-
-        //newUserStates
-        JSONArray newUserStates = new JSONArray();
-        newUserStates.add(userState);
-        metaDataFramePO.setNewUserStates(newUserStates);
-        metaDataFramePO.setActionResponses(actionResponses);
-        metaDataFramePO.setGetStateType(0);
-        metaDataFramePO.setCode(0);
-        metaDataFramePO.setMsg("");
-
-        redisCache.setCacheObject("updateFrameMetadata:"+user.getUserId(),metaDataFramePO);
-    }
-
-    //过渡前先纠正角度,走第一段的时候才需要纠正
-    private boolean rotateForMove(UserEntity user,MovePO movePO){
-        String traceId = movePO.getTrace_id();
-        int actionType = movePO.getAction_type();
-        long startBreakPointId = user.getFrameId();
-        long endBreakPointId = movePO.getPath().getLong(0);
-        JSONObject result = new JSONObject();
-        JSONArray players = new JSONArray();
-        JSONArray cameras = new JSONArray();
-        JSONArray cameraCenters = new JSONArray();
-
-        BreakpointsEntity startBreakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),startBreakPointId);
-        BreakpointsEntity endBreakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),endBreakPointId);
-
-        PointPO startPosition = startBreakpointsEntity.getPosition();
-        PointPO endPosition = endBreakpointsEntity.getPosition();
-
-        PointPO temp = new PointPO();
-        temp.setX(startPosition.getX()+1);
-        temp.setY(startPosition.getY());
-        temp.setZ(startPosition.getZ());
-        int angle = (int)sceneGrpcService.calAngle(startPosition, temp, endPosition);
-        AnglePO anglePO = user.getPlayerAngle();
-        AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(anglePO.getPitch()).setYaw(anglePO.getYaw()+angle).setRoll(anglePO.getRoll()).build();
-        PointPO playerPosition = user.getPlayerPosition();
-        Point playerPt = Point.newBuilder().setX(String.valueOf(playerPosition.getX())).setY(String.valueOf(playerPosition.getY())).setZ(String.valueOf(playerPosition.getZ())).build();
-        Space player = sceneGrpcService.createSpace(playerPt,playerAg);
-
-        //相机
-        RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-        AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-        angle = cameraAnglePO.getYaw();
-        int offAngle = 0;
-        offAngle = angle%45;
-        if(offAngle == 0){
-            return true;
-        }
-        int currentFrame = angle;
-        if(offAngle>45-offAngle) {
-            ++currentFrame;
-        }
-        else {
-            --currentFrame;
-        }
-
-        String[] traceIds = new String[1];
-        traceIds[0] = traceId;
-        JSONArray actionResponses = new JSONArray();
-        JSONObject actionResponse = sceneGrpcService.createActionResponse(actionType,traceId);
-        actionResponses.add(actionResponse);
-
-        setRotate( user, traceIds, actionResponses, currentFrame);
-        return false;
-    }
-
-    //点对点开始移动
-     private JSONObject movePointToPoint(String userId,int angle,long startBreakPointId,long endBreakPointId){
-         JSONObject result = new JSONObject();
-         JSONArray players = new JSONArray();
-         JSONArray cameras = new JSONArray();
-         JSONArray cameraCenters = new JSONArray();
-
-         UserEntity user = userService.findUserId(userId);
-         List<MoveFrameEntity> list = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(user.getAppId(),startBreakPointId,endBreakPointId,angle);
-
-         BreakpointsEntity startBreakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),startBreakPointId);
-         PointPO startPosition = startBreakpointsEntity.getPosition();
-
-         BreakpointsEntity endBreakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),endBreakPointId);
-         PointPO endPosition = endBreakpointsEntity.getPosition();
-
-         for(int i=0;i<list.size();++i){
-             MoveFrameEntity moveFrameEntity = list.get(i);
-             //PointPO playerPosition = user.getPlayerPosition();
-             PointPO position = new PointPO();
-             position.setX(startPosition.getX()+(endPosition.getX()-startPosition.getX())/list.size()*i);
-             position.setY(startPosition.getY()+(endPosition.getY()-startPosition.getY())/list.size()*i);
-             position.setZ(startPosition.getZ()+(endPosition.getZ()-startPosition.getZ())/list.size()*i);
-
-             Point playerPt = Point.newBuilder().setX(String.valueOf(position.getX())).setY(String.valueOf(position.getY())).setZ(String.valueOf(position.getZ())).build();
-             AnglePO playerAngle = user.getPlayerAngle();
-             AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
-             Space player = sceneGrpcService.createSpace(playerPt,playerAg);
-             players.add(player);
-
-             PointPO cameraPoint = moveFrameEntity.getCameraPosition();
-             Point cameraPosition = sceneGrpcService.createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
-             AnglePO cameraAnglePO = moveFrameEntity.getCameraAngle();
-             AngleUe4 cameraAngle = sceneGrpcService.createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
-             Space camera = sceneGrpcService.createSpace(cameraPosition,cameraAngle);
-             cameras.add(camera);
-
-             cameraCenters.add(playerPt);
-         }
-         result.put("players",players);
-         result.put("cameras",cameras);
-         result.put("cameraCenters",cameraCenters);
-         return result;
-    }
-
     private void createDefaultFrameMetadata(UserEntity user){
         String[] traceIds = new String[1];
         traceIds[0] = "";
@@ -641,7 +285,7 @@ public class UpdateFrameMetaTask {
         AnglePO playerAngle = user.getPlayerAngle();
         AngleUe4 playerAg = null;
         if(firstActionType == 15){
-            playerAngle.setYaw(lastActionPO.getPlayerAngle());
+            playerAngle.setYaw(lastActionPO.getPlayerAngle().getYaw());
         }
         playerAg = AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
         Space player = sceneGrpcService.createSpace(playerPt,playerAg);