Actually pause singleplayer game in pause menu and use lower maximum FPS in it

This commit is contained in:
Perttu Ahola 2014-01-06 17:37:23 +02:00
parent 6833e04bc5
commit 92aa38bdfc
7 changed files with 41 additions and 17 deletions

View File

@ -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

View File

@ -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");

View File

@ -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
*/
if(server != NULL)
/*
Run server, client (and process environments)
*/
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);
}
}
{

View File

@ -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;

View File

@ -44,6 +44,8 @@ public:
bool OnEvent(const SEvent& event);
bool pausesGame(){ return true; }
private:
Client* m_client;

View File

@ -91,6 +91,17 @@ public:
return m_stack.size();
}
bool pausesGame()
{
for(std::list<GUIModalMenu*>::iterator
i = m_stack.begin(); i != m_stack.end(); ++i)
{
if((*i)->pausesGame())
return true;
}
return false;
}
std::list<GUIModalMenu*> m_stack;
};

View File

@ -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;