"use strict"; // Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html /* global Script, makeRunningValues, enableDispatcherModule, disableDispatcherModule, makeDispatcherModuleParameters, handsAreTracked, Controller, Vec3, Tablet, HMD, MyAvatar*/ Script.include("/~/system/libraries/controllerDispatcherUtils.js");Script.include("/~/system/libraries/controllers.js"); (function() { var controllerStandard = Controller.Standard; function TrackedHandTablet() { this.mappingName = 'hand-track-tablet-' + Math.random(); this.inputMapping = Controller.newMapping(this.mappingName); this.leftIndexPos = null; this.leftThumbPos = null; this.rightIndexPos = null; this.rightThumbPos = null; this.touchOnBelowDistance = 0.016; this.touchOffAboveDistance = 0.045; this.gestureCompleted = false; this.previousGestureCompleted = false; this.parameters = makeDispatcherModuleParameters( 70, ["rightHand", "leftHand"], [], 100); this.checkForGesture = function () { if (this.leftThumbPos && this.leftIndexPos && this.rightThumbPos && this.rightIndexPos) { var leftTipDistance = Vec3.distance(this.leftThumbPos, this.leftIndexPos); var rightTipDistance = Vec3.distance(this.rightThumbPos, this.rightIndexPos); if (leftTipDistance < this.touchOnBelowDistance && rightTipDistance < this.touchOnBelowDistance) { this.gestureCompleted = true; } else if (leftTipDistance > this.touchOffAboveDistance || rightTipDistance > this.touchOffAboveDistance) { this.gestureCompleted = false; } // else don't change gestureCompleted } else { this.gestureCompleted = false; } if (this.gestureCompleted && !this.previousGestureCompleted) { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (HMD.showTablet) { HMD.closeTablet(false); } else if (!HMD.showTablet && !tablet.toolbarMode && !MyAvatar.isAway) { tablet.gotoHomeScreen(); HMD.openTablet(false); } } this.previousGestureCompleted = this.gestureCompleted; }; this.leftIndexChanged = function (pose) { if (pose.valid) { this.leftIndexPos = pose.translation; } else { this.leftIndexPos = null; } this.checkForGesture(); }; this.leftThumbChanged = function (pose) { if (pose.valid) { this.leftThumbPos = pose.translation; } else { this.leftThumbPos = null; } this.checkForGesture(); }; this.rightIndexChanged = function (pose) { if (pose.valid) { this.rightIndexPos = pose.translation; } else { this.rightIndexPos = null; } this.checkForGesture(); }; this.rightThumbChanged = function (pose) { if (pose.valid) { this.rightThumbPos = pose.translation; } else { this.rightThumbPos = null; } this.checkForGesture(); }; this.isReady = function (controllerData) { return makeRunningValues(handsAreTracked() && this.gestureCompleted, [], []); }; this.run = function (controllerData) { return this.isReady(controllerData); }; this.setup = function () { var _this = this; this.inputMapping.from(controllerStandard.LeftHandIndex4).peek().to(function (pose) { _this.leftIndexChanged(pose); }); this.inputMapping.from(controllerStandard.LeftHandThumb4).peek().to(function (pose) { _this.leftThumbChanged(pose); }); this.inputMapping.from(controllerStandard.RightHandIndex4).peek().to(function (pose) { _this.rightIndexChanged(pose); }); this.inputMapping.from(controllerStandard.RightHandThumb4).peek().to(function (pose) { _this.rightThumbChanged(pose); }); Controller.enableMapping(this.mappingName); }; this.cleanUp = function () { this.inputMapping.disable(); }; } var trackedHandWalk = new TrackedHandTablet(); trackedHandWalk.setup(); enableDispatcherModule("TrackedHandTablet", trackedHandWalk); function cleanup() { trackedHandWalk.cleanUp(); disableDispatcherModule("TrackedHandTablet"); } Script.scriptEnding.connect(cleanup);}());
"use strict";
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
/* global Script, makeRunningValues, enableDispatcherModule, disableDispatcherModule,
makeDispatcherModuleParameters, handsAreTracked, Controller, Vec3, Tablet, HMD, MyAvatar
*/
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
Script.include("/~/system/libraries/controllers.js");
(function() {
var controllerStandard = Controller.Standard;
function TrackedHandTablet() {
this.mappingName = 'hand-track-tablet-' + Math.random();
this.inputMapping = Controller.newMapping(this.mappingName);
this.leftIndexPos = null;
this.leftThumbPos = null;
this.rightIndexPos = null;
this.rightThumbPos = null;
this.touchOnBelowDistance = 0.016;
this.touchOffAboveDistance = 0.045;
this.gestureCompleted = false;
this.previousGestureCompleted = false;
this.parameters = makeDispatcherModuleParameters(
70,
["rightHand", "leftHand"],
[],
100);
this.checkForGesture = function () {
if (this.leftThumbPos && this.leftIndexPos && this.rightThumbPos && this.rightIndexPos) {
var leftTipDistance = Vec3.distance(this.leftThumbPos, this.leftIndexPos);
var rightTipDistance = Vec3.distance(this.rightThumbPos, this.rightIndexPos);
if (leftTipDistance < this.touchOnBelowDistance && rightTipDistance < this.touchOnBelowDistance) {
this.gestureCompleted = true;
} else if (leftTipDistance > this.touchOffAboveDistance || rightTipDistance > this.touchOffAboveDistance) {
this.gestureCompleted = false;
} // else don't change gestureCompleted
} else {
this.gestureCompleted = false;
}
if (this.gestureCompleted && !this.previousGestureCompleted) {
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
if (HMD.showTablet) {
HMD.closeTablet(false);
} else if (!HMD.showTablet && !tablet.toolbarMode && !MyAvatar.isAway) {
tablet.gotoHomeScreen();
HMD.openTablet(false);
}
}
this.previousGestureCompleted = this.gestureCompleted;
};
this.leftIndexChanged = function (pose) {
if (pose.valid) {
this.leftIndexPos = pose.translation;
} else {
this.leftIndexPos = null;
}
this.checkForGesture();
};
this.leftThumbChanged = function (pose) {
if (pose.valid) {
this.leftThumbPos = pose.translation;
} else {
this.leftThumbPos = null;
}
this.checkForGesture();
};
this.rightIndexChanged = function (pose) {
if (pose.valid) {
this.rightIndexPos = pose.translation;
} else {
this.rightIndexPos = null;
}
this.checkForGesture();
};
this.rightThumbChanged = function (pose) {
if (pose.valid) {
this.rightThumbPos = pose.translation;
} else {
this.rightThumbPos = null;
}
this.checkForGesture();
};
this.isReady = function (controllerData) {
return makeRunningValues(handsAreTracked() && this.gestureCompleted, [], []);
};
this.run = function (controllerData) {
return this.isReady(controllerData);
};
this.setup = function () {
var _this = this;
this.inputMapping.from(controllerStandard.LeftHandIndex4).peek().to(function (pose) {
_this.leftIndexChanged(pose);
});
this.inputMapping.from(controllerStandard.LeftHandThumb4).peek().to(function (pose) {
_this.leftThumbChanged(pose);
});
this.inputMapping.from(controllerStandard.RightHandIndex4).peek().to(function (pose) {
_this.rightIndexChanged(pose);
});
this.inputMapping.from(controllerStandard.RightHandThumb4).peek().to(function (pose) {
_this.rightThumbChanged(pose);
});
Controller.enableMapping(this.mappingName);
};
this.cleanUp = function () {
this.inputMapping.disable();
};
}
var trackedHandWalk = new TrackedHandTablet();
trackedHandWalk.setup();
enableDispatcherModule("TrackedHandTablet", trackedHandWalk);
function cleanup() {
trackedHandWalk.cleanUp();
disableDispatcherModule("TrackedHandTablet");
}
Script.scriptEnding.connect(cleanup);
}());