summaryrefslogtreecommitdiff
path: root/src/object_properties.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-11-26 09:49:31 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-11-26 09:49:31 +0200
commit4fa4340b95165bb4cdc88ee6d7cf2d0609d6df13 (patch)
tree3c63243a79b56187d28cc89dadb43d5070ccdf2d /src/object_properties.cpp
parent197542c7ec19b41e865be1e84c6c6898de8514d1 (diff)
downloadminetest-4fa4340b95165bb4cdc88ee6d7cf2d0609d6df13.tar.gz
minetest-4fa4340b95165bb4cdc88ee6d7cf2d0609d6df13.tar.bz2
minetest-4fa4340b95165bb4cdc88ee6d7cf2d0609d6df13.zip
Proper versioning of new network-serialized stuff
Diffstat (limited to 'src/object_properties.cpp')
-rw-r--r--src/object_properties.cpp84
1 files changed, 58 insertions, 26 deletions
diff --git a/src/object_properties.cpp b/src/object_properties.cpp
index 79b3eaf72..3368a5883 100644
--- a/src/object_properties.cpp
+++ b/src/object_properties.cpp
@@ -74,7 +74,7 @@ std::string ObjectProperties::dump()
void ObjectProperties::serialize(std::ostream &os) const
{
- writeU8(os, 1); // version
+ writeU8(os, 2); // version
writeS16(os, hp_max);
writeU8(os, physical);
writeF1000(os, weight);
@@ -96,37 +96,69 @@ void ObjectProperties::serialize(std::ostream &os) const
writeU8(os, is_visible);
writeU8(os, makes_footstep_sound);
writeF1000(os, automatic_rotate);
+ // Stuff below should be moved to correct place in a version that otherwise changes
+ // the protocol version
}
void ObjectProperties::deSerialize(std::istream &is)
{
int version = readU8(is);
- if(version != 1) throw SerializationError(
- "unsupported ObjectProperties version");
- hp_max = readS16(is);
- physical = readU8(is);
- weight = readF1000(is);
- collisionbox.MinEdge = readV3F1000(is);
- collisionbox.MaxEdge = readV3F1000(is);
- visual = deSerializeString(is);
- mesh = deSerializeString(is);
- visual_size = readV2F1000(is);
- textures.clear();
- u32 texture_count = readU16(is);
- for(u32 i=0; i<texture_count; i++){
- textures.push_back(deSerializeString(is));
+ if(version == 2) // In PROTOCOL_VERSION 14
+ {
+ hp_max = readS16(is);
+ physical = readU8(is);
+ weight = readF1000(is);
+ collisionbox.MinEdge = readV3F1000(is);
+ collisionbox.MaxEdge = readV3F1000(is);
+ visual = deSerializeString(is);
+ mesh = deSerializeString(is);
+ visual_size = readV2F1000(is);
+ textures.clear();
+ u32 texture_count = readU16(is);
+ for(u32 i=0; i<texture_count; i++){
+ textures.push_back(deSerializeString(is));
+ }
+ u32 color_count = readU16(is);
+ for(u32 i=0; i<color_count; i++){
+ colors.push_back(readARGB8(is));
+ }
+ spritediv = readV2S16(is);
+ initial_sprite_basepos = readV2S16(is);
+ is_visible = readU8(is);
+ makes_footstep_sound = readU8(is);
+ automatic_rotate = readF1000(is);
+ // If you add anything here, insert it primarily inside the try-catch
+ // block to not need to increase the version.
+ try{
+ // Stuff below should be moved to correct place in a version that
+ // otherwise changes the protocol version
+ }catch(SerializationError &e){}
}
- u32 color_count = readU16(is);
- for(u32 i=0; i<color_count; i++){
- colors.push_back(readARGB8(is));
+ else if(version == 1) // In PROTOCOL_VERSION 13
+ {
+ hp_max = readS16(is);
+ physical = readU8(is);
+ weight = readF1000(is);
+ collisionbox.MinEdge = readV3F1000(is);
+ collisionbox.MaxEdge = readV3F1000(is);
+ visual = deSerializeString(is);
+ visual_size = readV2F1000(is);
+ textures.clear();
+ u32 texture_count = readU16(is);
+ for(u32 i=0; i<texture_count; i++){
+ textures.push_back(deSerializeString(is));
+ }
+ spritediv = readV2S16(is);
+ initial_sprite_basepos = readV2S16(is);
+ is_visible = readU8(is);
+ makes_footstep_sound = readU8(is);
+ try{
+ automatic_rotate = readF1000(is);
+ }catch(SerializationError &e){}
+ }
+ else
+ {
+ throw SerializationError("unsupported ObjectProperties version");
}
- spritediv = readV2S16(is);
- initial_sprite_basepos = readV2S16(is);
- is_visible = readU8(is);
- makes_footstep_sound = readU8(is);
- try{
- automatic_rotate = readF1000(is);
- }catch(SerializationError &e){}
}
-