summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Narr the Reg2022-09-06 11:20:53 -0500
committerGravatar Narr the Reg2022-09-06 11:21:28 -0500
commit2898be69f414a2735b8693c58e039097853f5ec7 (patch)
treedc91ebee52e562781cbe1f58cdeedb4ba468438f
parentMerge pull request #8843 from Kelebek1/SILENCE_WENCH (diff)
downloadyuzu-2898be69f414a2735b8693c58e039097853f5ec7.tar.gz
yuzu-2898be69f414a2735b8693c58e039097853f5ec7.tar.xz
yuzu-2898be69f414a2735b8693c58e039097853f5ec7.zip
input_common: Add support for analog toggle
Diffstat (limited to '')
-rw-r--r--src/common/input.h5
-rw-r--r--src/core/hid/input_converter.cpp3
-rw-r--r--src/input_common/input_poller.cpp1
-rw-r--r--src/yuzu/configuration/configure_input_player.cpp6
4 files changed, 15 insertions, 0 deletions
diff --git a/src/common/input.h b/src/common/input.h
index 213aa2384..825b0d650 100644
--- a/src/common/input.h
+++ b/src/common/input.h
@@ -102,6 +102,8 @@ struct AnalogProperties {
102 float offset{}; 102 float offset{};
103 // Invert direction of the sensor data 103 // Invert direction of the sensor data
104 bool inverted{}; 104 bool inverted{};
105 // Press once to activate, press again to release
106 bool toggle{};
105}; 107};
106 108
107// Single analog sensor data 109// Single analog sensor data
@@ -115,8 +117,11 @@ struct AnalogStatus {
115struct ButtonStatus { 117struct ButtonStatus {
116 Common::UUID uuid{}; 118 Common::UUID uuid{};
117 bool value{}; 119 bool value{};
120 // Invert value of the button
118 bool inverted{}; 121 bool inverted{};
122 // Press once to activate, press again to release
119 bool toggle{}; 123 bool toggle{};
124 // Internal lock for the toggle status
120 bool locked{}; 125 bool locked{};
121}; 126};
122 127
diff --git a/src/core/hid/input_converter.cpp b/src/core/hid/input_converter.cpp
index 68d143a01..52fb69e9c 100644
--- a/src/core/hid/input_converter.cpp
+++ b/src/core/hid/input_converter.cpp
@@ -52,6 +52,9 @@ Common::Input::ButtonStatus TransformToButton(const Common::Input::CallbackStatu
52 Common::Input::ButtonStatus status{}; 52 Common::Input::ButtonStatus status{};
53 switch (callback.type) { 53 switch (callback.type) {
54 case Common::Input::InputType::Analog: 54 case Common::Input::InputType::Analog:
55 status.value = TransformToTrigger(callback).pressed.value;
56 status.toggle = callback.analog_status.properties.toggle;
57 break;
55 case Common::Input::InputType::Trigger: 58 case Common::Input::InputType::Trigger:
56 status.value = TransformToTrigger(callback).pressed.value; 59 status.value = TransformToTrigger(callback).pressed.value;
57 break; 60 break;
diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp
index 133422d5c..ffb9b945e 100644
--- a/src/input_common/input_poller.cpp
+++ b/src/input_common/input_poller.cpp
@@ -824,6 +824,7 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateAnalogDevice(
824 .threshold = std::clamp(params.Get("threshold", 0.5f), 0.0f, 1.0f), 824 .threshold = std::clamp(params.Get("threshold", 0.5f), 0.0f, 1.0f),
825 .offset = std::clamp(params.Get("offset", 0.0f), -1.0f, 1.0f), 825 .offset = std::clamp(params.Get("offset", 0.0f), -1.0f, 1.0f),
826 .inverted = params.Get("invert", "+") == "-", 826 .inverted = params.Get("invert", "+") == "-",
827 .toggle = static_cast<bool>(params.Get("toggle", false)),
827 }; 828 };
828 input_engine->PreSetController(identifier); 829 input_engine->PreSetController(identifier);
829 input_engine->PreSetAxis(identifier, axis); 830 input_engine->PreSetAxis(identifier, axis);
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp
index 109689c88..972c311f6 100644
--- a/src/yuzu/configuration/configure_input_player.cpp
+++ b/src/yuzu/configuration/configure_input_player.cpp
@@ -382,6 +382,12 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i
382 button_map[button_id]->setText(ButtonToText(param)); 382 button_map[button_id]->setText(ButtonToText(param));
383 emulated_controller->SetButtonParam(button_id, param); 383 emulated_controller->SetButtonParam(button_id, param);
384 }); 384 });
385 context_menu.addAction(tr("Toggle axis"), [&] {
386 const bool toggle_value = !param.Get("toggle", false);
387 param.Set("toggle", toggle_value);
388 button_map[button_id]->setText(ButtonToText(param));
389 emulated_controller->SetButtonParam(button_id, param);
390 });
385 context_menu.addAction(tr("Set threshold"), [&] { 391 context_menu.addAction(tr("Set threshold"), [&] {
386 const int button_threshold = 392 const int button_threshold =
387 static_cast<int>(param.Get("threshold", 0.5f) * 100.0f); 393 static_cast<int>(param.Get("threshold", 0.5f) * 100.0f);