| @@ -22,7 +22,7 @@ Script.include("/~/system/libraries/controllers.js"); · 21 unmodified lines |
| 22 | 22 | this.running = false; |
| 23 | 23 | |
| 24 | 24 | this.parameters = makeDispatcherModuleParameters( |
| 25 | | − 120, |
| 25 | + 160, |
| 26 | 26 | this.hand === RIGHT_HAND ? ["rightHand"] : ["leftHand"], |
| 27 | 27 | [], |
| 28 | 28 | 100, |
| @@ -60,6 +60,30 @@ Script.include("/~/system/libraries/controllers.js"); · 31 unmodified lines |
| 60 | 60 | return this.hand === RIGHT_HAND ? leftOverlayLaserInput : rightOverlayLaserInput; |
| 61 | 61 | }; |
| 62 | 62 | |
| 63 | + this.isPointingAtGrabbableEntity = function(controllerData, triggerPressed) { |
| 64 | + // we are searching for an entity that is not a web entity. We want to be able to |
| 65 | + // grab a non-web entity if the ray-pick intersects one. |
| 66 | + var intersection = controllerData.rayPicks[this.hand]; |
| 67 | + if(intersection.type === Picks.INTERSECTED_ENTITY) { |
| 68 | + // is pointing at an entity. |
| 69 | + var entityProperty = Entities.getEntityProperties(intersection.objectID); |
| 70 | + var entityType = entityProperty.type; |
| 71 | + var isGrabbable = entityIsGrabbable(entityProperty); |
| 72 | + return (isGrabbable && triggerPressed && entityType !== "Web"); |
| 73 | + } else if (intersection.type === Picks.INTERSECTED_OVERLAY) { |
| 74 | + var objectID = intersection.objectID; |
| 75 | + if ((HMD.tabletID && objectID === HMD.tabletID) || |
| 76 | + (HMD.tabletScreenID && objectID === HMD.tabletScreenID) || |
| 77 | + (HMD.homeButtonID && objectID === HMD.homeButtonID)) { |
| 78 | + return true; |
| 79 | + } else { |
| 80 | + var overlayType = Overlays.getOverlayType(objectID); |
| 81 | + return overlayType === "web3d" || triggerPressed; |
| 82 | + } |
| 83 | + } |
| 84 | + return false; |
| 85 | + } |
| 86 | + |
| 63 | 87 | this.isPointingAtTriggerable = function(controllerData, triggerPressed) { |
| 64 | 88 | // allow pointing at tablet, unlocked web entities, or web overlays automatically without pressing trigger, |
| 65 | 89 | // but for pointing at locked web entities or non-web overlays user must be pressing trigger |
| @@ -113,7 +137,8 @@ Script.include("/~/system/libraries/controllers.js"); · 47 unmodified lines |
| 113 | 137 | var isTriggerPressed = controllerData.triggerValues[this.hand] > TRIGGER_OFF_VALUE && |
| 114 | 138 | controllerData.triggerValues[this.otherHand] <= TRIGGER_OFF_VALUE; |
| 115 | 139 | var allowThisModule = !otherModuleRunning || isTriggerPressed; |
| 116 | | − if (allowThisModule && this.isPointingAtTriggerable(controllerData, isTriggerPressed)) { |
| 140 | + if (allowThisModule && this.isPointingAtTriggerable(controllerData, isTriggerPressed)) { |
| 141 | + //this.isPointingAtGrabbableEntity(controllerData, isTriggerPressed)) { |
| 117 | 142 | this.updateAllwaysOn(); |
| 118 | 143 | if (isTriggerPressed) { |
| 119 | 144 | this.dominantHandOverride = true; // Override dominant hand. |
| @@ -134,7 +159,8 @@ Script.include("/~/system/libraries/controllers.js"); · 14 unmodified lines |
| 134 | 159 | var allowThisModule = !otherModuleRunning && !grabModuleNeedsToRun; |
| 135 | 160 | var isTriggerPressed = controllerData.triggerValues[this.hand] > TRIGGER_OFF_VALUE; |
| 136 | 161 | var laserOn = isTriggerPressed || this.parameters.handLaser.allwaysOn; |
| 137 | | − if (allowThisModule && (laserOn && this.isPointingAtTriggerable(controllerData, isTriggerPressed))) { |
| 162 | + if (allowThisModule && (laserOn && this.isPointingAtTriggerable(controllerData, isTriggerPressed)) && |
| 163 | + this.isPointingAtGrabbableEntity(controllerData, isTriggerPressed)) { |
| 138 | 164 | this.running = true; |
| 139 | 165 | return makeRunningValues(true, [], []); |
| 140 | 166 | } |