From c7d073b80995f64e2f0e7a566191cefe477efec1 Mon Sep 17 00:00:00 2001
From: johnshaughnessy <johnfshaughnessy@gmail.com>
Date: Fri, 9 Nov 2018 10:21:46 -0800
Subject: [PATCH] Fix vive user bindings

---
 src/systems/userinput/bindings/vive-user.js  | 355 ++++++++++++-------
 src/systems/userinput/resolve-action-sets.js |  20 +-
 src/systems/userinput/userinput.js           |   1 -
 3 files changed, 226 insertions(+), 150 deletions(-)

diff --git a/src/systems/userinput/bindings/vive-user.js b/src/systems/userinput/bindings/vive-user.js
index 0a1702c19..014c04853 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 5a76dc60a..5c2a38869 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 3df58141f..bea1f9b7d 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);
       }
 
-- 
GitLab