From 2f59a0c840e9101c87e2d59fabf34116b3328121 Mon Sep 17 00:00:00 2001 From: Lars Hofhansl Date: Sat, 10 Dec 2016 10:31:17 -0800 Subject: [PATCH] Process ABMs in a spherical volume instead of cubic Increase active_block_range default to a 3 mapblock radius. --- builtin/settingtypes.txt | 2 +- minetest.conf.example | 2 +- src/defaultsettings.cpp | 2 +- src/environment.cpp | 7 +++++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 1818b5a18..3a740f3ca 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -758,7 +758,7 @@ active_object_send_range_blocks (Active object send range) int 3 # How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes). # In active blocks objects are loaded and ABMs run. -active_block_range (Active block range) int 2 +active_block_range (Active block range) int 3 # From how far blocks are sent to clients, stated in mapblocks (16 nodes). max_block_send_distance (Max block send distance) int 10 diff --git a/minetest.conf.example b/minetest.conf.example index 867d98584..b1d6c86bd 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -913,7 +913,7 @@ # How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes). # In active blocks objects are loaded and ABMs run. # type: int -# active_block_range = 2 +# active_block_range = 3 # From how far blocks are sent to clients, stated in mapblocks (16 nodes). # type: int diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 0b4be6322..5bcd7da3d 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -273,7 +273,7 @@ void set_default_settings(Settings *settings) settings->setDefault("profiler_print_interval", "0"); settings->setDefault("enable_mapgen_debug_info", "false"); settings->setDefault("active_object_send_range_blocks", "3"); - settings->setDefault("active_block_range", "2"); + settings->setDefault("active_block_range", "3"); //settings->setDefault("max_simultaneous_block_sends_per_client", "1"); // This causes frametime jitter on client side, or does it? settings->setDefault("max_simultaneous_block_sends_per_client", "10"); diff --git a/src/environment.cpp b/src/environment.cpp index 13c64b37c..3d4a2efc1 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -397,8 +397,11 @@ void fillRadiusBlock(v3s16 p0, s16 r, std::set &list) for(p.Y=p0.Y-r; p.Y<=p0.Y+r; p.Y++) for(p.Z=p0.Z-r; p.Z<=p0.Z+r; p.Z++) { - // Set in list - list.insert(p); + // limit to a sphere + if (p.getDistanceFrom(p0) <= r) { + // Set in list + list.insert(p); + } } }