From b1ebd9f79c63cf78b0e0fb2ea6f52d82cdfb95b6 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sat, 8 Jun 2013 23:42:46 +0000 Subject: [PATCH] Add a setting for max loop count per step in liquid update --- minetest.conf.example | 8 +++++++- src/defaultsettings.cpp | 1 + src/map.cpp | 8 ++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 4fd443db7..4306740e9 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -93,11 +93,17 @@ #new_style_water = false # Constant volume liquids #liquid_finite = false +# Max liquids processed per step +#liquid_loop_max = 1000 # Update liquids every .. recommend for finite: 0.2 #liquid_update = 1.0 -# When finite liquid: relax flowing blocks to source if level near max and N nearby source blocks, more realistic, but not true constant. values: 0,1,2,3,4 : 0 - disable, 1 - most aggresive +# Relax flowing blocks to source if level near max and N nearby +# source blocks, more realistic, but not true constant. +# values: 0,1,2,3,4 : 0 - disable, 1 - most aggresive +# (for finite liquids) #liquid_relax = 2 # Optimization: faster cave flood (and not true constant) +# (for finite liquids) #liquid_fast_flood = 1 # Underground water and lava springs, its infnity sources if liquid_finite enabled #underground_springs = 1 diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 71c283241..ffaa7a3c7 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -209,6 +209,7 @@ void set_default_settings(Settings *settings) //liquid stuff settings->setDefault("liquid_finite", "false"); + settings->setDefault("liquid_loop_max", "1000"); settings->setDefault("liquid_update", "1.0"); settings->setDefault("liquid_relax", "2"); settings->setDefault("liquid_fast_flood", "1"); 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++;