private void FindControllers()
        {
            if (controller != null)
            {
                // If we already have a controller, skip the search
                return;
            }

            int playerIndex = -1;

            if (XInputInterface.IsGamePadConnected(GamePad.PLAYER_INDEX_ONE))
            {
                playerIndex = (int)GamePad.PLAYER_INDEX_ONE;
            }
            else if (XInputInterface.IsGamePadConnected(GamePad.PLAYER_INDEX_TWO))
            {
                playerIndex = (int)GamePad.PLAYER_INDEX_TWO;
            }
            else if (XInputInterface.IsGamePadConnected(GamePad.PLAYER_INDEX_THREE))
            {
                playerIndex = (int)GamePad.PLAYER_INDEX_THREE;
            }
            else if (XInputInterface.IsGamePadConnected(GamePad.PLAYER_INDEX_FOUR))
            {
                playerIndex = (int)GamePad.PLAYER_INDEX_FOUR;
            }

            if (playerIndex != -1)
            {
                Console.WriteLine($"XInput controller found: {playerIndex}");

                controller = new XInputController((uint)playerIndex);
                OnDeviceConnectionStateChanged(controller, true);
            }
        }
        private void OnDeviceConnectionStateChanged(XInputController controller, bool isConnected)
        {
            DeviceConnectionStateChangedEventArgs args = new DeviceConnectionStateChangedEventArgs();

            args.Controller  = controller;
            args.IsConnected = isConnected;

            DeviceConnectionStateChanged?.Invoke(this, args);
        }
        private void PurgeInactiveControllers()
        {
            if (controller == null)
            {
                return;
            }

            if (!controller.IsConnected)
            {
                OnDeviceConnectionStateChanged(controller, false);

                controller = null;
            }
        }