From The Mana World
(New page: <pre> From 2b7cab4137930eec96fe6485d04ccc6160f75142 Mon Sep 17 00:00:00 2001 From: Freeyorp <Freeyorp101@NOSPAM@hotmail.com> Date: Sun, 10 May 2009 22:56:06 +1200 Subject: [PATCH] Add supp...) |
(Update patch) |
||
Line 1: | Line 1: | ||
<pre> | <pre> | ||
From | From 32c3ee5194393bc5de772e7dd730ed352d437aa7 Mon Sep 17 00:00:00 2001 | ||
From: Freeyorp <Freeyorp101@NOSPAM@hotmail.com> | From: Freeyorp <Freeyorp101@NOSPAM@hotmail.com> | ||
Date: | Date: Mon, 11 May 2009 00:45:17 +1200 | ||
Subject: [PATCH] Add support for viewing the health and maximum health of other nearby members of your party. | Subject: [PATCH] Add support for viewing the health and maximum health of other nearby members of your party. | ||
--- | --- | ||
src/gui/partywindow.cpp | 14 +++++++++--- | src/gui/partywindow.cpp | 14 +++++++++--- | ||
src/gui/partywindow.h | | src/gui/partywindow.h | 7 ++++- | ||
src/gui/widgets/avatar.cpp | | src/gui/widgets/avatar.cpp | 46 ++++++++++++++++++++++++++++++++++++++++-- | ||
src/gui/widgets/avatar.h | | src/gui/widgets/avatar.h | 10 +++++++++ | ||
src/net/ea/partyhandler.cpp | 7 +++-- | src/net/ea/partyhandler.cpp | 7 +++-- | ||
5 files changed, | 5 files changed, 72 insertions(+), 12 deletions(-) | ||
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp | diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp | ||
Line 56: | Line 56: | ||
mMembers.erase(id); | mMembers.erase(id); | ||
diff --git a/src/gui/partywindow.h b/src/gui/partywindow.h | diff --git a/src/gui/partywindow.h b/src/gui/partywindow.h | ||
index c915d9c.. | index c915d9c..6a8cc4f 100644 | ||
--- a/src/gui/partywindow.h | --- a/src/gui/partywindow.h | ||
+++ b/src/gui/partywindow.h | +++ b/src/gui/partywindow.h | ||
@@ -85,6 + | @@ -40,8 +40,6 @@ | ||
struct PartyMember | |||
{ | |||
std::string name; | |||
- int health; | |||
- int healthMax; | |||
bool leader; | |||
bool online; | |||
Avatar *avatar; | |||
@@ -85,6 +83,11 @@ class PartyWindow : public Window, gcn::ActionListener | |||
bool leader = false, bool online = true); | bool leader = false, bool online = true); | ||
Line 72: | Line 81: | ||
void removeMember(int id); | void removeMember(int id); | ||
diff --git a/src/gui/widgets/avatar.cpp b/src/gui/widgets/avatar.cpp | diff --git a/src/gui/widgets/avatar.cpp b/src/gui/widgets/avatar.cpp | ||
index 8cb23a3.. | index 8cb23a3..4391010 100644 | ||
--- a/src/gui/widgets/avatar.cpp | --- a/src/gui/widgets/avatar.cpp | ||
+++ b/src/gui/widgets/avatar.cpp | +++ b/src/gui/widgets/avatar.cpp | ||
Line 105: | Line 114: | ||
if (avatarCount == 0) | if (avatarCount == 0) | ||
{ | { | ||
@@ -52,8 +61, | @@ -52,8 +61,12 @@ Avatar::Avatar(const std::string &name): | ||
mStatus = new Icon(avatarStatusOffline); | mStatus = new Icon(avatarStatusOffline); | ||
mStatus->setSize(12, 12); | mStatus->setSize(12, 12); | ||
Line 111: | Line 120: | ||
- | - | ||
- mLabel = new Label(name); | - mLabel = new Label(name); | ||
+ mAvatarLabel.str(""); | |||
+ if (mName != player_node->getName()) | + if (mName != player_node->getName()) | ||
+ mAvatarLabel | + mAvatarLabel << mName << " " << mHpState << "/" + mMaxHpState; | ||
+ else | + else | ||
+ mAvatarLabel | + mAvatarLabel << mName << " " << player_node->getHp() << "/" << player_node->getMaxHp(); | ||
+ mLabel = new Label(mAvatarLabel); | + mLabel = new Label(mAvatarLabel.str()); | ||
mLabel->setSize(174, 12); | mLabel->setSize(174, 12); | ||
add(mLabel, 16, 0); | add(mLabel, 16, 0); | ||
} | } | ||
@@ -69,10 + | @@ -69,10 +82,37 @@ Avatar::~Avatar() | ||
void Avatar::setName(const std::string &name) | void Avatar::setName(const std::string &name) | ||
{ | { | ||
Line 151: | Line 161: | ||
+ | + | ||
+void Avatar::updateAvatarLabel() { | +void Avatar::updateAvatarLabel() { | ||
+ mAvatarLabel.str(""); | |||
+ if (mName != player_node->getName()) | + if (mName != player_node->getName()) | ||
+ mAvatarLabel | + mAvatarLabel << mName << " " << mHpState << "/" << mMaxHpState; | ||
+ else | + else | ||
+ mAvatarLabel | + mAvatarLabel << mName << " " << player_node->getHp() << "/" << player_node->getMaxHp(); | ||
+ mLabel->setCaption(mAvatarLabel); | + mLabel->setCaption(mAvatarLabel.str()); | ||
+} | +} | ||
diff --git a/src/gui/widgets/avatar.h b/src/gui/widgets/avatar.h | diff --git a/src/gui/widgets/avatar.h b/src/gui/widgets/avatar.h | ||
index 550e43b.. | index 550e43b..69f7ed3 100644 | ||
--- a/src/gui/widgets/avatar.h | --- a/src/gui/widgets/avatar.h | ||
+++ b/src/gui/widgets/avatar.h | +++ b/src/gui/widgets/avatar.h | ||
@@ -52,8 + | @@ -27,6 +27,7 @@ | ||
#include "gui/widgets/container.h" | |||
#include <string> | |||
+#include <sstream> | |||
class Image; | |||
class Icon; | |||
@@ -52,8 +53,17 @@ public: | |||
*/ | */ | ||
void setOnline(bool online); | void setOnline(bool online); | ||
Line 175: | Line 194: | ||
+ std::string mHpState; | + std::string mHpState; | ||
+ std::string mMaxHpState; | + std::string mMaxHpState; | ||
+ std:: | + std::stringstream mAvatarLabel; | ||
Icon *mStatus; | Icon *mStatus; | ||
gcn::Label *mLabel; | gcn::Label *mLabel; |
Revision as of 12:48, 10 May 2009
From 32c3ee5194393bc5de772e7dd730ed352d437aa7 Mon Sep 17 00:00:00 2001 From: Freeyorp <Freeyorp101@NOSPAM@hotmail.com> Date: Mon, 11 May 2009 00:45:17 +1200 Subject: [PATCH] Add support for viewing the health and maximum health of other nearby members of your party. --- src/gui/partywindow.cpp | 14 +++++++++--- src/gui/partywindow.h | 7 ++++- src/gui/widgets/avatar.cpp | 46 ++++++++++++++++++++++++++++++++++++++++-- src/gui/widgets/avatar.h | 10 +++++++++ src/net/ea/partyhandler.cpp | 7 +++-- 5 files changed, 72 insertions(+), 12 deletions(-) diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp index b3c6c74..5172f4b 100644 --- a/src/gui/partywindow.cpp +++ b/src/gui/partywindow.cpp @@ -34,12 +34,12 @@ PartyWindow::PartyWindow() : Window(_("Party")) { setWindowName("Party"); setVisible(false); - setResizable(false); + setResizable(true); setSaveVisible(true); setCloseButton(true); - setMinWidth(110); + setMinWidth(200); setMinHeight(200); - setDefaultSize(620, 300, 110, 200); + setDefaultSize(620, 300, 200, 200); loadWindowState(); setVisible(false); // Do not start out visible @@ -58,7 +58,6 @@ void PartyWindow::draw(gcn::Graphics *graphics) PartyMember *PartyWindow::findMember(int id) const { PartyList::const_iterator it = mMembers.find(id); - if (it == mMembers.end()) return NULL; else @@ -114,6 +113,13 @@ void PartyWindow::updateMember(int id, const std::string &memberName, } } +void PartyWindow::updateMemberHP(int id, int hp, int maxhp) +{ + PartyMember *player = findOrCreateMember(id); + player->avatar->setHp(hp); + player->avatar->setMaxHp(maxhp); +} + void PartyWindow::removeMember(int id) { mMembers.erase(id); diff --git a/src/gui/partywindow.h b/src/gui/partywindow.h index c915d9c..6a8cc4f 100644 --- a/src/gui/partywindow.h +++ b/src/gui/partywindow.h @@ -40,8 +40,6 @@ struct PartyMember { std::string name; - int health; - int healthMax; bool leader; bool online; Avatar *avatar; @@ -85,6 +83,11 @@ class PartyWindow : public Window, gcn::ActionListener bool leader = false, bool online = true); /** + * Update a member's HP and Max HP + */ + void updateMemberHP(int id, int hp, int maxhp); + + /** * Remove party member with the given id. */ void removeMember(int id); diff --git a/src/gui/widgets/avatar.cpp b/src/gui/widgets/avatar.cpp index 8cb23a3..4391010 100644 --- a/src/gui/widgets/avatar.cpp +++ b/src/gui/widgets/avatar.cpp @@ -19,6 +19,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "localplayer.h" + #include "gui/widgets/avatar.h" #include "gui/widgets/icon.h" @@ -27,6 +29,11 @@ #include "resources/image.h" #include "resources/resourcemanager.h" +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include <stdio.h> + namespace { Image *avatarStatusOffline; Image *avatarStatusOnline; @@ -38,6 +45,8 @@ Avatar::Avatar(const std::string &name): { setOpaque(false); setSize(200, 12); + mHpState = "???"; + mMaxHpState = "???"; if (avatarCount == 0) { @@ -52,8 +61,12 @@ Avatar::Avatar(const std::string &name): mStatus = new Icon(avatarStatusOffline); mStatus->setSize(12, 12); add(mStatus, 1, 0); - - mLabel = new Label(name); + mAvatarLabel.str(""); + if (mName != player_node->getName()) + mAvatarLabel << mName << " " << mHpState << "/" + mMaxHpState; + else + mAvatarLabel << mName << " " << player_node->getHp() << "/" << player_node->getMaxHp(); + mLabel = new Label(mAvatarLabel.str()); mLabel->setSize(174, 12); add(mLabel, 16, 0); } @@ -69,10 +82,37 @@ Avatar::~Avatar() void Avatar::setName(const std::string &name) { mName = name; - mLabel->setCaption(name); + updateAvatarLabel(); } void Avatar::setOnline(bool online) { mStatus->setImage(online ? avatarStatusOnline : avatarStatusOffline); } + +void Avatar::setHp(int hp) +{ + if (hp) + mHpState = strprintf("%i", hp); + else + mHpState = "???"; + updateAvatarLabel(); +} + +void Avatar::setMaxHp(int maxhp) +{ + if (maxhp) + mMaxHpState = strprintf("%i", maxhp); + else + mMaxHpState = "???"; + updateAvatarLabel(); +} + +void Avatar::updateAvatarLabel() { + mAvatarLabel.str(""); + if (mName != player_node->getName()) + mAvatarLabel << mName << " " << mHpState << "/" << mMaxHpState; + else + mAvatarLabel << mName << " " << player_node->getHp() << "/" << player_node->getMaxHp(); + mLabel->setCaption(mAvatarLabel.str()); +} diff --git a/src/gui/widgets/avatar.h b/src/gui/widgets/avatar.h index 550e43b..69f7ed3 100644 --- a/src/gui/widgets/avatar.h +++ b/src/gui/widgets/avatar.h @@ -27,6 +27,7 @@ #include "gui/widgets/container.h" #include <string> +#include <sstream> class Image; class Icon; @@ -52,8 +53,17 @@ public: */ void setOnline(bool online); + void setHp(int hp); + + void setMaxHp(int maxhp); + + void updateAvatarLabel(); + private: std::string mName; + std::string mHpState; + std::string mMaxHpState; + std::stringstream mAvatarLabel; Icon *mStatus; gcn::Label *mLabel; }; diff --git a/src/net/ea/partyhandler.cpp b/src/net/ea/partyhandler.cpp index 1a0a9e3..cb42ec7 100644 --- a/src/net/ea/partyhandler.cpp +++ b/src/net/ea/partyhandler.cpp @@ -239,9 +239,10 @@ void PartyHandler::handleMessage(MessageIn &msg) } case SMSG_PARTY_UPDATE_HP: { - msg.readInt32(); // id - msg.readInt16(); // hp - msg.readInt16(); // hpMax + int id = msg.readInt32(); + int hp = msg.readInt16(); + int maxhp = msg.readInt16(); + partyWindow->updateMemberHP(id, hp, maxhp); } break; case SMSG_PARTY_UPDATE_COORDS: -- 1.6.0.4