/* orxonox - the future of 3D-vertical-scrollers Copyright (C) 1004 orx This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ### File Specific: main-programmer std::string questName; std::string questDescription; std::string questPicture; std::string questDifficulty; std::string rewardDescription; std::string rewardPicture;: Andreas Hejj */ #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY #include "debug.h" #include "quest_gui.h" #include "event_handler.h" #include "state.h" #include "util/loading/load_param.h" #include "util/loading/factory.h" #include "graphics_engine.h" #include "camera.h" #include "sound_engine.h" #include "sound_source.h" #include "glgui_widget.h" #include "glgui.h" #include "menu/glgui_imagebutton.h" #include "glgui_multiline_text.h" #include #include "quest.h" #include "shell_command.h" ObjectListDefinition(QuestGUI); CREATE_FACTORY(QuestGUI); SHELL_COMMAND(gui, QuestGUI, guiInit); #include "script_class.h" CREATE_SCRIPTABLE_CLASS(QuestGUI, addMethod("guiInit", Executor0(&QuestGUI::guiInit)) ); QuestGUI::QuestGUI(const TiXmlElement* root) { if (root != NULL) { this->registerObject(this, QuestGUI::_objectList); this->toList(OM_GROUP_00); this->questBox = NULL; this->bKillGui = false; this->myQuest = new Quest(root); if(root) this->loadParams( root); } } /** * deconstructor */ QuestGUI::~QuestGUI () { if( this->myQuest) delete this->myQuest; } /** * loads the xml tagsthis->questDescription * @param root: root xml tag for this element */ void QuestGUI::loadParams(const TiXmlElement* root) { WorldEntity::loadParams(root); } /** * initializes the gui */ void QuestGUI::guiInit() { if (questBox == NULL) { this->questBox= new OrxGui::GLGuiBox(OrxGui::Vertical); questBox->setBorderTop(10); questBox->setBorderRight(10); questBox->setBorderLeft(10); questBox->setBorderBottom(10); this->questBox->setBackgroundTexture("maps/rand.png"); this->bKillGui = false; OrxGui::GLGuiBox* headerBox = new OrxGui::GLGuiBox(OrxGui::Horizontal); { headerBox->setBackgroundTexture("maps/rand-unten.png"); OrxGui::GLGuiImage* questImage = new OrxGui::GLGuiImage(); questImage->setWidgetSize(100, 100); questImage->loadImageFromFile(this->myQuest->getQuestPicture()); questImage->show(); headerBox->pack(questImage); OrxGui::GLGuiBox* outlineBox = new OrxGui::GLGuiBox(OrxGui::Vertical); { OrxGui::GLGuiMultiLineText* questDetails = new OrxGui::GLGuiMultiLineText(); questDetails->setText(this->myQuest->getQuestDifficulty()); questDetails->append(this->myQuest->getQuestPersons()); outlineBox->setBorderTop(0); outlineBox->setBorderRight(0); outlineBox->setBorderLeft(0); outlineBox->setBorderBottom(10); outlineBox->pack(questDetails); } headerBox->setBorderTop(0); headerBox->setBorderRight(0); headerBox->setBorderLeft(0); headerBox->setBorderBottom(10); headerBox->pack(outlineBox); } OrxGui::GLGuiBox* labelBox = new OrxGui::GLGuiBox(OrxGui::Horizontal); { labelBox->setBackgroundTexture("maps/rand-unten.png"); OrxGui::GLGuiMultiLineText* questTxt = new OrxGui::GLGuiMultiLineText(); questTxt->setText(this->myQuest->getQuestDescription()); labelBox->pack(questTxt); OrxGui::GLGuiImage* placeImage = new OrxGui::GLGuiImage(); placeImage->setWidgetSize(85, 10); placeImage->loadImageFromFile("maps/schwarz.png"); placeImage->show(); labelBox->pack(placeImage); labelBox->setBorderTop(0); labelBox->setBorderRight(0); labelBox->setBorderLeft(55); labelBox->setBorderBottom(10); } OrxGui::GLGuiBox* rewardBox = new OrxGui::GLGuiBox(OrxGui::Horizontal); { OrxGui::GLGuiImage* rewardImage = new OrxGui::GLGuiImage(); rewardImage->setWidgetSize(100, 100); rewardImage->loadImageFromFile(this->myQuest->getRewardPicture()); rewardImage->show(); rewardBox->pack(rewardImage); OrxGui::GLGuiMultiLineText* rewardTxt = new OrxGui::GLGuiMultiLineText(); rewardTxt->setText(this->myQuest->getRewardDescription()); rewardBox->setBorderTop(0); rewardBox->setBorderRight(0); rewardBox->setBorderLeft(0); rewardBox->setBorderBottom(10); rewardBox->pack(rewardTxt); } OrxGui::GLGuiBox* answerBox = new OrxGui::GLGuiBox(OrxGui::Horizontal); { OrxGui::GLGuiBox* acceptBox = new OrxGui::GLGuiBox(OrxGui::Horizontal); { //acceptBox->setBackgroundTexture("maps/rand-oben.png"); OrxGui::GLGuiButton* acceptButton = new OrxGui::GLGuiPushButton("Accept"); acceptButton->released.connect(this, &QuestGUI::accept); acceptBox->setBorderTop(10); acceptBox->setBorderRight(10); acceptBox->setBorderLeft(10); acceptBox->setBorderBottom(0); acceptBox->pack(acceptButton); } answerBox->pack(acceptBox); OrxGui::GLGuiImage* placeImage = new OrxGui::GLGuiImage(); placeImage->setWidgetSize(300, 10); placeImage->loadImageFromFile("maps/schwarz.png"); placeImage->show(); answerBox->pack(placeImage); OrxGui::GLGuiBox* refuseBox = new OrxGui::GLGuiBox(OrxGui::Horizontal); { //refuseBox->setBackgroundTexture("maps/rand-oben.png"); OrxGui::GLGuiButton* refuseButton = new OrxGui::GLGuiPushButton("Refuse"); refuseButton->released.connect(this, &QuestGUI::refuse); refuseBox->setBorderTop(10); refuseBox->setBorderRight(10); refuseBox->setBorderLeft(10); refuseBox->setBorderBottom(0); refuseBox->pack(refuseButton); } answerBox->setBorderTop(0); answerBox->setBorderRight(0); answerBox->setBorderLeft(0); answerBox->setBorderBottom(20); answerBox->pack(refuseBox); } this->questBox->pack(headerBox); this->questBox->pack(labelBox); this->questBox->pack(rewardBox); this->questBox->pack(answerBox); this->questBox->showAll(); this->questBox->setAbsCoor2D(300, 100); OrxGui::GLGuiHandler::getInstance()->activate(); OrxGui::GLGuiHandler::getInstance()->activateCursor(); } else { this->bKillGui = true; } } void QuestGUI::tick(float dt) { if( this->bKillGui) this->killgui(); } void QuestGUI::accept() { this->myQuest->setQuestActive(); this->bKillGui = true; } void QuestGUI::refuse() { this->bKillGui = true; } void QuestGUI::killgui() { OrxGui::GLGuiHandler::getInstance()->deactivate(); OrxGui::GLGuiHandler::getInstance()->deactivateCursor(); delete this->questBox; this->questBox = NULL; }