Leveled nodebox backward compatibility
authorproller <proller@github.com>
Thu, 1 Aug 2013 20:50:58 +0000 (00:50 +0400)
committerproller <proller@github.com>
Thu, 1 Aug 2013 20:50:58 +0000 (00:50 +0400)
src/nodedef.cpp
src/nodedef.h

index 96dca730bf7785e1463ef43bbb627fbc76aa7b5f..53e4d63f5784e8b15a2d46f90e4e209e4a768d36 100644 (file)
@@ -46,10 +46,15 @@ void NodeBox::reset()
        wall_side = aabb3f(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2);
 }
 
-void NodeBox::serialize(std::ostream &os) const
+void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
 {
-       writeU8(os, 1); // version
-       writeU8(os, type);
+       int version = protocol_version >= 21 ? 2 : 1;
+       writeU8(os, version);
+
+       if (version == 1 && type == NODEBOX_LEVELED)
+               writeU8(os, NODEBOX_FIXED);
+       else
+               writeU8(os, type);
 
        if(type == NODEBOX_FIXED || type == NODEBOX_LEVELED)
        {
@@ -76,7 +81,7 @@ void NodeBox::serialize(std::ostream &os) const
 void NodeBox::deSerialize(std::istream &is)
 {
        int version = readU8(is);
-       if(version != 1)
+       if(version < 1 || version > 2)
                throw SerializationError("unsupported NodeBox version");
 
        reset();
@@ -274,8 +279,8 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version)
        writeU8(os, liquid_renewable);
        writeU8(os, light_source);
        writeU32(os, damage_per_second);
-       node_box.serialize(os);
-       selection_box.serialize(os);
+       node_box.serialize(os, protocol_version);
+       selection_box.serialize(os, protocol_version);
        writeU8(os, legacy_facedir_simple);
        writeU8(os, legacy_wallmounted);
        serializeSimpleSoundSpec(sound_footstep, os);
@@ -918,8 +923,8 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version)
                writeU8(os, liquid_viscosity);
                writeU8(os, light_source);
                writeU32(os, damage_per_second);
-               node_box.serialize(os);
-               selection_box.serialize(os);
+               node_box.serialize(os, protocol_version);
+               selection_box.serialize(os, protocol_version);
                writeU8(os, legacy_facedir_simple);
                writeU8(os, legacy_wallmounted);
                serializeSimpleSoundSpec(sound_footstep, os);
index 067861e62314de54db23eeb791e8080db2056926..714e1ba2c22f27c78dc8f6de0d58302852b0a4f2 100644 (file)
@@ -90,7 +90,7 @@ struct NodeBox
        { reset(); }
 
        void reset();
-       void serialize(std::ostream &os) const;
+       void serialize(std::ostream &os, u16 protocol_version) const;
        void deSerialize(std::istream &is);
 };