xushiting 3 роки тому
батько
коміт
0b11abfc0f

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

@@ -156,12 +156,11 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     		}
     		*/
     		int action_type = request.getActionType();
-
-    		//request.getRotationAction()
-
     		String trace_id = request.getTraceId();
     		String user_id = request.getUserId();
-
+    		RotationAction rotation_action = request.getRotationAction();
+    		double horizontal_move = rotation_action.getHorizontalMove();
+    		
     		//这三个变量从user表和rotateframe表里取
             UserEntity user = userService.findById(user_id);
             BreakpointsEntity breakpointsEntity = breakpointsService.findById(user.getBreakPointId());
@@ -169,21 +168,32 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 
             PointPO playerPoint = breakpointsEntity.getPosition();
             Point playerPosition = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
-            AnglePO userAngle = user.getPlayerAngle();
-            AngleUe4 playerAngle = createAngle(userAngle.getPitch(),userAngle.getYaw(),userAngle.getRoll());
-            
+            AnglePO playerAnglePO = user.getPlayerAngle();
+            AngleUe4 playerAngle = createAngle(playerAnglePO.getPitch(),playerAnglePO.getYaw(),playerAnglePO.getRoll());
             Space player = createSpace(playerPosition,playerAngle);
             
+            PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
+            Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
+            AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
+            
+    		double hAngle = horizontal_move * 90;
+    		int offFrameIndex = (int)Math.ceil(hAngle);
+    		int currentFrame = rotateFrameEntity.getFrameIndex();      //从数据库里读取
+    		currentFrame +=offFrameIndex;
+    		currentFrame = currentFrame % 359;
+    		//currentFrame
             
-    		Space camera = null;
-    		Point cameraCenter = null;
+            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);
 
-
             /// metaConfig.getVideoFramePath()
            log.info("VideoFramePath{}", metaConfig.getVideoFramePath());
     		NormalReply res = NormalReply.newBuilder()
@@ -227,13 +237,14 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
      		String trace_id = request.getTraceId();
      		String user_id = request.getUserId();
 
-            UserEntity userEntity = userService.findById(user_id);
-            BreakpointsEntity breakpointsEntity = breakpointsService.findById(userEntity.getBreakPointId());
-
+            UserEntity user = userService.findById(user_id);
+            BreakpointsEntity breakpointsEntity = breakpointsService.findById(user.getBreakPointId());
+            RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
+            
             Point start = null;    //从user表里取
      		//计算路径
 
-            String appId = userEntity.getAppId();
+            String appId = user.getAppId();
             RouteDto po=new RouteDto();
             PointPO s=new PointPO();
             s.setX(Double.parseDouble(start.getX()));
@@ -253,17 +264,39 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
             redisCache.setCacheObject(trace_id,maps);
             // 从缓存里面取 JSONArray cacheObject = redisCache.getCacheObject(trace_id);
 
-
+            //获得下一个要走的breakPointId
+            int nextbreakPointId = 0;
 
      		//开始返回结果,一段一段的返回(每段是两个邻居点的过渡),第一段之前还要有角度的矫正
      		//矫正的结果:
             //moveFrameService.findById()
-
-     		//这三个变量从user表和rotateframe表里取。自己对应的都是空
-    		Space player = null;
-    		Space camera = null;
-    		Point cameraCenter = null;
-
+            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;
+            }
+            
+            //循环
+            //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();
@@ -303,7 +336,58 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
      		String trace_id = request.getTraceId();
      		boolean needNext = request.getNext();
 
+            UserEntity user = userService.findById(user_id);
+            BreakpointsEntity breakpointsEntity = breakpointsService.findById(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;
+            }
+            
+            //循环
+            //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)
+    				.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(false)
+    				.build();
     	}
     	catch(Exception e) {
     		e.printStackTrace();
@@ -356,10 +440,31 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     public void joystick(JoystickRequest request, StreamObserver<NormalReply> responseObserver)   {
      	try {
             log.info("进入{}",request);
-
-//            responseObserver.onNext(res);
-//            responseObserver.onCompleted();
-//            log.info("回复{}",res);
+        	/*
+    		{
+    			"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();
+     		String user_id = request.getUserId();
+     		String packet_id = request.getPacketId();
+     		
+     		UserEntity user = userService.findById(user_id);
+     		Long breakPointId = user.getBreakPointId();
+     		//获得当前点所有邻居点
+     		//找到与角度move_angle最近的邻居点
+     		//移动player,并且更新相机角度
+            
     	}
     	catch(Exception e) {
     		e.printStackTrace();