From 5f88cd98ada8fd59e4db68e969e17c09342c4ece Mon Sep 17 00:00:00 2001
From: ShadowNinja <noreply@gmail.com>
Date: Sun, 17 Mar 2013 11:53:04 -0400
Subject: [PATCH] Add FPS limit to menu clouds

---
 src/main.cpp | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/main.cpp b/src/main.cpp
index e5aa3017d..e4dbb8a54 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1597,7 +1597,7 @@ int main(int argc, char *argv[])
 				if(skip_main_menu == false)
 				{
 					video::IVideoDriver* driver = device->getVideoDriver();
-					
+					float fps_max = g_settings->getFloat("fps_max");
 					infostream<<"Waiting for other menus"<<std::endl;
 					while(device->run() && kill == false)
 					{
@@ -1690,8 +1690,28 @@ int main(int argc, char *argv[])
 						
 						// On some computers framerate doesn't seem to be
 						// automatically limited
-						if (!cloud_menu_background)
+						if (cloud_menu_background) {
+							// Time of frame without fps limit
+							float busytime;
+							u32 busytime_u32;
+							// not using getRealTime is necessary for wine
+							u32 time = device->getTimer()->getTime();
+							if(time > lasttime)
+								busytime_u32 = time - lasttime;
+							else
+								busytime_u32 = 0;
+							busytime = busytime_u32 / 1000.0;
+
+							// FPS limiter
+							u32 frametime_min = 1000./fps_max;
+			
+							if(busytime_u32 < frametime_min) {
+								u32 sleeptime = frametime_min - busytime_u32;
+								device->sleep(sleeptime);
+							}
+						} else {
 							sleep_ms(25);
+						}
 					}
 					
 					infostream<<"Dropping main menu"<<std::endl;
-- 
GitLab