From b53636827b2f37b0398c03eb630c1d70fcc6a046 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Tue, 19 Mar 2019 15:54:36 -0500 Subject: [PATCH] ControllerInterface: Unbreak DirectInput POV Hats having bad values on init. --- .../ControllerInterface/DInput/DInputJoystick.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp index 400f9b078c..3bb8dd64a3 100644 --- a/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp +++ b/Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp @@ -153,8 +153,10 @@ Joystick::Joystick(/*const LPCDIDEVICEINSTANCE lpddi, */ const LPDIRECTINPUTDEVI // Zero inputs: m_state_in = {}; + // Set hats to center: - std::fill(std::begin(m_state_in.rgdwPOV), std::end(m_state_in.rgdwPOV), 0xFF); + // "The center position is normally reported as -1" -MSDN + std::fill(std::begin(m_state_in.rgdwPOV), std::end(m_state_in.rgdwPOV), -1); } Joystick::~Joystick() @@ -269,9 +271,11 @@ ControlState Joystick::Button::GetState() const ControlState Joystick::Hat::GetState() const { - // can this func be simplified ? - // hat centered code from MSDN - if (0xFFFF == LOWORD(m_hat)) + // "Some drivers report the centered position of the POV indicator as 65,535. + // Determine whether the indicator is centered as follows" -MSDN + const bool is_centered = (0xffff == LOWORD(m_hat)); + + if (is_centered) return 0; return (abs((int)(m_hat / 4500 - m_direction * 2 + 8) % 8 - 4) > 2);