Pārlūkot izejas kodu

Merge branch 'master' of http://192.168.0.115:3000/xushiting/Metaverse

# Conflicts:
#	src/ActionsHandler.js
xushiting 3 gadi atpakaļ
vecāks
revīzija
543f9f960d
2 mainītis faili ar 65 papildinājumiem un 23 dzēšanām
  1. 56 22
      src/ActionsHandler.js
  2. 9 1
      src/RotationEvent.js

+ 56 - 22
src/ActionsHandler.js

@@ -5,12 +5,11 @@ import Person from "./enum/Person.js"
 import ClickType from "./enum/ClickType.js"
 import Logger from "./Logger.js"
 
-import Response from "./Response.js"
+
 import { VDecoder } from "./h264Decoder/VDecoder.js";
 
 const logger = new Logger('actions-handler')
 const QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
-
 export default class ActionsHandler {
     constructor(e) {
         this.currentActiveAction = null
@@ -374,8 +373,58 @@ export default class ActionsHandler {
     }
     */
     
+    //zeg
+    rotate({type: type, offsetX: offsetX, width: width}) {
+        //camera的position,angle
+        //起始和结束的帧
+
+        let angle = offsetX / width * 2 * Math.PI
+        let endRotation = util.xverseRotation2Ue4(window.room.sceneManager.cameraComponent.mainCamera.rotation).yaw
+        endRotation = (endRotation % 360 + 360) % 360
+        
+        let sfns = Math.round(endRotation/6)
+        endRotation += angle/Math.PI*180
+
+        let efns = Math.round(endRotation/6)
+
+        console.log('取帧:'+sfns+','+efns);
+        this.fetchData({
+            type:type,
+            sFrame:sfns,
+            eFrame:efns
+        })
+
+        this.room.sceneManager.materialComponent.initreceveFrames()
+
+
+        let cameraPostion0 = util.xversePosition2Ue4(window.room.sceneManager.cameraComponent.mainCamera.position.clone())
+        let playerPosition = window.room.sceneManager.avatarComponent._mainUser.position
+
+        let rotationQuaternion = BABYLON.Quaternion.RotationAxis( new BABYLON.Vector3(0, 0, 1), angle )
+        let cameraPos = new BABYLON.Vector3( cameraPostion0.x, cameraPostion0.y, cameraPostion0.z )
+        let cameraCenter = new BABYLON.Vector3( playerPosition.x, playerPosition.y, playerPosition.z )
+        // console.error(cameraPos, cameraCenter)
+
+        cameraPos.rotateByQuaternionAroundPointToRef(rotationQuaternion, cameraCenter, cameraPos)
+
+        let cameraState = {
+            "position": {
+                "x": cameraPos.x,
+                "y": cameraPos.y,
+                "z": cameraPos.z
+            },
+            "angle": {
+                "pitch": 0,
+                "yaw": endRotation,
+                "roll": 0
+            }
+        }
+
+        window.room.sceneManager.cameraComponent.mainCamera.rotation.y += angle
+        window.room.sceneManager.cameraComponent.setCameraPose(cameraState)
+    }
     /*
-    rotate({type: type, angle: angle}) {
+    rotate0({type: type, angle: angle}) {
         let endRotation = window.room.sceneManager.cameraComponent.mainCamera.rotation.y
         if(endRotation<0){
             endRotation += 2*Math.PI
@@ -403,27 +452,12 @@ export default class ActionsHandler {
 
         this.room.sceneManager.materialComponent.initreceveFrames()
  
-        // this.room.sceneManager.cameraComponent.mainCamera.rotation.y = endRotation
-        // window.room.sceneManager.cameraComponent._cameraPose.rotation._y = endRotation
-        // window.room.sceneManager.cameraComponent.mainCamera.rotation.y=endRotation
-        let response = JSON.parse(JSON.stringify(Response))
-        response.signal.newUserStates[0].playerState.player.position.x = this.room.avatarManager.avatars.get(nickname).position.x
-        response.signal.newUserStates[0].playerState.player.position.y = this.room.avatarManager.avatars.get(nickname).position.y
-        response.signal.newUserStates[0].playerState.player.position.z = this.room.avatarManager.avatars.get(nickname).position.z
-
-        response.signal.newUserStates[0].playerState.player.angle.pitch = this.room.avatarManager.avatars.get(nickname).rotation.pitch
-        response.signal.newUserStates[0].playerState.player.angle.yaw = this.room.avatarManager.avatars.get(nickname).rotation.yaw
-        response.signal.newUserStates[0].playerState.player.angle.roll = this.room.avatarManager.avatars.get(nickname).rotation.roll
-
-        response.signal.newUserStates[0].playerState.camera.position = 
-        response.signal.newUserStates[0].playerState.camera.angle = 
-
-        response.signal.newUserStates[0].playerState.cameraCenter.x = this.room.avatarManager.avatars.get(nickname).position.x
-        response.signal.newUserStates[0].playerState.cameraCenter.y = this.room.avatarManager.avatars.get(nickname).position.y
-        response.signal.newUserStates[0].playerState.cameraCenter.z = this.room.avatarManager.avatars.get(nickname).position.z
- 
+        this.room.sceneManager.cameraComponent.mainCamera.rotation.y = endRotation
+        window.room.sceneManager.cameraComponent._cameraPose.rotation._y = endRotation
+        window.room.sceneManager.cameraComponent.mainCamera.rotation.y=endRotation
     }
     */
+
     fetchData({sFrame: sfns, eFrame: efns}){
         if(window.workerReady){
             this.vDecoder.fetch({

+ 9 - 1
src/RotationEvent.js

@@ -49,9 +49,17 @@ export default class RotationEvent {
             const offsetWidth = this._room.options.canvas.offsetWidth
 
             let angle = offsetX / offsetWidth * 2 * Math.PI
+            // this._room.actionsHandler.rotate({
+            //     type: 'rotate',
+            //     // angle: angle
+            //     pitch: 0,
+            //     yaw: angle
+            // });
+
             this._room.actionsHandler.rotate({
                 type: 'rotate',
-                angle: angle
+                offsetX: offsetX,
+                width: this._room.options.canvas.offsetWidth
             });
 
             this.touchStartX = pageX;