From e8be92cab837ec32764134663261440af0d73d7a Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 23 Oct 2015 09:18:44 -0700 Subject: [PATCH] Adding input action event --- interface/src/Application.cpp | 1 - .../scripting/ControllerScriptingInterface.h | 2 -- .../src/controllers/ScriptingInterface.cpp | 3 +++ .../src/controllers/ScriptingInterface.h | 3 +++ .../src/controllers/UserInputMapper.cpp | 18 ++++++++++++++++++ .../src/controllers/UserInputMapper.h | 2 ++ 6 files changed, 26 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0a634425bc..92680ed3e0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -627,7 +627,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : // Setup the userInputMapper with the actions auto userInputMapper = DependencyManager::get(); - connect(userInputMapper.data(), &UserInputMapper::actionEvent, _controllerScriptingInterface, &ControllerScriptingInterface::actionEvent); connect(userInputMapper.data(), &UserInputMapper::actionEvent, [this](int action, float state) { if (state && action == toInt(controller::Action::TOGGLE_MUTE)) { DependencyManager::get()->toggleMute(); diff --git a/interface/src/scripting/ControllerScriptingInterface.h b/interface/src/scripting/ControllerScriptingInterface.h index 8be530c6ce..3133f93804 100644 --- a/interface/src/scripting/ControllerScriptingInterface.h +++ b/interface/src/scripting/ControllerScriptingInterface.h @@ -120,8 +120,6 @@ signals: void wheelEvent(const WheelEvent& event); - void actionEvent(int action, float state); - private: QString sanatizeName(const QString& name); /// makes a name clean for inclusing in JavaScript diff --git a/libraries/controllers/src/controllers/ScriptingInterface.cpp b/libraries/controllers/src/controllers/ScriptingInterface.cpp index 40c65549a8..bb09705684 100644 --- a/libraries/controllers/src/controllers/ScriptingInterface.cpp +++ b/libraries/controllers/src/controllers/ScriptingInterface.cpp @@ -44,6 +44,9 @@ static QVariantMap createDeviceMap(const controller::DeviceProxy::Pointer device controller::ScriptingInterface::ScriptingInterface() { auto userInputMapper = DependencyManager::get(); + connect(userInputMapper.data(), &UserInputMapper::actionEvent, this, &controller::ScriptingInterface::actionEvent); + connect(userInputMapper.data(), &UserInputMapper::inputEvent, this, &controller::ScriptingInterface::inputEvent); + // FIXME make this thread safe connect(userInputMapper.data(), &UserInputMapper::hardwareChanged, [=] { updateMaps(); diff --git a/libraries/controllers/src/controllers/ScriptingInterface.h b/libraries/controllers/src/controllers/ScriptingInterface.h index 85b1c3c6d9..db724044fa 100644 --- a/libraries/controllers/src/controllers/ScriptingInterface.h +++ b/libraries/controllers/src/controllers/ScriptingInterface.h @@ -129,6 +129,9 @@ namespace controller { virtual void captureActionEvents() { _actionsCaptured = true; } virtual void releaseActionEvents() { _actionsCaptured = false; } + signals: + void actionEvent(int action, float state); + void inputEvent(int action, float state); private: // Update the exposed variant maps reporting active hardware diff --git a/libraries/controllers/src/controllers/UserInputMapper.cpp b/libraries/controllers/src/controllers/UserInputMapper.cpp index 8cd6618bfc..07f1f975a2 100755 --- a/libraries/controllers/src/controllers/UserInputMapper.cpp +++ b/libraries/controllers/src/controllers/UserInputMapper.cpp @@ -516,6 +516,24 @@ void UserInputMapper::update(float deltaTime) { } // TODO: emit signal for pose changes } + + auto standardInputs = getStandardInputs(); + if (_lastStandardStates.size() != standardInputs.size()) { + _lastStandardStates.resize(standardInputs.size()); + for (auto& lastValue : _lastStandardStates) { + lastValue = 0; + } + } + + for (int i = 0; i < standardInputs.size(); ++i) { + const auto& input = standardInputs[i].first; + float value = getValue(input); + float& oldValue = _lastStandardStates[i]; + if (value != oldValue) { + oldValue = value; + emit inputEvent(input.id, value); + } + } } Input::NamedVector UserInputMapper::getAvailableInputs(uint16 deviceID) const { diff --git a/libraries/controllers/src/controllers/UserInputMapper.h b/libraries/controllers/src/controllers/UserInputMapper.h index 4bfedfcf1a..0989fdb311 100644 --- a/libraries/controllers/src/controllers/UserInputMapper.h +++ b/libraries/controllers/src/controllers/UserInputMapper.h @@ -117,6 +117,7 @@ namespace controller { signals: void actionEvent(int action, float state); + void inputEvent(int input, float state); void hardwareChanged(); protected: @@ -130,6 +131,7 @@ namespace controller { std::vector _actionScales = std::vector(toInt(Action::NUM_ACTIONS), 1.0f); std::vector _lastActionStates = std::vector(toInt(Action::NUM_ACTIONS), 0.0f); std::vector _poseStates = std::vector(toInt(Action::NUM_ACTIONS)); + std::vector _lastStandardStates = std::vector(); glm::mat4 _sensorToWorldMat;