From beba8e5f163888a5bbf35224fe2dbe8781d17435 Mon Sep 17 00:00:00 2001 From: johnshaughnessy <johnfshaughnessy@gmail.com> Date: Thu, 8 Nov 2018 16:35:30 -0800 Subject: [PATCH] Oculus touch user binding adjustments --- .../userinput/bindings/oculus-touch-user.js | 309 +++++++++++------- src/systems/userinput/resolve-action-sets.js | 5 +- src/systems/userinput/userinput-debug.js | 5 + src/systems/userinput/userinput.js | 2 +- 4 files changed, 195 insertions(+), 126 deletions(-) diff --git a/src/systems/userinput/bindings/oculus-touch-user.js b/src/systems/userinput/bindings/oculus-touch-user.js index 033ce5308..dcf391419 100644 --- a/src/systems/userinput/bindings/oculus-touch-user.js +++ b/src/systems/userinput/bindings/oculus-touch-user.js @@ -14,30 +14,22 @@ const rightPose = paths.device.rightOculusTouch.pose; const scaledLeftJoyX = `${name}left/scaledJoyX`; const scaledLeftJoyY = `${name}left/scaledJoyY`; -const rightGripFalling = "${name}right/GripFalling"; -const rightTriggerFalling = `${name}right/TriggerFalling`; const cursorDrop2 = `${name}right/cursorDrop2`; const cursorDrop1 = `${name}right/cursorDrop1`; const rightHandDrop2 = `${name}right/rightHandDrop2`; const rightHandDrop1 = `${name}right/rightHandDrop1`; -const rightGripRising = `${name}right/GripRising`; -const rightTriggerRising = `${name}right/TriggerRising`; const rightGripRisingGrab = `${name}right/grip/RisingGrab`; const rightTriggerRisingGrab = `${name}right/trigger/RisingGrab`; const leftGripRisingGrab = `${name}left/grip/RisingGrab`; const leftTriggerRisingGrab = `${name}left/trigger/RisingGrab`; -const leftGripFalling = `${name}left/GripFalling`; -const leftGripRising = `${name}left/GripRising`; -const leftTriggerRising = `${name}left/TriggerRising`; -const leftTriggerFalling = `${name}left/TriggerFalling`; const rightDpadNorth = `${name}rightDpad/north`; const rightDpadSouth = `${name}rightDpad/south`; const rightDpadEast = `${name}rightDpad/east`; const rightDpadWest = `${name}rightDpad/west`; const rightDpadCenter = `${name}rightDpad/center`; const rightJoy = `${name}right/joy`; -const rightJoyY = `${name}right/joyY`; -const rightJoyYCursorMod = `${name}right/joyYCursorMod`; +const rightJoyY1 = `${name}right/joyY1`; +const rightJoyY2 = `${name}right/joyY2`; const leftDpadNorth = `${name}leftDpad/north`; const leftDpadSouth = `${name}leftDpad/south`; const leftDpadEast = `${name}leftDpad/east`; @@ -45,7 +37,6 @@ const leftDpadWest = `${name}leftDpad/west`; const leftDpadCenter = `${name}leftDpad/center`; const leftJoy = `${name}left/joy`; 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"; @@ -67,17 +58,46 @@ const ensureFrozenViaKeyboard = `${name}keyboard/ensureFrozen`; const thawViaButtons = `${name}buttons/thaw`; const thawViaKeyboard = `${name}keyboard/thaw`; +const v = s => { + return "/oculus-touch-user-vars/" + s; +}; +const leftGripPressed1 = v("leftGripPressed1"); +const leftGripPressed2 = v("leftGripPressed2"); +const rightGripPressed1 = v("rightGripPressed1"); +const rightGripPressed2 = v("rightGripPressed2"); +const leftTriggerPressed1 = v("leftTriggerPressed1"); +const leftTriggerPressed2 = v("leftTriggerPressed2"); +const rightTriggerPressed1 = v("rightTriggerPressed1"); +const rightTriggerPressed2 = v("rightTriggerPressed2"); + export const oculusTouchUserBindings = addSetsToBindings({ [sets.global]: [ { src: { value: leftButton("grip").pressed }, + dest: { + value: leftGripPressed1 + }, + xform: xforms.copy + }, + { + src: { + value: leftButton("grip").pressed + }, + dest: { + value: leftGripPressed2 + }, + xform: xforms.copy + }, + { + src: { + value: leftGripPressed1 + }, dest: { value: paths.actions.leftHand.middleRingPinky }, - xform: xforms.copy, - priority: 0 + xform: xforms.copy }, { src: [leftButton("x").touched, leftButton("y").touched, leftButton("thumbStick").touched], @@ -88,6 +108,20 @@ export const oculusTouchUserBindings = addSetsToBindings({ }, { src: { value: leftButton("trigger").pressed }, + dest: { + value: leftTriggerPressed1 + }, + xform: xforms.copy + }, + { + src: { value: leftButton("trigger").pressed }, + dest: { + value: leftTriggerPressed2 + }, + xform: xforms.copy + }, + { + src: { value: leftTriggerPressed1 }, dest: { value: paths.actions.leftHand.index }, @@ -97,6 +131,24 @@ export const oculusTouchUserBindings = addSetsToBindings({ src: { value: rightButton("grip").pressed }, + dest: { + value: rightGripPressed1 + }, + xform: xforms.copy + }, + { + src: { + value: rightButton("grip").pressed + }, + dest: { + value: rightGripPressed2 + }, + xform: xforms.copy + }, + { + src: { + value: rightGripPressed1 + }, dest: { value: paths.actions.rightHand.middleRingPinky }, @@ -111,6 +163,20 @@ export const oculusTouchUserBindings = addSetsToBindings({ }, { src: { value: rightButton("trigger").pressed }, + dest: { + value: rightTriggerPressed1 + }, + xform: xforms.copy + }, + { + src: { value: rightButton("trigger").pressed }, + dest: { + value: rightTriggerPressed2 + }, + xform: xforms.copy + }, + { + src: { value: rightTriggerPressed1 }, dest: { value: paths.actions.rightHand.index }, @@ -148,10 +214,24 @@ export const oculusTouchUserBindings = addSetsToBindings({ }, xform: xforms.vec2dpad(0.2, false, true) }, + { + src: { + value: rightAxis("joyY") + }, + dest: { value: rightJoyY1 }, + xform: xforms.copy + }, + { + src: { + value: rightAxis("joyY") + }, + dest: { value: rightJoyY2 }, + xform: xforms.copy + }, { src: { x: rightAxis("joyX"), - y: rightAxis("joyY") + y: rightJoyY1 }, dest: { value: rightJoy @@ -204,20 +284,17 @@ export const oculusTouchUserBindings = addSetsToBindings({ { src: { value: lowerButtons }, dest: { value: ensureFrozenViaButtons }, - xform: xforms.copy, - priority: 1 + xform: xforms.copy }, { src: { value: lowerButtons }, dest: { value: thawViaButtons }, - xform: xforms.falling, - priority: 1 + xform: xforms.falling }, { src: { value: paths.device.keyboard.key(" ") }, dest: { value: thawViaKeyboard }, - xform: xforms.falling, - priority: 1 + xform: xforms.falling }, { src: { @@ -283,33 +360,6 @@ export const oculusTouchUserBindings = addSetsToBindings({ dest: { vec2: wasd_vec2 }, xform: xforms.wasd_to_vec2 }, - { - src: { - value: paths.device.keyboard.key("t") - }, - dest: { - value: paths.actions.focusChat - }, - xform: xforms.rising - }, - { - src: { - value: paths.device.keyboard.key("l") - }, - dest: { - value: paths.actions.logDebugFrame - }, - xform: xforms.rising - }, - { - src: { - value: paths.device.keyboard.key("m") - }, - dest: { - value: paths.actions.muteMic - }, - xform: xforms.rising - }, { src: { first: wasd_vec2, @@ -329,7 +379,10 @@ export const oculusTouchUserBindings = addSetsToBindings({ xform: xforms.max_vec2 }, { - src: { value: characterAcceleration }, + src: { + value: characterAcceleration, + override: "/device/overrides/foo" + }, dest: { value: paths.actions.characterAcceleration }, xform: xforms.normalize_vec2 }, @@ -361,6 +414,33 @@ export const oculusTouchUserBindings = addSetsToBindings({ dest: { value: paths.actions.boost }, xform: xforms.any }, + { + src: { + value: paths.device.keyboard.key("t") + }, + dest: { + value: paths.actions.focusChat + }, + xform: xforms.rising + }, + { + src: { + value: paths.device.keyboard.key("l") + }, + dest: { + value: paths.actions.logDebugFrame + }, + xform: xforms.rising + }, + { + src: { + value: paths.device.keyboard.key("m") + }, + dest: { + value: paths.actions.muteMic + }, + xform: xforms.rising + }, { src: { value: rightPose }, dest: { value: paths.actions.cursor.pose }, @@ -377,13 +457,13 @@ export const oculusTouchUserBindings = addSetsToBindings({ xform: xforms.copy }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.stopTeleport }, xform: xforms.falling, priority: 1 }, { - src: { value: leftButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: paths.actions.leftHand.stopTeleport }, xform: xforms.falling, priority: 1 @@ -392,7 +472,7 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.leftHandHoveringOnNothing]: [ { - src: { value: leftButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: paths.actions.leftHand.startTeleport }, xform: xforms.rising, priority: 1 @@ -401,16 +481,16 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.cursorHoveringOnUI]: [ { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.grab }, xform: xforms.rising, - priority: 1 + priority: 2 } ], [sets.cursorHoveringOnNothing]: [ { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.startTeleport }, xform: xforms.rising, priority: 1 @@ -419,13 +499,12 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.leftHandHoveringOnInteractable]: [ { - src: { value: leftButton("grip").pressed }, + src: { value: leftGripPressed2 }, dest: { value: leftGripRisingGrab }, - xform: xforms.rising, - priority: 2 + xform: xforms.rising }, { - src: { value: leftButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: leftTriggerRisingGrab }, xform: xforms.rising, priority: 2 @@ -440,10 +519,9 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.leftHandHoldingInteractable]: [ { - src: { value: leftButton("grip").pressed }, + src: { value: leftGripPressed2 }, dest: { value: paths.actions.leftHand.drop }, - xform: xforms.falling, - priority: 2 + xform: xforms.falling }, { src: {}, @@ -456,20 +534,21 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.leftHandHoveringOnPen]: [], [sets.leftHandHoldingPen]: [ { - src: { value: leftButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: paths.actions.leftHand.startDrawing }, xform: xforms.rising, priority: 3 }, { - src: { value: leftButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: paths.actions.leftHand.stopDrawing }, xform: xforms.falling, priority: 3 }, { src: { - value: leftDpadEast + value: leftDpadEast, + override: "/device/overrides/foo" }, dest: { value: paths.actions.leftHand.penNextColor @@ -479,7 +558,8 @@ export const oculusTouchUserBindings = addSetsToBindings({ }, { src: { - value: leftDpadWest + value: leftDpadWest, + override: "/device/overrides/foo" }, dest: { value: paths.actions.leftHand.penPrevColor @@ -489,39 +569,28 @@ export const oculusTouchUserBindings = addSetsToBindings({ }, { src: { - bool: leftButton("grip").pressed, value: leftAxis("joyY") }, dest: { value: leftJoyY }, - xform: xforms.copyIfTrue, - priority: 1 + xform: xforms.copy }, { src: { value: leftJoyY }, dest: { value: paths.actions.leftHand.scalePenTip }, - xform: xforms.scale(-0.01), - priority: 1 - }, - { - src: { - bool: leftButton("grip").pressed, - value: leftAxis("joyY") - }, - dest: { value: leftJoyYCursorMod }, - xform: xforms.copyIfFalse, + xform: xforms.scale(-0.005), priority: 1 } ], [sets.cursorHoveringOnInteractable]: [ { - src: { value: rightButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: rightGripRisingGrab }, xform: xforms.rising, priority: 2 }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rightTriggerRisingGrab }, xform: xforms.rising, priority: 2 @@ -541,13 +610,13 @@ export const oculusTouchUserBindings = addSetsToBindings({ xform: xforms.scale(0.1) }, { - src: { value: rightButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: cursorDrop1 }, xform: xforms.falling, - priority: 2 + priority: 3 }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: cursorDrop2 }, @@ -572,13 +641,13 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.cursorHoldingPen]: [ { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.startDrawing }, xform: xforms.rising, priority: 3 }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.stopDrawing }, xform: xforms.falling, priority: 3 @@ -587,13 +656,13 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.rightHandHoveringOnInteractable]: [ { - src: { value: rightButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: rightGripRisingGrab }, xform: xforms.rising, priority: 2 }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rightTriggerRisingGrab }, xform: xforms.rising, priority: 2 @@ -608,13 +677,13 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.rightHandHoldingInteractable]: [ { - src: { value: rightButton("grip").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rightHandDrop1 }, xform: xforms.falling, priority: 2 }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightGripPressed2 }, dest: { value: rightHandDrop2 }, @@ -637,13 +706,13 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.rightHandHoveringOnPen]: [], [sets.rightHandHoldingPen]: [ { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.startDrawing }, xform: xforms.rising, priority: 3 }, { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.stopDrawing }, xform: xforms.falling, priority: 3 @@ -669,28 +738,16 @@ export const oculusTouchUserBindings = addSetsToBindings({ priority: 2 }, { - src: { - bool: rightButton("grip").pressed, - value: rightAxis("joyY") - }, - dest: { value: rightJoyY }, - xform: xforms.copyIfTrue, - priority: 2 - }, - { - src: { value: rightJoyY }, + src: { value: rightJoyY2 }, dest: { value: paths.actions.rightHand.scalePenTip }, - xform: xforms.scale(-0.01), + xform: xforms.scale(-0.005), priority: 2 }, { - src: { - boo: rightButton("grip").pressed, - value: rightAxis("joyY") - }, - dest: { value: rightJoyYCursorMod }, - xform: xforms.copyIfFalse, - priority: 2 + src: { value: rightGripPressed2 }, + dest: { value: paths.actions.rightHand.drop }, + xform: xforms.falling, + priority: 3 } ], @@ -700,20 +757,15 @@ export const oculusTouchUserBindings = addSetsToBindings({ [sets.rightHandHoldingCamera]: [ { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.takeSnapshot }, - xform: xforms.rising - }, - { - src: { value: rightButton("trigger").pressed }, - dest: { value: paths.noop }, - xform: xforms.falling, + xform: xforms.rising, priority: 4 } ], [sets.leftHandHoldingCamera]: [ { - src: { value: leftButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: paths.actions.leftHand.takeSnapshot }, xform: xforms.rising, priority: 4 @@ -721,14 +773,9 @@ export const oculusTouchUserBindings = addSetsToBindings({ ], [sets.cursorHoldingCamera]: [ { - src: { value: rightButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.takeSnapshot }, - xform: xforms.rising - }, - { - src: { value: rightButton("trigger").pressed }, - dest: { value: paths.noop }, - xform: xforms.falling, + xform: xforms.rising, priority: 4 } ], @@ -745,5 +792,19 @@ export const oculusTouchUserBindings = addSetsToBindings({ dest: { value: paths.actions.thaw }, xform: xforms.any } + ], + [sets.inputFocused]: [ + { + src: { value: "/device/keyboard" }, + dest: { value: paths.noop }, + xform: xforms.noop, + priority: 1000 + }, + { + src: { value: "/device/keyboard/l" }, + dest: { value: paths.actions.logDebugFrame }, + xform: xforms.rising, + priority: 1100 + } ] }); diff --git a/src/systems/userinput/resolve-action-sets.js b/src/systems/userinput/resolve-action-sets.js index 39a0d8e50..5a76dc60a 100644 --- a/src/systems/userinput/resolve-action-sets.js +++ b/src/systems/userinput/resolve-action-sets.js @@ -162,5 +162,8 @@ export function resolveActionSets() { userinput.toggleSet(sets.cursorHoldingPen, cursorHoldingPen); userinput.toggleSet(sets.cursorHoldingCamera, cursorHoldingCamera); userinput.toggleSet(sets.cursorHoldingInteractable, cursorHoldingInteractable); - userinput.toggleSet(sets.inputFocused, document.activeElement.nodeName === "INPUT"); + userinput.toggleSet( + sets.inputFocused, + document.activeElement.nodeName === "INPUT" || document.activeElement.nodeName === "TEXTAREA" + ); } diff --git a/src/systems/userinput/userinput-debug.js b/src/systems/userinput/userinput-debug.js index 453bcdaf8..11656a6a9 100644 --- a/src/systems/userinput/userinput-debug.js +++ b/src/systems/userinput/userinput-debug.js @@ -1,6 +1,11 @@ import { paths } from "./paths"; AFRAME.registerSystem("userinput-debug", { + active: true, + tick() { + if (!this.active) { + return; + } const userinput = AFRAME.scenes[0].systems.userinput; if (userinput.get(paths.actions.logDebugFrame) || userinput.get(paths.actions.log)) { console.log(userinput); diff --git a/src/systems/userinput/userinput.js b/src/systems/userinput/userinput.js index 48df3c938..f75f96578 100644 --- a/src/systems/userinput/userinput.js +++ b/src/systems/userinput/userinput.js @@ -26,7 +26,7 @@ import { GamepadDevice } from "./devices/gamepad"; import { gamepadBindings } from "./bindings/generic-gamepad"; const satisfiesPath = (binding, path) => { - return Object.values(binding.dest).indexOf(path) !== -1; + return Object.values(binding.dest) && Object.values(binding.dest).indexOf(path) !== -1; }; const satisfyPath = (bindings, path) => { -- GitLab