private void OpenDevice(int deviceIndex) { var joystickId = SDL.SDL_JoystickGetDeviceGUID(deviceIndex); var joystickName = SDL.SDL_JoystickNameForIndex(deviceIndex); if (joystickInstanceIdToDeviceId.ContainsKey(GetJoystickInstanceId(deviceIndex))) { throw new InvalidOperationException($"SDL GameController already opened {deviceIndex}/{joystickId}/{joystickName}"); } var controller = new GameControllerSDL(this, deviceIndex); IInputDevice resultingDevice = controller; // Find gamepad layout var layout = GamePadLayouts.FindLayout(this, controller); if (layout != null) { // Create a gamepad wrapping around the controller var gamePad = new GamePadSDL(this, inputManager, controller, layout); resultingDevice = gamePad; // Register gamepad instead } controller.Disconnected += (sender, args) => { // Queue device for removal devicesToRemove.Add(resultingDevice.Id); joystickInstanceIdToDeviceId.Remove(controller.InstanceId); }; RegisterDevice(resultingDevice); joystickInstanceIdToDeviceId.Add(controller.InstanceId, resultingDevice.Id); }
public GamePadSDL(InputSourceSDL source, InputManager inputManager, GameControllerSDL controller, GamePadLayout layout) : base(inputManager, controller, layout) { Source = source; Name = controller.Name; Id = controller.Id; ProductId = controller.ProductId; }