Convert CraftItems directly to the name pointed by alias; necessary due to lua definition table

master
Perttu Ahola 2011-12-04 01:16:22 +02:00
parent 2b8b2a4f30
commit 4ad8891e05
4 changed files with 20 additions and 11 deletions

View File

@ -88,12 +88,7 @@ public:
virtual const CraftItemDefinition* getCraftItemDefinition(const std::string &itemname_) const
{
// Convert name according to possible alias
std::string itemname = itemname_;
std::map<std::string, std::string>::const_iterator i;
i = m_aliases.find(itemname);
if(i != m_aliases.end()){
itemname = i->second;
}
std::string itemname = getAlias(itemname_);
// Get the definition
core::map<std::string, CraftItemDefinition*>::Node *n;
n = m_item_definitions.find(itemname);
@ -108,6 +103,14 @@ public:
return "";
return def->imagename;
}
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;
}
virtual bool registerCraftItem(std::string itemname, const CraftItemDefinition &def)
{
infostream<<"registerCraftItem: registering CraftItem \""<<itemname<<"\""<<std::endl;

View File

@ -49,6 +49,7 @@ public:
virtual ~ICraftItemDefManager(){}
virtual const CraftItemDefinition* getCraftItemDefinition(const std::string &itemname) const=0;
virtual std::string getImagename(const std::string &itemname) const =0;
virtual std::string getAlias(const std::string &name) const =0;
virtual void serialize(std::ostream &os)=0;
};

View File

@ -354,6 +354,15 @@ bool ToolItem::isKnown() const
CraftItem
*/
CraftItem::CraftItem(IGameDef *gamedef, std::string subname, u16 count):
InventoryItem(gamedef, count)
{
// 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);
}
#ifndef SERVER
video::ITexture * CraftItem::getImage() const
{

View File

@ -238,11 +238,7 @@ private:
class CraftItem : public InventoryItem
{
public:
CraftItem(IGameDef *gamedef, std::string subname, u16 count):
InventoryItem(gamedef, count)
{
m_subname = subname;
}
CraftItem(IGameDef *gamedef, std::string subname, u16 count);
/*
Implementation interface
*/