allow thumb+index finger pinch to mean same as trigger click

This commit is contained in:
Seth Alves 2019-09-26 12:40:03 -07:00
parent 7d956198cd
commit 3d4de67c49
3 changed files with 38 additions and 4 deletions

View file

@ -35,7 +35,6 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
var DEBUG = false;
var SHOW_GRAB_SPHERE = false;
if (typeof Test !== "undefined") {
PROFILE = true;
}
@ -97,11 +96,15 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
};
this.runningPluginNames = {};
this.leftTriggerValue = 0;
this.leftTriggerClicked = 0;
this.leftTrackerClicked = false; // is leftTriggerClicked == 1 because a hand tracker set it?
this.leftSecondaryValue = 0;
this.rightTriggerValue = 0;
this.rightTriggerClicked = 0;
this.leftSecondaryValue = 0;
this.rightTrackerClicked = false; // is rightTriggerClicked == 1 because a hand tracker set it?
this.rightSecondaryValue = 0;
this.leftTriggerPress = function (value) {
@ -162,6 +165,34 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
}
};
this.checkForHandTrackingClick = function() {
var pinchOnBelowDistance = 0.016;
var pinchOffAboveDistance = 0.04;
var leftIndexPose = Controller.getPoseValue(Controller.Standard.LeftHandIndex4);
var leftThumbPose = Controller.getPoseValue(Controller.Standard.LeftHandThumb4);
var leftThumbToIndexDistance = Vec3.distance(leftIndexPose.translation, leftThumbPose.translation);
if (leftIndexPose.valid && leftThumbPose.valid && leftThumbToIndexDistance < pinchOnBelowDistance) {
_this.leftTriggerClicked = 1;
_this.leftTrackerClicked = true;
} else if (_this.leftTrackerClicked && leftThumbToIndexDistance > pinchOffAboveDistance) {
_this.leftTriggerClicked = 0;
_this.leftTrackerClicked = false;
}
var rightIndexPose = Controller.getPoseValue(Controller.Standard.RightHandIndex4);
var rightThumbPose = Controller.getPoseValue(Controller.Standard.RightHandThumb4);
var rightThumbToIndexDistance = Vec3.distance(rightIndexPose.translation, rightThumbPose.translation);
if (rightIndexPose.valid && rightThumbPose.valid && rightThumbToIndexDistance < pinchOnBelowDistance) {
_this.rightTriggerClicked = 1;
_this.rightTrackerClicked = true;
} else if (_this.rightTrackerClicked && rightThumbToIndexDistance > pinchOffAboveDistance) {
_this.rightTriggerClicked = 0;
_this.rightTrackerClicked = false;
}
};
this.update = function () {
try {
_this.updateInternal();
@ -369,6 +400,9 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
}
}
// check for hand-tracking "click"
_this.checkForHandTrackingClick();
// bundle up all the data about the current situation
var controllerData = {
triggerValues: [_this.leftTriggerValue, _this.rightTriggerValue],

View file

@ -151,7 +151,7 @@ Script.include("/~/system/libraries/controllers.js");
this.run = function (controllerData, deltaTime) {
if (this.grabbing) {
if (controllerData.triggerClicks[this.hand] < TRIGGER_OFF_VALUE &&
if (!controllerData.triggerClicks[this.hand] &&
controllerData.secondaryValues[this.hand] < TRIGGER_OFF_VALUE) {
this.endNearGrabEntity();
return makeRunningValues(false, [], []);

View file

@ -67,7 +67,7 @@ Script.include("/~/system/libraries/controllers.js");
var nearTabletHighlightModuleReady = nearTabletHighlightModule
? nearTabletHighlightModule.isReady(controllerData) : makeRunningValues(false, [], []);
return grabOverlayModuleReady.active || farGrabModuleReady.active || grabEntityModuleReady.active
|| nearTabletHighlightModuleReady.active;
/* || nearTabletHighlightModuleReady.active */ ;
};
this.overlayLaserActive = function(controllerData) {