SceneGrpcServiceImpl.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package com.fdkk.fdkkmeta.grpcService;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
  6. import com.fdkk.fdkkmeta.domain.entity.mysql.RotateFrameEntity;
  7. import com.fdkk.fdkkmeta.domain.entity.mysql.UserEntity;
  8. import com.fdkk.fdkkmeta.domain.po.ActionPO;
  9. import com.fdkk.fdkkmeta.domain.po.AnglePO;
  10. import com.fdkk.fdkkmeta.domain.po.PointPO;
  11. import com.fdkk.fdkkmeta.grpc.*;
  12. import com.fdkk.fdkkmeta.redis.RedisCache;
  13. import com.fdkk.fdkkmeta.service.RotateFrameService;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import org.springframework.stereotype.Service;
  18. import java.util.Arrays;
  19. @Slf4j
  20. @Service
  21. public class SceneGrpcServiceImpl implements SceneGrpcService {
  22. @Autowired
  23. RedisCache redisCache;
  24. @Autowired
  25. RotateFrameService rotateFrameService;
  26. @Override
  27. public int test(int a){
  28. return 0;
  29. }
  30. @Override
  31. public UserState createUserState(String user_id, State state, RenderInfo renderInfo, Event event) {
  32. UserState.Builder builder = UserState.newBuilder();
  33. builder.setUserId(user_id);
  34. builder.setPlayerState(state);
  35. builder.setRenderInfo(renderInfo);
  36. builder.setRelation(1);
  37. if (ObjectUtil.isNotNull(event)){
  38. builder.setEvent(event);
  39. }
  40. UserState userState = builder.build();
  41. return userState;
  42. }
  43. @Override
  44. public State createPlayerState(JSONObject userInfo) {
  45. State.Builder builder = State.newBuilder();
  46. builder.setRoomTypeId(userInfo.getString("roomTypeId"));
  47. builder.setPerson(0);
  48. builder.setAvatarId(userInfo.getString("avatarId"));
  49. builder.setSkinId(userInfo.getString("skinId"));
  50. builder.setRoomId(userInfo.getString("roomId"));
  51. builder.setIsHost(false);
  52. builder.setIsFollowHost(false);
  53. builder.setSkinDataVersion(userInfo.getString("skinDataVersion"));
  54. builder.setAvatarComponents("");
  55. builder.setNickName(userInfo.getString("nickName"));
  56. builder.setMovingMode(0);
  57. builder.setAttitude("walk");
  58. builder.setAreaName("");
  59. builder.setPathName("thirdwalk");
  60. builder.setPathId("thirdwalk");
  61. builder.setAvatarSize(1);
  62. if(userInfo.get("extra") != null){
  63. builder.setExtra(userInfo.getString("extra"));
  64. }
  65. builder.setPrioritySync(false);
  66. builder.setPlayer((Space)userInfo.get("player"));
  67. if(userInfo.get("camera") != null){
  68. builder.setCamera((Space)userInfo.get("camera"));
  69. }
  70. if(userInfo.get("cameraCenter") != null){
  71. builder.setCamera((Space)userInfo.get("cameraCenter"));
  72. }
  73. return builder.build();
  74. }
  75. @Override
  76. public State createPlayerState2(Space player,Space camera,Point cameraCenter){
  77. State.Builder builder = State.newBuilder();
  78. builder.setRoomTypeId("");
  79. builder.setPerson(0);
  80. builder.setAvatarId("");
  81. builder.setSkinId("");
  82. builder.setRoomId("");
  83. builder.setIsHost(false);
  84. builder.setIsFollowHost(false);
  85. builder.setSkinDataVersion("");
  86. builder.setAvatarComponents("");
  87. builder.setNickName("");
  88. builder.setMovingMode(0);
  89. builder.setAttitude("");
  90. builder.setAreaName("");
  91. builder.setPathName("");
  92. builder.setPathId("");
  93. builder.setAvatarSize(1);
  94. builder.setPrioritySync(false);
  95. builder.setPlayer(player);
  96. builder.setCamera(camera);
  97. builder.setCameraCenter(cameraCenter);
  98. return builder.build();
  99. }
  100. @Override
  101. public JSONObject createActionResponse(int actionType,String traceId){
  102. JSONObject actionResponse = new JSONObject();
  103. actionResponse.put("actionType",actionType);
  104. actionResponse.put("pointType",100);
  105. actionResponse.put("extra","");
  106. actionResponse.put("traceId",traceId);
  107. actionResponse.put("packetId","");
  108. actionResponse.put("nps",new JSONArray());
  109. actionResponse.put("peopleNum",0);
  110. actionResponse.put("zoneId","");
  111. actionResponse.put("echoMsg","");
  112. actionResponse.put("reserveDetail",null);
  113. actionResponse.put("userWithAvatarList",new JSONArray());
  114. actionResponse.put("newUserStates",new JSONArray());
  115. actionResponse.put("code",0);
  116. actionResponse.put("msg","");
  117. return actionResponse;
  118. }
  119. @Override
  120. public RenderInfo createRenderInfo() {
  121. RenderInfo renderInfo = RenderInfo.newBuilder()
  122. .setRenderType(0)
  123. //.setVideoFrame(null)
  124. .setVideoFrame("")
  125. .setCameraStateType(0)
  126. .setIsMoving(0)
  127. .setNeedIfr(0)
  128. .setIsVideo(0)
  129. .setStillFrame(0)
  130. .setIsRotating(0)
  131. .setIsFollowing(0)
  132. .setClientPanoTreceId("")
  133. .setPrefetchVideoId("")
  134. .setNoMedia(false).build();
  135. return renderInfo;
  136. }
  137. @Override
  138. public Event createEvent() {
  139. Event event = Event.newBuilder().setId("").setType(0).build();
  140. return event;
  141. }
  142. @Override
  143. public Space createSpace(Point position,AngleUe4 angle) {
  144. Space space = Space.newBuilder().setPosition(position).setAngle(angle).build();
  145. return space;
  146. }
  147. @Override
  148. public Point createPoint(String x,String y,String z) {
  149. Point point = Point.newBuilder().setX(x).setY(y).setZ(z).build();
  150. return point;
  151. }
  152. @Override
  153. public AngleUe4 createAngle(int pitch,int yaw,int roll) {
  154. AngleUe4 angle = AngleUe4.newBuilder().setPitch(pitch).setYaw(yaw).setRoll(roll).build();
  155. return angle;
  156. }
  157. /**
  158. * 根据余弦定理计算线段1到线段2的夹角,线段1:起始点到原点,线段2:原点到结束点)
  159. * @param o 原点
  160. * @param s 起始点
  161. * @param e 结束点
  162. * @return
  163. */
  164. @Override
  165. public double calAngle(PointPO o, PointPO s, PointPO e) {
  166. double cosfi = 0;
  167. double fi = 0;
  168. double norm = 0;
  169. double dsx = s.getX() - o.getX();
  170. double dsy = s.getY() - o.getY();
  171. double dex = e.getX() - o.getX();
  172. double dey = e.getY() - o.getY();
  173. cosfi = dsx * dex + dsy * dey;
  174. norm = (dsx * dsx + dsy * dsy) * (dex * dex + dey * dey);
  175. cosfi /= Math.sqrt(norm);
  176. if (cosfi >= 1.0) return 0;
  177. if (cosfi <= -1.0) return Math.PI;
  178. fi = Math.acos(cosfi);
  179. if (180 * fi / Math.PI < 180) {
  180. return 180 * fi / Math.PI;
  181. } else {
  182. return 360 - 180 * fi / Math.PI;
  183. }
  184. }
  185. @Override
  186. public int calAngleForBreakPointId(BreakpointsEntity breakpointsEntity1, BreakpointsEntity breakpointsEntity2){
  187. PointPO startPosition = breakpointsEntity1.getPosition();
  188. PointPO endPosition = breakpointsEntity2.getPosition();
  189. PointPO temp = new PointPO();
  190. temp.setX(startPosition.getX()+1);
  191. temp.setY(startPosition.getY());
  192. temp.setZ(startPosition.getZ());
  193. int angle = (int)calAngle(startPosition, temp, endPosition);
  194. return angle;
  195. }
  196. @Override
  197. public AnglePO setRotateForMove(JSONObject user, String trace_id, AnglePO cameraAngle){
  198. int angle = cameraAngle.getYaw();
  199. int offAngle = 0;
  200. offAngle = angle%45;
  201. //先简单来,就累加。后续要再调试
  202. //存储矫正的一组帧
  203. offAngle = Math.abs(45 - offAngle);
  204. RotateFrameEntity _rotateFrameEntity = null;
  205. for(int j=0;j<offAngle;++j){
  206. ActionPO rotateRequestPO = new ActionPO();
  207. rotateRequestPO.setAction_type(1014);
  208. rotateRequestPO.setTrace_id(trace_id);
  209. rotateRequestPO.setUser_id(user.getString("userId"));
  210. _rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getString("appId"),user.getLong("breakPointId"),angle+j);
  211. rotateRequestPO.setFrameId(_rotateFrameEntity.getId());
  212. redisCache.setCacheList("setCacheRequest:"+user.getString("userId"), Arrays.asList(rotateRequestPO));
  213. }
  214. if(_rotateFrameEntity == null){
  215. AnglePO cameraAnglePO = new AnglePO();
  216. cameraAnglePO.setPitch(0);
  217. cameraAnglePO.setYaw(angle);
  218. cameraAnglePO.setRoll(0);
  219. return cameraAnglePO;
  220. }
  221. else{
  222. return _rotateFrameEntity.getCameraAngle();
  223. }
  224. }
  225. }