From 13a9dc4df2eec31d3785da849c72c681054d7843 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 24 Aug 2015 15:35:55 -0700 Subject: [PATCH] cleanup controller interface, add getActionNames() and getDeviceNames() --- .../ControllerScriptingInterface.cpp | 18 +++++------ .../scripting/ControllerScriptingInterface.h | 2 ++ .../src/input-plugins/UserInputMapper.cpp | 31 ++++++++++++++++++- .../src/input-plugins/UserInputMapper.h | 7 +++-- 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/interface/src/scripting/ControllerScriptingInterface.cpp b/interface/src/scripting/ControllerScriptingInterface.cpp index 5301429fd9..b182d3b339 100644 --- a/interface/src/scripting/ControllerScriptingInterface.cpp +++ b/interface/src/scripting/ControllerScriptingInterface.cpp @@ -469,20 +469,20 @@ int ControllerScriptingInterface::findDevice(QString name) { return DependencyManager::get()->findDevice(name); } +QVector ControllerScriptingInterface::getDeviceNames() { + return DependencyManager::get()->getDeviceNames(); +} + float ControllerScriptingInterface::getActionValue(int action) { return DependencyManager::get()->getActionState(UserInputMapper::Action(action)); } int ControllerScriptingInterface::findAction(QString actionName) { - auto userInputMapper = DependencyManager::get(); - auto actions = getAllActions(); - for (auto action : actions) { - if (userInputMapper->getActionName(action) == actionName) { - return action; - } - } - // If the action isn't found, return -1 - return -1; + return DependencyManager::get()->findAction(actionName); +} + +QVector ControllerScriptingInterface::getActionNames() const { + return DependencyManager::get()->getActionNames(); } InputController::InputController(int deviceTrackerId, int subTrackerId, QObject* parent) : diff --git a/interface/src/scripting/ControllerScriptingInterface.h b/interface/src/scripting/ControllerScriptingInterface.h index e63fa42a62..6956619bf0 100644 --- a/interface/src/scripting/ControllerScriptingInterface.h +++ b/interface/src/scripting/ControllerScriptingInterface.h @@ -101,8 +101,10 @@ public slots: Q_INVOKABLE virtual void resetDevice(unsigned int device); Q_INVOKABLE virtual void resetAllDeviceBindings(); Q_INVOKABLE virtual int findDevice(QString name); + Q_INVOKABLE virtual QVector getDeviceNames(); Q_INVOKABLE virtual int findAction(QString actionName); + Q_INVOKABLE virtual QVector getActionNames() const; virtual bool isPrimaryButtonPressed() const; virtual glm::vec2 getPrimaryJoystickPosition() const; diff --git a/libraries/input-plugins/src/input-plugins/UserInputMapper.cpp b/libraries/input-plugins/src/input-plugins/UserInputMapper.cpp index 6c79ced280..b7533f39ec 100755 --- a/libraries/input-plugins/src/input-plugins/UserInputMapper.cpp +++ b/libraries/input-plugins/src/input-plugins/UserInputMapper.cpp @@ -62,6 +62,16 @@ int UserInputMapper::findDevice(QString name) { return 0; } +QVector UserInputMapper::getDeviceNames() { + QVector result; + for (auto device : _registeredDevices) { + QString deviceName = device.second->_name.split(" (")[0]; + result << deviceName; + } + return result; +} + + bool UserInputMapper::addInputChannel(Action action, const Input& input, float scale) { return addInputChannel(action, input, Input(), scale); } @@ -225,7 +235,7 @@ void UserInputMapper::update(float deltaTime) { } } -QVector UserInputMapper::getAllActions() { +QVector UserInputMapper::getAllActions() const { QVector actions; for (auto i = 0; i < NUM_ACTIONS; i++) { actions.append(Action(i)); @@ -243,6 +253,25 @@ QVector UserInputMapper::getInputChannelsForActio return inputChannels; } +int UserInputMapper::findAction(const QString& actionName) const { + auto actions = getAllActions(); + for (auto action : actions) { + if (getActionName(action) == actionName) { + return action; + } + } + // If the action isn't found, return -1 + return -1; +} + +QVector UserInputMapper::getActionNames() const { + QVector result; + for (auto i = 0; i < NUM_ACTIONS; i++) { + result << _actionNames[i]; + } + return result; +} + void UserInputMapper::assignDefaulActionScales() { _actionScales[LONGITUDINAL_BACKWARD] = 1.0f; // 1m per unit _actionScales[LONGITUDINAL_FORWARD] = 1.0f; // 1m per unit diff --git a/libraries/input-plugins/src/input-plugins/UserInputMapper.h b/libraries/input-plugins/src/input-plugins/UserInputMapper.h index 7aa775141a..184b8d4776 100755 --- a/libraries/input-plugins/src/input-plugins/UserInputMapper.h +++ b/libraries/input-plugins/src/input-plugins/UserInputMapper.h @@ -128,6 +128,7 @@ public: void resetAllDeviceBindings(); void resetDevice(uint16 deviceID); int findDevice(QString name); + QVector getDeviceNames(); // Actions are the output channels of the Mapper, that's what the InputChannel map to // For now the Actions are hardcoded, this is bad, but we will fix that in the near future @@ -167,10 +168,12 @@ public: std::vector _actionNames = std::vector(NUM_ACTIONS); void createActionNames(); - QVector getAllActions(); - QString getActionName(Action action) { return UserInputMapper::_actionNames[(int) action]; } + QVector getAllActions() const; + QString getActionName(Action action) const { return UserInputMapper::_actionNames[(int) action]; } float getActionState(Action action) const { return _actionStates[action]; } PoseValue getPoseState(Action action) const { return _poseStates[action]; } + int findAction(const QString& actionName) const; + QVector getActionNames() const; void assignDefaulActionScales(); // Add input channel to the mapper and check that all the used channels are registered.