mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:26:40 +00:00 
			
		
		
		
	Merge remote-tracking branch 'scrawl/companion'
This commit is contained in:
		
						commit
						687ab1e9df
					
				
					 56 changed files with 546 additions and 114 deletions
				
			
		| 
						 | 
					@ -31,7 +31,7 @@ add_openmw_dir (mwgui
 | 
				
			||||||
    confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
 | 
					    confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
 | 
				
			||||||
    itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog spellcreationdialog
 | 
					    itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog spellcreationdialog
 | 
				
			||||||
    enchantingdialog trainingwindow travelwindow imagebutton exposedwindow cursor spellicons
 | 
					    enchantingdialog trainingwindow travelwindow imagebutton exposedwindow cursor spellicons
 | 
				
			||||||
    merchantrepair repair
 | 
					    merchantrepair repair soulgemdialog companionwindow
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_openmw_dir (mwdialogue
 | 
					add_openmw_dir (mwdialogue
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ add_openmw_dir (mwworld
 | 
				
			||||||
    containerstore actiontalk actiontake manualref player cellfunctors failedaction
 | 
					    containerstore actiontalk actiontake manualref player cellfunctors failedaction
 | 
				
			||||||
    cells localscripts customdata weather inventorystore ptr actionopen actionread
 | 
					    cells localscripts customdata weather inventorystore ptr actionopen actionread
 | 
				
			||||||
    actionequip timestamp actionalchemy cellstore actionapply actioneat
 | 
					    actionequip timestamp actionalchemy cellstore actionapply actioneat
 | 
				
			||||||
    esmstore store recordcmp fallback actionrepair
 | 
					    esmstore store recordcmp fallback actionrepair actionsoulgem
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_openmw_dir (mwclass
 | 
					add_openmw_dir (mwclass
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,8 @@ namespace MWBase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual ~DialogueManager() {}
 | 
					            virtual ~DialogueManager() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            virtual bool isInChoice() const = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void startDialogue (const MWWorld::Ptr& actor) = 0;
 | 
					            virtual void startDialogue (const MWWorld::Ptr& actor) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void addTopic (const std::string& topic) = 0;
 | 
					            virtual void addTopic (const std::string& topic) = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -201,6 +201,7 @@ namespace MWBase
 | 
				
			||||||
            ///< Hides dialog and schedules dialog to be deleted.
 | 
					            ///< Hides dialog and schedules dialog to be deleted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void messageBox (const std::string& message, const std::vector<std::string>& buttons = std::vector<std::string>()) = 0;
 | 
					            virtual void messageBox (const std::string& message, const std::vector<std::string>& buttons = std::vector<std::string>()) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void enterPressed () = 0;
 | 
					            virtual void enterPressed () = 0;
 | 
				
			||||||
            virtual int readPressedButton() = 0;
 | 
					            virtual int readPressedButton() = 0;
 | 
				
			||||||
            ///< returns the index of the pressed button or -1 if no button was pressed (->MessageBoxmanager->InteractiveMessageBox)
 | 
					            ///< returns the index of the pressed button or -1 if no button was pressed (->MessageBoxmanager->InteractiveMessageBox)
 | 
				
			||||||
| 
						 | 
					@ -235,12 +236,16 @@ namespace MWBase
 | 
				
			||||||
            virtual bool getPlayerSleeping() = 0;
 | 
					            virtual bool getPlayerSleeping() = 0;
 | 
				
			||||||
            virtual void wakeUpPlayer() = 0;
 | 
					            virtual void wakeUpPlayer() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            virtual void showCompanionWindow(MWWorld::Ptr actor) = 0;
 | 
				
			||||||
            virtual void startSpellMaking(MWWorld::Ptr actor) = 0;
 | 
					            virtual void startSpellMaking(MWWorld::Ptr actor) = 0;
 | 
				
			||||||
            virtual void startEnchanting(MWWorld::Ptr actor) = 0;
 | 
					            virtual void startEnchanting(MWWorld::Ptr actor) = 0;
 | 
				
			||||||
 | 
					            virtual void startSelfEnchanting(MWWorld::Ptr soulgem) = 0;
 | 
				
			||||||
            virtual void startTraining(MWWorld::Ptr actor) = 0;
 | 
					            virtual void startTraining(MWWorld::Ptr actor) = 0;
 | 
				
			||||||
            virtual void startRepair(MWWorld::Ptr actor) = 0;
 | 
					            virtual void startRepair(MWWorld::Ptr actor) = 0;
 | 
				
			||||||
            virtual void startRepairItem(MWWorld::Ptr item) = 0;
 | 
					            virtual void startRepairItem(MWWorld::Ptr item) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            virtual void showSoulgemDialog (MWWorld::Ptr item) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void changePointer (const std::string& name) = 0;
 | 
					            virtual void changePointer (const std::string& name) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual const Translation::Storage& getTranslationDataStorage() const = 0;
 | 
					            virtual const Translation::Storage& getTranslationDataStorage() const = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ namespace MWClass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (needKey && hasKey)
 | 
					        if (needKey && hasKey)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}", std::vector<std::string>());
 | 
					            MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}");
 | 
				
			||||||
            ptr.getCellRef().mLockLevel = 0;
 | 
					            ptr.getCellRef().mLockLevel = 0;
 | 
				
			||||||
            // using a key disarms the trap
 | 
					            // using a key disarms the trap
 | 
				
			||||||
            ptr.getCellRef().mTrap = "";
 | 
					            ptr.getCellRef().mTrap = "";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ namespace MWClass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (needKey && hasKey)
 | 
					        if (needKey && hasKey)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}", std::vector<std::string>());
 | 
					            MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}");
 | 
				
			||||||
            ptr.getCellRef().mLockLevel = 0;
 | 
					            ptr.getCellRef().mLockLevel = 0;
 | 
				
			||||||
            // using a key disarms the trap
 | 
					            // using a key disarms the trap
 | 
				
			||||||
            ptr.getCellRef().mTrap = "";
 | 
					            ptr.getCellRef().mTrap = "";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
#include "../mwworld/physicssystem.hpp"
 | 
					#include "../mwworld/physicssystem.hpp"
 | 
				
			||||||
#include "../mwworld/manualref.hpp"
 | 
					#include "../mwworld/manualref.hpp"
 | 
				
			||||||
#include "../mwworld/nullaction.hpp"
 | 
					#include "../mwworld/nullaction.hpp"
 | 
				
			||||||
 | 
					#include "../mwworld/actionsoulgem.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../mwgui/tooltips.hpp"
 | 
					#include "../mwgui/tooltips.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -236,4 +237,13 @@ namespace MWClass
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return newPtr;
 | 
					        return newPtr;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    boost::shared_ptr<MWWorld::Action> Miscellaneous::use (const MWWorld::Ptr& ptr) const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (ptr.getCellRef().mSoul == "")
 | 
				
			||||||
 | 
					            return boost::shared_ptr<MWWorld::Action>(new MWWorld::NullAction());
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionSoulgem(ptr));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,10 @@ namespace MWClass
 | 
				
			||||||
            ///< Return name of inventory icon.
 | 
					            ///< Return name of inventory icon.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual std::string getModel(const MWWorld::Ptr &ptr) const;
 | 
					            virtual std::string getModel(const MWWorld::Ptr &ptr) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
 | 
				
			||||||
 | 
					                const;
 | 
				
			||||||
 | 
					            ///< Generate action for using via inventory menu
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -117,6 +117,8 @@ namespace MWDialogue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void DialogueManager::startDialogue (const MWWorld::Ptr& actor)
 | 
					    void DialogueManager::startDialogue (const MWWorld::Ptr& actor)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        mLastTopic = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mChoice = -1;
 | 
					        mChoice = -1;
 | 
				
			||||||
        mIsInChoice = false;
 | 
					        mIsInChoice = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,6 +129,9 @@ namespace MWDialogue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mActorKnownTopics.clear();
 | 
					        mActorKnownTopics.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow();
 | 
				
			||||||
 | 
					        win->startDialogue(actor, MWWorld::Class::get (actor).getName (actor));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //setup the list of topics known by the actor. Topics who are also on the knownTopics list will be added to the GUI
 | 
					        //setup the list of topics known by the actor. Topics who are also on the knownTopics list will be added to the GUI
 | 
				
			||||||
        updateTopics();
 | 
					        updateTopics();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,8 +150,6 @@ namespace MWDialogue
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    //initialise the GUI
 | 
					                    //initialise the GUI
 | 
				
			||||||
                    MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue);
 | 
					                    MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue);
 | 
				
			||||||
                    MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow();
 | 
					 | 
				
			||||||
                    win->startDialogue(actor, MWWorld::Class::get (actor).getName (actor));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    creatureStats.talkedToPlayer();
 | 
					                    creatureStats.talkedToPlayer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +163,7 @@ namespace MWDialogue
 | 
				
			||||||
                    MWScript::InterpreterContext interpreterContext(&mActor.getRefData().getLocals(),mActor);
 | 
					                    MWScript::InterpreterContext interpreterContext(&mActor.getRefData().getLocals(),mActor);
 | 
				
			||||||
                    win->addText (Interpreter::fixDefinesDialog(info->mResponse, interpreterContext));
 | 
					                    win->addText (Interpreter::fixDefinesDialog(info->mResponse, interpreterContext));
 | 
				
			||||||
                    executeScript (info->mResultScript);
 | 
					                    executeScript (info->mResultScript);
 | 
				
			||||||
                    mLastTopic = it->mId;
 | 
					                    mLastTopic = Misc::StringUtils::lowerCase(it->mId);
 | 
				
			||||||
                    mLastDialogue = *info;
 | 
					                    mLastDialogue = *info;
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -398,6 +401,11 @@ namespace MWDialogue
 | 
				
			||||||
        updateTopics();
 | 
					        updateTopics();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool DialogueManager::isInChoice() const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return mIsInChoice;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void DialogueManager::goodbyeSelected()
 | 
					    void DialogueManager::goodbyeSelected()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Do not close the dialogue window if the player has to answer a question
 | 
					        // Do not close the dialogue window if the player has to answer a question
 | 
				
			||||||
