diff --git a/src/systems/userinput/bindings/keyboard-mouse-user.js b/src/systems/userinput/bindings/keyboard-mouse-user.js index 40725bf3b869739a379583b535d9f654b1a8557a..0305d80fb17305127c286cf8a79b924389af6900 100644 --- a/src/systems/userinput/bindings/keyboard-mouse-user.js +++ b/src/systems/userinput/bindings/keyboard-mouse-user.js @@ -65,12 +65,12 @@ export const keyboardMouseUserBindings = { second: arrows_vec2 }, dest: { value: keyboardCharacterAcceleration }, - xform: xforms.add_vec2 + xform: xforms.max_vec2 }, { src: { value: keyboardCharacterAcceleration }, dest: { value: paths.actions.characterAcceleration }, - xform: xforms.copy + xform: xforms.normalize_vec2 }, { src: { value: paths.device.keyboard.key("shift") }, diff --git a/src/systems/userinput/bindings/oculus-touch-user.js b/src/systems/userinput/bindings/oculus-touch-user.js index 6967a2628f8aafd20be2b7ba4a7ddd3b2f0d1b9d..1d557129c05e1d7ec718dbadfb08c7c22543b84c 100644 --- a/src/systems/userinput/bindings/oculus-touch-user.js +++ b/src/systems/userinput/bindings/oculus-touch-user.js @@ -47,6 +47,7 @@ const leftJoyY = `${name}left/joyY`; const leftJoyYCursorMod = `${name}left/joyYCursorMod`; const oculusTouchCharacterAcceleration = `${name}characterAcceleration`; const keyboardCharacterAcceleration = "/var/keyboard/characterAcceleration"; +const characterAcceleration = "/var/oculus-touch/nonNormalizedCharacterAcceleration"; const wasd_vec2 = "/var/keyboard/wasd_vec2"; const arrows_vec2 = "/var/keyboard/arrows_vec2"; const keyboardBoost = "/var/keyboard-oculus/boost"; @@ -252,7 +253,7 @@ export const oculusTouchUserBindings = { second: arrows_vec2 }, dest: { value: keyboardCharacterAcceleration }, - xform: xforms.add_vec2 + xform: xforms.max_vec2 }, { src: { @@ -260,9 +261,14 @@ export const oculusTouchUserBindings = { second: keyboardCharacterAcceleration }, dest: { - value: paths.actions.characterAcceleration + value: characterAcceleration }, - xform: xforms.add_vec2 + xform: xforms.max_vec2 + }, + { + src: { value: characterAcceleration }, + dest: { value: paths.actions.characterAcceleration }, + xform: xforms.normalize_vec2 }, { src: { value: paths.device.keyboard.key("shift") }, diff --git a/src/systems/userinput/bindings/vive-user.js b/src/systems/userinput/bindings/vive-user.js index 74833b02f2f31b6394930ca2ed27e9bad85138ee..39954438401c372a7070d876f8b04991b198817a 100644 --- a/src/systems/userinput/bindings/vive-user.js +++ b/src/systems/userinput/bindings/vive-user.js @@ -26,6 +26,7 @@ const lTriggerRisingGrab = v("right/trigger/rising/grab"); const lGripRisingGrab = v("right/grab/rising/grab"); const lTouchpadRising = v("left/touchpad/rising"); const lCharacterAcceleration = v("left/characterAcceleration"); +const characterAcceleration = v("nonNormalizedCharacterAcceleration"); const lGripFalling = v("left/grip/falling"); const lGripRising = v("left/grip/rising"); const leftBoost = v("left/boost"); @@ -342,7 +343,7 @@ export const viveUserBindings = { second: arrows_vec2 }, dest: { value: keyboardCharacterAcceleration }, - xform: xforms.add_vec2 + xform: xforms.max_vec2 }, { src: { @@ -350,9 +351,14 @@ export const viveUserBindings = { second: keyboardCharacterAcceleration }, dest: { - value: paths.actions.characterAcceleration + value: characterAcceleration }, - xform: xforms.add_vec2 + xform: xforms.max_vec2 + }, + { + src: { value: characterAcceleration }, + dest: { value: paths.actions.characterAcceleration }, + xform: xforms.normalize_vec2 }, { src: { value: paths.device.keyboard.key("shift") }, diff --git a/src/systems/userinput/bindings/xforms.js b/src/systems/userinput/bindings/xforms.js index 444134675a842316f0f5b52f55ed8ff30083ca15..0ab4cdf5226a3840a26475cf5cd93390b7723a22 100644 --- a/src/systems/userinput/bindings/xforms.js +++ b/src/systems/userinput/bindings/xforms.js @@ -104,6 +104,29 @@ export const xforms = { frame[dest.value] = first; } }, + max_vec2: function(frame, src, dest) { + const first = frame[src.first]; + const second = frame[src.second]; + if (first && second) { + frame[dest.value] = + first[0] * first[0] + first[1] * first[1] > second[0] * second[0] + second[1] * second[1] ? first : second; + } else if (second) { + frame[dest.value] = second; + } else if (first) { + frame[dest.value] = first; + } + }, + normalize_vec2: function(frame, src, dest) { + const vec2 = frame[src.value]; + if (vec2) { + if (vec2[0] === 0 && vec2[0] === 0) { + frame[dest.value] = vec2; + } else { + const l = Math.sqrt(vec2[0] * vec2[0] + vec2[1] * vec2[1]); + frame[dest.value] = [vec2[0] / l, vec2[1] / l]; + } + } + }, any: function(frame, src, dest) { for (const path in src) { if (frame[src[path]]) {