Cleanup content_sao by factorizing similar code parts
authorRogier <rogier777@gmail.com>
Wed, 11 Jan 2017 19:25:25 +0000 (04:25 +0900)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Fri, 13 Jan 2017 20:56:24 +0000 (21:56 +0100)
Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
src/content_sao.cpp
src/content_sao.h

index c403a36732be087aa19bba39c6adba56a958af7a..852e2d788600baad300625579573d987e4256303 100644 (file)
@@ -123,6 +123,111 @@ UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos):
        // Initialize something to armor groups
        m_armor_groups["fleshy"] = 100;
 }
+
+bool UnitSAO::isAttached() const
+{
+       if (!m_attachment_parent_id)
+               return false;
+       // Check if the parent still exists
+       ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id);
+       if (obj)
+               return true;
+       return false;
+}
+
+void UnitSAO::setArmorGroups(const ItemGroupList &armor_groups)
+{
+       m_armor_groups = armor_groups;
+       m_armor_groups_sent = false;
+}
+
+const ItemGroupList &UnitSAO::getArmorGroups()
+{
+       return m_armor_groups;
+}
+
+void UnitSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
+{
+       // store these so they can be updated to clients
+       m_animation_range = frame_range;
+       m_animation_speed = frame_speed;
+       m_animation_blend = frame_blend;
+       m_animation_loop = frame_loop;
+       m_animation_sent = false;
+}
+
+void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
+{
+       *frame_range = m_animation_range;
+       *frame_speed = m_animation_speed;
+       *frame_blend = m_animation_blend;
+       *frame_loop = m_animation_loop;
+}
+
+void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
+{
+       // store these so they can be updated to clients
+       m_bone_position[bone] = core::vector2d<v3f>(position, rotation);
+       m_bone_position_sent = false;
+}
+
+void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation)
+{
+       *position = m_bone_position[bone].X;
+       *rotation = m_bone_position[bone].Y;
+}
+
+void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation)
+{
+       // Attachments need to be handled on both the server and client.
+       // If we just attach on the server, we can only copy the position of the parent. Attachments
+       // are still sent to clients at an interval so players might see them lagging, plus we can't
+       // read and attach to skeletal bones.
+       // If we just attach on the client, the server still sees the child at its original location.
+       // This breaks some things so we also give the server the most accurate representation
+       // even if players only see the client changes.
+
+       m_attachment_parent_id = parent_id;
+       m_attachment_bone = bone;
+       m_attachment_position = position;
+       m_attachment_rotation = rotation;
+       m_attachment_sent = false;
+}
+
+void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
+       v3f *rotation)
+{
+       *parent_id = m_attachment_parent_id;
+       *bone = m_attachment_bone;
+       *position = m_attachment_position;
+       *rotation = m_attachment_rotation;
+}
+
+void UnitSAO::addAttachmentChild(int child_id)
+{
+       m_attachment_child_ids.insert(child_id);
+}
+
+void UnitSAO::removeAttachmentChild(int child_id)
+{
+       m_attachment_child_ids.erase(child_id);
+}
+
+const UNORDERED_SET<int> &UnitSAO::getAttachmentChildIds()
+{
+       return m_attachment_child_ids;
+}
+
+ObjectProperties* UnitSAO::accessObjectProperties()
+{
+       return &m_prop;
+}
+
+void UnitSAO::notifyObjectPropertiesModified()
+{
+       m_properties_sent = false;
+}
+
 /*
        LuaEntitySAO
 */
@@ -220,17 +325,6 @@ ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos,
        return sao;
 }
 
-bool LuaEntitySAO::isAttached()
-{
-       if(!m_attachment_parent_id)
-               return false;
-       // Check if the parent still exists
-       ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id);
-       if(obj)
-               return true;
-       return false;
-}
-
 void LuaEntitySAO::step(float dtime, bool send_recommended)
 {
        if(!m_properties_sent)
@@ -427,7 +521,7 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
        return os.str();
 }
 
-std::string LuaEntitySAO::getStaticData()
+std::string LuaEntitySAO::getStaticData() const
 {
        verbosestream<<FUNCTION_NAME<<std::endl;
        std::ostringstream os(std::ios::binary);
@@ -560,97 +654,6 @@ s16 LuaEntitySAO::getHP() const
        return m_hp;
 }
 
