OpenMW
apps/openmw/mwmechanics/alchemy.hpp
Go to the documentation of this file.
00001 #ifndef GAME_MWMECHANICS_ALCHEMY_H
00002 #define GAME_MWMECHANICS_ALCHEMY_H
00003 
00004 #include <vector>
00005 #include <set>
00006 
00007 #include <components/esm/effectlist.hpp>
00008 
00009 #include "../mwworld/ptr.hpp"
00010 
00011 namespace MWMechanics
00012 {
00013     struct EffectKey;
00014 
00016     class Alchemy
00017     {
00018         public:
00019         
00020             typedef std::vector<MWWorld::Ptr> TToolsContainer;
00021             typedef TToolsContainer::const_iterator TToolsIterator;
00022     
00023             typedef std::vector<MWWorld::Ptr> TIngredientsContainer;
00024             typedef TIngredientsContainer::const_iterator TIngredientsIterator;
00025 
00026             typedef std::vector<ESM::ENAMstruct> TEffectsContainer;
00027             typedef TEffectsContainer::const_iterator TEffectsIterator;
00028     
00029             enum Result
00030             {
00031                 Result_Success,
00032                 
00033                 Result_NoMortarAndPestle,
00034                 Result_LessThanTwoIngredients,
00035                 Result_NoName,
00036                 Result_NoEffects,
00037                 Result_RandomFailure
00038             };
00039     
00040         private:
00041     
00042             MWWorld::Ptr mAlchemist;
00043             TToolsContainer mTools;
00044             TIngredientsContainer mIngredients;
00045             TEffectsContainer mEffects;
00046             int mValue;
00047 
00048             std::set<EffectKey> listEffects() const;
00050 
00051             void applyTools (int flags, float& value) const;
00052 
00053             void updateEffects();
00054             
00055             const ESM::Potion *getRecord() const;
00057             
00058             void removeIngredients();
00061 
00062             void addPotion (const std::string& name);
00064             
00065             void increaseSkill();
00067             
00068             float getChance() const;
00070             
00071             int countIngredients() const;
00072             
00073         public:
00074         
00075             void setAlchemist (const MWWorld::Ptr& npc);
00078             
00079             TToolsIterator beginTools() const;
00081             
00082             TToolsIterator endTools() const;
00083             
00084             TIngredientsIterator beginIngredients() const;
00086             
00087             TIngredientsIterator endIngredients() const;
00088             
00089             void clear();
00091             
00092             int addIngredient (const MWWorld::Ptr& ingredient);
00097             
00098             void removeIngredient (int index);
00100             
00101             TEffectsIterator beginEffects() const;
00102             
00103             TEffectsIterator endEffects() const;
00104             
00105             std::string getPotionName() const;
00108             
00109             Result create (const std::string& name);
00114     };
00115 }
00116 
00117 #endif
00118