Selaa lähdekoodia

Toggle VSync Hotkey (#659)

* Added toggle vsync button and hotkeys section to config

* Uses hasflag instead of bitwise comparison

* fixed schema name

Co-Authored-By: BaronKiko <BaronKiko@users.noreply.github.com>
BaronKiko 7 vuotta sitten
vanhempi
sitoutus
50d6ec9efe

+ 10 - 0
Ryujinx.HLE/Input/HidHotkeyButtons.cs

@@ -0,0 +1,10 @@
+using System;
+
+namespace Ryujinx.HLE.Input
+{
+    [Flags]
+    public enum HidHotkeyButtons
+    {
+        ToggleVSync = 1 << 0,
+    }
+}

+ 4 - 0
Ryujinx/Config.jsonc

@@ -84,6 +84,10 @@
             "button_plus": "Plus",
             "button_r": "U",
             "button_zr": "O"
+        },
+
+        "hotkeys": {
+            "toggle_vsync": "Tab"
         }
     },
 

+ 15 - 3
Ryujinx/Ui/GLScreen.cs

@@ -22,6 +22,8 @@ namespace Ryujinx
 
         private IGalRenderer _renderer;
 
+        private HidHotkeyButtons _prevHotkeyButtons = 0;
+
         private KeyboardState? _keyboard = null;
 
         private MouseState? _mouse = null;
@@ -128,6 +130,7 @@ namespace Ryujinx
 
         private new void UpdateFrame()
         {
+            HidHotkeyButtons     currentHotkeyButtons = 0;
             HidControllerButtons currentButton = 0;
             HidJoystickPosition  leftJoystick;
             HidJoystickPosition  rightJoystick;
@@ -142,10 +145,10 @@ namespace Ryujinx
             {
                 KeyboardState keyboard = _keyboard.Value;
 
-                currentButton = Configuration.Instance.KeyboardControls.GetButtons(keyboard);
-
-                (leftJoystickDx, leftJoystickDy) = Configuration.Instance.KeyboardControls.GetLeftStick(keyboard);
+                currentHotkeyButtons = Configuration.Instance.KeyboardControls.GetHotkeyButtons(keyboard);
+                currentButton        = Configuration.Instance.KeyboardControls.GetButtons(keyboard);
 
+                (leftJoystickDx, leftJoystickDy)   = Configuration.Instance.KeyboardControls.GetLeftStick(keyboard);
                 (rightJoystickDx, rightJoystickDy) = Configuration.Instance.KeyboardControls.GetRightStick(keyboard);
             }
             
@@ -238,6 +241,15 @@ namespace Ryujinx
             HidControllerBase controller = _device.Hid.PrimaryController;
 
             controller.SendInput(currentButton, leftJoystick, rightJoystick);
+
+            // Toggle vsync
+            if (currentHotkeyButtons.HasFlag(HidHotkeyButtons.ToggleVSync) &&
+                !_prevHotkeyButtons.HasFlag(HidHotkeyButtons.ToggleVSync))
+            {
+                _device.EnableDeviceVsync = !_device.EnableDeviceVsync;
+            }
+
+            _prevHotkeyButtons = currentHotkeyButtons;
         }
 
         private new void RenderFrame()

+ 19 - 0
Ryujinx/Ui/NpadKeyboard.cs

@@ -35,6 +35,11 @@ namespace Ryujinx.UI.Input
         public Key ButtonZr;
     }
 
+    public struct KeyboardHotkeys
+    {
+        public Key ToggleVsync;
+    }
+
     public class NpadKeyboard
     {
         /// <summary>
@@ -47,6 +52,11 @@ namespace Ryujinx.UI.Input
         /// </summary>
         public NpadKeyboardRight RightJoycon { get; private set; }
 
+        /// <summary>
+        /// Hotkey Keyboard Bindings
+        /// </summary>
+        public KeyboardHotkeys Hotkeys { get; private set; }
+
         public HidControllerButtons GetButtons(KeyboardState keyboard)
         {
             HidControllerButtons buttons = 0;
@@ -97,5 +107,14 @@ namespace Ryujinx.UI.Input
 
             return (dx, dy);
         }
+
+        public HidHotkeyButtons GetHotkeyButtons(KeyboardState keyboard)
+        {
+            HidHotkeyButtons buttons = 0;
+
+            if (keyboard[(Key)Hotkeys.ToggleVsync]) buttons |= HidHotkeyButtons.ToggleVSync;
+
+            return buttons;
+        }
     }
 }

+ 18 - 3
Ryujinx/_schema.json

@@ -636,9 +636,24 @@
               "default": "O"
             }
           }
+        },
+        "hotkeys": {
+          "$id": "#/properties/keyboard_controls/properties/hotkeys",
+          "type": "object",
+          "title": "Hotkey Controls",
+          "required": [
+            "toggle_vsync"
+          ],
+          "properties": {
+            "toggle_vsync": {
+              "$id": "#/properties/keyboard_controls/properties/hotkeys/properties/toggle_vsync",
+              "$ref": "#/definitions/key",
+              "title": "Toggle VSync",
+              "default": "Tab"
+            }
+          }
         }
-      }
-    },
+      },
     "gamepad_controls": {
       "$id": "#/properties/gamepad_controls",
       "type": "object",
@@ -843,4 +858,4 @@
       }
     }
   }
-}
+}