Permalink
Browse files

Actually pause singleplayer game in pause menu and use lower maximum …

…FPS in it
  • Loading branch information...
celeron55 committed Jan 6, 2014
1 parent 6833e04 commit 92aa38bdfc36fd7599a8e85722825381c89f0f9c
Showing with 40 additions and 16 deletions.
  1. +2 −0 minetest.conf.example
  2. +1 −0 src/defaultsettings.cpp
  3. +20 −15 src/game.cpp
  4. +3 −1 src/guiPauseMenu.h
  5. +2 −0 src/guiVolumeChange.h
  6. +11 −0 src/mainmenumanager.h
  7. +1 −0 src/modalMenu.h
@@ -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
@@ -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");
@@ -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);
}
}

{
@@ -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;
@@ -44,6 +44,8 @@ class GUIVolumeChange : public GUIModalMenu

bool OnEvent(const SEvent& event);

bool pausesGame(){ return true; }

private:
Client* m_client;

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

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

0 comments on commit 92aa38b

Please sign in to comment.