From 6a13899daed872debe2375c71903505e6434a731 Mon Sep 17 00:00:00 2001 From: Chuck Miller Date: Sat, 17 Jul 2010 21:01:26 -0400 Subject: Modify how attributes and stats are handled Handling moved from LocalPlayer to PlayerInfo class Event system used to update windows Reviewed-by: Jared Adams --- src/playerinfo.cpp | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/playerinfo.cpp (limited to 'src/playerinfo.cpp') diff --git a/src/playerinfo.cpp b/src/playerinfo.cpp new file mode 100644 index 00000000..203c26cc --- /dev/null +++ b/src/playerinfo.cpp @@ -0,0 +1,140 @@ +/* + * 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 . + */ + +#include "playerinfo.h" + +#include "event.h" +#include "eventmanager.h" + +PlayerInfoBackend PlayerInfo::mData; + +void PlayerInfo::setBackend(const PlayerInfoBackend &backend) +{ + mData = backend; +} + +// ------------------------------- Attributes -------------------------------------- + +int PlayerInfo::getAttribute(int id) +{ + IntMap::const_iterator it = mData.mAttributes.find(id); + if (it != mData.mAttributes.end()) + return it->second; + else + return 0; +} + +void PlayerInfo::setAttribute(int id, int value, bool notify) +{ + mData.mAttributes[id] = value; + if (notify) + triggerAttr(id); +} + +// ------------------------------- Stats -------------------------------------- + +int PlayerInfo::getStatBase(int id) +{ + StatMap::const_iterator it = mData.mStats.find(id); + if (it != mData.mStats.end()) + return it->second.base; + else + return 0; +} + +void PlayerInfo::setStatBase(int id, int value, bool notify) +{ + mData.mStats[id].base = value; + if (notify) + triggerStat(id); +} + +int PlayerInfo::getStatMod(int id) +{ + + StatMap::const_iterator it = mData.mStats.find(id); + if (it != mData.mStats.end()) + return it->second.mod; + else + return 0; +} + +void PlayerInfo::setStatMod(int id, int value, bool notify) +{ + mData.mStats[id].mod = value; + if (notify) + triggerStat(id); +} + +int PlayerInfo::getStatEffective(int id) +{ + StatMap::const_iterator it = mData.mStats.find(id); + if (it != mData.mStats.end()) + return it->second.base + it->second.mod; + else + return 0; +} + +std::pair PlayerInfo::getStatExperience(int id) +{ + StatMap::const_iterator it = mData.mStats.find(id); + int a, b; + if (it != mData.mStats.end()) + { + a = it->second.exp; + b = it->second.expneed; + } + else + { + a = 0; + b = 0; + } + return std::pair(a, b); +} + +void PlayerInfo::setStatExperience(int id, int have, int need, bool notify) +{ + mData.mStats[id].exp = have; + mData.mStats[id].expneed = need; + if (notify) + triggerStat(id); +} + +// ------------------------------- Triggers -------------------------------------- + +void PlayerInfo::triggerAttr(int id) +{ + Mana::Event event("UpdateAttribute"); + event.setInt("id", id); + event.setInt("value", mData.mAttributes.find(id)->second); + Mana::EventManager::trigger("Attributes", event); +} + +void PlayerInfo::triggerStat(int id) +{ + StatMap::iterator it = mData.mStats.find(id); + Mana::Event event("UpdateStat"); + event.setInt("id", id); + event.setInt("base", it->second.base); + event.setInt("mod", it->second.mod); + event.setInt("exp", it->second.exp); + event.setInt("expneeded", it->second.expneed); + Mana::EventManager::trigger("Attributes", event); +} -- cgit v1.2.3-60-g2f50