]> git.lizzy.rs Git - minetest.git/commitdiff
Reduce active mgmt interval for a bit when a player joins. (#12925)
authorlhofhansl <larsh@apache.org>
Thu, 10 Nov 2022 23:25:38 +0000 (15:25 -0800)
committerGitHub <noreply@github.com>
Thu, 10 Nov 2022 23:25:38 +0000 (15:25 -0800)
src/serverenvironment.cpp
src/serverenvironment.h

index 4f4425d72446ae765d7eef7e72c08dc336501024..9a58074b112b93baf51c45b169dc1f05dcadc809 100644 (file)
@@ -633,8 +633,8 @@ PlayerSAO *ServerEnvironment::loadPlayer(RemotePlayer *player, bool *new_player,
        /* Add object to environment */
        addActiveObject(playersao);
 
-       // Update active blocks asap so objects in those blocks appear on the client
-       m_force_update_active_blocks = true;
+       // Update active blocks quickly for a bit so objects in those blocks appear on the client
+       m_fast_active_block_divider = 10;
 
        return playersao;
 }
@@ -1327,8 +1327,7 @@ void ServerEnvironment::step(float dtime)
        /*
                Manage active block list
        */
-       if (m_active_blocks_mgmt_interval.step(dtime, m_cache_active_block_mgmt_interval) ||
-               m_force_update_active_blocks) {
+       if (m_active_blocks_mgmt_interval.step(dtime, m_cache_active_block_mgmt_interval / m_fast_active_block_divider)) {
                ScopeProfiler sp(g_profiler, "ServerEnv: update active blocks", SPT_AVG);
 
                /*
@@ -1397,8 +1396,10 @@ void ServerEnvironment::step(float dtime)
 
                // Some blocks may be removed again by the code above so do this here
                m_active_block_gauge->set(m_active_blocks.size());
+
+               if (m_fast_active_block_divider > 1)
+                       --m_fast_active_block_divider;
        }
-       m_force_update_active_blocks = false;
 
        /*
                Mess around in active blocks
index 2ecd55ce8fb9d11c344e16982fc737d935abbac6..4eb7ab22ae2eb96c2c572f23521403d548b1bbb7 100644 (file)
@@ -462,7 +462,7 @@ class ServerEnvironment final : public Environment
        IntervalLimiter m_object_management_interval;
        // List of active blocks
        ActiveBlockList m_active_blocks;
-       bool m_force_update_active_blocks = false;
+       int m_fast_active_block_divider = 1;
        IntervalLimiter m_active_blocks_mgmt_interval;
        IntervalLimiter m_active_block_modifier_interval;
        IntervalLimiter m_active_blocks_nodemetadata_interval;