From e043d181cd61360cf5a361773768245a455c74e5 Mon Sep 17 00:00:00 2001
From: sabrina-shanman <sabrina@highfidelity.io>
Date: Tue, 16 Jul 2019 16:58:44 -0700
Subject: [PATCH 1/5] Disable picks in controllerDispatcher when not in HMD

---
 .../system/controllers/controllerDispatcher.js    | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/scripts/system/controllers/controllerDispatcher.js b/scripts/system/controllers/controllerDispatcher.js
index 0a9fa4dce1..e27834690d 100644
--- a/scripts/system/controllers/controllerDispatcher.js
+++ b/scripts/system/controllers/controllerDispatcher.js
@@ -285,6 +285,21 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
                 }
             }
 
+            // Enable/disable controller raypicking depending on whether we are in HMD
+            if (HMD.active) {
+                Pointers.enablePointer(_this.leftPointer);
+                Pointers.enablePointer(_this.rightPointer);
+                Pointers.enablePointer(_this.leftHudPointer);
+                Pointers.enablePointer(_this.rightHudPointer);
+                Picks.enablePick(_this.mouseRayPick);
+            } else {
+                Pointers.disablePointer(_this.leftPointer);
+                Pointers.disablePointer(_this.rightPointer);
+                Pointers.disablePointer(_this.leftHudPointer);
+                Pointers.disablePointer(_this.rightHudPointer);
+                Picks.disablePick(_this.mouseRayPick);
+            }
+
             // raypick for each controller
             var rayPicks = [
                 Pointers.getPrevPickResult(_this.leftPointer),

From fcaa64b9ef9afe02bf4768e39013ffd18204b9bd Mon Sep 17 00:00:00 2001
From: sabrina-shanman <sabrina@highfidelity.io>
Date: Tue, 16 Jul 2019 17:00:16 -0700
Subject: [PATCH 2/5] Fix teleport collision picks always enabled if user never
 enters HMD

---
 scripts/system/controllers/controllerModules/teleport.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/system/controllers/controllerModules/teleport.js b/scripts/system/controllers/controllerModules/teleport.js
index 5a51773930..e6ba440c29 100644
--- a/scripts/system/controllers/controllerModules/teleport.js
+++ b/scripts/system/controllers/controllerModules/teleport.js
@@ -366,7 +366,7 @@ Script.include("/~/system/libraries/controllers.js");
             var offset = _this.pickHeightOffset * capsuleRatio;
 
             _this.teleportHandCollisionPick = Picks.createPick(PickType.Collision, {
-                enabled: true,
+                enabled: false,
                 parentID: Pointers.getPointerProperties(_this.teleportParabolaHandCollisions).renderStates["collision"].end,
                 filter: Picks.PICK_ENTITIES | Picks.PICK_AVATARS,
                 shape: {
@@ -382,7 +382,7 @@ Script.include("/~/system/libraries/controllers.js");
             });
 
             _this.teleportHeadCollisionPick = Picks.createPick(PickType.Collision, {
-                enabled: true,
+                enabled: false,
                 parentID: Pointers.getPointerProperties(_this.teleportParabolaHeadCollisions).renderStates["collision"].end,
                 filter: Picks.PICK_ENTITIES | Picks.PICK_AVATARS,
                 shape: {

From 79d09f68fdecb89aadc5d9632f61dd0d7f4ed741 Mon Sep 17 00:00:00 2001
From: sabrina-shanman <sabrina@highfidelity.io>
Date: Thu, 18 Jul 2019 12:54:36 -0700
Subject: [PATCH 3/5] Disable grab.js picks when in HMD

---
 scripts/system/controllers/grab.js | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js
index 1fb82d3843..2cab0cbf25 100644
--- a/scripts/system/controllers/grab.js
+++ b/scripts/system/controllers/grab.js
@@ -221,6 +221,20 @@ function Grabber() {
     });
 }
 
+Grabber.prototype.setPicksEnabled = function(enabled) {
+    if (enabled) {
+        Picks.enablePick(this.mouseRayOverlays);
+        Pointers.enablePointer(this.mouseRayEntities);
+    } else {
+        Picks.disablePick(this.mouseRayOverlays);
+        Pointers.disablePointer(this.mouseRayEntities);
+    }
+}
+
+Grabber.prototype.displayModeChanged = function(isHMDMode) {
+    this.setPicksEnabled(!isHMDMode);
+}
+
 Grabber.prototype.computeNewGrabPlane = function() {
     if (!this.isGrabbing) {
         return;
@@ -488,6 +502,10 @@ Grabber.prototype.cleanup = function() {
 
 var grabber = new Grabber();
 
+function displayModeChanged(isHMDMode) {
+    grabber.displayModeChanged(isHMDMode);
+}
+
 function pressEvent(event) {
     grabber.pressEvent(event);
 }
@@ -517,6 +535,7 @@ Controller.mouseMoveEvent.connect(moveEvent);
 Controller.mouseReleaseEvent.connect(releaseEvent);
 Controller.keyPressEvent.connect(keyPressEvent);
 Controller.keyReleaseEvent.connect(keyReleaseEvent);
+HMD.displayModeChanged.connect(displayModeChanged);
 Script.scriptEnding.connect(cleanup);
 
 }()); // END LOCAL_SCOPE

From abac1787a61694157c99148d4204c874d06e8166 Mon Sep 17 00:00:00 2001
From: sabrina-shanman <sabrina@highfidelity.io>
Date: Mon, 22 Jul 2019 11:25:49 -0700
Subject: [PATCH 4/5] Fix using invalid pick API functions on HMD ray pointer

---
 scripts/system/controllers/controllerDispatcher.js   | 12 ++++++------
 .../system/controllers/controllerModules/mouseHMD.js |  2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/scripts/system/controllers/controllerDispatcher.js b/scripts/system/controllers/controllerDispatcher.js
index e27834690d..cf365a4119 100644
--- a/scripts/system/controllers/controllerDispatcher.js
+++ b/scripts/system/controllers/controllerDispatcher.js
@@ -291,13 +291,13 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
                 Pointers.enablePointer(_this.rightPointer);
                 Pointers.enablePointer(_this.leftHudPointer);
                 Pointers.enablePointer(_this.rightHudPointer);
-                Picks.enablePick(_this.mouseRayPick);
+                Pointers.enablePointer(_this.mouseRayPointer);
             } else {
                 Pointers.disablePointer(_this.leftPointer);
                 Pointers.disablePointer(_this.rightPointer);
                 Pointers.disablePointer(_this.leftHudPointer);
                 Pointers.disablePointer(_this.rightHudPointer);
-                Picks.disablePick(_this.mouseRayPick);
+                Pointers.disablePointer(_this.mouseRayPointer);
             }
 
             // raypick for each controller
@@ -309,7 +309,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
                 Pointers.getPrevPickResult(_this.leftHudPointer),
                 Pointers.getPrevPickResult(_this.rightHudPointer)
             ];
-            var mouseRayPick = Pointers.getPrevPickResult(_this.mouseRayPick);
+            var mouseRayPointer = Pointers.getPrevPickResult(_this.mouseRayPointer);
             // if the pickray hit something very nearby, put it into the nearby entities list
             for (h = LEFT_HAND; h <= RIGHT_HAND; h++) {
 
@@ -380,7 +380,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
                 nearbyOverlayIDs: nearbyOverlayIDs,
                 rayPicks: rayPicks,
                 hudRayPicks: hudRayPicks,
-                mouseRayPick: mouseRayPick
+                mouseRayPointer: mouseRayPointer
             };
             if (PROFILE) {
                 Script.endProfileRange("dispatch.gather");
@@ -545,7 +545,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
             hand: RIGHT_HAND
         });
 
-        this.mouseRayPick = Pointers.createPointer(PickType.Ray, {
+        this.mouseRayPointer = Pointers.createPointer(PickType.Ray, {
             joint: "Mouse",
             filter: Picks.PICK_OVERLAYS | Picks.PICK_ENTITIES | Picks.PICK_INCLUDE_NONCOLLIDABLE,
             enabled: true
@@ -594,7 +594,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
         this.cleanup = function () {
             Controller.disableMapping(MAPPING_NAME);
             _this.pointerManager.removePointers();
-            Pointers.removePointer(this.mouseRayPick);
+            Pointers.removePointer(this.mouseRayPointer);
         };
     }
 
diff --git a/scripts/system/controllers/controllerModules/mouseHMD.js b/scripts/system/controllers/controllerModules/mouseHMD.js
index 172923a8e2..0eccec01a6 100644
--- a/scripts/system/controllers/controllerModules/mouseHMD.js
+++ b/scripts/system/controllers/controllerModules/mouseHMD.js
@@ -64,7 +64,7 @@
                 Reticle.depth = Vec3.distance(reticlePositionOnHUD, HMD.position);
             } else {
                 var APPARENT_MAXIMUM_DEPTH = 100.0;
-                var result = controllerData.mouseRayPick;
+                var result = controllerData.mouseRayPointer;
                 Reticle.depth = result.intersects ? result.distance : APPARENT_MAXIMUM_DEPTH;
             }
         };

From d48c8d897c9fd30943ee18e236b6e051d147da6c Mon Sep 17 00:00:00 2001
From: sabrina-shanman <sabrina@highfidelity.io>
Date: Mon, 22 Jul 2019 11:40:06 -0700
Subject: [PATCH 5/5] Clarify that a Grabber member function toggles both picks
 and pointers

---
 scripts/system/controllers/grab.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js
index 2cab0cbf25..0bd2e9df9a 100644
--- a/scripts/system/controllers/grab.js
+++ b/scripts/system/controllers/grab.js
@@ -221,7 +221,7 @@ function Grabber() {
     });
 }
 
-Grabber.prototype.setPicksEnabled = function(enabled) {
+Grabber.prototype.setPicksAndPointersEnabled = function(enabled) {
     if (enabled) {
         Picks.enablePick(this.mouseRayOverlays);
         Pointers.enablePointer(this.mouseRayEntities);
@@ -232,7 +232,7 @@ Grabber.prototype.setPicksEnabled = function(enabled) {
 }
 
 Grabber.prototype.displayModeChanged = function(isHMDMode) {
-    this.setPicksEnabled(!isHMDMode);
+    this.setPicksAndPointersEnabled(!isHMDMode);
 }
 
 Grabber.prototype.computeNewGrabPlane = function() {