diff --git a/libraries/controllers/src/controllers/UserInputMapper.cpp b/libraries/controllers/src/controllers/UserInputMapper.cpp index 1eb1a9fa1a..604a4f9c73 100755 --- a/libraries/controllers/src/controllers/UserInputMapper.cpp +++ b/libraries/controllers/src/controllers/UserInputMapper.cpp @@ -312,7 +312,10 @@ void UserInputMapper::update(float deltaTime) { Input::NamedVector UserInputMapper::getAvailableInputs(uint16 deviceID) const { Locker locker(_lock); auto iterator = _registeredDevices.find(deviceID); - return iterator->second->getAvailableInputs(); + if (iterator != _registeredDevices.end()) { + return iterator->second->getAvailableInputs(); + } + return Input::NamedVector(); } QVector UserInputMapper::getAllActions() const { @@ -366,7 +369,7 @@ bool UserInputMapper::triggerHapticPulse(float strength, float duration, control Locker locker(_lock); bool toReturn = false; for (const auto& device : _registeredDevices) { - toReturn = toReturn || device.second->triggerHapticPulse(strength, duration, hand); + toReturn = device.second->triggerHapticPulse(strength, duration, hand) || toReturn; } return toReturn; } @@ -1237,16 +1240,42 @@ void UserInputMapper::disableMapping(const Mapping::Pointer& mapping) { } void UserInputMapper::setActionState(Action action, float value, bool valid) { + Locker locker(_lock); _actionStates[toInt(action)] = value; _actionStatesValid[toInt(action)] = valid; } void UserInputMapper::deltaActionState(Action action, float delta, bool valid) { + Locker locker(_lock); _actionStates[toInt(action)] += delta; bool wasValid = _actionStatesValid[toInt(action)]; _actionStatesValid[toInt(action)] = wasValid & valid; } +float UserInputMapper::getActionState(Action action) const { + Locker locker(_lock); + + int index = toInt(action); + if (index >= 0 && index < _actionStates.size()) { + return _actionStates[index]; + } + + qCDebug(controllers) << "UserInputMapper::getActionState invalid action:" << index; + return 0.0f; +} + +bool UserInputMapper::getActionStateValid(Action action) const { + Locker locker(_lock); + + int index = toInt(action); + if (index >= 0 && index < _actionStatesValid.size()) { + return _actionStatesValid[index]; + } + + qCDebug(controllers) << "UserInputMapper::getActionStateValid invalid action:" << index; + return false; +} + } diff --git a/libraries/controllers/src/controllers/UserInputMapper.h b/libraries/controllers/src/controllers/UserInputMapper.h index cd44f3226c..79fcf6e64c 100644 --- a/libraries/controllers/src/controllers/UserInputMapper.h +++ b/libraries/controllers/src/controllers/UserInputMapper.h @@ -81,8 +81,8 @@ namespace controller { QVector getAllActions() const; QString getActionName(Action action) const; QString getStandardPoseName(uint16_t pose); - float getActionState(Action action) const { return _actionStates[toInt(action)]; } - bool getActionStateValid(Action action) const { return _actionStatesValid[toInt(action)]; } + float getActionState(Action action) const; + bool getActionStateValid(Action action) const; Pose getPoseState(Action action) const; int findAction(const QString& actionName) const; QVector getActionNames() const;