From 8549894ff864104b7a5847bc7fde582aa3d724eb Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 18 Dec 2013 09:53:47 -0800 Subject: [PATCH] add support for palm and tip spatial data to JS interface --- .../src/ControllerScriptingInterface.cpp | 46 ++++++++++++++++++- interface/src/ControllerScriptingInterface.h | 5 +- .../AbstractControllerScriptingInterface.h | 2 + 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/interface/src/ControllerScriptingInterface.cpp b/interface/src/ControllerScriptingInterface.cpp index 0f436a6785..493892e042 100644 --- a/interface/src/ControllerScriptingInterface.cpp +++ b/interface/src/ControllerScriptingInterface.cpp @@ -134,8 +134,52 @@ int ControllerScriptingInterface::getNumberOfSpatialControls() const { return getNumberOfActivePalms() * NUMBER_OF_SPATIALCONTROLS_PER_PALM; } +const int PALM_SPATIALCONTROL = 0; +const int TIP_SPATIALCONTROL = 1; + glm::vec3 ControllerScriptingInterface::getSpatialControlPosition(int controlIndex) const { - return glm::vec3(0); // not yet implemented + int palmIndex = controlIndex / NUMBER_OF_SPATIALCONTROLS_PER_PALM; + int controlOfPalm = controlIndex % NUMBER_OF_SPATIALCONTROLS_PER_PALM; + const PalmData* palmData = getActivePalm(palmIndex); + if (palmData) { + switch (controlOfPalm) { + case PALM_SPATIALCONTROL: + return palmData->getPosition(); + case TIP_SPATIALCONTROL: + return palmData->getTipPosition(); + } + } + return glm::vec3(0); // bad index +} + +glm::vec3 ControllerScriptingInterface::getSpatialControlVelocity(int controlIndex) const { + int palmIndex = controlIndex / NUMBER_OF_SPATIALCONTROLS_PER_PALM; + int controlOfPalm = controlIndex % NUMBER_OF_SPATIALCONTROLS_PER_PALM; + const PalmData* palmData = getActivePalm(palmIndex); + if (palmData) { + switch (controlOfPalm) { + case PALM_SPATIALCONTROL: + return palmData->getVelocity(); + case TIP_SPATIALCONTROL: + return palmData->getTipVelocity(); + } + } + return glm::vec3(0); // bad index +} + +glm::vec3 ControllerScriptingInterface::getSpatialControlNormal(int controlIndex) const { + int palmIndex = controlIndex / NUMBER_OF_SPATIALCONTROLS_PER_PALM; + int controlOfPalm = controlIndex % NUMBER_OF_SPATIALCONTROLS_PER_PALM; + const PalmData* palmData = getActivePalm(palmIndex); + if (palmData) { + switch (controlOfPalm) { + case PALM_SPATIALCONTROL: + return palmData->getNormal(); + case TIP_SPATIALCONTROL: + return palmData->getNormal(); // currently the tip doesn't have a unique normal, use the palm normal + } + } + return glm::vec3(0); // bad index } diff --git a/interface/src/ControllerScriptingInterface.h b/interface/src/ControllerScriptingInterface.h index f1f763790d..f5b8143032 100644 --- a/interface/src/ControllerScriptingInterface.h +++ b/interface/src/ControllerScriptingInterface.h @@ -32,6 +32,8 @@ public slots: virtual int getNumberOfSpatialControls() const; virtual glm::vec3 getSpatialControlPosition(int controlIndex) const; + virtual glm::vec3 getSpatialControlVelocity(int controlIndex) const; + virtual glm::vec3 getSpatialControlNormal(int controlIndex) const; private: const PalmData* getPrimaryPalm() const; @@ -39,7 +41,8 @@ private: int getNumberOfActivePalms() const; const PalmData* getActivePalm(int palmIndex) const; - const int NUMBER_OF_SPATIALCONTROLS_PER_PALM = 0; + const int NUMBER_OF_SPATIALCONTROLS_PER_PALM = 2; // the hand and the tip + const int NUMBER_OF_JOYSTICKS_PER_PALM = 1; const int NUMBER_OF_TRIGGERS_PER_PALM = 1; const int NUMBER_OF_BUTTONS_PER_PALM = 6; diff --git a/libraries/script-engine/src/AbstractControllerScriptingInterface.h b/libraries/script-engine/src/AbstractControllerScriptingInterface.h index 3ad2cc3845..5c791af0a4 100644 --- a/libraries/script-engine/src/AbstractControllerScriptingInterface.h +++ b/libraries/script-engine/src/AbstractControllerScriptingInterface.h @@ -31,6 +31,8 @@ public slots: virtual int getNumberOfSpatialControls() const = 0; virtual glm::vec3 getSpatialControlPosition(int controlIndex) const = 0; + virtual glm::vec3 getSpatialControlVelocity(int controlIndex) const = 0; + virtual glm::vec3 getSpatialControlNormal(int controlIndex) const = 0; }; #endif /* defined(__hifi__AbstractControllerScriptingInterface__) */