/* ******************************************************************************* @file /gui/GUI.h @brief Hlavni soubor modulu GUI. Konfigurace: -SIMPLE_SHADOWS -SHADOWMAPPING @author vajicek @version 0.1 ******************************************************************************/ #ifndef GUI_H #define GUI_H #include // #include "common/Msg.h" #include "common/mm.h" // #include "net/comm.h" // #include "gui/common/Screen.h" /*****************************************************************************/ /**Sirka obrazovky*/ #define SCREEN_WIDTH (TGUI::gui_inst->screen->w) /**Vyska obrazovky*/ #define SCREEN_HEIGHT (TGUI::gui_inst->screen->h) /**Barevna hloubka obrazovky*/ #define SCREEN_COLORDEPTH 32 /** okraje mapy v hexech (tj prvni skutecny hex ma souradnice [MAP_BOUND_X, MAP_BOUND_Y]) */ // tyto makra jsou duplikovany pro editor v editor/src/usefulForEditor.h - pokud je zmenite tady, zmente je i tam !!! #define MAP_BOUND_X 3 #define MAP_BOUND_Y 9 /** pocet podporovanych rozliseni */ #define RESOLUTIONS_COUNT 5 /** UZIVATELSKE ROZHRANI. Tento modul obsahuje vsechno co souvisi s grafikou a UI. */ namespace gui{ /** podporovana rosliseni */ extern int resolutions[RESOLUTIONS_COUNT][3]; /** Handler pro zpravy modulu GUI. @see Msg.h */ RVAL GUI_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p); /** Struktura pro uchovani hernich zprav ve fronte */ struct MSG_TPacket{ /// Id zpravy int msg; /// Pointer na data void* data; /// Poradi zpravy int t; }; /** Hlavni trida uzivatelkseho rozhrani. Inicializuje se nekde blizko int main(argc,argv). Mela by umet spravovat vsechny prostredky (pamet, resources, registrovat obsluzne handlery, ..). Ma jen jedinou instanci alokovanou pomoci staticky metod. */ class TGUI { public: /// Obrazovka. TScreen* screen; /// Profil(pointr do rm) rm::TProfile *profile; /// Informace o klientech. net::TClientsInfo clientsinfo; /// indikator, zda se jedna o server (smi ukladat) bool IMHost; /// sprava resources //@{ /** Nahravac resourcu. kazda faze by se mela i uvolnovat @param phase =0 intro @param phase =1 zakladni obrazovka + menu @param phase =2 mapa */ void enterResourcePhase(int phase); /** Uvolnovac resourcu. @param phase =0 @param phase =1 @param phase =2 */ void leaveResourcePhase(int phase); //@} /** Hlavni program GUI */ void main(); /// kontexty //@{ TContext *game; TContext *mainmenu; TContext *multihost; TContext *multijoin; TContext *localmulti; TContext *loadingscreen; TContext *finalstatistic; /// Alokuje, inicializuje a vlozi do Screen vsechny pouzite kontexty. void initContexts(); /// Uvolni alokovane kontexty. void freeContexts(); //@} /// inicializace TGUI(); /// ukonceni ~TGUI(); /// vypise ladici informace void reportState(); /// Jedina instance gui. static TGUI* gui_inst; /// Stara se o alokaci a inicializaci gui_inst. static void initGUI(); /// Stara se o dealokaci gui_inst. static void destroyGUI(); /// Pump message. void pumpGameMessage(); /// Pump endgame message. int pumpEndGameMessage(); /// Vypis frontu zprav. void dumpGameMessages(); private: /// zamek na frontu SDL_mutex* msg_queue_lock; /// Fronta na zpravy pro gui std::deque msg_queue; /// Struktura transceiveru modulu GUI. TMessageTransceiver gui_transceiver; /// "Externi" metoda handleru. friend RVAL GUI_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p); }; }// namespace #endif /*****************************************************************************/