diff options
author | sfan5 <sfan5@live.de> | 2022-05-26 22:14:22 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2022-05-29 14:00:19 +0200 |
commit | ea74680df4340172674adfc3335e6ba887c3f79e (patch) | |
tree | c7e185817ccf89d35af7cd6527daa14823d1988c | |
parent | bb671c308930dc4cb8d67e8eed3664a23499bd95 (diff) | |
download | minetest-ea74680df4340172674adfc3335e6ba887c3f79e.tar.gz minetest-ea74680df4340172674adfc3335e6ba887c3f79e.tar.bz2 minetest-ea74680df4340172674adfc3335e6ba887c3f79e.zip |
Immediately activate blocks when a player joins
issue: #10884
This makes it possible for objects to immediately be activated,
but doesn't guarantee it since blocks may still need be emerged.
-rw-r--r-- | src/serverenvironment.cpp | 8 | ||||
-rw-r--r-- | src/serverenvironment.h | 3 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 630c111c5..bff563a61 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -626,6 +626,9 @@ 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; + return playersao; } @@ -1332,8 +1335,10 @@ void ServerEnvironment::step(float dtime) /* Manage active block list */ - if (m_active_blocks_management_interval.step(dtime, m_cache_active_block_mgmt_interval)) { + if (m_active_blocks_mgmt_interval.step(dtime, m_cache_active_block_mgmt_interval) || + m_force_update_active_blocks) { ScopeProfiler sp(g_profiler, "ServerEnv: update active blocks", SPT_AVG); + /* Get player block positions */ @@ -1396,6 +1401,7 @@ void ServerEnvironment::step(float dtime) activateBlock(block); } } + m_force_update_active_blocks = false; /* Mess around in active blocks diff --git a/src/serverenvironment.h b/src/serverenvironment.h index 5dc329a60..223cd3420 100644 --- a/src/serverenvironment.h +++ b/src/serverenvironment.h @@ -454,7 +454,8 @@ private: IntervalLimiter m_object_management_interval; // List of active blocks ActiveBlockList m_active_blocks; - IntervalLimiter m_active_blocks_management_interval; + bool m_force_update_active_blocks = false; + IntervalLimiter m_active_blocks_mgmt_interval; IntervalLimiter m_active_block_modifier_interval; IntervalLimiter m_active_blocks_nodemetadata_interval; // Whether the variables below have been read from file yet |