xushiting 3 лет назад
Родитель
Сommit
df8497510b

+ 17 - 10
src/main/java/com/fdkk/fdkkmeta/domain/po/ActionPO.java

@@ -3,6 +3,8 @@ package com.fdkk.fdkkmeta.domain.po;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkk.fdkkmeta.grpc.ClickingAction;
+import com.fdkk.fdkkmeta.grpc.DirAction;
+import com.fdkk.fdkkmeta.grpc.RotationAction;
 import com.fdkk.fdkkmeta.grpc.State;
 import lombok.Data;
 
@@ -11,22 +13,27 @@ public class ActionPO {
     private int action_type;   //1,1014,15;
     //private ClickingAction clicking_action;
     //private State clicking_state;
-    private AnglePO playerAngle;
-    private PointPO playerPosition;
-    private AnglePO cameraAngle;
+//    private AnglePO playerAngle;
+//    private PointPO playerPosition;
+//    private AnglePO cameraAngle;
     private String trace_id;
     private String user_id;
-    private JSONArray path;
+    //private JSONArray path;
+    private RotationAction rotationAction;
+
+    private State clicking_state;
+    private ClickingAction clicking_action;
+    private DirAction dirAction;
     //private boolean isMoving = false;
     //private boolean isRotated = false;
-    private long frameId = 0;
+    //private long frameId = 0;
     //private int frameIndex = 0;
     //private JSONObject rotation_action = new JSONObject();
     //private JSONObject dir_action = new JSONObject();
     //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;
+//    private PointPO startPostion = null;
+//    private PointPO endPosition = null;
+    //private int frameIndex;
+   // private int subFrameIndex;
+     private String packet_id = null;
 }

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

@@ -197,9 +197,19 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     @Override
     public void rotate(RotateRequest request, StreamObserver<NormalReply> responseObserver)   {
     	try {
+			//redisPublishService.sendProtocolMessage(RedisQueueConstant.ROTATE_QUEUE,request.toBuilder());
+			int actionType = request.getActionType();
+			String trace_id = request.getTraceId();
+			String user_id = request.getUserId();
+			RotationAction rotationAction = request.getRotationAction();
 
-			redisPublishService.sendProtocolMessage(RedisQueueConstant.ROTATE_QUEUE,request.toBuilder());
+			ActionPO rotateRequestPO = new ActionPO();
+			rotateRequestPO.setAction_type(actionType);
+			rotateRequestPO.setTrace_id(trace_id);
+			rotateRequestPO.setUser_id(user_id);
+			rotateRequestPO.setRotationAction(rotationAction);
 
+			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(rotateRequestPO));
 			NormalReply.Builder builder = NormalReply.newBuilder();
 			builder.setCode(200);
 			responseObserver.onNext(builder.build());
@@ -243,100 +253,28 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			log.error("echoException{}",e.getMessage());
 		}
 	}
-	/*
-	@Override
-	public void usersState(GetNewUserStateRequest request, StreamObserver<GetNewUserStateReply> responseObserver){
-
-		try{
-			int action_type = request.getActionType();
-			String trace_id = request.getTraceId();
-			String user_id = request.getUserId();
-
-			//从数据库中取全部在线的user表
-			List<UserEntity> list =  userService.findUserOnline(true);
 
-			GetNewUserStateReply.Builder builder = GetNewUserStateReply.newBuilder();
-			builder.setActionType(action_type);
-			builder.setPointType(100);
-			builder.setExtra("");
-			builder.setTraceId(trace_id);
-			builder.setPacketId("");
-			//builder.setNps(nps);
-			builder.setPeopleNum(0);
-			builder.setZoneId("");
-			builder.setEchoMsg("");
-			builder.setReserveDetail(null);
-			//builder.setUserWithAvatarList();
-			if(list.size()>0){
-				for(int i=0;i<list.size();++i){
-					UserEntity user = list.get(i);
-					JSONObject userInfo = new JSONObject();
-					userInfo.put("roomTypeId","");
-					userInfo.put("person",0);
-					userInfo.put("avatarId",user.getAvatarId());
-					userInfo.put("skinId",user.getSkinId());
-					userInfo.put("roomId",user.getRoomId());
-					userInfo.put("isHost",false);
-					userInfo.put("isFollowHost",false);
-					userInfo.put("skinDataVersion",user.getSkinDataVersion());
-					userInfo.put("avatarComponents","");
-					userInfo.put("nickName",user.getNickName());
-					userInfo.put("movingMode",0);                                      //后续会修改
-					userInfo.put("attitude","walk");
-					userInfo.put("areaName","");
-					userInfo.put("pathName","");
-					userInfo.put("pathId","thirdwalk");
-					userInfo.put("avatarSize",1);
-					userInfo.put("extra","{\"removeWhenDisconnected\":true}");
-					userInfo.put("prioritySync",false);
-
-					Space.Builder player = Space.newBuilder();
-					PointPO playerPosition = user.getPlayerPosition();
-					Point playerPt = Point.newBuilder().setX(String.valueOf(playerPosition.getX())).setY(String.valueOf(playerPosition.getY())).setZ(String.valueOf(playerPosition.getZ())).build();
-					player.setPosition(playerPt);
-					AnglePO playerAngle = user.getPlayerAngle();
-					AngleUe4 playerAg =AngleUe4.newBuilder().setPitch(playerAngle.getPitch()).setYaw(playerAngle.getYaw()).setRoll(playerAngle.getRoll()).build();
-					player.setAngle(playerAg);
-					userInfo.put("player",player);
-					userInfo.put("camera",null);
-					userInfo.put("cameraCenter",null);
-
-					State playerState = sceneGrpcService.createPlayerState(userInfo);
-					RenderInfo renderInfo = sceneGrpcService.createRenderInfo();
-					Event event = sceneGrpcService.createEvent();
-
-					UserState userState = sceneGrpcService.createUserState( user.getUserId(), playerState, renderInfo, event);
-					builder.addNewUserStates(userState);
-				}
-			}
-			//builder.setNewUserStates();
-			builder.setCode(200);
-			builder.setMsg("");
-
-			responseObserver.onNext(builder.build());
-			responseObserver.onCompleted();
-		}
-		catch (Exception e){
-			e.printStackTrace();
-			responseObserver.onNext(GetNewUserStateReply.newBuilder().setCode(500).build());
-			responseObserver.onCompleted();
-			log.error("usersStateException{}",e.getMessage());
-		}
-	}
-
-	 */
 	@Override
 	public void move(MoveRequest request, StreamObserver<NormalReply> responseObserver){
 		try{
-			//int action_type= request.getActionType();
+			int action_type= request.getActionType();
 			ClickingAction clicking_action = request.getClickingAction();
-			//State clicking_state = request.getClickingState();
+			State clicking_state = request.getClickingState();
 			String trace_id = request.getTraceId();
 			String user_id = request.getUserId();
 
-			UserEntity user = userService.findUserId(user_id);
-			String appId = user.getAppId();
-			Long breakPointId = user.getBreakPointId();
+			ActionPO moveRequestPO = new ActionPO();
+			moveRequestPO.setAction_type(action_type);
+			moveRequestPO.setTrace_id(trace_id);
+			moveRequestPO.setUser_id(user_id);
+			moveRequestPO.setClicking_action(clicking_action);
+			moveRequestPO.setClicking_state(clicking_state);
+			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(moveRequestPO));
+
+			/*
+			//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());
@@ -383,9 +321,11 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 				movePO.setSubFrameIndex(subFrameIndex);
 				redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(movePO));
 			}
-
+			*/
 			NormalReply.Builder builder = NormalReply.newBuilder();
 			builder.setCode(200);
+			responseObserver.onNext(builder.build());
+			responseObserver.onCompleted();
 
 		}
 		catch (Exception e){
@@ -398,8 +338,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 
 	}
 
