/// <summary> /// Gets the index of the first player which does not have an associated game pad. /// </summary> /// <returns>The index of the first player which does not have an associated game pad.</returns> private Int32 GetFirstAvailablePlayerIndex() { for (int i = 0; i < devicesByPlayer.Length; i++) { if (devicesByPlayer[i] == null) { return(i); } } var devicesOld = devicesByPlayer; var devicesNew = new SDL2GamePadDevice[devicesOld.Length + 1]; Array.Copy(devicesOld, devicesNew, devicesOld.Length); devicesByPlayer = devicesNew; return(devicesByPlayer.Length - 1); }
/// <summary> /// Called when a controller device is added. /// </summary> /// <param name="joystickIndex">The index of the device to add.</param> private void OnControllerDeviceAdded(Int32 joystickIndex) { var gamecontroller = SDL_GameControllerOpen(joystickIndex); var joystick = SDL_GameControllerGetJoystick(gamecontroller); var joystickID = SDL_JoystickInstanceID(joystick); for (int i = 0; i < devicesByPlayer.Length; i++) { if (devicesByPlayer[i] != null && devicesByPlayer[i].InstanceID == joystickID) { return; } } var playerIndex = GetFirstAvailablePlayerIndex(); var device = new SDL2GamePadDevice(Ultraviolet, joystickIndex, playerIndex); devicesByPlayer[playerIndex] = device; count++; OnGamePadConnected(device, playerIndex); }