From e988df0fbdd9d568889a28640c189ae022e99f8e Mon Sep 17 00:00:00 2001 From: Kahrl Date: Sun, 2 Jun 2013 15:35:29 +0200 Subject: Add and implement setting max_clearobjects_extra_loaded_blocks. Now Environment::clearAllObjects() unloads unused blocks in an interval defined by max_clearobjects_extra_loaded_blocks (default 4096). --- src/map.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index 43502253b..7439076d3 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1510,6 +1510,11 @@ void Map::timerUpdate(float dtime, float unload_timeout, } } +void Map::unloadUnreferencedBlocks(std::list *unloaded_blocks) +{ + timerUpdate(0.0, -1.0, unloaded_blocks); +} + void Map::deleteSectors(std::list &list) { for(std::list::iterator j = list.begin(); @@ -3409,6 +3414,26 @@ void ServerMap::listAllLoadableBlocks(std::list &dst) } } +void ServerMap::listAllLoadedBlocks(std::list &dst) +{ + for(std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) + { + MapSector *sector = si->second; + + std::list blocks; + sector->getBlocks(blocks); + + for(std::list::iterator i = blocks.begin(); + i != blocks.end(); ++i) + { + MapBlock *block = (*i); + v3s16 p = block->getPos(); + dst.push_back(p); + } + } +} + void ServerMap::saveMapMeta() { DSTACK(__FUNCTION_NAME); -- cgit v1.2.3 From b1ebd9f79c63cf78b0e0fb2ea6f52d82cdfb95b6 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sat, 8 Jun 2013 23:42:46 +0000 Subject: Add a setting for max loop count per step in liquid update --- src/map.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index 7439076d3..001ae1609 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1651,10 +1651,12 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) // List of MapBlocks that will require a lighting update (due to lava) std::map lighting_modified_blocks; + u16 loop_max = g_settings->getU16("liquid_loop_max"); + while (m_transforming_liquid.size() > 0) { // This should be done here so that it is done when continue is used - if (loopcount >= initial_size || loopcount >= 1000) + if (loopcount >= initial_size || loopcount >= loop_max) break; loopcount++; /* @@ -1993,10 +1995,12 @@ void Map::transformLiquids(std::map & modified_blocks) // List of MapBlocks that will require a lighting update (due to lava) std::map lighting_modified_blocks; + u16 loop_max = g_settings->getU16("liquid_loop_max"); + while(m_transforming_liquid.size() != 0) { // This should be done here so that it is done when continue is used - if(loopcount >= initial_size || loopcount >= 10000) + if(loopcount >= initial_size || loopcount >= loop_max) break; loopcount++; -- cgit v1.2.3