Make ToolItem and MaterialItem to convert names by aliases at creation time too (necessary for eg. crafting)

master
Perttu Ahola 2011-12-04 02:12:45 +02:00
parent 97c3bc408b
commit 6145a135bd
6 changed files with 37 additions and 24 deletions

View File

@ -246,7 +246,9 @@ MaterialItem::MaterialItem(IGameDef *gamedef, std::string nodename, u16 count):
{ {
if(nodename == "") if(nodename == "")
nodename = "unknown_block"; nodename = "unknown_block";
m_nodename = nodename;
// Convert directly to the correct name through aliases
m_nodename = gamedef->ndef()->getAlias(nodename);
} }
// Legacy constructor // Legacy constructor
MaterialItem::MaterialItem(IGameDef *gamedef, content_t content, u16 count): MaterialItem::MaterialItem(IGameDef *gamedef, content_t content, u16 count):
@ -309,6 +311,15 @@ content_t MaterialItem::getMaterial() const
ToolItem ToolItem
*/ */
ToolItem::ToolItem(IGameDef *gamedef, std::string toolname, u16 wear):
InventoryItem(gamedef, 1)
{
// Convert directly to the correct name through aliases
m_toolname = gamedef->tdef()->getAlias(toolname);
m_wear = wear;
}
std::string ToolItem::getImageBasename() const std::string ToolItem::getImageBasename() const
{ {
return m_gamedef->getToolDefManager()->getImagename(m_toolname); return m_gamedef->getToolDefManager()->getImagename(m_toolname);
@ -357,9 +368,7 @@ bool ToolItem::isKnown() const
CraftItem::CraftItem(IGameDef *gamedef, std::string subname, u16 count): CraftItem::CraftItem(IGameDef *gamedef, std::string subname, u16 count):
InventoryItem(gamedef, count) InventoryItem(gamedef, count)
{ {
// Convert directly to the correct name through aliases. // Convert directly to the correct name through aliases
// This is necessary because CraftItem callbacks are stored in
// Lua refenced by their correct name
m_subname = gamedef->cidef()->getAlias(subname); m_subname = gamedef->cidef()->getAlias(subname);
} }

View File

@ -331,12 +331,7 @@ private:
class ToolItem : public InventoryItem class ToolItem : public InventoryItem
{ {
public: public:
ToolItem(IGameDef *gamedef, std::string toolname, u16 wear): ToolItem(IGameDef *gamedef, std::string toolname, u16 wear);
InventoryItem(gamedef, 1)
{
m_toolname = toolname;
m_wear = wear;
}
/* /*
Implementation interface Implementation interface
*/ */

View File

@ -403,15 +403,8 @@ public:
} }
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 // Convert name according to possible alias
std::map<std::string, std::string>::const_iterator i; std::string name = getAlias(name_);
i = m_aliases.find(name);
if(i != m_aliases.end()){
/*infostream<<"ndef: alias active: "<<name<<" -> "<<i->second
<<std::endl;*/
name = i->second;
}
// Get id // Get id
return m_name_id_mapping.getId(name, result); return m_name_id_mapping.getId(name, result);
} }
@ -427,6 +420,14 @@ public:
getId(name, id); getId(name, id);
return get(id); return get(id);
} }
virtual std::string getAlias(const std::string &name) const
{
std::map<std::string, std::string>::const_iterator i;
i = m_aliases.find(name);
if(i != m_aliases.end())
return i->second;
return name;
}
// IWritableNodeDefManager // IWritableNodeDefManager
virtual void set(content_t c, const ContentFeatures &def) virtual void set(content_t c, const ContentFeatures &def)
{ {

View File

@ -253,6 +253,7 @@ public:
virtual bool getId(const std::string &name, content_t &result) const=0; virtual bool getId(const std::string &name, content_t &result) const=0;
virtual content_t getId(const std::string &name) const=0; virtual content_t getId(const std::string &name) const=0;
virtual const ContentFeatures& get(const std::string &name) const=0; virtual const ContentFeatures& get(const std::string &name) const=0;
virtual std::string getAlias(const std::string &name) const =0;
virtual void serialize(std::ostream &os)=0; virtual void serialize(std::ostream &os)=0;
}; };
@ -270,6 +271,7 @@ public:
virtual content_t getId(const std::string &name) const=0; virtual content_t getId(const std::string &name) const=0;
// If not found, returns the features of CONTENT_IGNORE // If not found, returns the features of CONTENT_IGNORE
virtual const ContentFeatures& get(const std::string &name) const=0; virtual const ContentFeatures& get(const std::string &name) const=0;
virtual std::string getAlias(const std::string &name) const =0;
// Register node definition // Register node definition
virtual void set(content_t c, const ContentFeatures &def)=0; virtual void set(content_t c, const ContentFeatures &def)=0;

View File

@ -96,12 +96,7 @@ public:
virtual const ToolDefinition* getToolDefinition(const std::string &toolname_) const virtual const ToolDefinition* getToolDefinition(const std::string &toolname_) const
{ {
// Convert name according to possible alias // Convert name according to possible alias
std::string toolname = toolname_; std::string toolname = getAlias(toolname_);
std::map<std::string, std::string>::const_iterator i;
i = m_aliases.find(toolname);
if(i != m_aliases.end()){
toolname = i->second;
}
// Get the definition // Get the definition
core::map<std::string, ToolDefinition*>::Node *n; core::map<std::string, ToolDefinition*>::Node *n;
n = m_tool_definitions.find(toolname); n = m_tool_definitions.find(toolname);
@ -130,6 +125,15 @@ public:
} }
return def->properties; return def->properties;
} }
virtual std::string getAlias(const std::string &name) const
{
std::map<std::string, std::string>::const_iterator i;
i = m_aliases.find(name);
if(i != m_aliases.end())
return i->second;
return name;
}
// IWritableToolDefManager
virtual bool registerTool(std::string toolname, const ToolDefinition &def) virtual bool registerTool(std::string toolname, const ToolDefinition &def)
{ {
infostream<<"registerTool: registering tool \""<<toolname<<"\""<<std::endl; infostream<<"registerTool: registering tool \""<<toolname<<"\""<<std::endl;

View File

@ -69,6 +69,7 @@ public:
virtual std::string getImagename(const std::string &toolname) const =0; virtual std::string getImagename(const std::string &toolname) const =0;
virtual ToolDiggingProperties getDiggingProperties( virtual ToolDiggingProperties getDiggingProperties(
const std::string &toolname) const =0; const std::string &toolname) const =0;
virtual std::string getAlias(const std::string &name) const =0;
virtual void serialize(std::ostream &os)=0; virtual void serialize(std::ostream &os)=0;
}; };
@ -82,6 +83,7 @@ public:
virtual std::string getImagename(const std::string &toolname) const =0; virtual std::string getImagename(const std::string &toolname) const =0;
virtual ToolDiggingProperties getDiggingProperties( virtual ToolDiggingProperties getDiggingProperties(
const std::string &toolname) const =0; const std::string &toolname) const =0;
virtual std::string getAlias(const std::string &name) const =0;
virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0; virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0;
virtual void clear()=0; virtual void clear()=0;