xushiting 3 years ago
parent
commit
566b88e315

+ 12 - 9
src/main/java/com/fdkk/fdkkmeta/domain/po/ActionPO.java

@@ -11,19 +11,22 @@ public class ActionPO {
     private int action_type;   //1,1014,15;
     //private ClickingAction clicking_action;
     //private State clicking_state;
-
-    private int playerAngle;
-    private int moveAngle;
+    private AnglePO playerAngle;
+    private PointPO playerPosition;
+    private AnglePO cameraAngle;
     private String trace_id;
     private String user_id;
     private JSONArray path;
-//    private boolean isMoving = false;
-//    private boolean isRotated = false;
-
+    //private boolean isMoving = false;
+    //private boolean isRotated = false;
     private long frameId = 0;
-    private int frameIndex = 0;
+    //private int frameIndex = 0;
     //private JSONObject rotation_action = new JSONObject();
     //private JSONObject dir_action = new JSONObject();
-
-    String packet_id = null;
+    //private JSONObject moveInfo;   //startPostion,endPosition,frameIndex
+    private PointPO startPostion = null;
+    private PointPO endPosition = null;
+    private int frameIndex;
+    private int subFrameIndex;
+    private String packet_id = null;
 }

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

@@ -459,7 +459,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			UserEntity user = userService.findUserId(user_id);
 			String appId = user.getAppId();
 			Long breakPointId = user.getBreakPointId();
-			//BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(appId,breakPointId);
 			Point end = clicking_action.getClickingPoint();
 			RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
 			//计算路径
@@ -473,11 +472,9 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			po.setS_location(s);
 			po.setSceneCode(appId);
 			JSONArray path = new JSONArray();
-
 			JSONArray maps = GetRoute.getRoute(metaConfig.getFreespacePath()+ File.separator +appId+"_target_freespace.json", po);
 
 			ActionPO movePO = new ActionPO();
-
 			if (maps!=null&&maps.size()>=2){
 				for(int i=0;i< maps.size();++i){
 					Long _breakPointId = JSON.parseObject(JSONObject.toJSON(maps.get(i)).toString()).getLong("id");
@@ -485,37 +482,25 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 					//旋转矫正
 					if(i == 1){
 						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;
-//						}
-						//先简单来,就累加
-						//存储矫正的一组帧
-//						for(int j=0;j<offAngle;++j){
-//							ActionPO rotateRequestPO = new ActionPO();
-//							rotateRequestPO.setAction_type(1014);
-//							rotateRequestPO.setTrace_id(trace_id);
-//							rotateRequestPO.setUser_id(user_id);
-//							RotateFrameEntity _rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),user.getBreakPointId(),angle+j);
-//							rotateRequestPO.setFrameId(_rotateFrameEntity.getId());
-//							redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(rotateRequestPO));
-//						}
-						int angle = setRotateForMove( user, trace_id, cameraAnglePO.getYaw());
-						movePO.setPlayerAngle(angle);
+						cameraAnglePO = setRotateForMove( user, trace_id, cameraAnglePO.getYaw());
+						movePO.setCameraAngle(cameraAnglePO);
 					}
 				}
-
-
 				movePO.setAction_type(1);
 				movePO.setTrace_id(trace_id);
 				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());
+				AnglePO playerAngle = user.getPlayerAngle();
+				playerAngle.setYaw((int)angle);
+				movePO.setPlayerAngle(playerAngle);
 				redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(movePO));
 			}
 
@@ -530,7 +515,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 		}
 	}
 
-	private int setRotateForMove(UserEntity user,String trace_id,int angle){
+	private AnglePO setRotateForMove(UserEntity user,String trace_id,int angle){
 		int offAngle = 0;
 		offAngle = angle%45;
 
@@ -543,16 +528,26 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 		//先简单来,就累加
 		//存储矫正的一组帧
 		offAngle = Math.abs(45 - offAngle);
+		RotateFrameEntity _rotateFrameEntity = null;
 		for(int j=0;j<offAngle;++j){
 			ActionPO rotateRequestPO = new ActionPO();
 			rotateRequestPO.setAction_type(1014);
 			rotateRequestPO.setTrace_id(trace_id);
 			rotateRequestPO.setUser_id(user.getUserId());
-			RotateFrameEntity _rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),user.getBreakPointId(),angle+j);
+			_rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),user.getBreakPointId(),angle+j);
 			rotateRequestPO.setFrameId(_rotateFrameEntity.getId());
 			redisCache.setCacheList("setCacheRequest:"+user.getUserId(), Arrays.asList(rotateRequestPO));
 		}
