summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreeyorp <Freeyorp101@NOSPAM@hotmail.com>2009-05-11 00:45:17 +1200
committerJared Adams <jaxad0127@gmail.com>2009-05-10 11:38:37 -0600
commit7f15330d969e5c973429d03ca767551e7b67c3c3 (patch)
tree45a1688f5b58ccec447dc501d74447363aab9d42
parentf3ab737d9d508aaa25b01b462fa9c8f6c7a0d5d2 (diff)
downloadmana-7f15330d969e5c973429d03ca767551e7b67c3c3.tar.gz
mana-7f15330d969e5c973429d03ca767551e7b67c3c3.tar.bz2
mana-7f15330d969e5c973429d03ca767551e7b67c3c3.tar.xz
mana-7f15330d969e5c973429d03ca767551e7b67c3c3.zip
Add support for viewing the health and maximum health of other nearby members of your party.
-rw-r--r--src/gui/partywindow.cpp14
-rw-r--r--src/gui/partywindow.h7
-rw-r--r--src/gui/widgets/avatar.cpp46
-rw-r--r--src/gui/widgets/avatar.h10
-rw-r--r--src/net/ea/partyhandler.cpp7
5 files changed, 72 insertions, 12 deletions
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp
index b3c6c74c..5172f4bb 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 c915d9ce..6a8cc4fc 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 8cb23a34..43910106 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 550e43b4..69f7ed37 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 df75c5a9..c4653677 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: