Add check to pause game on lost window focus
authorrubenwardy <rw@rubenwardy.com>
Sun, 10 Sep 2017 02:17:47 +0000 (03:17 +0100)
committerparamat <mat.gregory@virginmedia.com>
Tue, 26 Dec 2017 21:53:45 +0000 (21:53 +0000)
builtin/settingtypes.txt
minetest.conf.example
src/defaultsettings.cpp
src/game.cpp

index 0d59789113b1b9ff8724cfb8b166c45dc3c91766..024018869a0af9043521e4f80d924135ea898f80 100644 (file)
@@ -536,6 +536,9 @@ fps_max (Maximum FPS) int 60
 #    Maximum FPS when game is paused.
 pause_fps_max (FPS in pause menu) int 20
 
+#    Open the pause menu when the window's focus is lost. Does not pause if a formspec is open.
+pause_on_lost_focus (Pause on lost window focus) bool false
+
 #    View distance in nodes.
 viewing_range (Viewing range) int 100 20 4000
 
index a112ce0e6cf57ab0647e231b23412af13ee187be..46d9ffe6557e16eb56cca7e105a749dea971a896 100644 (file)
 #    type: int
 # max_out_chat_queue_size = 20
 
+#    Open the pause menu when the window's focus is lost. Does not pause if a formspec is open.
+#    type: bool
+# pause_on_lost_focus = false
+
 ## Advanced
 
 #    Timeout for client to remove unused map data from memory.
index 3bd4f4ac671e24bac6f4a8f355c5a4dc05e59edc..130bb4a19bd3a809bab5a68c7897e53bf58552bb 100644 (file)
@@ -58,6 +58,7 @@ void set_default_settings(Settings *settings)
        settings->setDefault("enable_remote_media_server", "true");
        settings->setDefault("enable_client_modding", "false");
        settings->setDefault("max_out_chat_queue_size", "20");
+       settings->setDefault("pause_on_lost_focus", "false");
 
        // Keymap
        settings->setDefault("remote_port", "30000");
index f7d4164aed057edc879408998b760df073d44505..ac50e9abaf7bb45541059dbca4c8affb8c0621c1 100644 (file)
@@ -1487,6 +1487,8 @@ private:
        bool m_first_loop_after_window_activation = false;
        bool m_camera_offset_changed = false;
 
+       bool m_does_lost_focus_pause_game = false;
+
 #ifdef __ANDROID__
        bool m_cache_hold_aux1;
        bool m_android_chat_open;
@@ -1741,6 +1743,10 @@ void Game::run()
 
                // Update if minimap has been disabled by the server
                flags.show_minimap &= client->shouldShowMinimap();
+
+               if (m_does_lost_focus_pause_game && !device->isWindowFocused() && !isMenuActive()) {
+                       showPauseMenu();
+               }
        }
 }
 
@@ -4638,6 +4644,7 @@ void Game::readSettings()
        m_cache_cam_smoothing = rangelim(m_cache_cam_smoothing, 0.01f, 1.0f);
        m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0);
 
+       m_does_lost_focus_pause_game = g_settings->getBool("pause_on_lost_focus");
 }
 
 /****************************************************************************/