aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/Input
diff options
context:
space:
mode:
authorThog <me@thog.eu>2019-12-21 20:52:31 +0100
committerGitHub <noreply@github.com>2019-12-21 20:52:31 +0100
commit01a4c80ed5ef255a67c379fb847230c9b21efc47 (patch)
treeb06b31be9ee11153d6e7770d86dad3a615c86cc1 /Ryujinx.HLE/Input
parente5858e2c7d0a46b771e874e37efb77f69120c141 (diff)
Rewrite the configuration system (#831)
The configuration system was quite fragile and too dependent on everything, this fix #812 . The changes: The file configuration is now entirely independent from the internal configuration state. The file configuration is versioned (current version is 1). Every configuration elements are now reactive properties that the emulator can register on to handle initialization and configuration changes. The configuration system is now in Ryujinx.Common to be accessible on every projects. Discord integration is now independent from the UI and can be reloaded. The primary controller is now configurable at runtime (NOTE: the UI currently doesn't have any options to configure real controller). The logger is entirely reloadable. You can now hotplug your controller when the emulator is running. The logger now takes name for every LogTarget to make them removable at runtime. The logger now always add the default "console" target to avoid loosing early init logs. The configuration system now generates a default file configuration if it's missing or too new. General system stability improvements to enhance the user's experience
Diffstat (limited to 'Ryujinx.HLE/Input')
-rw-r--r--Ryujinx.HLE/Input/Hid.cs28
1 files changed, 19 insertions, 9 deletions
diff --git a/Ryujinx.HLE/Input/Hid.cs b/Ryujinx.HLE/Input/Hid.cs
index 27e6a308..5cb7f09d 100644
--- a/Ryujinx.HLE/Input/Hid.cs
+++ b/Ryujinx.HLE/Input/Hid.cs
@@ -1,5 +1,7 @@
using Ryujinx.Common;
+using Ryujinx.Configuration.Hid;
using Ryujinx.HLE.HOS;
+using System;
namespace Ryujinx.HLE.Input
{
@@ -47,18 +49,31 @@ namespace Ryujinx.HLE.Input
_keyboardOffset = HidPosition + HidKeyboardOffset;
}
- public void InitializePrimaryController(ControllerStatus controllerType)
+ private static ControllerStatus ConvertControllerTypeToState(ControllerType controllerType)
{
- ControllerId controllerId = controllerType == ControllerStatus.Handheld ?
+ switch (controllerType)
+ {
+ case ControllerType.Handheld: return ControllerStatus.Handheld;
+ case ControllerType.NpadLeft: return ControllerStatus.NpadLeft;
+ case ControllerType.NpadRight: return ControllerStatus.NpadRight;
+ case ControllerType.NpadPair: return ControllerStatus.NpadPair;
+ case ControllerType.ProController: return ControllerStatus.ProController;
+ default: throw new NotImplementedException();
+ }
+ }
+
+ public void InitializePrimaryController(ControllerType controllerType)
+ {
+ ControllerId controllerId = controllerType == ControllerType.Handheld ?
ControllerId.ControllerHandheld : ControllerId.ControllerPlayer1;
- if (controllerType == ControllerStatus.ProController)
+ if (controllerType == ControllerType.ProController)
{
PrimaryController = new ProController(_device, NpadColor.Black, NpadColor.Black);
}
else
{
- PrimaryController = new NpadController(controllerType,
+ PrimaryController = new NpadController(ConvertControllerTypeToState(controllerType),
_device,
(NpadColor.BodyNeonRed, NpadColor.BodyNeonRed),
(NpadColor.ButtonsNeonBlue, NpadColor.ButtonsNeonBlue));
@@ -67,11 +82,6 @@ namespace Ryujinx.HLE.Input
PrimaryController.Connect(controllerId);
}
- public void InitializeKeyboard()
- {
- _device.Memory.FillWithZeros(HidPosition + HidKeyboardOffset, HidKeyboardSize);
- }
-
public ControllerButtons UpdateStickButtons(
JoystickPosition leftStick,
JoystickPosition rightStick)