-		return (angle+offAngle)%360;
+		if(_rotateFrameEntity == null){
+			AnglePO cameraAnglePO = new AnglePO();
+			cameraAnglePO.setPitch(0);
+			cameraAnglePO.setYaw(angle);
+			cameraAnglePO.setRoll(0);
+			return cameraAnglePO;
+		}
+		else{
+			return _rotateFrameEntity.getCameraAngle();
+		}
 	}
 	/*
     //返回的是角度矫正数据
@@ -868,17 +863,14 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
      		String user_id = request.getUserId();
      		String packet_id = request.getPacketId();
 
-			//JoystickPO joystickPO = new JoystickPO();
 			ActionPO joystickPO = new ActionPO();
 			joystickPO.setAction_type(actionType);
-			//JSONObject dir_action = new JSONObject();
-			//dir_action.put("move_angle",dirAction.getMoveAngle());
-			//dir_action.put("speed_level",dirAction.getSpeedLevel());
-			//joystickPO.setDir_action(dir_action);
 			joystickPO.setTrace_id(trace_id);
 			joystickPO.setUser_id(user_id);
 			joystickPO.setPacket_id(packet_id);
-			joystickPO.setPlayerAngle(dirAction.getMoveAngle());
+			AnglePO playerAngle = joystickPO.getPlayerAngle();
+			playerAngle.setYaw(dirAction.getMoveAngle());
+			joystickPO.setPlayerAngle(playerAngle);
 			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
 
 			if(dirAction.getSpeedLevel()<7){
@@ -897,11 +889,12 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			temp.setZ(playerPosition.getZ());
 			double offAngle = 1000;
 			double moveAngle = dirAction.getMoveAngle();
+			double angle = 0;
 
 			if(neighBreakPointIds.size()>0){
 				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());
+					angle = sceneGrpcService.calAngle(playerPosition, temp, _breakpointsEntity.getPosition());
 					if(Math.abs(angle - moveAngle)<offAngle){
 						offAngle = Math.abs(angle - moveAngle);
 						targetBreakpointsEntity = _breakpointsEntity;
@@ -909,17 +902,24 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 				}
 				RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
 				AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
-				int angle = setRotateForMove( user, trace_id,cameraAnglePO.getYaw());
+				cameraAnglePO = setRotateForMove( user, trace_id,cameraAnglePO.getYaw());
 
 				JSONArray path = new JSONArray();
 				path.add(user.getBreakPointId());
 				path.add(targetBreakpointsEntity.getBreakPointId());
+
 				ActionPO movePO = new ActionPO();
 				movePO.setAction_type(1);
 				movePO.setTrace_id(trace_id);
 				movePO.setUser_id(user_id);
 				movePO.setPath(path);
-				movePO.setMoveAngle(angle);
+
+				playerAngle.setYaw((int)angle);
+				movePO.setPlayerAngle(playerAngle);
+				movePO.setCameraAngle(cameraAnglePO);
+
+				//int subFrameIndex = moveFrameService
+
 				redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(movePO));
 			}
 

+ 84 - 60
src/main/java/com/fdkk/fdkkmeta/task/UpdateFrameMetaTask.java

@@ -86,7 +86,10 @@ public class UpdateFrameMetaTask {
             long endBreakPointId = path.getLongValue(1);
             //过渡
             if(myState.getIntValue("isMoving") == 1){
-                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);
+                BreakpointsEntity startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
+                BreakpointsEntity endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
+
                 if(moveFrameEntity==null){
                     path.remove(0);
                     //过渡下一段
@@ -95,12 +98,21 @@ public class UpdateFrameMetaTask {
                         endBreakPointId = path.getLongValue(1);
                         _actionPO.setPath(path);
                         _actionPO.setFrameIndex(0);
-                        moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getMoveAngle(),_actionPO.getFrameIndex()+1);
+                        _actionPO.setStartPostion(null);
+                        _actionPO.setEndPosition(null);
+                        moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
                     }
                     //过渡全部结束
                     else{
                         //删除redis里的数据
+                        redisCache.lTrim("setCacheRequest"+user.getUserId(),1,-1);
                         //更新user表
+                        moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex());
+                        user.setPlayerPosition(endBreakpointsEntity.getPosition());
+                        user.setFrameId(moveFrameEntity.getId());
+                        user.setPlayerAngle(_actionPO.getPlayerAngle());
+                        user.setBreakPointId(endBreakPointId);
+                        /*************************************************************************************************************/
                         myState.put("isMoving",0);
                         redisCache.setCacheObject("UserState"+user.getUserId(),myState);
                         //执行下一条记录
@@ -110,16 +122,23 @@ public class UpdateFrameMetaTask {
                     }
                 }
                 //更新
-                createMoveFrameMetadata( user, moveFrameEntity,_actionPO.getTrace_id());
+                if(_actionPO.getStartPostion() == null){
+                    _actionPO.setStartPostion(startBreakpointsEntity.getPosition());
+                    _actionPO.setEndPosition(endBreakpointsEntity.getPosition());
+                }
                 _actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
