diff options
Diffstat (limited to 'src/object_properties.cpp')
-rw-r--r-- | src/object_properties.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/object_properties.cpp b/src/object_properties.cpp index c91384ada..eb26db8d3 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "object_properties.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<<")" @@ -31,6 +32,9 @@ ObjectProperties::ObjectProperties(): collisionbox(-0.5,-0.5,-0.5, 0.5,0.5,0.5), visual("sprite"), mesh(""), + animation_frames(1,1), + animation_speed(15), + animation_blend(0), visual_size(1,1), spritediv(1,1), initial_sprite_basepos(0,0), @@ -38,6 +42,8 @@ ObjectProperties::ObjectProperties(): makes_footstep_sound(false), automatic_rotate(0) { + animation_bone_position[""] = v3f(0,0,0); + animation_bone_rotation[""] = v3f(0,0,0); textures.push_back("unknown_object.png"); } @@ -50,7 +56,26 @@ std::string ObjectProperties::dump() os<<", collisionbox="<<PP(collisionbox.MinEdge)<<","<<PP(collisionbox.MaxEdge); os<<", visual="<<visual; os<<", mesh="<<mesh; + os<<", animation_frames="<<animation_frames.X<<","<<animation_frames.Y; + os<<", animation_speed="<<animation_speed; + os<<", animation_blend="<<animation_blend; os<<", visual_size="<<PP2(visual_size); + + os<<", animation_bone_position=["; + for(std::map<std::string, v3f>::const_iterator ii = animation_bone_position.begin(); ii != animation_bone_position.end(); ++ii){ + std::string bone_name = (*ii).first; + v3f bone_pos = (*ii).second; + os<<bone_name<<" "<<bone_pos.X<<","<<bone_pos.Y<<","<<bone_pos.Z<<"\""; + } + os<<"]"; + os<<", animation_bone_rotation=["; + for(std::map<std::string, v3f>::const_iterator ii = animation_bone_rotation.begin(); ii != animation_bone_rotation.end(); ++ii){ + std::string bone_name = (*ii).first; + v3f bone_rot = (*ii).second; + os<<bone_name<<" "<<bone_rot.X<<","<<bone_rot.Y<<","<<bone_rot.Z<<"\""; + } + os<<"]"; + os<<", textures=["; for(u32 i=0; i<textures.size(); i++){ os<<"\""<<textures[i]<<"\" "; @@ -74,11 +99,28 @@ void ObjectProperties::serialize(std::ostream &os) const writeV3F1000(os, collisionbox.MaxEdge); os<<serializeString(visual); os<<serializeString(mesh); + writeF1000(os, animation_frames.X); + writeF1000(os, animation_frames.Y); + writeF1000(os, animation_speed); + writeF1000(os, animation_blend); + + writeU16(os, animation_bone_position.size()); + for(std::map<std::string, v3f>::const_iterator ii = animation_bone_position.begin(); ii != animation_bone_position.end(); ++ii){ + os<<serializeString((*ii).first); + writeV3F1000(os, (*ii).second); + } + writeU16(os, animation_bone_rotation.size()); + for(std::map<std::string, v3f>::const_iterator ii = animation_bone_rotation.begin(); ii != animation_bone_rotation.end(); ++ii){ + os<<serializeString((*ii).first); + writeV3F1000(os, (*ii).second); + } + writeV2F1000(os, visual_size); writeU16(os, textures.size()); for(u32 i=0; i<textures.size(); i++){ os<<serializeString(textures[i]); } + writeV2S16(os, spritediv); writeV2S16(os, initial_sprite_basepos); writeU8(os, is_visible); @@ -98,12 +140,31 @@ void ObjectProperties::deSerialize(std::istream &is) collisionbox.MaxEdge = readV3F1000(is); visual = deSerializeString(is); mesh = deSerializeString(is); + animation_frames.X = readF1000(is); + animation_frames.Y = readF1000(is); + animation_speed = readF1000(is); + animation_blend = readF1000(is); + + u32 animation_bone_position_count = readU16(is); + for(u32 i=0; i<animation_bone_position_count; i++){ + std::string bone_name = deSerializeString(is); + v3f bone_pos = readV3F1000(is); + animation_bone_position[bone_name] = bone_pos; + } + u32 animation_bone_rotation_count = readU16(is); + for(u32 i=0; i<animation_bone_rotation_count; i++){ + std::string bone_name = deSerializeString(is); + v3f bone_rot = readV3F1000(is); + animation_bone_rotation[bone_name] = bone_rot; + } + 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); |