diff --git a/src/Input/Gamepad.cs b/src/Input/Gamepad.cs index 59dc036..8c82651 100644 --- a/src/Input/Gamepad.cs +++ b/src/Input/Gamepad.cs @@ -33,6 +33,8 @@ namespace MoonWorks.Input public Trigger TriggerLeft { get; } = new Trigger(); public Trigger TriggerRight { get; } = new Trigger(); + public bool IsDummy => Handle == IntPtr.Zero; + private Dictionary EnumToButton; private Dictionary EnumToAxis; private Dictionary EnumToTrigger; @@ -77,23 +79,26 @@ namespace MoonWorks.Input internal void Update() { - foreach (var (sdlEnum, button) in EnumToButton) + if (!IsDummy) { - button.Update(CheckPressed(sdlEnum)); - } + foreach (var (sdlEnum, button) in EnumToButton) + { + button.Update(CheckPressed(sdlEnum)); + } - foreach (var (sdlEnum, axis) in EnumToAxis) - { - var sdlAxisValue = SDL.SDL_GameControllerGetAxis(Handle, sdlEnum); - var axisValue = Normalize(sdlAxisValue, short.MinValue, short.MaxValue, -1, 1); - axis.Update(axisValue); - } + foreach (var (sdlEnum, axis) in EnumToAxis) + { + var sdlAxisValue = SDL.SDL_GameControllerGetAxis(Handle, sdlEnum); + var axisValue = Normalize(sdlAxisValue, short.MinValue, short.MaxValue, -1, 1); + axis.Update(axisValue); + } - foreach (var (sdlEnum, trigger) in EnumToTrigger) - { - var sdlAxisValue = SDL.SDL_GameControllerGetAxis(Handle, sdlEnum); - var axisValue = Normalize(sdlAxisValue, 0, short.MaxValue, 0, 1); - trigger.Update(axisValue); + foreach (var (sdlEnum, trigger) in EnumToTrigger) + { + var sdlAxisValue = SDL.SDL_GameControllerGetAxis(Handle, sdlEnum); + var axisValue = Normalize(sdlAxisValue, 0, short.MaxValue, 0, 1); + trigger.Update(axisValue); + } } } diff --git a/src/Input/Input.cs b/src/Input/Input.cs index b476f84..e35b767 100644 --- a/src/Input/Input.cs +++ b/src/Input/Input.cs @@ -1,15 +1,16 @@ using SDL2; using System; -using System.Collections.Generic; namespace MoonWorks.Input { public class Inputs { + public const int MAX_GAMEPADS = 4; + public Keyboard Keyboard { get; } public Mouse Mouse { get; } - List gamepads = new List(); + Gamepad[] gamepads; public static event Action TextInput; @@ -18,11 +19,17 @@ namespace MoonWorks.Input Keyboard = new Keyboard(); Mouse = new Mouse(); - for (int i = 0; i < SDL.SDL_NumJoysticks(); i++) + gamepads = new Gamepad[MAX_GAMEPADS]; + + for (var i = 0; i < 4; i += 1) { if (SDL.SDL_IsGameController(i) == SDL.SDL_bool.SDL_TRUE) { - gamepads.Add(new Gamepad(SDL.SDL_GameControllerOpen(i))); + gamepads[i] = new Gamepad(SDL.SDL_GameControllerOpen(i)); + } + else + { + gamepads[i] = new Gamepad(IntPtr.Zero); } } } @@ -41,7 +48,7 @@ namespace MoonWorks.Input public bool GamepadExists(int slot) { - return slot < gamepads.Count; + return !gamepads[slot].IsDummy; } public Gamepad GetGamepad(int slot)