Show infotext for unknown items placed on ground

master
Perttu Ahola 2011-12-03 13:46:19 +02:00
parent fdf7b3bcdf
commit e494b5d422
3 changed files with 46 additions and 1 deletions

View File

@ -183,12 +183,16 @@ public:
{return &m_selection_box;} {return &m_selection_box;}
v3f getPosition() v3f getPosition()
{return m_position;} {return m_position;}
std::string infoText()
{return m_infotext;}
private: private:
core::aabbox3d<f32> m_selection_box; core::aabbox3d<f32> m_selection_box;
scene::IMeshSceneNode *m_node; scene::IMeshSceneNode *m_node;
v3f m_position; v3f m_position;
std::string m_inventorystring; std::string m_inventorystring;
std::string m_infotext;
}; };
/* /*
@ -530,7 +534,10 @@ ItemCAO::ItemCAO(IGameDef *gamedef, ClientEnvironment *env):
m_node(NULL), m_node(NULL),
m_position(v3f(0,10*BS,0)) m_position(v3f(0,10*BS,0))
{ {
ClientActiveObject::registerType(getType(), create); if(!gamedef && !env)
{
ClientActiveObject::registerType(getType(), create);
}
} }
ItemCAO::~ItemCAO() ItemCAO::~ItemCAO()
@ -694,6 +701,23 @@ void ItemCAO::initialize(const std::string &data)
} }
updateNodePos(); updateNodePos();
/*
Set infotext to item name if item cannot be deserialized
*/
try{
InventoryItem *item = NULL;
item = InventoryItem::deSerialize(m_inventorystring, m_gamedef);
if(item){
if(!item->isKnown())
m_infotext = "Unknown item: '" + m_inventorystring + "'";
}
delete item;
}
catch(SerializationError &e)
{
m_infotext = "Unknown item: '" + m_inventorystring + "'";
}
} }
/* /*

View File

@ -343,6 +343,13 @@ video::ITexture * ToolItem::getImageRaw() const
} }
#endif #endif
bool ToolItem::isKnown() const
{
IToolDefManager *tdef = m_gamedef->tdef();
const ToolDefinition *def = tdef->getToolDefinition(m_toolname);
return (def != NULL);
}
/* /*
CraftItem CraftItem
*/ */
@ -357,6 +364,13 @@ video::ITexture * CraftItem::getImage() const
} }
#endif #endif
bool CraftItem::isKnown() const
{
ICraftItemDefManager *cidef = m_gamedef->cidef();
const CraftItemDefinition *def = cidef->getCraftItemDefinition(m_subname);
return (def != NULL);
}
u16 CraftItem::getStackMax() const u16 CraftItem::getStackMax() const
{ {
ICraftItemDefManager *cidef = m_gamedef->cidef(); ICraftItemDefManager *cidef = m_gamedef->cidef();

View File

@ -64,6 +64,9 @@ public:
virtual std::string getText() { return ""; } virtual std::string getText() { return ""; }
// Returns the string used for inventory // Returns the string used for inventory
virtual std::string getItemString(); virtual std::string getItemString();
// Shall return false if item is not known and cannot be used
virtual bool isKnown() const { return true; }
/* /*
Quantity methods Quantity methods
@ -269,6 +272,8 @@ public:
return os.str(); return os.str();
} }
virtual bool isKnown() const;
virtual bool addableTo(const InventoryItem *other) const virtual bool addableTo(const InventoryItem *other) const
{ {
if(std::string(other->getName()) != "CraftItem") if(std::string(other->getName()) != "CraftItem")
@ -366,6 +371,8 @@ public:
{ {
return ""; return "";
} }
virtual bool isKnown() const;
virtual bool isSubsetOf(const InventoryItem *other) const virtual bool isSubsetOf(const InventoryItem *other) const
{ {