Showing the changes to interface/src/ui/UserInputMapper.cpp (1 of 8 files). Show all
Unified · Split
| @@ -13,7 +13,15 @@ · 12 unmodified lines | ||
| 13 | 13 | |
| 14 | 14 | |
| 15 | 15 | // UserInputMapper Class |
| 16 | + | |
| 17 | +// Default contruct allocate the poutput size with the current hardcoded action channels | |
| 18 | +UserInputMapper::UserInputMapper() { | |
| 19 | + assignDefaulActionScales(); | |
| 20 | + createActionNames(); | |
| 21 | +} | |
| 22 | + | |
| 16 | 23 | bool UserInputMapper::registerDevice(uint16 deviceID, const DeviceProxy::Pointer& proxy){ |
| 24 | + proxy->_name += " (" + QString::number(deviceID) + ")"; | |
| 17 | 25 | _registeredDevices[deviceID] = proxy; |
| 18 | 26 | return true; |
| 19 | 27 | } |
| @@ -27,6 +35,12 @@ UserInputMapper::DeviceProxy::Pointer UserInputMapper::getDeviceProxy(const Inpu · 7 unmodified lines | ||
| 27 | 35 | } |
| 28 | 36 | } |
| 29 | 37 | |
| 38 | +void UserInputMapper::resetAllDeviceBindings() { | |
| 39 | + for (auto device : _registeredDevices) { | |
| 40 | + device.second->resetDeviceBindings(); | |
| 41 | + } | |
| 42 | +} | |
| 43 | + | |
| 30 | 44 | bool UserInputMapper::addInputChannel(Action action, const Input& input, float scale) { |
| 31 | 45 | return addInputChannel(action, input, Input(), scale); |
| 32 | 46 | } |
| @@ -37,7 +51,7 @@ bool UserInputMapper::addInputChannel(Action action, const Input& input, const I · 4 unmodified lines | ||
| 37 | 51 | qDebug() << "UserInputMapper::addInputChannel: The input comes from a device #" << input.getDevice() << "is unknown. no inputChannel mapped."; |
| 38 | 52 | return false; |
| 39 | 53 | } |
| 40 | − | |
| 54 | + | |
| 41 | 55 | auto inputChannel = InputChannel(input, modifier, action, scale); |
| 42 | 56 | |
| 43 | 57 | // Insert or replace the input to modifiers |
| @@ -61,6 +75,37 @@ int UserInputMapper::addInputChannels(const InputChannels& channels) { · 17 unmodified lines | ||
| 61 | 75 | return nbAdded; |
| 62 | 76 | } |
| 63 | 77 | |
| 78 | +bool UserInputMapper::removeInputChannel(InputChannel inputChannel) { | |
| 79 | + // Remove from Input to Modifiers map | |
| 80 | + if (inputChannel.hasModifier()) { | |
| 81 | + _inputToModifiersMap.erase(inputChannel._input.getID()); | |
| 82 | + } | |
| 83 | + | |
| 84 | + // Remove from Action to Inputs map | |
| 85 | + std::pair<ActionToInputsMap::iterator, ActionToInputsMap::iterator> ret; | |
| 86 | + ret = _actionToInputsMap.equal_range(inputChannel._action); | |
| 87 | + for (ActionToInputsMap::iterator it=ret.first; it!=ret.second; ++it) { | |
| 88 | + if (it->second == inputChannel) { | |
| 89 | + _actionToInputsMap.erase(it); | |
| 90 | + return true; | |
| 91 | + } | |
| 92 | + } | |
| 93 | + | |
| 94 | + return false; | |
| 95 | +} | |
| 96 | + | |
| 97 | +void UserInputMapper::removeAllInputChannels() { | |
| 98 | + _inputToModifiersMap.clear(); | |
| 99 | + _actionToInputsMap.clear(); | |
| 100 | +} | |
| 101 | + | |
| 102 | +void UserInputMapper::removeAllInputChannelsForDevice(uint16 device) { | |
| 103 | + QVector<InputChannel> channels = getAllInputsForDevice(device); | |
| 104 | + for (auto& channel : channels) { | |
| 105 | + removeInputChannel(channel); | |
| 106 | + } | |
| 107 | +} | |
| 108 | + | |
| 64 | 109 | int UserInputMapper::getInputChannels(InputChannels& channels) const { |
| 65 | 110 | for (auto& channel : _actionToInputsMap) { |
| 66 | 111 | channels.push_back(channel.second); |
| @@ -69,6 +114,20 @@ int UserInputMapper::getInputChannels(InputChannels& channels) const { · 2 unmodified lines | ||
| 69 | 114 | return _actionToInputsMap.size(); |
| 70 | 115 | } |
| 71 | 116 | |
| 117 | +QVector<UserInputMapper::InputChannel> UserInputMapper::getAllInputsForDevice(uint16 device) { | |
| 118 | + InputChannels allChannels; | |
| 119 | + getInputChannels(allChannels); | |
| 120 | + | |
| 121 | + QVector<InputChannel> channels; | |
| 122 | + for (InputChannel inputChannel : allChannels) { | |
| 123 | + if (inputChannel._input._device == device) { | |
| 124 | + channels.push_back(inputChannel); | |
| 125 | + } | |
| 126 | + } | |
| 127 | + | |
| 128 | + return channels; | |
| 129 | +} | |
| 130 | + | |
| 72 | 131 | void UserInputMapper::update(float deltaTime) { |
| 73 | 132 | |
| 74 | 133 | // Reset the axis state for next loop |
| @@ -130,6 +189,24 @@ void UserInputMapper::update(float deltaTime) { · 55 unmodified lines | ||
| 130 | 189 | } |
| 131 | 190 | } |
| 132 | 191 | |
| 192 | +QVector<UserInputMapper::Action> UserInputMapper::getAllActions() { | |
| 193 | + QVector<Action> actions; | |
| 194 | + for (auto i = 0; i < NUM_ACTIONS; i++) { | |
| 195 | + actions.append(Action(i)); | |
| 196 | + } | |
| 197 | + return actions; | |
| 198 | +} | |
| 199 | + | |
| 200 | +QVector<UserInputMapper::InputChannel> UserInputMapper::getInputChannelsForAction(UserInputMapper::Action action) { | |
| 201 | + QVector<InputChannel> inputChannels; | |
| 202 | + std::pair <ActionToInputsMap::iterator, ActionToInputsMap::iterator> ret; | |
| 203 | + ret = _actionToInputsMap.equal_range(action); | |
| 204 | + for (ActionToInputsMap::iterator it=ret.first; it!=ret.second; ++it) { | |
| 205 | + inputChannels.append(it->second); | |
| 206 | + } | |
| 207 | + return inputChannels; | |
| 208 | +} | |
| 209 | + | |
| 133 | 210 | void UserInputMapper::assignDefaulActionScales() { |
| 134 | 211 | _actionScales[LONGITUDINAL_BACKWARD] = 1.0f; // 1m per unit |
| 135 | 212 | _actionScales[LONGITUDINAL_FORWARD] = 1.0f; // 1m per unit |
| @@ -144,3 +221,20 @@ void UserInputMapper::assignDefaulActionScales() { · 8 unmodified lines | ||
| 144 | 221 | _actionScales[BOOM_IN] = 1.0f; // 1m per unit |
| 145 | 222 | _actionScales[BOOM_OUT] = 1.0f; // 1m per unit |
| 146 | 223 | } |
| 224 | + | |
| 225 | +// This is only necessary as long as the actions are hardcoded | |
| 226 | +// Eventually you can just add the string when you add the action | |
| 227 | +void UserInputMapper::createActionNames() { | |
| 228 | + _actionNames[LONGITUDINAL_BACKWARD] = "LONGITUDINAL_BACKWARD"; | |
| 229 | + _actionNames[LONGITUDINAL_FORWARD] = "LONGITUDINAL_FORWARD"; | |
| 230 | + _actionNames[LATERAL_LEFT] = "LATERAL_LEFT"; | |
| 231 | + _actionNames[LATERAL_RIGHT] = "LATERAL_RIGHT"; | |
| 232 | + _actionNames[VERTICAL_DOWN] = "VERTICAL_DOWN"; | |
| 233 | + _actionNames[VERTICAL_UP] = "VERTICAL_UP"; | |
| 234 | + _actionNames[YAW_LEFT] = "YAW_LEFT"; | |
| 235 | + _actionNames[YAW_RIGHT] = "YAW_RIGHT"; | |
| 236 | + _actionNames[PITCH_DOWN] = "PITCH_DOWN"; | |
| 237 | + _actionNames[PITCH_UP] = "PITCH_UP"; | |
| 238 | + _actionNames[BOOM_IN] = "BOOM_IN"; | |
| 239 | + _actionNames[BOOM_OUT] = "BOOM_OUT"; | |
| 240 | +} | |