From 6d349121a70377723e53b92a8990e56ee3e4fd88 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 31 Aug 2011 01:19:09 +0300 Subject: Always draw party members on same map in minimap. --- src/gui/minimap.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++---- src/party.h | 6 +++++- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp index dedf8077d..c3a4417f6 100644 --- a/src/gui/minimap.cpp +++ b/src/gui/minimap.cpp @@ -29,6 +29,7 @@ #include "localplayer.h" #include "logger.h" #include "map.h" +#include "party.h" #include "gui/userpalette.h" #include "gui/setup.h" @@ -275,10 +276,6 @@ void Minimap::draw(gcn::Graphics *graphics) { type = UserPalette::GM; } - else if (being->isInParty()) - { - type = UserPalette::PARTY; - } else if (being->getGuild() == player_node->getGuild() || being->getGuildName() == player_node->getGuildName()) { @@ -322,6 +319,49 @@ void Minimap::draw(gcn::Graphics *graphics) dotSize, dotSize)); } + if (player_node->isInParty()) + { + Party *party = player_node->getParty(); + if (party) + { + PartyMember *m = party->getMember(player_node->getName()); + Party::MemberList *members = party->getMembers(); + if (m && members) + { + const std::string curMap = m->getMap(); + Party::MemberList::const_iterator it = members->begin(); + const Party::MemberList::const_iterator + it_end = members->end(); + while (it != it_end) + { + PartyMember *member = *it; + if (member && member->getMap() == curMap + && member->getOnline() && member != m) + { + if (userPalette) + { + graphics->setColor(userPalette->getColor( + UserPalette::PARTY)); + } + + const int offsetHeight = static_cast( + mHeightProportion); + const int offsetWidth = static_cast( + mWidthProportion); + + graphics->fillRectangle(gcn::Rectangle( + static_cast(member->getX() + * mWidthProportion) + mapOriginX - offsetWidth, + static_cast(member->getY() + * mHeightProportion) + mapOriginY - offsetHeight, + 2, 2)); + } + ++ it; + } + } + } + } + const Vector &pos = player_node->getPosition(); // logger->log("width:" + toString(graph->getWidth())); diff --git a/src/party.h b/src/party.h index 466f63a19..e286a794a 100644 --- a/src/party.h +++ b/src/party.h @@ -149,6 +149,11 @@ public: void sort(); + typedef std::vector MemberList; + + MemberList *getMembers() + { return &mMembers; } + static Party *getParty(short id); static void clearParties(); @@ -164,7 +169,6 @@ private: ~Party(); - typedef std::vector MemberList; MemberList mMembers; std::string mName; short mId; -- cgit v1.2.3-60-g2f50