diff options
author | paramat <paramat@users.noreply.github.com> | 2017-06-15 22:48:26 +0100 |
---|---|---|
committer | paramat <mat.gregory@virginmedia.com> | 2017-06-16 02:17:25 +0100 |
commit | 212945c7a3a1b9873ab4ef54c4d0360c54573185 (patch) | |
tree | b34c8799af2e9cfe7d3223c8b2041aaea90f8ac6 | |
parent | 2ab09bb48659c60e5dab19c3380a245e3eb19a17 (diff) | |
download | minetest-212945c7a3a1b9873ab4ef54c4d0360c54573185.tar.gz minetest-212945c7a3a1b9873ab4ef54c4d0360c54573185.tar.bz2 minetest-212945c7a3a1b9873ab4ef54c4d0360c54573185.zip |
Mgv6 mudflow: Also check for 'ignore' nodes
Previously, when removing decorations we searched upwards and removed until we
found air or water. However, the node above the decoration can be 'ignore' if
a stacked decoration extends into the volume above the mapchunk. The result
could be a problematic column of air placed in the volume of 'ignore'. The
unnecessary placing of air also slows the function.
Add a check for 'ignore' nodes when removing decorations.
-rw-r--r-- | src/mapgen_v6.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 7bf2ea9db..34cc6b0fe 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -913,21 +913,25 @@ void MapgenV6::moveMud(u32 remove_index, u32 place_index, // use 'pos.X >= node_max.X' etc. if (pos.X >= node_max.X || pos.X <= node_min.X || pos.Y >= node_max.Z || pos.Y <= node_min.Z) { - // 'above remove' node is above removed mud. If it is not air and not - // water it is a decoration that needs removing. Also search upwards - // for a possible stacked decoration. + // 'above remove' node is above removed mud. If it is not air, water or + // 'ignore' it is a decoration that needs removing. Also search upwards + // to remove a possible stacked decoration. + // Check for 'ignore' because stacked decorations can penetrate into + // 'ignore' nodes above the mapchunk. while (vm->m_area.contains(above_remove_index) && vm->m_data[above_remove_index].getContent() != CONTENT_AIR && - vm->m_data[above_remove_index].getContent() != c_water_source) { + vm->m_data[above_remove_index].getContent() != c_water_source && + vm->m_data[above_remove_index].getContent() != CONTENT_IGNORE) { vm->m_data[above_remove_index] = n_air; vm->m_area.add_y(em, above_remove_index, 1); } - // Mud placed may have half-buried a tall decoration, search above and - // remove. + // Mud placed may have partially-buried a stacked decoration, search + // above and remove. vm->m_area.add_y(em, place_index, 1); while (vm->m_area.contains(place_index) && vm->m_data[place_index].getContent() != CONTENT_AIR && - vm->m_data[place_index].getContent() != c_water_source) { + vm->m_data[place_index].getContent() != c_water_source && + vm->m_data[place_index].getContent() != CONTENT_IGNORE) { vm->m_data[place_index] = n_air; vm->m_area.add_y(em, place_index, 1); } |