1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-16 18:01:40 +00:00

Crafting definition in scripts

This commit is contained in:
Perttu Ahola 2011-11-17 02:28:46 +02:00
parent 8dd3622c6d
commit 9d5b458479
12 changed files with 634 additions and 57 deletions

View file

@ -70,25 +70,26 @@ public:
Quantity methods
*/
// Shall return true if the item can be add()ed to the other
// Return true if the item can be add()ed to the other
virtual bool addableTo(const InventoryItem *other) const
{
return false;
}
{ return false; }
// Return true if the other item contains this item
virtual bool isSubsetOf(const InventoryItem *other) const
{ return false; }
// Remove the other item from this one if possible and return true
// Return false if not possible
virtual bool removeOther(const InventoryItem *other)
{ return false; }
u16 getCount() const
{
return m_count;
}
{ return m_count; }
void setCount(u16 count)
{
m_count = count;
}
{ m_count = count; }
// This should return something else for stackable items
virtual u16 freeSpace() const
{
return 0;
}
{ return 0; }
void add(u16 count)
{
assert(m_count + count <= QUANTITY_ITEM_MAX_COUNT);
@ -168,6 +169,24 @@ public:
return false;
return true;
}
virtual bool isSubsetOf(const InventoryItem *other) const
{
if(std::string(other->getName()) != "MaterialItem")
return false;
MaterialItem *m = (MaterialItem*)other;
if(m->m_nodename != m_nodename)
return false;
return m_count <= m->m_count;
}
virtual bool removeOther(const InventoryItem *other)
{
if(!other->isSubsetOf(this))
return false;
MaterialItem *m = (MaterialItem*)other;
m_count += m->m_count;
return true;
}
u16 freeSpace() const
{
if(m_count > QUANTITY_ITEM_MAX_COUNT)
@ -245,6 +264,24 @@ public:
return false;
return true;
}
virtual bool isSubsetOf(const InventoryItem *other) const
{
if(std::string(other->getName()) != "CraftItem")
return false;
CraftItem *m = (CraftItem*)other;
if(m->m_subname != m_subname)
return false;
return m_count <= m->m_count;
}
virtual bool removeOther(const InventoryItem *other)
{
if(!other->isSubsetOf(this))
return false;
CraftItem *m = (CraftItem*)other;
m_count += m->m_count;
return true;
}
u16 freeSpace() const
{
if(m_count > QUANTITY_ITEM_MAX_COUNT)
@ -312,23 +349,26 @@ public:
std::string getText()
{
return "";
/*std::ostringstream os;
u16 f = 4;
u16 d = 65535/f;
u16 i;
for(i=0; i<(65535-m_wear)/d; i++)
os<<'X';
for(; i<f; i++)
os<<'-';
return os.str();*/
/*std::ostringstream os;
os<<m_toolname;
os<<" ";
os<<(m_wear/655);
return os.str();*/
}
virtual bool isSubsetOf(const InventoryItem *other) const
{
if(std::string(other->getName()) != "ToolItem")
return false;
ToolItem *m = (ToolItem*)other;
if(m->m_toolname != m_toolname)
return false;
return m_wear <= m->m_wear;
}
virtual bool removeOther(const InventoryItem *other)
{
if(!other->isSubsetOf(this))
return false;
ToolItem *m = (ToolItem*)other;
m_wear -= m->m_wear;
return true;
}
/*
Special methods
*/
@ -591,5 +631,12 @@ struct ItemSpec
*/
bool checkItemCombination(const InventoryItem * const*items, const ItemSpec *specs);
/*
items: a pointer to an array of 9 pointers to items
specs: a pointer to an array of 9 pointers to items
*/
bool checkItemCombination(const InventoryItem * const * items,
const InventoryItem * const * specs);
#endif