mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-12-16 16:56:38 +00:00
Compare commits
4 Commits
b91a4f88f1
...
9325238f0f
Author | SHA1 | Date | |
---|---|---|---|
|
9325238f0f | ||
|
7d158acc3b | ||
|
ede3f0f5b8 | ||
|
30d7253e26 |
@ -3,6 +3,7 @@ namespace Ryujinx.Common.Configuration.Hid
|
|||||||
public class LeftJoyconCommonConfig<TButton>
|
public class LeftJoyconCommonConfig<TButton>
|
||||||
{
|
{
|
||||||
public TButton ButtonMinus { get; set; }
|
public TButton ButtonMinus { get; set; }
|
||||||
|
public TButton ButtonScreenshot { get; set; }
|
||||||
public TButton ButtonL { get; set; }
|
public TButton ButtonL { get; set; }
|
||||||
public TButton ButtonZl { get; set; }
|
public TButton ButtonZl { get; set; }
|
||||||
public TButton ButtonSl { get; set; }
|
public TButton ButtonSl { get; set; }
|
||||||
|
@ -743,7 +743,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
|||||||
constantBufferUsePerStageMask &= ~(1 << index);
|
constantBufferUsePerStageMask &= ~(1 << index);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkTextures)
|
if (checkTextures && _allTextures.Length > 0)
|
||||||
{
|
{
|
||||||
TexturePool pool = channel.TextureManager.GetTexturePool(poolState.TexturePoolGpuVa, poolState.TexturePoolMaximumId);
|
TexturePool pool = channel.TextureManager.GetTexturePool(poolState.TexturePoolGpuVa, poolState.TexturePoolMaximumId);
|
||||||
|
|
||||||
|
@ -166,6 +166,7 @@ namespace Ryujinx.Input.GTK3
|
|||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (Key)_configuration.LeftJoycon.DpadLeft));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (Key)_configuration.LeftJoycon.DpadLeft));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (Key)_configuration.LeftJoycon.DpadRight));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (Key)_configuration.LeftJoycon.DpadRight));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (Key)_configuration.LeftJoycon.ButtonMinus));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (Key)_configuration.LeftJoycon.ButtonMinus));
|
||||||
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Misc1, (Key)_configuration.LeftJoycon.ButtonScreenshot));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (Key)_configuration.LeftJoycon.ButtonL));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (Key)_configuration.LeftJoycon.ButtonL));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (Key)_configuration.LeftJoycon.ButtonZl));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (Key)_configuration.LeftJoycon.ButtonZl));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (Key)_configuration.LeftJoycon.ButtonSr));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (Key)_configuration.LeftJoycon.ButtonSr));
|
||||||
|
@ -15,6 +15,7 @@ using Ryujinx.UI.Common.Helper;
|
|||||||
using Ryujinx.UI.Widgets;
|
using Ryujinx.UI.Widgets;
|
||||||
using SkiaSharp;
|
using SkiaSharp;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
@ -73,11 +74,14 @@ namespace Ryujinx.UI
|
|||||||
private HideCursorMode _hideCursorMode;
|
private HideCursorMode _hideCursorMode;
|
||||||
private readonly InputManager _inputManager;
|
private readonly InputManager _inputManager;
|
||||||
private readonly IKeyboard _keyboardInterface;
|
private readonly IKeyboard _keyboardInterface;
|
||||||
|
private readonly List<IGamepad> _gamepadInterfaces;
|
||||||
private readonly GraphicsDebugLevel _glLogLevel;
|
private readonly GraphicsDebugLevel _glLogLevel;
|
||||||
private string _gpuBackendName;
|
private string _gpuBackendName;
|
||||||
private string _gpuDriverName;
|
private string _gpuDriverName;
|
||||||
private bool _isMouseInClient;
|
private bool _isMouseInClient;
|
||||||
|
|
||||||
|
private int _gamepadsChanged; // use atomically via Interlocked
|
||||||
|
|
||||||
public RendererWidgetBase(InputManager inputManager, GraphicsDebugLevel glLogLevel)
|
public RendererWidgetBase(InputManager inputManager, GraphicsDebugLevel glLogLevel)
|
||||||
{
|
{
|
||||||
var mouseDriver = new GTK3MouseDriver(this);
|
var mouseDriver = new GTK3MouseDriver(this);
|
||||||
@ -88,6 +92,13 @@ namespace Ryujinx.UI
|
|||||||
TouchScreenManager = _inputManager.CreateTouchScreenManager();
|
TouchScreenManager = _inputManager.CreateTouchScreenManager();
|
||||||
_keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0");
|
_keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0");
|
||||||
|
|
||||||
|
_gamepadInterfaces = new List<IGamepad>();
|
||||||
|
|
||||||
|
_inputManager.GamepadDriver.OnGamepadConnected += GamepadConnected;
|
||||||
|
_inputManager.GamepadDriver.OnGamepadDisconnected += GamepadDisconnected;
|
||||||
|
|
||||||
|
RefreshGamepads();
|
||||||
|
|
||||||
WaitEvent = new ManualResetEvent(false);
|
WaitEvent = new ManualResetEvent(false);
|
||||||
|
|
||||||
_glLogLevel = glLogLevel;
|
_glLogLevel = glLogLevel;
|
||||||
@ -649,6 +660,11 @@ namespace Ryujinx.UI
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Interlocked.Exchange(ref _gamepadsChanged, 0) == 1)
|
||||||
|
{
|
||||||
|
RefreshGamepads();
|
||||||
|
}
|
||||||
|
|
||||||
NpadManager.Update(ConfigurationState.Instance.Graphics.AspectRatio.Value.ToFloat());
|
NpadManager.Update(ConfigurationState.Instance.Graphics.AspectRatio.Value.ToFloat());
|
||||||
|
|
||||||
if ((Toplevel as MainWindow).IsFocused)
|
if ((Toplevel as MainWindow).IsFocused)
|
||||||
@ -767,7 +783,8 @@ namespace Ryujinx.UI
|
|||||||
state |= KeyboardHotkeyState.ToggleVSync;
|
state |= KeyboardHotkeyState.ToggleVSync;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot))
|
if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot) ||
|
||||||
|
ButtonPressedOnAnyGamepad(GamepadButtonInputId.Misc1))
|
||||||
{
|
{
|
||||||
state |= KeyboardHotkeyState.Screenshot;
|
state |= KeyboardHotkeyState.Screenshot;
|
||||||
}
|
}
|
||||||
@ -809,5 +826,37 @@ namespace Ryujinx.UI
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GamepadConnected(string id)
|
||||||
|
{
|
||||||
|
Interlocked.Exchange(ref _gamepadsChanged, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GamepadDisconnected(string id)
|
||||||
|
{
|
||||||
|
Interlocked.Exchange(ref _gamepadsChanged, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshGamepads()
|
||||||
|
{
|
||||||
|
_gamepadInterfaces.Clear();
|
||||||
|
|
||||||
|
foreach (string id in _inputManager.GamepadDriver.GamepadsIds)
|
||||||
|
{
|
||||||
|
_gamepadInterfaces.Add(_inputManager.GamepadDriver.GetGamepad(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ButtonPressedOnAnyGamepad(GamepadButtonInputId button)
|
||||||
|
{
|
||||||
|
foreach (IGamepad gamepad in _gamepadInterfaces)
|
||||||
|
{
|
||||||
|
if (gamepad.IsPressed(button))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
[GUI] ToggleButton _dpadLeft;
|
[GUI] ToggleButton _dpadLeft;
|
||||||
[GUI] ToggleButton _dpadRight;
|
[GUI] ToggleButton _dpadRight;
|
||||||
[GUI] ToggleButton _minus;
|
[GUI] ToggleButton _minus;
|
||||||
|
[GUI] ToggleButton _screenshot;
|
||||||
[GUI] ToggleButton _l;
|
[GUI] ToggleButton _l;
|
||||||
[GUI] ToggleButton _zL;
|
[GUI] ToggleButton _zL;
|
||||||
[GUI] ToggleButton _rStick;
|
[GUI] ToggleButton _rStick;
|
||||||
@ -165,6 +166,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
_dpadLeft.Clicked += Button_Pressed;
|
_dpadLeft.Clicked += Button_Pressed;
|
||||||
_dpadRight.Clicked += Button_Pressed;
|
_dpadRight.Clicked += Button_Pressed;
|
||||||
_minus.Clicked += Button_Pressed;
|
_minus.Clicked += Button_Pressed;
|
||||||
|
_screenshot.Clicked += Button_Pressed;
|
||||||
_l.Clicked += Button_Pressed;
|
_l.Clicked += Button_Pressed;
|
||||||
_zL.Clicked += Button_Pressed;
|
_zL.Clicked += Button_Pressed;
|
||||||
_lSl.Clicked += Button_Pressed;
|
_lSl.Clicked += Button_Pressed;
|
||||||
@ -400,6 +402,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
_dpadLeft.Label = "Unbound";
|
_dpadLeft.Label = "Unbound";
|
||||||
_dpadRight.Label = "Unbound";
|
_dpadRight.Label = "Unbound";
|
||||||
_minus.Label = "Unbound";
|
_minus.Label = "Unbound";
|
||||||
|
_screenshot.Label = "Unbound";
|
||||||
_l.Label = "Unbound";
|
_l.Label = "Unbound";
|
||||||
_zL.Label = "Unbound";
|
_zL.Label = "Unbound";
|
||||||
_lSl.Label = "Unbound";
|
_lSl.Label = "Unbound";
|
||||||
@ -460,6 +463,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
_dpadLeft.Label = keyboardConfig.LeftJoycon.DpadLeft.ToString();
|
_dpadLeft.Label = keyboardConfig.LeftJoycon.DpadLeft.ToString();
|
||||||
_dpadRight.Label = keyboardConfig.LeftJoycon.DpadRight.ToString();
|
_dpadRight.Label = keyboardConfig.LeftJoycon.DpadRight.ToString();
|
||||||
_minus.Label = keyboardConfig.LeftJoycon.ButtonMinus.ToString();
|
_minus.Label = keyboardConfig.LeftJoycon.ButtonMinus.ToString();
|
||||||
|
_screenshot.Label = keyboardConfig.LeftJoycon.ButtonScreenshot.ToString();
|
||||||
_l.Label = keyboardConfig.LeftJoycon.ButtonL.ToString();
|
_l.Label = keyboardConfig.LeftJoycon.ButtonL.ToString();
|
||||||
_zL.Label = keyboardConfig.LeftJoycon.ButtonZl.ToString();
|
_zL.Label = keyboardConfig.LeftJoycon.ButtonZl.ToString();
|
||||||
_lSl.Label = keyboardConfig.LeftJoycon.ButtonSl.ToString();
|
_lSl.Label = keyboardConfig.LeftJoycon.ButtonSl.ToString();
|
||||||
@ -498,6 +502,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
_dpadLeft.Label = controllerConfig.LeftJoycon.DpadLeft.ToString();
|
_dpadLeft.Label = controllerConfig.LeftJoycon.DpadLeft.ToString();
|
||||||
_dpadRight.Label = controllerConfig.LeftJoycon.DpadRight.ToString();
|
_dpadRight.Label = controllerConfig.LeftJoycon.DpadRight.ToString();
|
||||||
_minus.Label = controllerConfig.LeftJoycon.ButtonMinus.ToString();
|
_minus.Label = controllerConfig.LeftJoycon.ButtonMinus.ToString();
|
||||||
|
_screenshot.Label = controllerConfig.LeftJoycon.ButtonScreenshot.ToString();
|
||||||
_l.Label = controllerConfig.LeftJoycon.ButtonL.ToString();
|
_l.Label = controllerConfig.LeftJoycon.ButtonL.ToString();
|
||||||
_zL.Label = controllerConfig.LeftJoycon.ButtonZl.ToString();
|
_zL.Label = controllerConfig.LeftJoycon.ButtonZl.ToString();
|
||||||
_lSl.Label = controllerConfig.LeftJoycon.ButtonSl.ToString();
|
_lSl.Label = controllerConfig.LeftJoycon.ButtonSl.ToString();
|
||||||
@ -566,6 +571,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
Enum.TryParse(_dpadLeft.Label, out Key lDPadLeft);
|
Enum.TryParse(_dpadLeft.Label, out Key lDPadLeft);
|
||||||
Enum.TryParse(_dpadRight.Label, out Key lDPadRight);
|
Enum.TryParse(_dpadRight.Label, out Key lDPadRight);
|
||||||
Enum.TryParse(_minus.Label, out Key lButtonMinus);
|
Enum.TryParse(_minus.Label, out Key lButtonMinus);
|
||||||
|
Enum.TryParse(_screenshot.Label, out Key lButtonScreenshot);
|
||||||
Enum.TryParse(_l.Label, out Key lButtonL);
|
Enum.TryParse(_l.Label, out Key lButtonL);
|
||||||
Enum.TryParse(_zL.Label, out Key lButtonZl);
|
Enum.TryParse(_zL.Label, out Key lButtonZl);
|
||||||
Enum.TryParse(_lSl.Label, out Key lButtonSl);
|
Enum.TryParse(_lSl.Label, out Key lButtonSl);
|
||||||
@ -597,6 +603,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
LeftJoycon = new LeftJoyconCommonConfig<Key>
|
LeftJoycon = new LeftJoyconCommonConfig<Key>
|
||||||
{
|
{
|
||||||
ButtonMinus = lButtonMinus,
|
ButtonMinus = lButtonMinus,
|
||||||
|
ButtonScreenshot = lButtonScreenshot,
|
||||||
ButtonL = lButtonL,
|
ButtonL = lButtonL,
|
||||||
ButtonZl = lButtonZl,
|
ButtonZl = lButtonZl,
|
||||||
ButtonSl = lButtonSl,
|
ButtonSl = lButtonSl,
|
||||||
@ -643,6 +650,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
Enum.TryParse(_lStick.Label, out ConfigStickInputId lStick);
|
Enum.TryParse(_lStick.Label, out ConfigStickInputId lStick);
|
||||||
Enum.TryParse(_lStickButton.Label, out ConfigGamepadInputId lStickButton);
|
Enum.TryParse(_lStickButton.Label, out ConfigGamepadInputId lStickButton);
|
||||||
Enum.TryParse(_minus.Label, out ConfigGamepadInputId lButtonMinus);
|
Enum.TryParse(_minus.Label, out ConfigGamepadInputId lButtonMinus);
|
||||||
|
Enum.TryParse(_screenshot.Label, out ConfigGamepadInputId lButtonScreenshot);
|
||||||
Enum.TryParse(_l.Label, out ConfigGamepadInputId lButtonL);
|
Enum.TryParse(_l.Label, out ConfigGamepadInputId lButtonL);
|
||||||
Enum.TryParse(_zL.Label, out ConfigGamepadInputId lButtonZl);
|
Enum.TryParse(_zL.Label, out ConfigGamepadInputId lButtonZl);
|
||||||
Enum.TryParse(_lSl.Label, out ConfigGamepadInputId lButtonSl);
|
Enum.TryParse(_lSl.Label, out ConfigGamepadInputId lButtonSl);
|
||||||
@ -710,6 +718,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
LeftJoycon = new LeftJoyconCommonConfig<ConfigGamepadInputId>
|
LeftJoycon = new LeftJoyconCommonConfig<ConfigGamepadInputId>
|
||||||
{
|
{
|
||||||
ButtonMinus = lButtonMinus,
|
ButtonMinus = lButtonMinus,
|
||||||
|
ButtonScreenshot = lButtonScreenshot,
|
||||||
ButtonL = lButtonL,
|
ButtonL = lButtonL,
|
||||||
ButtonZl = lButtonZl,
|
ButtonZl = lButtonZl,
|
||||||
ButtonSl = lButtonSl,
|
ButtonSl = lButtonSl,
|
||||||
@ -997,6 +1006,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
DpadLeft = Key.Left,
|
DpadLeft = Key.Left,
|
||||||
DpadRight = Key.Right,
|
DpadRight = Key.Right,
|
||||||
ButtonMinus = Key.Minus,
|
ButtonMinus = Key.Minus,
|
||||||
|
ButtonScreenshot = Key.Unbound, // keyboard already has a default screenshot configured via ConfigurationState.Hid.Hotkeys.Screenshot, so no gamepad mapping needed
|
||||||
ButtonL = Key.E,
|
ButtonL = Key.E,
|
||||||
ButtonZl = Key.Q,
|
ButtonZl = Key.Q,
|
||||||
ButtonSl = Key.Unbound,
|
ButtonSl = Key.Unbound,
|
||||||
@ -1057,6 +1067,7 @@ namespace Ryujinx.UI.Windows
|
|||||||
DpadLeft = ConfigGamepadInputId.DpadLeft,
|
DpadLeft = ConfigGamepadInputId.DpadLeft,
|
||||||
DpadRight = ConfigGamepadInputId.DpadRight,
|
DpadRight = ConfigGamepadInputId.DpadRight,
|
||||||
ButtonMinus = ConfigGamepadInputId.Minus,
|
ButtonMinus = ConfigGamepadInputId.Minus,
|
||||||
|
ButtonScreenshot = ConfigGamepadInputId.Misc1,
|
||||||
ButtonL = ConfigGamepadInputId.LeftShoulder,
|
ButtonL = ConfigGamepadInputId.LeftShoulder,
|
||||||
ButtonZl = ConfigGamepadInputId.LeftTrigger,
|
ButtonZl = ConfigGamepadInputId.LeftTrigger,
|
||||||
ButtonSl = ConfigGamepadInputId.Unbound,
|
ButtonSl = ConfigGamepadInputId.Unbound,
|
||||||
|
@ -475,6 +475,31 @@
|
|||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="width_request">80</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Screenshot</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">6</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkToggleButton" id="_screenshot">
|
||||||
|
<property name="label" translatable="yes"> </property>
|
||||||
|
<property name="width_request">70</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">1</property>
|
||||||
|
<property name="top_attach">6</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -161,6 +161,7 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
DpadLeft = Key.Left,
|
DpadLeft = Key.Left,
|
||||||
DpadRight = Key.Right,
|
DpadRight = Key.Right,
|
||||||
ButtonMinus = Key.Minus,
|
ButtonMinus = Key.Minus,
|
||||||
|
ButtonScreenshot = Key.Unbound, // keyboard already has a default screenshot configured via ConfigurationState.Hid.Hotkeys.Screenshot, so no gamepad mapping needed
|
||||||
ButtonL = Key.E,
|
ButtonL = Key.E,
|
||||||
ButtonZl = Key.Q,
|
ButtonZl = Key.Q,
|
||||||
ButtonSl = Key.Unbound,
|
ButtonSl = Key.Unbound,
|
||||||
@ -221,6 +222,7 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
DpadLeft = ConfigGamepadInputId.DpadLeft,
|
DpadLeft = ConfigGamepadInputId.DpadLeft,
|
||||||
DpadRight = ConfigGamepadInputId.DpadRight,
|
DpadRight = ConfigGamepadInputId.DpadRight,
|
||||||
ButtonMinus = ConfigGamepadInputId.Minus,
|
ButtonMinus = ConfigGamepadInputId.Minus,
|
||||||
|
ButtonScreenshot = ConfigGamepadInputId.Misc1,
|
||||||
ButtonL = ConfigGamepadInputId.LeftShoulder,
|
ButtonL = ConfigGamepadInputId.LeftShoulder,
|
||||||
ButtonZl = ConfigGamepadInputId.LeftTrigger,
|
ButtonZl = ConfigGamepadInputId.LeftTrigger,
|
||||||
ButtonSl = ConfigGamepadInputId.Unbound,
|
ButtonSl = ConfigGamepadInputId.Unbound,
|
||||||
|
@ -244,6 +244,7 @@ namespace Ryujinx.Input.SDL2
|
|||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (GamepadButtonInputId)_configuration.LeftJoycon.DpadLeft));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (GamepadButtonInputId)_configuration.LeftJoycon.DpadLeft));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (GamepadButtonInputId)_configuration.LeftJoycon.DpadRight));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (GamepadButtonInputId)_configuration.LeftJoycon.DpadRight));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonMinus));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonMinus));
|
||||||
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Misc1, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonScreenshot));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonL));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonL));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonZl));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonZl));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonSr));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (GamepadButtonInputId)_configuration.LeftJoycon.ButtonSr));
|
||||||
|
@ -372,6 +372,7 @@ namespace Ryujinx.Input.SDL2
|
|||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (Key)_configuration.LeftJoycon.DpadLeft));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (Key)_configuration.LeftJoycon.DpadLeft));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (Key)_configuration.LeftJoycon.DpadRight));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (Key)_configuration.LeftJoycon.DpadRight));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (Key)_configuration.LeftJoycon.ButtonMinus));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (Key)_configuration.LeftJoycon.ButtonMinus));
|
||||||
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Misc1, (Key)_configuration.LeftJoycon.ButtonScreenshot));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (Key)_configuration.LeftJoycon.ButtonL));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (Key)_configuration.LeftJoycon.ButtonL));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (Key)_configuration.LeftJoycon.ButtonZl));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (Key)_configuration.LeftJoycon.ButtonZl));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (Key)_configuration.LeftJoycon.ButtonSr));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (Key)_configuration.LeftJoycon.ButtonSr));
|
||||||
|
@ -888,6 +888,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
DpadLeft = Key.Left,
|
DpadLeft = Key.Left,
|
||||||
DpadRight = Key.Right,
|
DpadRight = Key.Right,
|
||||||
ButtonMinus = Key.Minus,
|
ButtonMinus = Key.Minus,
|
||||||
|
ButtonScreenshot = Key.Unbound, // keyboard already has a default screenshot configured via ConfigurationState.Hid.Hotkeys.Screenshot, so no gamepad mapping needed
|
||||||
ButtonL = Key.E,
|
ButtonL = Key.E,
|
||||||
ButtonZl = Key.Q,
|
ButtonZl = Key.Q,
|
||||||
ButtonSl = Key.Unbound,
|
ButtonSl = Key.Unbound,
|
||||||
@ -1117,6 +1118,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
DpadLeft = Key.Left,
|
DpadLeft = Key.Left,
|
||||||
DpadRight = Key.Right,
|
DpadRight = Key.Right,
|
||||||
ButtonMinus = Key.Minus,
|
ButtonMinus = Key.Minus,
|
||||||
|
ButtonScreenshot = Key.Unbound, // keyboard already has a default screenshot configured via ConfigurationState.Hid.Hotkeys.Screenshot, so no gamepad mapping needed
|
||||||
ButtonL = Key.E,
|
ButtonL = Key.E,
|
||||||
ButtonZl = Key.Q,
|
ButtonZl = Key.Q,
|
||||||
ButtonSl = Key.Unbound,
|
ButtonSl = Key.Unbound,
|
||||||
|
@ -82,6 +82,7 @@ namespace Ryujinx.Ava
|
|||||||
|
|
||||||
private readonly MainWindowViewModel _viewModel;
|
private readonly MainWindowViewModel _viewModel;
|
||||||
private readonly IKeyboard _keyboardInterface;
|
private readonly IKeyboard _keyboardInterface;
|
||||||
|
private readonly List<IGamepad> _gamepadInterfaces;
|
||||||
private readonly TopLevel _topLevel;
|
private readonly TopLevel _topLevel;
|
||||||
public RendererHost RendererHost;
|
public RendererHost RendererHost;
|
||||||
|
|
||||||
@ -89,6 +90,8 @@ namespace Ryujinx.Ava
|
|||||||
private float _newVolume;
|
private float _newVolume;
|
||||||
private KeyboardHotkeyState _prevHotkeyState;
|
private KeyboardHotkeyState _prevHotkeyState;
|
||||||
|
|
||||||
|
private int _gamepadsChanged; // use atomically via Interlocked
|
||||||
|
|
||||||
private long _lastCursorMoveTime;
|
private long _lastCursorMoveTime;
|
||||||
private bool _isCursorInRenderer = true;
|
private bool _isCursorInRenderer = true;
|
||||||
private bool _ignoreCursorState = false;
|
private bool _ignoreCursorState = false;
|
||||||
@ -160,6 +163,13 @@ namespace Ryujinx.Ava
|
|||||||
|
|
||||||
_keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0");
|
_keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0");
|
||||||
|
|
||||||
|
_gamepadInterfaces = new List<IGamepad>();
|
||||||
|
|
||||||
|
_inputManager.GamepadDriver.OnGamepadConnected += GamepadConnected;
|
||||||
|
_inputManager.GamepadDriver.OnGamepadDisconnected += GamepadDisconnected;
|
||||||
|
|
||||||
|
RefreshGamepads();
|
||||||
|
|
||||||
NpadManager = _inputManager.CreateNpadManager();
|
NpadManager = _inputManager.CreateNpadManager();
|
||||||
TouchScreenManager = _inputManager.CreateTouchScreenManager();
|
TouchScreenManager = _inputManager.CreateTouchScreenManager();
|
||||||
ApplicationPath = applicationPath;
|
ApplicationPath = applicationPath;
|
||||||
@ -1103,6 +1113,11 @@ namespace Ryujinx.Ava
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Interlocked.Exchange(ref _gamepadsChanged, 0) == 1)
|
||||||
|
{
|
||||||
|
RefreshGamepads();
|
||||||
|
}
|
||||||
|
|
||||||
NpadManager.Update(ConfigurationState.Instance.Graphics.AspectRatio.Value.ToFloat());
|
NpadManager.Update(ConfigurationState.Instance.Graphics.AspectRatio.Value.ToFloat());
|
||||||
|
|
||||||
if (_viewModel.IsActive)
|
if (_viewModel.IsActive)
|
||||||
@ -1241,7 +1256,8 @@ namespace Ryujinx.Ava
|
|||||||
{
|
{
|
||||||
state = KeyboardHotkeyState.ToggleVSync;
|
state = KeyboardHotkeyState.ToggleVSync;
|
||||||
}
|
}
|
||||||
else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot))
|
else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot) ||
|
||||||
|
ButtonPressedOnAnyGamepad(GamepadButtonInputId.Misc1))
|
||||||
{
|
{
|
||||||
state = KeyboardHotkeyState.Screenshot;
|
state = KeyboardHotkeyState.Screenshot;
|
||||||
}
|
}
|
||||||
@ -1276,5 +1292,37 @@ namespace Ryujinx.Ava
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GamepadConnected(string id)
|
||||||
|
{
|
||||||
|
Interlocked.Exchange(ref _gamepadsChanged, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GamepadDisconnected(string id)
|
||||||
|
{
|
||||||
|
Interlocked.Exchange(ref _gamepadsChanged, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshGamepads()
|
||||||
|
{
|
||||||
|
_gamepadInterfaces.Clear();
|
||||||
|
|
||||||
|
foreach (string id in _inputManager.GamepadDriver.GamepadsIds)
|
||||||
|
{
|
||||||
|
_gamepadInterfaces.Add(_inputManager.GamepadDriver.GetGamepad(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ButtonPressedOnAnyGamepad(GamepadButtonInputId button)
|
||||||
|
{
|
||||||
|
foreach (IGamepad gamepad in _gamepadInterfaces)
|
||||||
|
{
|
||||||
|
if (gamepad.IsPressed(button))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,6 +233,8 @@
|
|||||||
"ControllerSettingsDPadDown": "Runter",
|
"ControllerSettingsDPadDown": "Runter",
|
||||||
"ControllerSettingsDPadLeft": "Links",
|
"ControllerSettingsDPadLeft": "Links",
|
||||||
"ControllerSettingsDPadRight": "Rechts",
|
"ControllerSettingsDPadRight": "Rechts",
|
||||||
|
"ControllerSettingsRawScreenshot": "Unbearbeiteter Screenshot",
|
||||||
|
"ControllerSettingsRawScreenshotTooltip": "Macht ein Bildschirmfoto ohne Wasserzeichen etc.",
|
||||||
"ControllerSettingsStickButton": "Button",
|
"ControllerSettingsStickButton": "Button",
|
||||||
"ControllerSettingsStickUp": "Hoch",
|
"ControllerSettingsStickUp": "Hoch",
|
||||||
"ControllerSettingsStickDown": "Runter",
|
"ControllerSettingsStickDown": "Runter",
|
||||||
|
@ -234,6 +234,8 @@
|
|||||||
"ControllerSettingsDPadDown": "Down",
|
"ControllerSettingsDPadDown": "Down",
|
||||||
"ControllerSettingsDPadLeft": "Left",
|
"ControllerSettingsDPadLeft": "Left",
|
||||||
"ControllerSettingsDPadRight": "Right",
|
"ControllerSettingsDPadRight": "Right",
|
||||||
|
"ControllerSettingsRawScreenshot": "Raw Screenshot",
|
||||||
|
"ControllerSettingsRawScreenshotTooltip": "Takes a screenshot without any watermarks etc.",
|
||||||
"ControllerSettingsStickButton": "Button",
|
"ControllerSettingsStickButton": "Button",
|
||||||
"ControllerSettingsStickUp": "Up",
|
"ControllerSettingsStickUp": "Up",
|
||||||
"ControllerSettingsStickDown": "Down",
|
"ControllerSettingsStickDown": "Down",
|
||||||
|
@ -128,6 +128,7 @@ namespace Ryujinx.Ava.Input
|
|||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (Key)_configuration.LeftJoycon.DpadLeft));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadLeft, (Key)_configuration.LeftJoycon.DpadLeft));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (Key)_configuration.LeftJoycon.DpadRight));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.DpadRight, (Key)_configuration.LeftJoycon.DpadRight));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (Key)_configuration.LeftJoycon.ButtonMinus));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Minus, (Key)_configuration.LeftJoycon.ButtonMinus));
|
||||||
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.Misc1, (Key)_configuration.LeftJoycon.ButtonScreenshot));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (Key)_configuration.LeftJoycon.ButtonL));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftShoulder, (Key)_configuration.LeftJoycon.ButtonL));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (Key)_configuration.LeftJoycon.ButtonZl));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.LeftTrigger, (Key)_configuration.LeftJoycon.ButtonZl));
|
||||||
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (Key)_configuration.LeftJoycon.ButtonSr));
|
_buttonsUserMapping.Add(new ButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, (Key)_configuration.LeftJoycon.ButtonSr));
|
||||||
|
@ -178,6 +178,17 @@ namespace Ryujinx.Ava.UI.Models.Input
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GamepadInputId _buttonScreenshot;
|
||||||
|
public GamepadInputId ButtonScreenshot
|
||||||
|
{
|
||||||
|
get => _buttonScreenshot;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_buttonScreenshot = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private GamepadInputId _buttonL;
|
private GamepadInputId _buttonL;
|
||||||
public GamepadInputId ButtonL
|
public GamepadInputId ButtonL
|
||||||
{
|
{
|
||||||
@ -440,6 +451,7 @@ namespace Ryujinx.Ava.UI.Models.Input
|
|||||||
DpadRight = controllerInput.LeftJoycon.DpadRight;
|
DpadRight = controllerInput.LeftJoycon.DpadRight;
|
||||||
ButtonL = controllerInput.LeftJoycon.ButtonL;
|
ButtonL = controllerInput.LeftJoycon.ButtonL;
|
||||||
ButtonMinus = controllerInput.LeftJoycon.ButtonMinus;
|
ButtonMinus = controllerInput.LeftJoycon.ButtonMinus;
|
||||||
|
ButtonScreenshot = controllerInput.LeftJoycon.ButtonScreenshot;
|
||||||
LeftButtonSl = controllerInput.LeftJoycon.ButtonSl;
|
LeftButtonSl = controllerInput.LeftJoycon.ButtonSl;
|
||||||
LeftButtonSr = controllerInput.LeftJoycon.ButtonSr;
|
LeftButtonSr = controllerInput.LeftJoycon.ButtonSr;
|
||||||
ButtonZl = controllerInput.LeftJoycon.ButtonZl;
|
ButtonZl = controllerInput.LeftJoycon.ButtonZl;
|
||||||
@ -502,6 +514,7 @@ namespace Ryujinx.Ava.UI.Models.Input
|
|||||||
DpadRight = DpadRight,
|
DpadRight = DpadRight,
|
||||||
ButtonL = ButtonL,
|
ButtonL = ButtonL,
|
||||||
ButtonMinus = ButtonMinus,
|
ButtonMinus = ButtonMinus,
|
||||||
|
ButtonScreenshot = ButtonScreenshot,
|
||||||
ButtonSl = LeftButtonSl,
|
ButtonSl = LeftButtonSl,
|
||||||
ButtonSr = LeftButtonSr,
|
ButtonSr = LeftButtonSr,
|
||||||
ButtonZl = ButtonZl,
|
ButtonZl = ButtonZl,
|
||||||
|
@ -381,6 +381,7 @@ namespace Ryujinx.Ava.UI.Models.Input
|
|||||||
DpadRight = DpadRight,
|
DpadRight = DpadRight,
|
||||||
ButtonL = ButtonL,
|
ButtonL = ButtonL,
|
||||||
ButtonMinus = ButtonMinus,
|
ButtonMinus = ButtonMinus,
|
||||||
|
ButtonScreenshot = Key.Unbound, // keyboard screenshot configured via ConfigurationState.Hid.Hotkeys.Screenshot, so no gamepad mapping needed
|
||||||
ButtonZl = ButtonZl,
|
ButtonZl = ButtonZl,
|
||||||
ButtonSl = LeftButtonSl,
|
ButtonSl = LeftButtonSl,
|
||||||
ButtonSr = LeftButtonSr,
|
ButtonSr = LeftButtonSr,
|
||||||
|
@ -545,6 +545,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||||||
DpadLeft = Key.Left,
|
DpadLeft = Key.Left,
|
||||||
DpadRight = Key.Right,
|
DpadRight = Key.Right,
|
||||||
ButtonMinus = Key.Minus,
|
ButtonMinus = Key.Minus,
|
||||||
|
ButtonScreenshot = Key.Unbound, // keyboard already has a default screenshot configured via ConfigurationState.Hid.Hotkeys.Screenshot, so no gamepad mapping needed
|
||||||
ButtonL = Key.E,
|
ButtonL = Key.E,
|
||||||
ButtonZl = Key.Q,
|
ButtonZl = Key.Q,
|
||||||
ButtonSl = Key.Unbound,
|
ButtonSl = Key.Unbound,
|
||||||
@ -605,6 +606,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||||||
DpadLeft = ConfigGamepadInputId.DpadLeft,
|
DpadLeft = ConfigGamepadInputId.DpadLeft,
|
||||||
DpadRight = ConfigGamepadInputId.DpadRight,
|
DpadRight = ConfigGamepadInputId.DpadRight,
|
||||||
ButtonMinus = ConfigGamepadInputId.Minus,
|
ButtonMinus = ConfigGamepadInputId.Minus,
|
||||||
|
ButtonScreenshot = ConfigGamepadInputId.Misc1,
|
||||||
ButtonL = ConfigGamepadInputId.LeftShoulder,
|
ButtonL = ConfigGamepadInputId.LeftShoulder,
|
||||||
ButtonZl = ConfigGamepadInputId.LeftTrigger,
|
ButtonZl = ConfigGamepadInputId.LeftTrigger,
|
||||||
ButtonSl = ConfigGamepadInputId.Unbound,
|
ButtonSl = ConfigGamepadInputId.Unbound,
|
||||||
|
@ -311,6 +311,36 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
<!-- Screenshot -->
|
||||||
|
<Border
|
||||||
|
BorderBrush="{DynamicResource ThemeControlBorderColor}"
|
||||||
|
BorderThickness="1"
|
||||||
|
IsVisible="{Binding IsLeft}"
|
||||||
|
Margin="0,5,0,0"
|
||||||
|
CornerRadius="5">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
Orientation="Vertical">
|
||||||
|
<!-- Raw Screenshot -->
|
||||||
|
<StackPanel
|
||||||
|
Margin="0,0,0,4"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<TextBlock
|
||||||
|
Margin="0,0,10,0"
|
||||||
|
Width="120"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale ControllerSettingsRawScreenshot}"
|
||||||
|
ToolTip.Tip="{locale:Locale ControllerSettingsRawScreenshotTooltip}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
<ToggleButton Name="ButtonScreenshot">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding Config.ButtonScreenshot, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<!-- Triggers & Side Buttons -->
|
<!-- Triggers & Side Buttons -->
|
||||||
<StackPanel
|
<StackPanel
|
||||||
|
@ -84,6 +84,9 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
case "ButtonMinus":
|
case "ButtonMinus":
|
||||||
viewModel.Config.ButtonMinus = buttonValue.AsHidType<GamepadInputId>();
|
viewModel.Config.ButtonMinus = buttonValue.AsHidType<GamepadInputId>();
|
||||||
break;
|
break;
|
||||||
|
case "ButtonScreenshot":
|
||||||
|
viewModel.Config.ButtonScreenshot = buttonValue.AsHidType<GamepadInputId>();
|
||||||
|
break;
|
||||||
case "LeftStickButton":
|
case "LeftStickButton":
|
||||||
viewModel.Config.LeftStickButton = buttonValue.AsHidType<GamepadInputId>();
|
viewModel.Config.LeftStickButton = buttonValue.AsHidType<GamepadInputId>();
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user