@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
@@ -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():
@@ -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():
@@ -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()
@@ -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
@@ -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)
@@ -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 ) ;