mirror of https://github.com/bjornbytes/lovr.git
WebXR input fixes;
This commit is contained in:
parent
fc48df874c
commit
98f481e941
|
@ -7,7 +7,7 @@ var webxr = {
|
|||
left: [0, 3, null, 1, null, null, null, 4, 5],
|
||||
right: [0, 3, null, 1, null, 4, 5, null, null],
|
||||
},
|
||||
'valve-index': [0, 3, 2, 1, null, 4, null, 4, null],
|
||||
'valve-index': [0, 3, 2, 1, null, 4, null],
|
||||
'microsoft-mixed-reality': [0, 3, 2, 1],
|
||||
'htc-vive': [0, null, 2, 1],
|
||||
'generic-trigger': [0],
|
||||
|
@ -94,7 +94,7 @@ var webxr = {
|
|||
session.inputSources.forEach(function(inputSource) {
|
||||
state.hands[({ left: 1, right: 2 })[inputSource.handedness]] = inputSource;
|
||||
|
||||
var profile = inputSource.profiles.find(function(profile) { return mappings[profile]; });
|
||||
var profile = inputSource.profiles.find(function(profile) { return buttons[profile]; });
|
||||
|
||||
if (!inputSource.gamepad || !profile) {
|
||||
inputSource.buttons = [];
|
||||
|
@ -143,7 +143,7 @@ var webxr = {
|
|||
fn();
|
||||
state.hands.forEach(function(inputSource, i) {
|
||||
state.lastButtonState[i] = inputSource && inputSource.buttons.map(function(button) {
|
||||
return button.pressed;
|
||||
return button && button.pressed;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -277,16 +277,16 @@ var webxr = {
|
|||
},
|
||||
|
||||
webxr_isDown: function(device, button, down, changed) {
|
||||
var button = state.hands[device] && state.hands[device].button;
|
||||
HEAPU32[down >> 2] = button && button.pressed;
|
||||
HEAPU32[changed >> 2] = button && (state.lastButtonState[device][button] ^ button.pressed);
|
||||
return !!button;
|
||||
var b = state.hands[device] && state.hands[device].buttons[button];
|
||||
HEAPU8[down] = b && b.pressed;
|
||||
HEAPU8[changed] = b && (state.lastButtonState[device][button] ^ b.pressed);
|
||||
return !!b;
|
||||
},
|
||||
|
||||
webxr_isTouched: function(device, button, touched) {
|
||||
var button = state.hands[device] && state.hands[device].button;
|
||||
HEAPU32[touched >> 2] = button && button.touched;
|
||||
return !!button;
|
||||
var b = state.hands[device] && state.hands[device].buttons[button];
|
||||
HEAPU8[touched] = b && b.touched;
|
||||
return !!b;
|
||||
},
|
||||
|
||||
webxr_getAxis: function(device, axis, value) {
|
||||
|
@ -303,13 +303,13 @@ var webxr = {
|
|||
return !!hand.buttons[axis];
|
||||
|
||||
case 1: /* AXIS_THUMBSTICK */
|
||||
HEAPF32[value >> 2 + 0] = hand.gamepad.axes[2];
|
||||
HEAPF32[value >> 2 + 1] = hand.gamepad.axes[3];
|
||||
HEAPF32[(value >> 2) + 0] = hand.gamepad.axes[2];
|
||||
HEAPF32[(value >> 2) + 1] = hand.gamepad.axes[3];
|
||||
return hand.axes.thumbstick;
|
||||
|
||||
case 2: /* AXIS_TOUCHPAD */
|
||||
HEAPF32[value >> 2 + 0] = hand.gamepad.axes[0];
|
||||
HEAPF32[value >> 2 + 1] = hand.gamepad.axes[1];
|
||||
HEAPF32[(value >> 2) + 0] = hand.gamepad.axes[0];
|
||||
HEAPF32[(value >> 2) + 1] = hand.gamepad.axes[1];
|
||||
return hand.axes.touchpad;
|
||||
|
||||
default: return false;
|
||||
|
@ -362,23 +362,23 @@ var webxr = {
|
|||
if (state.viewer) {
|
||||
var views = state.viewer.views;
|
||||
HEAPF32.set(views[0].transform.inverse.matrix, matrix >> 2);
|
||||
Module['_lovrGraphicsSetViewMatrix'](0, matrix);
|
||||
Module._lovrGraphicsSetViewMatrix(0, matrix);
|
||||
HEAPF32.set(views[1].transform.inverse.matrix, matrix >> 2);
|
||||
Module['_lovrGraphicsSetViewMatrix'](1, matrix);
|
||||
Module._lovrGraphicsSetViewMatrix(1, matrix);
|
||||
HEAPF32.set(views[0].projectionMatrix, matrix >> 2);
|
||||
Module['_lovrGraphicsSetProjection'](0, matrix);
|
||||
Module._lovrGraphicsSetProjection(0, matrix);
|
||||
HEAPF32.set(views[1].projectionMatrix, matrix >> 2);
|
||||
Module['_lovrGraphicsSetProjection'](1, matrix);
|
||||
Module._lovrGraphicsSetProjection(1, matrix);
|
||||
} else {
|
||||
HEAPF32.set([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], matrix >> 2);
|
||||
Module['_lovrGraphicsSetViewMatrix'](0, matrix);
|
||||
Module['_lovrGraphicsSetViewMatrix'](1, matrix);
|
||||
Module._lovrGraphicsSetViewMatrix(0, matrix);
|
||||
Module._lovrGraphicsSetViewMatrix(1, matrix);
|
||||
// TODO projection?
|
||||
}
|
||||
Module.stackRestore(matrix);
|
||||
Module['_lovrGraphicsSetBackbuffer'](state.canvas, true, true);
|
||||
Module['dynCall_vi'](callback, userdata);
|
||||
Module['_lovrGraphicsSetBackbuffer'](0, false, false);
|
||||
Module._lovrGraphicsSetBackbuffer(state.canvas, true, true);
|
||||
Module.dynCall_vi(callback, userdata);
|
||||
Module._lovrGraphicsSetBackbuffer(0, false, false);
|
||||
},
|
||||
|
||||
webxr_update: function(dt) {
|
||||
|
|
Loading…
Reference in New Issue