diff options
author | Chuck Miller <shadowmil@gmail.com> | 2010-07-17 21:01:26 -0400 |
---|---|---|
committer | Chuck Miller <shadowmil@gmail.com> | 2010-07-17 21:40:48 -0400 |
commit | 6a13899daed872debe2375c71903505e6434a731 (patch) | |
tree | faaf483d80c6e791ec182f6331697f06281b97c7 /src/playerinfo.h | |
parent | b738d67f76336641468e3f77cef472a52a6e5ad3 (diff) | |
download | mana-6a13899daed872debe2375c71903505e6434a731.tar.gz mana-6a13899daed872debe2375c71903505e6434a731.tar.bz2 mana-6a13899daed872debe2375c71903505e6434a731.tar.xz mana-6a13899daed872debe2375c71903505e6434a731.zip |
Modify how attributes and stats are handled
Handling moved from LocalPlayer to PlayerInfo class
Event system used to update windows
Reviewed-by: Jared Adams
Diffstat (limited to 'src/playerinfo.h')
-rw-r--r-- | src/playerinfo.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/playerinfo.h b/src/playerinfo.h new file mode 100644 index 00000000..421e93bc --- /dev/null +++ b/src/playerinfo.h @@ -0,0 +1,105 @@ +/* + * The Mana Client + * Copyright (C) 2010 The Mana Developers + * + * This file is part of The Mana Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef PLAYERINFO_H +#define PLAYERINFO_H + +#include <map> +#include <string> + +enum Attribute +{ + LEVEL, + HP, MAX_HP, + MP, MAX_MP, + EXP, EXP_NEEDED, + MONEY, + TOTAL_WEIGHT, MAX_WEIGHT, + SKILL_POINTS, + CHAR_POINTS, CORR_POINTS +}; + +struct Stat +{ + int base; + int mod; + int exp; + int expneed; +}; + +typedef std::map<int, int> IntMap; +typedef std::map<int, Stat> StatMap; + +struct PlayerInfoBackend +{ + public: + IntMap mAttributes; + StatMap mStats; +}; + +/** + * A database like class which holds global info about the localplayer + */ +class PlayerInfo +{ + // NOTE: All agruements for 'bool notify' is to determine if + // a event is to be triggered + public: + static void setBackend(const PlayerInfoBackend &backend); + + /** + * Attributes for things like money and exp + */ + static int getAttribute(int id); + + static void setAttribute(int id, int value, bool notify = true); + + + /** + * Stats are modifiable attributes basicilly, like str, crit, trade + */ + + static int getStatBase(int id); + + static void setStatBase(int id, int value, bool notify = true); + + static int getStatMod(int id); + + static void setStatMod(int id, int value, bool notify = true); + + // Base + mod + static int getStatEffective(int id); + + static void setStatLevel(int id, int value, bool notify = true); + + static std::pair<int, int> getStatExperience(int id); + + static void setStatExperience(int id, int have, int need, bool notify = true); + + private: + // Triggers send events for action. + static void triggerAttr(int id); + + static void triggerStat(int id); + + static PlayerInfoBackend mData; +}; + +#endif |