diff options
author | David Athay <ko2fan@gmail.com> | 2008-04-28 17:21:22 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-04-28 17:21:22 +0000 |
commit | 5bbb89e2dbcafb80f33030ba2ffef6d2515b9209 (patch) | |
tree | bc0660c85891a0fae0acc7dea80547962f39ff1a | |
parent | a6731dd30a4ab7b2b19af18295293c13895b664d (diff) | |
download | mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.gz mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.bz2 mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.xz mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.zip |
Added party invite dialog
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | src/gui/partywindow.cpp | 81 | ||||
-rw-r--r-- | src/gui/partywindow.h | 33 | ||||
-rw-r--r-- | src/net/chatserver/party.cpp | 8 | ||||
-rw-r--r-- | src/net/partyhandler.cpp | 5 | ||||
-rw-r--r-- | src/net/protocol.h | 2 | ||||
-rw-r--r-- | tmw.cbp | 2 |
7 files changed, 114 insertions, 23 deletions
@@ -1,3 +1,9 @@ +2008-04-28 David Athay <ko2fan@gmail.com> + + * src/gui/partywindow.h, src/gui/partywindow.cpp, + src/net/partyhandler.cpp, src/net/protocol.h, + src/net/chatserver/party.cpp, tmw.cbp: Added party invite dialog. + 2008-04-26 Yohann Ferreira <bertram@cegetel.net> * src/CMakeLists.txt, src/Makefile.am, src/gui/char_select.h, diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp index db066910..5ec1e6bf 100644 --- a/src/gui/partywindow.cpp +++ b/src/gui/partywindow.cpp @@ -22,43 +22,71 @@ */ #include "partywindow.h" +#include "chat.h" #include "../utils/gettext.h" +#include "../net/chatserver/party.h" PartyWindow::PartyWindow() : Window(_("Party")) { setVisible(false); } +PartyWindow::~PartyWindow() +{ + PartyList::iterator itr = mPartyMembers.begin(), + itr_end = mPartyMembers.end(); + + while (itr != itr_end) + { + delete (*itr); + } + + mPartyMembers.clear(); +} + void PartyWindow::draw(gcn::Graphics *graphics) { } -void PartyWindow::addPartyMember(Player *player) +void PartyWindow::addPartyMember(const std::string &memberName) { - PartyList::iterator itr = std::find(mPartyMembers.begin(), - mPartyMembers.end(), - player); - if (itr == mPartyMembers.end()) + PartyMember *player = new PartyMember; + PartyList::iterator itr = mPartyMembers.begin(), + itr_end = mPartyMembers.end(); + + while (itr != itr_end) { - mPartyMembers.push_back(player); + if ((*itr)->name == memberName) + { + return; + } + ++itr; } + player->name = memberName; + mPartyMembers.push_back(player); + if (mPartyMembers.size() > 1) { setVisible(true); } } -void PartyWindow::removePartyMember(Player *player) +void PartyWindow::removePartyMember(const std::string &memberName) { - PartyList::iterator itr = std::find(mPartyMembers.begin(), - mPartyMembers.end(), - player); - if (itr != mPartyMembers.end()) + PartyList::iterator itr = mPartyMembers.begin(), + itr_end = mPartyMembers.end(); + + while (itr != itr_end) { - mPartyMembers.erase(itr); + if ((*itr)->name == memberName) + { + mPartyMembers.erase(itr); + break; + } + ++itr; } if (mPartyMembers.size() < 1) @@ -69,5 +97,34 @@ void PartyWindow::removePartyMember(Player *player) void PartyWindow::showPartyInvite(const std::string &inviter) { + if (mPartyInviter != "") + { + chatWindow->chatLog("Received party request, but one already exists", + BY_SERVER); + return; + } + std::string msg = inviter + " has invited you to join their party"; + chatWindow->chatLog(msg, BY_SERVER); + + acceptDialog = new ConfirmDialog("Accept Party Invite", msg, this); + acceptDialog->addActionListener(this); + + mPartyInviter = inviter; +} + +void PartyWindow::action(const gcn::ActionEvent &event) +{ + const std::string &eventId = event.getId(); + if (eventId == "yes") + { + Net::ChatServer::Party::acceptInvite(mPartyInviter); + mPartyInviter = ""; + delete acceptDialog; + } + else if (eventId == "no") + { + mPartyInviter = ""; + delete acceptDialog; + } } diff --git a/src/gui/partywindow.h b/src/gui/partywindow.h index b74b1411..fe126c2e 100644 --- a/src/gui/partywindow.h +++ b/src/gui/partywindow.h @@ -25,18 +25,29 @@ #define _TMW_PARTYWINDOW_H #include "window.h" +#include "confirm_dialog.h" #include <string> #include <vector> -class Player; +#include <guichan/actionevent.hpp> +#include <guichan/actionlistener.hpp> + +/** + * Party Member + * Used for storing players in the party + */ +struct PartyMember +{ + std::string name; +}; /** * Party Window. * * \ingroup Interface */ -class PartyWindow : public Window +class PartyWindow : public Window, gcn::ActionListener { public: /** @@ -45,6 +56,11 @@ class PartyWindow : public Window PartyWindow(); /** + * Release all the players created + */ + ~PartyWindow(); + + /** * Draws the party window */ void draw(gcn::Graphics *graphics); @@ -52,21 +68,28 @@ class PartyWindow : public Window /** * Add party member */ - void addPartyMember(Player *player); + void addPartyMember(const std::string &memberName); /** * Remove party member */ - void removePartyMember(Player *player); + void removePartyMember(const std::string &memberName); /** * Show party invite */ void showPartyInvite(const std::string &inviter); + /** + * Handle events + */ + void action(const gcn::ActionEvent &event); + private: - typedef std::vector<Player*> PartyList; + typedef std::vector<PartyMember*> PartyList; PartyList mPartyMembers; + std::string mPartyInviter; + ConfirmDialog *acceptDialog; }; extern PartyWindow *partyWindow; diff --git a/src/net/chatserver/party.cpp b/src/net/chatserver/party.cpp index 63e2ddf9..ff465924 100644 --- a/src/net/chatserver/party.cpp +++ b/src/net/chatserver/party.cpp @@ -44,12 +44,12 @@ void Net::ChatServer::Party::invitePlayer(const std::string &name) void Net::ChatServer::Party::acceptInvite(const std::string &name) { - logger->log("Sending PCMSG_PARTY_ACCEPT"); -// MessageOut msg(PCMSG_GUILD_ACCEPT); + logger->log("Sending PCMSG_PARTY_ACCEPT_INVITE"); + MessageOut msg(PCMSG_PARTY_ACCEPT_INVITE); -// msg.writeString(name); + msg.writeString(name); -// Net::ChatServer::connection->send(msg); + Net::ChatServer::connection->send(msg); } void Net::ChatServer::Party::getPartyMembers() diff --git a/src/net/partyhandler.cpp b/src/net/partyhandler.cpp index dd169b8d..f3a2e2f5 100644 --- a/src/net/partyhandler.cpp +++ b/src/net/partyhandler.cpp @@ -30,6 +30,7 @@ #include "chatserver/chatserver.h" #include "../gui/chat.h" +#include "../gui/partywindow.h" #include "../log.h" #include "../localplayer.h" @@ -56,13 +57,15 @@ void PartyHandler::handleMessage(MessageIn &msg) { if (!player_node->getInParty()) player_node->setInParty(true); + std::string memberName = msg.readString(); + partyWindow->addPartyMember(memberName); } } break; case CPMSG_PARTY_INVITED: { - //TODO: Show dialog to player asking to join party std::string inviter = msg.readString(); + partyWindow->showPartyInvite(inviter); } break; case CPMSG_PARTY_ACCEPT_INVITE_RESPONSE: diff --git a/src/net/protocol.h b/src/net/protocol.h index 201bf717..d2d5937d 100644 --- a/src/net/protocol.h +++ b/src/net/protocol.h @@ -147,7 +147,7 @@ enum { // Party PCMSG_PARTY_INVITE = 0x03A0, // S name - CPMSG_PARTY_INVITE_RESPONSE = 0x03A1, // B error + CPMSG_PARTY_INVITE_RESPONSE = 0x03A1, // B error, S name CPMSG_PARTY_INVITED = 0x03A2, // S name PCMSG_PARTY_ACCEPT_INVITE = 0x03A5, // S name CPMSG_PARTY_ACCEPT_INVITE_RESPONSE = 0x03A6, // B error @@ -148,6 +148,8 @@ <Unit filename="src/gui/buysell.h"> <Option target="default" /> </Unit> + <Unit filename="src/gui/changeemaildialog.cpp" /> + <Unit filename="src/gui/changeemaildialog.h" /> <Unit filename="src/gui/changepassworddialog.cpp" /> <Unit filename="src/gui/changepassworddialog.h" /> <Unit filename="src/gui/char_select.cpp" /> |