From 173b99c76aebe9fbec8260183c06ff11136c4c9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 6 Dec 2013 14:48:32 +0100 Subject: [PATCH 1/2] don't crash if max framerate is 0 fixes #4221 --- OpenRA.Game/Game.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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)); } } From 784284969eb11bd9955f28acbb54612c43611492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 6 Dec 2013 14:49:12 +0100 Subject: [PATCH 2/2] clamp the max framerate setting to useful borders and update on the fly --- OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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(); }; }