Add a setting for max loop count per step in liquid update
authorPilzAdam <pilzadam@minetest.net>
Sat, 8 Jun 2013 23:42:46 +0000 (23:42 +0000)
committerPilzAdam <pilzadam@minetest.net>
Thu, 20 Jun 2013 22:31:46 +0000 (22:31 +0000)
minetest.conf.example
src/defaultsettings.cpp
src/map.cpp

index 4fd443db784e901c49b054afd475cc64a2c2bdb7..4306740e9b7180a3c157ef3f176f4e5d525eda8d 100644 (file)
 #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
index 71c283241b28d96b0d465557ae59aebd29ff1654..ffaa7a3c71475b1e72c520e721c2c93111a437f7 100644 (file)
@@ -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");
index 7439076d37c54f0fbf0ebe5739d51a383a24fee4..001ae1609e3a26063ca396d31b5665a410eb2757 100644 (file)
@@ -1651,10 +1651,12 @@ void Map::transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks)
        // List of MapBlocks that will require a lighting update (due to lava)
        std::map<v3s16, MapBlock*> 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<v3s16, MapBlock*> & modified_blocks)
        // List of MapBlocks that will require a lighting update (due to lava)
        std::map<v3s16, MapBlock*> 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++;