/** ******************************************************************************* @file /gui/contexts/MultiHost.h @brief Obrazovka pro server multiplayeru @author Pavel @version 0.1 ******************************************************************************/ #ifndef MULTIHOST_H #define MULTIHOST_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" // #include "net/comm.h" namespace gui{ /** Hlavni okno kontextu (nastavovani roli, chat). */ class TMultiHostWindow : public TWindow { private: rm::TRM_map_i* rmmapi; rm::TRM_txt_i* rmtxti; public: /// Pointer na informace o mape(odkaz do RM). rm::TMapInfo *info; /// Cislo mapy kterou server vybral. int mapnumber; /// Nastaveni kdo hraje kterou roli. struct { int connected_id; MYROLETYPE type; } players[MAX_PLAYERS+1]; /// Pocet pripojenych hracu. 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; //@} /// Typ ukonceni hry //@{ TGroupBar *gendgame; TLabel *lendgame1; TLabel *lendgame2; TRadioBox *rendgame1; TRadioBox *rendgame2; TLabel *lendgamec; //@} /// GUI podrobny popis mapy //@{ TLabel *descriptioncaption; TMultiLabel *mldescription; //@} /// Aktivni objekt, ktery zajistuje posilani kratkych zprav. TChatBox *chatbox; /// GUI informace o rolich //@{ /// Seznam hracu. TListBar *roleslist; TLabel *lrolescaption; //@} /// GUI 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 *bplay; TTextButton *bback; TTextButton *bdisconnect; //@} /// Funkce na aktualizaci zobrazeni //@{ /// Updatuje gui podle datovych struktur. void updateLocalGameForm(); /// Inicializuje gui a pole players. void initRolesFromConnections(); /// Vrati zvolenou roli ze seznamu roli. int getSelectedRole(); /// Prida hrace a rozesle synchronizacni zpravu gui ostanich klientu. void addClient(int cid); /// Odstrani klienta a rozesle synchronizacni zpravu gui ostatnich klientu. void delClient(int cid); /// Obnovy gui seznam pripojenych hracu. int lbconectedRestore(); /// Zpracuje synchronizacni zpravu z netu. void receiveNetData(TPackage *p); /// Sestavi a odesle synchronizacni zpravu o nastaveni hry. void sendSetting(int to); //@} /// konstruktor TMultiHostWindow(int _mapnumber); /// destruktor ~TMultiHostWindow(); }; /** Kontext pro sitovou hru typu server. */ class TMultiHost: public TContext { private: /// Pouzivana okna //@{ TMultiHostWindow *mainwindow; TErrorWindow *notice; //@} /// Id vybrane mapy. int mapnumber; /// Rmtxt kontextu. rm::TRM_txt_i *rmtxti; public: /// inicializacni, aktivacni a deaktivacni kontextovej balast //@{ TMultiHost(TContextParameter contextparameter); virtual ~TMultiHost(); static TContext* createContext(...); virtual void activateContext(TContextParameter contextparameter); virtual void deactivateContext(); //@} /// Zpracovani vstupu a zobrazovani //@{ virtual void drawContext(); virtual int workInput(INPUT *input); //@} /// Komunikace se siti //@{ /// Zpracuje pridani klienta. void addClient(int cli); /// Zpracuje smazani klienta. void delClient(int clientid); /// Prijme synchronizacni zpravu. void receiveNetData(TPackage *p); /// Prijme chatovaci zpravu. void chatMsg(TPackage *p); //@} }; }//namespace #endif /*****************************************************************************/