/** ******************************************************************************* @file /gui/contexts/LoadingScreen.cpp @brief Obrazovka LoadingScreen @author Vajicek @version 0.1 ******************************************************************************/ #include "gui/contexts/LoadingScreen.h" // #include "gui/GUI.h" #include "gui/common/Sounds.h" #include "gui/common/Defs.h" #include "gui/common/BasicFonts.h" #include "gui/engine/TextureManager.h" #include "common/rm/rminit.h" #include "common/Log.h" /*****************************************************************************/ namespace gui{ #define BORDER 20 #define MAINWINDOW_WIDTH 400 #define MAINWINDOW_HEIGHT (8*BORDER+2*TEXT_HEIGHT) #define MAINWINDOW_X ((SCREEN_WIDTH-MAINWINDOW_WIDTH)/2) #define MAINWINDOW_Y ((SCREEN_HEIGHT-MAINWINDOW_HEIGHT)/2) #define TEXT_HEIGHT 16 #define PROGRESS_STEPS 100 /*****************************************************************************/ TLoadingWindow::TLoadingWindow(rm::TRM_txt_i *rmtxti) : TWindow(AO_UNMOVABLE, MAINWINDOW_X, MAINWINDOW_Y, MAINWINDOW_WIDTH, MAINWINDOW_HEIGHT) { wchar_t wtemp[LABEL_MAX_LENGTH]; TGroupBar* gtitle = new TGroupBar(AO_NORMAL, BORDER, BORDER, MAINWINDOW_WIDTH-BORDER*2, BORDER+TEXT_HEIGHT); Add(gtitle); lcaption = new TLabel(rmtxti->getWChar(wtemp, LABEL_MAX_LENGTH, TEXT_LOADING), BORDER, BORDER/2); gtitle->Add(lcaption); TGroupBar* gmsg = new TGroupBar(AO_NORMAL, BORDER, 3*BORDER+TEXT_HEIGHT, MAINWINDOW_WIDTH-BORDER*2, 4*BORDER+TEXT_HEIGHT); Add(gmsg); lstatemsg = new TLabel(L"", BORDER, BORDER); gmsg->Add(lstatemsg); pbar = new TProgressBar(BORDER, 2*BORDER+TEXT_HEIGHT, MAINWINDOW_WIDTH-BORDER*4, BORDER, PROGRESS_STEPS, 0); gmsg->Add(pbar); setBgImage(RASTER_PANEL); } /*****************************************************************************/ TLoadingScreen::TLoadingScreen(TContextParameter contextparameter){ rmtxti = (rm::TRM_txt_i*)KSendGlobalMessage(MSG_GET_RM_TXT_I, MOD_GUI, MOD_RM, NULL); //gui prvky loadingwnd = NULL; notice = NULL; guiMapReady = 0; letsGo = 0; } TLoadingScreen::~TLoadingScreen(){ delete rmtxti; } TContext* TLoadingScreen::createContext(...){ TLoadingScreen* n = new TLoadingScreen(TContextParameter()); strcpy(n->szName,"GAMELOADINGCONTEXT"); return n; } void TLoadingScreen::activateContext(TContextParameter contextparameter){ // kdyz je kurzor na kraji obrazovky tak se nezmeni jeho obrazek na sipku TaoKernel::aoKernel->cursor->scrolling = false; //zjisti typ hry gamemode = contextparameter; if( (gamemode.iPrimary != context_localgame)&& (gamemode.iPrimary != context_networkgame)) THROW(E_8K_GUI, "TLoadingScreen::activateContext(): no gamemode selected\n"); //vypni hudbu if(TSoundInterface::si) TSoundInterface::si->fadeoutMusic(1000);; loadingwnd = new TLoadingWindow(rmtxti); Add(loadingwnd); notice = NULL; guiMapReady = 0; letsGo = 0; } void TLoadingScreen::deactivateContext(){ DelNFreeAll(); } void TLoadingScreen::drawContext(){ TFrame::drawObject(); } int TLoadingScreen::workInput(INPUT *input){ int ret=TContext::workInput(input); //testna preruseni nahravani //if( (input->key.sym == SDLK_c) && (input->type == INPUT_KEY_UP) ){ // TPacket_END_GAME eg; // eg.reason = ER_SHUTDOWN; // eg.winner = 0; // KSendGlobalMessage(MSG_END_GAME, MOD_GUI, MOD_GUI, &eg); //} if (notice) { if CLICKED(notice->bok) { //zrus guimapu if( guiMapReady ) KSendGlobalMsg(MSG_GUIMAP_HARAKIRI, MOD_GUI, MOD_GUI, NULL); //ukonci sit KSendGlobalMsg(MSG_NET_STOP, MOD_GUI, MOD_NET, NULL); //prepni do mainmenu TGUI::gui_inst->screen->selectContext("MAINMENU", TContextParameter(context_mainmenu, 0) ); return ret; } } return ret; } void TLoadingScreen::endGame(TPacket_END_GAME* eg){ notice = new TErrorWindow(TEXT_GAMESTART_ERROR, ewtNotice, true); Add(notice); } void TLoadingScreen::showStateMsg(wchar_t* msg){ if(loadingwnd) wcscpy( loadingwnd->lstatemsg->text, msg); } void TLoadingScreen::setProgress(float i){ if(loadingwnd) loadingwnd->pbar->set( ROUND(PROGRESS_STEPS*i) ); } }//namespace /*****************************************************************************/