diff --git a/BizHawk.MultiClient/Input/GamePad360.cs b/BizHawk.MultiClient/Input/GamePad360.cs index 873470b771..889fbb7c60 100644 --- a/BizHawk.MultiClient/Input/GamePad360.cs +++ b/BizHawk.MultiClient/Input/GamePad360.cs @@ -5,109 +5,121 @@ using SlimDX.XInput; namespace BizHawk.MultiClient { - public class GamePad360 - { - // ********************************** Static interface ********************************** + public class GamePad360 + { + // ********************************** Static interface ********************************** - public static List Devices; + public static List Devices = new List(); - public static void Initialize() - { - Devices = new List(); - var c1 = new SlimDX.XInput.Controller(UserIndex.One); - var c2 = new SlimDX.XInput.Controller(UserIndex.Two); - var c3 = new SlimDX.XInput.Controller(UserIndex.Three); - var c4 = new SlimDX.XInput.Controller(UserIndex.Four); + static bool IsAvailable; - if (c1.IsConnected) Devices.Add(new GamePad360(c1)); - if (c2.IsConnected) Devices.Add(new GamePad360(c2)); - if (c3.IsConnected) Devices.Add(new GamePad360(c3)); - if (c4.IsConnected) Devices.Add(new GamePad360(c4)); - } + public static void Initialize() + { + IsAvailable = false; + try + { + var test = new SlimDX.XInput.Controller(UserIndex.One).IsConnected; + IsAvailable = true; + } + catch { } - public static void UpdateAll() - { - foreach (var device in Devices) - device.Update(); - } + if (!IsAvailable) return; - // ********************************** Instance Members ********************************** + var c1 = new SlimDX.XInput.Controller(UserIndex.One); + var c2 = new SlimDX.XInput.Controller(UserIndex.Two); + var c3 = new SlimDX.XInput.Controller(UserIndex.Three); + var c4 = new SlimDX.XInput.Controller(UserIndex.Four); - readonly SlimDX.XInput.Controller controller; - State state; + if (c1.IsConnected) Devices.Add(new GamePad360(c1)); + if (c2.IsConnected) Devices.Add(new GamePad360(c2)); + if (c3.IsConnected) Devices.Add(new GamePad360(c3)); + if (c4.IsConnected) Devices.Add(new GamePad360(c4)); + } - GamePad360(SlimDX.XInput.Controller c) - { - controller = c; - InitializeButtons(); - Update(); - } + public static void UpdateAll() + { + if(IsAvailable) + foreach (var device in Devices) + device.Update(); + } - public void Update() - { - if (controller.IsConnected == false) - return; + // ********************************** Instance Members ********************************** - state = controller.GetState(); - } + readonly SlimDX.XInput.Controller controller; + State state; - public int NumButtons { get; private set; } + GamePad360(SlimDX.XInput.Controller c) + { + controller = c; + InitializeButtons(); + Update(); + } - List names = new List(); - List> actions = new List>(); + public void Update() + { + if (controller.IsConnected == false) + return; - void InitializeButtons() - { - const int dzp = 9000; - const int dzn = -9000; - const int dzt = 40; + state = controller.GetState(); + } - AddItem("A", () => (state.Gamepad.Buttons & GamepadButtonFlags.A) != 0); - AddItem("B", () => (state.Gamepad.Buttons & GamepadButtonFlags.B) != 0); - AddItem("X", () => (state.Gamepad.Buttons & GamepadButtonFlags.X) != 0); - AddItem("Y", () => (state.Gamepad.Buttons & GamepadButtonFlags.Y) != 0); + public int NumButtons { get; private set; } - AddItem("Start", () => (state.Gamepad.Buttons & GamepadButtonFlags.Start) != 0); - AddItem("Back", () => (state.Gamepad.Buttons & GamepadButtonFlags.Back) != 0); - AddItem("LeftThumb", () => (state.Gamepad.Buttons & GamepadButtonFlags.LeftThumb) != 0); - AddItem("RightThumb", () => (state.Gamepad.Buttons & GamepadButtonFlags.RightThumb) != 0); - AddItem("LeftShoulder", () => (state.Gamepad.Buttons & GamepadButtonFlags.LeftShoulder) != 0); - AddItem("RightShoulder", () => (state.Gamepad.Buttons & GamepadButtonFlags.RightShoulder) != 0); + List names = new List(); + List> actions = new List>(); - AddItem("DpadUp", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadUp) != 0); - AddItem("DpadDown", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadDown) != 0); - AddItem("DpadLeft", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadLeft) != 0); - AddItem("DpadRight", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadRight) != 0); + void InitializeButtons() + { + const int dzp = 9000; + const int dzn = -9000; + const int dzt = 40; - AddItem("LStickUp", () => state.Gamepad.LeftThumbY >= dzp); - AddItem("LStickDown", () => state.Gamepad.LeftThumbY <= dzn); - AddItem("LStickLeft", () => state.Gamepad.LeftThumbX <= dzn); - AddItem("LStickRight", () => state.Gamepad.LeftThumbX >= dzp); + AddItem("A", () => (state.Gamepad.Buttons & GamepadButtonFlags.A) != 0); + AddItem("B", () => (state.Gamepad.Buttons & GamepadButtonFlags.B) != 0); + AddItem("X", () => (state.Gamepad.Buttons & GamepadButtonFlags.X) != 0); + AddItem("Y", () => (state.Gamepad.Buttons & GamepadButtonFlags.Y) != 0); - AddItem("RStickUp", () => state.Gamepad.RightThumbY >= dzp); - AddItem("RStickDown", () => state.Gamepad.RightThumbY <= dzn); - AddItem("RStickLeft", () => state.Gamepad.RightThumbX <= dzn); - AddItem("RStickRight", () => state.Gamepad.RightThumbX >= dzp); - - AddItem("LeftTrigger", () => state.Gamepad.LeftTrigger > dzt); - AddItem("RightTrigger", () => state.Gamepad.RightTrigger > dzt); - } + AddItem("Start", () => (state.Gamepad.Buttons & GamepadButtonFlags.Start) != 0); + AddItem("Back", () => (state.Gamepad.Buttons & GamepadButtonFlags.Back) != 0); + AddItem("LeftThumb", () => (state.Gamepad.Buttons & GamepadButtonFlags.LeftThumb) != 0); + AddItem("RightThumb", () => (state.Gamepad.Buttons & GamepadButtonFlags.RightThumb) != 0); + AddItem("LeftShoulder", () => (state.Gamepad.Buttons & GamepadButtonFlags.LeftShoulder) != 0); + AddItem("RightShoulder", () => (state.Gamepad.Buttons & GamepadButtonFlags.RightShoulder) != 0); - void AddItem(string name, Func pressed) - { - names.Add(name); - actions.Add(pressed); - NumButtons++; - } + AddItem("DpadUp", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadUp) != 0); + AddItem("DpadDown", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadDown) != 0); + AddItem("DpadLeft", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadLeft) != 0); + AddItem("DpadRight", () => (state.Gamepad.Buttons & GamepadButtonFlags.DPadRight) != 0); - public string ButtonName(int index) - { - return names[index]; - } + AddItem("LStickUp", () => state.Gamepad.LeftThumbY >= dzp); + AddItem("LStickDown", () => state.Gamepad.LeftThumbY <= dzn); + AddItem("LStickLeft", () => state.Gamepad.LeftThumbX <= dzn); + AddItem("LStickRight", () => state.Gamepad.LeftThumbX >= dzp); - public bool Pressed(int index) - { - return actions[index](); - } - } + AddItem("RStickUp", () => state.Gamepad.RightThumbY >= dzp); + AddItem("RStickDown", () => state.Gamepad.RightThumbY <= dzn); + AddItem("RStickLeft", () => state.Gamepad.RightThumbX <= dzn); + AddItem("RStickRight", () => state.Gamepad.RightThumbX >= dzp); + + AddItem("LeftTrigger", () => state.Gamepad.LeftTrigger > dzt); + AddItem("RightTrigger", () => state.Gamepad.RightTrigger > dzt); + } + + void AddItem(string name, Func pressed) + { + names.Add(name); + actions.Add(pressed); + NumButtons++; + } + + public string ButtonName(int index) + { + return names[index]; + } + + public bool Pressed(int index) + { + return actions[index](); + } + } } diff --git a/BizHawk.MultiClient/Input/Input.cs b/BizHawk.MultiClient/Input/Input.cs index 9de740efd9..3ee1d7f9e5 100644 --- a/BizHawk.MultiClient/Input/Input.cs +++ b/BizHawk.MultiClient/Input/Input.cs @@ -68,7 +68,7 @@ namespace BizHawk.MultiClient #if WINDOWS KeyInput.Initialize(); GamePad.Initialize(); - GamePad360.Initialize(); + GamePad360.Initialize(); #endif Instance = new Input(); }