xushiting 3 tahun lalu
induk
melakukan
e40d9af2ec
2 mengubah file dengan 75 tambahan dan 52 penghapusan
  1. 13 51
      src/ActionsHandler.js
  2. 62 1
      src/Xverse_Room.js

+ 13 - 51
src/ActionsHandler.js

@@ -8,6 +8,7 @@ import Logger from "./Logger.js"
 import Response from "./Response.js"
 import { VDecoder } from "./h264Decoder/VDecoder.js";
 
+window.currentFrame = null
 const logger = new Logger('actions-handler')
 const QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
 export default class ActionsHandler {
@@ -389,64 +390,25 @@ export default class ActionsHandler {
 
         let efns = Math.round(endRotation/6)
 
+        if(window.currentFrame == null){
+            window.currentFrame = efns
+        }
+        else if(window.currentFrame != efns){
+            window.currentFrame = efns
+        }
+        else if(window.currentFrame == efns){
+            return
+        }
+        window.camera_endRotation = endRotation
+        window.star_angle = angle
         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
-            }
-        }
-
-        let response = JSON.parse(JSON.stringify(Response))
-
-        response.signal.newUserStates[0].userId = nickname
-
-        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.x = cameraState.position.x
-        response.signal.newUserStates[0].playerState.camera.position.y = cameraState.position.y
-        response.signal.newUserStates[0].playerState.camera.position.z = cameraState.position.z
         
-        response.signal.newUserStates[0].playerState.camera.angle.pitch = cameraState.angle.pitch
-        response.signal.newUserStates[0].playerState.camera.angle.yaw = cameraState.angle.yaw
-        response.signal.newUserStates[0].playerState.camera.angle.roll = cameraState.angle.roll
-
-        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.signal.handleSignal(response)
+        this.room.doRotate()
         //window.room.sceneManager.cameraComponent.mainCamera.rotation.y += angle
         //window.room.sceneManager.cameraComponent.setCameraPose(cameraState)
     }

+ 62 - 1
src/Xverse_Room.js

@@ -24,6 +24,7 @@ import EImageQuality from "./enum/EImageQuality.js"
 import Panorama from "./Panorama.js"
 import Debug from "./Debug.js"
 import Logger from "./Logger.js"
+import Response from "./Response.js"
 
 const logger = new Logger('xverse-room')
 export default class Xverse_Room extends EventEmitter {
@@ -87,8 +88,10 @@ export default class Xverse_Room extends EventEmitter {
                     if (s.stream) {
                         r || (r = !0,logger.info("Invoke updateRawYUVData"));
                         this.isUpdatedRawYUVData = !1;
-                        const fov = (l = this._currentState.skin) == null ? void 0 : l.fov;
+                        const fov = (l = this._currentState.skin) == null ? void 0 : l.fov;0
+                        
                         this.sceneManager.materialComponent.updateRawYUVData(s.stream, s.width, s.height, fov);
+                        
                         this.isUpdatedRawYUVData = !0
                     }
                     if(!e){
@@ -142,6 +145,64 @@ export default class Xverse_Room extends EventEmitter {
         })
     }
 
+    doRotate(){
+        if(typeof(window.star_angle) == 'undefined'){
+            return
+        }
+        let angle = window.star_angle
+        this.sceneManager.materialComponent.initreceveFrames()
+
+        let cameraPostion0 = util.xversePosition2Ue4(this.sceneManager.cameraComponent.mainCamera.position.clone())
+        let playerPosition = this.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": window.camera_endRotation,
+                "roll": 0
+            }
+        }
+
+        let response = JSON.parse(JSON.stringify(Response))
+
+        response.signal.newUserStates[0].userId = nickname
+
+        response.signal.newUserStates[0].playerState.player.position.x = this.avatarManager.avatars.get(nickname).position.x
+        response.signal.newUserStates[0].playerState.player.position.y = this.avatarManager.avatars.get(nickname).position.y
+        response.signal.newUserStates[0].playerState.player.position.z = this.avatarManager.avatars.get(nickname).position.z
+
+        response.signal.newUserStates[0].playerState.player.angle.pitch = this.avatarManager.avatars.get(nickname).rotation.pitch
+        response.signal.newUserStates[0].playerState.player.angle.yaw = this.avatarManager.avatars.get(nickname).rotation.yaw
+        response.signal.newUserStates[0].playerState.player.angle.roll = this.avatarManager.avatars.get(nickname).rotation.roll
+
+        response.signal.newUserStates[0].playerState.camera.position.x = cameraState.position.x
+        response.signal.newUserStates[0].playerState.camera.position.y = cameraState.position.y
+        response.signal.newUserStates[0].playerState.camera.position.z = cameraState.position.z
+        
+        response.signal.newUserStates[0].playerState.camera.angle.pitch = cameraState.angle.pitch
+        response.signal.newUserStates[0].playerState.camera.angle.yaw = cameraState.angle.yaw
+        response.signal.newUserStates[0].playerState.camera.angle.roll = cameraState.angle.roll
+
+        response.signal.newUserStates[0].playerState.cameraCenter.x = this.avatarManager.avatars.get(nickname).position.x
+        response.signal.newUserStates[0].playerState.cameraCenter.y = this.avatarManager.avatars.get(nickname).position.y
+        response.signal.newUserStates[0].playerState.cameraCenter.z = this.avatarManager.avatars.get(nickname).position.z
+        
+        console.log('更新相机角度')
+        this.signal.handleSignal(response)
+    }
+
     get currentNetworkOptions() {
         return this._currentNetworkOptions
     }