summaryrefslogtreecommitdiff
path: root/src/content_sao.h
diff options
context:
space:
mode:
authorMirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>2012-11-07 18:42:38 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-11-25 19:14:24 +0200
commit9259d028ac99fc699df69ded128df60dece712b9 (patch)
tree68cf40af5899457bc8c76305a8ca172d1fb992d7 /src/content_sao.h
parent52fcb0b4b9c3e0f80881d0a9295e742687bdfb1c (diff)
downloadminetest-9259d028ac99fc699df69ded128df60dece712b9.tar.gz
minetest-9259d028ac99fc699df69ded128df60dece712b9.tar.bz2
minetest-9259d028ac99fc699df69ded128df60dece712b9.zip
Update attachments at the ending of the addToScene function for parents. And with this... *drum roll* Client-side attachments are at last functional and stick visibly.
Fix the last segmentation fault (apparently). So far attachments seem to be fully functional, although removing the parent causes children to go to origin 0,0,0 and possibly still cause such a fault (though this should already be addressed) Fix a bug in falling code where entities get stuck Also check if the parent has been removed server-side, and detach the child if so. Fixes children going to origin 0,0,0 when their parent is removed. Unset all attachment properties when permanently detaching (on both the client and server). Also store less data we don't need Create a separate function for detaching, and also update lua api documentation When a child is detached, update its position from the server to clients. This WILL cause it to get positioned slightly differently client side, as the server attachment system only copies parent origin and knows not about mesh / bone transformation. This prevents different clients seeing the object detached in different spots which is most correct Update the position of attached players to clients. An attached player will see himself move, but this is currently VERY ugly and laggy as it is done by the server (it probably must stay this way too) Use a different approach for locally attached players. This allows for smooth positio transitions to work, as well at the player turning around freely. Still buggy however
Diffstat (limited to 'src/content_sao.h')
-rw-r--r--src/content_sao.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/content_sao.h b/src/content_sao.h
index 9e79ec0e0..f6e0bac5b 100644
--- a/src/content_sao.h
+++ b/src/content_sao.h
@@ -46,6 +46,7 @@ public:
virtual void addedToEnvironment(u32 dtime_s);
static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
const std::string &data);
+ bool isAttached();
void step(float dtime, bool send_recommended);
std::string getClientInitializationData();
std::string getStaticData();
@@ -63,7 +64,7 @@ public:
void setArmorGroups(const ItemGroupList &armor_groups);
void setAnimations(v2f frames, float frame_speed, float frame_blend);
void setBonePosRot(std::string bone, v3f position, v3f rotation);
- void setAttachment(ServerActiveObject *parent, std::string bone, v3f position, v3f rotation);
+ void setAttachment(int parent_id, std::string bone, v3f position, v3f rotation);
ObjectProperties* accessObjectProperties();
void notifyObjectPropertiesModified();
/* LuaEntitySAO-specific */
@@ -107,8 +108,7 @@ private:
std::map<std::string, core::vector2d<v3f> > m_animation_bone;
bool m_animations_bone_sent;
-
- ServerActiveObject *m_parent;
+
int m_attachment_parent_id;
std::string m_attachment_bone;
v3f m_attachment_position;
@@ -142,6 +142,7 @@ public:
bool unlimitedTransferDistance() const;
std::string getClientInitializationData();
std::string getStaticData();
+ bool isAttached();
void step(float dtime, bool send_recommended);
void setBasePosition(const v3f &position);
void setPos(v3f pos);
@@ -162,7 +163,7 @@ public:
void setArmorGroups(const ItemGroupList &armor_groups);
void setAnimations(v2f frames, float frame_speed, float frame_blend);
void setBonePosRot(std::string bone, v3f position, v3f rotation);
- void setAttachment(ServerActiveObject *parent, std::string bone, v3f position, v3f rotation);
+ void setAttachment(int parent_id, std::string bone, v3f position, v3f rotation);
ObjectProperties* accessObjectProperties();
void notifyObjectPropertiesModified();
@@ -266,8 +267,7 @@ private:
std::map<std::string, core::vector2d<v3f> > m_animation_bone; // stores position and rotation for each bone name
bool m_animations_bone_sent;
-
- ServerActiveObject *m_parent;
+
int m_attachment_parent_id;
std::string m_attachment_bone;
v3f m_attachment_position;
@@ -276,7 +276,7 @@ private:
public:
// Some flags used by Server
- bool m_teleported;
+ bool m_moved;
bool m_inventory_not_sent;
bool m_hp_not_sent;
bool m_wielded_item_not_sent;