Make controller button code thread-safe (#405)

* Refactor spinlock to meet Lockable requirements
* Input: Refactor button code and make it thread-safe
This commit is contained in:
Exzap 2022-10-23 15:47:42 +02:00 committed by GitHub
parent c40466f3a8
commit 028b3f7992
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 311 additions and 220 deletions

View file

@ -245,7 +245,6 @@ ControllerState DirectInputController::raw_state()
ControllerState result{};
if (!is_connected())
return result;
HRESULT hr = m_device->Poll();
if (FAILED(hr))
{
@ -277,9 +276,7 @@ ControllerState DirectInputController::raw_state()
for (size_t i = 0; i < std::size(state.rgbButtons); ++i)
{
if (HAS_BIT(state.rgbButtons[i], 7))
{
result.buttons[i]=true;
}
result.buttons.SetButtonState(i, true);
}
// axis
@ -316,19 +313,19 @@ ControllerState DirectInputController::raw_state()
{
switch (pov)
{
case 0: result.buttons[kButtonUp]=true;
case 0: result.buttons.SetButtonState(kButtonUp, true);
break;
case 4500: result.buttons[kButtonUp]=true; // up + right
case 9000: result.buttons[kButtonRight]=true;
case 4500: result.buttons.SetButtonState(kButtonUp, true); // up + right
case 9000: result.buttons.SetButtonState(kButtonRight, true);
break;
case 13500: result.buttons[kButtonRight] = true; // right + down
case 18000: result.buttons[kButtonDown] = true;
case 13500: result.buttons.SetButtonState(kButtonRight, true); // right + down
case 18000: result.buttons.SetButtonState(kButtonDown, true);
break;
case 22500: result.buttons[kButtonDown] = true; // down + left
case 27000: result.buttons[kButtonLeft] = true;
case 22500: result.buttons.SetButtonState(kButtonDown, true); // down + left
case 27000: result.buttons.SetButtonState(kButtonLeft, true);
break;
case 31500: result.buttons[kButtonLeft] = true; // left + up
result.buttons[kButtonUp] = true; // left + up
case 31500: result.buttons.SetButtonState(kButtonLeft, true); // left + up
result.buttons.SetButtonState(kButtonUp, true); // left + up
break;
}
}