void createGUI(IrrlichtDevice* device, CFontTool* fc) { gui::IGUIEnvironment *env = device->getGUIEnvironment(); // change transparency of skin for (s32 i=0; i<gui::EGDC_COUNT ; ++i) { video::SColor col = env->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i); col.setAlpha(255); env->getSkin()->setColor((gui::EGUI_DEFAULT_COLOR)i, col); } IGUIWindow *win = env->addWindow( core::rect<s32>(10,10,200,500), false, L"Font Creator"); win->getCloseButton()->setVisible(false); s32 xs=10,xp=xs, yp=30, h=20; env->addStaticText(L"Charset", core::rect<s32>(xp,yp,50,yp+h),false,false, win); xp+=60; // charset combo gui::IGUIComboBox* cbo = env->addComboBox( core::rect<s32>(xp,yp,180,yp+h),win, MYGUI_CHARSET); for (u32 i=0; i < fc->CharSets.size(); ++i) cbo->addItem(fc->CharSets[i].c_str()); yp += (s32)(h*1.5f); xp = xs; env->addStaticText(L"Font", core::rect<s32>(xp,yp,50,yp+h),false,false, win); xp+=60; // font name combo cbo = env->addComboBox( core::rect<s32>(xp,yp,180,yp+h),win, MYGUI_FONTNAME); for (u32 i=0; i < fc->FontNames.size(); ++i){ cbo->addItem(fc->FontNames[i].c_str()); if(fc->FontNames[i] == L"\u6587\u6CC9\u9A7F\u5FAE\u7C73\u9ED1") cbo->setSelected(i); //auto select wqy-microhei } yp += (s32)(h*1.5f); xp = xs; env->addStaticText(L"Size", core::rect<s32>(xp,yp,50,yp+h),false,false, win); xp += 60; /* // font size combo cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_SIZE); for (s32 i=0; fc->FontSizes[i] != 0; ++i) cbo->addItem( ((core::stringw(fc->FontSizes[i])) + L"pt").c_str()); */ env->addEditBox(L"4",core::rect<s32>(xp,yp,xp+70,yp+h), true, win, MYGUI_SIZE); xp += 80; env->addStaticText(L"pt", core::rect<s32>(xp,yp,xp+50,yp+h),false,false,win); xp = xs; yp += (s32)(h*1.5f); // bold checkbox env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_BOLD, L"Bold"); xp += 45; // italic checkbox env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_ITALIC, L"Italic"); xp += 45; // AA checkbox env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_ANTIALIAS, L"AA"); xp +=40; // Alpha checkbox env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_ALPHA, L"Alpha"); xp = xs; yp += (s32)(h*1.5f); //new env->addCheckBox(false, core::rect<s32>(xp,yp,xp+150,yp+h),win, 201, L"Export used characters only")->setEnabled(false); yp += (s32)(h*1.5f); env->addCheckBox(false, core::rect<s32>(xp,yp,xp+150,yp+h),win, 202, L"Exclude basic latin characters"); yp += (s32)(h*1.5f); /* // vector fonts can't be loaded yet env->addCheckBox(false, core::rect<s32>(xp,yp,xp+200,yp+h),win, MYGUI_VECTOR, L"Vector Font"); yp += (s32)(h*1.5f); */ env->addStaticText(L"Max Width:", core::rect<s32>(xp,yp,50,yp+h),false,false, win); xp += 60; // texture widths cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+70,yp+h),win, MYGUI_TEXWIDTH); for (s32 i=0; texturesizes[i] != 0; ++i) cbo->addItem( ((core::stringw(texturesizes[i])) + L" wide").c_str()); xp=xs; yp += (s32)(h*1.5f); env->addStaticText(L"Max Height:", core::rect<s32>(xp,yp,60,yp+h),false,false, win); xp += 60; // texture height cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+70,yp+h),win, MYGUI_TEXHEIGHT); for (s32 i=0; texturesizes[i] != 0; ++i) cbo->addItem( ((core::stringw(texturesizes[i])) + L" tall").c_str()); // file name xp = xs; yp += (s32)(h*1.5f); env->addStaticText(L"Filename", core::rect<s32>(xp,yp,60,yp+h),false,false, win); xp += 60; env->addEditBox(L"myfont",core::rect<s32>(xp,yp,xp+70,yp+h), true, win, MYGUI_FILENAME); // file format xp = xs; yp += (s32)(h*1.5f); env->addStaticText(L"File Format", core::rect<s32>(xp,yp,60,yp+h),false,false, win); xp += 60; cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+70,yp+h),win, MYGUI_FORMAT); for (s32 i=0; fileformats[i] != 0; ++i) cbo->addItem( core::stringw(fileformats[i]).c_str()); for (s32 i=0; alphafileformats[i] != 0; ++i) cbo->addItem( core::stringw(alphafileformats[i]).c_str()); xp = xs; yp += h*2; // create button env->addButton( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_CREATE, L"Create"); xp += 60; // save button env->addButton( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_SAVE, L"Save"); xp += 60; // help button env->addButton( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_HELPBUTTON, L"Help"); // font image gui::IGUIImage *img = env->addImage(0, core::position2d<s32>(0,0), true,0, MYGUI_IMAGE); img->setRelativePosition(core::rect<s32>(0,20,800,600)); // font scrollbar IGUIScrollBar *scrl= env->addScrollBar(true,core::rect<s32>(0,0,800,20),0, MYGUI_CURRENTIMAGE); scrl->setMax(0); scrl->setSmallStep(1); yp += h*3; env->getRootGUIElement()->bringToFront(win); win->setRelativePosition( core::rect<s32>(10,10,200,yp)); }
// Set up the gameplay interface GUI void GUIGame::setupGameplayGUI() { driver=App::getInstance()->getDevice()->getVideoDriver(); guienv=App::getInstance()->getDevice()->getGUIEnvironment(); GUIManager::getInstance()->createConsole(); IGUIInOutFader* fader=guienv->addInOutFader(); fader->setAlignment(EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT,EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT); fader->setVisible(false); fader->setID(GUIManager::ID_FADER); // NEW Create display size since IRRlicht return wrong values // Check the current screen size displayheight=screensize.Height; displaywidth=screensize.Width; // Create a cutscene text IGUIStaticText* guiCutsceneText = guienv->addStaticText(L"This is a standard cutscene text",core::rect<s32>(100,displayheight/2+(displayheight/4),displaywidth-10,displayheight-100),false,true,0,-1,false); guiCutsceneText->setOverrideFont(GUIManager::getInstance()->guiFontLarge28); guiCutsceneText->setAlignment(EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); guiCutsceneText->setVisible(false); guiCutsceneText->setID(GUIManager::ST_ID_CUTSCENE_TEXT); // This is called only in the PLAYER application #ifndef EDITOR // ---------------------------------------- guienv->getSkin()->setFont(GUIManager::getInstance()->guiFontC12); //guienv->getSkin()->setFont(guiFontCourier12); // Load textures ITexture* imgLogo = driver->getTexture(App::getInstance()->logoimage.c_str()); printf("Here is the logo: %s\n",App::getInstance()->logoimage.c_str()); //LOADER WINDOW IGUIWindow* guiLoaderWindow = guienv->addWindow(GUIManager::getInstance()->myRect(driver->getScreenSize().Width/2-300, driver->getScreenSize().Height/2-200,600,400),false,L"Loading...",0,GUIManager::WIN_LOADER); guiLoaderWindow->setDrawTitlebar(false); guiLoaderWindow->getCloseButton()->setVisible(false); guienv->addImage(imgLogo,vector2d<s32>(5,5),true,guiLoaderWindow); IGUIStaticText* guiLoaderDescription = guienv->addStaticText(L"Loading fonts...", GUIManager::getInstance()->myRect(10,350,580,40), true,true,guiLoaderWindow, GUIManager::TXT_ID_LOADER,false); //Define 2 buttons to place in the loader windows (player only) IGUIButton* guiBtGamePlay = guienv->addButton(core::rect<s32>(400,360,580,380),guiLoaderWindow, GUIManager::BT_PLAYER_START, L"PLAY GAME NOW!"); guiBtGamePlay->setVisible(false); IGUIButton* guiBtGameConfig = guienv->addButton(core::rect<s32>(20,360,200,380),guiLoaderWindow, GUIManager::BT_PLAYER_CONFIG, L"EDIT CONFIGURATION"); guiBtGameConfig->setVisible(false); App::getInstance()->quickUpdate(); GUIManager::getInstance()->loadFonts(); guiLoaderDescription->setText(L"Loading interface graphics..."); //printf("The GUI should display from here...\n"); // quick update App::getInstance()->quickUpdate(); // Buttons ITexture* imgCloseProgram = driver->getTexture("../media/art/bt_close_program.png"); ITexture* imgAbout = driver->getTexture("../media/art/bt_about.png"); ITexture* imgAbout1 = driver->getTexture("../media/art/bt_about_ghost.png"); ITexture* imgHelp = driver->getTexture("../media/art/bt_help.png"); ITexture* imgHelp1 = driver->getTexture("../media/art/bt_help_ghost.png"); ITexture* imgConfig = driver->getTexture("../media/art/bt_config.png"); ITexture* imgConfig1 = driver->getTexture("../media/art/bt_config_ghost.png"); IGUIWindow* guiMainToolWindow = guienv->addWindow(GUIManager::getInstance()->myRect(driver->getScreenSize().Width-170,0,170,46),false,0,0,GUIManager::WIN_GAMEPLAY); guiMainToolWindow->setDraggable(false); guiMainToolWindow->setDrawTitlebar(false); guiMainToolWindow->getCloseButton()->setVisible(false); guiMainToolWindow->setVisible(false); //Play Game int x = 0; mainToolbarPos.Y=5; IGUIButton* guiPlayGame= guienv->addButton(GUIManager::getInstance()->myRect(10+x,mainToolbarPos.Y,32,32), guiMainToolWindow, GUIManager::BT_ID_PLAY_GAME,L"", stringw(LANGManager::getInstance()->getText("bt_play_game")).c_str()); guiPlayGame->setImage(driver->getTexture("../media/art/bt_play_game.png")); //Stop Game IGUIButton* guiStopGame= guienv->addButton(GUIManager::getInstance()->myRect(10+x,mainToolbarPos.Y,32,32), guiMainToolWindow, GUIManager::BT_ID_STOP_GAME,L"", stringw(LANGManager::getInstance()->getText("bt_stop_game")).c_str()); guiStopGame->setImage(driver->getTexture("../media/art/bt_stop_game.png")); guiStopGame->setVisible(false); //ABOUT BUTTON x += 42; IGUIButton* guiAbout = guienv->addButton(GUIManager::getInstance()->myRect(10+x,mainToolbarPos.Y,32,32), guiMainToolWindow, GUIManager::BT_ID_ABOUT,L"", stringw(LANGManager::getInstance()->getText("bt_about")).c_str() ); guiAbout->setImage(imgAbout); guiAbout->setPressedImage(imgAbout1); // Help Button x += 42; IGUIButton* guiHelpButton = guienv->addButton(GUIManager::getInstance()->myRect(10+x,mainToolbarPos.Y,32,32), guiMainToolWindow, GUIManager::BT_ID_HELP,L"", stringw(LANGManager::getInstance()->getText("bt_help")).c_str() ); guiHelpButton->setImage(imgHelp); guiHelpButton->setPressedImage(imgHelp1); // Close program x += 42; IGUIButton* guiCloseProgram = guienv->addButton(GUIManager::getInstance()->myRect(10+x,mainToolbarPos.Y,32,32), guiMainToolWindow, GUIManager::BT_ID_CLOSE_PROGRAM,L"", stringw(LANGManager::getInstance()->getText("bt_close_program")).c_str() ); guiCloseProgram->setImage(imgCloseProgram); //ABOUT WINDOW IGUIWindow* guiAboutWindow = guienv->addWindow(GUIManager::getInstance()->myRect(driver->getScreenSize().Width/2 - 300,driver->getScreenSize().Height/2 - 200,600,400),false); guiAboutWindow->setDraggable(false); guiAboutWindow->setDrawTitlebar(false); guiAboutWindow->getCloseButton()->setVisible(false); guiAboutWindow->setVisible(false); guienv->addImage(driver->getTexture("../media/art/logo1.png"),position2di(guiAboutWindow->getAbsoluteClippingRect().getWidth()/2-100,10),true,guiAboutWindow); IGUIButton* guiAboutClose = guienv->addButton(GUIManager::getInstance()->myRect(guiAboutWindow->getAbsoluteClippingRect().getWidth() - 37,guiAboutWindow->getAbsoluteClippingRect().getHeight() - 37,32,32),guiAboutWindow,GUIManager::BT_ID_ABOUT_WINDOW_CLOSE); guiAboutClose->setImage(driver->getTexture("../media/art/bt_yes_32.png")); IGUIListBox* guiAboutText = guienv ->addListBox(GUIManager::getInstance()->myRect(guiAboutWindow->getAbsoluteClippingRect().getWidth()/2-250,160,500,200),guiAboutWindow); // Ask the LANGManager to fill the box with the proper Language of the about text. LANGManager::getInstance()->setAboutText(guiAboutText); // Create the Configuration window (Need to be updated) #ifndef EDITOR configWindow = new GUIConfigWindow(App::getInstance()->getDevice()); configWindow->setID(GUIManager::GCW_CONFIG_WINDOW); // Give back to the GUI Manager since it's needed for both applications GUIManager::getInstance()->setConfigWindow(configWindow); #endif // --------------------------------------- #endif // --- Active game menu during play ITexture* gameplay_bar = driver->getTexture("../media/art/gameplay_bar.png"); ITexture* circle = driver->getTexture("../media/art/circle.png"); ITexture* circleMana = driver->getTexture("../media/art/circlemana.png"); ITexture* topCircle = driver->getTexture("../media/art/circle_top.png"); IGUIImage* gameplay_bar_image = NULL; if (gameplay_bar) { gameplay_bar_image = guienv->addImage(gameplay_bar,vector2d<s32>((displaywidth/2)-(gameplay_bar->getSize().Width/2),displayheight-gameplay_bar->getSize().Height),true); gameplay_bar_image->setAlignment(EGUIA_CENTER,EGUIA_CENTER,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); gameplay_bar_image->setID(GUIManager::IMG_BAR); // The life gauge CGUIGfxStatus* lifegauge = new gui::CGUIGfxStatus(guienv, gameplay_bar_image,GUIManager::getInstance()->myRect((gameplay_bar->getSize().Width/2)-60,gameplay_bar->getSize().Height-128,128,128),-1); lifegauge->setImage(circle); lifegauge->ViewHalfLeft(); lifegauge->setID(GUIManager::IMG_LIFEGAUGE); // The mana gauge CGUIGfxStatus* managauge = new gui::CGUIGfxStatus(guienv, gameplay_bar_image,GUIManager::getInstance()->myRect((gameplay_bar->getSize().Width/2)-60,gameplay_bar->getSize().Height-128,128,128),-1); managauge->setImage(circleMana); managauge->ViewHalfRight(); managauge->setID(GUIManager::IMG_MANAGAUGE); // The image over the circle IGUIImage* circle_overlay = guienv->addImage(topCircle,vector2d<s32>((gameplay_bar->getSize().Width/2)-64,gameplay_bar->getSize().Height-128),true,gameplay_bar_image); } gameplay_bar_image->setVisible(false); ///DIALOG guiDialogImgYes = driver->getTexture("../media/art/img_yes.png"); guiDialogImgYes_s = driver->getTexture("../media/art/img_yes_s.png"); guiDialogImgNo = driver->getTexture("../media/art/img_no.png"); guiDialogImgNo_s = driver->getTexture("../media/art/img_no_s.png"); //view items if (gameplay_bar_image) { core::stringw text=LANGManager::getInstance()->getText("bt_view_items"); IGUIButton* guiBtViewItems = guienv->addButton(GUIManager::getInstance()->myRect(465,85,48,48), //displaywidth/2 + 80,displayheight - 57,48,48), gameplay_bar_image, GUIManager::BT_ID_VIEW_ITEMS,L"", text.c_str()); guiBtViewItems->setImage(driver->getTexture("../media/art/bt_view_items.png")); guiBtViewItems->setVisible(true); } //Items window IGUIWindow* guiWindowItems = guienv->addWindow(GUIManager::getInstance()->myRect(100,100,displaywidth-200,displayheight-150),false,L"",0,GUIManager::GCW_GAMEPLAY_ITEMS); guiWindowItems->getCloseButton()->setVisible(false); guiWindowItems->setDrawTitlebar(false); guiWindowItems->setDraggable(false); guiWindowItems->setAlignment(EGUIA_CENTER,EGUIA_CENTER,EGUIA_CENTER,EGUIA_CENTER); IGUITabControl * gameTabCtrl = guienv->addTabControl(core::rect<s32>(10,30,displaywidth-240,displayheight-200),guiWindowItems,false,true,-1); IGUITab * tab1 = gameTabCtrl->addTab(LANGManager::getInstance()->getText("game_stats_title").c_str()); IGUITab * tab2 = gameTabCtrl->addTab(LANGManager::getInstance()->getText("game_inventory_title").c_str()); IGUITab * tab3 = gameTabCtrl->addTab(LANGManager::getInstance()->getText("game_skills_title").c_str()); IGUITab * tab4 = gameTabCtrl->addTab(LANGManager::getInstance()->getText("game_quests_title").c_str()); nodepreview = new NodePreview(guienv,tab1,rect<s32>(440,40,740,370),-1); nodepreview->drawBackground(false); //DynamicObjectsManager::getInstance()->setActiveObject("player_template"); //guiPlayerNodePreview->setNode(DynamicObjectsManager::getInstance()->getActiveObject()->getNode()); //guiPlayerNodePreview->setNode(Player::getInstance()->getNodeRef()); //DynamicObjectsManager::getInstance()->setActiveObject("Archer"); //printf("This is the node name: %s\n",DynamicObjectsManager::getInstance()->getActiveObject()->getName()); nodepreview->setAlignment(EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT,EGUIA_UPPERLEFT,EGUIA_UPPERLEFT); IGUIListBox* guiPlayerItems = guienv->addListBox(GUIManager::getInstance()->myRect(10,30,200,displayheight-340),tab2,GUIManager::LB_ID_PLAYER_ITEMS,true); ITexture* info_none = driver->getTexture("../media/editor/info_none.jpg"); IGUIImage* guiPlayerLootImage = NULL; if (info_none) guiPlayerLootImage = guienv->addImage(info_none,vector2d<s32>(220,30),true,tab2,GUIManager::IMG_LOOT); guienv->addStaticText(L"",core::rect<s32>(220,250,520,410),true,true,tab2,GUIManager::TXT_ID_LOOT_DESCRIPTION,true); //guienv->addImage(info_none,vector2d<s32>(5,5),true,tab2); core::stringc filename = "../media/dynamic_objects/"; IGUIButton* guiBtUseItem = guienv->addButton(GUIManager::getInstance()->myRect(10,displayheight-300,32,32), tab2, GUIManager::BT_ID_USE_ITEM, L"", stringw(LANGManager::getInstance()->getText("bt_use_item")).c_str()); guiBtUseItem->setImage(driver->getTexture("../media/art/bt_yes_32.png")); IGUIButton* guiBtDropItem = guienv->addButton(GUIManager::getInstance()->myRect(52,displayheight-300,32,32), tab2, GUIManager::BT_ID_DROP_ITEM, L"", stringw(LANGManager::getInstance()->getText("bt_drop_item")).c_str()); guiBtDropItem->setImage(driver->getTexture("../media/art/bt_no_32.png")); IGUIButton* guiBtCloseItemsWindow = guienv->addButton(GUIManager::getInstance()->myRect(displaywidth-210-32,displayheight-160 - 32,32,32), guiWindowItems, GUIManager::BT_ID_CLOSE_ITEMS_WINDOW, L"", stringw(LANGManager::getInstance()->getText("bt_close_items_window")).c_str()); guiBtCloseItemsWindow->setImage(driver->getTexture("../media/art/bt_arrow_32.png")); guiWindowItems->setVisible(false); // TExt GUI for player stats IGUIStaticText* guiPlayerMoney = guienv->addStaticText(L"GOLD:129",GUIManager::getInstance()->myRect(15,displayheight-300,300,32),false,false,tab1, GUIManager::ST_ID_PLAYER_MONEY); guiPlayerMoney->setOverrideFont(GUIManager::getInstance()->guiFontLarge28); guiPlayerMoney->setOverrideColor(SColor(255,255,255,255)); stringc playerLifeText = LANGManager::getInstance()->getText("txt_player_life"); IGUIStaticText* guiPlayerLife=guienv->addStaticText(stringw(playerLifeText).c_str(),GUIManager::getInstance()->myRect(15,6,600,30),false,false,tab1,-1,false); guiPlayerLife->setOverrideColor(SColor(255,255,255,100)); guiPlayerLife->setOverrideFont(GUIManager::getInstance()->guiFontLarge28); guiPlayerLife->setID(GUIManager::ST_ID_PLAYER_LIFE); //Have to rework this. Currently hidden. IGUIStaticText* guiPlayerLife_Shadow=guienv->addStaticText(stringw(playerLifeText).c_str(),GUIManager::getInstance()->myRect(14,5,600,30),false,false,tab1,-1,false); guiPlayerLife_Shadow->setOverrideColor(SColor(255,30,30,30)); guiPlayerLife_Shadow->setOverrideFont(GUIManager::getInstance()->guiFontLarge28); guiPlayerLife_Shadow->setVisible(false); GUIManager::getInstance()->setElementVisible(GUIManager::ST_ID_PLAYER_LIFE, false); ////// -------------------------------- /// Define the Dialogs used in the game ////// IGUIWindow* guidialog = guienv->addWindow(GUIManager::getInstance()->myRect(10,displayheight-200,displaywidth-20,190),true,L"",0,GUIManager::GCW_DIALOG); guidialog->getCloseButton()->setVisible(false); guidialog->setDrawTitlebar(false); guidialog->setDraggable(false); guidialog->setDrawBackground(false); guidialog->setAlignment(EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); // Panel background is done with pictures IGUIImage* img1 = guienv->addImage(driver->getTexture("../media/art/panel_left.png"),vector2d<s32>(0,0),true,guidialog); IGUIImage* img2 = guienv->addImage(driver->getTexture("../media/art/panel_middle.png"),vector2d<s32>(51,0),true,guidialog); IGUIImage* img3 = guienv->addImage(driver->getTexture("../media/art/panel_right.png"),vector2d<s32>(581,0),true,guidialog); img2->setScaleImage(true); img2->setAlignment(EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); img3->setAlignment(EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); // Text display of the panel rect<s32> textRect = rect<s32>(30,25,600,170); IGUIStaticText* txt_dialog = guienv->addStaticText(L"Hello! This is a simple test to see how the text is flowing inside the box. There is a test, test, and test of text we need to make to be sure the flowing is ok",textRect,false,false,guidialog,GUIManager::TXT_ID_DIALOG,false); txt_dialog->setOverrideFont(GUIManager::getInstance()->guiFontDialog); txt_dialog->setOverrideColor(SColor(255,255,255,255)); txt_dialog->setWordWrap(true); txt_dialog->setAlignment(EGUIA_UPPERLEFT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); IGUIButton* guiBtDialogYes = guienv->addButton(GUIManager::getInstance()->myRect(640,30,52,52), guidialog, GUIManager::BT_ID_DIALOG_YES, L"", stringw(LANGManager::getInstance()->getText("bt_dialog_yes")).c_str()); guiBtDialogYes->setImage(guiDialogImgYes); guiBtDialogYes->setAlignment(EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); IGUIButton* guiBtDialogCancel = guienv->addButton(GUIManager::getInstance()->myRect(640,110,52,52), guidialog, GUIManager::BT_ID_DIALOG_CANCEL, L"", stringw(LANGManager::getInstance()->getText("bt_dialog_no")).c_str()); guiBtDialogCancel->setImage(guiDialogImgNo); guiBtDialogCancel->setAlignment(EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT); guidialog->setVisible(false); }
bool EditorEventReceiver::OnEvent(const SEvent& event) { if (event.EventType == irr::EET_KEY_INPUT_EVENT) { KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown; if (KeyIsDown[KEY_ESCAPE]) { //Return to the main menu delete Universe::instance->gameName; Universe::instance->gameName = NULL; Universe::instance->state = NextLevel; } } else if (event.EventType == EET_GUI_EVENT) { s32 eventCallerId = event.GUIEvent.Caller->getID(); switch(event.GUIEvent.EventType) { case EGET_BUTTON_CLICKED: if (eventCallerId >= MapCellSelectWindowToggleButton && eventCallerId <= CharacterSelectWindowToggleButton) { if (!Universe::instance->guienv->getRootGUIElement()->getElementFromId(eventCallerId - 10)) { //Window is not created wchar_t wstr[512]; //Buffer MapObject** mapObjects; //General pointer to any MapObjects in GameResources. Is defined in the switch below int mapObjectsCount; //'mapObjects' count int brushIndex; //Current brush (0: MapCell, 1:NPC, 2:Item, 3:Static, 4:Character) brushIndex = eventCallerId - MapCellSelectWindowToggleButton; switch (eventCallerId) { case MapCellSelectWindowToggleButton: //Define specific title wcscpy(wstr, L"Map cell selection"); //Define that we would use MapCells as MapObjects mapObjects = (MapObject**)Universe::instance->game->resources->mapCells; mapObjectsCount = Universe::instance->game->resources->mapCellsCount; break; case NPCSelectWindowToggleButton: //Define specific title wcscpy(wstr, L"NPC selection"); //Define that we would use NPCs as MapObjects mapObjects = (MapObject**)Universe::instance->game->resources->npcs; mapObjectsCount = Universe::instance->game->resources->npcsCount; break; case ItemSelectWindowToggleButton: //Define specific title wcscpy(wstr, L"Item selection"); //Define that we would use Items as MapObjects mapObjects = (MapObject**)Universe::instance->game->resources->items; mapObjectsCount = Universe::instance->game->resources->itemsCount; break; case StaticSelectWindowToggleButton: //Define specific title wcscpy(wstr, L"Static selection"); //Define that we would use Statics as MapObjects mapObjects = (MapObject**)Universe::instance->game->resources->statics; mapObjectsCount = Universe::instance->game->resources->staticsCount; break; case CharacterSelectWindowToggleButton: //Define specific title wcscpy(wstr, L"Character selection"); //Define that we would use Characters as MapObjects mapObjects = (MapObject**)Universe::instance->game->resources->characters; mapObjectsCount = Universe::instance->game->resources->charactersCount; break; } char** tags; int tagsCount; IGUIWindow* wnd1; //Create window with the specific title 'wstr' wnd1 = Universe::instance->guienv->addWindow(rect< s32 >(224, 64, 760, 536), false, wstr, 0, eventCallerId - 10); //ListBox for MapObjects IGUIListBox* molb = Universe::instance->guienv->addListBox(rect< s32 >(128, 64, 128 + 224, 64 + 320), wnd1, eventCallerId + 5, true); for (int i = 0; i < mapObjectsCount; i++) { swprintf(wstr, L"[%d] ", mapObjects[i]->id); mbstowcs(wstr + wcslen(wstr), mapObjects[i]->name, 511); molb->addItem(wstr); if (Universe::instance->brush[brushIndex] == mapObjects[i]) molb->setSelected(i); //Select item in list that was used last time in this MapObject list } tagsCount = Universe::instance->game->resources->GetMapObjectsTags(mapObjects, mapObjectsCount, tags); if (tagsCount > 0) { //Tags exists. Therefore we're to put 'All' CheckBox Universe::instance->guienv->addCheckBox(true, rect< s32 >(32, 64, 32 + 92, 64 + 16), wnd1, -1, L"All"); //IGUIElement* container = Universe::instance->guienv->addModalScreen(wnd1); //IGUIElement* container = Universe::instance->guienv->addScrollBar(false, rect< s32 >(16, 64, 16 + 92, 64 + 256), wnd1, -1); for (int i = 0; i < tagsCount; i++) { mbstowcs(wstr, tags[i], 511); Universe::instance->guienv->addCheckBox(true, rect< s32 >(32, 80 + 16 * i, 32 + 92, 80 + 16 * (i + 1)), wnd1, -1, wstr); } delete[] tags; } Universe::instance->guienv->addButton(rect< s32 >(415, 420, 415 + 96, 420 + 32), wnd1, eventCallerId + 10, L"OK", L"Select current map object"); } //Focus just created MapObject selection window (or focus old window) Universe::instance->guienv->setFocus(Universe::instance->guienv->getRootGUIElement()->getElementFromId(eventCallerId - 10)); } else if (eventCallerId >= MapCellSelectWindowOKButton && eventCallerId <= CharacterSelectWindowOKButton) { IGUIListBox* lb = (IGUIListBox*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(eventCallerId - 20)->getElementFromId(eventCallerId - 5); if (lb->getSelected() >= 0) { int mapObjectId; swscanf(lb->getListItem(lb->getSelected()), L"[%d]", &mapObjectId); switch (eventCallerId) { case MapCellSelectWindowOKButton: Universe::instance->brush[0] = Universe::instance->game->resources->GetMapCell(mapObjectId); break; case NPCSelectWindowOKButton: Universe::instance->brush[1] = Universe::instance->game->resources->GetNPC(mapObjectId); break; case ItemSelectWindowOKButton: Universe::instance->brush[2] = Universe::instance->game->resources->GetItem(mapObjectId); break; case StaticSelectWindowOKButton: Universe::instance->brush[3] = Universe::instance->game->resources->GetStatic(mapObjectId); break; case CharacterSelectWindowOKButton: Universe::instance->brush[4] = Universe::instance->game->resources->GetCharacter(mapObjectId); break; } //Close parent window (MapObject selection window) lb->getParent()->remove(); } } else { switch (eventCallerId) { case LocationsEditButton: { IGUIWindow* wnd; wnd = (IGUIWindow*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow); if (wnd) { wnd->remove(); Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox)->setEnabled(true); } else { wnd = Universe::instance->guienv->addWindow(rect< s32 >(Universe::instance->toolbarWidth, 0, Universe::instance->toolbarWidth + 242, 184), false, L"Locations edit", 0, LocationsEditWindow); wnd->getCloseButton()->setEnabled(false); wnd->getCloseButton()->setVisible(false); Universe::instance->guienv->addEditBox(Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox)->getText(), rect< s32 >(32, 32, 208, 56), true, wnd, LocationNameEditBox); Universe::instance->guienv->addEditBox(L"64", rect< s32 >(32, 80, 112, 104), true, wnd, LocationWidthEditBox); Universe::instance->guienv->addEditBox(L"64", rect< s32 >(128, 80, 208, 104), true, wnd, LocationHeightEditBox); Universe::instance->guienv->addButton(rect< s32 >(32, 128, 32 + 48, 160), wnd, LocationsEditDeleteButton, L"Delete", L"Delete current location"); Universe::instance->guienv->addButton(rect< s32 >(96, 128, 96 + 48, 160), wnd, LocationsEditSaveButton, L"Save", L"Apply settings to the current location")->setEnabled(false); Universe::instance->guienv->addButton(rect< s32 >(160, 128, 160 + 48, 160), wnd, LocationsEditAddButton, L"Save as", L"Apply settings to the new location"); Universe::instance->guienv->setFocus(wnd); Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox)->setEnabled(false); } break; } case LocationsEditSaveButton: { char str[256]; int width, height; wcstombs(str, Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationNameEditBox)->getText(), 256); //swscanf(Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationWidthEditBox)->getText(), L"%d", &width); //swscanf(Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationHeightEditBox)->getText(), L"%d", &height); delete Universe::instance->currentLocation->name; Universe::instance->currentLocation->name = new char[strlen(str) + 1]; strcpy(Universe::instance->currentLocation->name, str); Universe::instance->currentLocation->Update(); //Update ComboBox // ((IGUIComboBox*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox))->updateItem(L"sd"); //Close locations edit Window and enable locations ComboBox Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->remove(); Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox)->setEnabled(true); break; } case LocationsEditAddButton: { char str[256]; int width, height; wcstombs(str, Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationNameEditBox)->getText(), 255); swscanf(Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationWidthEditBox)->getText(), L"%d", &width); swscanf(Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationHeightEditBox)->getText(), L"%d", &height); //Add location to DB and spawn it Universe::instance->game->data->LocationSpawn(Universe::instance->game->data->AddLocation(str, width, height), Editor); //Add location to the locations list ((IGUIComboBox*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox))->addItem(Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->getElementFromId(LocationNameEditBox)->getText()); //Close locations edit Window and enable locations ComboBox Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->remove(); Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox)->setEnabled(true); break; } case LocationsEditDeleteButton: { IGUIComboBox* lcb = (IGUIComboBox*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox); if (lcb->getItemCount() > 1) { //It's not the last location //Delete location from DB and unspawn it Universe::instance->game->data->LocationDelete(lcb->getSelected()); //Delete location from the locations list lcb->removeItem(lcb->getSelected()); //Select another location lcb->setSelected(0); //Close locations edit Window and enable locations ComboBox Universe::instance->guienv->getRootGUIElement()->getElementFromId(LocationsEditWindow)->remove(); Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox)->setEnabled(true); } break; } } } break; case EGET_COMBO_BOX_CHANGED: switch (eventCallerId) { case LocationsComboBox: Universe::instance->render->smgr->clear(); Universe::instance->SetLocation(Universe::instance->game->data->locations[((IGUIComboBox*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(LocationsComboBox))->getSelected()]); //The code below (3 lines) does not prevent exception during loading another locations due to camera test mode ISceneNode* camPos = Universe::instance->render->smgr->addEmptySceneNode(); camPos->setPosition(vector3df(50,50,10)); ICameraSceneNode *camera = Universe::instance->render->smgr->addCameraSceneNode(0, vector3df(50,50,10), vector3df(50,0,40)); Universe::instance->DrawScene(); break; } break; case EGET_TAB_CHANGED: switch (eventCallerId) { case MapObjectsTabControl: Universe::instance->brushIndex = ((IGUITabControl*)Universe::instance->guienv->getRootGUIElement()->getElementFromId(ToolBarWindow)->getElementFromId(MapObjectsTabControl))->getActiveTab(); break; } break; case EGET_CHECKBOX_CHANGED: /* IGUIListBox* molb = Universe::instance->guienv->addListBox(rect< s32 >(128, 64, 128 + 224, 64 + 320), wnd1, eventCallerId + 5, true); for (int i = 0; i < mapObjectsCount; i++) { swprintf(wstr, L"[%d] ", mapObjects[i]->id); mbstowcs(wstr + wcslen(wstr), mapObjects[i]->name, 511); molb->addItem(wstr); if (Universe::instance->brush[brushIndex] == mapObjects[i]) molb->setSelected(i); //Select item in list that was used last time in this MapObject list } */ //Filter //Universe::instance->game->resources->FilterByTag<MapCell>(Universe::instance->game->resources->mapCells, Universe::instance->game->resources->mapCellsCount, , ); break; } } return false; }