From 2c535fa204ab97ca7bfb4f772d978dfd64c3c205 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 26 Sep 2019 12:41:14 -0700 Subject: [PATCH] touching tips of index-fingers together means walk forward --- scripts/defaultScripts.js | 3 +- scripts/system/hand-track-walk.js | 69 +++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 scripts/system/hand-track-walk.js diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 1eac2ae0aa..a19bb9c41a 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -35,7 +35,8 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/miniTablet.js", "system/audioMuteOverlay.js", "system/inspect.js", - "system/keyboardShortcuts/keyboardShortcuts.js" + "system/keyboardShortcuts/keyboardShortcuts.js", + "system/hand-track-walk.js" ]; var DEFAULT_SCRIPTS_SEPARATE = [ "system/controllers/controllerScripts.js", diff --git a/scripts/system/hand-track-walk.js b/scripts/system/hand-track-walk.js new file mode 100644 index 0000000000..cb9b700ae5 --- /dev/null +++ b/scripts/system/hand-track-walk.js @@ -0,0 +1,69 @@ + +/* global Script, Controller, Vec3 */ +/* jshint loopfunc:true */ + +(function() { + + var mappingName = 'hand-track-walk-' + Math.random(); + var inputMapping = Controller.newMapping(mappingName); + + var leftIndexPos = null; + var rightIndexPos = null; + + var pinchOnBelowDistance = 0.016; + var pinchOffAboveDistance = 0.04; + + var walking = false; + + function updateWalking() { + if (leftIndexPos && rightIndexPos) { + var tipDistance = Vec3.distance(leftIndexPos, rightIndexPos); + if (tipDistance < pinchOnBelowDistance) { + print("qqqq walking"); + walking = true; + } else if (walking && tipDistance > pinchOffAboveDistance) { + print("qqqq stopping"); + walking = false; + } + } + } + + function leftIndexChanged(pose) { + if (pose.valid) { + leftIndexPos = pose.translation; + } else { + leftIndexPos = null; + } + updateWalking(); + } + + function rightIndexChanged(pose) { + if (pose.valid) { + rightIndexPos = pose.translation; + } else { + rightIndexPos = null; + } + updateWalking(); + } + + function cleanUp() { + inputMapping.disable(); + } + + Script.scriptEnding.connect(function () { + cleanUp(); + }); + + inputMapping.from(Controller.Standard.LeftHandIndex4).peek().to(leftIndexChanged); + inputMapping.from(Controller.Standard.RightHandIndex4).peek().to(rightIndexChanged); + + inputMapping.from(function() { + if (walking) { + return -1; + } else { + return Controller.getActionValue(Controller.Standard.TranslateZ); + } + }).to(Controller.Actions.TranslateZ); + + Controller.enableMapping(mappingName); +})();