-void LuaEntitySAO::setArmorGroups(const ItemGroupList &armor_groups)
-{
-       m_armor_groups = armor_groups;
-       m_armor_groups_sent = false;
-}
-
-const ItemGroupList &LuaEntitySAO::getArmorGroups()
-{
-       return m_armor_groups;
-}
-
-void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
-{
-       m_animation_range = frame_range;
-       m_animation_speed = frame_speed;
-       m_animation_blend = frame_blend;
-       m_animation_loop = frame_loop;
-       m_animation_sent = false;
-}
-
-void LuaEntitySAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
-{
-       *frame_range = m_animation_range;
-       *frame_speed = m_animation_speed;
-       *frame_blend = m_animation_blend;
-       *frame_loop = m_animation_loop;
-}
-
-void LuaEntitySAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
-{
-       m_bone_position[bone] = core::vector2d<v3f>(position, rotation);
-       m_bone_position_sent = false;
-}
-
-void LuaEntitySAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation)
-{
-       *position = m_bone_position[bone].X;
-       *rotation = m_bone_position[bone].Y;
-}
-
-void LuaEntitySAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation)
-{
-       // Attachments need to be handled on both the server and client.
-       // If we just attach on the server, we can only copy the position of the parent. Attachments
-       // are still sent to clients at an interval so players might see them lagging, plus we can't
-       // read and attach to skeletal bones.
-       // If we just attach on the client, the server still sees the child at its original location.
-       // This breaks some things so we also give the server the most accurate representation
-       // even if players only see the client changes.
-
-       m_attachment_parent_id = parent_id;
-       m_attachment_bone = bone;
-       m_attachment_position = position;
-       m_attachment_rotation = rotation;
-       m_attachment_sent = false;
-}
-
-void LuaEntitySAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
-       v3f *rotation)
-{
-       *parent_id = m_attachment_parent_id;
-       *bone = m_attachment_bone;
-       *position = m_attachment_position;
-       *rotation = m_attachment_rotation;
-}
-
-void LuaEntitySAO::addAttachmentChild(int child_id)
-{
-       m_attachment_child_ids.insert(child_id);
-}
-
-void LuaEntitySAO::removeAttachmentChild(int child_id)
-{
-       m_attachment_child_ids.erase(child_id);
-}
-
-const UNORDERED_SET<int> &LuaEntitySAO::getAttachmentChildIds()
-{
-       return m_attachment_child_ids;
-}
-
-ObjectProperties* LuaEntitySAO::accessObjectProperties()
-{
-       return &m_prop;
-}
-
-void LuaEntitySAO::notifyObjectPropertiesModified()
-{
-       m_properties_sent = false;
-}
-
 void LuaEntitySAO::setVelocity(v3f velocity)
 {
        m_velocity = velocity;
@@ -854,11 +857,6 @@ void PlayerSAO::removingFromEnvironment()
        }
 }
 
-bool PlayerSAO::isStaticAllowed() const
-{
-       return false;
-}
-
 std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
 {
        std::ostringstream os(std::ios::binary);
@@ -920,23 +918,12 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
        return os.str();
 }
 
-std::string PlayerSAO::getStaticData()
+std::string PlayerSAO::getStaticData() const
 {
        FATAL_ERROR("Deprecated function (?)");
        return "";
 }
 
