]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapblock.cpp
Implement urlencode and urldecode
[dragonfireclient.git] / src / mapblock.cpp
index 56d4416a4168767deef026a1f6a4188be24f95bf..eafb956d5057fd99fa2217f8b251b5c58a173edd 100644 (file)
@@ -21,8 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include <sstream>
 #include "map.h"
-// For g_settings
-#include "main.h"
 #include "light.h"
 #include "nodedef.h"
 #include "nodemetadata.h"
@@ -31,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "nameidmapping.h"
 #include "content_mapnode.h" // For legacy name-id mapping
 #include "content_nodemeta.h" // For legacy deserialization
+#include "serialization.h"
 #ifndef SERVER
 #include "mapblock_mesh.h"
 #endif
@@ -44,6 +43,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 
 MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy):
+               heat(0),
+               humidity(0),
+               heat_last_update(0),
+               humidity_last_update(0),
                m_parent(parent),
                m_pos(pos),
                m_gamedef(gamedef),
@@ -58,18 +61,13 @@ MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy):
                m_timestamp(BLOCK_TIMESTAMP_UNDEFINED),
                m_disk_timestamp(BLOCK_TIMESTAMP_UNDEFINED),
                m_usage_timer(0),
-               m_refcount(0),
-               heat_time(0),
-               heat(0),
-               humidity_time(0),
-               humidity(0)
+               m_refcount(0)
 {
        data = NULL;
        if(dummy == false)
                reallocate();
        
 #ifndef SERVER
-       //mesh_mutex.Init();
        mesh = NULL;
 #endif
 }
@@ -636,11 +634,21 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
                        // Node timers
                        m_node_timers.serialize(os, version);
                }
-       } else {
-               if(version >= 26){
-                       writeF1000(os, heat);
-                       writeF1000(os, humidity);
-               }
+       }
+}
+
+void MapBlock::serializeNetworkSpecific(std::ostream &os, u16 net_proto_version)
+{
+       if(data == NULL)
+       {
+               throw SerializationError("ERROR: Not writing dummy block.");
+       }
+
+       if(net_proto_version >= 21){
+               int version = 1;
+               writeU8(os, version);
+               writeF1000(os, heat);
+               writeF1000(os, humidity);
        }
 }
 
@@ -743,17 +751,30 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
                                        <<": Node timers (ver>=25)"<<std::endl);
                        m_node_timers.deSerialize(is, version);
                }
-       } else {
-               if(version >= 26){
-                       heat = readF1000(is);
-                       humidity = readF1000(is);
-               }
        }
                
        TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
                        <<": Done."<<std::endl);
 }
 
+void MapBlock::deSerializeNetworkSpecific(std::istream &is)
+{
+       try {
+               int version = readU8(is);
+               //if(version != 1)
+               //      throw SerializationError("unsupported MapBlock version");
+               if(version >= 1) {
+                       heat = readF1000(is);
+                       humidity = readF1000(is);
+               }
+       }
+       catch(SerializationError &e)
+       {
+               errorstream<<"WARNING: MapBlock::deSerializeNetworkSpecific(): Ignoring an error"
+                               <<": "<<e.what()<<std::endl;
+       }
+}
+
 /*
        Legacy serialization
 */