diff --git a/libraries/pointers/src/Pointer.cpp b/libraries/pointers/src/Pointer.cpp index 0e542c47da..8691ab8823 100644 --- a/libraries/pointers/src/Pointer.cpp +++ b/libraries/pointers/src/Pointer.cpp @@ -111,7 +111,7 @@ void Pointer::generatePointerEvents(unsigned int pointerID, const PickResultPoin hoveredEvent.setMoveOnHoverLeave(moveOnHoverLeave); // if shouldHover && !_prevDoHover, only send hoverBegin - if (_enabled && _hover && doHover && !_prevDoHover) { + if (_enabled && doHover && !_prevDoHover) { if (hoveredObject.type == ENTITY) { emit pointerManager->hoverBeginEntity(hoveredObject.objectID, hoveredEvent); } else if (hoveredObject.type == OVERLAY) { @@ -119,7 +119,7 @@ void Pointer::generatePointerEvents(unsigned int pointerID, const PickResultPoin } else if (hoveredObject.type == HUD) { emit pointerManager->hoverBeginHUD(hoveredEvent); } - } else if (_enabled && _hover && doHover) { + } else if (_enabled && doHover) { if (hoveredObject.type == OVERLAY) { if (_prevHoveredObject.type == OVERLAY) { if (hoveredObject.objectID == _prevHoveredObject.objectID) { diff --git a/libraries/pointers/src/Pointer.h b/libraries/pointers/src/Pointer.h index ef0048cf1e..62683cb6e7 100644 --- a/libraries/pointers/src/Pointer.h +++ b/libraries/pointers/src/Pointer.h @@ -62,7 +62,7 @@ public: virtual void setLength(float length) {} virtual void setLockEndUUID(const QUuid& objectID, bool isOverlay, const glm::mat4& offsetMat = glm::mat4()) {} - void setDoesHover(bool hover); + virtual void setDoesHover(bool hover); void update(unsigned int pointerID); virtual void updateVisuals(const PickResultPointer& pickResult) = 0; diff --git a/scripts/system/controllers/controllerDispatcher.js b/scripts/system/controllers/controllerDispatcher.js index fe18ed25f8..4946a6525e 100644 --- a/scripts/system/controllers/controllerDispatcher.js +++ b/scripts/system/controllers/controllerDispatcher.js @@ -163,6 +163,20 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); } }; + this.updateDoesHover = function(handLaser) { + if (handLaser.doesHover !== undefined) { + if (handLaser.hand === LEFT_HAND + && _this.leftPointerDoesHover !== handLaser.doesHover) { + _this.leftPointerDoesHover = handLaser.doesHover; + _this.leftPointerDoesHoverChanged = true; + } else if (handLaser.hand === RIGHT_HAND + && _this.rightPointerDoesHover !== handLaser.doesHover) { + _this.rightPointerDoesHover = handLaser.doesHover; + _this.rightPointerDoesHoverChanged = true; + } + } + } + this.updateHovering = function () { if (_this.leftPointerDoesHoverChanged) { Pointers.setDoesHover(_this.leftPointer, _this.leftPointerDoesHover); @@ -345,19 +359,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); _this.runningPluginNames[orderedPluginName] = true; _this.markSlots(candidatePlugin, orderedPluginName); _this.pointerManager.makePointerVisible(candidatePlugin.parameters.handLaser); - - if (candidatePlugin.parameters.handLaser.doesHover !== undefined) { - if (candidatePlugin.parameters.handLaser.hand === LEFT_HAND - && _this.leftPointerDoesHover !== candidatePlugin.parameters.handLaser.doesHover) { - _this.leftPointerDoesHover = candidatePlugin.parameters.handLaser.doesHover; - _this.leftPointerDoesHoverChanged = true; - } else if (candidatePlugin.parameters.handLaser.hand === RIGHT_HAND - && _this.rightPointerDoesHover !== candidatePlugin.parameters.handLaser.doesHover) { - _this.rightPointerDoesHover = candidatePlugin.parameters.handLaser.doesHover; - _this.rightPointerDoesHoverChanged = true; - } - } - + _this.updateDoesHover(candidatePlugin.parameters.handLaser); if (DEBUG) { print("controllerDispatcher running " + orderedPluginName); } @@ -387,39 +389,14 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); if (PROFILE) { Script.beginProfileRange("dispatch.run." + runningPluginName); } + _this.updateDoesHover(plugin.parameters.handLaser); var runningness = plugin.run(controllerData, deltaTime); - - if (runningness.active) { - if (plugin.parameters.handLaser.doesHover !== undefined) { - if (plugin.parameters.handLaser.hand === LEFT_HAND - && _this.leftPointerDoesHover !== plugin.parameters.handLaser.doesHover) { - _this.leftPointerDoesHover = plugin.parameters.handLaser.doesHover; - _this.leftPointerDoesHoverChanged = true; - } else if (plugin.parameters.handLaser.hand === RIGHT_HAND - && _this.rightPointerDoesHover !== plugin.parameters.handLaser.doesHover) { - _this.rightPointerDoesHover = plugin.parameters.handLaser.doesHover; - _this.rightPointerDoesHoverChanged = true; - } - } - } - if (!runningness.active) { // plugin is finished running, for now. remove it from the list // of running plugins and mark its activity-slots as "not in use" delete _this.runningPluginNames[runningPluginName]; _this.markSlots(plugin, false); _this.pointerManager.makePointerInvisible(plugin.parameters.handLaser); - - if (plugin.parameters.handLaser.doesHover !== undefined) { - if (plugin.parameters.handLaser.hand === LEFT_HAND && !_this.leftPointerDoesHover) { - _this.leftPointerDoesHover = true; - _this.leftPointerDoesHoverChanged = true; - } else if (plugin.parameters.handLaser.hand === RIGHT_HAND && !_this.rightPointerDoesHover) { - _this.rightPointerDoesHover = true; - _this.rightPointerDoesHoverChanged = true; - } - } - if (DEBUG) { print("controllerDispatcher stopping " + runningPluginName); }