diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-01-27 08:59:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-27 08:59:30 +0100 |
commit | b7a98e98500402c3bbdb6d56d0fe42b4f5b3cedb (patch) | |
tree | cc45c9609f5e0fe7714e33615b0defe5d42f4840 /src/content_sao.h | |
parent | 2a8953107181b4df6ff55d0ae214490575609f49 (diff) | |
download | minetest-b7a98e98500402c3bbdb6d56d0fe42b4f5b3cedb.tar.gz minetest-b7a98e98500402c3bbdb6d56d0fe42b4f5b3cedb.tar.bz2 minetest-b7a98e98500402c3bbdb6d56d0fe42b4f5b3cedb.zip |
Implement player attribute backend (#4155)
* This backend permit mods to store extra players attributes to a common interface.
* Add the obj:set_attribute(attr, value) Lua call
* Add the obj:get_attribute(attr) Lua call
Examples:
* player:set_attribute("home:home", "10,25,-78")
* player:get_attribute("default:mana")
Attributes are saved as a json in the player file in extended_attributes
key
They are saved only if a modification on the attributes occurs and loaded
when emergePlayer is called (they are attached to PlayerSAO).
Diffstat (limited to 'src/content_sao.h')
-rw-r--r-- | src/content_sao.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/content_sao.h b/src/content_sao.h index c3674fa2d..bbf244742 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -180,6 +180,7 @@ public: } }; +typedef UNORDERED_MAP<std::string, std::string> PlayerAttributes; class RemotePlayer; class PlayerSAO : public UnitSAO @@ -250,6 +251,39 @@ public: void setWieldIndex(int i); /* + Modding interface + */ + inline void setExtendedAttribute(const std::string &attr, const std::string &value) + { + m_extra_attributes[attr] = value; + m_extended_attributes_modified = true; + } + + inline bool getExtendedAttribute(const std::string &attr, std::string *value) + { + if (m_extra_attributes.find(attr) == m_extra_attributes.end()) + return false; + + *value = m_extra_attributes[attr]; + return true; + } + + inline const PlayerAttributes &getExtendedAttributes() + { + return m_extra_attributes; + } + + inline bool extendedAttributesModified() const + { + return m_extended_attributes_modified; + } + + inline void setExtendedAttributeModified(bool v) + { + m_extended_attributes_modified = v; + } + + /* PlayerSAO-specific */ @@ -343,6 +377,9 @@ private: f32 m_pitch; f32 m_fov; s16 m_wanted_range; + + PlayerAttributes m_extra_attributes; + bool m_extended_attributes_modified; public: float m_physics_override_speed; float m_physics_override_jump; |