From 0f44e36128685b0968cff16085d189f4c3a2abdc Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Aug 2017 18:04:39 +1200 Subject: [PATCH] Fix buttons sometimes staying pressed --- scripts/vr-edit/modules/toolMenu.js | 30 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/scripts/vr-edit/modules/toolMenu.js b/scripts/vr-edit/modules/toolMenu.js index ea07ea52c4..77d52ec7bb 100644 --- a/scripts/vr-edit/modules/toolMenu.js +++ b/scripts/vr-edit/modules/toolMenu.js @@ -341,7 +341,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) { highlightedItem, highlightedSource, isHighlightingButton, - pressedItem, + pressedItem = null, pressedSource, isButtonPressed, @@ -468,6 +468,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) { var intersectedItem = -1, intersectionItems, parentProperties, + localPosition, BUTTON_PRESS_DELTA = 0.004, parameterValue, enableGroupButton, @@ -524,27 +525,28 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) { highlightedSource = intersectionOverlays; } - // Press button. - if (intersectedItem !== pressedItem || intersectionOverlays !== pressedSource + // Press/unpress button. + if ((pressedItem && intersectedItem !== pressedItem.index) || intersectionOverlays !== pressedSource || controlHand.triggerClicked() !== isButtonPressed) { - if (pressedItem !== NONE) { + if (pressedItem) { // Unpress previous button. - if (intersectionItems) { - Overlays.editOverlay(intersectionOverlays[pressedItem], { - localPosition: intersectionItems[pressedItem].properties.localPosition - }); - } - pressedItem = NONE; + Overlays.editOverlay(intersectionOverlays[pressedItem.index], { + localPosition: pressedItem.localPosition + }); + pressedItem = null; } isButtonPressed = isHighlightingButton && controlHand.triggerClicked(); if (isButtonPressed && (intersectionEnabled === null || intersectionEnabled[intersectedItem])) { // Press new button. + localPosition = intersectionItems[intersectedItem].properties.localPosition; Overlays.editOverlay(intersectionOverlays[intersectedItem], { - localPosition: Vec3.sum(intersectionItems[intersectedItem].properties.localPosition, - { x: 0, y: 0, z: BUTTON_PRESS_DELTA }) + localPosition: Vec3.sum(localPosition, { x: 0, y: 0, z: BUTTON_PRESS_DELTA }) }); - pressedItem = intersectedItem; pressedSource = intersectionOverlays; + pressedItem = { + index: intersectedItem, + localPosition: localPosition + }; // Button press actions. if (intersectionOverlays === menuOverlays) { @@ -652,7 +654,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) { highlightedItem = NONE; highlightedSource = null; isHighlightingButton = false; - pressedItem = NONE; + pressedItem = null; pressedSource = null; isButtonPressed = false; isGroupButtonEnabled = false;