diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-12-03 23:50:31 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-12-03 23:50:31 +0200 |
commit | 4b00d4d9d2158fc65da39179448c03390f094987 (patch) | |
tree | 225075bfab4cd74f40b2c6e64cf4a9ee8ee04d2c /src/nodedef.cpp | |
parent | 6a5829788e3dbd4347933f78740ff43d1bcf9e5c (diff) | |
download | hax-minetest-server-4b00d4d9d2158fc65da39179448c03390f094987.tar.gz hax-minetest-server-4b00d4d9d2158fc65da39179448c03390f094987.zip |
Node definition aliases
Diffstat (limited to 'src/nodedef.cpp')
-rw-r--r-- | src/nodedef.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 9f2d4f0af..e2e5616f1 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -398,8 +398,18 @@ public: { return get(n.getContent()); } - virtual bool getId(const std::string &name, content_t &result) const + virtual bool getId(const std::string &name_, content_t &result) const { + std::string name = name_; + // Convert name according to possible alias + std::map<std::string, std::string>::const_iterator i; + i = m_aliases.find(name); + if(i != m_aliases.end()){ + /*infostream<<"ndef: alias active: "<<name<<" -> "<<i->second + <<std::endl;*/ + name = i->second; + } + // Get id return m_name_id_mapping.getId(name, result); } virtual content_t getId(const std::string &name) const @@ -438,6 +448,12 @@ public: m_content_features[c] = def; if(def.name != "") m_name_id_mapping.set(c, def.name); + + // Remove conflicting alias if it exists + bool alias_removed = (m_aliases.erase(def.name) != 0); + if(alias_removed) + infostream<<"ndef: erased alias "<<def.name + <<" because node was defined"<<std::endl; } virtual content_t set(const std::string &name, const ContentFeatures &def) @@ -476,6 +492,19 @@ public: f.material.diggability = DIGGABLE_NORMAL; return set(name, f); } + virtual void setAlias(const std::string &name, + const std::string &convert_to) + { + content_t id; + if(getId(name, id)){ + infostream<<"ndef: not setting alias "<<name<<" -> "<<convert_to + <<": "<<name<<" is already defined"<<std::endl; + return; + } + infostream<<"ndef: setting alias "<<name<<" -> "<<convert_to + <<std::endl; + m_aliases[name] = convert_to; + } virtual void updateTextures(ITextureSource *tsrc) { #ifndef SERVER @@ -639,8 +668,12 @@ public: } } private: + // Features indexed by id ContentFeatures m_content_features[MAX_CONTENT+1]; + // A mapping for fast converting back and forth between names and ids NameIdMapping m_name_id_mapping; + // Aliases for loading legacy crap + std::map<std::string, std::string> m_aliases; }; IWritableNodeDefManager* createNodeDefManager() |