Skip to content
Permalink
Browse files

Merge pull request #7913 from jordan-woyak/dinput-hat-fix

ControllerInterface: Unbreak DirectInput POV Hats having bad values on init.
  • Loading branch information...
JMC47 committed Mar 19, 2019
2 parents 1fead4f + b536368 commit 96fec2eb708648d6b75da0d2a523c2c7c9d5088c
Showing with 8 additions and 4 deletions.
  1. +8 −4 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);

0 comments on commit 96fec2e

Please sign in to comment.
You can’t perform that action at this time.