+                PointPO playerPosition = new PointPO();
+                playerPosition.setX((_actionPO.getEndPosition().getX() - _actionPO.getStartPostion().getX())/n*_actionPO.getFrameIndex());
+                createMoveFrameMetadata(user.getUserId(),_actionPO.getPlayerAngle(), playerPosition, moveFrameEntity,_actionPO.getTrace_id());
                 //更新redis里的数据
-                //更新user表
+                redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
             }
             else if(myState.getIntValue("isMoving") == 0){
                 if(list.size()>0){
                     //中断
                     //执行下一条记录
                     list.remove(0);
+                    redisCache.lTrim("setCacheRequest"+user.getUserId(),1,-1);
                     handle( user,list);
                     return ;
                 }
@@ -131,8 +150,9 @@ public class UpdateFrameMetaTask {
                     //更新
                     createMoveFrameMetadata( user, moveFrameEntity,_actionPO.getTrace_id());
                     _actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
+                    _actionPO.set
                     //更新redis里的数据
-                    //更新user表
+                    redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
                 }
             }
             /****************************************************************************************/
@@ -150,59 +170,9 @@ public class UpdateFrameMetaTask {
                 continue;
             }
         }
-
-        JSONArray actionResponses = new JSONArray();
-        String[] traceIds = new String[rotateJoystickList.size()];
-        if(rotateJoystickList.size()>0){
-            for(int j=0;j<rotateJoystickList.size();++j){
-                ActionPO actionPO = rotateJoystickList.get(j);
-                JSONObject actionResponse = sceneGrpcService.createActionResponse(actionPO.getAction_type(),actionPO.getTrace_id());
-                actionResponses.add(actionResponse);
-                traceIds[j] = actionPO.getTrace_id();
-            }
-        }
-
-        ActionPO lastActionPO = rotateJoystickList.get(rotateJoystickList.size()-1);
-        RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(lastActionPO.getFrameId());
-        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 = null;
-        if(firstActionType == 1014){
-            playerAg = AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
-        }
-        else if(firstActionType == 15){
-            playerAg = AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(lastActionPO.getPlayerAngle()).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);
-
+        createRotateFrameMetadata( user, rotateJoystickList, firstActionType);
         //删除redis里的数据
-        //更新user表
+        redisCache.lTrim("setCacheRequest"+user.getUserId(),rotateJoystickList.size(),-1);
     }
 
 //   
@@ -614,15 +584,15 @@ public class UpdateFrameMetaTask {
         redisCache.setCacheObject("updateFrameMetadata:"+user.getUserId(),metaDataFramePO);
     }
 
-    private void createMoveFrameMetadata(UserEntity user,MoveFrameEntity moveFrameEntity,String traceId){
+    private void createMoveFrameMetadata(String user_id,AnglePO playerAngle,PointPO playerPosition,MoveFrameEntity moveFrameEntity,String traceId){
         String[] traceIds = new String[1];
         traceIds[0] = traceId;
         JSONArray actionResponses = new JSONArray();
 
         //RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
-        PointPO playerPosition = user.getPlayerPosition();
+        //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();
+        //AnglePO playerAngle = user.getPlayerAngle();
         AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
         Space player = sceneGrpcService.createSpace(playerPt,playerAg);
 
@@ -638,6 +608,56 @@ public class UpdateFrameMetaTask {
         State playerState = sceneGrpcService.createPlayerState2(player,camera,playerPt);
 
         RenderInfo renderInfo = sceneGrpcService.createRenderInfo();
+        UserState userState = sceneGrpcService.createUserState( user_id, 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_id,metaDataFramePO);
+    }
+
+    private void createRotateFrameMetadata(UserEntity user,List<ActionPO> rotateJoystickList,int firstActionType){
+        JSONArray actionResponses = new JSONArray();
+        String[] traceIds = new String[rotateJoystickList.size()];
+        if(rotateJoystickList.size()>0){
+            for(int j=0;j<rotateJoystickList.size();++j){
+                ActionPO actionPO = rotateJoystickList.get(j);
+                JSONObject actionResponse = sceneGrpcService.createActionResponse(actionPO.getAction_type(),actionPO.getTrace_id());
+                actionResponses.add(actionResponse);
+                traceIds[j] = actionPO.getTrace_id();
+            }
+        }
+
+        ActionPO lastActionPO = rotateJoystickList.get(rotateJoystickList.size()-1);
+        RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(lastActionPO.getFrameId());
+        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 = null;
+        if(firstActionType == 15){
+            playerAngle.setYaw(lastActionPO.getPlayerAngle());
+        }
+        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
@@ -650,6 +670,10 @@ public class UpdateFrameMetaTask {
         metaDataFramePO.setMsg("");
 
         redisCache.setCacheObject("updateFrameMetadata:"+user.getUserId(),metaDataFramePO);
+
+        //更新user表
+        user.setFrameId(lastActionPO.getFrameId());
+        user.setPlayerAngle(playerAngle);
     }
    /*
    * {