68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
// look-controls turns off autoUpdateMatrix (of player) which
|
|
// will break repositionining the VR rig (teleporting and other stuff)
|
|
// overriding this below is easier then adding updateMatrixWorld() everywhere else
|
|
// (or rolling your own look-controls and diverting from mainbranch)
|
|
|
|
AFRAME.registerComponent('patch-look-controls',{
|
|
|
|
init: function(){
|
|
alert("fjo"); //dEventListener('loaded', () => this.patchLookControls() )
|
|
},
|
|
|
|
patchLookControls: function(){
|
|
alert("ja!")
|
|
let lk = document.querySelector('[look-controls]')
|
|
if( !lk ) return
|
|
lk = lk.components['look-controls']
|
|
|
|
lk.onEnterVR = function () {
|
|
var sceneEl = this.el.sceneEl;
|
|
if (!sceneEl.checkHeadsetConnected()) { return; }
|
|
this.saveCameraPose();
|
|
this.el.object3D.position.set(0, 0, 0);
|
|
this.el.object3D.rotation.set(0, 0, 0);
|
|
if (sceneEl.hasWebXR) {
|
|
// this.el.object3D.matrixAutoUpdate = false;
|
|
this.el.object3D.updateMatrix();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Restore the pose.
|
|
*/
|
|
lk.onExitVR = function () {
|
|
if (!this.el.sceneEl.checkHeadsetConnected()) { return; }
|
|
this.restoreCameraPose();
|
|
this.previousHMDPosition.set(0, 0, 0);
|
|
this.el.object3D.matrixAutoUpdate = true;
|
|
}
|
|
|
|
// it also needs to apply the offset (in case the #rot was used in URLS)
|
|
|
|
lk.updateOrientation = function () {
|
|
var object3D = this.el.object3D;
|
|
var pitchObject = this.pitchObject;
|
|
var yawObject = this.yawObject;
|
|
var sceneEl = this.el.sceneEl;
|
|
|
|
// In VR or AR mode, THREE is in charge of updating the camera pose.
|
|
if ((sceneEl.is('vr-mode') || sceneEl.is('ar-mode')) && sceneEl.checkHeadsetConnected()) {
|
|
// With WebXR THREE applies headset pose to the object3D internally.
|
|
return;
|
|
}
|
|
|
|
this.updateMagicWindowOrientation();
|
|
|
|
let offsetX = object3D.rotation.offset ? object3D.rotation.offset.x : 0
|
|
let offsetY = object3D.rotation.offset ? object3D.rotation.offset.y : 0
|
|
|
|
// On mobile, do camera rotation with touch events and sensors.
|
|
object3D.rotation.x = this.magicWindowDeltaEuler.x + offsetX + pitchObject.rotation.x;
|
|
object3D.rotation.y = this.magicWindowDeltaEuler.y + offsetY + yawObject.rotation.y;
|
|
object3D.rotation.z = this.magicWindowDeltaEuler.z;
|
|
object3D.matrixAutoUpdate = true
|
|
}
|
|
|
|
}
|
|
})
|