summaryrefslogtreecommitdiff
path: root/src/gui
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
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')
-rw-r--r--src/gui/minimap.cpp12
-rw-r--r--src/gui/partywindow.cpp32
2 files changed, 33 insertions, 11 deletions
diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp
index 17a7e82a..160c0722 100644
--- a/src/gui/minimap.cpp
+++ b/src/gui/minimap.cpp
@@ -31,7 +31,6 @@
#include "player.h"
#include "gui/palette.h"
-#include "gui/partywindow.h"
#include "resources/image.h"
#include "resources/resourcemanager.h"
@@ -182,6 +181,8 @@ void Minimap::draw(gcn::Graphics *graphics)
{
case Being::PLAYER:
{
+ const Player* player = static_cast<const Player*>(being);
+
Palette::ColorType type = Palette::PC;
if (being == player_node)
@@ -189,14 +190,15 @@ void Minimap::draw(gcn::Graphics *graphics)
type = Palette::SELF;
dotSize = 3;
}
- else if (partyWindow->findMember(being->getId()))
+ else if (player->isGM())
+ {
+ type = Palette::GM_NAME;
+ }
+ else if (player->isInParty())
{
type = Palette::PARTY;
}
- if (static_cast<const Player*>(being)->isGM())
- type = Palette::GM_NAME;
-
graphics->setColor(guiPalette->getColor(type));
break;
}
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();
}