diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-05-12 10:41:31 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-05-12 10:41:31 -0600 |
commit | a2aa7c577b6d69b8185111a8ea8781957ce45b38 (patch) | |
tree | 5cd34f507fd16a9c66f7e83fffea3e94a49acaac /src/gui/partywindow.cpp | |
parent | fd47b191acef2230183cee1ab54901c777291e46 (diff) | |
download | mana-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.cpp | 32 |
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(); } |