diff --git a/src/systems/userinput/bindings/vive-user.js b/src/systems/userinput/bindings/vive-user.js index 0a1702c19d3e123245e10fdb6b6a9e0ad31ef1aa..014c04853cb041dabcf25240244229dce9c972c4 100644 --- a/src/systems/userinput/bindings/vive-user.js +++ b/src/systems/userinput/bindings/vive-user.js @@ -19,17 +19,14 @@ const lDpadSouth = v("left/dpad/south"); const lDpadEast = v("left/dpad/east"); const lDpadWest = v("left/dpad/west"); const lDpadCenter = v("left/dpad/center"); -const lTriggerFalling = v("left/trigger/falling"); const lTriggerFallingStopDrawing = v("left/trigger/falling/stopDrawing"); const lGripFallingStopDrawing = v("left/grip/falling/stopDrawing"); -const lTriggerRising = v("left/trigger/rising"); const lTriggerRisingGrab = v("right/trigger/rising/grab"); const lGripRisingGrab = v("right/grab/rising/grab"); -const lTouchpadRising = v("left/touchpad/rising"); +const lTouchpadRising2 = v("left/touchpad/rising2"); +const lTouchpadRising1 = v("left/touchpad/rising1"); 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"); const rButton = paths.device.vive.right.button; @@ -42,15 +39,11 @@ const rDpadEast = v("right/dpad/east"); const rDpadWest = v("right/dpad/west"); const rDpadCenter = v("right/dpad/center"); const rDpadCenterStrip = v("right/dpad/centerStrip"); -const rTriggerFalling = v("right/trigger/falling"); -const rTriggerRising = v("right/trigger/rising"); const rTouchpadRising = v("right/touchpad/rising"); const rTouchpadFalling = v("right/touchpad/falling"); const rightBoost = v("right/boost"); -const rGripRising = v("right/grip/rising"); const rTriggerRisingGrab = v("right/trigger/rising/grab"); const rGripRisingGrab = v("right/grab/rising/grab"); -const rGripFalling = v("right/grip/falling"); const cursorDrop1 = v("right/cursorDrop1"); const cursorDrop2 = v("right/cursorDrop2"); const rHandDrop1 = v("right/drop1"); @@ -78,36 +71,49 @@ const wasd_vec2 = k("wasd_vec2"); const arrows_vec2 = k("arrows_vec2"); const keyboardBoost = k("boost"); -const nothingHeldLeft = [ - { - src: { value: lButton("trigger").pressed }, - dest: { value: paths.actions.leftHand.startTeleport }, - xform: xforms.rising, - root: lTriggerRising, - priority: 100 - } -]; -const nothingHeldRight = [ - { - src: { value: rButton("trigger").pressed }, - dest: { value: paths.actions.rightHand.startTeleport }, - xform: xforms.rising, - root: rTriggerRising, - priority: 100 - } -]; +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 leftTouchpadPressed1 = v("leftTouchpadPressed1"); +const leftTouchpadPressed2 = v("leftTouchpadPressed2"); +const rightTriggerPressed1 = v("rightTriggerPressed1"); +const rightTriggerPressed2 = v("rightTriggerPressed2"); +const leftTouchpadFallingStopTeleport = v("leftTouchpadFallingStopTeleport"); +const leftTriggerFallingStopTeleport = v("leftTriggerFallingStopTeleport"); +const leftGripFallingWhileHoldingPen = v("leftGripFallingWhileHoldingPen"); export const viveUserBindings = addSetsToBindings({ [sets.global]: [ { src: { - value: lButton("grip").touched + value: lButton("grip").pressed + }, + dest: { + value: leftGripPressed1 + }, + xform: xforms.copy + }, + { + src: { + value: leftGripPressed1 }, dest: { value: paths.actions.leftHand.middleRingPinky }, xform: xforms.copy }, + { + src: { + value: lButton("grip").pressed + }, + dest: { + value: leftGripPressed2 + }, + xform: xforms.copy + }, { src: [lButton("touchpad").touched, lButton("top").touched], dest: { @@ -116,15 +122,47 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.any }, { - src: { value: lButton("trigger").pressed }, + src: { value: leftTriggerPressed1 }, dest: { value: paths.actions.leftHand.index }, xform: xforms.copy }, + { + src: { value: lButton("trigger").pressed }, + dest: { + value: leftTriggerPressed1 + }, + xform: xforms.copy + }, + { + src: { value: lButton("trigger").pressed }, + dest: { + value: leftTriggerPressed2 + }, + xform: xforms.copy + }, + { + src: { + value: rButton("grip").pressed + }, + dest: { + value: rightGripPressed1 + }, + xform: xforms.copy + }, + { + src: { + value: rButton("grip").pressed + }, + dest: { + value: rightGripPressed2 + }, + xform: xforms.copy + }, { src: { - value: rButton("grip").touched + value: rightGripPressed1 }, dest: { value: paths.actions.rightHand.middleRingPinky @@ -139,7 +177,21 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.any }, { - src: { value: rButton("trigger").pressed }, + src: { + value: rButton("trigger").pressed + }, + dest: { value: rightTriggerPressed1 }, + xform: xforms.copy + }, + { + src: { + value: rButton("trigger").pressed + }, + dest: { value: rightTriggerPressed2 }, + xform: xforms.copy + }, + { + src: { value: rightTriggerPressed1 }, dest: { value: paths.actions.rightHand.index }, @@ -182,9 +234,18 @@ export const viveUserBindings = addSetsToBindings({ value: lButton("touchpad").pressed }, dest: { - value: lTouchpadRising + value: leftTouchpadPressed1 }, - xform: xforms.rising + xform: xforms.copy + }, + { + src: { + value: lButton("touchpad").pressed + }, + dest: { + value: leftTouchpadPressed2 + }, + xform: xforms.copy }, { src: { @@ -241,8 +302,7 @@ export const viveUserBindings = addSetsToBindings({ value: rSnapRight }, xform: xforms.copyIfTrue, - root: rDpadEast, - priority: 100 + priority: 1 }, { src: { value: paths.device.keyboard.key("e") }, @@ -284,8 +344,7 @@ export const viveUserBindings = addSetsToBindings({ value: rSnapLeft }, xform: xforms.copyIfTrue, - root: rDpadWest, - priority: 100 + priority: 1 }, { src: { value: paths.device.keyboard.key("q") }, @@ -324,7 +383,7 @@ export const viveUserBindings = addSetsToBindings({ }, { src: { - bool: lButton("touchpad").pressed, + bool: leftTouchpadPressed2, value: lJoyScaled }, dest: { value: lCharacterAcceleration }, @@ -446,11 +505,10 @@ export const viveUserBindings = addSetsToBindings({ ], [sets.rightHandTeleporting]: [ { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rTriggerStopTeleport }, xform: xforms.falling, - root: rTriggerFalling, - priority: 100 + priority: 1 }, { src: { value: rButton("touchpad").pressed }, @@ -463,46 +521,59 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.any } ], - [sets.leftHandHoveringOnNothing]: [...nothingHeldLeft], + [sets.leftHandHoveringOnNothing]: [ + { + src: { value: leftTriggerPressed2 }, + dest: { value: paths.actions.leftHand.startTeleport }, + xform: xforms.rising + } + ], [sets.leftHandTeleporting]: [ { - src: { value: lButton("trigger").pressed }, - dest: { value: paths.actions.leftHand.stopTeleport }, + src: { value: leftTriggerPressed2 }, + dest: { value: leftTriggerFallingStopTeleport }, xform: xforms.falling, - root: lTriggerFalling, - priority: 100 + priority: 1 + }, + { + src: [leftTriggerFallingStopTeleport, leftTouchpadFallingStopTeleport, leftGripFallingWhileHoldingPen], + dest: { value: paths.actions.leftHand.stopTeleport }, + xform: xforms.any } ], - [sets.rightHandHoveringOnNothing]: [...nothingHeldRight], + [sets.rightHandHoveringOnNothing]: [ + { + src: { value: rightTriggerPressed2 }, + dest: { value: paths.actions.rightHand.startTeleport }, + xform: xforms.rising, + priority: 1 + } + ], [sets.cursorHoveringOnNothing]: [], [sets.cursorHoveringOnUI]: [ { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.grab }, xform: xforms.rising, - root: rTriggerRising, - priority: 100 + priority: 1 } ], [sets.leftHandHoveringOnInteractable]: [ { - src: { value: lButton("grip").pressed }, + src: { value: leftGripPressed2 }, dest: { value: lGripRisingGrab }, - xform: xforms.rising, - root: lGripRising, - priority: 200 + xform: xforms.rising }, { - src: { value: lButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: lTriggerRisingGrab }, xform: xforms.rising, - root: lTriggerRising, - priority: 200 + priority: 1 }, { src: [lGripRisingGrab, lTriggerRisingGrab], @@ -513,38 +584,63 @@ export const viveUserBindings = addSetsToBindings({ [sets.leftHandHoldingInteractable]: [ { - src: { value: lButton("grip").pressed }, + src: { value: leftGripPressed2 }, dest: { value: paths.actions.leftHand.drop }, xform: xforms.falling, - root: lGripFalling, - priority: 200 + priority: 1 } ], [sets.leftHandHoveringOnPen]: [], [sets.leftHandHoldingPen]: [ + { + src: { value: leftTouchpadPressed2 }, + dest: { value: leftTouchpadFallingStopTeleport }, + xform: xforms.falling, + priority: 1 + }, { src: { - bool: lTouchpadRising, + value: leftTouchpadPressed2 + }, + dest: { + value: lTouchpadRising1 + }, + xform: xforms.rising, + priority: 1 + }, + { + src: { + bool: lTouchpadRising1, value: lDpadCenter }, dest: { value: paths.actions.leftHand.startTeleport }, - xform: xforms.copyIfTrue + xform: xforms.copyIfTrue, + priority: 1 }, { - src: { value: lButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: paths.actions.leftHand.startDrawing }, - xform: xforms.rising + xform: xforms.rising, + priorty: 2 }, { - src: { value: lButton("trigger").pressed }, + src: { value: leftTriggerPressed2 }, dest: { value: lTriggerFallingStopDrawing }, - xform: xforms.falling + xform: xforms.falling, + priorty: 2 }, { - src: { value: lButton("grip").pressed }, + src: { value: leftGripPressed2 }, dest: { value: lGripFallingStopDrawing }, - xform: xforms.falling + xform: xforms.falling, + priority: 1 + }, + { + src: { value: leftGripPressed2 }, + dest: { value: leftGripFallingWhileHoldingPen }, + xform: xforms.falling, + priority: 1 }, { src: [lTriggerFallingStopDrawing, lGripFallingStopDrawing], @@ -553,27 +649,35 @@ export const viveUserBindings = addSetsToBindings({ }, { src: { - bool: lTouchpadRising, + value: leftTouchpadPressed2 + }, + dest: { + value: lTouchpadRising2 + }, + xform: xforms.rising, + priority: 1 + }, + { + src: { + bool: lTouchpadRising2, value: lDpadNorth }, dest: { value: paths.actions.leftHand.penNextColor }, xform: xforms.copyIfTrue, - root: lDpadNorth, - priority: 200 + priority: 2 }, { src: { - bool: lTouchpadRising, + bool: lTouchpadRising2, value: lDpadSouth }, dest: { value: paths.actions.leftHand.penPrevColor }, xform: xforms.copyIfTrue, - root: lDpadSouth, - priority: 200 + priority: 2 }, { src: { @@ -587,18 +691,15 @@ export const viveUserBindings = addSetsToBindings({ [sets.cursorHoveringOnInteractable]: [ { - src: { value: rButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: rGripRisingGrab }, - xform: xforms.rising, - root: rGripRising, - priority: 200 + xform: xforms.rising }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rTriggerRisingGrab }, xform: xforms.rising, - root: rTriggerRising, - priority: 200 + priority: 1 }, { src: [rGripRisingGrab, rTriggerRisingGrab], @@ -617,20 +718,18 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.touch_axis_scroll(-1) }, { - src: { value: rButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: cursorDrop1 }, xform: xforms.falling, - root: rGripFalling, - priority: 200 + priority: 1 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: cursorDrop2 }, xform: xforms.falling, - root: rTriggerFalling, - priority: 200 + priority: 2 }, { src: [cursorDrop1, cursorDrop2], @@ -638,10 +737,9 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.any }, { - src: null, + src: {}, dest: { value: ensureFrozenViaDpad }, root: rootForFrozenOverrideWhenHolding, - priority: 100, xform: xforms.always(false) } ], @@ -655,19 +753,20 @@ export const viveUserBindings = addSetsToBindings({ value: rDpadCenter }, dest: { value: paths.actions.rightHand.startTeleport }, - xform: xforms.copyIfTrue + xform: xforms.copyIfTrue, + priority: 2 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.startDrawing }, - xform: xforms.rising + xform: xforms.rising, + priority: 3 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.stopDrawing }, xform: xforms.falling, - root: rTriggerFalling, - priority: 300 + priority: 3 }, { src: { @@ -686,8 +785,7 @@ export const viveUserBindings = addSetsToBindings({ value: paths.actions.cursor.penNextColor }, xform: xforms.copyIfTrue, - root: rDpadNorth, - priority: 200 + priority: 2 }, { src: { @@ -698,25 +796,21 @@ export const viveUserBindings = addSetsToBindings({ value: paths.actions.cursor.penPrevColor }, xform: xforms.copyIfTrue, - root: rDpadSouth, - priority: 200 + priority: 2 } ], [sets.rightHandHoveringOnInteractable]: [ { - src: { value: rButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: rGripRisingGrab }, - xform: xforms.rising, - root: rGripRising, - priority: 200 + xform: xforms.rising }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rTriggerRisingGrab }, xform: xforms.rising, - root: rTriggerRising, - priority: 200 + priority: 2 }, { src: [rGripRisingGrab, rTriggerRisingGrab], @@ -727,20 +821,18 @@ export const viveUserBindings = addSetsToBindings({ [sets.rightHandHoldingInteractable]: [ { - src: { value: rButton("grip").pressed }, + src: { value: rightGripPressed2 }, dest: { value: rHandDrop1 }, xform: xforms.falling, - root: rGripFalling, - priority: 200 + priority: 1 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: rHandDrop2 }, xform: xforms.falling, - root: rTriggerFalling, - priority: 200 + priority: 2 }, { src: [rHandDrop1, rHandDrop2], @@ -748,10 +840,9 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.any }, { - src: null, + src: {}, dest: { value: ensureFrozenViaDpad }, root: rootForFrozenOverrideWhenHolding, - priority: 100, xform: xforms.always(false) } ], @@ -766,16 +857,16 @@ export const viveUserBindings = addSetsToBindings({ xform: xforms.copyIfTrue }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.startDrawing }, - xform: xforms.rising + xform: xforms.rising, + priority: 3 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.stopDrawing }, xform: xforms.falling, - root: rTriggerFalling, - priority: 300 + priority: 3 }, { src: { @@ -786,8 +877,7 @@ export const viveUserBindings = addSetsToBindings({ value: paths.actions.rightHand.penNextColor }, xform: xforms.copyIfTrue, - root: rDpadNorth, - priority: 200 + priority: 2 }, { src: { @@ -798,8 +888,7 @@ export const viveUserBindings = addSetsToBindings({ value: paths.actions.rightHand.penPrevColor }, xform: xforms.copyIfTrue, - root: rDpadSouth, - priority: 200 + priority: 2 }, { src: { @@ -817,16 +906,16 @@ export const viveUserBindings = addSetsToBindings({ [sets.rightHandHoldingCamera]: [ { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.rightHand.takeSnapshot }, - xform: xforms.rising + xform: xforms.rising, + priority: 3 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.noop }, xform: xforms.falling, - root: rTriggerFalling, - priority: 400 + priority: 3 } ], [sets.leftHandHoldingCamera]: [ @@ -838,16 +927,16 @@ export const viveUserBindings = addSetsToBindings({ ], [sets.cursorHoldingCamera]: [ { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.actions.cursor.takeSnapshot }, - xform: xforms.rising + xform: xforms.rising, + priority: 3 }, { - src: { value: rButton("trigger").pressed }, + src: { value: rightTriggerPressed2 }, dest: { value: paths.noop }, xform: xforms.falling, - root: rTriggerFalling, - priority: 400 + priority: 3 } ], [sets.globalPost]: [ diff --git a/src/systems/userinput/resolve-action-sets.js b/src/systems/userinput/resolve-action-sets.js index 5a76dc60a5fbe0762b3dc2bbf39cee3ea1794177..5c2a3886939f71d83a1ee0a761d37c2a3e0813d8 100644 --- a/src/systems/userinput/resolve-action-sets.js +++ b/src/systems/userinput/resolve-action-sets.js @@ -21,17 +21,10 @@ export function resolveActionSets() { leftHandState.has("hover-start") && leftHandState.get("hover-start").matches(".icamera, .icamera *"); const leftHandHoldingInteractable = - !leftTeleporter.active && - leftHandState.has("grab-start") && - leftHandState.get("grab-start").matches(".interactable, .interactable *"); - const leftHandHoldingPen = - !leftTeleporter.active && - leftHandState.has("grab-start") && - leftHandState.get("grab-start").matches(".pen, .pen *"); + leftHandState.has("grab-start") && leftHandState.get("grab-start").matches(".interactable, .interactable *"); + const leftHandHoldingPen = leftHandState.has("grab-start") && leftHandState.get("grab-start").matches(".pen, .pen *"); const leftHandHoldingCamera = - !leftTeleporter.active && - leftHandState.has("grab-start") && - leftHandState.get("grab-start").matches(".icamera, .icamera *"); + leftHandState.has("grab-start") && leftHandState.get("grab-start").matches(".icamera, .icamera *"); const leftHandHovering = !leftTeleporter.active && leftHandState.has("hover-start"); const leftHandHoveringOnNothing = !leftHandHovering && !leftHandState.has("grab-start"); const leftHandTeleporting = leftTeleporter.active; @@ -58,17 +51,12 @@ export function resolveActionSets() { rightHandState.has("hover-start") && rightHandState.get("hover-start").matches(".icamera, .icamera *"); const rightHandHoldingInteractable = - !rightHandTeleporting && !cursorGrabbing && rightHandState.has("grab-start") && rightHandState.get("grab-start").matches(".interactable, .interactable *"); const rightHandHoldingPen = - !rightHandTeleporting && - !cursorGrabbing && - rightHandState.has("grab-start") && - rightHandState.get("grab-start").matches(".pen, .pen *"); + !cursorGrabbing && rightHandState.has("grab-start") && rightHandState.get("grab-start").matches(".pen, .pen *"); const rightHandHoldingCamera = - !rightTeleporter.active && !cursorGrabbing && rightHandState.has("grab-start") && rightHandState.get("grab-start").matches(".icamera, .icamera *"); diff --git a/src/systems/userinput/userinput.js b/src/systems/userinput/userinput.js index 3df58141ff619f350cb14aa14340804e8e04b6ae..bea1f9b7de43688c448092382cb21e7cfd70deed 100644 --- a/src/systems/userinput/userinput.js +++ b/src/systems/userinput/userinput.js @@ -300,7 +300,6 @@ AFRAME.registerSystem("userinput", { bindingExistedLastFrame = j > -1 && this.prevActives[j] && this.prevMasked[j].length === 0; } if (!bindingExistedLastFrame) { - console.log("deleting xform state for ", binding); this.xformStates.delete(binding); }