Connected nodes: fix 2 minor bugs
authorAuke Kok <sofar@foo-projects.org>
Sun, 13 Mar 2016 21:25:54 +0000 (14:25 -0700)
committerest31 <MTest31@outlook.com>
Mon, 14 Mar 2016 04:05:04 +0000 (05:05 +0100)
1. Copy-paste error: properly test for back-connection.

In the case of two different connected nodebox types, we want to
assure that if A connects to B, that B also connects to A. This test
was accidentally not implemented correctly.

2. Clear the connects_to_ids before deserializing.

With each new connected node, the deserialization code added more
and more targets to the map, since the map wasn't cleared in between
deserialization steps. This caused e.g. wall blocks to connect to
things in the fence connects_to map.

src/nodedef.cpp

index edd02d9f37bbc1f8bcd319ebfde85b37cbfd504e..3a2cb00b1df949be46d83ba3965175cb2279d39a 100644 (file)
@@ -479,6 +479,7 @@ void ContentFeatures::deSerialize(std::istream &is)
        collision_box.deSerialize(is);
        floodable = readU8(is);
        u16 connects_to_size = readU16(is);
+       connects_to_ids.clear();
        for (u16 i = 0; i < connects_to_size; i++)
                connects_to_ids.insert(readU16(is));
        connect_sides = readU8(is);
@@ -1546,7 +1547,7 @@ bool CNodeDefManager::nodeboxConnects(MapNode from, MapNode to, u8 connect_face)
 
        const ContentFeatures &f2 = get(to);
 
-       if ((f2.drawtype == NDT_NODEBOX) && (f1.node_box.type == NODEBOX_CONNECTED))
+       if ((f2.drawtype == NDT_NODEBOX) && (f2.node_box.type == NODEBOX_CONNECTED))
                // ignores actually looking if back connection exists
                return (f2.connects_to_ids.find(from.param0) != f2.connects_to_ids.end());