From: Perttu Ahola Date: Mon, 6 Jan 2014 15:37:23 +0000 (+0200) Subject: Actually pause singleplayer game in pause menu and use lower maximum FPS in it X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=92aa38bdfc36fd7599a8e85722825381c89f0f9c;p=zefram%2Fminetest%2Fminetest_engine.git Actually pause singleplayer game in pause menu and use lower maximum FPS in it --- diff --git a/minetest.conf.example b/minetest.conf.example index 243c84f3..fa54bde8 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -68,6 +68,8 @@ # If FPS would go higher than this, limit it by sleeping # (to not waste CPU power for no benefit) #fps_max = 60 +# Maximum FPS when game is paused +#pause_fps_max = 20 # The allowed adjustment range for the automatic rendering range adjustment #viewing_range_nodes_max = 160 #viewing_range_nodes_min = 35 diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 5a1dabeb..a7187fae 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -77,6 +77,7 @@ void set_default_settings(Settings *settings) settings->setDefault("wanted_fps", "30"); settings->setDefault("fps_max", "60"); + settings->setDefault("pause_fps_max", "20"); // A bit more than the server will send around the player, to make fog blend well settings->setDefault("viewing_range_nodes_max", "240"); settings->setDefault("viewing_range_nodes_min", "35"); diff --git a/src/game.cpp b/src/game.cpp index c768440d..b751a2b6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1513,7 +1513,9 @@ void the_game( */ { - float fps_max = g_settings->getFloat("fps_max"); + float fps_max = g_menumgr.pausesGame() ? + g_settings->getFloat("pause_fps_max") : + g_settings->getFloat("fps_max"); u32 frametime_min = 1000./fps_max; if(busytime_u32 < frametime_min) @@ -2192,25 +2194,28 @@ void the_game( LocalPlayer* player = client.getEnv().getLocalPlayer(); player->keyPressed=keyPressed; } - + /* - Run server + Run server, client (and process environments) */ - - if(server != NULL) + bool can_be_and_is_paused = + (simple_singleplayer_mode && g_menumgr.pausesGame()); + if(can_be_and_is_paused) { - //TimeTaker timer("server->step(dtime)"); - server->step(dtime); + // No time passes + dtime = 0; } - - /* - Process environment - */ - + else { - //TimeTaker timer("client.step(dtime)"); - client.step(dtime); - //client.step(dtime_avg1); + if(server != NULL) + { + //TimeTaker timer("server->step(dtime)"); + server->step(dtime); + } + { + //TimeTaker timer("client.step(dtime)"); + client.step(dtime); + } } { diff --git a/src/guiPauseMenu.h b/src/guiPauseMenu.h index 25011a34..2808c93b 100644 --- a/src/guiPauseMenu.h +++ b/src/guiPauseMenu.h @@ -51,7 +51,9 @@ public: void drawMenu(); bool OnEvent(const SEvent& event); - + + bool pausesGame(){ return true; } + private: IGameCallback *m_gamecallback; bool m_simple_singleplayer_mode; diff --git a/src/guiVolumeChange.h b/src/guiVolumeChange.h index 1dcc7fbd..5258ee10 100644 --- a/src/guiVolumeChange.h +++ b/src/guiVolumeChange.h @@ -44,6 +44,8 @@ public: bool OnEvent(const SEvent& event); + bool pausesGame(){ return true; } + private: Client* m_client; diff --git a/src/mainmenumanager.h b/src/mainmenumanager.h index d151cf48..ecfb89fd 100644 --- a/src/mainmenumanager.h +++ b/src/mainmenumanager.h @@ -91,6 +91,17 @@ public: return m_stack.size(); } + bool pausesGame() + { + for(std::list::iterator + i = m_stack.begin(); i != m_stack.end(); ++i) + { + if((*i)->pausesGame()) + return true; + } + return false; + } + std::list m_stack; }; diff --git a/src/modalMenu.h b/src/modalMenu.h index c8b45a24..251b7aa3 100644 --- a/src/modalMenu.h +++ b/src/modalMenu.h @@ -124,6 +124,7 @@ public: virtual void drawMenu() = 0; virtual bool preprocessEvent(const SEvent& event) { return false; }; virtual bool OnEvent(const SEvent& event) { return false; }; + virtual bool pausesGame(){ return false; } // Used for pause menu protected: //bool m_force_regenerate_gui;