diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 69ea9d010e..9f2b665af9 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -333,6 +333,7 @@ Menu::Menu() : false, appInstance->getFaceshift(), SLOT(setTCPEnabled(bool))); + addCheckableActionToQMenuAndActionHash(avatarOptionsMenu, MenuOption::FaceshiftDrive, 0, false); addCheckableActionToQMenuAndActionHash(avatarOptionsMenu, MenuOption::ChatCircling, 0, true); QMenu* webcamOptionsMenu = developerMenu->addMenu("Webcam Options"); @@ -361,6 +362,7 @@ Menu::Menu() : addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::SimulateLeapHand); addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::DisplayLeapHands, 0, true); + addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::LeapDrive, 0, false); addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::TestRaveGlove); QMenu* trackingOptionsMenu = developerMenu->addMenu("Tracking Options"); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index dd1789689b..9a2ded7154 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -172,6 +172,7 @@ namespace MenuOption { const QString DontFadeOnVoxelServerChanges = "Don't Fade In/Out on Voxel Server Changes"; const QString HeadMouse = "Head Mouse"; const QString FaceMode = "Cycle Face Mode"; + const QString FaceshiftDrive = "Faceshift Drive"; const QString FaceshiftTCP = "Faceshift (TCP)"; const QString FalseColorByDistance = "FALSE Color By Distance"; const QString FalseColorBySource = "FALSE Color By Source"; @@ -198,6 +199,7 @@ namespace MenuOption { const QString GoHome = "Go Home"; const QString Gravity = "Use Gravity"; const QString ParticleCloud = "Particle Cloud"; + const QString LeapDrive = "Leap Drive"; const QString LodTools = "LOD Tools"; const QString Log = "Log"; const QString Login = "Login"; diff --git a/interface/src/devices/Faceshift.cpp b/interface/src/devices/Faceshift.cpp index 9a45810cbe..0e8aefd0f8 100644 --- a/interface/src/devices/Faceshift.cpp +++ b/interface/src/devices/Faceshift.cpp @@ -10,6 +10,7 @@ #include +#include "Application.h" #include "Faceshift.h" #include "Menu.h" #include "Util.h" @@ -80,6 +81,20 @@ void Faceshift::update() { } _estimatedEyePitch = eulers.x - _longTermAverageEyePitch; _estimatedEyeYaw = eulers.y - _longTermAverageEyeYaw; + + // if Faceshift drive is enabled, set the avatar drive based on the head position + if (!Menu::getInstance()->isOptionChecked(MenuOption::FaceshiftDrive)) { + return; + } + MyAvatar* avatar = Application::getInstance()->getAvatar(); + const float DRIVE_SCALE = 1.0f; + const float DEAD_ZONE = 0.1f; + avatar->setDriveKeys(FWD, qMax(0.0f, -_headTranslation.z * DRIVE_SCALE - DEAD_ZONE)); + avatar->setDriveKeys(BACK, qMax(0.0f, _headTranslation.z * DRIVE_SCALE - DEAD_ZONE)); + avatar->setDriveKeys(LEFT, qMax(0.0f, -_headTranslation.x * DRIVE_SCALE - DEAD_ZONE)); + avatar->setDriveKeys(RIGHT, qMax(0.0f, _headTranslation.x * DRIVE_SCALE - DEAD_ZONE)); + avatar->setDriveKeys(UP, qMax(0.0f, _headTranslation.y * DRIVE_SCALE - DEAD_ZONE)); + avatar->setDriveKeys(DOWN, qMax(0.0f, -_headTranslation.y * DRIVE_SCALE - DEAD_ZONE)); } void Faceshift::reset() {