/* * stats.h * Header file for stats * ____ _ * | _ \ ___ __ _| |_ __ ___ ___ * | |_) / _ \/ _` | | '_ ` _ \/ __| * | _ < __/ (_| | | | | | | \__ \ * |_| \_\___|\__,_|_|_| |_| |_|___/ * * Permission to use, modify and distribute is granted via the * Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License * http://creativecommons.org/licenses/by-nc-sa/3.0/ * * Copyright (C) 2007-2012 Jason Mitchell, Randi Mitchell * Contributions by Tim Callahan, Jonathan Hseu * Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman * */ #ifndef STAT_H_ #define STAT_H_ enum ModifierType { MOD_NONE = 0, MOD_CUR = 1, MOD_MAX = 2, MOD_CUR_MAX = 3, MOD_ALL = MOD_CUR_MAX }; class StatModifier { public: StatModifier(); StatModifier(bstring pName, int pModAmt, ModifierType pModType); StatModifier(xmlNodePtr curNode); StatModifier(StatModifier &sm); void save(xmlNodePtr parentNode); void adjust(int adjAmount); void set(int newAmt); void setType(ModifierType newType); bstring getName(); int getModAmt(); ModifierType getModType(); bstring toString(); private: bstring name; int modAmt; ModifierType modType; }; #ifndef PYTHON_CODE_GEN typedef std::map<bstring, StatModifier*, alphanum_less<bstring> > ModifierMap; #endif class Stat { public: Stat(); Stat& operator=(const Stat& cr); ~Stat(); void doCopy(const Stat& st); bstring toString(); friend std::ostream& operator<<(std::ostream& out, Stat& stat); void setName(bstring pName); bool load(xmlNodePtr curNode, bstring statName); bool loadModifiers(xmlNodePtr curNode); void save(xmlNodePtr parentNode, const char* statName) const; int increase(int amt); int decrease(int amt); int adjust(int amt); int getCur(bool recalc = true); int getMax(); int getInitial() const; void addInitial(int a); void setMax(int newMax, bool allowZero=false); void setCur(int newCur); void setInitial(int i); void setDirty(); void setInfluences(Stat* pInfluences); void setInfluencedBy(Stat* pInfluencedBy); int restore(); // Set a stat to it's maximum value void reCalc(); bool addModifier(StatModifier* toAdd); bool addModifier(bstring name, int modAmt, ModifierType modType); bool removeModifier(bstring name); bool adjustModifier(bstring name, int modAmt, ModifierType modType = MOD_CUR); bool setModifier(bstring name, int newAmt, ModifierType modType = MOD_CUR); void clearModifiers(); StatModifier* getModifier(bstring name); int getModifierAmt(bstring name); void upgradeSetCur(int newCur); // Used only in upgrading to new stats protected: bstring name; #ifndef PYTHON_CODE_GEN ModifierMap modifiers; #endif bool dirty; int cur; int max; int initial; Stat* influences; Stat* influencedBy; }; #endif /*STAT_H_*/