summaryrefslogtreecommitdiff
path: root/src/content_sao.h
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2017-01-27 08:59:30 +0100
committerGitHub <noreply@github.com>2017-01-27 08:59:30 +0100
commitb7a98e98500402c3bbdb6d56d0fe42b4f5b3cedb (patch)
treecc45c9609f5e0fe7714e33615b0defe5d42f4840 /src/content_sao.h
parent2a8953107181b4df6ff55d0ae214490575609f49 (diff)
downloadminetest-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.h37
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;