summaryrefslogtreecommitdiff
path: root/src/input_common/helpers/stick_from_buttons.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/helpers/stick_from_buttons.cpp')
-rw-r--r--src/input_common/helpers/stick_from_buttons.cpp70
1 files changed, 38 insertions, 32 deletions
diff --git a/src/input_common/helpers/stick_from_buttons.cpp b/src/input_common/helpers/stick_from_buttons.cpp
index 806a0e8bb..1d5948f79 100644
--- a/src/input_common/helpers/stick_from_buttons.cpp
+++ b/src/input_common/helpers/stick_from_buttons.cpp
@@ -10,25 +10,27 @@
10 10
11namespace InputCommon { 11namespace InputCommon {
12 12
13class Stick final : public Input::InputDevice { 13class Stick final : public Common::Input::InputDevice {
14public: 14public:
15 using Button = std::unique_ptr<Input::InputDevice>; 15 using Button = std::unique_ptr<Common::Input::InputDevice>;
16 16
17 Stick(Button up_, Button down_, Button left_, Button right_, Button modifier_, 17 Stick(Button up_, Button down_, Button left_, Button right_, Button modifier_,
18 float modifier_scale_, float modifier_angle_) 18 float modifier_scale_, float modifier_angle_)
19 : up(std::move(up_)), down(std::move(down_)), left(std::move(left_)), 19 : up(std::move(up_)), down(std::move(down_)), left(std::move(left_)),
20 right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_), 20 right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_),
21 modifier_angle(modifier_angle_) { 21 modifier_angle(modifier_angle_) {
22 Input::InputCallback button_up_callback{ 22 Common::Input::InputCallback button_up_callback{
23 [this](Input::CallbackStatus callback_) { UpdateUpButtonStatus(callback_); }}; 23 [this](Common::Input::CallbackStatus callback_) { UpdateUpButtonStatus(callback_); }};
24 Input::InputCallback button_down_callback{ 24 Common::Input::InputCallback button_down_callback{
25 [this](Input::CallbackStatus callback_) { UpdateDownButtonStatus(callback_); }}; 25 [this](Common::Input::CallbackStatus callback_) { UpdateDownButtonStatus(callback_); }};
26 Input::InputCallback button_left_callback{ 26 Common::Input::InputCallback button_left_callback{
27 [this](Input::CallbackStatus callback_) { UpdateLeftButtonStatus(callback_); }}; 27 [this](Common::Input::CallbackStatus callback_) { UpdateLeftButtonStatus(callback_); }};
28 Input::InputCallback button_right_callback{ 28 Common::Input::InputCallback button_right_callback{
29 [this](Input::CallbackStatus callback_) { UpdateRightButtonStatus(callback_); }}; 29 [this](Common::Input::CallbackStatus callback_) {
30 Input::InputCallback button_modifier_callback{ 30 UpdateRightButtonStatus(callback_);
31 [this](Input::CallbackStatus callback_) { UpdateModButtonStatus(callback_); }}; 31 }};
32 Common::Input::InputCallback button_modifier_callback{
33 [this](Common::Input::CallbackStatus callback_) { UpdateModButtonStatus(callback_); }};
32 up->SetCallback(button_up_callback); 34 up->SetCallback(button_up_callback);
33 down->SetCallback(button_down_callback); 35 down->SetCallback(button_down_callback);
34 left->SetCallback(button_left_callback); 36 left->SetCallback(button_left_callback);
@@ -129,27 +131,27 @@ public:
129 } 131 }
130 } 132 }
131 133
132 void UpdateUpButtonStatus(Input::CallbackStatus button_callback) { 134 void UpdateUpButtonStatus(Common::Input::CallbackStatus button_callback) {
133 up_status = button_callback.button_status.value; 135 up_status = button_callback.button_status.value;
134 UpdateStatus(); 136 UpdateStatus();
135 } 137 }
136 138
137 void UpdateDownButtonStatus(Input::CallbackStatus button_callback) { 139 void UpdateDownButtonStatus(Common::Input::CallbackStatus button_callback) {
138 down_status = button_callback.button_status.value; 140 down_status = button_callback.button_status.value;
139 UpdateStatus(); 141 UpdateStatus();
140 } 142 }
141 143
142 void UpdateLeftButtonStatus(Input::CallbackStatus button_callback) { 144 void UpdateLeftButtonStatus(Common::Input::CallbackStatus button_callback) {
143 left_status = button_callback.button_status.value; 145 left_status = button_callback.button_status.value;
144 UpdateStatus(); 146 UpdateStatus();
145 } 147 }
146 148
147 void UpdateRightButtonStatus(Input::CallbackStatus button_callback) { 149 void UpdateRightButtonStatus(Common::Input::CallbackStatus button_callback) {
148 right_status = button_callback.button_status.value; 150 right_status = button_callback.button_status.value;
149 UpdateStatus(); 151 UpdateStatus();
150 } 152 }
151 153
152 void UpdateModButtonStatus(Input::CallbackStatus button_callback) { 154 void UpdateModButtonStatus(Common::Input::CallbackStatus button_callback) {
153 modifier_status = button_callback.button_status.value; 155 modifier_status = button_callback.button_status.value;
154 UpdateStatus(); 156 UpdateStatus();
155 } 157 }
@@ -193,8 +195,8 @@ public:
193 } 195 }
194 196
195 last_update = now; 197 last_update = now;
196 Input::CallbackStatus status{ 198 Common::Input::CallbackStatus status{
197 .type = Input::InputType::Stick, 199 .type = Common::Input::InputType::Stick,
198 .stick_status = GetStatus(), 200 .stick_status = GetStatus(),
199 }; 201 };
200 TriggerOnChange(status); 202 TriggerOnChange(status);
@@ -209,15 +211,15 @@ public:
209 } 211 }
210 212
211 void SoftUpdate() override { 213 void SoftUpdate() override {
212 Input::CallbackStatus status{ 214 Common::Input::CallbackStatus status{
213 .type = Input::InputType::Stick, 215 .type = Common::Input::InputType::Stick,
214 .stick_status = GetStatus(), 216 .stick_status = GetStatus(),
215 }; 217 };
216 TriggerOnChange(status); 218 TriggerOnChange(status);
217 } 219 }
218 220
219 Input::StickStatus GetStatus() const { 221 Common::Input::StickStatus GetStatus() const {
220 Input::StickStatus status{}; 222 Common::Input::StickStatus status{};
221 status.x.properties = properties; 223 status.x.properties = properties;
222 status.y.properties = properties; 224 status.y.properties = properties;
223 if (Settings::values.emulate_analog_keyboard) { 225 if (Settings::values.emulate_analog_keyboard) {
@@ -263,19 +265,23 @@ private:
263 bool left_status; 265 bool left_status;
264 bool right_status; 266 bool right_status;
265 bool modifier_status; 267 bool modifier_status;
266 const Input::AnalogProperties properties{0.0f, 1.0f, 0.5f, 0.0f, false}; 268 const Common::Input::AnalogProperties properties{0.0f, 1.0f, 0.5f, 0.0f, false};
267 std::chrono::time_point<std::chrono::steady_clock> last_update; 269 std::chrono::time_point<std::chrono::steady_clock> last_update;
268}; 270};
269 271
270std::unique_ptr<Input::InputDevice> StickFromButton::Create(const Common::ParamPackage& params) { 272std::unique_ptr<Common::Input::InputDevice> StickFromButton::Create(
273 const Common::ParamPackage& params) {
271 const std::string null_engine = Common::ParamPackage{{"engine", "null"}}.Serialize(); 274 const std::string null_engine = Common::ParamPackage{{"engine", "null"}}.Serialize();
272 auto up = Input::CreateDeviceFromString<Input::InputDevice>(params.Get("up", null_engine)); 275 auto up = Common::Input::CreateDeviceFromString<Common::Input::InputDevice>(
273 auto down = Input::CreateDeviceFromString<Input::InputDevice>(params.Get("down", null_engine)); 276 params.Get("up", null_engine));
274 auto left = Input::CreateDeviceFromString<Input::InputDevice>(params.Get("left", null_engine)); 277 auto down = Common::Input::CreateDeviceFromString<Common::Input::InputDevice>(
275 auto right = 278 params.Get("down", null_engine));
276 Input::CreateDeviceFromString<Input::InputDevice>(params.Get("right", null_engine)); 279 auto left = Common::Input::CreateDeviceFromString<Common::Input::InputDevice>(
277 auto modifier = 280 params.Get("left", null_engine));
278 Input::CreateDeviceFromString<Input::InputDevice>(params.Get("modifier", null_engine)); 281 auto right = Common::Input::CreateDeviceFromString<Common::Input::InputDevice>(
282 params.Get("right", null_engine));
283 auto modifier = Common::Input::CreateDeviceFromString<Common::Input::InputDevice>(
284 params.Get("modifier", null_engine));
279 auto modifier_scale = params.Get("modifier_scale", 0.5f); 285 auto modifier_scale = params.Get("modifier_scale", 0.5f);
280 auto modifier_angle = params.Get("modifier_angle", 5.5f); 286 auto modifier_angle = params.Get("modifier_angle", 5.5f);
281 return std::make_unique<Stick>(std::move(up), std::move(down), std::move(left), 287 return std::make_unique<Stick>(std::move(up), std::move(down), std::move(left),