Fix some input controller issues (mapping sticks and duplicate controller names) (#31)

Fix some input controller issues (mapping sticks and duplicate controller names) (#31) Co-authored-by: reggie <reggie@latte.to>

АвторTheToid
КоммитерGitHub
9 месяцев назад
Файлов изменено: 2
+65
–25
b4cac89
Родители 0e5ce0b mirror/master
src/Ryujinx.Input.SDL2/SDL2Gamepad.cs
@@ -313,6 +313,32 @@
            return value * ConvertRate;
        }
        private JoyconConfigControllerStick<GamepadInputId, Common.Configuration.Hid.Controller.StickInputId> GetLogicalJoyStickConfig(StickInputId inputId)
        {
            switch (inputId)
            {
                case StickInputId.Left:
                    if (_configuration.RightJoyconStick.Joystick == Common.Configuration.Hid.Controller.StickInputId.Left)
                    {
                        return _configuration.RightJoyconStick;
                    }
                    else
                    {
                        return _configuration.LeftJoyconStick;
                    }
                case StickInputId.Right:
                    if (_configuration.LeftJoyconStick.Joystick == Common.Configuration.Hid.Controller.StickInputId.Right)
                    {
                        return _configuration.LeftJoyconStick;
                    }
                    else
                    {
                        return _configuration.RightJoyconStick;
                    }
            }
            return null;
        }
        public (floatfloat) GetStick(StickInputId inputId)
        {
            if (inputId == StickInputId.Unbound)
@@ -343,24 +369,26 @@
            if (HasConfiguration)
            {
                if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.InvertStickX) ||
                    (inputId == StickInputId.Right && _configuration.RightJoyconStick.InvertStickX))
                {
                    resultX = -resultX;
                }
                var joyconStickConfig = GetLogicalJoyStickConfig(inputId);
                if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.InvertStickY) ||
                    (inputId == StickInputId.Right && _configuration.RightJoyconStick.InvertStickY))
                if (joyconStickConfig != null)
                {
                    resultY = -resultY;
                }
                    if (joyconStickConfig.InvertStickX)
                    {
                        resultX = -resultX;
                    }
                if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.Rotate90CW) ||
                    (inputId == StickInputId.Right && _configuration.RightJoyconStick.Rotate90CW))
                {
                    float temp = resultX;
                    resultX = resultY;
                    resultY = -temp;
                    if (joyconStickConfig.InvertStickY)
                    {
                        resultY = -resultY;
                    }
                    if (joyconStickConfig.Rotate90CW)
                    {
                        float temp = resultX;
                        resultX = resultY;
                        resultY = -temp;
                    }
                }
            }
src/Ryujinx/.../InputViewModel.cs
@@ -45,7 +45,6 @@
        private PlayerIndex _playerId;
        private int _controller;
        private int _controllerNumber;
        private string _controllerImage;
        private int _device;
        private object _configViewModel;
@@ -439,6 +438,24 @@
        public void LoadDevices()
        {
            string GetGamepadName(IGamepad gamepad, int controllerNumber)
            {
                return $"{GetShortGamepadName(gamepad.Name)} ({controllerNumber})";
            }
            string GetUniqueGamepadName(IGamepad gamepad, ref int controllerNumber)
            {
                string name = GetGamepadName(gamepad, controllerNumber);
                if (Devices.Any(controller => controller.Name == name))
                {
                    controllerNumber++;
                    name = GetGamepadName(gamepad, controllerNumber);
                }
                return name;
            }
            lock (Devices)
            {
                Devices.Clear();
@@ -455,23 +472,18 @@
                    }
                }
                int controllerNumber = 0;
                foreach (string id in _mainWindow.InputManager.GamepadDriver.GamepadsIds)
                {
                    using IGamepad gamepad = _mainWindow.InputManager.GamepadDriver.GetGamepad(id);
                    if (gamepad != null)
                    {
                        if (Devices.Any(controller => GetShortGamepadId(controller.Id) == GetShortGamepadId(gamepad.Id)))
                        {
                            _controllerNumber++;
                        }
                        Devices.Add((DeviceType.Controller, id, $"{GetShortGamepadName(gamepad.Name)} ({_controllerNumber})"));
                        string name = GetUniqueGamepadName(gamepad, ref controllerNumber);
                        Devices.Add((DeviceType.Controller, id, name));
                    }
                }
                _controllerNumber = 0;
                DeviceList.AddRange(Devices.Select(x => x.Name));
                Device = Math.Min(Device, DeviceList.Count);
            }
@@ -685,7 +697,7 @@
                if (!File.Exists(path))
                {
                    var index = ProfilesList.IndexOf(ProfileName);
                    int index = ProfilesList.IndexOf(ProfileName);
                    if (index != -1)
                    {
                        ProfilesList.RemoveAt(index);

GPG верификация

Статус: Неверифицирован

Причина: Не найден публичный ключ

ID ключа: b5690eeebb952194

Cherry-pick

Команда cherry-pick позволяет выбрать отдельные коммиты из одной ветки и применить их к другой.