diff options
Diffstat (limited to '')
| -rw-r--r-- | src/input_common/input_engine.cpp | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/input_common/input_engine.cpp b/src/input_common/input_engine.cpp index fce914348..a4a07d4ac 100644 --- a/src/input_common/input_engine.cpp +++ b/src/input_common/input_engine.cpp | |||
| @@ -104,68 +104,76 @@ void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const B | |||
| 104 | 104 | ||
| 105 | bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const { | 105 | bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const { |
| 106 | std::lock_guard lock{mutex}; | 106 | std::lock_guard lock{mutex}; |
| 107 | if (!controller_list.contains(identifier)) { | 107 | const auto controller_iter = controller_list.find(identifier); |
| 108 | if (controller_iter == controller_list.cend()) { | ||
| 108 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), | 109 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), |
| 109 | identifier.pad, identifier.port); | 110 | identifier.pad, identifier.port); |
| 110 | return false; | 111 | return false; |
| 111 | } | 112 | } |
| 112 | ControllerData controller = controller_list.at(identifier); | 113 | const ControllerData& controller = controller_iter->second; |
| 113 | if (!controller.buttons.contains(button)) { | 114 | const auto button_iter = controller.buttons.find(button); |
| 115 | if (button_iter == controller.buttons.cend()) { | ||
| 114 | LOG_ERROR(Input, "Invalid button {}", button); | 116 | LOG_ERROR(Input, "Invalid button {}", button); |
| 115 | return false; | 117 | return false; |
| 116 | } | 118 | } |
| 117 | return controller.buttons.at(button); | 119 | return button_iter->second; |
| 118 | } | 120 | } |
| 119 | 121 | ||
| 120 | bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const { | 122 | bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const { |
| 121 | std::lock_guard lock{mutex}; | 123 | std::lock_guard lock{mutex}; |
| 122 | if (!controller_list.contains(identifier)) { | 124 | const auto controller_iter = controller_list.find(identifier); |
| 125 | if (controller_iter == controller_list.cend()) { | ||
| 123 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), | 126 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), |
| 124 | identifier.pad, identifier.port); | 127 | identifier.pad, identifier.port); |
| 125 | return false; | 128 | return false; |
| 126 | } | 129 | } |
| 127 | ControllerData controller = controller_list.at(identifier); | 130 | const ControllerData& controller = controller_iter->second; |
| 128 | if (!controller.hat_buttons.contains(button)) { | 131 | const auto hat_iter = controller.hat_buttons.find(button); |
| 132 | if (hat_iter == controller.hat_buttons.cend()) { | ||
| 129 | LOG_ERROR(Input, "Invalid hat button {}", button); | 133 | LOG_ERROR(Input, "Invalid hat button {}", button); |
| 130 | return false; | 134 | return false; |
| 131 | } | 135 | } |
| 132 | return (controller.hat_buttons.at(button) & direction) != 0; | 136 | return (hat_iter->second & direction) != 0; |
| 133 | } | 137 | } |
| 134 | 138 | ||
| 135 | f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const { | 139 | f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const { |
| 136 | std::lock_guard lock{mutex}; | 140 | std::lock_guard lock{mutex}; |
| 137 | if (!controller_list.contains(identifier)) { | 141 | const auto controller_iter = controller_list.find(identifier); |
| 142 | if (controller_iter == controller_list.cend()) { | ||
| 138 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), | 143 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), |
| 139 | identifier.pad, identifier.port); | 144 | identifier.pad, identifier.port); |
| 140 | return 0.0f; | 145 | return 0.0f; |
| 141 | } | 146 | } |
| 142 | ControllerData controller = controller_list.at(identifier); | 147 | const ControllerData& controller = controller_iter->second; |
| 143 | if (!controller.axes.contains(axis)) { | 148 | const auto axis_iter = controller.axes.find(axis); |
| 149 | if (axis_iter == controller.axes.cend()) { | ||
| 144 | LOG_ERROR(Input, "Invalid axis {}", axis); | 150 | LOG_ERROR(Input, "Invalid axis {}", axis); |
| 145 | return 0.0f; | 151 | return 0.0f; |
| 146 | } | 152 | } |
| 147 | return controller.axes.at(axis); | 153 | return axis_iter->second; |
| 148 | } | 154 | } |
| 149 | 155 | ||
| 150 | BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const { | 156 | BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const { |
| 151 | std::lock_guard lock{mutex}; | 157 | std::lock_guard lock{mutex}; |
| 152 | if (!controller_list.contains(identifier)) { | 158 | const auto controller_iter = controller_list.find(identifier); |
| 159 | if (controller_iter == controller_list.cend()) { | ||
| 153 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), | 160 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), |
| 154 | identifier.pad, identifier.port); | 161 | identifier.pad, identifier.port); |
| 155 | return BatteryLevel::Charging; | 162 | return BatteryLevel::Charging; |
| 156 | } | 163 | } |
| 157 | ControllerData controller = controller_list.at(identifier); | 164 | const ControllerData& controller = controller_iter->second; |
| 158 | return controller.battery; | 165 | return controller.battery; |
| 159 | } | 166 | } |
| 160 | 167 | ||
| 161 | BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const { | 168 | BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const { |
| 162 | std::lock_guard lock{mutex}; | 169 | std::lock_guard lock{mutex}; |
| 163 | if (!controller_list.contains(identifier)) { | 170 | const auto controller_iter = controller_list.find(identifier); |
| 171 | if (controller_iter == controller_list.cend()) { | ||
| 164 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), | 172 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(), |
| 165 | identifier.pad, identifier.port); | 173 | identifier.pad, identifier.port); |
| 166 | return {}; | 174 | return {}; |
| 167 | } | 175 | } |
| 168 | ControllerData controller = controller_list.at(identifier); | 176 | const ControllerData& controller = controller_iter->second; |
| 169 | return controller.motions.at(motion); | 177 | return controller.motions.at(motion); |
| 170 | } | 178 | } |
| 171 | 179 | ||