Fix buttons sometimes staying pressed

This commit is contained in:
David Rowe 2017-08-05 18:04:39 +12:00
parent 4e87c13020
commit 0f44e36128

View file

@ -341,7 +341,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
highlightedItem, highlightedItem,
highlightedSource, highlightedSource,
isHighlightingButton, isHighlightingButton,
pressedItem, pressedItem = null,
pressedSource, pressedSource,
isButtonPressed, isButtonPressed,
@ -468,6 +468,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
var intersectedItem = -1, var intersectedItem = -1,
intersectionItems, intersectionItems,
parentProperties, parentProperties,
localPosition,
BUTTON_PRESS_DELTA = 0.004, BUTTON_PRESS_DELTA = 0.004,
parameterValue, parameterValue,
enableGroupButton, enableGroupButton,
@ -524,27 +525,28 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
highlightedSource = intersectionOverlays; highlightedSource = intersectionOverlays;
} }
// Press button. // Press/unpress button.
if (intersectedItem !== pressedItem || intersectionOverlays !== pressedSource if ((pressedItem && intersectedItem !== pressedItem.index) || intersectionOverlays !== pressedSource
|| controlHand.triggerClicked() !== isButtonPressed) { || controlHand.triggerClicked() !== isButtonPressed) {
if (pressedItem !== NONE) { if (pressedItem) {
// Unpress previous button. // Unpress previous button.
if (intersectionItems) { Overlays.editOverlay(intersectionOverlays[pressedItem.index], {
Overlays.editOverlay(intersectionOverlays[pressedItem], { localPosition: pressedItem.localPosition
localPosition: intersectionItems[pressedItem].properties.localPosition });
}); pressedItem = null;
}
pressedItem = NONE;
} }
isButtonPressed = isHighlightingButton && controlHand.triggerClicked(); isButtonPressed = isHighlightingButton && controlHand.triggerClicked();
if (isButtonPressed && (intersectionEnabled === null || intersectionEnabled[intersectedItem])) { if (isButtonPressed && (intersectionEnabled === null || intersectionEnabled[intersectedItem])) {
// Press new button. // Press new button.
localPosition = intersectionItems[intersectedItem].properties.localPosition;
Overlays.editOverlay(intersectionOverlays[intersectedItem], { Overlays.editOverlay(intersectionOverlays[intersectedItem], {
localPosition: Vec3.sum(intersectionItems[intersectedItem].properties.localPosition, localPosition: Vec3.sum(localPosition, { x: 0, y: 0, z: BUTTON_PRESS_DELTA })
{ x: 0, y: 0, z: BUTTON_PRESS_DELTA })
}); });
pressedItem = intersectedItem;
pressedSource = intersectionOverlays; pressedSource = intersectionOverlays;
pressedItem = {
index: intersectedItem,
localPosition: localPosition
};
// Button press actions. // Button press actions.
if (intersectionOverlays === menuOverlays) { if (intersectionOverlays === menuOverlays) {
@ -652,7 +654,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
highlightedItem = NONE; highlightedItem = NONE;
highlightedSource = null; highlightedSource = null;
isHighlightingButton = false; isHighlightingButton = false;
pressedItem = NONE; pressedItem = null;
pressedSource = null; pressedSource = null;
isButtonPressed = false; isButtonPressed = false;
isGroupButtonEnabled = false; isGroupButtonEnabled = false;