mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-04 21:45:33 +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
|
||||||
|
@ -424,15 +432,13 @@ namespace MWDialogue
|
||||||
|
|
||||||
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,7 +138,8 @@ void MessageBoxManager::setMessageBoxSpeed (int speed)
|
||||||
|
|
||||||
void MessageBoxManager::enterPressed ()
|
void MessageBoxManager::enterPressed ()
|
||||||
{
|
{
|
||||||
mInterMessageBoxe->enterPressed();
|
if(mInterMessageBoxe != NULL)
|
||||||
|
mInterMessageBoxe->enterPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
int MessageBoxManager::readPressedButton ()
|
int MessageBoxManager::readPressedButton ()
|
||||||
|
@ -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