aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/Input/Controller/NpadController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/Input/Controller/NpadController.cs')
-rw-r--r--Ryujinx.HLE/Input/Controller/NpadController.cs68
1 files changed, 68 insertions, 0 deletions
diff --git a/Ryujinx.HLE/Input/Controller/NpadController.cs b/Ryujinx.HLE/Input/Controller/NpadController.cs
new file mode 100644
index 00000000..b4304b8f
--- /dev/null
+++ b/Ryujinx.HLE/Input/Controller/NpadController.cs
@@ -0,0 +1,68 @@
+namespace Ryujinx.HLE.Input
+{
+ public class NpadController : BaseController
+ {
+ private (NpadColor Left, NpadColor Right) _npadBodyColors;
+ private (NpadColor Left, NpadColor Right) _npadButtonColors;
+
+ private bool _isHalf;
+
+ public NpadController(
+ ControllerStatus controllerStatus,
+ Switch device,
+ (NpadColor, NpadColor) npadBodyColors,
+ (NpadColor, NpadColor) npadButtonColors) : base(device, controllerStatus)
+ {
+ _npadBodyColors = npadBodyColors;
+ _npadButtonColors = npadButtonColors;
+ }
+
+ public override void Connect(ControllerId controllerId)
+ {
+ if (HidControllerType != ControllerStatus.NpadLeft && HidControllerType != ControllerStatus.NpadRight)
+ {
+ _isHalf = false;
+ }
+
+ ConnectionState = ControllerConnectionState.ControllerStateConnected;
+
+ if (controllerId == ControllerId.ControllerHandheld)
+ ConnectionState |= ControllerConnectionState.ControllerStateWired;
+
+ ControllerColorDescription singleColorDesc =
+ ControllerColorDescription.ColorDescriptionColorsNonexistent;
+
+ ControllerColorDescription splitColorDesc = 0;
+
+ NpadColor singleBodyColor = NpadColor.Black;
+ NpadColor singleButtonColor = NpadColor.Black;
+
+ Initialize(_isHalf,
+ (_npadBodyColors.Left, _npadBodyColors.Right),
+ (_npadButtonColors.Left, _npadButtonColors.Right),
+ singleColorDesc,
+ splitColorDesc,
+ singleBodyColor,
+ singleButtonColor );
+
+ base.Connect(controllerId);
+
+ var _currentLayout = ControllerLayouts.HandheldJoined;
+
+ switch (HidControllerType)
+ {
+ case ControllerStatus.NpadLeft:
+ _currentLayout = ControllerLayouts.Left;
+ break;
+ case ControllerStatus.NpadRight:
+ _currentLayout = ControllerLayouts.Right;
+ break;
+ case ControllerStatus.NpadPair:
+ _currentLayout = ControllerLayouts.Joined;
+ break;
+ }
+
+ SetLayout(_currentLayout);
+ }
+ }
+}