Clear swatch with grip click

This commit is contained in:
David Rowe 2017-08-08 20:37:41 +12:00
parent f88191b7b3
commit 0b8ea29193
2 changed files with 62 additions and 7 deletions

View file

@ -21,6 +21,7 @@ Hand = function (side) {
controllerGrip,
isGripClicked = false,
isGripClickedHandled = false,
GRIP_ON_VALUE = 0.99,
GRIP_OFF_VALUE = 0.95,
@ -87,6 +88,11 @@ Hand = function (side) {
return isGripClicked;
}
function setGripClickedHandled() {
isGripClicked = false;
isGripClickedHandled = true;
}
function getIntersection() {
return intersection;
}
@ -126,6 +132,12 @@ Hand = function (side) {
} else {
isGripClicked = gripValue > GRIP_ON_VALUE;
}
// Grip clicked may be being handled by UI.
if (isGripClicked) {
isGripClicked = !isGripClickedHandled;
} else {
isGripClickedHandled = false;
}
// Hand-overlay intersection, if any.
overlayID = null;
@ -199,6 +211,7 @@ Hand = function (side) {
triggerPressed: triggerPressed,
triggerClicked: triggerClicked,
gripClicked: gripClicked,
setGripClickedHandled: setGripClickedHandled,
intersection: getIntersection,
update: update,
clear: clear,

View file

@ -58,6 +58,8 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
visible: true
},
NO_SWATCH_COLOR = { red: 128, green: 128, blue: 128 },
UI_ELEMENTS = {
"panel": {
overlay: "cube",
@ -87,8 +89,9 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
properties: {
dimensions: { x: 0.03, y: 0.03, z: 0.01 },
localRotation: Quat.ZERO,
color: NO_SWATCH_COLOR,
alpha: 1.0,
solid: false, // False indicates "no color assigned"
solid: false, // False indicates "no swatch color assigned"
ignoreRayIntersection: false,
visible: true
}
@ -184,6 +187,10 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
command: {
method: "setColorPerSwatch",
parameter: "colorSwatch1.color"
},
onGripClicked: {
method: "clearSwatch",
parameter: "colorSwatch1"
}
},
{
@ -198,6 +205,10 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
command: {
method: "setColorPerSwatch",
parameter: "colorSwatch2.color"
},
onGripClicked: {
method: "clearSwatch",
parameter: "colorSwatch2"
}
},
{
@ -205,13 +216,15 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
type: "swatch",
properties: {
dimensions: { x: 0.02, y: 0.02, z: 0.01 },
localPosition: { x: -0.035, y: 0.045, z: -0.005 },
color: { red: 128, green: 128, blue: 128 },
solid: false
localPosition: { x: -0.035, y: 0.045, z: -0.005 }
},
command: {
method: "setColorPerSwatch",
parameter: "colorSwatch3.color"
},
onGripClicked: {
method: "clearSwatch",
parameter: "colorSwatch3"
}
},
{
@ -219,13 +232,15 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
type: "swatch",
properties: {
dimensions: { x: 0.02, y: 0.02, z: 0.01 },
localPosition: { x: -0.01, y: 0.045, z: -0.005 },
color: { red: 128, green: 128, blue: 128 },
solid: false
localPosition: { x: -0.01, y: 0.045, z: -0.005 }
},
command: {
method: "setColorPerSwatch",
parameter: "colorSwatch4.color"
},
onGripClicked: {
method: "clearSwatch",
parameter: "colorSwatch4"
}
},
{
@ -356,6 +371,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
pressedItem = null,
pressedSource,
isButtonPressed,
isGripClicked,
isGroupButtonEnabled,
isUngroupButtonEnabled,
@ -501,6 +517,19 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
}
}
function doGripClicked(command, parameter) {
switch (command) {
case "clearSwatch":
Overlays.editOverlay(optionsOverlays[optionsOverlaysIDs.indexOf(parameter)], {
color: NO_SWATCH_COLOR,
solid: false
});
break;
default:
// TODO: Log error.
}
}
function update(intersectionOverlayID, groupsCount, entitiesCount) {
var intersectedItem = -1,
intersectionItems,
@ -606,6 +635,18 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
}
}
// Grip click.
if (controlHand.gripClicked() !== isGripClicked) {
isGripClicked = !isGripClicked;
if (isGripClicked && intersectionItems && intersectedItem && intersectionItems[intersectedItem].onGripClicked) {
controlHand.setGripClickedHandled();
if (intersectionItems[intersectedItem].onGripClicked.parameter) {
parameter = intersectionItems[intersectedItem].onGripClicked.parameter;
}
doGripClicked(intersectionItems[intersectedItem].onGripClicked.method, parameter);
}
}
// Special handling for Group options.
if (optionsItems && optionsItems === OPTONS_PANELS.groupOptions) {
enableGroupButton = groupsCount > 1;
@ -696,6 +737,7 @@ ToolMenu = function (side, leftInputs, rightInputs, doCallback) {
pressedItem = null;
pressedSource = null;
isButtonPressed = false;
isGripClicked = false;
isGroupButtonEnabled = false;
isUngroupButtonEnabled = false;