summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp
new file mode 100644
index 0000000000..b71b1ea2c1
--- /dev/null
+++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp
@@ -0,0 +1,77 @@
+// Copyright 2017 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include "InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.h"
+
+#include <cstddef>
+#include <memory>
+#include <string>
+#include <utility>
+
+#include "Common/Common.h"
+#include "InputCommon/ControlReference/ControlReference.h"
+#include "InputCommon/ControllerEmu/Control/Control.h"
+#include "InputCommon/ControllerEmu/Control/Input.h"
+#include "VideoCommon/OnScreenDisplay.h"
+
+namespace ControllerEmu
+{
+ModifySettingsButton::ModifySettingsButton(std::string button_name)
+ : Buttons(std::move(button_name))
+{
+ numeric_settings.emplace_back(std::make_unique<NumericSetting>(_trans("Threshold"), 0.5));
+}
+
+void ModifySettingsButton::AddInput(std::string button_name, bool toggle)
+{
+ controls.emplace_back(new Input(std::move(button_name)));
+ threshold_exceeded.emplace_back(false);
+ associated_settings.emplace_back(false);
+ associated_settings_toggle.emplace_back(toggle);
+}
+
+void 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;
+ }
+ }
+}
+
+const std::vector<bool>& ModifySettingsButton::isSettingToggled() const
+{
+ return associated_settings_toggle;
+}
+
+const std::vector<bool>& ModifySettingsButton::getSettingsModifier() const
+{
+ return associated_settings;
+}
+} // namespace ControllerEmu