summaryrefslogtreecommitdiff
path: root/src/playerinfo.h
diff options
context:
space:
mode:
authorChuck Miller <shadowmil@gmail.com>2010-07-17 21:01:26 -0400
committerChuck Miller <shadowmil@gmail.com>2010-07-17 21:40:48 -0400
commit6a13899daed872debe2375c71903505e6434a731 (patch)
treefaaf483d80c6e791ec182f6331697f06281b97c7 /src/playerinfo.h
parentb738d67f76336641468e3f77cef472a52a6e5ad3 (diff)
downloadmana-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.h105
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