diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index be6bb2ac93..6ec7d4bd92 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -420,6 +420,12 @@ namespace OpenRA internal static void Run() { + if (Settings.Graphics.MaxFramerate < 1) + { + Settings.Graphics.MaxFramerate = new GraphicSettings().MaxFramerate; + Settings.Graphics.CapFramerate = false; + } + while (!quit) { var idealFrameTime = 1.0 / Settings.Graphics.MaxFramerate; @@ -431,7 +437,7 @@ namespace OpenRA { var waitTime = idealFrameTime - sw.ElapsedTime(); if (waitTime > 0) - System.Threading.Thread.Sleep( TimeSpan.FromSeconds(waitTime) ); + System.Threading.Thread.Sleep(TimeSpan.FromSeconds(waitTime)); } } diff --git a/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs index 925ca3d366..9e93fe7229 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs @@ -150,6 +150,14 @@ namespace OpenRA.Mods.RA.Widgets.Logic var frameLimitTextfield = panel.Get("FRAME_LIMIT_TEXTFIELD"); frameLimitTextfield.Text = ds.MaxFramerate.ToString(); + frameLimitTextfield.OnLoseFocus = () => + { + int fps; + int.TryParse(frameLimitTextfield.Text, out fps); + ds.MaxFramerate = fps.Clamp(20, 200); + frameLimitTextfield.Text = ds.MaxFramerate.ToString(); + }; + frameLimitTextfield.OnEnterKey = () => { frameLimitTextfield.YieldKeyboardFocus(); return true; }; frameLimitTextfield.IsDisabled = () => !ds.CapFramerate; return () => @@ -158,7 +166,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic int.TryParse(windowWidth.Text, out x); int.TryParse(windowHeight.Text, out y); ds.WindowedSize = new int2(x, y); - int.TryParse(frameLimitTextfield.Text, out ds.MaxFramerate); + frameLimitTextfield.YieldKeyboardFocus(); }; }