summaryrefslogtreecommitdiff
path: root/src/object_properties.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/object_properties.cpp')
-rw-r--r--src/object_properties.cpp61
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);