diff options
Diffstat (limited to 'src/object_properties.cpp')
-rw-r--r-- | src/object_properties.cpp | 69 |
1 files changed, 48 insertions, 21 deletions
diff --git a/src/object_properties.cpp b/src/object_properties.cpp index e67b78b52..ec988a37d 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -18,8 +18,10 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "object_properties.h" +#include "irrlichttypes_bloated.h" #include "util/serialize.h" #include <sstream> +#include <map> #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" #define PP2(x) "("<<(x).X<<","<<(x).Y<<")" @@ -30,6 +32,7 @@ ObjectProperties::ObjectProperties(): weight(5), collisionbox(-0.5,-0.5,-0.5, 0.5,0.5,0.5), visual("sprite"), + mesh(""), visual_size(1,1), spritediv(1,1), initial_sprite_basepos(0,0), @@ -38,6 +41,7 @@ ObjectProperties::ObjectProperties(): automatic_rotate(0) { textures.push_back("unknown_object.png"); + colors.push_back(video::SColor(255,255,255,255)); } std::string ObjectProperties::dump() @@ -48,12 +52,18 @@ std::string ObjectProperties::dump() os<<", weight="<<weight; os<<", collisionbox="<<PP(collisionbox.MinEdge)<<","<<PP(collisionbox.MaxEdge); os<<", visual="<<visual; + os<<", mesh="<<mesh; os<<", visual_size="<<PP2(visual_size); os<<", textures=["; for(u32 i=0; i<textures.size(); i++){ os<<"\""<<textures[i]<<"\" "; } os<<"]"; + os<<", colors=["; + for(u32 i=0; i<colors.size(); i++){ + os<<"\""<<colors[i].getAlpha()<<","<<colors[i].getRed()<<","<<colors[i].getGreen()<<","<<colors[i].getBlue()<<"\" "; + } + os<<"]"; os<<", spritediv="<<PP2(spritediv); os<<", initial_sprite_basepos="<<PP2(initial_sprite_basepos); os<<", is_visible="<<is_visible; @@ -81,32 +91,49 @@ void ObjectProperties::serialize(std::ostream &os) const writeU8(os, is_visible); writeU8(os, makes_footstep_sound); writeF1000(os, automatic_rotate); + // Added in protocol version 14 + 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) { 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); - 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 == 1) + { + 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); + mesh = deSerializeString(is); + u32 color_count = readU16(is); + for(u32 i=0; i<color_count; i++){ + colors.push_back(readARGB8(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){} } - |