From c20c5ee2b5e812c9c4c8322945abec8ec99b6788 Mon Sep 17 00:00:00 2001 From: druiz17 Date: Wed, 20 Sep 2017 14:10:10 -0700 Subject: [PATCH] fixed tablet grabbing issue --- .../controllerModules/overlayLaserInput.js | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/scripts/system/controllers/controllerModules/overlayLaserInput.js b/scripts/system/controllers/controllerModules/overlayLaserInput.js index e21776ab0a..d67672ca7c 100644 --- a/scripts/system/controllers/controllerModules/overlayLaserInput.js +++ b/scripts/system/controllers/controllerModules/overlayLaserInput.js @@ -276,14 +276,30 @@ Script.include("/~/system/libraries/controllers.js"); return true; }; + this.grabModuleWantsNearbyOverlay = function(controllerData) { + if (controllerData.triggerValues[this.hand] > TRIGGER_ON_VALUE) { + var nearGrabName = this.hand === RIGHT_HAND ? "RightNearParentingGrabOverlay" : "LeftNearParentingGrabOverlay"; + var nearGrabModule = getEnabledModuleByName(nearGrabName); + if (nearGrabModule) { + var candidateOverlays = controllerData.nearbyOverlayIDs[this.hand]; + var grabbableOverlays = candidateOverlays.filter(function(overlayID) { + return Overlays.getProperty(overlayID, "grabbable"); + }); + var target = nearGrabModule.getTargetID(grabbableOverlays, controllerData); + if (target) { + return true; + } + } + } + return false; + }; + this.shouldExit = function(controllerData) { var intersection = controllerData.rayPicks[this.hand]; - var nearGrabName = this.hand === RIGHT_HAND ? "RightNearParentingGrabOverlay" : "LeftNearParentingGrabOverlay"; - var nearGrabModule = getEnabledModuleByName(nearGrabName); - var status = nearGrabModule ? nearGrabModule.isReady(controllerData) : makeRunningValues(false, [], []); var offOverlay = (intersection.type !== RayPick.INTERSECTED_OVERLAY); var triggerOff = (controllerData.triggerValues[this.hand] < TRIGGER_OFF_VALUE); - return offOverlay || status.active || triggerOff; + var grabbingOverlay = this.grabModuleWantsNearbyOverlay(controllerData); + return offOverlay || grabbingOverlay || triggerOff; }; this.exitModule = function() {