forked from mirror/openmw-tes3mp
Issue #61: Implemented basic ingredient handling in Alchemy class
This commit is contained in:
parent
6469933ce8
commit
1cc2c2055f
2 changed files with 73 additions and 1 deletions
|
@ -11,6 +11,10 @@ void MWMechanics::Alchemy::setAlchemist (const MWWorld::Ptr& npc)
|
||||||
{
|
{
|
||||||
mNpc = npc;
|
mNpc = npc;
|
||||||
|
|
||||||
|
mIngredients.resize (4);
|
||||||
|
|
||||||
|
std::fill (mIngredients.begin(), mIngredients.end(), MWWorld::Ptr());
|
||||||
|
|
||||||
mTools.resize (4);
|
mTools.resize (4);
|
||||||
|
|
||||||
std::fill (mTools.begin(), mTools.end(), MWWorld::Ptr());
|
std::fill (mTools.begin(), mTools.end(), MWWorld::Ptr());
|
||||||
|
@ -44,3 +48,51 @@ MWMechanics::Alchemy::TToolsIterator MWMechanics::Alchemy::endTools() const
|
||||||
{
|
{
|
||||||
return mTools.end();
|
return mTools.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWMechanics::Alchemy::TIngredientsIterator MWMechanics::Alchemy::beginIngredients() const
|
||||||
|
{
|
||||||
|
return mIngredients.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
MWMechanics::Alchemy::TIngredientsIterator MWMechanics::Alchemy::endIngredients() const
|
||||||
|
{
|
||||||
|
return mIngredients.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MWMechanics::Alchemy::clear()
|
||||||
|
{
|
||||||
|
mNpc = MWWorld::Ptr();
|
||||||
|
mTools.clear();
|
||||||
|
mIngredients.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
int MWMechanics::Alchemy::addIngredient (const MWWorld::Ptr& ingredient)
|
||||||
|
{
|
||||||
|
// find a free slot
|
||||||
|
int slot = -1;
|
||||||
|
|
||||||
|
for (int i=0; i<static_cast<int> (mIngredients.size()); ++i)
|
||||||
|
if (mIngredients[i].isEmpty())
|
||||||
|
{
|
||||||
|
slot = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slot==-1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
for (TIngredientsIterator iter (mIngredients.begin()); iter!=mIngredients.end(); ++iter)
|
||||||
|
if (!iter->isEmpty() && ingredient.get<ESM::Ingredient>()==iter->get<ESM::Ingredient>())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
mIngredients[slot] = ingredient;
|
||||||
|
|
||||||
|
return slot;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MWMechanics::Alchemy::removeIngredient (int index)
|
||||||
|
{
|
||||||
|
if (index>=0 && index<static_cast<int> (mIngredients.size()))
|
||||||
|
mIngredients[index] = MWWorld::Ptr();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
{
|
{
|
||||||
/// \brief Potion creatin via alchemy skill
|
/// \brief Potion creation via alchemy skill
|
||||||
class Alchemy
|
class Alchemy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -15,10 +15,14 @@ namespace MWMechanics
|
||||||
typedef std::vector<MWWorld::Ptr> TToolsContainer;
|
typedef std::vector<MWWorld::Ptr> TToolsContainer;
|
||||||
typedef TToolsContainer::const_iterator TToolsIterator;
|
typedef TToolsContainer::const_iterator TToolsIterator;
|
||||||
|
|
||||||
|
typedef std::vector<MWWorld::Ptr> TIngredientsContainer;
|
||||||
|
typedef TIngredientsContainer::const_iterator TIngredientsIterator;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
MWWorld::Ptr mNpc;
|
MWWorld::Ptr mNpc;
|
||||||
TToolsContainer mTools;
|
TToolsContainer mTools;
|
||||||
|
TIngredientsContainer mIngredients;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -29,6 +33,22 @@ namespace MWMechanics
|
||||||
TToolsIterator beginTools() const;
|
TToolsIterator beginTools() const;
|
||||||
|
|
||||||
TToolsIterator endTools() const;
|
TToolsIterator endTools() const;
|
||||||
|
|
||||||
|
TIngredientsIterator beginIngredients() const;
|
||||||
|
|
||||||
|
TIngredientsIterator endIngredients() const;
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
///< Remove alchemist, tools and ingredients.
|
||||||
|
|
||||||
|
int addIngredient (const MWWorld::Ptr& ingredient);
|
||||||
|
///< Add ingredient into the next free slot.
|
||||||
|
///
|
||||||
|
/// \return Slot index or -1, if adding failed because of no free slot or the ingredient type being
|
||||||
|
/// listed already.
|
||||||
|
|
||||||
|
void removeIngredient (int index);
|
||||||
|
///< Remove ingredient from slot (calling this function on an empty slot is a no-op).
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue