summaryrefslogtreecommitdiff
path: root/src/gui/partywindow.cpp
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-05-12 10:41:31 -0600
committerJared Adams <jaxad0127@gmail.com>2009-05-12 10:41:31 -0600
commita2aa7c577b6d69b8185111a8ea8781957ce45b38 (patch)
tree5cd34f507fd16a9c66f7e83fffea3e94a49acaac /src/gui/partywindow.cpp
parentfd47b191acef2230183cee1ab54901c777291e46 (diff)
downloadmana-a2aa7c577b6d69b8185111a8ea8781957ce45b38.tar.gz
mana-a2aa7c577b6d69b8185111a8ea8781957ce45b38.tar.bz2
mana-a2aa7c577b6d69b8185111a8ea8781957ce45b38.tar.xz
mana-a2aa7c577b6d69b8185111a8ea8781957ce45b38.zip
Handle in party status in a much saner way
Diffstat (limited to 'src/gui/partywindow.cpp')
-rw-r--r--src/gui/partywindow.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp
index cb514844..b13f4b0b 100644
--- a/src/gui/partywindow.cpp
+++ b/src/gui/partywindow.cpp
@@ -23,6 +23,9 @@
#include "gui/widgets/chattab.h"
+#include "beingmanager.h"
+#include "player.h"
+
#include "net/net.h"
#include "net/partyhandler.h"
@@ -105,12 +108,16 @@ int PartyWindow::findMember(const std::string &name) const
void PartyWindow::updateMember(int id, const std::string &memberName,
bool leader, bool online)
{
- PartyMember *player = findOrCreateMember(id);
- player->name = memberName;
- player->leader = leader;
- player->online = online;
- player->avatar->setName(memberName);
- player->avatar->setOnline(online);
+ PartyMember *member = findOrCreateMember(id);
+ member->name = memberName;
+ member->leader = leader;
+ member->online = online;
+ member->avatar->setName(memberName);
+ member->avatar->setOnline(online);
+
+ Player *player = dynamic_cast<Player*>(beingManager->findBeing(id));
+ if (player)
+ player->setInParty(true);
}
void PartyWindow::updateMemberHP(int id, int hp, int maxhp)
@@ -123,6 +130,10 @@ void PartyWindow::updateMemberHP(int id, int hp, int maxhp)
void PartyWindow::removeMember(int id)
{
mMembers.erase(id);
+
+ Player *player = dynamic_cast<Player*>(beingManager->findBeing(id));
+ if (player)
+ player->setInParty(false);
}
void PartyWindow::removeMember(const std::string &name)
@@ -189,10 +200,19 @@ void PartyWindow::action(const gcn::ActionEvent &event)
}
}
+void clearMembersSub(std::pair<int, PartyMember*> p)
+{
+ Player *player = dynamic_cast<Player*>(beingManager->findBeing(p.first));
+ if (player)
+ player->setInParty(false);
+}
+
void PartyWindow::clearMembers()
{
clearLayout();
+ std::for_each(mMembers.begin(), mMembers.end(), clearMembersSub);
+
delete_all(mMembers);
mMembers.clear();
}