Fix direct keyboard not working when using a Controller. (#6716)

* Fix direct keyboard not working when connected with a controller

- Pass KeyboardDriver to NpadController.GetHLEKeyboardInput().
- Always fetch all keyboards if Direct Keyboard is turned on.
- Remove unnecessary return null.

* Get Keyboard Inputs outside of the controller loop.

- Moved GetHLEKeyboardInput outside of the controller loop.
- Made GetHLEKeyboardInput public static from public

* Removed extra newline

* Update src/Ryujinx.Input/HLE/NpadManager.cs

Co-authored-by: gdkchan <gab.dark.100@gmail.com>

* Update src/Ryujinx.Input/HLE/NpadController.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

---------

Co-authored-by: gdkchan <gab.dark.100@gmail.com>
Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>
This commit is contained in:
MaxLastBreath 2024-04-28 20:02:29 +03:00 committed by GitHub
parent 3d4dea624d
commit 5976a5161b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 30 deletions

View file

@ -487,38 +487,35 @@ namespace Ryujinx.Input.HLE
return value; return value;
} }
public KeyboardInput? GetHLEKeyboardInput() public static KeyboardInput GetHLEKeyboardInput(IGamepadDriver KeyboardDriver)
{ {
if (_gamepad is IKeyboard keyboard) var keyboard = KeyboardDriver.GetGamepad("0") as IKeyboard;
KeyboardStateSnapshot keyboardState = keyboard.GetKeyboardStateSnapshot();
KeyboardInput hidKeyboard = new()
{ {
KeyboardStateSnapshot keyboardState = keyboard.GetKeyboardStateSnapshot(); Modifier = 0,
Keys = new ulong[0x4],
};
KeyboardInput hidKeyboard = new() foreach (HLEKeyboardMappingEntry entry in _keyMapping)
{ {
Modifier = 0, ulong value = keyboardState.IsPressed(entry.TargetKey) ? 1UL : 0UL;
Keys = new ulong[0x4],
};
foreach (HLEKeyboardMappingEntry entry in _keyMapping) hidKeyboard.Keys[entry.Target / 0x40] |= (value << (entry.Target % 0x40));
{
ulong value = keyboardState.IsPressed(entry.TargetKey) ? 1UL : 0UL;
hidKeyboard.Keys[entry.Target / 0x40] |= (value << (entry.Target % 0x40));
}
foreach (HLEKeyboardMappingEntry entry in _keyModifierMapping)
{
int value = keyboardState.IsPressed(entry.TargetKey) ? 1 : 0;
hidKeyboard.Modifier |= value << entry.Target;
}
return hidKeyboard;
} }
return null; foreach (HLEKeyboardMappingEntry entry in _keyModifierMapping)
} {
int value = keyboardState.IsPressed(entry.TargetKey) ? 1 : 0;
hidKeyboard.Modifier |= value << entry.Target;
}
return hidKeyboard;
}
protected virtual void Dispose(bool disposing) protected virtual void Dispose(bool disposing)
{ {

View file

@ -231,11 +231,6 @@ namespace Ryujinx.Input.HLE
var altMotionState = isJoyconPair ? controller.GetHLEMotionState(true) : default; var altMotionState = isJoyconPair ? controller.GetHLEMotionState(true) : default;
motionState = (controller.GetHLEMotionState(), altMotionState); motionState = (controller.GetHLEMotionState(), altMotionState);
if (_enableKeyboard)
{
hleKeyboardInput = controller.GetHLEKeyboardInput();
}
} }
else else
{ {
@ -257,6 +252,11 @@ namespace Ryujinx.Input.HLE
} }
} }
if (!_blockInputUpdates && _enableKeyboard)
{
hleKeyboardInput = NpadController.GetHLEKeyboardInput(_keyboardDriver);
}
_device.Hid.Npads.Update(hleInputStates); _device.Hid.Npads.Update(hleInputStates);
_device.Hid.Npads.UpdateSixAxis(hleMotionStates); _device.Hid.Npads.UpdateSixAxis(hleMotionStates);