|
@@ -5,12 +5,11 @@ import Person from "./enum/Person.js"
|
|
import ClickType from "./enum/ClickType.js"
|
|
import ClickType from "./enum/ClickType.js"
|
|
import Logger from "./Logger.js"
|
|
import Logger from "./Logger.js"
|
|
|
|
|
|
-import Response from "./Response.js"
|
|
|
|
|
|
+
|
|
import { VDecoder } from "./h264Decoder/VDecoder.js";
|
|
import { VDecoder } from "./h264Decoder/VDecoder.js";
|
|
|
|
|
|
const logger = new Logger('actions-handler')
|
|
const logger = new Logger('actions-handler')
|
|
const QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
|
|
const QueueActions = [Actions.Transfer, Actions.ChangeSkin, Actions.GetOnVehicle, Actions.GetOffVehicle];
|
|
-
|
|
|
|
export default class ActionsHandler {
|
|
export default class ActionsHandler {
|
|
constructor(e) {
|
|
constructor(e) {
|
|
this.currentActiveAction = null
|
|
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
|
|
let endRotation = window.room.sceneManager.cameraComponent.mainCamera.rotation.y
|
|
if(endRotation<0){
|
|
if(endRotation<0){
|
|
endRotation += 2*Math.PI
|
|
endRotation += 2*Math.PI
|
|
@@ -403,27 +452,12 @@ export default class ActionsHandler {
|
|
|
|
|
|
this.room.sceneManager.materialComponent.initreceveFrames()
|
|
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}){
|
|
fetchData({sFrame: sfns, eFrame: efns}){
|
|
if(window.workerReady){
|
|
if(window.workerReady){
|
|
this.vDecoder.fetch({
|
|
this.vDecoder.fetch({
|