-
-
     @Override
     public void getBreakPoint(BreakPointRequest request, StreamObserver<BreakPointReply> responseObserver)   {
      	try {
@@ -455,7 +393,52 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
      	try {
             log.info("进入{}",request);
 
-			redisPublishService.sendProtocolMessage(RedisQueueConstant.JOYSTICK_QUEUE,request.toBuilder());
+			//redisPublishService.sendProtocolMessage(RedisQueueConstant.JOYSTICK_QUEUE,request.toBuilder());
+			String user_id = request.getUserId();
+			int actionType = request.getActionType();
+			String trace_id = request.getTraceId();
+			String packet_id = request.getPacketId();
+			DirAction dirAction = request.getDirAction();
+
+			ActionPO joystickPO = new ActionPO();
+			joystickPO.setAction_type(actionType);
+			joystickPO.setTrace_id(trace_id);
+			joystickPO.setUser_id(user_id);
+			joystickPO.setPacket_id(packet_id);
+			joystickPO.setDirAction(dirAction);
+			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
+			/*
+			//速度不够,只是让人旋转
+			if(dirAction.getSpeedLevel()>7){
+				JSONObject myState = redisCache.getCacheObject("UserState:"+user_id);
+				//邻居点里找角度最合适的点
+				BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(myState.getString("appId"),myState.getLong("breakPointId"));
+				BreakpointsEntity targetBreakpointsEntity = null;
+				List<Integer> neighBreakPointIds = breakpointsEntity.getContact();
+
+				double offAngle = 1000;
+				double moveAngle = dirAction.getMoveAngle();
+				int playerAngleYaw = 0;
+
+				if(neighBreakPointIds.size()>0){
+					for(int j=0;j<neighBreakPointIds.size();++j){
+						BreakpointsEntity _breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(myState.getString("appId"), (long)neighBreakPointIds.get(j));
+						playerAngleYaw = sceneGrpcService.calAngleForBreakPointId(breakpointsEntity,_breakpointsEntity);
+						if(Math.abs(playerAngleYaw - moveAngle)<offAngle){
+							offAngle = Math.abs(playerAngleYaw - moveAngle);
+							targetBreakpointsEntity = _breakpointsEntity;
+						}
+					}
+					JSONArray path = new JSONArray();
+					path.add(myState.getLong("breakPointId"));
+					path.add(targetBreakpointsEntity.getBreakPointId());
+					joystickPO.setPath(path);
+				}
+			}
+
+			redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
+			*/
+
 			//找到与角度move_angle最近的邻居点
      		//移动player,并且更新相机角度
 			NormalReply.Builder builder = NormalReply.newBuilder();

+ 1 - 0
src/main/java/com/fdkk/fdkkmeta/redis/impl/RedisSubscribeServiceImpl.java

@@ -144,6 +144,7 @@ public class RedisSubscribeServiceImpl  implements RedisSubscribeService {
         playerAngle.setYaw(dirAction.getMoveAngle());
         joystickPO.setPlayerAngle(playerAngle);
         redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
+
         //速度不够,只是让人旋转
         if(dirAction.getSpeedLevel()<7){
             return;