public GamePadDirectInput(InputSourceWindowsDirectInput source, InputManager inputManager, GameControllerDirectInput controller, GamePadLayout layout) : base(inputManager, controller, layout) { this.controller = controller; Source = source; Name = controller.Name; Id = controller.Id; ProductId = controller.ProductId; }
/// <summary> /// Opens a new game controller or gamepad /// </summary> /// <param name="deviceInstance">The device instance</param> public void OpenDevice(DeviceInstance deviceInstance) { // Ignore XInput devices since they are handled by XInput if (XInputChecker.IsXInputDevice(ref deviceInstance.ProductGuid)) { return; } if (Devices.ContainsKey(deviceInstance.InstanceGuid)) { throw new InvalidOperationException($"DirectInput GameController already opened {deviceInstance.InstanceGuid}/{deviceInstance.InstanceName}"); } GameControllerDirectInput controller; try { controller = new GameControllerDirectInput(this, directInput, deviceInstance); } catch (SharpDXException) { // Some failure occured during device creation return; } // Find gamepad layout var layout = GamePadLayouts.FindLayout(this, controller); if (layout != null) { // Create a gamepad wrapping around the controller var gamePad = new GamePadDirectInput(this, inputManager, controller, layout); controller.Disconnected += (sender, args) => { // Queue device for removal devicesToRemove.Add(gamePad.Id); }; RegisterDevice(gamePad); // Register gamepad instead } else { controller.Disconnected += (sender, args) => { // Queue device for removal devicesToRemove.Add(controller.Id); }; RegisterDevice(controller); } }