/** ******************************************************************************* @file /gui/contexts/MultiJoin.h @brief Obrazovka klienta multiplayeru @author Pavel @version 0.1 ******************************************************************************/ #ifndef MULTIJOIN_H #define MULTIJOIN_H #include "gui/common/Context.h" #include "common/rm/rminit.h" #include "gui/common/Defs.h" #include "gui/common/ActiveObjects_ext.h" #include "gui/common/chatbox.h" namespace gui{ /** Hlavni okno kontextu (nastavovani roli, chat) */ class TMultiJoinWindow : public TWindow { private: rm::TRM_map_i *rmmapi; rm::TRM_txt_i *rmtxti; public: /// informace o zvolene mape rm::TMapInfo info; /// obsazeni roli ve hre rm::TRoleInfo roles[MAX_PLAYERS+1]; /// Nastaveni kdo hraje kterou roli. struct { int connected_id; MYROLETYPE type; } players[MAX_PLAYERS+1]; /// Pocet roli. int players_c; /// Seznam pripojenych hracu. struct { char caption[K8_MAX_NAME_LEN]; bool enabled; TItem *item; } connected[MAX_PLAYERS+2]; /// GUI zakladni informace o vybrane mape. //@{ TGroupBar *ginfo; TLabel *lmapname; TLabel *lplayerscountcaption; TLabel *lplayerscount; TLabel *lsizecaption; TLabel *lsize; TLabel *lmapcaption; //@} /// GUI podrobny popis mapy. //@{ TLabel *descriptioncaption; TMultiLabel *mldescription; //@} /// Aktivni objekt, ktery zajistuje posilani kratkych zprav. TChatBox *chatbox; /// Typ ukonceni hry //@{ TGroupBar *gendgame; TLabel *lendgame1; TLabel *lendgame2; TRadioBox *rendgame1; TRadioBox *rendgame2; TLabel *lendgamec; //@} /// GUI informace o rolich. //@{ /// Seznam hracu. TListBar *roleslist; TLabel *lrolescaption; //@} /// Nastaveni roli. //@{ TLabel *loptionscaption; TGroupBar *goptions; TLabel *lotherplayer; TLabel *lotherplayername; TListBar *lbconnected; TLabel *lai; TLabel *lai1, *lai2, *lai3; TItem *iai1, *iai2, *iai3; TLabel *ldificulty; TListBar *lbdificulty; //@} /// Ovladaci buttony //@{ TTextButton *bdisconnect; //@} /// Funkce na aktualizaci zobrazeni //@{ /// Vypisuje informace o mape. void printMapInfo(); /// Updatuje obsah seznamu pripojenych klientu. int lbconectedRestore(); /// Updatuje obsah gui vzhledem k datovym strukturam. void updateLocalGameForm(); /// Vrati zvolenou roli ze seznamu roli. int getSelectedRole(); /// Zpracovava zpravu o nastaveni hry ze site. void receiveNetData(TPackage *p); //@} /// konstruktor TMultiJoinWindow(); /// destruktor ~TMultiJoinWindow(); }; class TMultiJoin: public TContext { private: /// Pouzivana okna //@{ TMultiJoinWindow *mainwindow; TErrorWindow *disconnectedwindow; //@} /// rmtxt pro kontext rm::TRM_txt_i *rmtxti; public: /// inicializacni, aktivacni a deaktivacni kontextove metody //@{ TMultiJoin(TContextParameter contextparameter); virtual ~TMultiJoin(); static TContext* createContext(...); virtual void activateContext(TContextParameter contextparameter); virtual void deactivateContext(); //@} /// Funkce na aktualizaci zobrazeni //@{ /// Odpojeni od serveru. void disconnect(); /// Prijima zpravu o nastaveni hry ze site. void receiveNetData(TPackage *p); /// Prijima chatovaci zpravu ze site. void chatMsg(TPackage *p); //@} /// Zpracovani vstupu a zobrazovani //@{ virtual void drawContext(); virtual int workInput(INPUT *input); //@} }; }//namespace #endif /*****************************************************************************/