Skip to content

Commit

Permalink
Actually pause singleplayer game in pause menu and use lower maximum …
Browse files Browse the repository at this point in the history
…FPS in it
  • Loading branch information
celeron55 committed Jan 6, 2014
1 parent 6833e04 commit 92aa38b
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 16 deletions.
2 changes: 2 additions & 0 deletions minetest.conf.example
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/defaultsettings.cpp
Expand Up @@ -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");
Expand Down
35 changes: 20 additions & 15 deletions src/game.cpp
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
}
}

{
Expand Down
4 changes: 3 additions & 1 deletion src/guiPauseMenu.h
Expand Up @@ -51,7 +51,9 @@ class GUIPauseMenu : public GUIModalMenu
void drawMenu();

bool OnEvent(const SEvent& event);


bool pausesGame(){ return true; }

private:
IGameCallback *m_gamecallback;
bool m_simple_singleplayer_mode;
Expand Down
2 changes: 2 additions & 0 deletions src/guiVolumeChange.h
Expand Up @@ -44,6 +44,8 @@ class GUIVolumeChange : public GUIModalMenu

bool OnEvent(const SEvent& event);

bool pausesGame(){ return true; }

private:
Client* m_client;

Expand Down
11 changes: 11 additions & 0 deletions src/mainmenumanager.h
Expand Up @@ -91,6 +91,17 @@ class MainMenuManager : public IMenuManager
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;
};

Expand Down
1 change: 1 addition & 0 deletions src/modalMenu.h
Expand Up @@ -124,6 +124,7 @@ class GUIModalMenu : public gui::IGUIElement
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;
Expand Down

0 comments on commit 92aa38b

Please sign in to comment.