| 
						 | 
					@ -423,16 +431,14 @@ namespace MWDialogue
 | 
				
			||||||
            mChoice = mChoiceMap[answer];
 | 
					            mChoice = mChoiceMap[answer];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (mDialogueMap.find(mLastTopic) != mDialogueMap.end())
 | 
					            if (mDialogueMap.find(mLastTopic) != mDialogueMap.end())
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (mDialogueMap[mLastTopic].mType == ESM::Dialogue::Topic)
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Filter filter (mActor, mChoice, mTalkedTo);
 | 
					                Filter filter (mActor, mChoice, mTalkedTo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (mDialogueMap[mLastTopic].mType == ESM::Dialogue::Topic
 | 
				
			||||||
 | 
					                        || mDialogueMap[mLastTopic].mType == ESM::Dialogue::Greeting)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    if (const ESM::DialInfo *info = filter.search (mDialogueMap[mLastTopic], true))
 | 
					                    if (const ESM::DialInfo *info = filter.search (mDialogueMap[mLastTopic], true))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        mChoiceMap.clear();
 | 
					 | 
				
			||||||
                        mChoice = -1;
 | 
					 | 
				
			||||||
                        mIsInChoice = false;
 | 
					 | 
				
			||||||
                        std::string text = info->mResponse;
 | 
					                        std::string text = info->mResponse;
 | 
				
			||||||
                        parseText (text);
 | 
					                        parseText (text);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -440,10 +446,12 @@ namespace MWDialogue
 | 
				
			||||||
                        MWBase::Environment::get().getWindowManager()->getDialogueWindow()->addText (Interpreter::fixDefinesDialog(text, interpreterContext));
 | 
					                        MWBase::Environment::get().getWindowManager()->getDialogueWindow()->addText (Interpreter::fixDefinesDialog(text, interpreterContext));
 | 
				
			||||||
                        MWBase::Environment::get().getJournal()->addTopic (mLastTopic, info->mId);
 | 
					                        MWBase::Environment::get().getJournal()->addTopic (mLastTopic, info->mId);
 | 
				
			||||||
                        executeScript (info->mResultScript);
 | 
					                        executeScript (info->mResultScript);
 | 
				
			||||||
                        mLastTopic = mLastTopic;
 | 
					 | 
				
			||||||
                        mLastDialogue = *info;
 | 
					                        mLastDialogue = *info;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                mChoiceMap.clear();
 | 
				
			||||||
 | 
					                mChoice = -1;
 | 
				
			||||||
 | 
					                mIsInChoice = false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            updateTopics();
 | 
					            updateTopics();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +54,8 @@ namespace MWDialogue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            DialogueManager (const Compiler::Extensions& extensions, bool scriptVerbose, Translation::Storage& translationDataStorage);
 | 
					            DialogueManager (const Compiler::Extensions& extensions, bool scriptVerbose, Translation::Storage& translationDataStorage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            virtual bool isInChoice() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void startDialogue (const MWWorld::Ptr& actor);
 | 
					            virtual void startDialogue (const MWWorld::Ptr& actor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void addTopic (const std::string& topic);
 | 
					            virtual void addTopic (const std::string& topic);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,40 +77,40 @@ namespace MWGui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (result == MWMechanics::Alchemy::Result_NoName)
 | 
					        if (result == MWMechanics::Alchemy::Result_NoName)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox("#{sNotifyMessage37}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox("#{sNotifyMessage37}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // check if mortar & pestle is available (always needed)
 | 
					        // check if mortar & pestle is available (always needed)
 | 
				
			||||||
        if (result == MWMechanics::Alchemy::Result_NoMortarAndPestle)
 | 
					        if (result == MWMechanics::Alchemy::Result_NoMortarAndPestle)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox("#{sNotifyMessage45}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox("#{sNotifyMessage45}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // make sure 2 or more ingredients were selected
 | 
					        // make sure 2 or more ingredients were selected
 | 
				
			||||||
        if (result == MWMechanics::Alchemy::Result_LessThanTwoIngredients)
 | 
					        if (result == MWMechanics::Alchemy::Result_LessThanTwoIngredients)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox("#{sNotifyMessage6a}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox("#{sNotifyMessage6a}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (result == MWMechanics::Alchemy::Result_NoEffects)
 | 
					        if (result == MWMechanics::Alchemy::Result_NoEffects)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox("#{sNotifyMessage8}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox("#{sNotifyMessage8}");
 | 
				
			||||||
            MWBase::Environment::get().getSoundManager()->playSound("potion fail", 1.f, 1.f);
 | 
					            MWBase::Environment::get().getSoundManager()->playSound("potion fail", 1.f, 1.f);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (result == MWMechanics::Alchemy::Result_Success)
 | 
					        if (result == MWMechanics::Alchemy::Result_Success)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox("#{sPotionSuccess}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox("#{sPotionSuccess}");
 | 
				
			||||||
            MWBase::Environment::get().getSoundManager()->playSound("potion success", 1.f, 1.f);
 | 
					            MWBase::Environment::get().getSoundManager()->playSound("potion success", 1.f, 1.f);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (result == MWMechanics::Alchemy::Result_RandomFailure)
 | 
					        else if (result == MWMechanics::Alchemy::Result_RandomFailure)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // potion failed
 | 
					            // potion failed
 | 
				
			||||||
            mWindowManager.messageBox("#{sNotifyMessage8}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox("#{sNotifyMessage8}");
 | 
				
			||||||
            MWBase::Environment::get().getSoundManager()->playSound("potion fail", 1.f, 1.f);
 | 
					            MWBase::Environment::get().getSoundManager()->playSound("potion fail", 1.f, 1.f);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										107
									
								
								apps/openmw/mwgui/companionwindow.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								apps/openmw/mwgui/companionwindow.cpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,107 @@
 | 
				
			||||||
 | 
					#include "companionwindow.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <boost/lexical_cast.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../mwbase/windowmanager.hpp"
 | 
				
			||||||
 | 
					#include "../mwbase/environment.hpp"
 | 
				
			||||||
 | 
					#include "../mwbase/dialoguemanager.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../mwmechanics/npcstats.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "messagebox.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MWGui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CompanionWindow::CompanionWindow(MWBase::WindowManager &parWindowManager, DragAndDrop *dragAndDrop, MessageBoxManager* manager)
 | 
				
			||||||
 | 
					    : ContainerBase(dragAndDrop)
 | 
				
			||||||
 | 
					    , WindowBase("openmw_companion_window.layout", parWindowManager)
 | 
				
			||||||
 | 
					    , mMessageBoxManager(manager)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    MyGUI::ScrollView* itemView;
 | 
				
			||||||
 | 
					    MyGUI::Widget* containerWidget;
 | 
				
			||||||
 | 
					    getWidget(containerWidget, "Items");
 | 
				
			||||||
 | 
					    getWidget(itemView, "ItemView");
 | 
				
			||||||
 | 
					    setWidgets(containerWidget, itemView);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getWidget(mCloseButton, "CloseButton");
 | 
				
			||||||
 | 
					    getWidget(mProfitLabel, "ProfitLabel");
 | 
				
			||||||
 | 
					    getWidget(mEncumbranceBar, "EncumbranceBar");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mCloseButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CompanionWindow::onCloseButtonClicked);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setCoord(200,0,600,300);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::open(MWWorld::Ptr npc)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    openContainer(npc);
 | 
				
			||||||
 | 
					    setTitle(MWWorld::Class::get(npc).getName(npc));
 | 
				
			||||||
 | 
					    drawItems();
 | 
				
			||||||
 | 
					    updateEncumbranceBar();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::notifyItemDragged(MWWorld::Ptr item, int count)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (mPtr.getTypeName() == typeid(ESM::NPC).name())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        MWMechanics::NpcStats& stats = MWWorld::Class::get(mPtr).getNpcStats(mPtr);
 | 
				
			||||||
 | 
					        stats.modifyProfit(MWWorld::Class::get(item).getValue(item) * count);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    updateEncumbranceBar();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::updateEncumbranceBar()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    float capacity = MWWorld::Class::get(mPtr).getCapacity(mPtr);
 | 
				
			||||||
 | 
					    float encumbrance = MWWorld::Class::get(mPtr).getEncumbrance(mPtr);
 | 
				
			||||||
 | 
					    mEncumbranceBar->setValue(encumbrance, capacity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (mPtr.getTypeName() != typeid(ESM::NPC).name())
 | 
				
			||||||
 | 
					        mProfitLabel->setCaption("");
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        MWMechanics::NpcStats& stats = MWWorld::Class::get(mPtr).getNpcStats(mPtr);
 | 
				
			||||||
 | 
					        mProfitLabel->setCaptionWithReplacing("#{sProfitValue} " + boost::lexical_cast<std::string>(stats.getProfit()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::onWindowResize(MyGUI::Window* window)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    drawItems();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::onCloseButtonClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (mPtr.getTypeName() == typeid(ESM::NPC).name() && MWWorld::Class::get(mPtr).getNpcStats(mPtr).getProfit() < 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::vector<std::string> buttons;
 | 
				
			||||||
 | 
					        buttons.push_back("#{sCompanionWarningButtonOne}");
 | 
				
			||||||
 | 
					        buttons.push_back("#{sCompanionWarningButtonTwo}");
 | 
				
			||||||
 | 
					        mMessageBoxManager->createInteractiveMessageBox("#{sCompanionWarningMessage}", buttons);
 | 
				
			||||||
 | 
					        mMessageBoxManager->eventButtonPressed += MyGUI::newDelegate(this, &CompanionWindow::onMessageBoxButtonClicked);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Companion);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::onMessageBoxButtonClicked(int button)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (button == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        mPtr.getRefData().getLocals().setVarByInt(MWWorld::Class::get(mPtr).getScript(mPtr),
 | 
				
			||||||
 | 
					            "minimumProfit", MWWorld::Class::get(mPtr).getNpcStats(mPtr).getProfit());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Companion);
 | 
				
			||||||
 | 
					        MWBase::Environment::get().getDialogueManager()->startDialogue (mPtr);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CompanionWindow::onReferenceUnavailable()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Companion);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										39
									
								
								apps/openmw/mwgui/companionwindow.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								apps/openmw/mwgui/companionwindow.hpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					#ifndef OPENMW_MWGUI_COMPANIONWINDOW_H
 | 
				
			||||||
 | 
					#define OPENMW_MWGUI_COMPANIONWINDOW_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "container.hpp"
 | 
				
			||||||
 | 
					#include "widgets.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MWGui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class MessageBoxManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class CompanionWindow : public ContainerBase, public WindowBase
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        CompanionWindow(MWBase::WindowManager& parWindowManager,DragAndDrop* dragAndDrop, MessageBoxManager* manager);
 | 
				
			||||||
 | 
					        virtual ~CompanionWindow() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void open(MWWorld::Ptr npc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        virtual void notifyItemDragged(MWWorld::Ptr item, int count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected:
 | 
				
			||||||
 | 
					        MyGUI::Button* mCloseButton;
 | 
				
			||||||
 | 
					        MyGUI::TextBox* mProfitLabel;
 | 
				
			||||||
 | 
					        Widgets::MWDynamicStat* mEncumbranceBar;
 | 
				
			||||||
 | 
					        MessageBoxManager* mMessageBoxManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void onMessageBoxButtonClicked(int button);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void updateEncumbranceBar();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void onWindowResize(MyGUI::Window* window);
 | 
				
			||||||
 | 
					        void onCloseButtonClicked(MyGUI::Widget* _sender);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        virtual void onReferenceUnavailable();
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ void ContainerBase::onSelectedItem(MyGUI::Widget* _sender)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // user notification "i don't buy this item"
 | 
					                // user notification "i don't buy this item"
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager()->
 | 
					                MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                        messageBox("#{sBarterDialog4}", std::vector<std::string>());
 | 
					                        messageBox("#{sBarterDialog4}");
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -289,7 +289,7 @@ void ContainerBase::onContainerClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    // user notification
 | 
					                    // user notification
 | 
				
			||||||
                    MWBase::Environment::get().getWindowManager()->
 | 
					                    MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                        messageBox("#{sContentsMessage2}", std::vector<std::string>());
 | 
					                        messageBox("#{sContentsMessage2}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -313,7 +313,7 @@ void ContainerBase::onContainerClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
                    object.getRefData().setCount(origCount);
 | 
					                    object.getRefData().setCount(origCount);
 | 
				
			||||||
                    // user notification
 | 
					                    // user notification
 | 
				
			||||||
                    MWBase::Environment::get().getWindowManager()->
 | 
					                    MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                        messageBox("#{sContentsMessage3}", std::vector<std::string>());
 | 
					                        messageBox("#{sContentsMessage3}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -335,6 +335,9 @@ void ContainerBase::onContainerClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
        drawItems();
 | 
					        drawItems();
 | 
				
			||||||
        mDragAndDrop->mDraggedFrom->drawItems();
 | 
					        mDragAndDrop->mDraggedFrom->drawItems();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        mDragAndDrop->mDraggedFrom->notifyItemDragged(object, -mDragAndDrop->mDraggedCount);
 | 
				
			||||||
 | 
					        notifyItemDragged(object, mDragAndDrop->mDraggedCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MWBase::Environment::get().getWindowManager()->setDragDrop(false);
 | 
					        MWBase::Environment::get().getWindowManager()->setDragDrop(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::string sound = MWWorld::Class::get(object).getDownSoundId(object);
 | 
					        std::string sound = MWWorld::Class::get(object).getDownSoundId(object);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,6 +82,10 @@ namespace MWGui
 | 
				
			||||||
        void setFilter(int filter); ///< set category filter
 | 
					        void setFilter(int filter); ///< set category filter
 | 
				
			||||||
        void drawItems();
 | 
					        void drawItems();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// fired when an item was moved by drag&drop. \n
 | 
				
			||||||
 | 
					        /// if it was removed from this container, count will be negative.
 | 
				
			||||||
 | 
					        virtual void notifyItemDragged(MWWorld::Ptr item, int count) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected:
 | 
					    protected:
 | 
				
			||||||
        bool mDisplayEquippedItems;
 | 
					        bool mDisplayEquippedItems;
 | 
				
			||||||
        bool mHighlightEquippedItems;
 | 
					        bool mHighlightEquippedItems;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -228,7 +228,8 @@ void DialogueWindow::onByeClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DialogueWindow::onSelectTopic(const std::string& topic, int id)
 | 
					void DialogueWindow::onSelectTopic(const std::string& topic, int id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (!mEnabled) return;
 | 
					    if (!mEnabled || MWBase::Environment::get().getDialogueManager()->isInChoice())
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int separatorPos = 0;
 | 
					    int separatorPos = 0;
 | 
				
			||||||
    for (unsigned int i=0; i<mTopicsList->getItemCount(); ++i)
 | 
					    for (unsigned int i=0; i<mTopicsList->getItemCount(); ++i)
 | 
				
			||||||
| 
						 | 
					@ -248,6 +249,11 @@ void DialogueWindow::onSelectTopic(const std::string& topic, int id)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mPersuasionDialog.setVisible(true);
 | 
					            mPersuasionDialog.setVisible(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        else if (topic == gmst.find("sCompanionShare")->getString())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            mWindowManager.pushGuiMode(GM_Companion);
 | 
				
			||||||
 | 
					            mWindowManager.showCompanionWindow(mPtr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        else if (!MWBase::Environment::get().getDialogueManager()->checkServiceRefused())
 | 
					        else if (!MWBase::Environment::get().getDialogueManager()->checkServiceRefused())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (topic == gmst.find("sBarter")->getString())
 | 
					            if (topic == gmst.find("sBarter")->getString())
 | 
				
			||||||
| 
						 | 
					@ -306,7 +312,10 @@ void DialogueWindow::setKeywords(std::list<std::string> keyWords)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    mTopicsList->clear();
 | 
					    mTopicsList->clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool anyService = mServices > 0;
 | 
					    bool isCompanion = !MWWorld::Class::get(mPtr).getScript(mPtr).empty()
 | 
				
			||||||
 | 
					            && mPtr.getRefData().getLocals().getIntVar(MWWorld::Class::get(mPtr).getScript(mPtr), "companion");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool anyService = mServices > 0 || isCompanion || mPtr.getTypeName() == typeid(ESM::NPC).name();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const MWWorld::Store<ESM::GameSetting> &gmst =
 | 
					    const MWWorld::Store<ESM::GameSetting> &gmst =
 | 
				
			||||||
        MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
 | 
					        MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
 | 
				
			||||||
| 
						 | 
					@ -335,9 +344,13 @@ void DialogueWindow::setKeywords(std::list<std::string> keyWords)
 | 
				
			||||||
    if (mServices & Service_Repair)
 | 
					    if (mServices & Service_Repair)
 | 
				
			||||||
        mTopicsList->addItem(gmst.find("sRepair")->getString());
 | 
					        mTopicsList->addItem(gmst.find("sRepair")->getString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (anyService || mPtr.getTypeName() == typeid(ESM::NPC).name())
 | 
					    if (isCompanion)
 | 
				
			||||||
 | 
					        mTopicsList->addItem(gmst.find("sCompanionShare")->getString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (anyService)
 | 
				
			||||||
        mTopicsList->addSeparator();
 | 
					        mTopicsList->addSeparator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(std::list<std::string>::iterator it = keyWords.begin(); it != keyWords.end(); ++it)
 | 
					    for(std::list<std::string>::iterator it = keyWords.begin(); it != keyWords.end(); ++it)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        mTopicsList->addItem(*it);
 | 
					        mTopicsList->addItem(*it);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,6 +92,11 @@ namespace MWGui
 | 
				
			||||||
        startEditing ();
 | 
					        startEditing ();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void EnchantingDialog::startSelfEnchanting(MWWorld::Ptr soulgem)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// \todo
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void EnchantingDialog::onReferenceUnavailable ()
 | 
					    void EnchantingDialog::onReferenceUnavailable ()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        mWindowManager.removeGuiMode (GM_Dialogue);
 | 
					        mWindowManager.removeGuiMode (GM_Dialogue);
 | 
				
			||||||
| 
						 | 
					@ -158,7 +163,7 @@ namespace MWGui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(mEnchanting.getGemCharge()==0)
 | 
					        if(mEnchanting.getGemCharge()==0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage32}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage32}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -222,31 +227,37 @@ namespace MWGui
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (mEffects.size() <= 0)
 | 
					        if (mEffects.size() <= 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage30}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage30}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (mName->getCaption ().empty())
 | 
					        if (mName->getCaption ().empty())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage10}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage10}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (boost::lexical_cast<int>(mPrice->getCaption()) > mWindowManager.getInventoryWindow()->getPlayerGold())
 | 
					        if (boost::lexical_cast<int>(mPrice->getCaption()) > mWindowManager.getInventoryWindow()->getPlayerGold())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage18}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage18}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (mEnchanting.soulEmpty())
 | 
					        if (mEnchanting.soulEmpty())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage52}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage52}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (mEnchanting.itemEmpty())
 | 
					        if (mEnchanting.itemEmpty())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage11}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage11}");
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (mEnchanting.getEnchantCost() > mEnchanting.getMaxEnchantValue())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage29}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -254,7 +265,7 @@ namespace MWGui
 | 
				
			||||||
        mEnchanting.setEffect(mEffectList);
 | 
					        mEnchanting.setEffect(mEffectList);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mEnchanting.create();
 | 
					        mEnchanting.create();
 | 
				
			||||||
        mWindowManager.messageBox ("#{sEnchantmentMenu12}", std::vector<std::string>());
 | 
					        mWindowManager.messageBox ("#{sEnchantmentMenu12}");
 | 
				
			||||||
        mWindowManager.removeGuiMode (GM_Enchanting);
 | 
					        mWindowManager.removeGuiMode (GM_Enchanting);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@ namespace MWGui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void open();
 | 
					        virtual void open();
 | 
				
			||||||
        void startEnchanting(MWWorld::Ptr actor);
 | 
					        void startEnchanting(MWWorld::Ptr actor);
 | 
				
			||||||
 | 
					        void startSelfEnchanting(MWWorld::Ptr soulgem);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected:
 | 
					    protected:
 | 
				
			||||||
        virtual void onReferenceUnavailable();
 | 
					        virtual void onReferenceUnavailable();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -234,7 +234,8 @@ void HUD::onWorldClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
        mDragAndDrop->mDraggedWidget = 0;
 | 
					        mDragAndDrop->mDraggedWidget = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MWBase::Environment::get().getWindowManager()->setDragDrop(false);
 | 
					        MWBase::Environment::get().getWindowManager()->setDragDrop(false);
 | 
				
			||||||
        MWBase::Environment::get().getWindowManager()->getInventoryWindow()->drawItems();
 | 
					        mDragAndDrop->mDraggedFrom->drawItems();
 | 
				
			||||||
 | 
					        mDragAndDrop->mDraggedFrom->notifyItemDragged(object, -mDragAndDrop->mDraggedCount);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,6 @@ namespace MWGui
 | 
				
			||||||
        getWidget(mAvatar, "Avatar");
 | 
					        getWidget(mAvatar, "Avatar");
 | 
				
			||||||
        getWidget(mAvatarImage, "AvatarImage");
 | 
					        getWidget(mAvatarImage, "AvatarImage");
 | 
				
			||||||
        getWidget(mEncumbranceBar, "EncumbranceBar");
 | 
					        getWidget(mEncumbranceBar, "EncumbranceBar");
 | 
				
			||||||
        getWidget(mEncumbranceText, "EncumbranceBarT");
 | 
					 | 
				
			||||||
        getWidget(mFilterAll, "AllButton");
 | 
					        getWidget(mFilterAll, "AllButton");
 | 
				
			||||||
        getWidget(mFilterWeapon, "WeaponButton");
 | 
					        getWidget(mFilterWeapon, "WeaponButton");
 | 
				
			||||||
        getWidget(mFilterApparel, "ApparelButton");
 | 
					        getWidget(mFilterApparel, "ApparelButton");
 | 
				
			||||||
| 
						 | 
					@ -240,9 +239,7 @@ namespace MWGui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        float capacity = MWWorld::Class::get(player).getCapacity(player);
 | 
					        float capacity = MWWorld::Class::get(player).getCapacity(player);
 | 
				
			||||||
        float encumbrance = MWWorld::Class::get(player).getEncumbrance(player);
 | 
					        float encumbrance = MWWorld::Class::get(player).getEncumbrance(player);
 | 
				
			||||||
        mEncumbranceBar->setProgressRange(capacity);
 | 
					        mEncumbranceBar->setValue(encumbrance, capacity);
 | 
				
			||||||
        mEncumbranceBar->setProgressPosition(encumbrance);
 | 
					 | 
				
			||||||
        mEncumbranceText->setCaption( boost::lexical_cast<std::string>(int(encumbrance)) + "/" + boost::lexical_cast<std::string>(int(capacity)) );
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void InventoryWindow::onFrame()
 | 
					    void InventoryWindow::onFrame()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "container.hpp"
 | 
					#include "container.hpp"
 | 
				
			||||||
#include "window_pinnable_base.hpp"
 | 
					#include "window_pinnable_base.hpp"
 | 
				
			||||||
 | 
					#include "widgets.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MWGui
 | 
					namespace MWGui
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -36,8 +37,7 @@ namespace MWGui
 | 
				
			||||||
            MyGUI::Widget* mAvatar;
 | 
					            MyGUI::Widget* mAvatar;
 | 
				
			||||||
            MyGUI::ImageBox* mAvatarImage;
 | 
					            MyGUI::ImageBox* mAvatarImage;
 | 
				
			||||||
            MyGUI::TextBox* mArmorRating;
 | 
					            MyGUI::TextBox* mArmorRating;
 | 
				
			||||||
            MyGUI::ProgressBar* mEncumbranceBar;
 | 
					            Widgets::MWDynamicStat* mEncumbranceBar;
 | 
				
			||||||
            MyGUI::TextBox* mEncumbranceText;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            MyGUI::Widget* mLeftPane;
 | 
					            MyGUI::Widget* mLeftPane;
 | 
				
			||||||
            MyGUI::Widget* mRightPane;
 | 
					            MyGUI::Widget* mRightPane;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -162,7 +162,7 @@ namespace MWGui
 | 
				
			||||||
        MWMechanics::NpcStats& pcStats = MWWorld::Class::get(player).getNpcStats (player);
 | 
					        MWMechanics::NpcStats& pcStats = MWWorld::Class::get(player).getNpcStats (player);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (mSpentAttributes.size() < 3)
 | 
					        if (mSpentAttributes.size() < 3)
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager ()->messageBox("#{sNotifyMessage36}", std::vector<std::string>());
 | 
					            MWBase::Environment::get().getWindowManager ()->messageBox("#{sNotifyMessage36}");
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // increase attributes
 | 
					            // increase attributes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
#include "messagebox.hpp"
 | 
					#include "messagebox.hpp"
 | 
				
			||||||
#include "../mwbase/environment.hpp"
 | 
					#include "../mwbase/environment.hpp"
 | 
				
			||||||
#include "../mwbase/soundmanager.hpp"
 | 
					#include "../mwbase/soundmanager.hpp"
 | 
				
			||||||
 | 
					#include "../mwbase/inputmanager.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace MWGui;
 | 
					using namespace MWGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +63,8 @@ void MessageBoxManager::onFrame (float frameDuration)
 | 
				
			||||||
    if(mInterMessageBoxe != NULL && mInterMessageBoxe->mMarkedToDelete) {
 | 
					    if(mInterMessageBoxe != NULL && mInterMessageBoxe->mMarkedToDelete) {
 | 
				
			||||||
        delete mInterMessageBoxe;
 | 
					        delete mInterMessageBoxe;
 | 
				
			||||||
        mInterMessageBoxe = NULL;
 | 
					        mInterMessageBoxe = NULL;
 | 
				
			||||||
        mWindowManager->removeGuiMode(GM_InterMessageBox);
 | 
					        MWBase::Environment::get().getInputManager()->changeInputMode(
 | 
				
			||||||
 | 
					                    MWBase::Environment::get().getWindowManager()->isGuiMode());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,11 +92,8 @@ void MessageBoxManager::createMessageBox (const std::string& message)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool MessageBoxManager::createInteractiveMessageBox (const std::string& message, const std::vector<std::string>& buttons)
 | 
					bool MessageBoxManager::createInteractiveMessageBox (const std::string& message, const std::vector<std::string>& buttons)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /// \todo Don't write this kind of error message to cout. Either discard the old message box
 | 
					 | 
				
			||||||
    /// silently or throw an exception.
 | 
					 | 
				
			||||||
    if(mInterMessageBoxe != NULL) {
 | 
					    if(mInterMessageBoxe != NULL) {
 | 
				
			||||||
        std::cout << "there is a MessageBox already" << std::endl;
 | 
					        throw std::runtime_error("There is a message box already");
 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mInterMessageBoxe = new InteractiveMessageBox(*this, message, buttons);
 | 
					    mInterMessageBoxe = new InteractiveMessageBox(*this, message, buttons);
 | 
				
			||||||
| 
						 | 
					@ -139,6 +138,7 @@ void MessageBoxManager::setMessageBoxSpeed (int speed)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MessageBoxManager::enterPressed ()
 | 
					void MessageBoxManager::enterPressed ()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    if(mInterMessageBoxe != NULL)
 | 
				
			||||||
        mInterMessageBoxe->enterPressed();
 | 
					        mInterMessageBoxe->enterPressed();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -213,10 +213,12 @@ int MessageBox::getHeight ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxManager, const std::string& message, const std::vector<std::string>& buttons)
 | 
					InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxManager, const std::string& message, const std::vector<std::string>& buttons)
 | 
				
			||||||
  : Layout("openmw_interactive_messagebox.layout")
 | 
					    : WindowModal("openmw_interactive_messagebox.layout", *MWBase::Environment::get().getWindowManager())
 | 
				
			||||||
  , mMessageBoxManager(parMessageBoxManager)
 | 
					  , mMessageBoxManager(parMessageBoxManager)
 | 
				
			||||||
  , mButtonPressed(-1)
 | 
					  , mButtonPressed(-1)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    WindowModal::open();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int fixedWidth = 500;
 | 
					    int fixedWidth = 500;
 | 
				
			||||||
    int textPadding = 10; // padding between text-widget and main-widget
 | 
					    int textPadding = 10; // padding between text-widget and main-widget
 | 
				
			||||||
    int textButtonPadding = 20; // padding between the text-widget und the button-widget
 | 
					    int textButtonPadding = 20; // padding between the text-widget und the button-widget
 | 
				
			||||||
| 
						 | 
					@ -232,7 +234,7 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan
 | 
				
			||||||
    getWidget(mButtonsWidget, "buttons");
 | 
					    getWidget(mButtonsWidget, "buttons");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mMessageWidget->setOverflowToTheLeft(true);
 | 
					    mMessageWidget->setOverflowToTheLeft(true);
 | 
				
			||||||
    mMessageWidget->addText(message);
 | 
					    mMessageWidget->setCaptionWithReplacing(message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MyGUI::IntSize textSize = mMessageWidget->getTextSize();
 | 
					    MyGUI::IntSize textSize = mMessageWidget->getTextSize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -252,7 +254,7 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan
 | 
				
			||||||
            std::string("MW_Button"),
 | 
					            std::string("MW_Button"),
 | 
				
			||||||
            dummyCoord,
 | 
					            dummyCoord,
 | 
				
			||||||
            MyGUI::Align::Default);
 | 
					            MyGUI::Align::Default);
 | 
				
			||||||
        button->setCaption(*it);
 | 
					        button->setCaptionWithReplacing(*it);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        button->eventMouseButtonClick += MyGUI::newDelegate(this, &InteractiveMessageBox::mousePressed);
 | 
					        button->eventMouseButtonClick += MyGUI::newDelegate(this, &InteractiveMessageBox::mousePressed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -399,6 +401,7 @@ void InteractiveMessageBox::buttonActivated (MyGUI::Widget* pressed)
 | 
				
			||||||
        if(*button == pressed)
 | 
					        if(*button == pressed)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mButtonPressed = index;
 | 
					            mButtonPressed = index;
 | 
				
			||||||
 | 
					            mMessageBoxManager.onButtonPressed(mButtonPressed);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        index++;
 | 
					        index++;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,13 @@ namespace MWGui
 | 
				
			||||||
            void enterPressed();
 | 
					            void enterPressed();
 | 
				
			||||||
            int readPressedButton ();
 | 
					            int readPressedButton ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            typedef MyGUI::delegates::CMultiDelegate1<int> EventHandle_Int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Note: this delegate unassigns itself after it was fired, i.e. works once.
 | 
				
			||||||
 | 
					            EventHandle_Int eventButtonPressed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void onButtonPressed(int button) { eventButtonPressed(button); eventButtonPressed.clear(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            MWBase::WindowManager *mWindowManager;
 | 
					            MWBase::WindowManager *mWindowManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private:
 | 
					        private:
 | 
				
			||||||
| 
						 | 
					@ -73,7 +80,7 @@ namespace MWGui
 | 
				
			||||||
            int mNextBoxPadding;
 | 
					            int mNextBoxPadding;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class InteractiveMessageBox : public OEngine::GUI::Layout
 | 
					    class InteractiveMessageBox : public WindowModal
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public:
 | 
					        public:
 | 
				
			||||||
            InteractiveMessageBox (MessageBoxManager& parMessageBoxManager, const std::string& message, const std::vector<std::string>& buttons);
 | 
					            InteractiveMessageBox (MessageBoxManager& parMessageBoxManager, const std::string& message, const std::vector<std::string>& buttons);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,9 +5,11 @@ namespace MWGui
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  enum GuiMode
 | 
					  enum GuiMode
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					      GM_None,
 | 
				
			||||||
      GM_Settings,      // Settings window
 | 
					      GM_Settings,      // Settings window
 | 
				
			||||||
      GM_Inventory,     // Inventory mode
 | 
					      GM_Inventory,     // Inventory mode
 | 
				
			||||||
      GM_Container,
 | 
					      GM_Container,
 | 
				
			||||||
 | 
					      GM_Companion,
 | 
				
			||||||
      GM_MainMenu,      // Main menu mode
 | 
					      GM_MainMenu,      // Main menu mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      GM_Console,       // Console mode
 | 
					      GM_Console,       // Console mode
 | 
				
			||||||
| 
						 | 
					@ -41,9 +43,6 @@ namespace MWGui
 | 
				
			||||||
      GM_ClassCreate,
 | 
					      GM_ClassCreate,
 | 
				
			||||||
      GM_Review,
 | 
					      GM_Review,
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      // interactive MessageBox
 | 
					 | 
				
			||||||
      GM_InterMessageBox,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      GM_Loading,
 | 
					      GM_Loading,
 | 
				
			||||||
      GM_LoadingWallpaper,
 | 
					      GM_LoadingWallpaper,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -291,7 +291,7 @@ namespace MWGui
 | 
				
			||||||
            if (item.getRefData ().getCount() == 0)
 | 
					            if (item.getRefData ().getCount() == 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager ()->messageBox (
 | 
					                MWBase::Environment::get().getWindowManager ()->messageBox (
 | 
				
			||||||
                            "#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item), std::vector<std::string>());
 | 
					                            "#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item));
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -317,7 +317,7 @@ namespace MWGui
 | 
				
			||||||
            if (item.getRefData ().getCount() == 0)
 | 
					            if (item.getRefData ().getCount() == 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager ()->messageBox (
 | 
					                MWBase::Environment::get().getWindowManager ()->messageBox (
 | 
				
			||||||
                            "#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item), std::vector<std::string>());
 | 
					                            "#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item));
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -362,7 +362,7 @@ namespace MWGui
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                std::string msg = "This resolution is not supported in Fullscreen mode. Please select a resolution from the list.";
 | 
					                std::string msg = "This resolution is not supported in Fullscreen mode. Please select a resolution from the list.";
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager()->
 | 
					                MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                    messageBox(msg, std::vector<std::string>());
 | 
					                    messageBox(msg);
 | 
				
			||||||
                _sender->castType<MyGUI::Button>()->setCaption(off);
 | 
					                _sender->castType<MyGUI::Button>()->setCaption(off);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
| 
						 | 
					@ -593,7 +593,7 @@ namespace MWGui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static_cast<MyGUI::Button*>(_sender)->setCaptionWithReplacing("#{sNone}");
 | 
					        static_cast<MyGUI::Button*>(_sender)->setCaptionWithReplacing("#{sNone}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MWBase::Environment::get().getWindowManager ()->messageBox ("#{sControlsMenu3}", std::vector<std::string>());
 | 
					        MWBase::Environment::get().getWindowManager ()->messageBox ("#{sControlsMenu3}");
 | 
				
			||||||
        MWBase::Environment::get().getWindowManager ()->disallowMouse();
 | 
					        MWBase::Environment::get().getWindowManager ()->disallowMouse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MWBase::Environment::get().getInputManager ()->enableDetectingBindingMode (actionId);
 | 
					        MWBase::Environment::get().getInputManager ()->enableDetectingBindingMode (actionId);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										34
									
								
								apps/openmw/mwgui/soulgemdialog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								apps/openmw/mwgui/soulgemdialog.cpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					#include "soulgemdialog.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../mwbase/windowmanager.hpp"
 | 
				
			||||||
 | 
					#include "../mwbase/environment.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "messagebox.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MWGui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SoulgemDialog::show(const MWWorld::Ptr &soulgem)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        mSoulgem = soulgem;
 | 
				
			||||||
 | 
					        std::vector<std::string> buttons;
 | 
				
			||||||
 | 
					        buttons.push_back("#{sRechargeEnchantment}");
 | 
				
			||||||
 | 
					        buttons.push_back("#{sMake Enchantment}");
 | 
				
			||||||
 | 
					        mManager->createInteractiveMessageBox("#{sDoYouWantTo}", buttons);
 | 
				
			||||||
 | 
					        mManager->eventButtonPressed += MyGUI::newDelegate(this, &SoulgemDialog::onButtonPressed);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SoulgemDialog::onButtonPressed(int button)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (button == 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /// \todo show recharge enchanted item dialog here
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_Enchanting);
 | 
				
			||||||
 | 
					            MWBase::Environment::get().getWindowManager()->startSelfEnchanting(mSoulgem);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								apps/openmw/mwgui/soulgemdialog.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								apps/openmw/mwgui/soulgemdialog.hpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					#ifndef OPENMW_MWGUI_SOULGEMDIALOG_H
 | 
				
			||||||
 | 
					#define OPENMW_MWGUI_SOULGEMDIALOG_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../mwworld/ptr.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MWGui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class MessageBoxManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class SoulgemDialog
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        SoulgemDialog (MessageBoxManager* manager)
 | 
				
			||||||
 | 
					            : mManager(manager) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void show (const MWWorld::Ptr& soulgem);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void onButtonPressed(int button);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        MessageBoxManager* mManager;
 | 
				
			||||||
 | 
					        MWWorld::Ptr mSoulgem;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -310,25 +310,25 @@ namespace MWGui
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (mEffects.size() <= 0)
 | 
					        if (mEffects.size() <= 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage30}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage30}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (mNameEdit->getCaption () == "")
 | 
					        if (mNameEdit->getCaption () == "")
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage10}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage10}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (mMagickaCost->getCaption() == "0")
 | 
					        if (mMagickaCost->getCaption() == "0")
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sEnchantmentMenu8}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sEnchantmentMenu8}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (boost::lexical_cast<int>(mPriceLabel->getCaption()) > mWindowManager.getInventoryWindow()->getPlayerGold())
 | 
					        if (boost::lexical_cast<int>(mPriceLabel->getCaption()) > mWindowManager.getInventoryWindow()->getPlayerGold())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage18}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage18}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -517,7 +517,7 @@ namespace MWGui
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (mEffects.size() >= 8)
 | 
					        if (mEffects.size() >= 8)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager()->messageBox("#{sNotifyMessage28}", std::vector<std::string>());
 | 
					            MWBase::Environment::get().getWindowManager()->messageBox("#{sNotifyMessage28}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -528,7 +528,7 @@ namespace MWGui
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (it->mEffectID == effectId)
 | 
					            if (it->mEffectID == effectId)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager()->messageBox ("#{sOnetypeEffectMessage}", std::vector<std::string>());
 | 
					                MWBase::Environment::get().getWindowManager()->messageBox ("#{sOnetypeEffectMessage}");
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -404,7 +404,7 @@ namespace MWGui
 | 
				
			||||||
            if (spell->mData.mFlags & ESM::Spell::F_Always
 | 
					            if (spell->mData.mFlags & ESM::Spell::F_Always
 | 
				
			||||||
                || spell->mData.mType == ESM::Spell::ST_Power)
 | 
					                || spell->mData.mType == ESM::Spell::ST_Power)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                mWindowManager.messageBox("#{sDeleteSpellError}", std::vector<std::string>());
 | 
					                mWindowManager.messageBox("#{sDeleteSpellError}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,7 @@ void TextInputDialog::onOkClicked(MyGUI::Widget* _sender)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (mTextEdit->getCaption() == "")
 | 
					    if (mTextEdit->getCaption() == "")
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        mWindowManager.messageBox ("#{sNotifyMessage37}", std::vector<std::string>());
 | 
					        mWindowManager.messageBox ("#{sNotifyMessage37}");
 | 
				
			||||||
        MyGUI::InputManager::getInstance ().setKeyFocusWidget (mTextEdit);
 | 
					        MyGUI::InputManager::getInstance ().setKeyFocusWidget (mTextEdit);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,7 @@ void TextInputDialog::onTextAccepted(MyGUI::Edit* _sender)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (mTextEdit->getCaption() == "")
 | 
					    if (mTextEdit->getCaption() == "")
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        mWindowManager.messageBox ("#{sNotifyMessage37}", std::vector<std::string>());
 | 
					        mWindowManager.messageBox ("#{sNotifyMessage37}");
 | 
				
			||||||
        MyGUI::InputManager::getInstance ().setKeyFocusWidget (mTextEdit);
 | 
					        MyGUI::InputManager::getInstance ().setKeyFocusWidget (mTextEdit);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -178,7 +178,7 @@ namespace MWGui
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // user notification
 | 
					            // user notification
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager()->
 | 
					            MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                messageBox("#{sBarterDialog11}", std::vector<std::string>());
 | 
					                messageBox("#{sBarterDialog11}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,7 +187,7 @@ namespace MWGui
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // user notification
 | 
					            // user notification
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager()->
 | 
					            MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                messageBox("#{sBarterDialog1}", std::vector<std::string>());
 | 
					                messageBox("#{sBarterDialog1}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,7 +196,7 @@ namespace MWGui
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // user notification
 | 
					            // user notification
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager()->
 | 
					            MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                messageBox("#{sBarterDialog2}", std::vector<std::string>());
 | 
					                messageBox("#{sBarterDialog2}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -206,7 +206,7 @@ namespace MWGui
 | 
				
			||||||
            if (mPtr.getTypeName() != typeid(ESM::NPC).name())
 | 
					            if (mPtr.getTypeName() != typeid(ESM::NPC).name())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager()->
 | 
					                MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                    messageBox("#{sNotifyMessage9}", std::vector<std::string>());
 | 
					                    messageBox("#{sNotifyMessage9}");
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -242,7 +242,7 @@ namespace MWGui
 | 
				
			||||||
            if(roll > x) //trade refused
 | 
					            if(roll > x) //trade refused
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MWBase::Environment::get().getWindowManager()->
 | 
					                MWBase::Environment::get().getWindowManager()->
 | 
				
			||||||
                    messageBox("#{sNotifyMessage9}", std::vector<std::string>());
 | 
					                    messageBox("#{sNotifyMessage9}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                int iBarterFailDisposition = gmst.find("iBarterFailDisposition")->getInt();
 | 
					                int iBarterFailDisposition = gmst.find("iBarterFailDisposition")->getInt();
 | 
				
			||||||
                MWBase::Environment::get().getDialogueManager()->applyTemporaryDispositionChange(iBarterFailDisposition);
 | 
					                MWBase::Environment::get().getDialogueManager()->applyTemporaryDispositionChange(iBarterFailDisposition);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -129,7 +129,7 @@ namespace MWGui
 | 
				
			||||||
        MWMechanics::NpcStats& npcStats = MWWorld::Class::get(mPtr).getNpcStats (mPtr);
 | 
					        MWMechanics::NpcStats& npcStats = MWWorld::Class::get(mPtr).getNpcStats (mPtr);
 | 
				
			||||||
        if (npcStats.getSkill (skillId).getBase () <= pcStats.getSkill (skillId).getBase ())
 | 
					        if (npcStats.getSkill (skillId).getBase () <= pcStats.getSkill (skillId).getBase ())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            mWindowManager.messageBox ("#{sServiceTrainingWords}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sServiceTrainingWords}");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,7 @@ namespace MWGui
 | 
				
			||||||
        if (canRest == 2)
 | 
					        if (canRest == 2)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // resting underwater or mid-air not allowed
 | 
					            // resting underwater or mid-air not allowed
 | 
				
			||||||
            mWindowManager.messageBox ("#{sNotifyMessage1}", std::vector<std::string>());
 | 
					            mWindowManager.messageBox ("#{sNotifyMessage1}");
 | 
				
			||||||
            mWindowManager.popGuiMode ();
 | 
					            mWindowManager.popGuiMode ();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,6 +57,8 @@
 | 
				
			||||||
#include "spellicons.hpp"
 | 
					#include "spellicons.hpp"
 | 
				
			||||||
#include "merchantrepair.hpp"
 | 
					#include "merchantrepair.hpp"
 | 
				
			||||||
#include "repair.hpp"
 | 
					#include "repair.hpp"
 | 
				
			||||||
 | 
					#include "soulgemdialog.hpp"
 | 
				
			||||||
 | 
					#include "companionwindow.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace MWGui;
 | 
					using namespace MWGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,6 +96,8 @@ WindowManager::WindowManager(
 | 
				
			||||||
  , mTrainingWindow(NULL)
 | 
					  , mTrainingWindow(NULL)
 | 
				
			||||||
  , mMerchantRepair(NULL)
 | 
					  , mMerchantRepair(NULL)
 | 
				
			||||||
  , mRepair(NULL)
 | 
					  , mRepair(NULL)
 | 
				
			||||||
 | 
					  , mSoulgemDialog(NULL)
 | 
				
			||||||
 | 
					  , mCompanionWindow(NULL)
 | 
				
			||||||
  , mPlayerName()
 | 
					  , mPlayerName()
 | 
				
			||||||
  , mPlayerRaceId()
 | 
					  , mPlayerRaceId()
 | 
				
			||||||
  , mPlayerAttributes()
 | 
					  , mPlayerAttributes()
 | 
				
			||||||
| 
						 | 
					@ -186,6 +190,8 @@ WindowManager::WindowManager(
 | 
				
			||||||
    mTrainingWindow = new TrainingWindow(*this);
 | 
					    mTrainingWindow = new TrainingWindow(*this);
 | 
				
			||||||
    mMerchantRepair = new MerchantRepair(*this);
 | 
					    mMerchantRepair = new MerchantRepair(*this);
 | 
				
			||||||
    mRepair = new Repair(*this);
 | 
					    mRepair = new Repair(*this);
 | 
				
			||||||
 | 
					    mSoulgemDialog = new SoulgemDialog(mMessageBoxManager);
 | 
				
			||||||
 | 
					    mCompanionWindow = new CompanionWindow(*this, mDragAndDrop, mMessageBoxManager);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mLoadingScreen = new LoadingScreen(mRendering->getScene (), mRendering->getWindow (), *this);
 | 
					    mLoadingScreen = new LoadingScreen(mRendering->getScene (), mRendering->getWindow (), *this);
 | 
				
			||||||
    mLoadingScreen->onResChange (w,h);
 | 
					    mLoadingScreen->onResChange (w,h);
 | 
				
			||||||
| 
						 | 
					@ -253,6 +259,7 @@ WindowManager::~WindowManager()
 | 
				
			||||||
    delete mQuickKeysMenu;
 | 
					    delete mQuickKeysMenu;
 | 
				
			||||||
    delete mMerchantRepair;
 | 
					    delete mMerchantRepair;
 | 
				
			||||||
    delete mRepair;
 | 
					    delete mRepair;
 | 
				
			||||||
 | 
					    delete mSoulgemDialog;
 | 
				
			||||||
    delete mCursor;
 | 
					    delete mCursor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cleanupGarbage();
 | 
					    cleanupGarbage();
 | 
				
			||||||
| 
						 | 
					@ -313,12 +320,10 @@ void WindowManager::updateVisible()
 | 
				
			||||||
    mTrainingWindow->setVisible(false);
 | 
					    mTrainingWindow->setVisible(false);
 | 
				
			||||||
    mMerchantRepair->setVisible(false);
 | 
					    mMerchantRepair->setVisible(false);
 | 
				
			||||||
    mRepair->setVisible(false);
 | 
					    mRepair->setVisible(false);
 | 
				
			||||||
 | 
					    mCompanionWindow->setVisible(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mHud->setVisible(mHudEnabled);
 | 
					    mHud->setVisible(mHudEnabled);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Mouse is visible whenever we're not in game mode
 | 
					 | 
				
			||||||
    mCursor->setVisible(isGuiMode());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool gameMode = !isGuiMode();
 | 
					    bool gameMode = !isGuiMode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mInputBlocker->setVisible (gameMode);
 | 
					    mInputBlocker->setVisible (gameMode);
 | 
				
			||||||
| 
						 | 
					@ -416,6 +421,10 @@ void WindowManager::updateVisible()
 | 
				
			||||||
            mContainerWindow->setVisible(true);
 | 
					            mContainerWindow->setVisible(true);
 | 
				
			||||||
            mInventoryWindow->setVisible(true);
 | 
					            mInventoryWindow->setVisible(true);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					        case GM_Companion:
 | 
				
			||||||
 | 
					            mCompanionWindow->setVisible(true);
 | 
				
			||||||
 | 
					            mInventoryWindow->setVisible(true);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
        case GM_Dialogue:
 | 
					        case GM_Dialogue:
 | 
				
			||||||
            mDialogueWindow->setVisible(true);
 | 
					            mDialogueWindow->setVisible(true);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
| 
						 | 
					@ -444,8 +453,6 @@ void WindowManager::updateVisible()
 | 
				
			||||||
        case GM_Repair:
 | 
					        case GM_Repair:
 | 
				
			||||||
            mRepair->setVisible(true);
 | 
					            mRepair->setVisible(true);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case GM_InterMessageBox:
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case GM_Journal:
 | 
					        case GM_Journal:
 | 
				
			||||||
            mJournal->setVisible(true);
 | 
					            mJournal->setVisible(true);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
| 
						 | 
					@ -609,7 +616,7 @@ void WindowManager::messageBox (const std::string& message, const std::vector<st
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        mMessageBoxManager->createInteractiveMessageBox(message, buttons);
 | 
					        mMessageBoxManager->createInteractiveMessageBox(message, buttons);
 | 
				
			||||||
        pushGuiMode(GM_InterMessageBox);
 | 
					        MWBase::Environment::get().getInputManager()->changeInputMode(isGuiMode());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -648,6 +655,7 @@ void WindowManager::onDialogueWindowBye()
 | 
				
			||||||
void WindowManager::onFrame (float frameDuration)
 | 
					void WindowManager::onFrame (float frameDuration)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    mMessageBoxManager->onFrame(frameDuration);
 | 
					    mMessageBoxManager->onFrame(frameDuration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mToolTips->onFrame(frameDuration);
 | 
					    mToolTips->onFrame(frameDuration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (mDragAndDrop->mIsOnDragAndDrop)
 | 
					    if (mDragAndDrop->mIsOnDragAndDrop)
 | 
				
			||||||
| 
						 | 
					@ -676,6 +684,7 @@ void WindowManager::onFrame (float frameDuration)
 | 
				
			||||||
    mSpellCreationDialog->checkReferenceAvailable();
 | 
					    mSpellCreationDialog->checkReferenceAvailable();
 | 
				
			||||||
    mEnchantingDialog->checkReferenceAvailable();
 | 
					    mEnchantingDialog->checkReferenceAvailable();
 | 
				
			||||||
    mContainerWindow->checkReferenceAvailable();
 | 
					    mContainerWindow->checkReferenceAvailable();
 | 
				
			||||||
 | 
					    mCompanionWindow->checkReferenceAvailable();
 | 
				
			||||||
    mConsole->checkReferenceAvailable();
 | 
					    mConsole->checkReferenceAvailable();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1033,12 +1042,12 @@ void WindowManager::toggleVisible (GuiWindow wnd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool WindowManager::isGuiMode() const
 | 
					bool WindowManager::isGuiMode() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return !mGuiModes.empty();
 | 
					    return !mGuiModes.empty() || mMessageBoxManager->isInteractiveMessageBox();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool WindowManager::isConsoleMode() const
 | 
					bool WindowManager::isConsoleMode() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (mGuiModes.back()==GM_Console)
 | 
					    if (!mGuiModes.empty() && mGuiModes.back()==GM_Console)
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1046,8 +1055,7 @@ bool WindowManager::isConsoleMode() const
 | 
				
			||||||
MWGui::GuiMode WindowManager::getMode() const
 | 
					MWGui::GuiMode WindowManager::getMode() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (mGuiModes.empty())
 | 
					    if (mGuiModes.empty())
 | 
				
			||||||
        throw std::runtime_error ("getMode() called, but there is no active mode");
 | 
					        return GM_None;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return mGuiModes.back();
 | 
					    return mGuiModes.back();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1143,6 +1151,11 @@ void WindowManager::startEnchanting (MWWorld::Ptr actor)
 | 
				
			||||||
    mEnchantingDialog->startEnchanting (actor);
 | 
					    mEnchantingDialog->startEnchanting (actor);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WindowManager::startSelfEnchanting(MWWorld::Ptr soulgem)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mEnchantingDialog->startSelfEnchanting(soulgem);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WindowManager::startTraining(MWWorld::Ptr actor)
 | 
					void WindowManager::startTraining(MWWorld::Ptr actor)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    mTrainingWindow->startTraining(actor);
 | 
					    mTrainingWindow->startTraining(actor);
 | 
				
			||||||
| 
						 | 
					@ -1163,7 +1176,17 @@ const Translation::Storage& WindowManager::getTranslationDataStorage() const
 | 
				
			||||||
    return mTranslationDataStorage;
 | 
					    return mTranslationDataStorage;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WindowManager::showCompanionWindow(MWWorld::Ptr actor)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mCompanionWindow->open(actor);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WindowManager::changePointer(const std::string &name)
 | 
					void WindowManager::changePointer(const std::string &name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    mCursor->onCursorChange(name);
 | 
					    mCursor->onCursorChange(name);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WindowManager::showSoulgemDialog(MWWorld::Ptr item)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mSoulgemDialog->show(item);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,6 +76,8 @@ namespace MWGui
 | 
				
			||||||
  class SpellIcons;
 | 
					  class SpellIcons;
 | 
				
			||||||
  class MerchantRepair;
 | 
					  class MerchantRepair;
 | 
				
			||||||
  class Repair;
 | 
					  class Repair;
 | 
				
			||||||
 | 
					  class SoulgemDialog;
 | 
				
			||||||
 | 
					  class CompanionWindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class WindowManager : public MWBase::WindowManager
 | 
					  class WindowManager : public MWBase::WindowManager
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
| 
						 | 
					@ -228,16 +230,22 @@ namespace MWGui
 | 
				
			||||||
    virtual bool getPlayerSleeping();
 | 
					    virtual bool getPlayerSleeping();
 | 
				
			||||||
    virtual void wakeUpPlayer();
 | 
					    virtual void wakeUpPlayer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void showCompanionWindow(MWWorld::Ptr actor);
 | 
				
			||||||
    virtual void startSpellMaking(MWWorld::Ptr actor);
 | 
					    virtual void startSpellMaking(MWWorld::Ptr actor);
 | 
				
			||||||
    virtual void startEnchanting(MWWorld::Ptr actor);
 | 
					    virtual void startEnchanting(MWWorld::Ptr actor);
 | 
				
			||||||
 | 
					    virtual void startSelfEnchanting(MWWorld::Ptr soulgem);
 | 
				
			||||||
    virtual void startTraining(MWWorld::Ptr actor);
 | 
					    virtual void startTraining(MWWorld::Ptr actor);
 | 
				
			||||||
    virtual void startRepair(MWWorld::Ptr actor);
 | 
					    virtual void startRepair(MWWorld::Ptr actor);
 | 
				
			||||||
    virtual void startRepairItem(MWWorld::Ptr item);
 | 
					    virtual void startRepairItem(MWWorld::Ptr item);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void showSoulgemDialog (MWWorld::Ptr item);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual void changePointer (const std::string& name);
 | 
					    virtual void changePointer (const std::string& name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual const Translation::Storage& getTranslationDataStorage() const;
 | 
					    virtual const Translation::Storage& getTranslationDataStorage() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void onSoulgemDialogButtonPressed (int button);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    OEngine::GUI::MyGUIManager *mGuiManager;
 | 
					    OEngine::GUI::MyGUIManager *mGuiManager;
 | 
				
			||||||
    OEngine::Render::OgreRenderer *mRendering;
 | 
					    OEngine::Render::OgreRenderer *mRendering;
 | 
				
			||||||
| 
						 | 
					@ -271,7 +279,9 @@ namespace MWGui
 | 
				
			||||||
    EnchantingDialog* mEnchantingDialog;
 | 
					    EnchantingDialog* mEnchantingDialog;
 | 
				
			||||||
    TrainingWindow* mTrainingWindow;
 | 
					    TrainingWindow* mTrainingWindow;
 | 
				
			||||||
    MerchantRepair* mMerchantRepair;
 | 
					    MerchantRepair* mMerchantRepair;
 | 
				
			||||||
 | 
					    SoulgemDialog* mSoulgemDialog;
 | 
				
			||||||
    Repair* mRepair;
 | 
					    Repair* mRepair;
 | 
				
			||||||
 | 
					    CompanionWindow* mCompanionWindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Translation::Storage& mTranslationDataStorage;
 | 
					    Translation::Storage& mTranslationDataStorage;
 | 
				
			||||||
    Cursor* mCursor;
 | 
					    Cursor* mCursor;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -181,8 +181,7 @@ namespace MWInput
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case A_Activate:
 | 
					            case A_Activate:
 | 
				
			||||||
                resetIdleTime();
 | 
					                resetIdleTime();
 | 
				
			||||||
                if( MWBase::Environment::get().getWindowManager()->isGuiMode()
 | 
					                if( MWBase::Environment::get().getWindowManager()->isGuiMode()) {
 | 
				
			||||||
                    && MWBase::Environment::get().getWindowManager()->getMode() == MWGui::GM_InterMessageBox ) {
 | 
					 | 
				
			||||||
                        // Pressing the activation key when a messagebox is prompting for "ok" will activate the ok button
 | 
					                        // Pressing the activation key when a messagebox is prompting for "ok" will activate the ok button
 | 
				
			||||||
                        MWBase::Environment::get().getWindowManager()->enterPressed();
 | 
					                        MWBase::Environment::get().getWindowManager()->enterPressed();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -372,7 +371,7 @@ namespace MWInput
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void InputManager::changeInputMode(bool guiMode)
 | 
					    void InputManager::changeInputMode(bool guiMode)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Are we in GUI mode now?
 | 
					        MWBase::Environment::get().getWindowManager()->setMouseVisible(guiMode);
 | 
				
			||||||
        if(guiMode)
 | 
					        if(guiMode)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Disable mouse look
 | 
					            // Disable mouse look
 | 
				
			||||||
| 
						 | 
					@ -456,8 +455,7 @@ namespace MWInput
 | 
				
			||||||
    bool InputManager::keyPressed( const OIS::KeyEvent &arg )
 | 
					    bool InputManager::keyPressed( const OIS::KeyEvent &arg )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if(arg.key == OIS::KC_RETURN
 | 
					        if(arg.key == OIS::KC_RETURN
 | 
				
			||||||
            && MWBase::Environment::get().getWindowManager()->isGuiMode()
 | 
					            && MWBase::Environment::get().getWindowManager()->isGuiMode())
 | 
				
			||||||
            && MWBase::Environment::get().getWindowManager()->getMode() == MWGui::GM_InterMessageBox )
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Pressing enter when a messagebox is prompting for "ok" will activate the ok button
 | 
					            // Pressing enter when a messagebox is prompting for "ok" will activate the ok button
 | 
				
			||||||
            MWBase::Environment::get().getWindowManager()->enterPressed();
 | 
					            MWBase::Environment::get().getWindowManager()->enterPressed();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -257,7 +257,7 @@ namespace MWMechanics
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if(MWWorld::Class::get(iter->first).isEssential(iter->first))
 | 
					                if(MWWorld::Class::get(iter->first).isEssential(iter->first))
 | 
				
			||||||
                    MWBase::Environment::get().getWindowManager()->messageBox(
 | 
					                    MWBase::Environment::get().getWindowManager()->messageBox(
 | 
				
			||||||
                        "#{sKilledEssential}", std::vector<std::string>());
 | 
					                        "#{sKilledEssential}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,8 +21,16 @@
 | 
				
			||||||
#include "../mwbase/soundmanager.hpp"
 | 
					#include "../mwbase/soundmanager.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MWMechanics::NpcStats::NpcStats()
 | 
					MWMechanics::NpcStats::NpcStats()
 | 
				
			||||||
: mMovementFlags (0), mDrawState (DrawState_Nothing), mBounty (0)
 | 
					: mMovementFlags (0)
 | 
				
			||||||
, mLevelProgress(0), mDisposition(0), mVampire (0), mReputation(0), mWerewolf (false), mWerewolfKills (0)
 | 
					, mDrawState (DrawState_Nothing)
 | 
				
			||||||
 | 
					, mBounty (0)
 | 
				
			||||||
 | 
					, mLevelProgress(0)
 | 
				
			||||||
 | 
					, mDisposition(0)
 | 
				
			||||||
 | 
					, mVampire (0)
 | 
				
			||||||
 | 
					, mReputation(0)
 | 
				
			||||||
 | 
					, mWerewolf (false)
 | 
				
			||||||
 | 
					, mWerewolfKills (0)
 | 
				
			||||||
 | 
					, mProfit(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    mSkillIncreases.resize (ESM::Attribute::Length);
 | 
					    mSkillIncreases.resize (ESM::Attribute::Length);
 | 
				
			||||||
    for (int i=0; i<ESM::Attribute::Length; ++i)
 | 
					    for (int i=0; i<ESM::Attribute::Length; ++i)
 | 
				
			||||||
| 
						 | 
					@ -221,12 +229,12 @@ void MWMechanics::NpcStats::increaseSkill(int skillIndex, const ESM::Class &clas
 | 
				
			||||||
    message << boost::format(MWBase::Environment::get().getWindowManager ()->getGameSettingString ("sNotifyMessage39", ""))
 | 
					    message << boost::format(MWBase::Environment::get().getWindowManager ()->getGameSettingString ("sNotifyMessage39", ""))
 | 
				
			||||||
               % std::string("#{" + ESM::Skill::sSkillNameIds[skillIndex] + "}")
 | 
					               % std::string("#{" + ESM::Skill::sSkillNameIds[skillIndex] + "}")
 | 
				
			||||||
               % static_cast<int> (base);
 | 
					               % static_cast<int> (base);
 | 
				
			||||||
    MWBase::Environment::get().getWindowManager ()->messageBox(message.str(), std::vector<std::string>());
 | 
					    MWBase::Environment::get().getWindowManager ()->messageBox(message.str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (mLevelProgress >= 10)
 | 
					    if (mLevelProgress >= 10)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // levelup is possible now
 | 
					        // levelup is possible now
 | 
				
			||||||
        MWBase::Environment::get().getWindowManager ()->messageBox ("#{sLevelUpMsg}", std::vector<std::string>());
 | 
					        MWBase::Environment::get().getWindowManager ()->messageBox ("#{sLevelUpMsg}");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    getSkill (skillIndex).setBase (base);
 | 
					    getSkill (skillIndex).setBase (base);
 | 
				
			||||||
| 
						 | 
					@ -354,3 +362,13 @@ int MWMechanics::NpcStats::getWerewolfKills() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return mWerewolfKills;
 | 
					    return mWerewolfKills;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int MWMechanics::NpcStats::getProfit() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return mProfit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MWMechanics::NpcStats::modifyProfit(int diff)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mProfit += diff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,6 +53,7 @@ namespace MWMechanics
 | 
				
			||||||
            int mReputation;
 | 
					            int mReputation;
 | 
				
			||||||
            bool mWerewolf;
 | 
					            bool mWerewolf;
 | 
				
			||||||
            int mWerewolfKills;
 | 
					            int mWerewolfKills;
 | 
				
			||||||
 | 
					            int mProfit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            int mLevelProgress; // 0-10
 | 
					            int mLevelProgress; // 0-10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,6 +65,10 @@ namespace MWMechanics
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            NpcStats();
 | 
					            NpcStats();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /// for mercenary companions. starts out as 0, and changes when items are added or removed through the UI.
 | 
				
			||||||
 | 
					            int getProfit() const;
 | 
				
			||||||
 | 
					            void modifyProfit(int diff);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            DrawState_ getDrawState() const;
 | 
					            DrawState_ getDrawState() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void setDrawState (DrawState_ state);
 | 
					            void setDrawState (DrawState_ state);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,7 @@ namespace MWScript
 | 
				
			||||||
                            msgBox = boost::str(boost::format(msgBox) % count % itemName);
 | 
					                            msgBox = boost::str(boost::format(msgBox) % count % itemName);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        MWBase::Environment::get().getWindowManager()->messageBox(msgBox, std::vector<std::string>());
 | 
					                        MWBase::Environment::get().getWindowManager()->messageBox(msgBox);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
| 
						 | 
					@ -179,7 +179,7 @@ namespace MWScript
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if (numRemoved > 0)
 | 
					                        if (numRemoved > 0)
 | 
				
			||||||
                            MWBase::Environment::get().getWindowManager()->messageBox(msgBox, std::vector<std::string>());
 | 
					                            MWBase::Environment::get().getWindowManager()->messageBox(msgBox);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,30 @@ namespace MWScript
 | 
				
			||||||
        mFloats.resize (script.mData.mNumFloats, 0);
 | 
					        mFloats.resize (script.mData.mNumFloats, 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int Locals::getIntVar(const std::string &script, const std::string &var)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Compiler::Locals locals = MWBase::Environment::get().getScriptManager()->getLocals(script);
 | 
				
			||||||
 | 
					        int index = locals.getIndex(var);
 | 
				
			||||||
 | 
					        char type = locals.getType(var);
 | 
				
			||||||
 | 
					        if(index != -1)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            switch(type)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                case 's':
 | 
				
			||||||
 | 
					                    return mShorts.at (index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case 'l':
 | 
				
			||||||
 | 
					                    return mLongs.at (index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case 'f':
 | 
				
			||||||
 | 
					                    return mFloats.at (index);
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
    bool Locals::setVarByInt(const std::string& script, const std::string& var, int val)
 | 
					    bool Locals::setVarByInt(const std::string& script, const std::string& var, int val)
 | 
				
			||||||
    {    
 | 
					    {    
 | 
				
			||||||
        Compiler::Locals locals = MWBase::Environment::get().getScriptManager()->getLocals(script);
 | 
					        Compiler::Locals locals = MWBase::Environment::get().getScriptManager()->getLocals(script);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@ namespace MWScript
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            void configure (const ESM::Script& script);
 | 
					            void configure (const ESM::Script& script);
 | 
				
			||||||
            bool setVarByInt(const std::string& script, const std::string& var, int val);
 | 
					            bool setVarByInt(const std::string& script, const std::string& var, int val);
 | 
				
			||||||
 | 
					            int getIntVar (const std::string& script, const std::string& var); ///< if var does not exist, returns 0
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ namespace MWScript
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (const std::exception& e)
 | 
					            catch (const std::exception& e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                std::cerr << "exeution of script " << name << " failed." << std::endl;
 | 
					                std::cerr << "execution of script " << name << " failed." << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (mVerbose)
 | 
					                if (mVerbose)
 | 
				
			||||||
                    std::cerr << "(" << e.what() << ")" << std::endl;
 | 
					                    std::cerr << "(" << e.what() << ")" << std::endl;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@ namespace MWWorld
 | 
				
			||||||
                        if((*itr).mPart == ESM::PRT_Head)
 | 
					                        if((*itr).mPart == ESM::PRT_Head)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            if(actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
 | 
					                            if(actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
 | 
				
			||||||
                                MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage13}", std::vector<std::string>());
 | 
					                                MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage13}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            allow = false;
 | 
					                            allow = false;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
| 
						 | 
					@ -90,12 +90,12 @@ namespace MWWorld
 | 
				
			||||||
                            if(actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
 | 
					                            if(actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                if(it.getType() == MWWorld::ContainerStore::Type_Clothing){ // It's shoes
 | 
					                                if(it.getType() == MWWorld::ContainerStore::Type_Clothing){ // It's shoes
 | 
				
			||||||
                                    MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage15}", std::vector<std::string>());
 | 
					                                    MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage15}");
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                else // It's boots
 | 
					                                else // It's boots
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage14}", std::vector<std::string>());
 | 
					                                    MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage14}");
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										21
									
								
								apps/openmw/mwworld/actionsoulgem.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								apps/openmw/mwworld/actionsoulgem.cpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					#include "actionsoulgem.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../mwbase/windowmanager.hpp"
 | 
				
			||||||
 | 
					#include "../mwbase/environment.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MWWorld
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ActionSoulgem::ActionSoulgem(const Ptr &object)
 | 
				
			||||||
 | 
					    : Action(false, object)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ActionSoulgem::executeImp(const Ptr &actor)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    MWBase::Environment::get().getWindowManager()->showSoulgemDialog(getTarget());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								apps/openmw/mwworld/actionsoulgem.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								apps/openmw/mwworld/actionsoulgem.hpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					#ifndef GAME_MWWORLD_ACTIONSOULGEM_H
 | 
				
			||||||
 | 
					#define GAME_MWWORLD_ACTIONSOULGEM_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "action.hpp"
 | 
				
			||||||
 | 
					#include "ptr.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MWWorld
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class ActionSoulgem : public Action
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					            virtual void executeImp (const MWWorld::Ptr& actor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public:
 | 
				
			||||||
 | 
					            /// @param soulgem to use
 | 
				
			||||||
 | 
					            ActionSoulgem (const Ptr& object);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -189,10 +189,13 @@ namespace MWWorld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const Class& Class::get (const std::string& key)
 | 
					    const Class& Class::get (const std::string& key)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (key.empty())
 | 
				
			||||||
 | 
					            throw std::logic_error ("Class::get(): attempting to get an empty key");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::map<std::string, boost::shared_ptr<Class> >::const_iterator iter = sClasses.find (key);
 | 
					        std::map<std::string, boost::shared_ptr<Class> >::const_iterator iter = sClasses.find (key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (iter==sClasses.end())
 | 
					        if (iter==sClasses.end())
 | 
				
			||||||
            throw std::logic_error ("unknown class key: " + key);
 | 
					            throw std::logic_error ("Class::get(): unknown class key: " + key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return *iter->second;
 | 
					        return *iter->second;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ namespace MWWorld
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ( actor.getRefData().getHandle()=="player" && !(message.empty()))
 | 
					        if ( actor.getRefData().getHandle()=="player" && !(message.empty()))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  MWBase::Environment::get().getWindowManager() ->messageBox(message, std::vector<std::string>());
 | 
					      MWBase::Environment::get().getWindowManager() ->messageBox(message);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,6 +80,7 @@ set(MYGUI_FILES
 | 
				
			||||||
    openmw_persuasion_dialog.layout
 | 
					    openmw_persuasion_dialog.layout
 | 
				
			||||||
    openmw_merchantrepair.layout
 | 
					    openmw_merchantrepair.layout
 | 
				
			||||||
    openmw_repair.layout
 | 
					    openmw_repair.layout
 | 
				
			||||||
 | 
					    openmw_companion_window.layout
 | 
				
			||||||
    smallbars.png
 | 
					    smallbars.png
 | 
				
			||||||
    DejaVuLGCSansMono.ttf
 | 
					    DejaVuLGCSansMono.ttf
 | 
				
			||||||
    markers.png
 | 
					    markers.png
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								files/mygui/openmw_companion_window.layout
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								files/mygui/openmw_companion_window.layout
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<MyGUI type="Layout">
 | 
				
			||||||
 | 
					    <Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 600 300" name="_Main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- Items -->
 | 
				
			||||||
 | 
					        <Widget type="Widget" skin="MW_Box" position="5 5 575 225" name="box" align="Left Top Stretch">
 | 
				
			||||||
 | 
					            <Widget type="ScrollView" skin="MW_ScrollViewH" position="4 4 567 217" name="ItemView" align="Left Top Stretch">
 | 
				
			||||||
 | 
					                <Property key="CanvasAlign" value="Left Top"/>
 | 
				
			||||||
 | 
					                <Widget type="Button" skin="" name="Items" position="0 0 567 217" name="Items" align="Left Top Stretch"/>
 | 
				
			||||||
 | 
					            </Widget>
 | 
				
			||||||
 | 
					        </Widget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <Widget type="HBox" position="5 235 575 24" align="Right Bottom">
 | 
				
			||||||
 | 
					            <Widget type="MWDynamicStat" skin="MW_ChargeBar_Blue" position="8 8 212 24" name="EncumbranceBar" align="Left Top HStretch">
 | 
				
			||||||
 | 
					                <UserString key="HStretch" value="true"/>
 | 
				
			||||||
 | 
					            </Widget>
 | 
				
			||||||
 | 
					            <Widget type="AutoSizedTextBox" skin="SandText" name="ProfitLabel">
 | 
				
			||||||
 | 
					            </Widget>
 | 
				
			||||||
 | 
					            <Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton">
 | 
				
			||||||
 | 
					                <Property key="Caption" value="#{sClose}"/>
 | 
				
			||||||
 | 
					            </Widget>
 | 
				
			||||||
 | 
					        </Widget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </Widget>
 | 
				
			||||||
 | 
					</MyGUI>
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<MyGUI type="Layout">
 | 
					<MyGUI type="Layout">
 | 
				
			||||||
    <Widget type="Window" skin="MW_Window" layer="Windows" position="900 500 600 300" name="_Main">
 | 
					    <Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 600 300" name="_Main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Items -->
 | 
					        <!-- Items -->
 | 
				
			||||||
        <Widget type="Widget" skin="MW_Box" position="5 5 575 225" name="box" align="Left Top Stretch">
 | 
					        <Widget type="Widget" skin="MW_Box" position="5 5 575 225" name="box" align="Left Top Stretch">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,18 +70,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Available effects -->
 | 
					        <!-- Available effects -->
 | 
				
			||||||
        <Widget type="TextBox" skin="NormalText" position="12 148 300 24">
 | 
					        <Widget type="TextBox" skin="NormalText" position="12 108 300 24">
 | 
				
			||||||
            <Property key="Caption" value="#{sMagicEffects}"/>
 | 
					            <Property key="Caption" value="#{sMagicEffects}"/>
 | 
				
			||||||
        </Widget>
 | 
					        </Widget>
 | 
				
			||||||
        <Widget type="MWList" skin="MW_SimpleList" position="12 176 202 169" name="AvailableEffects">
 | 
					        <Widget type="MWList" skin="MW_SimpleList" position="12 136 202 209" name="AvailableEffects">
 | 
				
			||||||
        </Widget>
 | 
					        </Widget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Used effects -->
 | 
					        <!-- Used effects -->
 | 
				
			||||||
        <Widget type="TextBox" skin="NormalText" position="226 148 300 24">
 | 
					        <Widget type="TextBox" skin="NormalText" position="226 108 300 24">
 | 
				
			||||||
            <Property key="Caption" value="#{sEffects}"/>
 | 
					            <Property key="Caption" value="#{sEffects}"/>
 | 
				
			||||||
        </Widget>
 | 
					        </Widget>
 | 
				
			||||||
        <Widget type="Widget" skin="MW_Box" position="226 176 316 169">
 | 
					        <Widget type="Widget" skin="MW_Box" position="226 136 316 209">
 | 
				
			||||||
            <Widget type="ScrollView" skin="MW_ScrollViewH" position="4 4 308 161" name="UsedEffects">
 | 
					            <Widget type="ScrollView" skin="MW_ScrollViewH" position="4 4 308 201" name="UsedEffects">
 | 
				
			||||||
                <Property key="CanvasAlign" value="Left Top"/>
 | 
					                <Property key="CanvasAlign" value="Left Top"/>
 | 
				
			||||||
            </Widget>
 | 
					            </Widget>
 | 
				
			||||||
        </Widget>
 | 
					        </Widget>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,8 +6,7 @@
 | 
				
			||||||
        <Widget type="Widget" skin="" position="0 0 224 223" align="Left Top" name="LeftPane">
 | 
					        <Widget type="Widget" skin="" position="0 0 224 223" align="Left Top" name="LeftPane">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <!-- Player encumbrance -->
 | 
					            <!-- Player encumbrance -->
 | 
				
			||||||
            <Widget type="ProgressBar" skin="MW_Progress_Blue" position="8 8 212 24" name="EncumbranceBar" align="Left Top HStretch">
 | 
					            <Widget type="MWDynamicStat" skin="MW_ChargeBar_Blue" position="8 8 212 24" name="EncumbranceBar" align="Left Top HStretch">
 | 
				
			||||||
                <Widget type="TextBox" skin="ProgressText" position="0 0 212 24" align="Center Stretch" name="EncumbranceBarT"/>
 | 
					 | 
				
			||||||
            </Widget>
 | 
					            </Widget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <!-- Avatar -->
 | 
					            <!-- Avatar -->
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,6 +158,11 @@
 | 
				
			||||||
        <Child type="TextBox" skin="SandTextC" offset = "0 0 204 18" align = "ALIGN_RIGHT ALIGN_TOP ALIGN_STRETCH" name = "BarText" />
 | 
					        <Child type="TextBox" skin="SandTextC" offset = "0 0 204 18" align = "ALIGN_RIGHT ALIGN_TOP ALIGN_STRETCH" name = "BarText" />
 | 
				
			||||||
    </Skin>
 | 
					    </Skin>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Skin name = "MW_ChargeBar_Blue" size = "204 18">
 | 
				
			||||||
 | 
					        <Child type="ProgressBar" skin="MW_Progress_Blue" offset = "0 0 204 18" align = "ALIGN_RIGHT ALIGN_TOP ALIGN_STRETCH" name = "Bar" />
 | 
				
			||||||
 | 
					        <Child type="TextBox" skin="SandTextC" offset = "0 0 204 18" align = "ALIGN_RIGHT ALIGN_TOP ALIGN_STRETCH" name = "BarText" />
 | 
				
			||||||
 | 
					    </Skin>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <Skin name = "MW_DynamicStat_Red" size = "204 18">
 | 
					    <Skin name = "MW_DynamicStat_Red" size = "204 18">
 | 
				
			||||||
        <Child type="TextBox" skin="SandText" offset = "0 0 100 18" align = "ALIGN_LEFT ALIGN_TOP" name = "Text" />
 | 
					        <Child type="TextBox" skin="SandText" offset = "0 0 100 18" align = "ALIGN_LEFT ALIGN_TOP" name = "Text" />
 | 
				
			||||||
        <Child type="ProgressBar" skin="MW_Progress_Red" offset = "74 0 130 18" align = "ALIGN_RIGHT ALIGN_TOP" name = "Bar" />
 | 
					        <Child type="ProgressBar" skin="MW_Progress_Red" offset = "74 0 130 18" align = "ALIGN_RIGHT ALIGN_TOP" name = "Bar" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -89,18 +89,19 @@ namespace Physic
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void PhysicActor::setScale(float scale){
 | 
					    void PhysicActor::setScale(float scale){
 | 
				
			||||||
        Ogre::Vector3 position = getPosition();
 | 
					 | 
				
			||||||
        Ogre::Quaternion rotation = getRotation();
 | 
					 | 
				
			||||||
        //We only need to change the scaled box translation, box rotations remain the same.
 | 
					        //We only need to change the scaled box translation, box rotations remain the same.
 | 
				
			||||||
        mBoxScaledTranslation = mBoxScaledTranslation / mBody->getCollisionShape()->getLocalScaling().getX();
 | 
					        mBoxScaledTranslation = mBoxScaledTranslation / mBody->getCollisionShape()->getLocalScaling().getX();
 | 
				
			||||||
        mBoxScaledTranslation *= scale;
 | 
					        mBoxScaledTranslation *= scale;
 | 
				
			||||||
        if(mBody){
 | 
					        if(mBody){
 | 
				
			||||||
            mEngine->dynamicsWorld->removeRigidBody(mBody);
 | 
					            mEngine->dynamicsWorld->removeRigidBody(mBody);
 | 
				
			||||||
 | 
					            mEngine->dynamicsWorld->removeRigidBody(mRaycastingBody);
 | 
				
			||||||
            delete mBody;
 | 
					            delete mBody;
 | 
				
			||||||
 | 
					            delete mRaycastingBody;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //Create the newly scaled rigid body
 | 
					        //Create the newly scaled rigid body
 | 
				
			||||||
        mBody = mEngine->createAndAdjustRigidBody(mMesh, mName, scale, position, rotation);
 | 
					        mBody = mEngine->createAndAdjustRigidBody(mMesh, mName, scale, getPosition(), getRotation());
 | 
				
			||||||
        mEngine->addRigidBody(mBody, false);  //Add rigid body to dynamics world, but do not add to object map
 | 
					        mRaycastingBody = mEngine->createAndAdjustRigidBody(mMesh, mName, scale, getPosition(), getRotation(), 0, 0, true);
 | 
				
			||||||
 | 
					        mEngine->addRigidBody(mBody, false, mRaycastingBody);  //Add rigid body to dynamics world, but do not add to object map
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ogre::Vector3 PhysicActor::getHalfExtents() const
 | 
					    Ogre::Vector3 PhysicActor::getHalfExtents() const
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue