summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-08-31 01:19:09 +0300
committerAndrei Karas <akaras@inbox.ru>2011-08-31 01:19:09 +0300
commit6d349121a70377723e53b92a8990e56ee3e4fd88 (patch)
tree78b99f93beedbaf939ab275cd8ddd5a4f061b497
parente4687ac984a6b025548e58bbac8795001d07bff3 (diff)
downloadmanaplus-6d349121a70377723e53b92a8990e56ee3e4fd88.tar.gz
manaplus-6d349121a70377723e53b92a8990e56ee3e4fd88.tar.bz2
manaplus-6d349121a70377723e53b92a8990e56ee3e4fd88.tar.xz
manaplus-6d349121a70377723e53b92a8990e56ee3e4fd88.zip
Always draw party members on same map in minimap.
-rw-r--r--src/gui/minimap.cpp48
-rw-r--r--src/party.h6
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<int>(
+ mHeightProportion);
+ const int offsetWidth = static_cast<int>(
+ mWidthProportion);
+
+ graphics->fillRectangle(gcn::Rectangle(
+ static_cast<int>(member->getX()
+ * mWidthProportion) + mapOriginX - offsetWidth,
+ static_cast<int>(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<PartyMember*> MemberList;
+
+ MemberList *getMembers()
+ { return &mMembers; }
+
static Party *getParty(short id);
static void clearParties();
@@ -164,7 +169,6 @@ private:
~Party();
- typedef std::vector<PartyMember*> MemberList;
MemberList mMembers;
std::string mName;
short mId;