-bool PlayerSAO::isAttached()
-{
-       if(!m_attachment_parent_id)
-               return false;
-       // Check if the parent still exists
-       ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id);
-       if(obj)
-               return true;
-       return false;
-}
-
 void PlayerSAO::step(float dtime, bool send_recommended)
 {
        if (m_drowning_interval.step(dtime, 2.0)) {
@@ -1224,10 +1211,6 @@ int PlayerSAO::punch(v3f dir,
        return hitparams.wear;
 }
 
-void PlayerSAO::rightClick(ServerActiveObject *)
-{
-}
-
 s16 PlayerSAO::readDamage()
 {
        s16 damage = m_damage;
@@ -1274,99 +1257,6 @@ void PlayerSAO::setBreath(const u16 breath, bool send)
                m_env->getGameDef()->SendPlayerBreath(this);
 }
 
-void PlayerSAO::setArmorGroups(const ItemGroupList &armor_groups)
-{
-       m_armor_groups = armor_groups;
-       m_armor_groups_sent = false;
-}
-
-const ItemGroupList &PlayerSAO::getArmorGroups()
-{
-       return m_armor_groups;
-}
-
-void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
-{
-       // store these so they can be updated to clients
-       m_animation_range = frame_range;
-       m_animation_speed = frame_speed;
-       m_animation_blend = frame_blend;
-       m_animation_loop = frame_loop;
-       m_animation_sent = false;
-}
-
-void PlayerSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
-{
-       *frame_range = m_animation_range;
-       *frame_speed = m_animation_speed;
-       *frame_blend = m_animation_blend;
-       *frame_loop = m_animation_loop;
-}
-
-void PlayerSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
-{
-       // store these so they can be updated to clients
-       m_bone_position[bone] = core::vector2d<v3f>(position, rotation);
-       m_bone_position_sent = false;
-}
-
-void PlayerSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation)
-{
-       *position = m_bone_position[bone].X;
-       *rotation = m_bone_position[bone].Y;
-}
-
-void PlayerSAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation)
-{
-       // Attachments need to be handled on both the server and client.
-       // If we just attach on the server, we can only copy the position of the parent. Attachments
-       // are still sent to clients at an interval so players might see them lagging, plus we can't
-       // read and attach to skeletal bones.
-       // If we just attach on the client, the server still sees the child at its original location.
-       // This breaks some things so we also give the server the most accurate representation
-       // even if players only see the client changes.
-
-       m_attachment_parent_id = parent_id;
-       m_attachment_bone = bone;
-       m_attachment_position = position;
-       m_attachment_rotation = rotation;
-       m_attachment_sent = false;
-}
-
-void PlayerSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
-       v3f *rotation)
-{
-       *parent_id = m_attachment_parent_id;
-       *bone = m_attachment_bone;
-       *position = m_attachment_position;
-       *rotation = m_attachment_rotation;
-}
-
-void PlayerSAO::addAttachmentChild(int child_id)
-{
-       m_attachment_child_ids.insert(child_id);
-}
-
-void PlayerSAO::removeAttachmentChild(int child_id)
-{
-       m_attachment_child_ids.erase(child_id);
-}
-
-const UNORDERED_SET<int> &PlayerSAO::getAttachmentChildIds()
-{
-       return m_attachment_child_ids;
-}
-
-ObjectProperties* PlayerSAO::accessObjectProperties()
-{
-       return &m_prop;
-}
-
-void PlayerSAO::notifyObjectPropertiesModified()
-{
-       m_properties_sent = false;
-}
-
 Inventory* PlayerSAO::getInventory()
 {
        return m_inventory;
index d5e9b2cbf1165d823339b416d2a47c6b046da0d3..4d6cf4dcfe3fa42a2446d383e70319bda308fb93 100644 (file)
@@ -40,6 +40,21 @@ public:
        s16 getHP() const { return m_hp; }
        // Use a function, if isDead can be defined by other conditions
        bool isDead() const { return m_hp == 0; }
+
+       bool isAttached() const;
+       void setArmorGroups(const ItemGroupList &armor_groups);
+       const ItemGroupList &getArmorGroups();
+       void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop);
+       void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop);
+       void setBonePosition(const std::string &bone, v3f position, v3f rotation);
+       void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
+       void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation);
+       void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation);
+       void addAttachmentChild(int child_id);
+       void removeAttachmentChild(int child_id);
+       const UNORDERED_SET<int> &getAttachmentChildIds();
+       ObjectProperties* accessObjectProperties();
+       void notifyObjectPropertiesModified();
 protected:
        s16 m_hp;
        float m_yaw;
@@ -85,10 +100,9 @@ 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(u16 protocol_version);
-       std::string getStaticData();
+       std::string getStaticData() const;
        int punch(v3f dir,
                        const ToolCapabilities *toolcap=NULL,
                        ServerActiveObject *puncher=NULL,
@@ -100,19 +114,6 @@ public:
        std::string getDescription();
        void setHP(s16 hp);
        s16 getHP() const;
-       void setArmorGroups(const ItemGroupList &armor_groups);
-       const ItemGroupList &getArmorGroups();
-       void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop);
-       void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop);
-       void setBonePosition(const std::string &bone, v3f position, v3f rotation);
-       void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
-       void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation);
-       void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation);
-       void addAttachmentChild(int child_id);
-       void removeAttachmentChild(int child_id);
-       const UNORDERED_SET<int> &getAttachmentChildIds();
-       ObjectProperties* accessObjectProperties();
-       void notifyObjectPropertiesModified();
        /* LuaEntitySAO-specific */
        void setVelocity(v3f velocity);
        v3f getVelocity();
@@ -196,10 +197,9 @@ public:
 
        void addedToEnvironment(u32 dtime_s);
        void removingFromEnvironment();
-       bool isStaticAllowed() const;
+       bool isStaticAllowed() const { return false; }
        std::string getClientInitializationData(u16 protocol_version);
-       std::string getStaticData();
-       bool isAttached();
+       std::string getStaticData() const;
        void step(float dtime, bool send_recommended);
        void setBasePosition(const v3f &position);
        void setPos(const v3f &pos);
@@ -227,25 +227,12 @@ public:
                const ToolCapabilities *toolcap,
                ServerActiveObject *puncher,
                float time_from_last_punch);
-       void rightClick(ServerActiveObject *clicker);
+       void rightClick(ServerActiveObject *clicker) {}
        void setHP(s16 hp);
        void setHPRaw(s16 hp) { m_hp = hp; }
        s16 readDamage();
        u16 getBreath() const { return m_breath; }
        void setBreath(const u16 breath, bool send = true);
-       void setArmorGroups(const ItemGroupList &armor_groups);
-       const ItemGroupList &getArmorGroups();
-       void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop);
-       void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop);
-       void setBonePosition(const std::string &bone, v3f position, v3f rotation);
-       void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
-       void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation);
-       void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation);
-       void addAttachmentChild(int child_id);
-       void removeAttachmentChild(int child_id);
-       const UNORDERED_SET<int> &getAttachmentChildIds();
-       ObjectProperties* accessObjectProperties();
-       void notifyObjectPropertiesModified();
 
        /*
                Inventory interface