123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- package com.fdkk.fdkkmeta.grpcService;
- import cn.hutool.core.util.ObjectUtil;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
- import com.fdkk.fdkkmeta.domain.entity.mysql.RotateFrameEntity;
- import com.fdkk.fdkkmeta.domain.entity.mysql.UserEntity;
- import com.fdkk.fdkkmeta.domain.po.ActionPO;
- import com.fdkk.fdkkmeta.domain.po.AnglePO;
- import com.fdkk.fdkkmeta.domain.po.PointPO;
- import com.fdkk.fdkkmeta.grpc.*;
- import com.fdkk.fdkkmeta.redis.RedisCache;
- import com.fdkk.fdkkmeta.service.RotateFrameService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import org.springframework.stereotype.Service;
- import java.util.Arrays;
- @Slf4j
- @Service
- public class SceneGrpcServiceImpl implements SceneGrpcService {
- @Autowired
- RedisCache redisCache;
- @Autowired
- RotateFrameService rotateFrameService;
- @Override
- public int test(int a){
- return 0;
- }
- @Override
- public UserState createUserState(String user_id, State state, RenderInfo renderInfo, Event event) {
- UserState.Builder builder = UserState.newBuilder();
- builder.setUserId(user_id);
- builder.setPlayerState(state);
- builder.setRenderInfo(renderInfo);
- builder.setRelation(1);
- if (ObjectUtil.isNotNull(event)){
- builder.setEvent(event);
- }
- UserState userState = builder.build();
- return userState;
- }
- @Override
- public 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(userInfo.getString("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();
- }
- @Override
- public State createPlayerState2(Space player,Space camera,Point cameraCenter){
- State.Builder builder = State.newBuilder();
- builder.setRoomTypeId("");
- builder.setPerson(0);
- builder.setAvatarId("");
- builder.setSkinId("");
- builder.setRoomId("");
- builder.setIsHost(false);
- builder.setIsFollowHost(false);
- builder.setSkinDataVersion("");
- builder.setAvatarComponents("");
- builder.setNickName("");
- builder.setMovingMode(0);
- builder.setAttitude("");
- builder.setAreaName("");
- builder.setPathName("");
- builder.setPathId("");
- builder.setAvatarSize(1);
- builder.setPrioritySync(false);
- builder.setPlayer(player);
- builder.setCamera(camera);
- builder.setCameraCenter(cameraCenter);
- return builder.build();
- }
- @Override
- public JSONObject createActionResponse(int actionType,String traceId){
- JSONObject actionResponse = new JSONObject();
- actionResponse.put("actionType",actionType);
- actionResponse.put("pointType",100);
- actionResponse.put("extra","");
- actionResponse.put("traceId",traceId);
- actionResponse.put("packetId","");
- actionResponse.put("nps",new JSONArray());
- actionResponse.put("peopleNum",0);
- actionResponse.put("zoneId","");
- actionResponse.put("echoMsg","");
- actionResponse.put("reserveDetail",null);
- actionResponse.put("userWithAvatarList",new JSONArray());
- actionResponse.put("newUserStates",new JSONArray());
- actionResponse.put("code",0);
- actionResponse.put("msg","");
- return actionResponse;
- }
- @Override
- public 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;
- }
- @Override
- public Event createEvent() {
- Event event = Event.newBuilder().setId("").setType(0).build();
- return event;
- }
- @Override
- public Space createSpace(Point position,AngleUe4 angle) {
- Space space = Space.newBuilder().setPosition(position).setAngle(angle).build();
- return space;
- }
- @Override
- public Point createPoint(String x,String y,String z) {
- Point point = Point.newBuilder().setX(x).setY(y).setZ(z).build();
- return point;
- }
- @Override
- public 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
- */
- @Override
- public double calAngle(PointPO o, PointPO s, PointPO e) {
- double cosfi = 0;
- double fi = 0;
- double norm = 0;
- double dsx = s.getX() - o.getX();
- double dsy = s.getY() - o.getY();
- double dex = e.getX() - o.getX();
- double dey = e.getY() - o.getY();
- 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;
- }
- }
- @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;
- }
- @Override
- public AnglePO setRotateForMove(JSONObject user, String trace_id, AnglePO cameraAngle){
- int angle = cameraAngle.getYaw();
- int offAngle = 0;
- offAngle = angle%45;
- //先简单来,就累加。后续要再调试
- //存储矫正的一组帧
- 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.getString("userId"));
- _rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getString("appId"),user.getLong("breakPointId"),angle+j);
- rotateRequestPO.setFrameId(_rotateFrameEntity.getId());
- redisCache.setCacheList("setCacheRequest:"+user.getString("userId"), Arrays.asList(rotateRequestPO));
- }
- if(_rotateFrameEntity == null){
- AnglePO cameraAnglePO = new AnglePO();
- cameraAnglePO.setPitch(0);
- cameraAnglePO.setYaw(angle);
- cameraAnglePO.setRoll(0);
- return cameraAnglePO;
- }
- else{
- return _rotateFrameEntity.getCameraAngle();
- }
- }
- }
|