OpenMW
|
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