mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-25 16:43:33 +00:00
Merge branch 'spellcreation' of git@github.com:scrawl/openmw.git into Travel_Dialogue
Conflicts: apps/openmw/CMakeLists.txt apps/openmw/mwdialogue/dialoguemanagerimp.cpp apps/openmw/mwgui/dialogue.cpp apps/openmw/mwgui/dialogue.hpp apps/openmw/mwgui/mode.hpp apps/openmw/mwgui/windowmanagerimp.cpp
This commit is contained in:
commit
4f5c4bf89a
@ -226,7 +226,7 @@ int main(int argc, char**argv)
|
|||||||
case REC_BOOK:
|
case REC_BOOK:
|
||||||
{
|
{
|
||||||
Book b;
|
Book b;
|
||||||
b.load(esm);
|
b.load(esm, id);
|
||||||
if(quiet) break;
|
if(quiet) break;
|
||||||
cout << " Name: " << b.name << endl;
|
cout << " Name: " << b.name << endl;
|
||||||
cout << " Mesh: " << b.model << endl;
|
cout << " Mesh: " << b.model << endl;
|
||||||
|
@ -29,7 +29,8 @@ add_openmw_dir (mwgui
|
|||||||
map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list
|
map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list
|
||||||
formatting inventorywindow container hud countdialog tradewindow settingswindow
|
formatting inventorywindow container hud countdialog tradewindow settingswindow
|
||||||
confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
|
confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
|
||||||
itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog travelwindow
|
itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog travelwindow spellcreationdialog
|
||||||
|
enchantingdialog
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwdialogue
|
add_openmw_dir (mwdialogue
|
||||||
|
@ -228,6 +228,9 @@ namespace MWBase
|
|||||||
virtual bool getRestEnabled() = 0;
|
virtual bool getRestEnabled() = 0;
|
||||||
|
|
||||||
virtual bool getPlayerSleeping() = 0;
|
virtual bool getPlayerSleeping() = 0;
|
||||||
|
|
||||||
|
virtual void startSpellMaking(MWWorld::Ptr actor) = 0;
|
||||||
|
virtual void startEnchanting(MWWorld::Ptr actor) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,8 +124,6 @@ namespace MWClass
|
|||||||
info.caption = ref->base->name + MWGui::ToolTips::getCountString(ptr.getRefData().getCount());
|
info.caption = ref->base->name + MWGui::ToolTips::getCountString(ptr.getRefData().getCount());
|
||||||
info.icon = ref->base->icon;
|
info.icon = ref->base->icon;
|
||||||
|
|
||||||
const ESMS::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
|
|
||||||
|
|
||||||
std::string text;
|
std::string text;
|
||||||
|
|
||||||
text += "\n#{sWeight}: " + MWGui::ToolTips::toString(ref->base->data.weight);
|
text += "\n#{sWeight}: " + MWGui::ToolTips::toString(ref->base->data.weight);
|
||||||
|
@ -129,8 +129,6 @@ namespace MWClass
|
|||||||
info.caption = ref->base->name + MWGui::ToolTips::getCountString(ptr.getRefData().getCount());
|
info.caption = ref->base->name + MWGui::ToolTips::getCountString(ptr.getRefData().getCount());
|
||||||
info.icon = ref->base->icon;
|
info.icon = ref->base->icon;
|
||||||
|
|
||||||
const ESMS::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
|
|
||||||
|
|
||||||
std::string text;
|
std::string text;
|
||||||
|
|
||||||
text += "\n#{sWeight}: " + MWGui::ToolTips::toString(ref->base->data.weight);
|
text += "\n#{sWeight}: " + MWGui::ToolTips::toString(ref->base->data.weight);
|
||||||
|
@ -145,16 +145,17 @@ namespace
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
namespace MWDialogue
|
|
||||||
{
|
|
||||||
|
|
||||||
//helper function
|
//helper function
|
||||||
std::string::size_type find_str_ci(const std::string& str, const std::string& substr,size_t pos)
|
std::string::size_type find_str_ci(const std::string& str, const std::string& substr,size_t pos)
|
||||||
{
|
{
|
||||||
return toLower(str).find(toLower(substr),pos);
|
return toLower(str).find(toLower(substr),pos);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
bool DialogueManager::functionFilter(const MWWorld::Ptr& actor, const ESM::DialInfo& info,bool choice)
|
bool DialogueManager::functionFilter(const MWWorld::Ptr& actor, const ESM::DialInfo& info,bool choice)
|
||||||
{
|
{
|
||||||
@ -779,6 +780,8 @@ namespace MWDialogue
|
|||||||
services = ref->base->mAiData.mServices;
|
services = ref->base->mAiData.mServices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int windowServices = 0;
|
||||||
|
|
||||||
if (services & ESM::NPC::Weapon
|
if (services & ESM::NPC::Weapon
|
||||||
|| services & ESM::NPC::Armor
|
|| services & ESM::NPC::Armor
|
||||||
|| services & ESM::NPC::Clothing
|
|| services & ESM::NPC::Clothing
|
||||||
@ -790,19 +793,24 @@ namespace MWDialogue
|
|||||||
|| services & ESM::NPC::Apparatus
|
|| services & ESM::NPC::Apparatus
|
||||||
|| services & ESM::NPC::RepairItem
|
|| services & ESM::NPC::RepairItem
|
||||||
|| services & ESM::NPC::Misc)
|
|| services & ESM::NPC::Misc)
|
||||||
win->setShowTrade(true);
|
windowServices |= MWGui::DialogueWindow::Service_Trade;
|
||||||
else
|
|
||||||
win->setShowTrade(false);
|
|
||||||
|
|
||||||
if (services & ESM::NPC::Spells)
|
|
||||||
win->setShowSpells(true);
|
|
||||||
else
|
|
||||||
win->setShowSpells(false);
|
|
||||||
if( !mActor.get<ESM::NPC>()->base->mTransport.empty())
|
if( !mActor.get<ESM::NPC>()->base->mTransport.empty())
|
||||||
win->setShowTravel(true);
|
win->setShowTravel(true);
|
||||||
else
|
else
|
||||||
win->setShowTravel(false);
|
win->setShowTravel(false);
|
||||||
|
|
||||||
|
if (services & ESM::NPC::Spells)
|
||||||
|
windowServices |= MWGui::DialogueWindow::Service_BuySpells;
|
||||||
|
|
||||||
|
if (services & ESM::NPC::Spellmaking)
|
||||||
|
windowServices |= MWGui::DialogueWindow::Service_CreateSpells;
|
||||||
|
|
||||||
|
if (services & ESM::NPC::Enchanting)
|
||||||
|
windowServices |= MWGui::DialogueWindow::Service_Enchant;
|
||||||
|
|
||||||
|
win->setServices (windowServices);
|
||||||
|
|
||||||
// sort again, because the previous sort was case-sensitive
|
// sort again, because the previous sort was case-sensitive
|
||||||
keywordList.sort(stringCompareNoCase);
|
keywordList.sort(stringCompareNoCase);
|
||||||
win->setKeywords(keywordList);
|
win->setKeywords(keywordList);
|
||||||
|
@ -565,7 +565,7 @@ void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
|
|||||||
{
|
{
|
||||||
delete mAttribDialog;
|
delete mAttribDialog;
|
||||||
mAttribDialog = new SelectAttributeDialog(mWindowManager);
|
mAttribDialog = new SelectAttributeDialog(mWindowManager);
|
||||||
mAttribDialog->setAffectedWidget(_sender);
|
mAffectedAttribute = _sender;
|
||||||
mAttribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
mAttribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||||
mAttribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected);
|
mAttribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected);
|
||||||
mAttribDialog->setVisible(true);
|
mAttribDialog->setVisible(true);
|
||||||
@ -574,18 +574,17 @@ void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
|
|||||||
void CreateClassDialog::onAttributeSelected()
|
void CreateClassDialog::onAttributeSelected()
|
||||||
{
|
{
|
||||||
ESM::Attribute::AttributeID id = mAttribDialog->getAttributeId();
|
ESM::Attribute::AttributeID id = mAttribDialog->getAttributeId();
|
||||||
Widgets::MWAttributePtr attribute = mAttribDialog->getAffectedWidget();
|
if (mAffectedAttribute == mFavoriteAttribute0)
|
||||||
if (attribute == mFavoriteAttribute0)
|
|
||||||
{
|
{
|
||||||
if (mFavoriteAttribute1->getAttributeId() == id)
|
if (mFavoriteAttribute1->getAttributeId() == id)
|
||||||
mFavoriteAttribute1->setAttributeId(mFavoriteAttribute0->getAttributeId());
|
mFavoriteAttribute1->setAttributeId(mFavoriteAttribute0->getAttributeId());
|
||||||
}
|
}
|
||||||
else if (attribute == mFavoriteAttribute1)
|
else if (mAffectedAttribute == mFavoriteAttribute1)
|
||||||
{
|
{
|
||||||
if (mFavoriteAttribute0->getAttributeId() == id)
|
if (mFavoriteAttribute0->getAttributeId() == id)
|
||||||
mFavoriteAttribute0->setAttributeId(mFavoriteAttribute1->getAttributeId());
|
mFavoriteAttribute0->setAttributeId(mFavoriteAttribute1->getAttributeId());
|
||||||
}
|
}
|
||||||
attribute->setAttributeId(id);
|
mAffectedAttribute->setAttributeId(id);
|
||||||
mWindowManager.removeDialog(mAttribDialog);
|
mWindowManager.removeDialog(mAttribDialog);
|
||||||
mAttribDialog = 0;
|
mAttribDialog = 0;
|
||||||
|
|
||||||
@ -596,7 +595,7 @@ void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
|
|||||||
{
|
{
|
||||||
delete mSkillDialog;
|
delete mSkillDialog;
|
||||||
mSkillDialog = new SelectSkillDialog(mWindowManager);
|
mSkillDialog = new SelectSkillDialog(mWindowManager);
|
||||||
mSkillDialog->setAffectedWidget(_sender);
|
mAffectedSkill = _sender;
|
||||||
mSkillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
mSkillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||||
mSkillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected);
|
mSkillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected);
|
||||||
mSkillDialog->setVisible(true);
|
mSkillDialog->setVisible(true);
|
||||||
@ -605,22 +604,21 @@ void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
|
|||||||
void CreateClassDialog::onSkillSelected()
|
void CreateClassDialog::onSkillSelected()
|
||||||
{
|
{
|
||||||
ESM::Skill::SkillEnum id = mSkillDialog->getSkillId();
|
ESM::Skill::SkillEnum id = mSkillDialog->getSkillId();
|
||||||
Widgets::MWSkillPtr skill = mSkillDialog->getAffectedWidget();
|
|
||||||
|
|
||||||
// Avoid duplicate skills by swapping any skill field that matches the selected one
|
// Avoid duplicate skills by swapping any skill field that matches the selected one
|
||||||
std::vector<Widgets::MWSkillPtr>::const_iterator end = mSkills.end();
|
std::vector<Widgets::MWSkillPtr>::const_iterator end = mSkills.end();
|
||||||
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = mSkills.begin(); it != end; ++it)
|
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = mSkills.begin(); it != end; ++it)
|
||||||
{
|
{
|
||||||
if (*it == skill)
|
if (*it == mAffectedSkill)
|
||||||
continue;
|
continue;
|
||||||
if ((*it)->getSkillId() == id)
|
if ((*it)->getSkillId() == id)
|
||||||
{
|
{
|
||||||
(*it)->setSkillId(skill->getSkillId());
|
(*it)->setSkillId(mAffectedSkill->getSkillId());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
skill->setSkillId(mSkillDialog->getSkillId());
|
mAffectedSkill->setSkillId(mSkillDialog->getSkillId());
|
||||||
mWindowManager.removeDialog(mSkillDialog);
|
mWindowManager.removeDialog(mSkillDialog);
|
||||||
mSkillDialog = 0;
|
mSkillDialog = 0;
|
||||||
update();
|
update();
|
||||||
|
@ -167,8 +167,6 @@ namespace MWGui
|
|||||||
~SelectAttributeDialog();
|
~SelectAttributeDialog();
|
||||||
|
|
||||||
ESM::Attribute::AttributeID getAttributeId() const { return mAttributeId; }
|
ESM::Attribute::AttributeID getAttributeId() const { return mAttributeId; }
|
||||||
Widgets::MWAttributePtr getAffectedWidget() const { return mAffectedWidget; }
|
|
||||||
void setAffectedWidget(Widgets::MWAttributePtr widget) { mAffectedWidget = widget; }
|
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
||||||
@ -188,8 +186,6 @@ namespace MWGui
|
|||||||
void onCancelClicked(MyGUI::Widget* _sender);
|
void onCancelClicked(MyGUI::Widget* _sender);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Widgets::MWAttributePtr mAffectedWidget;
|
|
||||||
|
|
||||||
ESM::Attribute::AttributeID mAttributeId;
|
ESM::Attribute::AttributeID mAttributeId;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -200,8 +196,6 @@ namespace MWGui
|
|||||||
~SelectSkillDialog();
|
~SelectSkillDialog();
|
||||||
|
|
||||||
ESM::Skill::SkillEnum getSkillId() const { return mSkillId; }
|
ESM::Skill::SkillEnum getSkillId() const { return mSkillId; }
|
||||||
Widgets::MWSkillPtr getAffectedWidget() const { return mAffectedWidget; }
|
|
||||||
void setAffectedWidget(Widgets::MWSkillPtr widget) { mAffectedWidget = widget; }
|
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
||||||
@ -224,7 +218,6 @@ namespace MWGui
|
|||||||
Widgets::MWSkillPtr mCombatSkill[9];
|
Widgets::MWSkillPtr mCombatSkill[9];
|
||||||
Widgets::MWSkillPtr mMagicSkill[9];
|
Widgets::MWSkillPtr mMagicSkill[9];
|
||||||
Widgets::MWSkillPtr mStealthSkill[9];
|
Widgets::MWSkillPtr mStealthSkill[9];
|
||||||
Widgets::MWSkillPtr mAffectedWidget;
|
|
||||||
|
|
||||||
ESM::Skill::SkillEnum mSkillId;
|
ESM::Skill::SkillEnum mSkillId;
|
||||||
};
|
};
|
||||||
@ -301,6 +294,9 @@ namespace MWGui
|
|||||||
DescriptionDialog *mDescDialog;
|
DescriptionDialog *mDescDialog;
|
||||||
|
|
||||||
ESM::Class::Specialization mSpecializationId;
|
ESM::Class::Specialization mSpecializationId;
|
||||||
|
|
||||||
|
Widgets::MWAttributePtr mAffectedAttribute;
|
||||||
|
Widgets::MWSkillPtr mAffectedSkill;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -362,7 +362,7 @@ void ContainerBase::drawItems()
|
|||||||
int maxHeight = mItemView->getSize().height - 58;
|
int maxHeight = mItemView->getSize().height - 58;
|
||||||
|
|
||||||
bool onlyMagic = false;
|
bool onlyMagic = false;
|
||||||
int categories;
|
int categories = 0;
|
||||||
if (mFilter == Filter_All)
|
if (mFilter == Filter_All)
|
||||||
categories = MWWorld::ContainerStore::Type_All;
|
categories = MWWorld::ContainerStore::Type_All;
|
||||||
else if (mFilter == Filter_Weapon)
|
else if (mFilter == Filter_Weapon)
|
||||||
|
@ -28,6 +28,8 @@ using namespace Widgets;
|
|||||||
*Copied from the internet.
|
*Copied from the internet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
std::string lower_string(const std::string& str)
|
std::string lower_string(const std::string& str)
|
||||||
{
|
{
|
||||||
std::string lowerCase;
|
std::string lowerCase;
|
||||||
@ -43,12 +45,13 @@ std::string::size_type find_str_ci(const std::string& str, const std::string& su
|
|||||||
return lower_string(str).find(lower_string(substr),pos);
|
return lower_string(str).find(lower_string(substr),pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DialogueWindow::DialogueWindow(MWBase::WindowManager& parWindowManager)
|
DialogueWindow::DialogueWindow(MWBase::WindowManager& parWindowManager)
|
||||||
: WindowBase("openmw_dialogue_window.layout", parWindowManager)
|
: WindowBase("openmw_dialogue_window.layout", parWindowManager)
|
||||||
, mEnabled(true)
|
, mEnabled(true)
|
||||||
, mShowTrade(false)
|
, mServices(0)
|
||||||
, mShowSpells(false)
|
|
||||||
{
|
{
|
||||||
// Centre dialog
|
// Centre dialog
|
||||||
center();
|
center();
|
||||||
@ -142,6 +145,16 @@ void DialogueWindow::onSelectTopic(std::string topic)
|
|||||||
mWindowManager.getTravelWindow()->startTravel(mPtr);
|
mWindowManager.getTravelWindow()->startTravel(mPtr);
|
||||||
//mWindowManager.getSpellBuyingWindow()->startSpellBuying(mPtr);
|
//mWindowManager.getSpellBuyingWindow()->startSpellBuying(mPtr);
|
||||||
}
|
}
|
||||||
|
else if (topic == MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sSpellMakingMenuTitle")->getString())
|
||||||
|
{
|
||||||
|
mWindowManager.pushGuiMode(GM_SpellCreation);
|
||||||
|
mWindowManager.startSpellMaking (mPtr);
|
||||||
|
}
|
||||||
|
else if (topic == MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sEnchanting")->getString())
|
||||||
|
{
|
||||||
|
mWindowManager.pushGuiMode(GM_Enchanting);
|
||||||
|
mWindowManager.startEnchanting (mPtr);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(topic));
|
MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(topic));
|
||||||
}
|
}
|
||||||
@ -162,17 +175,23 @@ void DialogueWindow::setKeywords(std::list<std::string> keyWords)
|
|||||||
{
|
{
|
||||||
mTopicsList->clear();
|
mTopicsList->clear();
|
||||||
|
|
||||||
bool anyService = mShowTrade||mShowSpells;
|
bool anyService = mServices > 0;
|
||||||
|
|
||||||
if (mShowTrade)
|
if (mServices & Service_Trade)
|
||||||
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sBarter")->getString());
|
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sBarter")->getString());
|
||||||
|
|
||||||
if (mShowSpells)
|
if (mServices & Service_BuySpells)
|
||||||
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sSpells")->getString());
|
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sSpells")->getString());
|
||||||
|
|
||||||
if(mShowTravel)
|
if(mShowTravel)
|
||||||
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sTravel")->getString());
|
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sTravel")->getString());
|
||||||
|
|
||||||
|
if (mServices & Service_CreateSpells)
|
||||||
|
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sSpellmakingMenuTitle")->getString());
|
||||||
|
|
||||||
|
if (mServices & Service_Enchant)
|
||||||
|
mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.find("sEnchanting")->getString());
|
||||||
|
|
||||||
if (anyService || mShowTravel)
|
if (anyService || mShowTravel)
|
||||||
mTopicsList->addSeparator();
|
mTopicsList->addSeparator();
|
||||||
|
|
||||||
|
@ -53,6 +53,15 @@ namespace MWGui
|
|||||||
void setShowTrade(bool show) { mShowTrade = show; }
|
void setShowTrade(bool show) { mShowTrade = show; }
|
||||||
void setShowSpells(bool show) { mShowSpells = show; }
|
void setShowSpells(bool show) { mShowSpells = show; }
|
||||||
void setShowTravel(bool show) { mShowTravel = show; }
|
void setShowTravel(bool show) { mShowTravel = show; }
|
||||||
|
void setServices(int services) { mServices = services; }
|
||||||
|
|
||||||
|
enum Services
|
||||||
|
{
|
||||||
|
Service_Trade = 0x01,
|
||||||
|
Service_BuySpells = 0x02,
|
||||||
|
Service_CreateSpells = 0x04,
|
||||||
|
Service_Enchant = 0x08
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void onSelectTopic(std::string topic);
|
void onSelectTopic(std::string topic);
|
||||||
@ -75,6 +84,8 @@ namespace MWGui
|
|||||||
bool mShowSpells;
|
bool mShowSpells;
|
||||||
bool mShowTravel;
|
bool mShowTravel;
|
||||||
|
|
||||||
|
int mServices;
|
||||||
|
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
|
|
||||||
DialogueHistory* mHistory;
|
DialogueHistory* mHistory;
|
||||||
|
30
apps/openmw/mwgui/enchantingdialog.cpp
Normal file
30
apps/openmw/mwgui/enchantingdialog.cpp
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#include "enchantingdialog.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
EnchantingDialog::EnchantingDialog(MWBase::WindowManager &parWindowManager)
|
||||||
|
: WindowBase("openmw_enchanting_dialog.layout", parWindowManager)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnchantingDialog::open()
|
||||||
|
{
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnchantingDialog::startEnchanting (MWWorld::Ptr actor)
|
||||||
|
{
|
||||||
|
mPtr = actor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnchantingDialog::onReferenceUnavailable ()
|
||||||
|
{
|
||||||
|
mWindowManager.removeGuiMode (GM_Dialogue);
|
||||||
|
mWindowManager.removeGuiMode (GM_Enchanting);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
26
apps/openmw/mwgui/enchantingdialog.hpp
Normal file
26
apps/openmw/mwgui/enchantingdialog.hpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef MWGUI_ENCHANTINGDIALOG_H
|
||||||
|
#define MWGUI_ENCHANTINGDIALOG_H
|
||||||
|
|
||||||
|
#include "window_base.hpp"
|
||||||
|
#include "referenceinterface.hpp"
|
||||||
|
|
||||||
|
#include "../mwbase/windowmanager.hpp"
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
class EnchantingDialog : public WindowBase, public ReferenceInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EnchantingDialog(MWBase::WindowManager& parWindowManager);
|
||||||
|
|
||||||
|
virtual void open();
|
||||||
|
void startEnchanting(MWWorld::Ptr actor);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void onReferenceUnavailable();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -128,4 +128,10 @@ void MWList::onItemSelected(MyGUI::Widget* _sender)
|
|||||||
std::string name = static_cast<MyGUI::Button*>(_sender)->getCaption();
|
std::string name = static_cast<MyGUI::Button*>(_sender)->getCaption();
|
||||||
|
|
||||||
eventItemSelected(name);
|
eventItemSelected(name);
|
||||||
|
eventWidgetSelected(_sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::Widget* MWList::getItemWidget(const std::string& name)
|
||||||
|
{
|
||||||
|
return mScrollView->findWidget (getName() + "_item_" + name);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ namespace MWGui
|
|||||||
MWList();
|
MWList();
|
||||||
|
|
||||||
typedef MyGUI::delegates::CMultiDelegate1<std::string> EventHandle_String;
|
typedef MyGUI::delegates::CMultiDelegate1<std::string> EventHandle_String;
|
||||||
|
typedef MyGUI::delegates::CMultiDelegate1<MyGUI::Widget*> EventHandle_Widget;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event: Item selected with the mouse.
|
* Event: Item selected with the mouse.
|
||||||
@ -25,6 +26,13 @@ namespace MWGui
|
|||||||
*/
|
*/
|
||||||
EventHandle_String eventItemSelected;
|
EventHandle_String eventItemSelected;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event: Item selected with the mouse.
|
||||||
|
* signature: void method(MyGUI::Widget* sender)
|
||||||
|
*/
|
||||||
|
EventHandle_Widget eventWidgetSelected;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call after the size of the list changed, or items were inserted/removed
|
* Call after the size of the list changed, or items were inserted/removed
|
||||||
*/
|
*/
|
||||||
@ -38,6 +46,9 @@ namespace MWGui
|
|||||||
std::string getItemNameAt(unsigned int at); ///< \attention if there are separators, this method will return "" at the place where the separator is
|
std::string getItemNameAt(unsigned int at); ///< \attention if there are separators, this method will return "" at the place where the separator is
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
|
MyGUI::Widget* getItemWidget(const std::string& name);
|
||||||
|
///< get widget for an item name, useful to set up tooltip
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initialiseOverride();
|
void initialiseOverride();
|
||||||
|
|
||||||
|
@ -224,6 +224,9 @@ void LocalMapBase::setPlayerPos(const float x, const float y)
|
|||||||
{
|
{
|
||||||
if (x == mLastPositionX && y == mLastPositionY)
|
if (x == mLastPositionX && y == mLastPositionY)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
notifyPlayerUpdate ();
|
||||||
|
|
||||||
MyGUI::IntSize size = mLocalMap->getCanvasSize();
|
MyGUI::IntSize size = mLocalMap->getCanvasSize();
|
||||||
MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height);
|
MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height);
|
||||||
MyGUI::IntCoord viewsize = mLocalMap->getCoord();
|
MyGUI::IntCoord viewsize = mLocalMap->getCoord();
|
||||||
@ -239,6 +242,9 @@ void LocalMapBase::setPlayerDir(const float x, const float y)
|
|||||||
{
|
{
|
||||||
if (x == mLastDirectionX && y == mLastDirectionY)
|
if (x == mLastDirectionX && y == mLastDirectionY)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
notifyPlayerUpdate ();
|
||||||
|
|
||||||
MyGUI::ISubWidget* main = mCompass->getSubWidgetMain();
|
MyGUI::ISubWidget* main = mCompass->getSubWidgetMain();
|
||||||
MyGUI::RotatingSkin* rotatingSubskin = main->castType<MyGUI::RotatingSkin>();
|
MyGUI::RotatingSkin* rotatingSubskin = main->castType<MyGUI::RotatingSkin>();
|
||||||
rotatingSubskin->setCenter(MyGUI::IntPoint(16,16));
|
rotatingSubskin->setCenter(MyGUI::IntPoint(16,16));
|
||||||
@ -407,3 +413,9 @@ void MapWindow::globalMapUpdatePlayer ()
|
|||||||
MyGUI::IntPoint viewoffs(0.5*viewsize.width - worldX, 0.5*viewsize.height - worldY);
|
MyGUI::IntPoint viewoffs(0.5*viewsize.width - worldX, 0.5*viewsize.height - worldY);
|
||||||
mGlobalMap->setViewOffset(viewoffs);
|
mGlobalMap->setViewOffset(viewoffs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MapWindow::notifyPlayerUpdate ()
|
||||||
|
{
|
||||||
|
if (mGlobal)
|
||||||
|
globalMapUpdatePlayer ();
|
||||||
|
}
|
||||||
|
@ -49,6 +49,8 @@ namespace MWGui
|
|||||||
void onMarkerFocused(MyGUI::Widget* w1, MyGUI::Widget* w2);
|
void onMarkerFocused(MyGUI::Widget* w1, MyGUI::Widget* w2);
|
||||||
void onMarkerUnfocused(MyGUI::Widget* w1, MyGUI::Widget* w2);
|
void onMarkerUnfocused(MyGUI::Widget* w1, MyGUI::Widget* w2);
|
||||||
|
|
||||||
|
virtual void notifyPlayerUpdate() {}
|
||||||
|
|
||||||
OEngine::GUI::Layout* mLayout;
|
OEngine::GUI::Layout* mLayout;
|
||||||
|
|
||||||
bool mMapDragAndDrop;
|
bool mMapDragAndDrop;
|
||||||
@ -93,6 +95,8 @@ namespace MWGui
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void onPinToggled();
|
virtual void onPinToggled();
|
||||||
|
|
||||||
|
virtual void notifyPlayerUpdate();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,6 +23,8 @@ namespace MWGui
|
|||||||
GM_RestBed,
|
GM_RestBed,
|
||||||
GM_SpellBuying,
|
GM_SpellBuying,
|
||||||
GM_Travel,
|
GM_Travel,
|
||||||
|
GM_SpellCreation,
|
||||||
|
GM_Enchanting,
|
||||||
|
|
||||||
GM_Levelup,
|
GM_Levelup,
|
||||||
|
|
||||||
|
@ -33,11 +33,6 @@ RaceDialog::RaceDialog(MWBase::WindowManager& parWindowManager)
|
|||||||
setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance"));
|
setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance"));
|
||||||
getWidget(mPreviewImage, "PreviewImage");
|
getWidget(mPreviewImage, "PreviewImage");
|
||||||
|
|
||||||
MWBase::Environment::get().getWorld ()->setupExternalRendering (mPreview);
|
|
||||||
mPreview.update (0);
|
|
||||||
|
|
||||||
mPreviewImage->setImageTexture ("CharacterHeadPreview");
|
|
||||||
|
|
||||||
getWidget(mHeadRotate, "HeadRotate");
|
getWidget(mHeadRotate, "HeadRotate");
|
||||||
mHeadRotate->setScrollRange(50);
|
mHeadRotate->setScrollRange(50);
|
||||||
mHeadRotate->setScrollPosition(25);
|
mHeadRotate->setScrollPosition(25);
|
||||||
@ -107,6 +102,12 @@ void RaceDialog::open()
|
|||||||
updateRaces();
|
updateRaces();
|
||||||
updateSkills();
|
updateSkills();
|
||||||
updateSpellPowers();
|
updateSpellPowers();
|
||||||
|
|
||||||
|
mPreview = new MWRender::RaceSelectionPreview();
|
||||||
|
MWBase::Environment::get().getWorld ()->setupExternalRendering (*mPreview);
|
||||||
|
mPreview->update (0);
|
||||||
|
|
||||||
|
mPreviewImage->setImageTexture ("CharacterHeadPreview");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -138,6 +139,12 @@ int wrap(int index, int max)
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RaceDialog::close()
|
||||||
|
{
|
||||||
|
delete mPreview;
|
||||||
|
mPreview = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// widget controls
|
// widget controls
|
||||||
|
|
||||||
void RaceDialog::onOkClicked(MyGUI::Widget* _sender)
|
void RaceDialog::onOkClicked(MyGUI::Widget* _sender)
|
||||||
@ -154,7 +161,7 @@ void RaceDialog::onHeadRotate(MyGUI::ScrollBar*, size_t _position)
|
|||||||
{
|
{
|
||||||
float angle = (float(_position) / 49.f - 0.5) * 3.14 * 2;
|
float angle = (float(_position) / 49.f - 0.5) * 3.14 * 2;
|
||||||
float diff = angle - mCurrentAngle;
|
float diff = angle - mCurrentAngle;
|
||||||
mPreview.update (diff);
|
mPreview->update (diff);
|
||||||
mCurrentAngle += diff;
|
mCurrentAngle += diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ namespace MWGui
|
|||||||
|
|
||||||
void setNextButtonShow(bool shown);
|
void setNextButtonShow(bool shown);
|
||||||
virtual void open();
|
virtual void open();
|
||||||
|
virtual void close();
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
|
||||||
@ -94,7 +95,7 @@ namespace MWGui
|
|||||||
|
|
||||||
float mCurrentAngle;
|
float mCurrentAngle;
|
||||||
|
|
||||||
MWRender::RaceSelectionPreview mPreview;
|
MWRender::RaceSelectionPreview* mPreview;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,7 +24,6 @@ namespace MWGui
|
|||||||
|
|
||||||
SpellBuyingWindow::SpellBuyingWindow(MWBase::WindowManager& parWindowManager) :
|
SpellBuyingWindow::SpellBuyingWindow(MWBase::WindowManager& parWindowManager) :
|
||||||
WindowBase("openmw_spell_buying_window.layout", parWindowManager)
|
WindowBase("openmw_spell_buying_window.layout", parWindowManager)
|
||||||
, ContainerBase(NULL) // no drag&drop
|
|
||||||
, mCurrentY(0)
|
, mCurrentY(0)
|
||||||
, mLastPos(0)
|
, mLastPos(0)
|
||||||
{
|
{
|
||||||
@ -77,7 +76,7 @@ namespace MWGui
|
|||||||
void SpellBuyingWindow::startSpellBuying(const MWWorld::Ptr& actor)
|
void SpellBuyingWindow::startSpellBuying(const MWWorld::Ptr& actor)
|
||||||
{
|
{
|
||||||
center();
|
center();
|
||||||
mActor = actor;
|
mPtr = actor;
|
||||||
clearSpells();
|
clearSpells();
|
||||||
|
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
@ -114,7 +113,7 @@ namespace MWGui
|
|||||||
MWMechanics::Spells& spells = stats.getSpells();
|
MWMechanics::Spells& spells = stats.getSpells();
|
||||||
spells.add (mSpellsWidgetMap.find(_sender)->second);
|
spells.add (mSpellsWidgetMap.find(_sender)->second);
|
||||||
mWindowManager.getTradeWindow()->addOrRemoveGold(-price);
|
mWindowManager.getTradeWindow()->addOrRemoveGold(-price);
|
||||||
startSpellBuying(mActor);
|
startSpellBuying(mPtr);
|
||||||
|
|
||||||
MWBase::Environment::get().getSoundManager()->playSound ("Item Gold Up", 1.0, 1.0);
|
MWBase::Environment::get().getSoundManager()->playSound ("Item Gold Up", 1.0, 1.0);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
#ifndef MWGUI_SpellBuyingWINDOW_H
|
#ifndef MWGUI_SpellBuyingWINDOW_H
|
||||||
#define MWGUI_SpellBuyingWINDOW_H
|
#define MWGUI_SpellBuyingWINDOW_H
|
||||||
|
|
||||||
#include "container.hpp"
|
|
||||||
#include "window_base.hpp"
|
#include "window_base.hpp"
|
||||||
|
#include "referenceinterface.hpp"
|
||||||
#include "../mwworld/ptr.hpp"
|
|
||||||
|
|
||||||
namespace MyGUI
|
namespace MyGUI
|
||||||
{
|
{
|
||||||
@ -20,7 +18,7 @@ namespace MWGui
|
|||||||
|
|
||||||
namespace MWGui
|
namespace MWGui
|
||||||
{
|
{
|
||||||
class SpellBuyingWindow : public ContainerBase, public WindowBase
|
class SpellBuyingWindow : public ReferenceInterface, public WindowBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SpellBuyingWindow(MWBase::WindowManager& parWindowManager);
|
SpellBuyingWindow(MWBase::WindowManager& parWindowManager);
|
||||||
@ -35,8 +33,6 @@ namespace MWGui
|
|||||||
|
|
||||||
MyGUI::ScrollView* mSpellsView;
|
MyGUI::ScrollView* mSpellsView;
|
||||||
|
|
||||||
MWWorld::Ptr mActor;
|
|
||||||
|
|
||||||
std::map<MyGUI::Widget*, std::string> mSpellsWidgetMap;
|
std::map<MyGUI::Widget*, std::string> mSpellsWidgetMap;
|
||||||
|
|
||||||
void onCancelButtonClicked(MyGUI::Widget* _sender);
|
void onCancelButtonClicked(MyGUI::Widget* _sender);
|
||||||
|
219
apps/openmw/mwgui/spellcreationdialog.cpp
Normal file
219
apps/openmw/mwgui/spellcreationdialog.cpp
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
#include "spellcreationdialog.hpp"
|
||||||
|
|
||||||
|
#include <components/esm_store/store.hpp>
|
||||||
|
|
||||||
|
#include "../mwbase/windowmanager.hpp"
|
||||||
|
|
||||||
|
#include "../mwbase/world.hpp"
|
||||||
|
#include "../mwbase/environment.hpp"
|
||||||
|
|
||||||
|
#include "../mwworld/player.hpp"
|
||||||
|
#include "../mwworld/class.hpp"
|
||||||
|
|
||||||
|
#include "../mwmechanics/spells.hpp"
|
||||||
|
#include "../mwmechanics/creaturestats.hpp"
|
||||||
|
|
||||||
|
#include "tooltips.hpp"
|
||||||
|
#include "widgets.hpp"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
bool sortMagicEffects (short id1, short id2)
|
||||||
|
{
|
||||||
|
return MWBase::Environment::get().getWorld ()->getStore ().gameSettings.find(MWGui::Widgets::MWSpellEffect::effectIDToString (id1))->getString()
|
||||||
|
< MWBase::Environment::get().getWorld ()->getStore ().gameSettings.find(MWGui::Widgets::MWSpellEffect::effectIDToString (id2))->getString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
EditEffectDialog::EditEffectDialog(MWBase::WindowManager &parWindowManager)
|
||||||
|
: WindowModal("openmw_edit_effect.layout", parWindowManager)
|
||||||
|
{
|
||||||
|
getWidget(mCancelButton, "CancelButton");
|
||||||
|
getWidget(mOkButton, "OkButton");
|
||||||
|
getWidget(mDeleteButton, "DeleteButton");
|
||||||
|
getWidget(mRangeButton, "RangeButton");
|
||||||
|
getWidget(mMagnitudeMinValue, "MagnitudeMinValue");
|
||||||
|
getWidget(mMagnitudeMaxValue, "MagnitudeMaxValue");
|
||||||
|
getWidget(mDurationValue, "DurationValue");
|
||||||
|
getWidget(mAreaValue, "AreaValue");
|
||||||
|
getWidget(mMagnitudeMinSlider, "MagnitudeMinSlider");
|
||||||
|
getWidget(mMagnitudeMaxSlider, "MagnitudeMaxSlider");
|
||||||
|
getWidget(mDurationSlider, "DurationSlider");
|
||||||
|
getWidget(mAreaSlider, "AreaSlider");
|
||||||
|
getWidget(mEffectImage, "EffectImage");
|
||||||
|
getWidget(mEffectName, "EffectName");
|
||||||
|
getWidget(mAreaText, "AreaText");
|
||||||
|
|
||||||
|
mRangeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &EditEffectDialog::onRangeButtonClicked);
|
||||||
|
mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &EditEffectDialog::onOkButtonClicked);
|
||||||
|
mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &EditEffectDialog::onCancelButtonClicked);
|
||||||
|
mDeleteButton->eventMouseButtonClick += MyGUI::newDelegate(this, &EditEffectDialog::onDeleteButtonClicked);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditEffectDialog::open()
|
||||||
|
{
|
||||||
|
WindowModal::open();
|
||||||
|
center();
|
||||||
|
|
||||||
|
mEffect.range = ESM::RT_Self;
|
||||||
|
|
||||||
|
onRangeButtonClicked(mRangeButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditEffectDialog::setEffect (const ESM::MagicEffect *effect)
|
||||||
|
{
|
||||||
|
std::string icon = effect->icon;
|
||||||
|
icon[icon.size()-3] = 'd';
|
||||||
|
icon[icon.size()-2] = 'd';
|
||||||
|
icon[icon.size()-1] = 's';
|
||||||
|
icon = "icons\\" + icon;
|
||||||
|
|
||||||
|
mEffectImage->setImageTexture (icon);
|
||||||
|
|
||||||
|
mEffectName->setCaptionWithReplacing("#{"+Widgets::MWSpellEffect::effectIDToString (effect->index)+"}");
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditEffectDialog::onRangeButtonClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
mEffect.range = (mEffect.range+1)%3;
|
||||||
|
|
||||||
|
if (mEffect.range == ESM::RT_Self)
|
||||||
|
mRangeButton->setCaptionWithReplacing ("#{sRangeSelf}");
|
||||||
|
else if (mEffect.range == ESM::RT_Target)
|
||||||
|
mRangeButton->setCaptionWithReplacing ("#{sRangeTarget}");
|
||||||
|
else if (mEffect.range == ESM::RT_Touch)
|
||||||
|
mRangeButton->setCaptionWithReplacing ("#{sRangeTouch}");
|
||||||
|
|
||||||
|
mAreaSlider->setVisible (mEffect.range != ESM::RT_Self);
|
||||||
|
mAreaText->setVisible (mEffect.range != ESM::RT_Self);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditEffectDialog::onDeleteButtonClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditEffectDialog::onOkButtonClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditEffectDialog::onCancelButtonClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SpellCreationDialog::SpellCreationDialog(MWBase::WindowManager &parWindowManager)
|
||||||
|
: WindowBase("openmw_spellcreation_dialog.layout", parWindowManager)
|
||||||
|
, mAddEffectDialog(parWindowManager)
|
||||||
|
, mSelectAttributeDialog(NULL)
|
||||||
|
, mSelectSkillDialog(NULL)
|
||||||
|
{
|
||||||
|
getWidget(mNameEdit, "NameEdit");
|
||||||
|
getWidget(mMagickaCost, "MagickaCost");
|
||||||
|
getWidget(mSuccessChance, "SuccessChance");
|
||||||
|
getWidget(mAvailableEffectsList, "AvailableEffects");
|
||||||
|
getWidget(mUsedEffectsView, "UsedEffects");
|
||||||
|
getWidget(mPriceLabel, "PriceLabel");
|
||||||
|
getWidget(mBuyButton, "BuyButton");
|
||||||
|
getWidget(mCancelButton, "CancelButton");
|
||||||
|
|
||||||
|
mAddEffectDialog.setVisible(false);
|
||||||
|
|
||||||
|
mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellCreationDialog::onCancelButtonClicked);
|
||||||
|
mBuyButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellCreationDialog::onBuyButtonClicked);
|
||||||
|
|
||||||
|
mAvailableEffectsList->eventWidgetSelected += MyGUI::newDelegate(this, &SpellCreationDialog::onAvailableEffectClicked);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SpellCreationDialog::open()
|
||||||
|
{
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellCreationDialog::onReferenceUnavailable ()
|
||||||
|
{
|
||||||
|
mWindowManager.removeGuiMode (GM_Dialogue);
|
||||||
|
mWindowManager.removeGuiMode (GM_SpellCreation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellCreationDialog::startSpellMaking (MWWorld::Ptr actor)
|
||||||
|
{
|
||||||
|
mPtr = actor;
|
||||||
|
|
||||||
|
// get the list of magic effects that are known to the player
|
||||||
|
|
||||||
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
|
MWMechanics::CreatureStats& stats = MWWorld::Class::get(player).getCreatureStats(player);
|
||||||
|
MWMechanics::Spells& spells = stats.getSpells();
|
||||||
|
|
||||||
|
std::vector<short> knownEffects;
|
||||||
|
|
||||||
|
for (MWMechanics::Spells::TIterator it = spells.begin(); it != spells.end(); ++it)
|
||||||
|
{
|
||||||
|
const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().spells.find(*it);
|
||||||
|
|
||||||
|
// only normal spells count
|
||||||
|
if (spell->data.type != ESM::Spell::ST_Spell)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const std::vector<ESM::ENAMstruct>& list = spell->effects.list;
|
||||||
|
for (std::vector<ESM::ENAMstruct>::const_iterator it2 = list.begin(); it2 != list.end(); ++it2)
|
||||||
|
{
|
||||||
|
if (std::find(knownEffects.begin(), knownEffects.end(), it2->effectID) == knownEffects.end())
|
||||||
|
knownEffects.push_back(it2->effectID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::sort(knownEffects.begin(), knownEffects.end(), sortMagicEffects);
|
||||||
|
|
||||||
|
mAvailableEffectsList->clear ();
|
||||||
|
|
||||||
|
for (std::vector<short>::const_iterator it = knownEffects.begin(); it != knownEffects.end(); ++it)
|
||||||
|
{
|
||||||
|
mAvailableEffectsList->addItem(MWBase::Environment::get().getWorld ()->getStore ().gameSettings.find(
|
||||||
|
MWGui::Widgets::MWSpellEffect::effectIDToString (*it))->getString());
|
||||||
|
}
|
||||||
|
mAvailableEffectsList->adjustSize ();
|
||||||
|
|
||||||
|
for (std::vector<short>::const_iterator it = knownEffects.begin(); it != knownEffects.end(); ++it)
|
||||||
|
{
|
||||||
|
std::string name = MWBase::Environment::get().getWorld ()->getStore ().gameSettings.find(
|
||||||
|
MWGui::Widgets::MWSpellEffect::effectIDToString (*it))->getString();
|
||||||
|
MyGUI::Widget* w = mAvailableEffectsList->getItemWidget(name);
|
||||||
|
w->setUserData(*it);
|
||||||
|
|
||||||
|
ToolTips::createMagicEffectToolTip (w, *it);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellCreationDialog::onCancelButtonClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
mWindowManager.removeGuiMode (MWGui::GM_SpellCreation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellCreationDialog::onBuyButtonClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellCreationDialog::onAvailableEffectClicked (MyGUI::Widget* sender)
|
||||||
|
{
|
||||||
|
|
||||||
|
short effectId = *sender->getUserData<short>();
|
||||||
|
const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld()->getStore().magicEffects.find(effectId);
|
||||||
|
|
||||||
|
|
||||||
|
mAddEffectDialog.setVisible(true);
|
||||||
|
mAddEffectDialog.setEffect (effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
90
apps/openmw/mwgui/spellcreationdialog.hpp
Normal file
90
apps/openmw/mwgui/spellcreationdialog.hpp
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
#ifndef MWGUI_SPELLCREATION_H
|
||||||
|
#define MWGUI_SPELLCREATION_H
|
||||||
|
|
||||||
|
#include "window_base.hpp"
|
||||||
|
#include "referenceinterface.hpp"
|
||||||
|
#include "list.hpp"
|
||||||
|
|
||||||
|
namespace MWGui
|
||||||
|
{
|
||||||
|
|
||||||
|
class SelectSkillDialog;
|
||||||
|
class SelectAttributeDialog;
|
||||||
|
|
||||||
|
class EditEffectDialog : public WindowModal
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EditEffectDialog(MWBase::WindowManager& parWindowManager);
|
||||||
|
|
||||||
|
virtual void open();
|
||||||
|
|
||||||
|
void setEffect (const ESM::MagicEffect* effect);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
MyGUI::Button* mCancelButton;
|
||||||
|
MyGUI::Button* mOkButton;
|
||||||
|
MyGUI::Button* mDeleteButton;
|
||||||
|
|
||||||
|
MyGUI::Button* mRangeButton;
|
||||||
|
|
||||||
|
MyGUI::TextBox* mMagnitudeMinValue;
|
||||||
|
MyGUI::TextBox* mMagnitudeMaxValue;
|
||||||
|
MyGUI::TextBox* mDurationValue;
|
||||||
|
MyGUI::TextBox* mAreaValue;
|
||||||
|
|
||||||
|
MyGUI::ScrollBar* mMagnitudeMinSlider;
|
||||||
|
MyGUI::ScrollBar* mMagnitudeMaxSlider;
|
||||||
|
MyGUI::ScrollBar* mDurationSlider;
|
||||||
|
MyGUI::ScrollBar* mAreaSlider;
|
||||||
|
|
||||||
|
MyGUI::TextBox* mAreaText;
|
||||||
|
|
||||||
|
MyGUI::ImageBox* mEffectImage;
|
||||||
|
MyGUI::TextBox* mEffectName;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void onRangeButtonClicked (MyGUI::Widget* sender);
|
||||||
|
void onDeleteButtonClicked (MyGUI::Widget* sender);
|
||||||
|
void onOkButtonClicked (MyGUI::Widget* sender);
|
||||||
|
void onCancelButtonClicked (MyGUI::Widget* sender);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ESM::ENAMstruct mEffect;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SpellCreationDialog : public WindowBase, public ReferenceInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SpellCreationDialog(MWBase::WindowManager& parWindowManager);
|
||||||
|
|
||||||
|
virtual void open();
|
||||||
|
|
||||||
|
void startSpellMaking(MWWorld::Ptr actor);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void onReferenceUnavailable ();
|
||||||
|
|
||||||
|
void onCancelButtonClicked (MyGUI::Widget* sender);
|
||||||
|
void onBuyButtonClicked (MyGUI::Widget* sender);
|
||||||
|
void onAvailableEffectClicked (MyGUI::Widget* sender);
|
||||||
|
|
||||||
|
|
||||||
|
MyGUI::EditBox* mNameEdit;
|
||||||
|
MyGUI::TextBox* mMagickaCost;
|
||||||
|
MyGUI::TextBox* mSuccessChance;
|
||||||
|
Widgets::MWList* mAvailableEffectsList;
|
||||||
|
MyGUI::ScrollView* mUsedEffectsView;
|
||||||
|
MyGUI::Button* mBuyButton;
|
||||||
|
MyGUI::Button* mCancelButton;
|
||||||
|
MyGUI::TextBox* mPriceLabel;
|
||||||
|
|
||||||
|
EditEffectDialog mAddEffectDialog;
|
||||||
|
|
||||||
|
SelectAttributeDialog* mSelectAttributeDialog;
|
||||||
|
SelectSkillDialog* mSelectSkillDialog;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -475,8 +475,6 @@ void StatsWindow::updateSkillArea()
|
|||||||
text += "\n#BF9959";
|
text += "\n#BF9959";
|
||||||
for (int i=0; i<6; ++i)
|
for (int i=0; i<6; ++i)
|
||||||
{
|
{
|
||||||
const ESM::Skill* skill = MWBase::Environment::get().getWorld()->getStore().skills.search(faction->data.skillID[i]);
|
|
||||||
assert(skill);
|
|
||||||
text += "#{"+ESM::Skill::sSkillNameIds[faction->data.skillID[i]]+"}";
|
text += "#{"+ESM::Skill::sSkillNameIds[faction->data.skillID[i]]+"}";
|
||||||
if (i<5)
|
if (i<5)
|
||||||
text += ", ";
|
text += ", ";
|
||||||
|
@ -368,7 +368,7 @@ IntSize ToolTips::createToolTip(const MWGui::ToolTipInfo& info)
|
|||||||
if (text.size() > 0 && text[0] == '\n')
|
if (text.size() > 0 && text[0] == '\n')
|
||||||
text.erase(0, 1);
|
text.erase(0, 1);
|
||||||
|
|
||||||
const ESM::Enchantment* enchant;
|
const ESM::Enchantment* enchant = 0;
|
||||||
const ESMS::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
|
const ESMS::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
|
||||||
if (info.enchant != "")
|
if (info.enchant != "")
|
||||||
{
|
{
|
||||||
@ -440,6 +440,7 @@ IntSize ToolTips::createToolTip(const MWGui::ToolTipInfo& info)
|
|||||||
|
|
||||||
if (info.enchant != "")
|
if (info.enchant != "")
|
||||||
{
|
{
|
||||||
|
assert(enchant);
|
||||||
Widget* enchantArea = mDynamicToolTipBox->createWidget<Widget>("",
|
Widget* enchantArea = mDynamicToolTipBox->createWidget<Widget>("",
|
||||||
IntCoord(0, totalSize.height, 300, 300-totalSize.height),
|
IntCoord(0, totalSize.height, 300, 300-totalSize.height),
|
||||||
Align::Stretch, "ToolTipEnchantArea");
|
Align::Stretch, "ToolTipEnchantArea");
|
||||||
@ -586,8 +587,6 @@ void ToolTips::createSkillToolTip(MyGUI::Widget* widget, int skillId)
|
|||||||
widget->setUserString("Caption_SkillNoProgressDescription", skill->description);
|
widget->setUserString("Caption_SkillNoProgressDescription", skill->description);
|
||||||
widget->setUserString("Caption_SkillNoProgressAttribute", "#{sGoverningAttribute}: #{" + attr->name + "}");
|
widget->setUserString("Caption_SkillNoProgressAttribute", "#{sGoverningAttribute}: #{" + attr->name + "}");
|
||||||
widget->setUserString("ImageTexture_SkillNoProgressImage", icon);
|
widget->setUserString("ImageTexture_SkillNoProgressImage", icon);
|
||||||
widget->setUserString("ToolTipLayout", "SkillNoProgressToolTip");
|
|
||||||
widget->setUserString("ToolTipLayout", "SkillNoProgressToolTip");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolTips::createAttributeToolTip(MyGUI::Widget* widget, int attributeId)
|
void ToolTips::createAttributeToolTip(MyGUI::Widget* widget, int attributeId)
|
||||||
@ -713,6 +712,38 @@ void ToolTips::createClassToolTip(MyGUI::Widget* widget, const ESM::Class& playe
|
|||||||
widget->setUserString("ToolTipLayout", "ClassToolTip");
|
widget->setUserString("ToolTipLayout", "ClassToolTip");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ToolTips::createMagicEffectToolTip(MyGUI::Widget* widget, short id)
|
||||||
|
{
|
||||||
|
const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld ()->getStore ().magicEffects.find(id);
|
||||||
|
const std::string &name = Widgets::MWSpellEffect::effectIDToString (id);
|
||||||
|
|
||||||
|
std::string icon = effect->icon;
|
||||||
|
|
||||||
|
int slashPos = icon.find("\\");
|
||||||
|
icon.insert(slashPos+1, "b_");
|
||||||
|
|
||||||
|
icon[icon.size()-3] = 'd';
|
||||||
|
icon[icon.size()-2] = 'd';
|
||||||
|
icon[icon.size()-1] = 's';
|
||||||
|
|
||||||
|
icon = "icons\\" + icon;
|
||||||
|
|
||||||
|
std::vector<std::string> schools;
|
||||||
|
schools.push_back ("#{sSchoolAlteration}");
|
||||||
|
schools.push_back ("#{sSchoolConjuration}");
|
||||||
|
schools.push_back ("#{sSchoolDestruction}");
|
||||||
|
schools.push_back ("#{sSchoolIllusion}");
|
||||||
|
schools.push_back ("#{sSchoolMysticism}");
|
||||||
|
schools.push_back ("#{sSchoolRestoration}");
|
||||||
|
|
||||||
|
widget->setUserString("ToolTipType", "Layout");
|
||||||
|
widget->setUserString("ToolTipLayout", "MagicEffectToolTip");
|
||||||
|
widget->setUserString("Caption_MagicEffectName", "#{" + name + "}");
|
||||||
|
widget->setUserString("Caption_MagicEffectDescription", effect->description);
|
||||||
|
widget->setUserString("Caption_MagicEffectSchool", "#{sSchool}: " + schools[effect->data.school]);
|
||||||
|
widget->setUserString("ImageTexture_MagicEffectImage", icon);
|
||||||
|
}
|
||||||
|
|
||||||
void ToolTips::setDelay(float delay)
|
void ToolTips::setDelay(float delay)
|
||||||
{
|
{
|
||||||
mDelay = delay;
|
mDelay = delay;
|
||||||
|
@ -71,6 +71,7 @@ namespace MWGui
|
|||||||
static void createBirthsignToolTip(MyGUI::Widget* widget, const std::string& birthsignId);
|
static void createBirthsignToolTip(MyGUI::Widget* widget, const std::string& birthsignId);
|
||||||
static void createRaceToolTip(MyGUI::Widget* widget, const ESM::Race* playerRace);
|
static void createRaceToolTip(MyGUI::Widget* widget, const ESM::Race* playerRace);
|
||||||
static void createClassToolTip(MyGUI::Widget* widget, const ESM::Class& playerClass);
|
static void createClassToolTip(MyGUI::Widget* widget, const ESM::Class& playerClass);
|
||||||
|
static void createMagicEffectToolTip(MyGUI::Widget* widget, short id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MyGUI::Widget* mDynamicToolTipBox;
|
MyGUI::Widget* mDynamicToolTipBox;
|
||||||
|
@ -249,11 +249,13 @@ namespace MWGui
|
|||||||
void setWindowManager(MWBase::WindowManager* parWindowManager) { mWindowManager = parWindowManager; }
|
void setWindowManager(MWBase::WindowManager* parWindowManager) { mWindowManager = parWindowManager; }
|
||||||
void setSpellEffect(const SpellEffectParams& params);
|
void setSpellEffect(const SpellEffectParams& params);
|
||||||
|
|
||||||
std::string effectIDToString(const short effectID);
|
static std::string effectIDToString(const short effectID);
|
||||||
bool effectHasMagnitude (const std::string& effect);
|
|
||||||
bool effectHasDuration (const std::string& effect);
|
/// \todo Remove all of these! The information can be obtained via the ESM::MagicEffect's flags!
|
||||||
bool effectInvolvesAttribute (const std::string& effect);
|
static bool effectHasMagnitude (const std::string& effect);
|
||||||
bool effectInvolvesSkill (const std::string& effect);
|
static bool effectHasDuration (const std::string& effect);
|
||||||
|
static bool effectInvolvesAttribute (const std::string& effect);
|
||||||
|
static bool effectInvolvesSkill (const std::string& effect);
|
||||||
|
|
||||||
int getRequestedWidth() const { return mRequestedWidth; }
|
int getRequestedWidth() const { return mRequestedWidth; }
|
||||||
|
|
||||||
|
@ -47,6 +47,8 @@
|
|||||||
#include "loadingscreen.hpp"
|
#include "loadingscreen.hpp"
|
||||||
#include "levelupdialog.hpp"
|
#include "levelupdialog.hpp"
|
||||||
#include "waitdialog.hpp"
|
#include "waitdialog.hpp"
|
||||||
|
#include "spellcreationdialog.hpp"
|
||||||
|
#include "enchantingdialog.hpp"
|
||||||
|
|
||||||
using namespace MWGui;
|
using namespace MWGui;
|
||||||
|
|
||||||
@ -77,6 +79,8 @@ WindowManager::WindowManager(
|
|||||||
, mCharGen(NULL)
|
, mCharGen(NULL)
|
||||||
, mLevelupDialog(NULL)
|
, mLevelupDialog(NULL)
|
||||||
, mWaitDialog(NULL)
|
, mWaitDialog(NULL)
|
||||||
|
, mSpellCreationDialog(NULL)
|
||||||
|
, mEnchantingDialog(NULL)
|
||||||
, mPlayerClass()
|
, mPlayerClass()
|
||||||
, mPlayerName()
|
, mPlayerName()
|
||||||
, mPlayerRaceId()
|
, mPlayerRaceId()
|
||||||
@ -158,6 +162,8 @@ WindowManager::WindowManager(
|
|||||||
mQuickKeysMenu = new QuickKeysMenu(*this);
|
mQuickKeysMenu = new QuickKeysMenu(*this);
|
||||||
mLevelupDialog = new LevelupDialog(*this);
|
mLevelupDialog = new LevelupDialog(*this);
|
||||||
mWaitDialog = new WaitDialog(*this);
|
mWaitDialog = new WaitDialog(*this);
|
||||||
|
mSpellCreationDialog = new SpellCreationDialog(*this);
|
||||||
|
mEnchantingDialog = new EnchantingDialog(*this);
|
||||||
|
|
||||||
mLoadingScreen = new LoadingScreen(mOgre->getScene (), mOgre->getWindow (), *this);
|
mLoadingScreen = new LoadingScreen(mOgre->getScene (), mOgre->getWindow (), *this);
|
||||||
mLoadingScreen->onResChange (w,h);
|
mLoadingScreen->onResChange (w,h);
|
||||||
@ -214,6 +220,8 @@ WindowManager::~WindowManager()
|
|||||||
delete mLoadingScreen;
|
delete mLoadingScreen;
|
||||||
delete mLevelupDialog;
|
delete mLevelupDialog;
|
||||||
delete mWaitDialog;
|
delete mWaitDialog;
|
||||||
|
delete mSpellCreationDialog;
|
||||||
|
delete mEnchantingDialog;
|
||||||
|
|
||||||
cleanupGarbage();
|
cleanupGarbage();
|
||||||
|
|
||||||
@ -264,6 +272,8 @@ void WindowManager::updateVisible()
|
|||||||
mQuickKeysMenu->setVisible(false);
|
mQuickKeysMenu->setVisible(false);
|
||||||
mLevelupDialog->setVisible(false);
|
mLevelupDialog->setVisible(false);
|
||||||
mWaitDialog->setVisible(false);
|
mWaitDialog->setVisible(false);
|
||||||
|
mSpellCreationDialog->setVisible(false);
|
||||||
|
mEnchantingDialog->setVisible(false);
|
||||||
|
|
||||||
mHud->setVisible(true);
|
mHud->setVisible(true);
|
||||||
|
|
||||||
@ -366,6 +376,11 @@ void WindowManager::updateVisible()
|
|||||||
break;
|
break;
|
||||||
case GM_Travel:
|
case GM_Travel:
|
||||||
mTravelWindow->setVisible(true);
|
mTravelWindow->setVisible(true);
|
||||||
|
case GM_SpellCreation:
|
||||||
|
mSpellCreationDialog->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Enchanting:
|
||||||
|
mEnchantingDialog->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_InterMessageBox:
|
case GM_InterMessageBox:
|
||||||
break;
|
break;
|
||||||
@ -569,6 +584,7 @@ void WindowManager::onFrame (float frameDuration)
|
|||||||
mDialogueWindow->checkReferenceAvailable();
|
mDialogueWindow->checkReferenceAvailable();
|
||||||
mTradeWindow->checkReferenceAvailable();
|
mTradeWindow->checkReferenceAvailable();
|
||||||
mSpellBuyingWindow->checkReferenceAvailable();
|
mSpellBuyingWindow->checkReferenceAvailable();
|
||||||
|
mSpellCreationDialog->checkReferenceAvailable();
|
||||||
mContainerWindow->checkReferenceAvailable();
|
mContainerWindow->checkReferenceAvailable();
|
||||||
mConsole->checkReferenceAvailable();
|
mConsole->checkReferenceAvailable();
|
||||||
}
|
}
|
||||||
@ -969,3 +985,13 @@ void WindowManager::addVisitedLocation(const std::string& name, int x, int y)
|
|||||||
{
|
{
|
||||||
mMap->addVisitedLocation (name, x, y);
|
mMap->addVisitedLocation (name, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WindowManager::startSpellMaking(MWWorld::Ptr actor)
|
||||||
|
{
|
||||||
|
mSpellCreationDialog->startSpellMaking (actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WindowManager::startEnchanting (MWWorld::Ptr actor)
|
||||||
|
{
|
||||||
|
mEnchantingDialog->startEnchanting (actor);
|
||||||
|
}
|
||||||
|
@ -64,6 +64,8 @@ namespace MWGui
|
|||||||
class LoadingScreen;
|
class LoadingScreen;
|
||||||
class LevelupDialog;
|
class LevelupDialog;
|
||||||
class WaitDialog;
|
class WaitDialog;
|
||||||
|
class SpellCreationDialog;
|
||||||
|
class EnchantingDialog;
|
||||||
|
|
||||||
class WindowManager : public MWBase::WindowManager
|
class WindowManager : public MWBase::WindowManager
|
||||||
{
|
{
|
||||||
@ -211,6 +213,9 @@ namespace MWGui
|
|||||||
|
|
||||||
virtual bool getPlayerSleeping();
|
virtual bool getPlayerSleeping();
|
||||||
|
|
||||||
|
virtual void startSpellMaking(MWWorld::Ptr actor);
|
||||||
|
virtual void startEnchanting(MWWorld::Ptr actor);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OEngine::GUI::MyGUIManager *mGuiManager;
|
OEngine::GUI::MyGUIManager *mGuiManager;
|
||||||
HUD *mHud;
|
HUD *mHud;
|
||||||
@ -239,6 +244,8 @@ namespace MWGui
|
|||||||
LoadingScreen* mLoadingScreen;
|
LoadingScreen* mLoadingScreen;
|
||||||
LevelupDialog* mLevelupDialog;
|
LevelupDialog* mLevelupDialog;
|
||||||
WaitDialog* mWaitDialog;
|
WaitDialog* mWaitDialog;
|
||||||
|
SpellCreationDialog* mSpellCreationDialog;
|
||||||
|
EnchantingDialog* mEnchantingDialog;
|
||||||
|
|
||||||
CharacterCreation* mCharGen;
|
CharacterCreation* mCharGen;
|
||||||
|
|
||||||
|
@ -227,3 +227,13 @@ int MWMechanics::NpcStats::getLevelupAttributeMultiplier(int attribute) const
|
|||||||
else
|
else
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MWMechanics::NpcStats::flagAsUsed (const std::string& id)
|
||||||
|
{
|
||||||
|
mUsedIds.insert (id);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWMechanics::NpcStats::hasBeenUsed (const std::string& id) const
|
||||||
|
{
|
||||||
|
return mUsedIds.find (id)!=mUsedIds.end();
|
||||||
|
}
|
||||||
|
@ -50,6 +50,8 @@ namespace MWMechanics
|
|||||||
|
|
||||||
std::vector<int> mSkillIncreases; // number of skill increases for each attribute
|
std::vector<int> mSkillIncreases; // number of skill increases for each attribute
|
||||||
|
|
||||||
|
std::set<std::string> mUsedIds;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
NpcStats();
|
NpcStats();
|
||||||
@ -86,6 +88,10 @@ namespace MWMechanics
|
|||||||
int getLevelupAttributeMultiplier(int attribute) const;
|
int getLevelupAttributeMultiplier(int attribute) const;
|
||||||
|
|
||||||
void levelUp();
|
void levelUp();
|
||||||
|
|
||||||
|
void flagAsUsed (const std::string& id);
|
||||||
|
|
||||||
|
bool hasBeenUsed (const std::string& id) const;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ namespace MWRender
|
|||||||
, mPosition(position)
|
, mPosition(position)
|
||||||
, mLookAt(lookAt)
|
, mLookAt(lookAt)
|
||||||
, mCharacter(character)
|
, mCharacter(character)
|
||||||
|
, mAnimation(NULL)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -53,10 +54,13 @@ namespace MWRender
|
|||||||
mCamera->setNearClipDistance (0.01);
|
mCamera->setNearClipDistance (0.01);
|
||||||
mCamera->setFarClipDistance (1000);
|
mCamera->setFarClipDistance (1000);
|
||||||
|
|
||||||
mTexture = Ogre::TextureManager::getSingleton().createManual(mName,
|
mTexture = Ogre::TextureManager::getSingleton().getByName (mName);
|
||||||
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, mSizeX, mSizeY, 0, Ogre::PF_A8R8G8B8, Ogre::TU_RENDERTARGET);
|
if (mTexture.isNull ())
|
||||||
|
mTexture = Ogre::TextureManager::getSingleton().createManual(mName,
|
||||||
|
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, mSizeX, mSizeY, 0, Ogre::PF_A8R8G8B8, Ogre::TU_RENDERTARGET);
|
||||||
|
|
||||||
mRenderTarget = mTexture->getBuffer()->getRenderTarget();
|
mRenderTarget = mTexture->getBuffer()->getRenderTarget();
|
||||||
|
mRenderTarget->removeAllViewports ();
|
||||||
mViewport = mRenderTarget->addViewport(mCamera);
|
mViewport = mRenderTarget->addViewport(mCamera);
|
||||||
mViewport->setOverlaysEnabled(false);
|
mViewport->setOverlaysEnabled(false);
|
||||||
mViewport->setBackgroundColour(Ogre::ColourValue(0, 0, 0, 0));
|
mViewport->setBackgroundColour(Ogre::ColourValue(0, 0, 0, 0));
|
||||||
@ -71,7 +75,7 @@ namespace MWRender
|
|||||||
|
|
||||||
CharacterPreview::~CharacterPreview ()
|
CharacterPreview::~CharacterPreview ()
|
||||||
{
|
{
|
||||||
Ogre::TextureManager::getSingleton().remove(mName);
|
//Ogre::TextureManager::getSingleton().remove(mName);
|
||||||
mSceneMgr->destroyCamera (mName);
|
mSceneMgr->destroyCamera (mName);
|
||||||
delete mAnimation;
|
delete mAnimation;
|
||||||
}
|
}
|
||||||
|
@ -35,22 +35,21 @@ namespace MWWorld
|
|||||||
MWBase::Environment::get().getWindowManager()->getBookWindow()->open(getTarget());
|
MWBase::Environment::get().getWindowManager()->getBookWindow()->open(getTarget());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayer().getPlayer();
|
||||||
|
MWMechanics::NpcStats& npcStats = MWWorld::Class::get(player).getNpcStats (player);
|
||||||
|
|
||||||
// Skill gain from books
|
// Skill gain from books
|
||||||
if (ref->base->data.skillID >= 0 && ref->base->data.skillID < ESM::Skill::Length)
|
if (ref->base->data.skillID >= 0 && ref->base->data.skillID < ESM::Skill::Length
|
||||||
|
&& !npcStats.hasBeenUsed (ref->base->id))
|
||||||
{
|
{
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayer().getPlayer();
|
|
||||||
MWMechanics::NpcStats& npcStats = MWWorld::Class::get(player).getNpcStats (player);
|
|
||||||
MWWorld::LiveCellRef<ESM::NPC> *playerRef = player.get<ESM::NPC>();
|
MWWorld::LiveCellRef<ESM::NPC> *playerRef = player.get<ESM::NPC>();
|
||||||
const ESM::Class *class_ = MWBase::Environment::get().getWorld()->getStore().classes.find (
|
const ESM::Class *class_ = MWBase::Environment::get().getWorld()->getStore().classes.find (
|
||||||
playerRef->base->cls);
|
playerRef->base->cls);
|
||||||
|
|
||||||
npcStats.increaseSkill (ref->base->data.skillID, *class_, true);
|
npcStats.increaseSkill (ref->base->data.skillID, *class_, true);
|
||||||
|
|
||||||
/// \todo Remove skill from the book. Right now you can read as many times as you want
|
npcStats.flagAsUsed (ref->base->id);
|
||||||
/// and the skill will still increase.
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,8 @@ const float WeatherGlobals::mThunderSoundDelay = 0.25;
|
|||||||
WeatherManager::WeatherManager(MWRender::RenderingManager* rendering) :
|
WeatherManager::WeatherManager(MWRender::RenderingManager* rendering) :
|
||||||
mHour(14), mCurrentWeather("clear"), mFirstUpdate(true), mWeatherUpdateTime(0),
|
mHour(14), mCurrentWeather("clear"), mFirstUpdate(true), mWeatherUpdateTime(0),
|
||||||
mThunderFlash(0), mThunderChance(0), mThunderChanceNeeded(50), mThunderSoundDelay(0),
|
mThunderFlash(0), mThunderChance(0), mThunderChanceNeeded(50), mThunderSoundDelay(0),
|
||||||
mRemainingTransitionTime(0), mMonth(0), mDay(0)
|
mRemainingTransitionTime(0), mMonth(0), mDay(0),
|
||||||
|
mTimePassed(0)
|
||||||
{
|
{
|
||||||
mRendering = rendering;
|
mRendering = rendering;
|
||||||
|
|
||||||
@ -487,7 +488,10 @@ WeatherResult WeatherManager::transition(float factor)
|
|||||||
|
|
||||||
void WeatherManager::update(float duration)
|
void WeatherManager::update(float duration)
|
||||||
{
|
{
|
||||||
mWeatherUpdateTime -= duration * MWBase::Environment::get().getWorld()->getTimeScaleFactor();
|
float timePassed = mTimePassed;
|
||||||
|
mTimePassed = 0;
|
||||||
|
|
||||||
|
mWeatherUpdateTime -= timePassed;
|
||||||
|
|
||||||
bool exterior = (MWBase::Environment::get().getWorld()->isCellExterior() || MWBase::Environment::get().getWorld()->isCellQuasiExterior());
|
bool exterior = (MWBase::Environment::get().getWorld()->isCellExterior() || MWBase::Environment::get().getWorld()->isCellQuasiExterior());
|
||||||
|
|
||||||
@ -558,7 +562,7 @@ void WeatherManager::update(float duration)
|
|||||||
|
|
||||||
if (mNextWeather != "")
|
if (mNextWeather != "")
|
||||||
{
|
{
|
||||||
mRemainingTransitionTime -= duration * MWBase::Environment::get().getWorld()->getTimeScaleFactor();
|
mRemainingTransitionTime -= timePassed;
|
||||||
if (mRemainingTransitionTime < 0)
|
if (mRemainingTransitionTime < 0)
|
||||||
{
|
{
|
||||||
mCurrentWeather = mNextWeather;
|
mCurrentWeather = mNextWeather;
|
||||||
|
@ -231,6 +231,11 @@ namespace MWWorld
|
|||||||
|
|
||||||
void setDate(const int day, const int month);
|
void setDate(const int day, const int month);
|
||||||
|
|
||||||
|
void advanceTime(double hours)
|
||||||
|
{
|
||||||
|
mTimePassed += hours*3600;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int getWeatherID() const;
|
unsigned int getWeatherID() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -261,6 +266,8 @@ namespace MWWorld
|
|||||||
float mThunderChanceNeeded;
|
float mThunderChanceNeeded;
|
||||||
float mThunderSoundDelay;
|
float mThunderSoundDelay;
|
||||||
|
|
||||||
|
double mTimePassed; // time passed since last update
|
||||||
|
|
||||||
WeatherResult transition(const float factor);
|
WeatherResult transition(const float factor);
|
||||||
WeatherResult getResult(const Ogre::String& weather);
|
WeatherResult getResult(const Ogre::String& weather);
|
||||||
|
|
||||||
|
@ -366,6 +366,8 @@ namespace MWWorld
|
|||||||
|
|
||||||
void World::advanceTime (double hours)
|
void World::advanceTime (double hours)
|
||||||
{
|
{
|
||||||
|
mWeatherManager->advanceTime (hours);
|
||||||
|
|
||||||
hours += mGlobalVariables->getFloat ("gamehour");
|
hours += mGlobalVariables->getFloat ("gamehour");
|
||||||
|
|
||||||
setHour (hours);
|
setHour (hours);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
namespace ESM
|
namespace ESM
|
||||||
{
|
{
|
||||||
|
|
||||||
void Book::load(ESMReader &esm)
|
void Book::load(ESMReader &esm, const std::string& recordId)
|
||||||
{
|
{
|
||||||
model = esm.getHNString("MODL");
|
model = esm.getHNString("MODL");
|
||||||
name = esm.getHNOString("FNAM");
|
name = esm.getHNOString("FNAM");
|
||||||
@ -12,6 +12,7 @@ void Book::load(ESMReader &esm)
|
|||||||
icon = esm.getHNOString("ITEX");
|
icon = esm.getHNOString("ITEX");
|
||||||
text = esm.getHNOString("TEXT");
|
text = esm.getHNOString("TEXT");
|
||||||
enchant = esm.getHNOString("ENAM");
|
enchant = esm.getHNOString("ENAM");
|
||||||
|
id = recordId;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,9 @@ struct Book
|
|||||||
|
|
||||||
BKDTstruct data;
|
BKDTstruct data;
|
||||||
std::string name, model, icon, script, enchant, text;
|
std::string name, model, icon, script, enchant, text;
|
||||||
|
std::string id;
|
||||||
|
|
||||||
void load(ESMReader &esm);
|
void load(ESMReader &esm, const std::string& recordId);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,7 +34,7 @@ namespace ESMS
|
|||||||
RecListT<Apparatus> appas;
|
RecListT<Apparatus> appas;
|
||||||
RecListT<Armor> armors;
|
RecListT<Armor> armors;
|
||||||
RecListT<BodyPart> bodyParts;
|
RecListT<BodyPart> bodyParts;
|
||||||
RecListT<Book> books;
|
RecListWithIDT<Book> books;
|
||||||
RecListT<BirthSign> birthSigns;
|
RecListT<BirthSign> birthSigns;
|
||||||
RecListT<Class> classes;
|
RecListT<Class> classes;
|
||||||
RecListT<Clothing> clothes;
|
RecListT<Clothing> clothes;
|
||||||
|
@ -193,7 +193,8 @@ void ManualBulletShapeLoader::handleNode(Nif::Node *node, int flags,
|
|||||||
// affecting the entire subtree of this node
|
// affecting the entire subtree of this node
|
||||||
Nif::NiStringExtraData *sd = (Nif::NiStringExtraData*)e;
|
Nif::NiStringExtraData *sd = (Nif::NiStringExtraData*)e;
|
||||||
|
|
||||||
if (sd->string == "NCO")
|
// not sure what the difference between NCO and NCC is, or if there even is one
|
||||||
|
if (sd->string == "NCO" || sd->string == "NCC")
|
||||||
{
|
{
|
||||||
// No collision. Use an internal flag setting to mark this.
|
// No collision. Use an internal flag setting to mark this.
|
||||||
flags |= 0x800;
|
flags |= 0x800;
|
||||||
|
@ -75,6 +75,9 @@ set(MYGUI_FILES
|
|||||||
openmw_levelup_dialog.layout
|
openmw_levelup_dialog.layout
|
||||||
openmw_wait_dialog.layout
|
openmw_wait_dialog.layout
|
||||||
openmw_wait_dialog_progressbar.layout
|
openmw_wait_dialog_progressbar.layout
|
||||||
|
openmw_spellcreation_dialog.layout
|
||||||
|
openmw_edit_effect.layout
|
||||||
|
openmw_enchanting_dialog.layout
|
||||||
smallbars.png
|
smallbars.png
|
||||||
VeraMono.ttf
|
VeraMono.ttf
|
||||||
markers.png
|
markers.png
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<MyGUI type="List">
|
<MyGUI type="List">
|
||||||
<List file="core.skin" />
|
<List file="core.skin" />
|
||||||
<List file="openmw_resources.xml" />
|
<List file="openmw_resources.xml" />
|
||||||
<List file="openmw.font.xml" />
|
<List file="openmw_font.xml"/>
|
||||||
<List file="openmw_text.skin.xml" />
|
<List file="openmw_text.skin.xml" />
|
||||||
<List file="openmw_windows.skin.xml" />
|
<List file="openmw_windows.skin.xml" />
|
||||||
<List file="openmw_button.skin.xml" />
|
<List file="openmw_button.skin.xml" />
|
||||||
|
88
files/mygui/openmw_edit_effect.layout
Normal file
88
files/mygui/openmw_edit_effect.layout
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Layout">
|
||||||
|
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 362 310" name="_Main">
|
||||||
|
|
||||||
|
<Widget type="ImageBox" skin="ImageBox" position="8 12 16 16" name="EffectImage">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="36 8 400 24" name="EffectName">
|
||||||
|
<Property key="TextAlign" value="Left HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Range -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="8 36 400 24">
|
||||||
|
<Property key="Caption" value="#{sRange}"/>
|
||||||
|
<Property key="TextAlign" value="Left HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" position="130 36 0 24" name="RangeButton">
|
||||||
|
<Property key="Caption" value="#{sRangeTouch}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Magnitude -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="8 80 400 24">
|
||||||
|
<Property key="Caption" value="#{sMagnitude}"/>
|
||||||
|
<Property key="TextAlign" value="Left HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="SandText" position="130 80 210 20" name="MagnitudeMinValue">
|
||||||
|
<Property key="TextAlign" value="Center"/>
|
||||||
|
<Property key="Caption" value="0"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="ScrollBar" skin="MW_HSlider" position="130 100 210 13" name="MagnitudeMinSlider">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="SandText" position="130 112 210 20" name="MagnitudeMaxValue">
|
||||||
|
<Property key="TextAlign" value="Center"/>
|
||||||
|
<Property key="Caption" value="0"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="ScrollBar" skin="MW_HSlider" position="130 132 210 13" name="MagnitudeMaxSlider">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Duration -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="8 173 400 24">
|
||||||
|
<Property key="Caption" value="#{sDuration}"/>
|
||||||
|
<Property key="TextAlign" value="Left Top"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="SandText" position="130 153 210 20" name="DurationValue">
|
||||||
|
<Property key="TextAlign" value="Center"/>
|
||||||
|
<Property key="Caption" value="0"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="ScrollBar" skin="MW_HSlider" position="130 173 210 13" name="DurationSlider">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Area -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="8 217 400 24" name="AreaText">
|
||||||
|
<Property key="Caption" value="#{sArea}"/>
|
||||||
|
<Property key="TextAlign" value="Left Top"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="SandText" position="130 197 210 20" name="AreaValue">
|
||||||
|
<Property key="TextAlign" value="Center"/>
|
||||||
|
<Property key="Caption" value="0"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="ScrollBar" skin="MW_HSlider" position="130 217 210 13" name="AreaSlider">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="HBox" position="8 266 336 24">
|
||||||
|
<Widget type="Widget">
|
||||||
|
<UserString key="HStretch" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="DeleteButton">
|
||||||
|
<Property key="Caption" value="#{sDelete}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton">
|
||||||
|
<Property key="Caption" value="#{sOk}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
|
||||||
|
<Property key="Caption" value="#{sCancel}"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
</Widget>
|
||||||
|
</MyGUI>
|
96
files/mygui/openmw_enchanting_dialog.layout
Normal file
96
files/mygui/openmw_enchanting_dialog.layout
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Layout">
|
||||||
|
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 560 400" name="_Main">
|
||||||
|
|
||||||
|
<Widget type="HBox" position="12 12 250 30">
|
||||||
|
|
||||||
|
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||||
|
<Property key="Caption" value="#{sName}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="EditBox" skin="MW_TextEdit" position="0 0 30 30" name="NameEdit">
|
||||||
|
<UserString key="HStretch" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="Widget">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Item -->
|
||||||
|
<Widget type="AutoSizedTextBox" skin="NormalText" position="12 48 0 24">
|
||||||
|
<Property key="Caption" value="#{sItem}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="280 0 300 24">
|
||||||
|
<Property key="Caption" value="#{sEnchantmentMenu3}:"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="TextBox" skin="SandText" position="280 0 258 24" name="Enchantment">
|
||||||
|
<Property key="Caption" value="1"/>
|
||||||
|
<Property key="TextAlign" value="Right HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="280 24 300 24">
|
||||||
|
<Property key="Caption" value="#{sCastCost}:"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="TextBox" skin="SandText" position="280 24 258 24" name="CastCost">
|
||||||
|
<Property key="Caption" value="39"/>
|
||||||
|
<Property key="TextAlign" value="Right HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="280 48 300 24">
|
||||||
|
<Property key="Caption" value="#{sCharges}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="TextBox" skin="SandText" position="280 48 258 24" name="Charge">
|
||||||
|
<Property key="Caption" value="39"/>
|
||||||
|
<Property key="TextAlign" value="Right HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Available effects -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="12 148 300 24">
|
||||||
|
<Property key="Caption" value="#{sMagicEffects}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="MWList" skin="MW_SimpleList" position="12 176 202 169" name="AvailableEffects">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Used effects -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="226 148 300 24">
|
||||||
|
<Property key="Caption" value="#{sEffects}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="Widget" skin="MW_Box" position="226 176 316 169">
|
||||||
|
<Widget type="ScrollView" skin="MW_ScrollView" position="4 4 308 161" name="UsedEffects">
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="HBox" position="0 340 560 60">
|
||||||
|
<Property key="Padding" value="16"/>
|
||||||
|
|
||||||
|
<Widget type="Widget" position="0 0 0 0">
|
||||||
|
<UserString key="HStretch" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||||
|
<Property key="Caption" value="#{sBarterDialog7}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="AutoSizedTextBox" skin="SandText" name="PriceLabel">
|
||||||
|
<Property key="Caption" value="30"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="BuyButton">
|
||||||
|
<Property key="Caption" value="#{sBuy}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
|
||||||
|
<Property key="Caption" value="#{sCancel}"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
</Widget>
|
||||||
|
</MyGUI>
|
80
files/mygui/openmw_spellcreation_dialog.layout
Normal file
80
files/mygui/openmw_spellcreation_dialog.layout
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Layout">
|
||||||
|
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 560 400" name="_Main">
|
||||||
|
|
||||||
|
<Widget type="HBox" position="12 12 250 30">
|
||||||
|
|
||||||
|
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||||
|
<Property key="Caption" value="#{sName}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="EditBox" skin="MW_TextEdit" position="0 0 30 30" name="NameEdit">
|
||||||
|
<UserString key="HStretch" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="Widget">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="280 0 300 24">
|
||||||
|
<Property key="Caption" value="#{sEnchantmentMenu4}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="TextBox" skin="SandText" position="280 0 258 24" name="MagickaCost">
|
||||||
|
<Property key="Caption" value="1"/>
|
||||||
|
<Property key="TextAlign" value="Right HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="280 24 300 24">
|
||||||
|
<Property key="Caption" value="#{sSpellmakingMenu1}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="TextBox" skin="SandText" position="280 24 258 24" name="SuccessChance">
|
||||||
|
<Property key="Caption" value="39"/>
|
||||||
|
<Property key="TextAlign" value="Right HCenter"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Available effects -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="12 48 300 24">
|
||||||
|
<Property key="Caption" value="#{sMagicEffects}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="MWList" skin="MW_SimpleList" position="12 76 202 269" name="AvailableEffects">
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Used effects -->
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="226 48 300 24">
|
||||||
|
<Property key="Caption" value="#{sEffects}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="Widget" skin="MW_Box" position="226 76 316 269">
|
||||||
|
<Widget type="ScrollView" skin="MW_ScrollView" position="4 4 308 261" name="UsedEffects">
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="HBox" position="0 340 560 60">
|
||||||
|
<Property key="Padding" value="16"/>
|
||||||
|
|
||||||
|
<Widget type="Widget" position="0 0 0 0">
|
||||||
|
<UserString key="HStretch" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||||
|
<Property key="Caption" value="#{sBarterDialog7}"/>
|
||||||
|
</Widget>
|
||||||
|
<Widget type="AutoSizedTextBox" skin="SandText" name="PriceLabel">
|
||||||
|
<Property key="Caption" value="30"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="BuyButton">
|
||||||
|
<Property key="Caption" value="#{sBuy}"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
|
||||||
|
<Property key="Caption" value="#{sCancel}"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
</Widget>
|
||||||
|
</MyGUI>
|
@ -196,6 +196,31 @@
|
|||||||
</Widget>
|
</Widget>
|
||||||
</Widget>
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Magic effect tooltip -->
|
||||||
|
<Widget type="Widget" skin="HUD_Box_NoTransp" position="0 0 300 52" align="Stretch" name="MagicEffectToolTip">
|
||||||
|
<Property key="Visible" value="false"/>
|
||||||
|
|
||||||
|
<Widget type="ImageBox" skin="ImageBox" position="8 8 32 32" align="Left Top" name="MagicEffectImage"/>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="NormalText" position="44 8 252 16" align="Left Top HStretch" name="MagicEffectName">
|
||||||
|
<Property key="TextAlign" value="Left"/>
|
||||||
|
<UserString key="AutoResizeHorizontal" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="TextBox" skin="SandText" position="44 24 252 16" align="Left Top HStretch" name="MagicEffectSchool">
|
||||||
|
<Property key="TextAlign" value="Left"/>
|
||||||
|
<UserString key="AutoResizeHorizontal" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="EditBox" skin="SandText" position="8 44 284 0" align="Left Top Stretch" name="MagicEffectDescription">
|
||||||
|
<Property key="MultiLine" value="true"/>
|
||||||
|
<Property key="WordWrap" value="true"/>
|
||||||
|
<Property key="TextAlign" value="Left Top"/>
|
||||||
|
<UserString key="AutoResizeHorizontal" value="true"/>
|
||||||
|
<UserString key="AutoResizeVertical" value="true"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
</Widget>
|
</Widget>
|
||||||
</MyGUI>
|
</MyGUI>
|
||||||
|
|
||||||
|
@ -303,16 +303,11 @@ namespace Physic
|
|||||||
+ boost::lexical_cast<std::string>(y);
|
+ boost::lexical_cast<std::string>(y);
|
||||||
|
|
||||||
// find the minimum and maximum heights (needed for bullet)
|
// find the minimum and maximum heights (needed for bullet)
|
||||||
float minh;
|
float minh = heights[0];
|
||||||
float maxh;
|
float maxh = heights[0];
|
||||||
for (int i=0; i<sqrtVerts*sqrtVerts; ++i)
|
for (int i=0; i<sqrtVerts*sqrtVerts; ++i)
|
||||||
{
|
{
|
||||||
float h = heights[i];
|
float h = heights[i];
|
||||||
if (i==0)
|
|
||||||
{
|
|
||||||
minh = h;
|
|
||||||
maxh = h;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h>maxh) maxh = h;
|
if (h>maxh) maxh = h;
|
||||||
if (h<minh) minh = h;
|
if (h<minh) minh = h;
|
||||||
|
@ -171,11 +171,11 @@ bool PM_SlideMove( bool gravity )
|
|||||||
Ogre::Vector3 clipVelocity;
|
Ogre::Vector3 clipVelocity;
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
struct traceResults trace;
|
struct traceResults trace;
|
||||||
Ogre::Vector3 end;
|
Ogre::Vector3 end(0,0,0);
|
||||||
float time_left;
|
float time_left;
|
||||||
float into;
|
float into;
|
||||||
Ogre::Vector3 endVelocity;
|
Ogre::Vector3 endVelocity(0,0,0);
|
||||||
Ogre::Vector3 endClipVelocity;
|
Ogre::Vector3 endClipVelocity(0,0,0);
|
||||||
|
|
||||||
numbumps = 4;
|
numbumps = 4;
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@
|
|||||||
|
|
||||||
void newtrace(traceResults* const results, const Ogre::Vector3& start, const Ogre::Vector3& end, const Ogre::Vector3& BBHalfExtents, const float rotation, bool isInterior, OEngine::Physic::PhysicEngine* enginePass) //Traceobj was a Aedra Object
|
void newtrace(traceResults* const results, const Ogre::Vector3& start, const Ogre::Vector3& end, const Ogre::Vector3& BBHalfExtents, const float rotation, bool isInterior, OEngine::Physic::PhysicEngine* enginePass) //Traceobj was a Aedra Object
|
||||||
{
|
{
|
||||||
static float lastyaw = 0.0f;
|
//static float lastyaw = 0.0f;
|
||||||
static float lastpitch = 0.0f;
|
//static float lastpitch = 0.0f;
|
||||||
//if (!traceobj)
|
//if (!traceobj)
|
||||||
// return;
|
// return;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user