interface SceneGrpcService {
  getRoute(request: RouteRequest): Observable<any>;
  init(request: InitRequest): Observable<any>;
  rotate(request: RotateRequest): Observable<any>;
  move(request: MoveRequest): Observable<any>;
  getBreakPoint(request: GetBreakPointRequest): Observable<any>;
  joystick(request: JoystickRequest): Observable<any>;
}

interface Point {
  x: string;
  y: string;
  z: string;
}

interface RouteRequest {
  sLocation: Point;
  eLocation: Point;
  sceneCode: string;
}

// interface RouteReply {

// }

interface RotateRequest {
  actionType: number;
  rotationAction: string;
  traceId: string;
  userId: string;
}

interface MoveRequest {
  actionType: number;
  clickingAction: {
    clickingPoint: Point;
    clickingType: number;
    extra: string;
    attitude: string;
  };
  clickingState: {
    roomTypeId: string;
    person: number;
    avatarId: string;
    skinId: string;
    roomId: string;
    isHost: boolean;
    isFollowHost: boolean;
    skinDataVersion: string;
    avatarComponents: string;
    nickName: string;
    movingMode: number;
    attitude: string;
    areaName: string;
    pathName: string;
    pathId: string;
    avatarSize: number;
    extra: string;
    prioritySync: true;
    player: {
      position: Point;
      angle: {
        pitch: number;
        yaw: number;
        roll: number;
      };
    };
    camera: {
      position: Point;
      angle: {
        pitch: number;
        yaw: number;
        roll: number;
      };
    };
    cameraCenter: Point;
  };
  traceId: string;
  userId: string;
}

interface GetBreakPointRequest {
  actionType: number;
  getNeighborPointsAction: {
    point: Point;
    level: number;
    containSelf: boolean;
    searchRange: number;
  };
  traceId: string;
  userId: string;
}
interface JoystickRequest {
  actionType: number;
  dirAction: {
    moveAngle: number;
    speedLevel: number;
  };
  traceId: string;
  userId: string;
  packetId: string;
}
