diff options
author | german <german@thesoftwareartisans.com> | 2020-11-26 20:56:06 -0600 |
---|---|---|
committer | german <german@thesoftwareartisans.com> | 2020-12-07 19:34:52 -0600 |
commit | b57ba7bfb6792e054033e828120b79b78587d58d (patch) | |
tree | 305f825655a9240b4283123d8904edb5b1de4f7c /src/input_common/analog_from_button.cpp | |
parent | ab315011fb964de132be5cbe5e64cf40fe3d7b17 (diff) |
Disable analog joystick from buttons by default
Diffstat (limited to 'src/input_common/analog_from_button.cpp')
-rwxr-xr-x | src/input_common/analog_from_button.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/input_common/analog_from_button.cpp b/src/input_common/analog_from_button.cpp index d748c1c04b..40b516f85c 100755 --- a/src/input_common/analog_from_button.cpp +++ b/src/input_common/analog_from_button.cpp @@ -6,6 +6,7 @@ #include <cmath> #include <thread> #include "common/math_util.h" +#include "core/settings.h" #include "input_common/analog_from_button.h" namespace InputCommon { @@ -112,7 +113,26 @@ public: } std::tuple<float, float> GetStatus() const override { - return std::make_tuple(std::cos(angle) * amplitude, std::sin(angle) * amplitude); + if (Settings::values.emulate_analog_keyboard) { + return std::make_tuple(std::cos(angle) * amplitude, std::sin(angle) * amplitude); + } + constexpr float SQRT_HALF = 0.707106781f; + int x = 0, y = 0; + if (right->GetStatus()) { + ++x; + } + if (left->GetStatus()) { + --x; + } + if (up->GetStatus()) { + ++y; + } + if (down->GetStatus()) { + --y; + } + const float coef = modifier->GetStatus() ? modifier_scale : 1.0f; + return std::make_tuple(static_cast<float>(x) * coef * (y == 0 ? 1.0f : SQRT_HALF), + static_cast<float>(y) * coef * (x == 0 ? 1.0f : SQRT_HALF)); } bool GetAnalogDirectionStatus(Input::AnalogDirection direction) const override { |