aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparamat <paramat@users.noreply.github.com>2017-06-15 22:48:26 +0100
committerparamat <mat.gregory@virginmedia.com>2017-06-16 02:17:25 +0100
commit212945c7a3a1b9873ab4ef54c4d0360c54573185 (patch)
treeb34c8799af2e9cfe7d3223c8b2041aaea90f8ac6
parent2ab09bb48659c60e5dab19c3380a245e3eb19a17 (diff)
downloadminetest-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.cpp18
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);
}