diff --git a/interface/src/devices/SixenseManager.cpp b/interface/src/devices/SixenseManager.cpp index 9c757a1e45..2498eec5ac 100644 --- a/interface/src/devices/SixenseManager.cpp +++ b/interface/src/devices/SixenseManager.cpp @@ -13,7 +13,9 @@ #include "Application.h" #include "SixenseManager.h" -SixenseManager::SixenseManager() { +using namespace std; + +SixenseManager::SixenseManager() : _lastMovement(usecTimestampNow()) { #ifdef HAVE_SIXENSE sixenseInit(); #endif @@ -98,6 +100,12 @@ void SixenseManager::update(float deltaTime) { palm->setRawVelocity(rawVelocity); // meters/sec palm->setRawPosition(position); + // use the velocity to determine whether there's any movement + const float MOVEMENT_SPEED_THRESHOLD = 0.001f; + if (glm::length(rawVelocity) > MOVEMENT_SPEED_THRESHOLD) { + _lastMovement = usecTimestampNow(); + } + // initialize the "finger" based on the direction FingerData finger(palm, &hand); finger.setActive(true); @@ -118,6 +126,14 @@ void SixenseManager::update(float deltaTime) { palm->getFingers().push_back(finger); palm->getFingers().push_back(finger); } + + // if the controllers haven't been moved in a while, disable + const int MOVEMENT_DISABLE_DURATION = 5 * 1000 * 1000; + if (usecTimestampNow() - _lastMovement > MOVEMENT_DISABLE_DURATION) { + for (vector::iterator it = hand.getPalms().begin(); it != hand.getPalms().end(); it++) { + it->setActive(false); + } + } #endif } diff --git a/interface/src/devices/SixenseManager.h b/interface/src/devices/SixenseManager.h index 874f29fc34..863db7852f 100644 --- a/interface/src/devices/SixenseManager.h +++ b/interface/src/devices/SixenseManager.h @@ -22,6 +22,10 @@ public: public slots: void setFilter(bool filter); + +private: + + uint64_t _lastMovement; }; #endif /* defined(__interface__SixenseManager__) */