/*
* 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);
}