From 3266bf052a2e5d26b62a98548d1b126f052b5d78 Mon Sep 17 00:00:00 2001 From: Tim Maile Date: Tue, 23 Aug 2016 11:03:19 +0200 Subject: Toggle and Switches for upward/sideway WiimoteEmu --- Source/Core/InputCommon/ControllerEmu.cpp | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'Source/Core/InputCommon/ControllerEmu.cpp') diff --git a/Source/Core/InputCommon/ControllerEmu.cpp b/Source/Core/InputCommon/ControllerEmu.cpp index b3b13b796a..2fd85b3fac 100644 --- a/Source/Core/InputCommon/ControllerEmu.cpp +++ b/Source/Core/InputCommon/ControllerEmu.cpp @@ -5,6 +5,7 @@ #include "InputCommon/ControllerEmu.h" #include #include "Common/Common.h" +#include "VideoCommon/OnScreenDisplay.h" // This should be called before calling GetState() or State() on a control reference // to prevent a race condition. @@ -191,6 +192,51 @@ ControllerEmu::Buttons::Buttons(const std::string& _name) : ControlGroup(_name, numeric_settings.emplace_back(std::make_unique(_trans("Threshold"), 0.5)); } +ControllerEmu::ModifySettingsButton::ModifySettingsButton(std::string button_name) + : Buttons(std::move(button_name)) +{ + numeric_settings.emplace_back(std::make_unique(_trans("Threshold"), 0.5)); +} + +void ControllerEmu::ModifySettingsButton::AddInput(std::string button_name, bool toggle) +{ + controls.emplace_back(new ControlGroup::Input(std::move(button_name))); + threshold_exceeded.emplace_back(false); + associated_settings.emplace_back(false); + associated_settings_toggle.emplace_back(toggle); +} + +void ControllerEmu::ModifySettingsButton::GetState() +{ + for (size_t i = 0; i < controls.size(); ++i) + { + ControlState state = controls[i]->control_ref->State(); + + if (!associated_settings_toggle[i]) + { + // not toggled + associated_settings[i] = state > numeric_settings[0]->GetValue(); + } + else + { + // toggle (loading savestates does not en-/disable toggle) + // after we passed the threshold, we en-/disable. but after that, we don't change it + // anymore + if (!threshold_exceeded[i] && state > numeric_settings[0]->GetValue()) + { + associated_settings[i] = !associated_settings[i]; + if (associated_settings[i]) + OSD::AddMessage(controls[i]->name + ": " + _trans("on")); + else + OSD::AddMessage(controls[i]->name + ": " + _trans("off")); + threshold_exceeded[i] = true; + } + if (state < numeric_settings[0]->GetValue()) + threshold_exceeded[i] = false; + } + } +} + ControllerEmu::MixedTriggers::MixedTriggers(const std::string& _name) : ControlGroup(_name, GROUP_TYPE_MIXED_TRIGGERS) { -- cgit v1.2.3