Modify new ObjectProperties format to such that 0.4.3 will eat it

stable-0.4
Perttu Ahola 2012-11-29 19:44:58 +02:00
parent 30ec69c7d3
commit 69cdcea9fc
1 changed files with 31 additions and 56 deletions

View File

@ -74,86 +74,61 @@ std::string ObjectProperties::dump()
void ObjectProperties::serialize(std::ostream &os) const void ObjectProperties::serialize(std::ostream &os) const
{ {
writeU8(os, 2); // version writeU8(os, 1); // version
writeS16(os, hp_max); writeS16(os, hp_max);
writeU8(os, physical); writeU8(os, physical);
writeF1000(os, weight); writeF1000(os, weight);
writeV3F1000(os, collisionbox.MinEdge); writeV3F1000(os, collisionbox.MinEdge);
writeV3F1000(os, collisionbox.MaxEdge); writeV3F1000(os, collisionbox.MaxEdge);
os<<serializeString(visual); os<<serializeString(visual);
os<<serializeString(mesh);
writeV2F1000(os, visual_size); writeV2F1000(os, visual_size);
writeU16(os, textures.size()); writeU16(os, textures.size());
for(u32 i=0; i<textures.size(); i++){ for(u32 i=0; i<textures.size(); i++){
os<<serializeString(textures[i]); os<<serializeString(textures[i]);
} }
writeU16(os, colors.size());
for(u32 i=0; i<colors.size(); i++){
writeARGB8(os, colors[i]);
}
writeV2S16(os, spritediv); writeV2S16(os, spritediv);
writeV2S16(os, initial_sprite_basepos); writeV2S16(os, initial_sprite_basepos);
writeU8(os, is_visible); writeU8(os, is_visible);
writeU8(os, makes_footstep_sound); writeU8(os, makes_footstep_sound);
writeF1000(os, automatic_rotate); writeF1000(os, automatic_rotate);
// Stuff below should be moved to correct place in a version that otherwise changes // Added in protocol version 14
// the protocol version os<<serializeString(mesh);
writeU16(os, colors.size());
for(u32 i=0; i<colors.size(); i++){
writeARGB8(os, colors[i]);
}
// Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this
} }
void ObjectProperties::deSerialize(std::istream &is) void ObjectProperties::deSerialize(std::istream &is)
{ {
int version = readU8(is); int version = readU8(is);
if(version == 2) // In PROTOCOL_VERSION 14 if(version == 1)
{ {
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){}
}
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{ try{
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);
automatic_rotate = readF1000(is); automatic_rotate = readF1000(is);
mesh = deSerializeString(is);
u32 color_count = readU16(is);
for(u32 i=0; i<color_count; i++){
colors.push_back(readARGB8(is));
}
}catch(SerializationError &e){} }catch(SerializationError &e){}
} }
else else