mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-12-23 07:37:00 +00:00
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:
parent
c40466f3a8
commit
028b3f7992
28 changed files with 311 additions and 220 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue