diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 385152943..4cf3bd7fd 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -29,7 +29,7 @@ add_openmw_dir (mwgui map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list formatting inventorywindow container hud countdialog tradewindow settingswindow confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu - itemselection + itemselection spellbuyingwindow ) add_openmw_dir (mwdialogue diff --git a/apps/openmw/mwbase/windowmanager.hpp b/apps/openmw/mwbase/windowmanager.hpp index 389f816dc..14b1051e8 100644 --- a/apps/openmw/mwbase/windowmanager.hpp +++ b/apps/openmw/mwbase/windowmanager.hpp @@ -42,6 +42,7 @@ namespace MWGui class Console; class SpellWindow; class TradeWindow; + class SpellBuyingWindow; class ConfirmationDialog; class CountDialog; class ScrollWindow; @@ -106,6 +107,7 @@ namespace MWBase virtual MWGui::CountDialog* getCountDialog() = 0; virtual MWGui::ConfirmationDialog* getConfirmationDialog() = 0; virtual MWGui::TradeWindow* getTradeWindow() = 0; + virtual MWGui::SpellBuyingWindow* getSpellBuyingWindow() = 0; virtual MWGui::SpellWindow* getSpellWindow() = 0; virtual MWGui::Console* getConsole() = 0; diff --git a/apps/openmw/mwclass/creature.cpp b/apps/openmw/mwclass/creature.cpp index 7c6021652..d80a5c788 100644 --- a/apps/openmw/mwclass/creature.cpp +++ b/apps/openmw/mwclass/creature.cpp @@ -66,6 +66,11 @@ namespace MWClass data->mCreatureStats.setFlee(ref->base->mAiData.mFlee); data->mCreatureStats.setAlarm(ref->base->mAiData.mAlarm); + // spells + for (std::vector::const_iterator iter (ref->base->mSpells.list.begin()); + iter!=ref->base->mSpells.list.end(); ++iter) + data->mCreatureStats.getSpells().add (*iter); + // store ptr.getRefData().setCustomData (data.release()); } diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 909c681a5..8aab9da56 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -105,6 +105,11 @@ namespace MWClass data->mCreatureStats.setFlee(ref->base->mAiData.mFlee); data->mCreatureStats.setAlarm(ref->base->mAiData.mAlarm); + // spells + for (std::vector::const_iterator iter (ref->base->spells.list.begin()); + iter!=ref->base->spells.list.end(); ++iter) + data->mCreatureStats.getSpells().add (*iter); + // store ptr.getRefData().setCustomData (data.release()); } diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index 841e36bf4..1b7532d0a 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -794,6 +794,11 @@ namespace MWDialogue else win->setShowTrade(false); + if (services & ESM::NPC::Spells) + win->setShowSpells(true); + else + win->setShowSpells(false); + // sort again, because the previous sort was case-sensitive keywordList.sort(stringCompareNoCase); win->setKeywords(keywordList); diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index 00a786a2c..a01da7f9f 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -17,6 +17,7 @@ #include "widgets.hpp" #include "list.hpp" #include "tradewindow.hpp" +#include "spellbuyingwindow.hpp" #include "inventorywindow.hpp" using namespace MWGui; @@ -46,6 +47,7 @@ DialogueWindow::DialogueWindow(MWBase::WindowManager& parWindowManager) : WindowBase("openmw_dialogue_window.layout", parWindowManager) , mEnabled(true) , mShowTrade(false) + , mShowSpells(false) { // Centre dialog center(); @@ -127,6 +129,11 @@ void DialogueWindow::onSelectTopic(std::string topic) mWindowManager.pushGuiMode(GM_Barter); mWindowManager.getTradeWindow()->startTrade(mPtr); } + else if (topic == MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sSpells")->str) + { + mWindowManager.pushGuiMode(GM_SpellBuying); + mWindowManager.getSpellBuyingWindow()->startSpellBuying(mPtr); + } else MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(topic)); @@ -148,11 +155,14 @@ void DialogueWindow::setKeywords(std::list keyWords) { mTopicsList->clear(); - bool anyService = mShowTrade; + bool anyService = mShowTrade||mShowSpells; if (mShowTrade) mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sBarter")->str); + if (mShowSpells) + mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sSpells")->str); + if (anyService) mTopicsList->addSeparator(); diff --git a/apps/openmw/mwgui/dialogue.hpp b/apps/openmw/mwgui/dialogue.hpp index e7f2b076c..a43b0d5a7 100644 --- a/apps/openmw/mwgui/dialogue.hpp +++ b/apps/openmw/mwgui/dialogue.hpp @@ -51,6 +51,7 @@ namespace MWGui // various service button visibilities, depending if the npc/creature talked to has these services // make sure to call these before setKeywords() void setShowTrade(bool show) { mShowTrade = show; } + void setShowSpells(bool show) { mShowSpells = show; } protected: void onSelectTopic(std::string topic); @@ -70,6 +71,7 @@ namespace MWGui // various service button visibilities, depending if the npc/creature talked to has these services bool mShowTrade; + bool mShowSpells; bool mEnabled; diff --git a/apps/openmw/mwgui/mode.hpp b/apps/openmw/mwgui/mode.hpp index 2d6f69871..4417f7b9c 100644 --- a/apps/openmw/mwgui/mode.hpp +++ b/apps/openmw/mwgui/mode.hpp @@ -20,6 +20,7 @@ namespace MWGui GM_Dialogue, // NPC interaction GM_Barter, GM_Rest, + GM_SpellBuying, // Startup character creation dialogs GM_Name, diff --git a/apps/openmw/mwgui/spellbuyingwindow.cpp b/apps/openmw/mwgui/spellbuyingwindow.cpp new file mode 100644 index 000000000..48e181545 --- /dev/null +++ b/apps/openmw/mwgui/spellbuyingwindow.cpp @@ -0,0 +1,190 @@ +#include "spellbuyingwindow.hpp" + +#include + +#include "../mwbase/environment.hpp" +#include "../mwbase/world.hpp" +#include "../mwbase/soundmanager.hpp" +#include "../mwbase/windowmanager.hpp" + +#include "../mwworld/player.hpp" +#include "../mwworld/manualref.hpp" + +#include "../mwmechanics/spells.hpp" +#include "../mwmechanics/creaturestats.hpp" + +#include "inventorywindow.hpp" +#include "tradewindow.hpp" + +namespace MWGui +{ + const int SpellBuyingWindow::sLineHeight = 18; + + SpellBuyingWindow::SpellBuyingWindow(MWBase::WindowManager& parWindowManager) : + WindowBase("openmw_spell_buying_window.layout", parWindowManager) + , ContainerBase(NULL) // no drag&drop + , mCurrentY(0) + , mLastPos(0) + { + setCoord(0, 0, 450, 300); + + getWidget(mCancelButton, "CancelButton"); + getWidget(mPlayerGold, "PlayerGold"); + getWidget(mSelect, "Select"); + getWidget(mSpells, "Spells"); + getWidget(mSpellsBoxWidget, "SpellsBox"); + getWidget(mSpellsClientWidget, "SpellsClient"); + getWidget(mSpellsScrollerWidget, "SpellsScroller"); + + mSpellsClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &SpellBuyingWindow::onMouseWheel); + + mSpellsScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &SpellBuyingWindow::onScrollChangePosition); + + mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellBuyingWindow::onCancelButtonClicked); + + int cancelButtonWidth = mCancelButton->getTextSize().width + 24; + mCancelButton->setCoord(430-cancelButtonWidth, + mCancelButton->getTop(), + cancelButtonWidth, + mCancelButton->getHeight()); + mSpells->setCoord(450/2-mSpells->getTextSize().width/2, + mSpells->getTop(), + mSpells->getTextSize().width, + mSpells->getHeight()); + mSelect->setCoord(8, + mSelect->getTop(), + mSelect->getTextSize().width, + mSelect->getHeight()); + } + + void SpellBuyingWindow::addSpell(const std::string& spellId) + { + const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().spells.find(spellId); + int price = spell->data.cost*MWBase::Environment::get().getWorld()->getStore().gameSettings.search("fSpellValueMult")->f; + MyGUI::Button* toAdd = mSpellsClientWidget->createWidget((price>mWindowManager.getInventoryWindow()->getPlayerGold()) ? "SandTextGreyedOut" : "SpellText", 0, mCurrentY, 200, sLineHeight, MyGUI::Align::Default); + mCurrentY += sLineHeight; + /// \todo price adjustment depending on merchantile skill + toAdd->setUserData(price); + toAdd->setCaption(spell->name+" - "+boost::lexical_cast(price)+MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sgp")->str); + toAdd->setSize(toAdd->getTextSize().width,sLineHeight); + toAdd->eventMouseWheel += MyGUI::newDelegate(this, &SpellBuyingWindow::onMouseWheel); + toAdd->setUserString("ToolTipType", "Spell"); + toAdd->setUserString("Spell", spellId); + toAdd->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellBuyingWindow::onSpellButtonClick); + mSpellsWidgetMap.insert(std::make_pair (toAdd, spellId)); + } + + void SpellBuyingWindow::clearSpells() + { + mSpellsScrollerWidget->setScrollPosition(0); + onScrollChangePosition(mSpellsScrollerWidget, mSpellsScrollerWidget->getScrollPosition()); + mCurrentY = 0; + while (mSpellsClientWidget->getChildCount()) + MyGUI::Gui::getInstance().destroyWidget(mSpellsClientWidget->getChildAt(0)); + mSpellsWidgetMap.clear(); + } + + void SpellBuyingWindow::startSpellBuying(const MWWorld::Ptr& actor) + { + center(); + mActor = actor; + clearSpells(); + + MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); + + MWMechanics::Spells& playerSpells = MWWorld::Class::get (player).getCreatureStats (player).getSpells(); + MWMechanics::Spells& merchantSpells = MWWorld::Class::get (actor).getCreatureStats (actor).getSpells(); + + for (MWMechanics::Spells::TIterator iter = merchantSpells.begin(); iter!=merchantSpells.end(); ++iter) + { + const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().spells.find (*iter); + + if (spell->data.type!=ESM::Spell::ST_Spell) + continue; // don't try to sell diseases, curses or powers + + if (std::find (playerSpells.begin(), playerSpells.end(), *iter)!=playerSpells.end()) + continue; // we have that spell already + + addSpell (*iter); + } + + updateLabels(); + updateScroller(); + } + + void SpellBuyingWindow::onSpellButtonClick(MyGUI::Widget* _sender) + { + int price = *_sender->getUserData(); + + if (mWindowManager.getInventoryWindow()->getPlayerGold()>=price) + { + MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); + MWMechanics::CreatureStats& stats = MWWorld::Class::get(player).getCreatureStats(player); + MWMechanics::Spells& spells = stats.getSpells(); + spells.add (mSpellsWidgetMap.find(_sender)->second); + mWindowManager.getTradeWindow()->addOrRemoveGold(-price); + mSpellsScrollerWidget->setScrollPosition(0); + onScrollChangePosition(mSpellsScrollerWidget, mSpellsScrollerWidget->getScrollPosition()); + updateScroller(); + startSpellBuying(mActor); + } + } + + void SpellBuyingWindow::onCancelButtonClicked(MyGUI::Widget* _sender) + { + mWindowManager.removeGuiMode(GM_SpellBuying); + } + + void SpellBuyingWindow::updateLabels() + { + mPlayerGold->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGold")->str + + ": " + boost::lexical_cast(mWindowManager.getInventoryWindow()->getPlayerGold())); + mPlayerGold->setCoord(8, + mPlayerGold->getTop(), + mPlayerGold->getTextSize().width, + mPlayerGold->getHeight()); + } + + void SpellBuyingWindow::onReferenceUnavailable() + { + // remove both Spells and Dialogue (since you always trade with the NPC/creature that you have previously talked to) + mWindowManager.removeGuiMode(GM_SpellBuying); + mWindowManager.removeGuiMode(GM_Dialogue); + } + + void SpellBuyingWindow::updateScroller() + { + mSpellsScrollerWidget->setScrollRange(std::max(mCurrentY - mSpellsClientWidget->getHeight(), 0)); + mSpellsScrollerWidget->setScrollPage(std::max(mSpellsClientWidget->getHeight() - sLineHeight, 0)); + if (mCurrentY != 0) + mSpellsScrollerWidget->setTrackSize( (mSpellsBoxWidget->getHeight() / float(mCurrentY)) * mSpellsScrollerWidget->getLineSize() ); + } + + void SpellBuyingWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos) + { + int diff = mLastPos - pos; + // Adjust position of all widget according to difference + if (diff == 0) + return; + mLastPos = pos; + + for (unsigned int i=0;igetChildCount();i++) + { + MyGUI::Widget* toMove = mSpellsClientWidget->getChildAt(i); + toMove->setCoord(toMove->getCoord() + MyGUI::IntPoint(0, diff)); + } + } + + void SpellBuyingWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel) + { + if (mSpellsScrollerWidget->getScrollPosition() - _rel*0.3 < 0) + mSpellsScrollerWidget->setScrollPosition(0); + else if (mSpellsScrollerWidget->getScrollPosition() - _rel*0.3 > mSpellsScrollerWidget->getScrollRange()-1) + mSpellsScrollerWidget->setScrollPosition(mSpellsScrollerWidget->getScrollRange()-1); + else + mSpellsScrollerWidget->setScrollPosition(mSpellsScrollerWidget->getScrollPosition() - _rel*0.3); + + onScrollChangePosition(mSpellsScrollerWidget, mSpellsScrollerWidget->getScrollPosition()); + } +} + diff --git a/apps/openmw/mwgui/spellbuyingwindow.hpp b/apps/openmw/mwgui/spellbuyingwindow.hpp new file mode 100644 index 000000000..6f94e91b2 --- /dev/null +++ b/apps/openmw/mwgui/spellbuyingwindow.hpp @@ -0,0 +1,60 @@ +#ifndef MWGUI_SpellBuyingWINDOW_H +#define MWGUI_SpellBuyingWINDOW_H + +#include "container.hpp" +#include "window_base.hpp" + +#include "../mwworld/ptr.hpp" + +namespace MyGUI +{ + class Gui; + class Widget; +} + +namespace MWGui +{ + class WindowManager; +} + + +namespace MWGui +{ + class SpellBuyingWindow : public ContainerBase, public WindowBase + { + public: + SpellBuyingWindow(MWBase::WindowManager& parWindowManager); + + void startSpellBuying(const MWWorld::Ptr& actor); + + protected: + MyGUI::Button* mCancelButton; + MyGUI::TextBox* mPlayerGold; + MyGUI::TextBox* mSpells; + MyGUI::TextBox* mSelect; + + MyGUI::WidgetPtr mSpellsBoxWidget, mSpellsClientWidget; + MyGUI::ScrollBar* mSpellsScrollerWidget; + + MWWorld::Ptr mActor; + + std::map mSpellsWidgetMap; + + void onCancelButtonClicked(MyGUI::Widget* _sender); + void onSpellButtonClick(MyGUI::Widget* _sender); + void updateScroller(); + void onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos); + void onMouseWheel(MyGUI::Widget* _sender, int _rel); + void addSpell(const std::string& spellID); + void clearSpells(); + int mLastPos,mCurrentY; + + static const int sLineHeight; + + void updateLabels(); + + virtual void onReferenceUnavailable(); + }; +} + +#endif diff --git a/apps/openmw/mwgui/tradewindow.cpp b/apps/openmw/mwgui/tradewindow.cpp index 9abd97bb7..dc6c650ac 100644 --- a/apps/openmw/mwgui/tradewindow.cpp +++ b/apps/openmw/mwgui/tradewindow.cpp @@ -136,6 +136,33 @@ namespace MWGui drawItems(); } + void TradeWindow::addOrRemoveGold(int amount) + { + bool goldFound = false; + MWWorld::Ptr gold; + MWWorld::ContainerStore& playerStore = mWindowManager.getInventoryWindow()->getContainerStore(); + for (MWWorld::ContainerStoreIterator it = playerStore.begin(); + it != playerStore.end(); ++it) + { + if (MWWorld::Class::get(*it).getName(*it) == MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGold")->str) + { + goldFound = true; + gold = *it; + } + } + if (goldFound) + { + gold.getRefData().setCount(gold.getRefData().getCount() + amount); + } + else + { + assert(amount > 0); + MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), "Gold_001"); + ref.getPtr().getRefData().setCount(amount); + playerStore.add(ref.getPtr()); + } + } + void TradeWindow::onOfferButtonClicked(MyGUI::Widget* _sender) { // were there any items traded at all? @@ -186,29 +213,7 @@ namespace MWGui mWindowManager.getInventoryWindow()->transferBoughtItems(); // add or remove gold from the player. - bool goldFound = false; - MWWorld::Ptr gold; - MWWorld::ContainerStore& playerStore = mWindowManager.getInventoryWindow()->getContainerStore(); - for (MWWorld::ContainerStoreIterator it = playerStore.begin(); - it != playerStore.end(); ++it) - { - if (MWWorld::Class::get(*it).getName(*it) == MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGold")->str) - { - goldFound = true; - gold = *it; - } - } - if (goldFound) - { - gold.getRefData().setCount(gold.getRefData().getCount() + mCurrentBalance); - } - else - { - assert(mCurrentBalance > 0); - MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), "Gold_001"); - ref.getPtr().getRefData().setCount(mCurrentBalance); - playerStore.add(ref.getPtr()); - } + addOrRemoveGold(mCurrentBalance); std::string sound = "Item Gold Up"; MWBase::Environment::get().getSoundManager()->playSound (sound, 1.0, 1.0); diff --git a/apps/openmw/mwgui/tradewindow.hpp b/apps/openmw/mwgui/tradewindow.hpp index 1daeefa96..4ec55045c 100644 --- a/apps/openmw/mwgui/tradewindow.hpp +++ b/apps/openmw/mwgui/tradewindow.hpp @@ -32,6 +32,8 @@ namespace MWGui bool npcAcceptsItem(MWWorld::Ptr item); + void addOrRemoveGold(int gold); + protected: MyGUI::Button* mFilterAll; MyGUI::Button* mFilterWeapon; diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index faaa41783..dcefd1e71 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -37,6 +37,7 @@ #include "mainmenu.hpp" #include "countdialog.hpp" #include "tradewindow.hpp" +#include "spellbuyingwindow.hpp" #include "settingswindow.hpp" #include "confirmationdialog.hpp" #include "alchemywindow.hpp" @@ -61,6 +62,7 @@ WindowManager::WindowManager( , mScrollWindow(NULL) , mCountDialog(NULL) , mTradeWindow(NULL) + , mSpellBuyingWindow(NULL) , mSettingsWindow(NULL) , mConfirmationDialog(NULL) , mAlchemyWindow(NULL) @@ -126,6 +128,7 @@ WindowManager::WindowManager( mMessageBoxManager = new MessageBoxManager(this); mInventoryWindow = new InventoryWindow(*this,mDragAndDrop); mTradeWindow = new TradeWindow(*this); + mSpellBuyingWindow = new SpellBuyingWindow(*this); mDialogueWindow = new DialogueWindow(*this); mContainerWindow = new ContainerWindow(*this,mDragAndDrop); mHud = new HUD(w,h, mShowFPSLevel, mDragAndDrop); @@ -182,6 +185,7 @@ WindowManager::~WindowManager() delete mBookWindow; delete mScrollWindow; delete mTradeWindow; + delete mSpellBuyingWindow; delete mSettingsWindow; delete mConfirmationDialog; delete mAlchemyWindow; @@ -228,6 +232,7 @@ void WindowManager::updateVisible() mScrollWindow->setVisible(false); mBookWindow->setVisible(false); mTradeWindow->setVisible(false); + mSpellBuyingWindow->setVisible(false); mSettingsWindow->setVisible(false); mAlchemyWindow->setVisible(false); mSpellWindow->setVisible(false); @@ -317,6 +322,9 @@ void WindowManager::updateVisible() mInventoryWindow->setVisible(true); mTradeWindow->setVisible(true); break; + case GM_SpellBuying: + mSpellBuyingWindow->setVisible(true); + break; case GM_InterMessageBox: break; case GM_Journal: @@ -509,6 +517,7 @@ void WindowManager::onFrame (float frameDuration) mDialogueWindow->checkReferenceAvailable(); mTradeWindow->checkReferenceAvailable(); + mSpellBuyingWindow->checkReferenceAvailable(); mContainerWindow->checkReferenceAvailable(); mConsole->checkReferenceAvailable(); } @@ -786,6 +795,7 @@ MWGui::ScrollWindow* WindowManager::getScrollWindow() { return mScrollWindow; } MWGui::CountDialog* WindowManager::getCountDialog() { return mCountDialog; } MWGui::ConfirmationDialog* WindowManager::getConfirmationDialog() { return mConfirmationDialog; } MWGui::TradeWindow* WindowManager::getTradeWindow() { return mTradeWindow; } +MWGui::SpellBuyingWindow* WindowManager::getSpellBuyingWindow() { return mSpellBuyingWindow; } MWGui::SpellWindow* WindowManager::getSpellWindow() { return mSpellWindow; } MWGui::Console* WindowManager::getConsole() { return mConsole; } diff --git a/apps/openmw/mwgui/windowmanagerimp.hpp b/apps/openmw/mwgui/windowmanagerimp.hpp index 38411bb18..a91478bbc 100644 --- a/apps/openmw/mwgui/windowmanagerimp.hpp +++ b/apps/openmw/mwgui/windowmanagerimp.hpp @@ -105,6 +105,7 @@ namespace MWGui virtual MWGui::CountDialog* getCountDialog(); virtual MWGui::ConfirmationDialog* getConfirmationDialog(); virtual MWGui::TradeWindow* getTradeWindow(); + virtual MWGui::SpellBuyingWindow* getSpellBuyingWindow(); virtual MWGui::SpellWindow* getSpellWindow(); virtual MWGui::Console* getConsole(); @@ -212,6 +213,7 @@ namespace MWGui BookWindow* mBookWindow; CountDialog* mCountDialog; TradeWindow* mTradeWindow; + SpellBuyingWindow* mSpellBuyingWindow; SettingsWindow* mSettingsWindow; ConfirmationDialog* mConfirmationDialog; AlchemyWindow* mAlchemyWindow; diff --git a/files/mygui/CMakeLists.txt b/files/mygui/CMakeLists.txt index 70f7282e5..82fb64c76 100644 --- a/files/mygui/CMakeLists.txt +++ b/files/mygui/CMakeLists.txt @@ -64,11 +64,13 @@ set(MYGUI_FILES openmw_text.skin.xml openmw_tooltips.layout openmw_trade_window.layout + openmw_spell_buying_window.layout openmw_windows.skin.xml openmw_quickkeys_menu.layout openmw_quickkeys_menu_assign.layout openmw_itemselection_dialog.layout openmw_magicselection_dialog.layout + openmw_spell_buying_window.layout smallbars.png VeraMono.ttf markers.png diff --git a/files/mygui/openmw_spell_buying_window.layout b/files/mygui/openmw_spell_buying_window.layout new file mode 100644 index 000000000..6b45b231c --- /dev/null +++ b/files/mygui/openmw_spell_buying_window.layout @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/files/mygui/openmw_text.skin.xml b/files/mygui/openmw_text.skin.xml index e29483e35..3e1a977e5 100644 --- a/files/mygui/openmw_text.skin.xml +++ b/files/mygui/openmw_text.skin.xml @@ -17,6 +17,14 @@ + + + + + + + +