From 9804543327b2525da488d1b94622e421b735755f Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Tue, 22 Mar 2022 08:01:33 -0700 Subject: [PATCH] Fix input not working properly --- Runtime/Input/CControllerAxis.hpp | 12 ++++++------ Runtime/Input/CDolphinController.cpp | 19 +++---------------- aurora/lib/input.cpp | 26 ++++++++++++++++++++++---- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/Runtime/Input/CControllerAxis.hpp b/Runtime/Input/CControllerAxis.hpp index c74e5d246..dd59df9ff 100644 --- a/Runtime/Input/CControllerAxis.hpp +++ b/Runtime/Input/CControllerAxis.hpp @@ -10,13 +10,13 @@ enum class EJoyAxis { }; class CControllerAxis { - float x0_absolute = 0.f; - float x4_relative = 0.f; + float x0_relative = 0.f; + float x4_absolute = 0.f; public: - void SetRelativeValue(float val) { x0_absolute = val; } - float GetRelativeValue() const { return x0_absolute; } - void SetAbsoluteValue(float val) { x4_relative = val; } - float GetAbsoluteValue() const { return x4_relative; } + void SetRelativeValue(float val) { x0_relative = val; } + float GetRelativeValue() const { return x0_relative; } + void SetAbsoluteValue(float val) { x4_absolute = val; } + float GetAbsoluteValue() const { return x4_absolute; } }; } // namespace metaforce \ No newline at end of file diff --git a/Runtime/Input/CDolphinController.cpp b/Runtime/Input/CDolphinController.cpp index c7397d5c4..663672c10 100644 --- a/Runtime/Input/CDolphinController.cpp +++ b/Runtime/Input/CDolphinController.cpp @@ -103,21 +103,8 @@ void CDolphinController::ProcessAxis(u32 controller, EJoyAxis axis) { axisValue = x4_status[controller].x5_substickY; } axisValue *= 1.f / maxAxisValue; - float absolute = kAbsoluteMinimum; - if (axisValue < kAbsoluteMinimum) { - absolute = kAbsoluteMinimum; - } else if (axisValue > kAbsoluteMaximum) { - absolute = kAbsoluteMaximum; - } - - axisValue = absolute - data.GetAbsoluteValue(); - float relativeValue = kRelativeMinimum; - if (axisValue < kRelativeMinimum) { - relativeValue = kRelativeMinimum; - } else if (axisValue > kRelativeMaximum) { - relativeValue = kRelativeMaximum; - } - + float absolute = zeus::clamp(kAbsoluteMinimum, axisValue, kAbsoluteMaximum); + float relativeValue = zeus::clamp(kRelativeMinimum, absolute - data.GetAbsoluteValue(), kRelativeMaximum); data.SetAbsoluteValue(absolute); data.SetRelativeValue(relativeValue); } @@ -141,7 +128,7 @@ void CDolphinController::ProcessDigitalButton(u32 controller, CControllerButton& bool btnPressed = (x4_status[controller].x0_buttons & mapping) != 0; button.SetPressEvent(PADButtonDown(button.GetIsPressed(), btnPressed)); button.SetReleaseEvent(PADButtonUp(button.GetIsPressed(), btnPressed)); - button.SetPressEvent(btnPressed); + button.SetIsPressed(btnPressed); } void CDolphinController::ProcessAnalogButton(float value, CControllerAxis& axis) { float absolute = value * (1 / 150.f); diff --git a/aurora/lib/input.cpp b/aurora/lib/input.cpp index 8608787d4..3b2328e24 100644 --- a/aurora/lib/input.cpp +++ b/aurora/lib/input.cpp @@ -380,16 +380,34 @@ u32 PADRead(PAD::Status* status) { Sint16 x = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_LEFTX); Sint16 y = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_LEFTY); - x /= 256; - y = (-(y + 1u)) / 256u; + if (std::abs(x) > 8000) { + x /= 256; + } else { + x = 0; + } + + if (std::abs(y) > 8000) { + y = (-(y + 1u)) / 256u; + } else { + y = 0; + } status[i].x2_stickX = static_cast(x); status[i].x3_stickY = static_cast(y); x = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_RIGHTX); y = SDL_GameControllerGetAxis(controller.m_controller, SDL_CONTROLLER_AXIS_RIGHTY); - x /= 256; - y = (-(y + 1u)) / 256u; + if (std::abs(x) > 8000) { + x /= 256; + } else { + x = 0; + } + + if (std::abs(y) > 8000) { + y = (-(y + 1u)) / 256u; + } else { + y = 0; + } status[i].x4_substickX = static_cast(x); status[i].x5_substickY = static_cast(y);