From 5aaa67fff05b496132afe6252d20f575daa988a1 Mon Sep 17 00:00:00 2001 From: xwalfie Date: Wed, 20 May 2026 11:14:31 +0200 Subject: [PATCH 1/3] feat: add vsync toggle for menus (#80) --- scripts/database/settings/SettingsProfile.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index 4d90762..0b3f7ad 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -243,6 +243,12 @@ public partial class SettingsProfile [Order] public SettingsItem FPS { get; private set; } + /// + /// Toggles V-Sync when in menus + /// + [Order] + public SettingsItem VSyncMenus { get; private set; } + #endregion #region Audio @@ -823,6 +829,17 @@ public SettingsProfile() UpdateAction = (value, _) => Engine.MaxFps = LockFPS.Value ? value : 0 }; + VSyncMenus = new(true) + { + Id = "VSyncMenus", + Title = "V-Sync in Menus", + Description = "Toggles V-Sync when in menus", + Section = SettingsSection.Video, + UpdateAction = (value, _) => DisplayServer.WindowSetVsyncMode( + value ? DisplayServer.VSyncMode.Enabled : DisplayServer.VSyncMode.Disabled + ) + }; + #endregion #region Audio From c7e30158635d10be0d86645618c679086da579e5 Mon Sep 17 00:00:00 2001 From: xwalfie Date: Thu, 21 May 2026 08:43:50 +0200 Subject: [PATCH 2/3] fix: check VSyncMenus setting in Load() methods --- scripts/scenes/LegacyRunner.cs | 2 -- scripts/scenes/MainMenu.cs | 2 +- scripts/scenes/Results.cs | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/scenes/LegacyRunner.cs b/scripts/scenes/LegacyRunner.cs index ee70ad0..ec68316 100644 --- a/scripts/scenes/LegacyRunner.cs +++ b/scripts/scenes/LegacyRunner.cs @@ -1343,8 +1343,6 @@ public override void Load() { base.Load(); - DisplayServer.WindowSetVsyncMode(DisplayServer.VSyncMode.Disabled); - MenuCursor.Instance.UpdateVisible(false, false); SceneManager.Space.UpdateState(true); SceneManager.Space.UpdateMap(CurrentAttempt.Map); diff --git a/scripts/scenes/MainMenu.cs b/scripts/scenes/MainMenu.cs index 25bac19..011470d 100644 --- a/scripts/scenes/MainMenu.cs +++ b/scripts/scenes/MainMenu.cs @@ -84,7 +84,7 @@ public override void Load() { base.Load(); - DisplayServer.WindowSetVsyncMode(DisplayServer.VSyncMode.Adaptive); + DisplayServer.WindowSetVsyncMode(SettingsManager.Instance.Settings.VSyncMenus.Value ? DisplayServer.VSyncMode.Enabled : DisplayServer.VSyncMode.Disabled); // Apply any map selection that was deferred while menu was off-tree (e.g. import from another scene) MapInfo.ApplyPendingSelection(); diff --git a/scripts/scenes/Results.cs b/scripts/scenes/Results.cs index 9cf51b6..01dba9d 100644 --- a/scripts/scenes/Results.cs +++ b/scripts/scenes/Results.cs @@ -156,7 +156,7 @@ public override void Load() { base.Load(); - DisplayServer.WindowSetVsyncMode(DisplayServer.VSyncMode.Adaptive); + DisplayServer.WindowSetVsyncMode(SettingsManager.Instance.Settings.VSyncMenus.Value ? DisplayServer.VSyncMode.Enabled : DisplayServer.VSyncMode.Disabled); } public void UpdateVolume() From 57f4fb055f92cf30c19fd0323109ea95b8c9703e Mon Sep 17 00:00:00 2001 From: xwalfie Date: Fri, 22 May 2026 09:03:22 +0200 Subject: [PATCH 3/3] fix: check LegacyRunner and use adaptive VSync --- scripts/Rhythia.cs | 3 ++- scripts/database/settings/SettingsProfile.cs | 11 ++++++++--- scripts/scenes/LegacyRunner.cs | 3 +++ scripts/scenes/MainMenu.cs | 2 +- scripts/scenes/Results.cs | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/scripts/Rhythia.cs b/scripts/Rhythia.cs index 88bf677..c33f4f2 100644 --- a/scripts/Rhythia.cs +++ b/scripts/Rhythia.cs @@ -160,7 +160,8 @@ public static void Quit() Discord.Client.Dispose(); Tween quitTween = Instance.CreateTween(); - quitTween.TweenCallback(Callable.From(() => { + quitTween.TweenCallback(Callable.From(() => + { Logger.Log("Quitting"); Instance.GetTree().Quit(); })).SetDelay(0.5); diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index 0b3f7ad..5e6aa4f 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -835,9 +835,14 @@ public SettingsProfile() Title = "V-Sync in Menus", Description = "Toggles V-Sync when in menus", Section = SettingsSection.Video, - UpdateAction = (value, _) => DisplayServer.WindowSetVsyncMode( - value ? DisplayServer.VSyncMode.Enabled : DisplayServer.VSyncMode.Disabled - ) + UpdateAction = (value, _) => + { + // TODO: Update this check when new runner is merged + if (SceneManager.Scene is not LegacyRunner) + { + DisplayServer.WindowSetVsyncMode(value ? DisplayServer.VSyncMode.Adaptive : DisplayServer.VSyncMode.Disabled); + } + } }; #endregion diff --git a/scripts/scenes/LegacyRunner.cs b/scripts/scenes/LegacyRunner.cs index ec68316..dbda8b2 100644 --- a/scripts/scenes/LegacyRunner.cs +++ b/scripts/scenes/LegacyRunner.cs @@ -1343,6 +1343,9 @@ public override void Load() { base.Load(); + // TODO: Update this when new runner is merged + DisplayServer.WindowSetVsyncMode(DisplayServer.VSyncMode.Disabled); + MenuCursor.Instance.UpdateVisible(false, false); SceneManager.Space.UpdateState(true); SceneManager.Space.UpdateMap(CurrentAttempt.Map); diff --git a/scripts/scenes/MainMenu.cs b/scripts/scenes/MainMenu.cs index 011470d..d89544f 100644 --- a/scripts/scenes/MainMenu.cs +++ b/scripts/scenes/MainMenu.cs @@ -84,7 +84,7 @@ public override void Load() { base.Load(); - DisplayServer.WindowSetVsyncMode(SettingsManager.Instance.Settings.VSyncMenus.Value ? DisplayServer.VSyncMode.Enabled : DisplayServer.VSyncMode.Disabled); + DisplayServer.WindowSetVsyncMode(SettingsManager.Instance.Settings.VSyncMenus ? DisplayServer.VSyncMode.Adaptive : DisplayServer.VSyncMode.Disabled); // Apply any map selection that was deferred while menu was off-tree (e.g. import from another scene) MapInfo.ApplyPendingSelection(); diff --git a/scripts/scenes/Results.cs b/scripts/scenes/Results.cs index 01dba9d..e8d1686 100644 --- a/scripts/scenes/Results.cs +++ b/scripts/scenes/Results.cs @@ -156,7 +156,7 @@ public override void Load() { base.Load(); - DisplayServer.WindowSetVsyncMode(SettingsManager.Instance.Settings.VSyncMenus.Value ? DisplayServer.VSyncMode.Enabled : DisplayServer.VSyncMode.Disabled); + DisplayServer.WindowSetVsyncMode(SettingsManager.Instance.Settings.VSyncMenus ? DisplayServer.VSyncMode.Adaptive : DisplayServer.VSyncMode.Disabled); } public void UpdateVolume()