mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 23:26:41 +00:00 
			
		
		
		
	Merge remote branch 'modred11/master'
This commit is contained in:
		
						commit
						0d3a7d482e
					
				
					 36 changed files with 2172 additions and 2112 deletions
				
			
		|  | @ -9,7 +9,7 @@ namespace MWClass | |||
|     { | ||||
|         public: | ||||
| 
 | ||||
|              virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; | ||||
|             virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; | ||||
|             ///< Add reference into a cell for rendering
 | ||||
| 
 | ||||
|             virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const; | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ namespace MWClass | |||
|             virtual std::string getScript (const MWWorld::Ptr& ptr) const; | ||||
|             ///< Return name of the script attached to ptr
 | ||||
| 
 | ||||
|            virtual void setForceStance (const MWWorld::Ptr& ptr, Stance stance, bool force) const; | ||||
|             virtual void setForceStance (const MWWorld::Ptr& ptr, Stance stance, bool force) const; | ||||
|             ///< Force or unforce a stance.
 | ||||
| 
 | ||||
|             virtual void setStance (const MWWorld::Ptr& ptr, Stance stance, bool set) const; | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ namespace MWClass | |||
|     { | ||||
|         public: | ||||
| 
 | ||||
|              virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; | ||||
|             virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; | ||||
|             ///< Add reference into a cell for rendering
 | ||||
| 
 | ||||
|             virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const; | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ namespace MWClass | |||
|     { | ||||
|         public: | ||||
| 
 | ||||
|              virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; | ||||
|             virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; | ||||
|             ///< Add reference into a cell for rendering
 | ||||
| 
 | ||||
|             virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const; | ||||
|  |  | |||
|  | @ -591,7 +591,7 @@ namespace MWDialogue | |||
|         mIsInChoice = false; | ||||
|         mCompilerContext.setExtensions (&extensions); | ||||
|         mDialogueMap.clear(); | ||||
|         actorKnownTopics.clear(); | ||||
|         mActorKnownTopics.clear(); | ||||
|         ESMS::RecListCaseT<ESM::Dialogue>::MapType dialogueList = MWBase::Environment::get().getWorld()->getStore().dialogs.list; | ||||
|         for(ESMS::RecListCaseT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) | ||||
|         { | ||||
|  | @ -601,24 +601,24 @@ namespace MWDialogue | |||
| 
 | ||||
|     void DialogueManager::addTopic(std::string topic) | ||||
|     { | ||||
|         knownTopics[toLower(topic)] = true; | ||||
|         mKnownTopics[toLower(topic)] = true; | ||||
|     } | ||||
| 
 | ||||
|     void DialogueManager::parseText(std::string text) | ||||
|     { | ||||
|         std::list<std::string>::iterator it; | ||||
|         for(it = actorKnownTopics.begin();it != actorKnownTopics.end();++it) | ||||
|         for(it = mActorKnownTopics.begin();it != mActorKnownTopics.end();++it) | ||||
|         { | ||||
|             size_t pos = find_str_ci(text,*it,0); | ||||
|             if(pos !=std::string::npos) | ||||
|             { | ||||
|                 if(pos==0) | ||||
|                 { | ||||
|                     knownTopics[*it] = true; | ||||
|                     mKnownTopics[*it] = true; | ||||
|                 } | ||||
|                 else if(text.substr(pos -1,1) == " ") | ||||
|                 { | ||||
|                     knownTopics[*it] = true; | ||||
|                     mKnownTopics[*it] = true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | @ -632,7 +632,7 @@ namespace MWDialogue | |||
| 
 | ||||
|         mActor = actor; | ||||
| 
 | ||||
|         actorKnownTopics.clear(); | ||||
|         mActorKnownTopics.clear(); | ||||
| 
 | ||||
|         //initialise the GUI
 | ||||
|         MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue); | ||||
|  | @ -742,7 +742,7 @@ namespace MWDialogue | |||
|         std::list<std::string> keywordList; | ||||
|         int choice = mChoice; | ||||
|         mChoice = -1; | ||||
|         actorKnownTopics.clear(); | ||||
|         mActorKnownTopics.clear(); | ||||
|         MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow(); | ||||
|         ESMS::RecListCaseT<ESM::Dialogue>::MapType dialogueList = MWBase::Environment::get().getWorld()->getStore().dialogs.list; | ||||
|         for(ESMS::RecListCaseT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) | ||||
|  | @ -755,9 +755,9 @@ namespace MWDialogue | |||
|                 { | ||||
|                     if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) | ||||
|                     { | ||||
|                         actorKnownTopics.push_back(toLower(it->first)); | ||||
|                         mActorKnownTopics.push_back(toLower(it->first)); | ||||
|                         //does the player know the topic?
 | ||||
|                         if(knownTopics.find(toLower(it->first)) != knownTopics.end()) | ||||
|                         if(mKnownTopics.find(toLower(it->first)) != mKnownTopics.end()) | ||||
|                         { | ||||
|                             keywordList.push_back(it->first); | ||||
|                             break; | ||||
|  |  | |||
|  | @ -26,8 +26,8 @@ namespace MWDialogue | |||
|             void updateTopics(); | ||||
| 
 | ||||
|             std::map<std::string,ESM::Dialogue> mDialogueMap; | ||||
|             std::map<std::string,bool> knownTopics;// Those are the topics the player knows.
 | ||||
|             std::list<std::string> actorKnownTopics; | ||||
|             std::map<std::string,bool> mKnownTopics;// Those are the topics the player knows.
 | ||||
|             std::list<std::string> mActorKnownTopics; | ||||
| 
 | ||||
|             MWScript::CompilerContext mCompilerContext; | ||||
|             std::ostream mErrorStream; | ||||
|  |  | |||
|  | @ -15,15 +15,15 @@ BirthDialog::BirthDialog(WindowManager& parWindowManager) | |||
|     // Centre dialog
 | ||||
|     center(); | ||||
| 
 | ||||
|     getWidget(spellArea, "SpellArea"); | ||||
|     getWidget(mSpellArea, "SpellArea"); | ||||
| 
 | ||||
|     getWidget(birthImage, "BirthsignImage"); | ||||
|     getWidget(mBirthImage, "BirthsignImage"); | ||||
| 
 | ||||
|     getWidget(birthList, "BirthsignList"); | ||||
|     birthList->setScrollVisible(true); | ||||
|     birthList->eventListSelectAccept += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); | ||||
|     birthList->eventListMouseItemActivate += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); | ||||
|     birthList->eventListChangePosition += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); | ||||
|     getWidget(mBirthList, "BirthsignList"); | ||||
|     mBirthList->setScrollVisible(true); | ||||
|     mBirthList->eventListSelectAccept += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); | ||||
|     mBirthList->eventListMouseItemActivate += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); | ||||
|     mBirthList->eventListChangePosition += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr backButton; | ||||
|     getWidget(backButton, "BackButton"); | ||||
|  | @ -68,14 +68,14 @@ void BirthDialog::open() | |||
| 
 | ||||
| void BirthDialog::setBirthId(const std::string &birthId) | ||||
| { | ||||
|     currentBirthId = birthId; | ||||
|     birthList->setIndexSelected(MyGUI::ITEM_NONE); | ||||
|     size_t count = birthList->getItemCount(); | ||||
|     mCurrentBirthId = birthId; | ||||
|     mBirthList->setIndexSelected(MyGUI::ITEM_NONE); | ||||
|     size_t count = mBirthList->getItemCount(); | ||||
|     for (size_t i = 0; i < count; ++i) | ||||
|     { | ||||
|         if (boost::iequals(*birthList->getItemDataAt<std::string>(i), birthId)) | ||||
|         if (boost::iequals(*mBirthList->getItemDataAt<std::string>(i), birthId)) | ||||
|         { | ||||
|             birthList->setIndexSelected(i); | ||||
|             mBirthList->setIndexSelected(i); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  | @ -100,11 +100,11 @@ void BirthDialog::onSelectBirth(MyGUI::ListBox* _sender, size_t _index) | |||
|     if (_index == MyGUI::ITEM_NONE) | ||||
|         return; | ||||
| 
 | ||||
|     const std::string *birthId = birthList->getItemDataAt<std::string>(_index); | ||||
|     if (boost::iequals(currentBirthId, *birthId)) | ||||
|     const std::string *birthId = mBirthList->getItemDataAt<std::string>(_index); | ||||
|     if (boost::iequals(mCurrentBirthId, *birthId)) | ||||
|         return; | ||||
| 
 | ||||
|     currentBirthId = *birthId; | ||||
|     mCurrentBirthId = *birthId; | ||||
|     updateSpells(); | ||||
| } | ||||
| 
 | ||||
|  | @ -112,7 +112,7 @@ void BirthDialog::onSelectBirth(MyGUI::ListBox* _sender, size_t _index) | |||
| 
 | ||||
| void BirthDialog::updateBirths() | ||||
| { | ||||
|     birthList->removeAllItems(); | ||||
|     mBirthList->removeAllItems(); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
| 
 | ||||
|  | @ -122,34 +122,34 @@ void BirthDialog::updateBirths() | |||
|     for (; it != end; ++it) | ||||
|     { | ||||
|         const ESM::BirthSign &birth = it->second; | ||||
|         birthList->addItem(birth.name, it->first); | ||||
|         if (boost::iequals(it->first, currentBirthId)) | ||||
|             birthList->setIndexSelected(index); | ||||
|         mBirthList->addItem(birth.name, it->first); | ||||
|         if (boost::iequals(it->first, mCurrentBirthId)) | ||||
|             mBirthList->setIndexSelected(index); | ||||
|         ++index; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void BirthDialog::updateSpells() | ||||
| { | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = spellItems.begin(); it != spellItems.end(); ++it) | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = mSpellItems.begin(); it != mSpellItems.end(); ++it) | ||||
|     { | ||||
|         MyGUI::Gui::getInstance().destroyWidget(*it); | ||||
|     } | ||||
|     spellItems.clear(); | ||||
|     mSpellItems.clear(); | ||||
| 
 | ||||
|     if (currentBirthId.empty()) | ||||
|     if (mCurrentBirthId.empty()) | ||||
|         return; | ||||
| 
 | ||||
|     MWSpellPtr spellWidget; | ||||
|     const int lineHeight = 18; | ||||
|     MyGUI::IntCoord coord(0, 0, spellArea->getWidth(), 18); | ||||
|     MyGUI::IntCoord coord(0, 0, mSpellArea->getWidth(), 18); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
|     const ESM::BirthSign *birth = store.birthSigns.find(currentBirthId); | ||||
|     const ESM::BirthSign *birth = store.birthSigns.find(mCurrentBirthId); | ||||
| 
 | ||||
|     std::string texturePath = std::string("textures\\") + birth->texture; | ||||
|     fixTexturePath(texturePath); | ||||
|     birthImage->setImageTexture(texturePath); | ||||
|     mBirthImage->setImageTexture(texturePath); | ||||
| 
 | ||||
|     std::vector<std::string> abilities, powers, spells; | ||||
| 
 | ||||
|  | @ -183,25 +183,25 @@ void BirthDialog::updateSpells() | |||
|     { | ||||
|         if (!categories[category].spells.empty()) | ||||
|         { | ||||
|             MyGUI::TextBox* label = spellArea->createWidget<MyGUI::TextBox>("SandBrightText", coord, MyGUI::Align::Default, std::string("Label")); | ||||
|             MyGUI::TextBox* label = mSpellArea->createWidget<MyGUI::TextBox>("SandBrightText", coord, MyGUI::Align::Default, std::string("Label")); | ||||
|             label->setCaption(mWindowManager.getGameSettingString(categories[category].label, "")); | ||||
|             spellItems.push_back(label); | ||||
|             mSpellItems.push_back(label); | ||||
|             coord.top += lineHeight; | ||||
| 
 | ||||
|             std::vector<std::string>::const_iterator end = categories[category].spells.end(); | ||||
|             for (std::vector<std::string>::const_iterator it = categories[category].spells.begin(); it != end; ++it) | ||||
|             { | ||||
|                 const std::string &spellId = *it; | ||||
|                 spellWidget = spellArea->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("Spell") + boost::lexical_cast<std::string>(i)); | ||||
|                 spellWidget = mSpellArea->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("Spell") + boost::lexical_cast<std::string>(i)); | ||||
|                 spellWidget->setWindowManager(&mWindowManager); | ||||
|                 spellWidget->setSpellId(spellId); | ||||
| 
 | ||||
|                 spellItems.push_back(spellWidget); | ||||
|                 mSpellItems.push_back(spellWidget); | ||||
|                 coord.top += lineHeight; | ||||
| 
 | ||||
|                 MyGUI::IntCoord spellCoord = coord; | ||||
|                 spellCoord.height = 24; // TODO: This should be fetched from the skin somehow, or perhaps a widget in the layout as a template?
 | ||||
|                 spellWidget->createEffectWidgets(spellItems, spellArea, spellCoord, (category == 0) ? MWEffectList::EF_Constant : 0); | ||||
|                 spellWidget->createEffectWidgets(mSpellItems, mSpellArea, spellCoord, (category == 0) ? MWEffectList::EF_Constant : 0); | ||||
|                 coord.top = spellCoord.top; | ||||
| 
 | ||||
|                 ++i; | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ namespace MWGui | |||
|             GM_Female | ||||
|         }; | ||||
| 
 | ||||
|         const std::string &getBirthId() const { return currentBirthId; } | ||||
|         const std::string &getBirthId() const { return mCurrentBirthId; } | ||||
|         void setBirthId(const std::string &raceId); | ||||
| 
 | ||||
|         void setNextButtonShow(bool shown); | ||||
|  | @ -49,12 +49,12 @@ namespace MWGui | |||
|         void updateBirths(); | ||||
|         void updateSpells(); | ||||
| 
 | ||||
|         MyGUI::ListBox*    birthList; | ||||
|         MyGUI::WidgetPtr  spellArea; | ||||
|         MyGUI::ImageBox* birthImage; | ||||
|         std::vector<MyGUI::WidgetPtr> spellItems; | ||||
|         MyGUI::ListBox* mBirthList; | ||||
|         MyGUI::WidgetPtr  mSpellArea; | ||||
|         MyGUI::ImageBox* mBirthImage; | ||||
|         std::vector<MyGUI::WidgetPtr> mSpellItems; | ||||
| 
 | ||||
|         std::string currentBirthId; | ||||
|         std::string mCurrentBirthId; | ||||
|     }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -25,8 +25,8 @@ GenerateClassResultDialog::GenerateClassResultDialog(WindowManager& parWindowMan | |||
| 
 | ||||
|     setText("ReflectT", mWindowManager.getGameSettingString("sMessageQuestionAnswer1", "")); | ||||
| 
 | ||||
|     getWidget(classImage, "ClassImage"); | ||||
|     getWidget(className, "ClassName"); | ||||
|     getWidget(mClassImage, "ClassImage"); | ||||
|     getWidget(mClassName, "ClassName"); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr backButton; | ||||
|     getWidget(backButton, "BackButton"); | ||||
|  | @ -50,15 +50,15 @@ void GenerateClassResultDialog::open() | |||
| 
 | ||||
| std::string GenerateClassResultDialog::getClassId() const | ||||
| { | ||||
|     return className->getCaption(); | ||||
|     return mClassName->getCaption(); | ||||
| } | ||||
| 
 | ||||
| void GenerateClassResultDialog::setClassId(const std::string &classId) | ||||
| { | ||||
|     currentClassId = classId; | ||||
|     classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds"); | ||||
|     mCurrentClassId = classId; | ||||
|     mClassImage->setImageTexture(std::string("textures\\levelup\\") + mCurrentClassId + ".dds"); | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
|     className->setCaption(store.classes.find(currentClassId)->name); | ||||
|     mClassName->setCaption(store.classes.find(mCurrentClassId)->name); | ||||
| } | ||||
| 
 | ||||
| // widget controls
 | ||||
|  | @ -81,29 +81,29 @@ PickClassDialog::PickClassDialog(WindowManager& parWindowManager) | |||
|     // Centre dialog
 | ||||
|     center(); | ||||
| 
 | ||||
|     getWidget(specializationName, "SpecializationName"); | ||||
|     getWidget(mSpecializationName, "SpecializationName"); | ||||
| 
 | ||||
|     getWidget(favoriteAttribute[0], "FavoriteAttribute0"); | ||||
|     getWidget(favoriteAttribute[1], "FavoriteAttribute1"); | ||||
|     favoriteAttribute[0]->setWindowManager(&mWindowManager); | ||||
|     favoriteAttribute[1]->setWindowManager(&mWindowManager); | ||||
|     getWidget(mFavoriteAttribute[0], "FavoriteAttribute0"); | ||||
|     getWidget(mFavoriteAttribute[1], "FavoriteAttribute1"); | ||||
|     mFavoriteAttribute[0]->setWindowManager(&mWindowManager); | ||||
|     mFavoriteAttribute[1]->setWindowManager(&mWindowManager); | ||||
| 
 | ||||
|     for(int i = 0; i < 5; i++) | ||||
|     { | ||||
|         char theIndex = '0'+i; | ||||
|         getWidget(majorSkill[i], std::string("MajorSkill").append(1, theIndex)); | ||||
|         getWidget(minorSkill[i], std::string("MinorSkill").append(1, theIndex)); | ||||
|         majorSkill[i]->setWindowManager(&mWindowManager); | ||||
|         minorSkill[i]->setWindowManager(&mWindowManager); | ||||
|         getWidget(mMajorSkill[i], std::string("MajorSkill").append(1, theIndex)); | ||||
|         getWidget(mMinorSkill[i], std::string("MinorSkill").append(1, theIndex)); | ||||
|         mMajorSkill[i]->setWindowManager(&mWindowManager); | ||||
|         mMinorSkill[i]->setWindowManager(&mWindowManager); | ||||
|     } | ||||
| 
 | ||||
|     getWidget(classList, "ClassList"); | ||||
|     classList->setScrollVisible(true); | ||||
|     classList->eventListSelectAccept += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); | ||||
|     classList->eventListMouseItemActivate += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); | ||||
|     classList->eventListChangePosition += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); | ||||
|     getWidget(mClassList, "ClassList"); | ||||
|     mClassList->setScrollVisible(true); | ||||
|     mClassList->eventListSelectAccept += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); | ||||
|     mClassList->eventListMouseItemActivate += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); | ||||
|     mClassList->eventListChangePosition += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); | ||||
| 
 | ||||
|     getWidget(classImage, "ClassImage"); | ||||
|     getWidget(mClassImage, "ClassImage"); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr backButton; | ||||
|     getWidget(backButton, "BackButton"); | ||||
|  | @ -147,14 +147,14 @@ void PickClassDialog::open() | |||
| 
 | ||||
| void PickClassDialog::setClassId(const std::string &classId) | ||||
| { | ||||
|     currentClassId = classId; | ||||
|     classList->setIndexSelected(MyGUI::ITEM_NONE); | ||||
|     size_t count = classList->getItemCount(); | ||||
|     mCurrentClassId = classId; | ||||
|     mClassList->setIndexSelected(MyGUI::ITEM_NONE); | ||||
|     size_t count = mClassList->getItemCount(); | ||||
|     for (size_t i = 0; i < count; ++i) | ||||
|     { | ||||
|         if (boost::iequals(*classList->getItemDataAt<std::string>(i), classId)) | ||||
|         if (boost::iequals(*mClassList->getItemDataAt<std::string>(i), classId)) | ||||
|         { | ||||
|             classList->setIndexSelected(i); | ||||
|             mClassList->setIndexSelected(i); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  | @ -179,11 +179,11 @@ void PickClassDialog::onSelectClass(MyGUI::ListBox* _sender, size_t _index) | |||
|     if (_index == MyGUI::ITEM_NONE) | ||||
|         return; | ||||
| 
 | ||||
|     const std::string *classId = classList->getItemDataAt<std::string>(_index); | ||||
|     if (boost::iequals(currentClassId, *classId)) | ||||
|     const std::string *classId = mClassList->getItemDataAt<std::string>(_index); | ||||
|     if (boost::iequals(mCurrentClassId, *classId)) | ||||
|         return; | ||||
| 
 | ||||
|     currentClassId = *classId; | ||||
|     mCurrentClassId = *classId; | ||||
|     updateStats(); | ||||
| } | ||||
| 
 | ||||
|  | @ -191,7 +191,7 @@ void PickClassDialog::onSelectClass(MyGUI::ListBox* _sender, size_t _index) | |||
| 
 | ||||
| void PickClassDialog::updateClasses() | ||||
| { | ||||
|     classList->removeAllItems(); | ||||
|     mClassList->removeAllItems(); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
| 
 | ||||
|  | @ -206,19 +206,19 @@ void PickClassDialog::updateClasses() | |||
|             continue; | ||||
| 
 | ||||
|         const std::string &id = it->first; | ||||
|         classList->addItem(klass.name, id); | ||||
|         if (boost::iequals(id, currentClassId)) | ||||
|             classList->setIndexSelected(index); | ||||
|         mClassList->addItem(klass.name, id); | ||||
|         if (boost::iequals(id, mCurrentClassId)) | ||||
|             mClassList->setIndexSelected(index); | ||||
|         ++index; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void PickClassDialog::updateStats() | ||||
| { | ||||
|     if (currentClassId.empty()) | ||||
|     if (mCurrentClassId.empty()) | ||||
|         return; | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
|     const ESM::Class *klass = store.classes.search(currentClassId); | ||||
|     const ESM::Class *klass = store.classes.search(mCurrentClassId); | ||||
|     if (!klass) | ||||
|         return; | ||||
| 
 | ||||
|  | @ -230,23 +230,23 @@ void PickClassDialog::updateStats() | |||
|         "sSpecializationStealth" | ||||
|     }; | ||||
|     std::string specName = mWindowManager.getGameSettingString(specIds[specialization], specIds[specialization]); | ||||
|     specializationName->setCaption(specName); | ||||
|     ToolTips::createSpecializationToolTip(specializationName, specName, specialization); | ||||
|     mSpecializationName->setCaption(specName); | ||||
|     ToolTips::createSpecializationToolTip(mSpecializationName, specName, specialization); | ||||
| 
 | ||||
|     favoriteAttribute[0]->setAttributeId(klass->data.attribute[0]); | ||||
|     favoriteAttribute[1]->setAttributeId(klass->data.attribute[1]); | ||||
|     ToolTips::createAttributeToolTip(favoriteAttribute[0], favoriteAttribute[0]->getAttributeId()); | ||||
|     ToolTips::createAttributeToolTip(favoriteAttribute[1], favoriteAttribute[1]->getAttributeId()); | ||||
|     mFavoriteAttribute[0]->setAttributeId(klass->data.attribute[0]); | ||||
|     mFavoriteAttribute[1]->setAttributeId(klass->data.attribute[1]); | ||||
|     ToolTips::createAttributeToolTip(mFavoriteAttribute[0], mFavoriteAttribute[0]->getAttributeId()); | ||||
|     ToolTips::createAttributeToolTip(mFavoriteAttribute[1], mFavoriteAttribute[1]->getAttributeId()); | ||||
| 
 | ||||
|     for (int i = 0; i < 5; ++i) | ||||
|     { | ||||
|         minorSkill[i]->setSkillNumber(klass->data.skills[i][0]); | ||||
|         majorSkill[i]->setSkillNumber(klass->data.skills[i][1]); | ||||
|         ToolTips::createSkillToolTip(minorSkill[i], klass->data.skills[i][0]); | ||||
|         ToolTips::createSkillToolTip(majorSkill[i], klass->data.skills[i][1]); | ||||
|         mMinorSkill[i]->setSkillNumber(klass->data.skills[i][0]); | ||||
|         mMajorSkill[i]->setSkillNumber(klass->data.skills[i][1]); | ||||
|         ToolTips::createSkillToolTip(mMinorSkill[i], klass->data.skills[i][0]); | ||||
|         ToolTips::createSkillToolTip(mMajorSkill[i], klass->data.skills[i][1]); | ||||
|     } | ||||
| 
 | ||||
|     classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds"); | ||||
|     mClassImage->setImageTexture(std::string("textures\\levelup\\") + mCurrentClassId + ".dds"); | ||||
| } | ||||
| 
 | ||||
| /* InfoBoxDialog */ | ||||
|  | @ -283,59 +283,59 @@ void InfoBoxDialog::layoutVertically(MyGUI::WidgetPtr widget, int margin) | |||
| 
 | ||||
| InfoBoxDialog::InfoBoxDialog(WindowManager& parWindowManager) | ||||
|     : WindowBase("openmw_infobox.layout", parWindowManager) | ||||
|     , currentButton(-1) | ||||
|     , mCurrentButton(-1) | ||||
| { | ||||
|     getWidget(textBox, "TextBox"); | ||||
|     getWidget(text, "Text"); | ||||
|     text->getSubWidgetText()->setWordWrap(true); | ||||
|     getWidget(buttonBar, "ButtonBar"); | ||||
|     getWidget(mTextBox, "TextBox"); | ||||
|     getWidget(mText, "Text"); | ||||
|     mText->getSubWidgetText()->setWordWrap(true); | ||||
|     getWidget(mButtonBar, "ButtonBar"); | ||||
| 
 | ||||
|     center(); | ||||
| } | ||||
| 
 | ||||
| void InfoBoxDialog::setText(const std::string &str) | ||||
| { | ||||
|     text->setCaption(str); | ||||
|     textBox->setVisible(!str.empty()); | ||||
|     fitToText(text); | ||||
|     mText->setCaption(str); | ||||
|     mTextBox->setVisible(!str.empty()); | ||||
|     fitToText(mText); | ||||
| } | ||||
| 
 | ||||
| std::string InfoBoxDialog::getText() const | ||||
| { | ||||
|     return text->getCaption(); | ||||
|     return mText->getCaption(); | ||||
| } | ||||
| 
 | ||||
| void InfoBoxDialog::setButtons(ButtonList &buttons) | ||||
| { | ||||
|     for (std::vector<MyGUI::ButtonPtr>::iterator it = this->buttons.begin(); it != this->buttons.end(); ++it) | ||||
|     for (std::vector<MyGUI::ButtonPtr>::iterator it = this->mButtons.begin(); it != this->mButtons.end(); ++it) | ||||
|     { | ||||
|         MyGUI::Gui::getInstance().destroyWidget(*it); | ||||
|     } | ||||
|     this->buttons.clear(); | ||||
|     currentButton = -1; | ||||
|     this->mButtons.clear(); | ||||
|     mCurrentButton = -1; | ||||
| 
 | ||||
|     // TODO: The buttons should be generated from a template in the layout file, ie. cloning an existing widget
 | ||||
|     MyGUI::ButtonPtr button; | ||||
|     MyGUI::IntCoord coord = MyGUI::IntCoord(0, 0, buttonBar->getWidth(), 10); | ||||
|     MyGUI::IntCoord coord = MyGUI::IntCoord(0, 0, mButtonBar->getWidth(), 10); | ||||
|     ButtonList::const_iterator end = buttons.end(); | ||||
|     for (ButtonList::const_iterator it = buttons.begin(); it != end; ++it) | ||||
|     { | ||||
|         const std::string &text = *it; | ||||
|         button = buttonBar->createWidget<MyGUI::Button>("MW_Button", coord, MyGUI::Align::Top | MyGUI::Align::HCenter, ""); | ||||
|         button = mButtonBar->createWidget<MyGUI::Button>("MW_Button", coord, MyGUI::Align::Top | MyGUI::Align::HCenter, ""); | ||||
|         button->getSubWidgetText()->setWordWrap(true); | ||||
|         button->setCaption(text); | ||||
|         fitToText(button); | ||||
|         button->eventMouseButtonClick += MyGUI::newDelegate(this, &InfoBoxDialog::onButtonClicked); | ||||
|         coord.top += button->getHeight(); | ||||
|         this->buttons.push_back(button); | ||||
|         this->mButtons.push_back(button); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void InfoBoxDialog::open() | ||||
| { | ||||
|     // Fix layout
 | ||||
|     layoutVertically(textBox, 4); | ||||
|     layoutVertically(buttonBar, 6); | ||||
|     layoutVertically(mTextBox, 4); | ||||
|     layoutVertically(mButtonBar, 6); | ||||
|     layoutVertically(mMainWidget, 4 + 6); | ||||
| 
 | ||||
|     center(); | ||||
|  | @ -344,18 +344,18 @@ void InfoBoxDialog::open() | |||
| 
 | ||||
| int InfoBoxDialog::getChosenButton() const | ||||
| { | ||||
|     return currentButton; | ||||
|     return mCurrentButton; | ||||
| } | ||||
| 
 | ||||
| void InfoBoxDialog::onButtonClicked(MyGUI::WidgetPtr _sender) | ||||
| { | ||||
|     std::vector<MyGUI::ButtonPtr>::const_iterator end = buttons.end(); | ||||
|     std::vector<MyGUI::ButtonPtr>::const_iterator end = mButtons.end(); | ||||
|     int i = 0; | ||||
|     for (std::vector<MyGUI::ButtonPtr>::const_iterator it = buttons.begin(); it != end; ++it) | ||||
|     for (std::vector<MyGUI::ButtonPtr>::const_iterator it = mButtons.begin(); it != end; ++it) | ||||
|     { | ||||
|         if (*it == _sender) | ||||
|         { | ||||
|             currentButton = i; | ||||
|             mCurrentButton = i; | ||||
|             eventButtonSelected(i); | ||||
|             return; | ||||
|         } | ||||
|  | @ -381,49 +381,49 @@ ClassChoiceDialog::ClassChoiceDialog(WindowManager& parWindowManager) | |||
| 
 | ||||
| CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager) | ||||
|   : WindowBase("openmw_chargen_create_class.layout", parWindowManager) | ||||
|   , specDialog(nullptr) | ||||
|   , attribDialog(nullptr) | ||||
|   , skillDialog(nullptr) | ||||
|   , descDialog(nullptr) | ||||
|   , mSpecDialog(nullptr) | ||||
|   , mAttribDialog(nullptr) | ||||
|   , mSkillDialog(nullptr) | ||||
|   , mDescDialog(nullptr) | ||||
| { | ||||
|     // Centre dialog
 | ||||
|     center(); | ||||
| 
 | ||||
|     setText("SpecializationT", mWindowManager.getGameSettingString("sChooseClassMenu1", "Specialization")); | ||||
|     getWidget(specializationName, "SpecializationName"); | ||||
|     specializationName->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked); | ||||
|     getWidget(mSpecializationName, "SpecializationName"); | ||||
|     mSpecializationName->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked); | ||||
| 
 | ||||
|     setText("FavoriteAttributesT", mWindowManager.getGameSettingString("sChooseClassMenu2", "Favorite Attributes:")); | ||||
|     getWidget(favoriteAttribute0, "FavoriteAttribute0"); | ||||
|     getWidget(favoriteAttribute1, "FavoriteAttribute1"); | ||||
|     favoriteAttribute0->setWindowManager(&mWindowManager); | ||||
|     favoriteAttribute1->setWindowManager(&mWindowManager); | ||||
|     favoriteAttribute0->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked); | ||||
|     favoriteAttribute1->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked); | ||||
|     getWidget(mFavoriteAttribute0, "FavoriteAttribute0"); | ||||
|     getWidget(mFavoriteAttribute1, "FavoriteAttribute1"); | ||||
|     mFavoriteAttribute0->setWindowManager(&mWindowManager); | ||||
|     mFavoriteAttribute1->setWindowManager(&mWindowManager); | ||||
|     mFavoriteAttribute0->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked); | ||||
|     mFavoriteAttribute1->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked); | ||||
| 
 | ||||
|     setText("MajorSkillT", mWindowManager.getGameSettingString("sSkillClassMajor", "")); | ||||
|     setText("MinorSkillT", mWindowManager.getGameSettingString("sSkillClassMinor", "")); | ||||
|     for(int i = 0; i < 5; i++) | ||||
|     { | ||||
|         char theIndex = '0'+i; | ||||
|         getWidget(majorSkill[i], std::string("MajorSkill").append(1, theIndex)); | ||||
|         getWidget(minorSkill[i], std::string("MinorSkill").append(1, theIndex)); | ||||
|         skills.push_back(majorSkill[i]); | ||||
|         skills.push_back(minorSkill[i]); | ||||
|         getWidget(mMajorSkill[i], std::string("MajorSkill").append(1, theIndex)); | ||||
|         getWidget(mMinorSkill[i], std::string("MinorSkill").append(1, theIndex)); | ||||
|         mSkills.push_back(mMajorSkill[i]); | ||||
|         mSkills.push_back(mMinorSkill[i]); | ||||
|     } | ||||
| 
 | ||||
|     std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end(); | ||||
|     for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it) | ||||
|     std::vector<Widgets::MWSkillPtr>::const_iterator end = mSkills.end(); | ||||
|     for (std::vector<Widgets::MWSkillPtr>::const_iterator it = mSkills.begin(); it != end; ++it) | ||||
|     { | ||||
|         (*it)->setWindowManager(&mWindowManager); | ||||
|         (*it)->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onSkillClicked); | ||||
|     } | ||||
| 
 | ||||
|     setText("LabelT", mWindowManager.getGameSettingString("sName", "")); | ||||
|     getWidget(editName, "EditName"); | ||||
|     getWidget(mEditName, "EditName"); | ||||
| 
 | ||||
|     // Make sure the edit box has focus
 | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(editName); | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(mEditName); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr descriptionButton; | ||||
|     getWidget(descriptionButton, "DescriptionButton"); | ||||
|  | @ -440,20 +440,20 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager) | |||
| 
 | ||||
|     // Set default skills, attributes
 | ||||
| 
 | ||||
|     favoriteAttribute0->setAttributeId(ESM::Attribute::Strength); | ||||
|     favoriteAttribute1->setAttributeId(ESM::Attribute::Agility); | ||||
|     mFavoriteAttribute0->setAttributeId(ESM::Attribute::Strength); | ||||
|     mFavoriteAttribute1->setAttributeId(ESM::Attribute::Agility); | ||||
| 
 | ||||
|     majorSkill[0]->setSkillId(ESM::Skill::Block); | ||||
|     majorSkill[1]->setSkillId(ESM::Skill::Armorer); | ||||
|     majorSkill[2]->setSkillId(ESM::Skill::MediumArmor); | ||||
|     majorSkill[3]->setSkillId(ESM::Skill::HeavyArmor); | ||||
|     majorSkill[4]->setSkillId(ESM::Skill::BluntWeapon); | ||||
|     mMajorSkill[0]->setSkillId(ESM::Skill::Block); | ||||
|     mMajorSkill[1]->setSkillId(ESM::Skill::Armorer); | ||||
|     mMajorSkill[2]->setSkillId(ESM::Skill::MediumArmor); | ||||
|     mMajorSkill[3]->setSkillId(ESM::Skill::HeavyArmor); | ||||
|     mMajorSkill[4]->setSkillId(ESM::Skill::BluntWeapon); | ||||
| 
 | ||||
|     minorSkill[0]->setSkillId(ESM::Skill::LongBlade); | ||||
|     minorSkill[1]->setSkillId(ESM::Skill::Axe); | ||||
|     minorSkill[2]->setSkillId(ESM::Skill::Spear); | ||||
|     minorSkill[3]->setSkillId(ESM::Skill::Athletics); | ||||
|     minorSkill[4]->setSkillId(ESM::Skill::Enchant); | ||||
|     mMinorSkill[0]->setSkillId(ESM::Skill::LongBlade); | ||||
|     mMinorSkill[1]->setSkillId(ESM::Skill::Axe); | ||||
|     mMinorSkill[2]->setSkillId(ESM::Skill::Spear); | ||||
|     mMinorSkill[3]->setSkillId(ESM::Skill::Athletics); | ||||
|     mMinorSkill[4]->setSkillId(ESM::Skill::Enchant); | ||||
| 
 | ||||
|     setSpecialization(0); | ||||
|     update(); | ||||
|  | @ -461,44 +461,44 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager) | |||
| 
 | ||||
| CreateClassDialog::~CreateClassDialog() | ||||
| { | ||||
|     delete specDialog; | ||||
|     delete attribDialog; | ||||
|     delete skillDialog; | ||||
|     delete descDialog; | ||||
|     delete mSpecDialog; | ||||
|     delete mAttribDialog; | ||||
|     delete mSkillDialog; | ||||
|     delete mDescDialog; | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::update() | ||||
| { | ||||
|     for (int i = 0; i < 5; ++i) | ||||
|     { | ||||
|         ToolTips::createSkillToolTip(majorSkill[i], majorSkill[i]->getSkillId()); | ||||
|         ToolTips::createSkillToolTip(minorSkill[i], minorSkill[i]->getSkillId()); | ||||
|         ToolTips::createSkillToolTip(mMajorSkill[i], mMajorSkill[i]->getSkillId()); | ||||
|         ToolTips::createSkillToolTip(mMinorSkill[i], mMinorSkill[i]->getSkillId()); | ||||
|     } | ||||
| 
 | ||||
|     ToolTips::createAttributeToolTip(favoriteAttribute0, favoriteAttribute0->getAttributeId()); | ||||
|     ToolTips::createAttributeToolTip(favoriteAttribute1, favoriteAttribute1->getAttributeId()); | ||||
|     ToolTips::createAttributeToolTip(mFavoriteAttribute0, mFavoriteAttribute0->getAttributeId()); | ||||
|     ToolTips::createAttributeToolTip(mFavoriteAttribute1, mFavoriteAttribute1->getAttributeId()); | ||||
| } | ||||
| 
 | ||||
| std::string CreateClassDialog::getName() const | ||||
| { | ||||
|     return editName->getOnlyText(); | ||||
|     return mEditName->getOnlyText(); | ||||
| } | ||||
| 
 | ||||
| std::string CreateClassDialog::getDescription() const | ||||
| { | ||||
|     return description; | ||||
|     return mDescription; | ||||
| } | ||||
| 
 | ||||
| ESM::Class::Specialization CreateClassDialog::getSpecializationId() const | ||||
| { | ||||
|     return specializationId; | ||||
|     return mSpecializationId; | ||||
| } | ||||
| 
 | ||||
| std::vector<int> CreateClassDialog::getFavoriteAttributes() const | ||||
| { | ||||
|     std::vector<int> v; | ||||
|     v.push_back(favoriteAttribute0->getAttributeId()); | ||||
|     v.push_back(favoriteAttribute1->getAttributeId()); | ||||
|     v.push_back(mFavoriteAttribute0->getAttributeId()); | ||||
|     v.push_back(mFavoriteAttribute1->getAttributeId()); | ||||
|     return v; | ||||
| } | ||||
| 
 | ||||
|  | @ -507,7 +507,7 @@ std::vector<ESM::Skill::SkillEnum> CreateClassDialog::getMajorSkills() const | |||
|     std::vector<ESM::Skill::SkillEnum> v; | ||||
|     for(int i = 0; i < 5; i++) | ||||
|     { | ||||
|         v.push_back(majorSkill[i]->getSkillId()); | ||||
|         v.push_back(mMajorSkill[i]->getSkillId()); | ||||
|     } | ||||
|     return v; | ||||
| } | ||||
|  | @ -517,7 +517,7 @@ std::vector<ESM::Skill::SkillEnum> CreateClassDialog::getMinorSkills() const | |||
|     std::vector<ESM::Skill::SkillEnum> v; | ||||
|     for(int i=0; i < 5; i++) | ||||
|     { | ||||
|         v.push_back(minorSkill[i]->getSkillId()); | ||||
|         v.push_back(mMinorSkill[i]->getSkillId()); | ||||
|     } | ||||
|     return v; | ||||
| } | ||||
|  | @ -556,108 +556,108 @@ void CreateClassDialog::open() | |||
| 
 | ||||
| void CreateClassDialog::onDialogCancel() | ||||
| { | ||||
|     if (specDialog) | ||||
|     if (mSpecDialog) | ||||
|     { | ||||
|         mWindowManager.removeDialog(specDialog); | ||||
|         specDialog = 0; | ||||
|         mWindowManager.removeDialog(mSpecDialog); | ||||
|         mSpecDialog = 0; | ||||
|     } | ||||
|     if (attribDialog) | ||||
|     if (mAttribDialog) | ||||
|     { | ||||
|         mWindowManager.removeDialog(attribDialog); | ||||
|         attribDialog = 0; | ||||
|         mWindowManager.removeDialog(mAttribDialog); | ||||
|         mAttribDialog = 0; | ||||
|     } | ||||
|     if (skillDialog) | ||||
|     if (mSkillDialog) | ||||
|     { | ||||
|         mWindowManager.removeDialog(skillDialog); | ||||
|         skillDialog = 0; | ||||
|         mWindowManager.removeDialog(mSkillDialog); | ||||
|         mSkillDialog = 0; | ||||
|     } | ||||
|     if (descDialog) | ||||
|     if (mDescDialog) | ||||
|     { | ||||
|         mWindowManager.removeDialog(descDialog); | ||||
|         descDialog = 0; | ||||
|         mWindowManager.removeDialog(mDescDialog); | ||||
|         mDescDialog = 0; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender) | ||||
| { | ||||
|     delete specDialog; | ||||
|     specDialog = new SelectSpecializationDialog(mWindowManager); | ||||
|     specDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); | ||||
|     specDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected); | ||||
|     specDialog->setVisible(true); | ||||
|     delete mSpecDialog; | ||||
|     mSpecDialog = new SelectSpecializationDialog(mWindowManager); | ||||
|     mSpecDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); | ||||
|     mSpecDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected); | ||||
|     mSpecDialog->setVisible(true); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onSpecializationSelected() | ||||
| { | ||||
|     specializationId = specDialog->getSpecializationId(); | ||||
|     setSpecialization(specializationId); | ||||
|     mSpecializationId = mSpecDialog->getSpecializationId(); | ||||
|     setSpecialization(mSpecializationId); | ||||
| 
 | ||||
|     mWindowManager.removeDialog(specDialog); | ||||
|     specDialog = 0; | ||||
|     mWindowManager.removeDialog(mSpecDialog); | ||||
|     mSpecDialog = 0; | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::setSpecialization(int id) | ||||
| { | ||||
|     specializationId = (ESM::Class::Specialization) id; | ||||
|     mSpecializationId = (ESM::Class::Specialization) id; | ||||
|     static const char *specIds[3] = { | ||||
|         "sSpecializationCombat", | ||||
|         "sSpecializationMagic", | ||||
|         "sSpecializationStealth" | ||||
|     }; | ||||
|     std::string specName = mWindowManager.getGameSettingString(specIds[specializationId], specIds[specializationId]); | ||||
|     specializationName->setCaption(specName); | ||||
|     ToolTips::createSpecializationToolTip(specializationName, specName, specializationId); | ||||
|     std::string specName = mWindowManager.getGameSettingString(specIds[mSpecializationId], specIds[mSpecializationId]); | ||||
|     mSpecializationName->setCaption(specName); | ||||
|     ToolTips::createSpecializationToolTip(mSpecializationName, specName, mSpecializationId); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender) | ||||
| { | ||||
|     delete attribDialog; | ||||
|     attribDialog = new SelectAttributeDialog(mWindowManager); | ||||
|     attribDialog->setAffectedWidget(_sender); | ||||
|     attribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); | ||||
|     attribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected); | ||||
|     attribDialog->setVisible(true); | ||||
|     delete mAttribDialog; | ||||
|     mAttribDialog = new SelectAttributeDialog(mWindowManager); | ||||
|     mAttribDialog->setAffectedWidget(_sender); | ||||
|     mAttribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); | ||||
|     mAttribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected); | ||||
|     mAttribDialog->setVisible(true); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onAttributeSelected() | ||||
| { | ||||
|     ESM::Attribute::AttributeID id = attribDialog->getAttributeId(); | ||||
|     Widgets::MWAttributePtr attribute = attribDialog->getAffectedWidget(); | ||||
|     if (attribute == favoriteAttribute0) | ||||
|     ESM::Attribute::AttributeID id = mAttribDialog->getAttributeId(); | ||||
|     Widgets::MWAttributePtr attribute = mAttribDialog->getAffectedWidget(); | ||||
|     if (attribute == mFavoriteAttribute0) | ||||
|     { | ||||
|         if (favoriteAttribute1->getAttributeId() == id) | ||||
|             favoriteAttribute1->setAttributeId(favoriteAttribute0->getAttributeId()); | ||||
|         if (mFavoriteAttribute1->getAttributeId() == id) | ||||
|             mFavoriteAttribute1->setAttributeId(mFavoriteAttribute0->getAttributeId()); | ||||
|     } | ||||
|     else if (attribute == favoriteAttribute1) | ||||
|     else if (attribute == mFavoriteAttribute1) | ||||
|     { | ||||
|         if (favoriteAttribute0->getAttributeId() == id) | ||||
|             favoriteAttribute0->setAttributeId(favoriteAttribute1->getAttributeId()); | ||||
|         if (mFavoriteAttribute0->getAttributeId() == id) | ||||
|             mFavoriteAttribute0->setAttributeId(mFavoriteAttribute1->getAttributeId()); | ||||
|     } | ||||
|     attribute->setAttributeId(id); | ||||
|     mWindowManager.removeDialog(attribDialog); | ||||
|     attribDialog = 0; | ||||
|     mWindowManager.removeDialog(mAttribDialog); | ||||
|     mAttribDialog = 0; | ||||
| 
 | ||||
|     update(); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender) | ||||
| { | ||||
|     delete skillDialog; | ||||
|     skillDialog = new SelectSkillDialog(mWindowManager); | ||||
|     skillDialog->setAffectedWidget(_sender); | ||||
|     skillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); | ||||
|     skillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected); | ||||
|     skillDialog->setVisible(true); | ||||
|     delete mSkillDialog; | ||||
|     mSkillDialog = new SelectSkillDialog(mWindowManager); | ||||
|     mSkillDialog->setAffectedWidget(_sender); | ||||
|     mSkillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); | ||||
|     mSkillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected); | ||||
|     mSkillDialog->setVisible(true); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onSkillSelected() | ||||
| { | ||||
|     ESM::Skill::SkillEnum id = skillDialog->getSkillId(); | ||||
|     Widgets::MWSkillPtr skill = skillDialog->getAffectedWidget(); | ||||
|     ESM::Skill::SkillEnum id = mSkillDialog->getSkillId(); | ||||
|     Widgets::MWSkillPtr skill = mSkillDialog->getAffectedWidget(); | ||||
| 
 | ||||
|     // Avoid duplicate skills by swapping any skill field that matches the selected one
 | ||||
|     std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end(); | ||||
|     for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it) | ||||
|     std::vector<Widgets::MWSkillPtr>::const_iterator end = mSkills.end(); | ||||
|     for (std::vector<Widgets::MWSkillPtr>::const_iterator it = mSkills.begin(); it != end; ++it) | ||||
|     { | ||||
|         if (*it == skill) | ||||
|             continue; | ||||
|  | @ -668,25 +668,25 @@ void CreateClassDialog::onSkillSelected() | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     skill->setSkillId(skillDialog->getSkillId()); | ||||
|     mWindowManager.removeDialog(skillDialog); | ||||
|     skillDialog = 0; | ||||
|     skill->setSkillId(mSkillDialog->getSkillId()); | ||||
|     mWindowManager.removeDialog(mSkillDialog); | ||||
|     mSkillDialog = 0; | ||||
|     update(); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onDescriptionClicked(MyGUI::Widget* _sender) | ||||
| { | ||||
|     descDialog = new DescriptionDialog(mWindowManager); | ||||
|     descDialog->setTextInput(description); | ||||
|     descDialog->eventDone += MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionEntered); | ||||
|     descDialog->setVisible(true); | ||||
|     mDescDialog = new DescriptionDialog(mWindowManager); | ||||
|     mDescDialog->setTextInput(mDescription); | ||||
|     mDescDialog->eventDone += MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionEntered); | ||||
|     mDescDialog->setVisible(true); | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onDescriptionEntered(WindowBase* parWindow) | ||||
| { | ||||
|     description = descDialog->getTextInput(); | ||||
|     mWindowManager.removeDialog(descDialog); | ||||
|     descDialog = 0; | ||||
|     mDescription = mDescDialog->getTextInput(); | ||||
|     mWindowManager.removeDialog(mDescDialog); | ||||
|     mDescDialog = 0; | ||||
| } | ||||
| 
 | ||||
| void CreateClassDialog::onOkClicked(MyGUI::Widget* _sender) | ||||
|  | @ -709,24 +709,24 @@ SelectSpecializationDialog::SelectSpecializationDialog(WindowManager& parWindowM | |||
| 
 | ||||
|     setText("LabelT", mWindowManager.getGameSettingString("sSpecializationMenu1", "")); | ||||
| 
 | ||||
|     getWidget(specialization0, "Specialization0"); | ||||
|     getWidget(specialization1, "Specialization1"); | ||||
|     getWidget(specialization2, "Specialization2"); | ||||
|     getWidget(mSpecialization0, "Specialization0"); | ||||
|     getWidget(mSpecialization1, "Specialization1"); | ||||
|     getWidget(mSpecialization2, "Specialization2"); | ||||
|     std::string combat = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], ""); | ||||
|     std::string magic = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Magic], ""); | ||||
|     std::string stealth = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Stealth], ""); | ||||
| 
 | ||||
|     specialization0->setCaption(combat); | ||||
|     specialization0->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); | ||||
|     specialization1->setCaption(magic); | ||||
|     specialization1->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); | ||||
|     specialization2->setCaption(stealth); | ||||
|     specialization2->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); | ||||
|     specializationId = ESM::Class::Combat; | ||||
|     mSpecialization0->setCaption(combat); | ||||
|     mSpecialization0->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); | ||||
|     mSpecialization1->setCaption(magic); | ||||
|     mSpecialization1->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); | ||||
|     mSpecialization2->setCaption(stealth); | ||||
|     mSpecialization2->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); | ||||
|     mSpecializationId = ESM::Class::Combat; | ||||
| 
 | ||||
|     ToolTips::createSpecializationToolTip(specialization0, combat, ESM::Class::Combat); | ||||
|     ToolTips::createSpecializationToolTip(specialization1, magic, ESM::Class::Magic); | ||||
|     ToolTips::createSpecializationToolTip(specialization2, stealth, ESM::Class::Stealth); | ||||
|     ToolTips::createSpecializationToolTip(mSpecialization0, combat, ESM::Class::Combat); | ||||
|     ToolTips::createSpecializationToolTip(mSpecialization1, magic, ESM::Class::Magic); | ||||
|     ToolTips::createSpecializationToolTip(mSpecialization2, stealth, ESM::Class::Stealth); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr cancelButton; | ||||
|     getWidget(cancelButton, "CancelButton"); | ||||
|  | @ -747,12 +747,12 @@ SelectSpecializationDialog::~SelectSpecializationDialog() | |||
| 
 | ||||
| void SelectSpecializationDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender) | ||||
| { | ||||
|     if (_sender == specialization0) | ||||
|         specializationId = ESM::Class::Combat; | ||||
|     else if (_sender == specialization1) | ||||
|         specializationId = ESM::Class::Magic; | ||||
|     else if (_sender == specialization2) | ||||
|         specializationId = ESM::Class::Stealth; | ||||
|     if (_sender == mSpecialization0) | ||||
|         mSpecializationId = ESM::Class::Combat; | ||||
|     else if (_sender == mSpecialization1) | ||||
|         mSpecializationId = ESM::Class::Magic; | ||||
|     else if (_sender == mSpecialization2) | ||||
|         mSpecializationId = ESM::Class::Stealth; | ||||
|     else | ||||
|         return; | ||||
| 
 | ||||
|  | @ -806,7 +806,7 @@ SelectAttributeDialog::~SelectAttributeDialog() | |||
| void SelectAttributeDialog::onAttributeClicked(Widgets::MWAttributePtr _sender) | ||||
| { | ||||
|     // TODO: Change MWAttribute to set and get AttributeID enum instead of int
 | ||||
|     attributeId = static_cast<ESM::Attribute::AttributeID>(_sender->getAttributeId()); | ||||
|     mAttributeId = static_cast<ESM::Attribute::AttributeID>(_sender->getAttributeId()); | ||||
|     eventItemSelected(); | ||||
| } | ||||
| 
 | ||||
|  | @ -832,44 +832,44 @@ SelectSkillDialog::SelectSkillDialog(WindowManager& parWindowManager) | |||
|     for(int i = 0; i < 9; i++) | ||||
|     { | ||||
|         char theIndex = '0'+i; | ||||
|         getWidget(combatSkill[i],  std::string("CombatSkill").append(1, theIndex)); | ||||
|         getWidget(magicSkill[i],   std::string("MagicSkill").append(1, theIndex)); | ||||
|         getWidget(stealthSkill[i], std::string("StealthSkill").append(1, theIndex)); | ||||
|         getWidget(mCombatSkill[i],  std::string("CombatSkill").append(1, theIndex)); | ||||
|         getWidget(mMagicSkill[i],   std::string("MagicSkill").append(1, theIndex)); | ||||
|         getWidget(mStealthSkill[i], std::string("StealthSkill").append(1, theIndex)); | ||||
|     } | ||||
| 
 | ||||
|     struct {Widgets::MWSkillPtr widget; ESM::Skill::SkillEnum skillId;} skills[3][9] = { | ||||
|     struct {Widgets::MWSkillPtr widget; ESM::Skill::SkillEnum skillId;} mSkills[3][9] = { | ||||
|         { | ||||
|             {combatSkill[0], ESM::Skill::Block}, | ||||
|             {combatSkill[1], ESM::Skill::Armorer}, | ||||
|             {combatSkill[2], ESM::Skill::MediumArmor}, | ||||
|             {combatSkill[3], ESM::Skill::HeavyArmor}, | ||||
|             {combatSkill[4], ESM::Skill::BluntWeapon}, | ||||
|             {combatSkill[5], ESM::Skill::LongBlade}, | ||||
|             {combatSkill[6], ESM::Skill::Axe}, | ||||
|             {combatSkill[7], ESM::Skill::Spear}, | ||||
|             {combatSkill[8], ESM::Skill::Athletics} | ||||
|             {mCombatSkill[0], ESM::Skill::Block}, | ||||
|             {mCombatSkill[1], ESM::Skill::Armorer}, | ||||
|             {mCombatSkill[2], ESM::Skill::MediumArmor}, | ||||
|             {mCombatSkill[3], ESM::Skill::HeavyArmor}, | ||||
|             {mCombatSkill[4], ESM::Skill::BluntWeapon}, | ||||
|             {mCombatSkill[5], ESM::Skill::LongBlade}, | ||||
|             {mCombatSkill[6], ESM::Skill::Axe}, | ||||
|             {mCombatSkill[7], ESM::Skill::Spear}, | ||||
|             {mCombatSkill[8], ESM::Skill::Athletics} | ||||
|         }, | ||||
|         { | ||||
|             {magicSkill[0], ESM::Skill::Enchant}, | ||||
|             {magicSkill[1], ESM::Skill::Destruction}, | ||||
|             {magicSkill[2], ESM::Skill::Alteration}, | ||||
|             {magicSkill[3], ESM::Skill::Illusion}, | ||||
|             {magicSkill[4], ESM::Skill::Conjuration}, | ||||
|             {magicSkill[5], ESM::Skill::Mysticism}, | ||||
|             {magicSkill[6], ESM::Skill::Restoration}, | ||||
|             {magicSkill[7], ESM::Skill::Alchemy}, | ||||
|             {magicSkill[8], ESM::Skill::Unarmored} | ||||
|             {mMagicSkill[0], ESM::Skill::Enchant}, | ||||
|             {mMagicSkill[1], ESM::Skill::Destruction}, | ||||
|             {mMagicSkill[2], ESM::Skill::Alteration}, | ||||
|             {mMagicSkill[3], ESM::Skill::Illusion}, | ||||
|             {mMagicSkill[4], ESM::Skill::Conjuration}, | ||||
|             {mMagicSkill[5], ESM::Skill::Mysticism}, | ||||
|             {mMagicSkill[6], ESM::Skill::Restoration}, | ||||
|             {mMagicSkill[7], ESM::Skill::Alchemy}, | ||||
|             {mMagicSkill[8], ESM::Skill::Unarmored} | ||||
|         }, | ||||
|         { | ||||
|             {stealthSkill[0], ESM::Skill::Security}, | ||||
|             {stealthSkill[1], ESM::Skill::Sneak}, | ||||
|             {stealthSkill[2], ESM::Skill::Acrobatics}, | ||||
|             {stealthSkill[3], ESM::Skill::LightArmor}, | ||||
|             {stealthSkill[4], ESM::Skill::ShortBlade}, | ||||
|             {stealthSkill[5] ,ESM::Skill::Marksman}, | ||||
|             {stealthSkill[6] ,ESM::Skill::Mercantile}, | ||||
|             {stealthSkill[7] ,ESM::Skill::Speechcraft}, | ||||
|             {stealthSkill[8] ,ESM::Skill::HandToHand} | ||||
|             {mStealthSkill[0], ESM::Skill::Security}, | ||||
|             {mStealthSkill[1], ESM::Skill::Sneak}, | ||||
|             {mStealthSkill[2], ESM::Skill::Acrobatics}, | ||||
|             {mStealthSkill[3], ESM::Skill::LightArmor}, | ||||
|             {mStealthSkill[4], ESM::Skill::ShortBlade}, | ||||
|             {mStealthSkill[5] ,ESM::Skill::Marksman}, | ||||
|             {mStealthSkill[6] ,ESM::Skill::Mercantile}, | ||||
|             {mStealthSkill[7] ,ESM::Skill::Speechcraft}, | ||||
|             {mStealthSkill[8] ,ESM::Skill::HandToHand} | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|  | @ -877,10 +877,10 @@ SelectSkillDialog::SelectSkillDialog(WindowManager& parWindowManager) | |||
|     { | ||||
|         for (int i = 0; i < 9; ++i) | ||||
|         { | ||||
|             skills[spec][i].widget->setWindowManager(&mWindowManager); | ||||
|             skills[spec][i].widget->setSkillId(skills[spec][i].skillId); | ||||
|             skills[spec][i].widget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked); | ||||
|             ToolTips::createSkillToolTip(skills[spec][i].widget, skills[spec][i].widget->getSkillId()); | ||||
|             mSkills[spec][i].widget->setWindowManager(&mWindowManager); | ||||
|             mSkills[spec][i].widget->setSkillId(mSkills[spec][i].skillId); | ||||
|             mSkills[spec][i].widget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked); | ||||
|             ToolTips::createSkillToolTip(mSkills[spec][i].widget, mSkills[spec][i].widget->getSkillId()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -903,7 +903,7 @@ SelectSkillDialog::~SelectSkillDialog() | |||
| 
 | ||||
| void SelectSkillDialog::onSkillClicked(Widgets::MWSkillPtr _sender) | ||||
| { | ||||
|     skillId = _sender->getSkillId(); | ||||
|     mSkillId = _sender->getSkillId(); | ||||
|     eventItemSelected(); | ||||
| } | ||||
| 
 | ||||
|  | @ -920,7 +920,7 @@ DescriptionDialog::DescriptionDialog(WindowManager& parWindowManager) | |||
|     // Centre dialog
 | ||||
|     center(); | ||||
| 
 | ||||
|     getWidget(textEdit, "TextEdit"); | ||||
|     getWidget(mTextEdit, "TextEdit"); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr okButton; | ||||
|     getWidget(okButton, "OKButton"); | ||||
|  | @ -930,7 +930,7 @@ DescriptionDialog::DescriptionDialog(WindowManager& parWindowManager) | |||
|     okButton->setCoord(234 - buttonWidth, 214, buttonWidth, 24); | ||||
| 
 | ||||
|     // Make sure the edit box has focus
 | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit); | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit); | ||||
| 
 | ||||
|     MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget); | ||||
| } | ||||
|  |  | |||
|  | @ -45,11 +45,11 @@ namespace MWGui | |||
| 
 | ||||
|         void fitToText(MyGUI::TextBox* widget); | ||||
|         void layoutVertically(MyGUI::WidgetPtr widget, int margin); | ||||
|         int currentButton; | ||||
|         MyGUI::WidgetPtr textBox; | ||||
|         MyGUI::TextBox* text; | ||||
|         MyGUI::WidgetPtr buttonBar; | ||||
|         std::vector<MyGUI::ButtonPtr> buttons; | ||||
|         int mCurrentButton; | ||||
|         MyGUI::WidgetPtr mTextBox; | ||||
|         MyGUI::TextBox* mText; | ||||
|         MyGUI::WidgetPtr mButtonBar; | ||||
|         std::vector<MyGUI::ButtonPtr> mButtons; | ||||
|     }; | ||||
| 
 | ||||
|     // Lets the player choose between 3 ways of creating a class
 | ||||
|  | @ -90,10 +90,10 @@ namespace MWGui | |||
|         void onBackClicked(MyGUI::Widget* _sender); | ||||
| 
 | ||||
|     private: | ||||
|         MyGUI::ImageBox* classImage; | ||||
|         MyGUI::TextBox*  className; | ||||
|         MyGUI::ImageBox* mClassImage; | ||||
|         MyGUI::TextBox*  mClassName; | ||||
| 
 | ||||
|         std::string currentClassId; | ||||
|         std::string mCurrentClassId; | ||||
|     }; | ||||
| 
 | ||||
|     class PickClassDialog : public WindowBase | ||||
|  | @ -101,7 +101,7 @@ namespace MWGui | |||
|     public: | ||||
|         PickClassDialog(WindowManager& parWindowManager); | ||||
| 
 | ||||
|         const std::string &getClassId() const { return currentClassId; } | ||||
|         const std::string &getClassId() const { return mCurrentClassId; } | ||||
|         void setClassId(const std::string &classId); | ||||
| 
 | ||||
|         void setNextButtonShow(bool shown); | ||||
|  | @ -125,14 +125,14 @@ namespace MWGui | |||
|         void updateClasses(); | ||||
|         void updateStats(); | ||||
| 
 | ||||
|         MyGUI::ImageBox* classImage; | ||||
|         MyGUI::ListBox*        classList; | ||||
|         MyGUI::TextBox*  specializationName; | ||||
|         Widgets::MWAttributePtr favoriteAttribute[2]; | ||||
|         Widgets::MWSkillPtr   majorSkill[5]; | ||||
|         Widgets::MWSkillPtr   minorSkill[5]; | ||||
|         MyGUI::ImageBox* mClassImage; | ||||
|         MyGUI::ListBox*  mClassList; | ||||
|         MyGUI::TextBox*  mSpecializationName; | ||||
|         Widgets::MWAttributePtr mFavoriteAttribute[2]; | ||||
|         Widgets::MWSkillPtr   mMajorSkill[5]; | ||||
|         Widgets::MWSkillPtr   mMinorSkill[5]; | ||||
| 
 | ||||
|         std::string currentClassId; | ||||
|         std::string mCurrentClassId; | ||||
|     }; | ||||
| 
 | ||||
|     class SelectSpecializationDialog : public WindowBase | ||||
|  | @ -141,7 +141,7 @@ namespace MWGui | |||
|         SelectSpecializationDialog(WindowManager& parWindowManager); | ||||
|         ~SelectSpecializationDialog(); | ||||
| 
 | ||||
|         ESM::Class::Specialization getSpecializationId() const { return specializationId; } | ||||
|         ESM::Class::Specialization getSpecializationId() const { return mSpecializationId; } | ||||
| 
 | ||||
|         // Events
 | ||||
|         typedef delegates::CMultiDelegate0 EventHandle_Void; | ||||
|  | @ -161,9 +161,9 @@ namespace MWGui | |||
|         void onCancelClicked(MyGUI::Widget* _sender); | ||||
| 
 | ||||
|     private: | ||||
|         MyGUI::TextBox      *specialization0, *specialization1, *specialization2; | ||||
|         MyGUI::TextBox *mSpecialization0, *mSpecialization1, *mSpecialization2; | ||||
| 
 | ||||
|         ESM::Class::Specialization specializationId; | ||||
|         ESM::Class::Specialization mSpecializationId; | ||||
|     }; | ||||
| 
 | ||||
|     class SelectAttributeDialog : public WindowBase | ||||
|  | @ -172,9 +172,9 @@ namespace MWGui | |||
|         SelectAttributeDialog(WindowManager& parWindowManager); | ||||
|         ~SelectAttributeDialog(); | ||||
| 
 | ||||
|         ESM::Attribute::AttributeID getAttributeId() const { return attributeId; } | ||||
|         Widgets::MWAttributePtr getAffectedWidget() const { return affectedWidget; } | ||||
|         void setAffectedWidget(Widgets::MWAttributePtr widget) { affectedWidget = widget; } | ||||
|         ESM::Attribute::AttributeID getAttributeId() const { return mAttributeId; } | ||||
|         Widgets::MWAttributePtr getAffectedWidget() const { return mAffectedWidget; } | ||||
|         void setAffectedWidget(Widgets::MWAttributePtr widget) { mAffectedWidget = widget; } | ||||
| 
 | ||||
|         // Events
 | ||||
|         typedef delegates::CMultiDelegate0 EventHandle_Void; | ||||
|  | @ -194,9 +194,9 @@ namespace MWGui | |||
|         void onCancelClicked(MyGUI::Widget* _sender); | ||||
| 
 | ||||
|     private: | ||||
|         Widgets::MWAttributePtr affectedWidget; | ||||
|         Widgets::MWAttributePtr mAffectedWidget; | ||||
| 
 | ||||
|         ESM::Attribute::AttributeID attributeId; | ||||
|         ESM::Attribute::AttributeID mAttributeId; | ||||
|     }; | ||||
| 
 | ||||
|     class SelectSkillDialog : public WindowBase | ||||
|  | @ -205,9 +205,9 @@ namespace MWGui | |||
|         SelectSkillDialog(WindowManager& parWindowManager); | ||||
|         ~SelectSkillDialog(); | ||||
| 
 | ||||
|         ESM::Skill::SkillEnum getSkillId() const { return skillId; } | ||||
|         Widgets::MWSkillPtr getAffectedWidget() const { return affectedWidget; } | ||||
|         void setAffectedWidget(Widgets::MWSkillPtr widget) { affectedWidget = widget; } | ||||
|         ESM::Skill::SkillEnum getSkillId() const { return mSkillId; } | ||||
|         Widgets::MWSkillPtr getAffectedWidget() const { return mAffectedWidget; } | ||||
|         void setAffectedWidget(Widgets::MWSkillPtr widget) { mAffectedWidget = widget; } | ||||
| 
 | ||||
|         // Events
 | ||||
|         typedef delegates::CMultiDelegate0 EventHandle_Void; | ||||
|  | @ -227,12 +227,12 @@ namespace MWGui | |||
|         void onCancelClicked(MyGUI::Widget* _sender); | ||||
| 
 | ||||
|     private: | ||||
|         Widgets::MWSkillPtr combatSkill[9]; | ||||
|         Widgets::MWSkillPtr magicSkill[9]; | ||||
|         Widgets::MWSkillPtr stealthSkill[9]; | ||||
|         Widgets::MWSkillPtr affectedWidget; | ||||
|         Widgets::MWSkillPtr mCombatSkill[9]; | ||||
|         Widgets::MWSkillPtr mMagicSkill[9]; | ||||
|         Widgets::MWSkillPtr mStealthSkill[9]; | ||||
|         Widgets::MWSkillPtr mAffectedWidget; | ||||
| 
 | ||||
|         ESM::Skill::SkillEnum skillId; | ||||
|         ESM::Skill::SkillEnum mSkillId; | ||||
|     }; | ||||
| 
 | ||||
|     class DescriptionDialog : public WindowBase | ||||
|  | @ -241,14 +241,14 @@ namespace MWGui | |||
|         DescriptionDialog(WindowManager& parWindowManager); | ||||
|         ~DescriptionDialog(); | ||||
| 
 | ||||
|         std::string getTextInput() const { return textEdit ? textEdit->getOnlyText() : ""; } | ||||
|         void setTextInput(const std::string &text) { if (textEdit) textEdit->setOnlyText(text); } | ||||
|         std::string getTextInput() const { return mTextEdit ? mTextEdit->getOnlyText() : ""; } | ||||
|         void setTextInput(const std::string &text) { if (mTextEdit) mTextEdit->setOnlyText(text); } | ||||
| 
 | ||||
|     protected: | ||||
|         void onOkClicked(MyGUI::Widget* _sender); | ||||
| 
 | ||||
|     private: | ||||
|         MyGUI::EditPtr textEdit; | ||||
|         MyGUI::EditPtr mTextEdit; | ||||
|     }; | ||||
| 
 | ||||
|     class CreateClassDialog : public WindowBase | ||||
|  | @ -294,20 +294,20 @@ namespace MWGui | |||
|         void update(); | ||||
| 
 | ||||
|     private: | ||||
|         MyGUI::EditPtr          editName; | ||||
|         MyGUI::TextBox*    specializationName; | ||||
|         Widgets::MWAttributePtr favoriteAttribute0, favoriteAttribute1; | ||||
|         Widgets::MWSkillPtr     majorSkill[5]; | ||||
|         Widgets::MWSkillPtr     minorSkill[5]; | ||||
|         std::vector<Widgets::MWSkillPtr> skills; | ||||
|         std::string             description; | ||||
|         MyGUI::EditPtr                   mEditName; | ||||
|         MyGUI::TextBox*                  mSpecializationName; | ||||
|         Widgets::MWAttributePtr          mFavoriteAttribute0, mFavoriteAttribute1; | ||||
|         Widgets::MWSkillPtr              mMajorSkill[5]; | ||||
|         Widgets::MWSkillPtr              mMinorSkill[5]; | ||||
|         std::vector<Widgets::MWSkillPtr> mSkills; | ||||
|         std::string                      mDescription; | ||||
| 
 | ||||
|         SelectSpecializationDialog *specDialog; | ||||
|         SelectAttributeDialog *attribDialog; | ||||
|         SelectSkillDialog *skillDialog; | ||||
|         DescriptionDialog *descDialog; | ||||
|         SelectSpecializationDialog       *mSpecDialog; | ||||
|         SelectAttributeDialog            *mAttribDialog; | ||||
|         SelectSkillDialog                *mSkillDialog; | ||||
|         DescriptionDialog                *mDescDialog; | ||||
| 
 | ||||
|         ESM::Class::Specialization specializationId; | ||||
|         ESM::Class::Specialization       mSpecializationId; | ||||
|     }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -50,9 +50,9 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager) | |||
|     center(); | ||||
| 
 | ||||
|     //History view
 | ||||
|     getWidget(history, "History"); | ||||
|     history->setOverflowToTheLeft(true); | ||||
|     history->setMaxTextLength(1000000); | ||||
|     getWidget(mHistory, "History"); | ||||
|     mHistory->setOverflowToTheLeft(true); | ||||
|     mHistory->setMaxTextLength(1000000); | ||||
|     Widget* eventbox; | ||||
| 
 | ||||
|     //An EditBox cannot receive mouse click events, so we use an
 | ||||
|  | @ -62,36 +62,36 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager) | |||
|     eventbox->eventMouseWheel += MyGUI::newDelegate(this, &DialogueWindow::onMouseWheel); | ||||
| 
 | ||||
|     //Topics list
 | ||||
|     getWidget(topicsList, "TopicsList"); | ||||
|     topicsList->eventItemSelected += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic); | ||||
|     getWidget(mTopicsList, "TopicsList"); | ||||
|     mTopicsList->eventItemSelected += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr byeButton; | ||||
|     getWidget(byeButton, "ByeButton"); | ||||
|     byeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked); | ||||
| 
 | ||||
|     getWidget(pDispositionBar, "Disposition"); | ||||
|     getWidget(pDispositionText,"DispositionText"); | ||||
|     getWidget(mDispositionBar, "Disposition"); | ||||
|     getWidget(mDispositionText,"DispositionText"); | ||||
| 
 | ||||
|     static_cast<MyGUI::Window*>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &DialogueWindow::onWindowResize); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender) | ||||
| { | ||||
|     ISubWidgetText* t = history->getClient()->getSubWidgetText(); | ||||
|     ISubWidgetText* t = mHistory->getClient()->getSubWidgetText(); | ||||
|     if(t == nullptr) | ||||
|         return; | ||||
| 
 | ||||
|     const IntPoint& lastPressed = InputManager::getInstance().getLastPressedPosition(MyGUI::MouseButton::Left); | ||||
| 
 | ||||
|     size_t cursorPosition = t->getCursorPosition(lastPressed); | ||||
|     MyGUI::UString color = history->getColorAtPos(cursorPosition); | ||||
|     MyGUI::UString color = mHistory->getColorAtPos(cursorPosition); | ||||
| 
 | ||||
|     if (!mEnabled && color == "#572D21") | ||||
|         MWBase::Environment::get().getDialogueManager()->goodbyeSelected(); | ||||
| 
 | ||||
|     if(color != "#B29154") | ||||
|     { | ||||
|         UString key = history->getColorTextAt(cursorPosition); | ||||
|         UString key = mHistory->getColorTextAt(cursorPosition); | ||||
|         if(color == "#686EBA") MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(key)); | ||||
| 
 | ||||
|         if(color == "#572D21") MWBase::Environment::get().getDialogueManager()->questionAnswered(lower_string(key)); | ||||
|  | @ -100,15 +100,15 @@ void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender) | |||
| 
 | ||||
| void DialogueWindow::onWindowResize(MyGUI::Window* _sender) | ||||
| { | ||||
|     topicsList->adjustSize(); | ||||
|     mTopicsList->adjustSize(); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel) | ||||
| { | ||||
|     if (history->getVScrollPosition() - _rel*0.3 < 0) | ||||
|         history->setVScrollPosition(0); | ||||
|     if (mHistory->getVScrollPosition() - _rel*0.3 < 0) | ||||
|         mHistory->setVScrollPosition(0); | ||||
|     else | ||||
|         history->setVScrollPosition(history->getVScrollPosition() - _rel*0.3); | ||||
|         mHistory->setVScrollPosition(mHistory->getVScrollPosition() - _rel*0.3); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::onByeClicked(MyGUI::Widget* _sender) | ||||
|  | @ -135,40 +135,40 @@ void DialogueWindow::startDialogue(MWWorld::Ptr actor, std::string npcName) | |||
| { | ||||
|     mEnabled = true; | ||||
|     mPtr = actor; | ||||
|     topicsList->setEnabled(true); | ||||
|     mTopicsList->setEnabled(true); | ||||
|     setTitle(npcName); | ||||
| 
 | ||||
|     topicsList->clear(); | ||||
|     history->eraseText(0,history->getTextLength()); | ||||
|     mTopicsList->clear(); | ||||
|     mHistory->eraseText(0,mHistory->getTextLength()); | ||||
|     updateOptions(); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::setKeywords(std::list<std::string> keyWords) | ||||
| { | ||||
|     topicsList->clear(); | ||||
|     mTopicsList->clear(); | ||||
| 
 | ||||
|     bool anyService = mShowTrade; | ||||
| 
 | ||||
|     if (mShowTrade) | ||||
|         topicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sBarter")->str); | ||||
|         mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sBarter")->str); | ||||
| 
 | ||||
|     if (anyService) | ||||
|         topicsList->addSeparator(); | ||||
|         mTopicsList->addSeparator(); | ||||
| 
 | ||||
|     for(std::list<std::string>::iterator it = keyWords.begin(); it != keyWords.end(); ++it) | ||||
|     { | ||||
|         topicsList->addItem(*it); | ||||
|         mTopicsList->addItem(*it); | ||||
|     } | ||||
|     topicsList->adjustSize(); | ||||
|     mTopicsList->adjustSize(); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::removeKeyword(std::string keyWord) | ||||
| { | ||||
|     if(topicsList->hasItem(keyWord)) | ||||
|     if(mTopicsList->hasItem(keyWord)) | ||||
|     { | ||||
|         topicsList->removeItem(keyWord); | ||||
|         mTopicsList->removeItem(keyWord); | ||||
|     } | ||||
|     topicsList->adjustSize(); | ||||
|     mTopicsList->adjustSize(); | ||||
| } | ||||
| 
 | ||||
| void addColorInString(std::string& str, const std::string& keyword,std::string color1, std::string color2) | ||||
|  | @ -205,9 +205,9 @@ void addColorInString(std::string& str, const std::string& keyword,std::string c | |||
| std::string DialogueWindow::parseText(std::string text) | ||||
| { | ||||
|     bool separatorReached = false; // only parse topics that are below the separator (this prevents actions like "Barter" that are not topics from getting blue-colored)
 | ||||
|     for(unsigned int i = 0;i<topicsList->getItemCount();i++) | ||||
|     for(unsigned int i = 0;i<mTopicsList->getItemCount();i++) | ||||
|     { | ||||
|         std::string keyWord = topicsList->getItemNameAt(i); | ||||
|         std::string keyWord = mTopicsList->getItemNameAt(i); | ||||
|         if (separatorReached && keyWord != "") | ||||
|             addColorInString(text,keyWord,"#686EBA","#B29154"); | ||||
|         else | ||||
|  | @ -218,7 +218,7 @@ std::string DialogueWindow::parseText(std::string text) | |||
| 
 | ||||
| void DialogueWindow::addText(std::string text) | ||||
| { | ||||
|     history->addDialogText("#B29154"+parseText(text)+"#B29154"); | ||||
|     mHistory->addDialogText("#B29154"+parseText(text)+"#B29154"); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::addTitle(std::string text) | ||||
|  | @ -226,37 +226,37 @@ void DialogueWindow::addTitle(std::string text) | |||
|     // This is called from the dialogue manager, so text is
 | ||||
|     // case-smashed - thus we have to retrieve the correct case
 | ||||
|     // of the text through the topic list.
 | ||||
|     for (size_t i=0; i<topicsList->getItemCount(); ++i) | ||||
|     for (size_t i=0; i<mTopicsList->getItemCount(); ++i) | ||||
|     { | ||||
|         std::string item = topicsList->getItemNameAt(i); | ||||
|         std::string item = mTopicsList->getItemNameAt(i); | ||||
|         if (lower_string(item) == text) | ||||
|             text = item; | ||||
|     } | ||||
| 
 | ||||
|     history->addDialogHeading(text); | ||||
|     mHistory->addDialogHeading(text); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::askQuestion(std::string question) | ||||
| { | ||||
|     history->addDialogText("#572D21"+question+"#B29154"+" "); | ||||
|     mHistory->addDialogText("#572D21"+question+"#B29154"+" "); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::updateOptions() | ||||
| { | ||||
|     //Clear the list of topics
 | ||||
|     topicsList->clear(); | ||||
|     history->eraseText(0,history->getTextLength()); | ||||
|     mTopicsList->clear(); | ||||
|     mHistory->eraseText(0, mHistory->getTextLength()); | ||||
| 
 | ||||
|     pDispositionBar->setProgressRange(100); | ||||
|     pDispositionBar->setProgressPosition(40); | ||||
|     pDispositionText->eraseText(0,pDispositionText->getTextLength()); | ||||
|     pDispositionText->addText("#B29154"+std::string("40/100")+"#B29154"); | ||||
|     mDispositionBar->setProgressRange(100); | ||||
|     mDispositionBar->setProgressPosition(40); | ||||
|     mDispositionText->eraseText(0, mDispositionText->getTextLength()); | ||||
|     mDispositionText->addText("#B29154"+std::string("40/100")+"#B29154"); | ||||
| } | ||||
| 
 | ||||
| void DialogueWindow::goodbye() | ||||
| { | ||||
|     history->addDialogText("\n#572D21" + MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGoodbye")->str); | ||||
|     topicsList->setEnabled(false); | ||||
|     mHistory->addDialogText("\n#572D21" + MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGoodbye")->str); | ||||
|     mTopicsList->setEnabled(false); | ||||
|     mEnabled = false; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -73,10 +73,10 @@ namespace MWGui | |||
| 
 | ||||
|         bool mEnabled; | ||||
| 
 | ||||
|         DialogueHistory*     history; | ||||
|         Widgets::MWList*      topicsList; | ||||
|         MyGUI::ProgressPtr pDispositionBar; | ||||
|         MyGUI::EditPtr pDispositionText; | ||||
|         DialogueHistory*   mHistory; | ||||
|         Widgets::MWList*   mTopicsList; | ||||
|         MyGUI::ProgressPtr mDispositionBar; | ||||
|         MyGUI::EditPtr     mDispositionText; | ||||
|     }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -28,24 +28,24 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop) | |||
|     , health(NULL) | ||||
|     , magicka(NULL) | ||||
|     , stamina(NULL) | ||||
|     , weapImage(NULL) | ||||
|     , spellImage(NULL) | ||||
|     , weapStatus(NULL) | ||||
|     , spellStatus(NULL) | ||||
|     , effectBox(NULL) | ||||
|     , effect1(NULL) | ||||
|     , minimap(NULL) | ||||
|     , compass(NULL) | ||||
|     , crosshair(NULL) | ||||
|     , mWeapImage(NULL) | ||||
|     , mSpellImage(NULL) | ||||
|     , mWeapStatus(NULL) | ||||
|     , mSpellStatus(NULL) | ||||
|     , mEffectBox(NULL) | ||||
|     , mEffect1(NULL) | ||||
|     , mMinimap(NULL) | ||||
|     , mCompass(NULL) | ||||
|     , mCrosshair(NULL) | ||||
|     , fpsbox(NULL) | ||||
|     , fpscounter(NULL) | ||||
|     , trianglecounter(NULL) | ||||
|     , batchcounter(NULL) | ||||
|     , hmsBaseLeft(0) | ||||
|     , weapBoxBaseLeft(0) | ||||
|     , spellBoxBaseLeft(0) | ||||
|     , effectBoxBaseRight(0) | ||||
|     , minimapBoxBaseRight(0) | ||||
|     , mHealthManaStaminaBaseLeft(0) | ||||
|     , mWeapBoxBaseLeft(0) | ||||
|     , mSpellBoxBaseLeft(0) | ||||
|     , mEffectBoxBaseRight(0) | ||||
|     , mMinimapBoxBaseRight(0) | ||||
|     , mDragAndDrop(dragAndDrop) | ||||
|     , mCellNameTimer(0.0f) | ||||
|     , mCellNameBox(NULL) | ||||
|  | @ -62,7 +62,7 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop) | |||
|     getWidget(magicka, "Magicka"); | ||||
|     getWidget(stamina, "Stamina"); | ||||
| 
 | ||||
|     hmsBaseLeft = mHealthFrame->getLeft(); | ||||
|     mHealthManaStaminaBaseLeft = mHealthFrame->getLeft(); | ||||
| 
 | ||||
|     MyGUI::Widget *healthFrame, *magickaFrame, *fatigueFrame; | ||||
|     getWidget(healthFrame, "HealthFrame"); | ||||
|  | @ -75,33 +75,33 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop) | |||
|     const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize(); | ||||
| 
 | ||||
|     // Item and spell images and status bars
 | ||||
|     getWidget(weapBox, "WeapBox"); | ||||
|     getWidget(weapImage, "WeapImage"); | ||||
|     getWidget(weapStatus, "WeapStatus"); | ||||
|     weapBoxBaseLeft = weapBox->getLeft(); | ||||
|     weapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWeaponClicked); | ||||
|     getWidget(mWeapBox, "WeapBox"); | ||||
|     getWidget(mWeapImage, "WeapImage"); | ||||
|     getWidget(mWeapStatus, "WeapStatus"); | ||||
|     mWeapBoxBaseLeft = mWeapBox->getLeft(); | ||||
|     mWeapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWeaponClicked); | ||||
| 
 | ||||
|     getWidget(spellBox, "SpellBox"); | ||||
|     getWidget(spellImage, "SpellImage"); | ||||
|     getWidget(spellStatus, "SpellStatus"); | ||||
|     spellBoxBaseLeft = spellBox->getLeft(); | ||||
|     spellBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked); | ||||
|     getWidget(mSpellBox, "SpellBox"); | ||||
|     getWidget(mSpellImage, "SpellImage"); | ||||
|     getWidget(mSpellStatus, "SpellStatus"); | ||||
|     mSpellBoxBaseLeft = mSpellBox->getLeft(); | ||||
|     mSpellBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked); | ||||
| 
 | ||||
|     getWidget(effectBox, "EffectBox"); | ||||
|     getWidget(effect1, "Effect1"); | ||||
|     effectBoxBaseRight = viewSize.width - effectBox->getRight(); | ||||
|     effectBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked); | ||||
|     getWidget(mEffectBox, "EffectBox"); | ||||
|     getWidget(mEffect1, "Effect1"); | ||||
|     mEffectBoxBaseRight = viewSize.width - mEffectBox->getRight(); | ||||
|     mEffectBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked); | ||||
| 
 | ||||
|     getWidget(minimapBox, "MiniMapBox"); | ||||
|     minimapBoxBaseRight = viewSize.width - minimapBox->getRight(); | ||||
|     minimapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMapClicked); | ||||
|     getWidget(minimap, "MiniMap"); | ||||
|     getWidget(compass, "Compass"); | ||||
|     getWidget(mMinimapBox, "MiniMapBox"); | ||||
|     mMinimapBoxBaseRight = viewSize.width - mMinimapBox->getRight(); | ||||
|     mMinimapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMapClicked); | ||||
|     getWidget(mMinimap, "MiniMap"); | ||||
|     getWidget(mCompass, "Compass"); | ||||
| 
 | ||||
|     getWidget(mCellNameBox, "CellName"); | ||||
|     getWidget(mWeaponSpellBox, "WeaponSpellName"); | ||||
| 
 | ||||
|     getWidget(crosshair, "Crosshair"); | ||||
|     getWidget(mCrosshair, "Crosshair"); | ||||
| 
 | ||||
|     setFpsLevel(fpsLevel); | ||||
| 
 | ||||
|  | @ -110,7 +110,7 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop) | |||
| 
 | ||||
|     setEffect("icons\\s\\tx_s_chameleon.dds"); | ||||
| 
 | ||||
|     LocalMapBase::init(minimap, compass, this); | ||||
|     LocalMapBase::init(mMinimap, mCompass, this); | ||||
| 
 | ||||
|     mMainWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWorldClicked); | ||||
|     mMainWidget->eventMouseMove += MyGUI::newDelegate(this, &HUD::onWorldMouseOver); | ||||
|  | @ -159,7 +159,7 @@ void HUD::setBatchCount(unsigned int count) | |||
| 
 | ||||
| void HUD::setEffect(const char *img) | ||||
| { | ||||
|     effect1->setImageTexture(img); | ||||
|     mEffect1->setImageTexture(img); | ||||
| } | ||||
| 
 | ||||
| void HUD::setValue(const std::string& id, const MWMechanics::DynamicStat<int>& value) | ||||
|  | @ -202,10 +202,10 @@ void HUD::setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellV | |||
| { | ||||
|     int weapDx = 0, spellDx = 0; | ||||
|     if (!hmsVisible) | ||||
|         spellDx = weapDx = weapBoxBaseLeft - hmsBaseLeft; | ||||
|         spellDx = weapDx = mWeapBoxBaseLeft - mHealthManaStaminaBaseLeft; | ||||
| 
 | ||||
|     if (!weapVisible) | ||||
|         spellDx += spellBoxBaseLeft - weapBoxBaseLeft; | ||||
|         spellDx += mSpellBoxBaseLeft - mWeapBoxBaseLeft; | ||||
| 
 | ||||
|     mWeaponVisible = weapVisible; | ||||
|     mSpellVisible = spellVisible; | ||||
|  | @ -215,10 +215,10 @@ void HUD::setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellV | |||
|     health->setVisible(hmsVisible); | ||||
|     stamina->setVisible(hmsVisible); | ||||
|     magicka->setVisible(hmsVisible); | ||||
|     weapBox->setPosition(weapBoxBaseLeft - weapDx, weapBox->getTop()); | ||||
|     weapBox->setVisible(weapVisible); | ||||
|     spellBox->setPosition(spellBoxBaseLeft - spellDx, spellBox->getTop()); | ||||
|     spellBox->setVisible(spellVisible); | ||||
|     mWeapBox->setPosition(mWeapBoxBaseLeft - weapDx, mWeapBox->getTop()); | ||||
|     mWeapBox->setVisible(weapVisible); | ||||
|     mSpellBox->setPosition(mSpellBoxBaseLeft - spellDx, mSpellBox->getTop()); | ||||
|     mSpellBox->setVisible(spellVisible); | ||||
| } | ||||
| 
 | ||||
| void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible) | ||||
|  | @ -228,12 +228,12 @@ void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible | |||
|     // effect box can have variable width -> variable left coordinate
 | ||||
|     int effectsDx = 0; | ||||
|     if (!minimapBoxVisible) | ||||
|         effectsDx = (viewSize.width - minimapBoxBaseRight) - (viewSize.width - effectBoxBaseRight); | ||||
|         effectsDx = (viewSize.width - mMinimapBoxBaseRight) - (viewSize.width - mEffectBoxBaseRight); | ||||
| 
 | ||||
|     mMapVisible = minimapBoxVisible; | ||||
|     minimapBox->setVisible(minimapBoxVisible); | ||||
|     effectBox->setPosition((viewSize.width - effectBoxBaseRight) - effectBox->getWidth() + effectsDx, effectBox->getTop()); | ||||
|     effectBox->setVisible(effectBoxVisible); | ||||
|     mMinimapBox->setVisible(minimapBoxVisible); | ||||
|     mEffectBox->setPosition((viewSize.width - mEffectBoxBaseRight) - mEffectBox->getWidth() + effectsDx, mEffectBox->getTop()); | ||||
|     mEffectBox->setVisible(effectBoxVisible); | ||||
| } | ||||
| 
 | ||||
| void HUD::onWorldClicked(MyGUI::Widget* _sender) | ||||
|  | @ -395,14 +395,14 @@ void HUD::setSelectedSpell(const std::string& spellId, int successChancePercent) | |||
|         mWeaponSpellBox->setVisible(true); | ||||
|     } | ||||
| 
 | ||||
|     spellStatus->setProgressRange(100); | ||||
|     spellStatus->setProgressPosition(successChancePercent); | ||||
|     mSpellStatus->setProgressRange(100); | ||||
|     mSpellStatus->setProgressPosition(successChancePercent); | ||||
| 
 | ||||
|     if (spellImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(spellImage->getChildAt(0)); | ||||
|     if (mSpellImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(mSpellImage->getChildAt(0)); | ||||
| 
 | ||||
|     spellBox->setUserString("ToolTipType", "Spell"); | ||||
|     spellBox->setUserString("Spell", spellId); | ||||
|     mSpellBox->setUserString("ToolTipType", "Spell"); | ||||
|     mSpellBox->setUserString("Spell", spellId); | ||||
| 
 | ||||
|     // use the icon of the first effect
 | ||||
|     const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld()->getStore().magicEffects.find(spell->effects.list.front().effectID); | ||||
|  | @ -411,7 +411,7 @@ void HUD::setSelectedSpell(const std::string& spellId, int successChancePercent) | |||
|     icon.insert(slashPos+1, "b_"); | ||||
|     icon = std::string("icons\\") + icon; | ||||
|     Widgets::fixTexturePath(icon); | ||||
|     spellImage->setImageTexture(icon); | ||||
|     mSpellImage->setImageTexture(icon); | ||||
| } | ||||
| 
 | ||||
| void HUD::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) | ||||
|  | @ -425,17 +425,17 @@ void HUD::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) | |||
|         mWeaponSpellBox->setVisible(true); | ||||
|     } | ||||
| 
 | ||||
|     spellStatus->setProgressRange(100); | ||||
|     spellStatus->setProgressPosition(chargePercent); | ||||
|     mSpellStatus->setProgressRange(100); | ||||
|     mSpellStatus->setProgressPosition(chargePercent); | ||||
| 
 | ||||
|     if (spellImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(spellImage->getChildAt(0)); | ||||
|     if (mSpellImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(mSpellImage->getChildAt(0)); | ||||
| 
 | ||||
|     spellBox->setUserString("ToolTipType", "ItemPtr"); | ||||
|     spellBox->setUserData(item); | ||||
|     mSpellBox->setUserString("ToolTipType", "ItemPtr"); | ||||
|     mSpellBox->setUserData(item); | ||||
| 
 | ||||
|     spellImage->setImageTexture("textures\\menu_icon_magic_mini.dds"); | ||||
|     MyGUI::ImageBox* itemBox = spellImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1) | ||||
|     mSpellImage->setImageTexture("textures\\menu_icon_magic_mini.dds"); | ||||
|     MyGUI::ImageBox* itemBox = mSpellImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1) | ||||
|         , MyGUI::Align::Stretch); | ||||
| 
 | ||||
|     std::string path = std::string("icons\\"); | ||||
|  | @ -456,14 +456,14 @@ void HUD::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent) | |||
|         mWeaponSpellBox->setVisible(true); | ||||
|     } | ||||
| 
 | ||||
|     weapBox->setUserString("ToolTipType", "ItemPtr"); | ||||
|     weapBox->setUserData(item); | ||||
|     mWeapBox->setUserString("ToolTipType", "ItemPtr"); | ||||
|     mWeapBox->setUserData(item); | ||||
| 
 | ||||
|     weapStatus->setProgressRange(100); | ||||
|     weapStatus->setProgressPosition(durabilityPercent); | ||||
|     mWeapStatus->setProgressRange(100); | ||||
|     mWeapStatus->setProgressPosition(durabilityPercent); | ||||
| 
 | ||||
|     if (weapImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(weapImage->getChildAt(0)); | ||||
|     if (mWeapImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(mWeapImage->getChildAt(0)); | ||||
| 
 | ||||
|     std::string path = std::string("icons\\"); | ||||
|     path+=MWWorld::Class::get(item).getInventoryIcon(item); | ||||
|  | @ -471,14 +471,14 @@ void HUD::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent) | |||
| 
 | ||||
|     if (MWWorld::Class::get(item).getEnchantment(item) != "") | ||||
|     { | ||||
|         weapImage->setImageTexture("textures\\menu_icon_magic_mini.dds"); | ||||
|         MyGUI::ImageBox* itemBox = weapImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1) | ||||
|         mWeapImage->setImageTexture("textures\\menu_icon_magic_mini.dds"); | ||||
|         MyGUI::ImageBox* itemBox = mWeapImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1) | ||||
|             , MyGUI::Align::Stretch); | ||||
|         itemBox->setImageTexture(path); | ||||
|         itemBox->setNeedMouseFocus(false); | ||||
|     } | ||||
|     else | ||||
|         weapImage->setImageTexture(path); | ||||
|         mWeapImage->setImageTexture(path); | ||||
| } | ||||
| 
 | ||||
| void HUD::unsetSelectedSpell() | ||||
|  | @ -492,12 +492,12 @@ void HUD::unsetSelectedSpell() | |||
|         mWeaponSpellBox->setVisible(true); | ||||
|     } | ||||
| 
 | ||||
|     if (spellImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(spellImage->getChildAt(0)); | ||||
|     spellStatus->setProgressRange(100); | ||||
|     spellStatus->setProgressPosition(0); | ||||
|     spellImage->setImageTexture(""); | ||||
|     spellBox->clearUserStrings(); | ||||
|     if (mSpellImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(mSpellImage->getChildAt(0)); | ||||
|     mSpellStatus->setProgressRange(100); | ||||
|     mSpellStatus->setProgressPosition(0); | ||||
|     mSpellImage->setImageTexture(""); | ||||
|     mSpellBox->clearUserStrings(); | ||||
| } | ||||
| 
 | ||||
| void HUD::unsetSelectedWeapon() | ||||
|  | @ -511,10 +511,10 @@ void HUD::unsetSelectedWeapon() | |||
|         mWeaponSpellBox->setVisible(true); | ||||
|     } | ||||
| 
 | ||||
|     if (weapImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(weapImage->getChildAt(0)); | ||||
|     weapStatus->setProgressRange(100); | ||||
|     weapStatus->setProgressPosition(0); | ||||
|     weapImage->setImageTexture("icons\\k\\stealth_handtohand.dds"); | ||||
|     weapBox->clearUserStrings(); | ||||
|     if (mWeapImage->getChildCount()) | ||||
|         MyGUI::Gui::getInstance().destroyWidget(mWeapImage->getChildAt(0)); | ||||
|     mWeapStatus->setProgressRange(100); | ||||
|     mWeapStatus->setProgressPosition(0); | ||||
|     mWeapImage->setImageTexture("icons\\k\\stealth_handtohand.dds"); | ||||
|     mWeapBox->clearUserStrings(); | ||||
| } | ||||
|  |  | |||
|  | @ -37,14 +37,14 @@ namespace MWGui | |||
| 
 | ||||
|         MyGUI::ProgressPtr health, magicka, stamina; | ||||
|         MyGUI::Widget* mHealthFrame; | ||||
|         MyGUI::Widget *weapBox, *spellBox; | ||||
|         MyGUI::ImageBox *weapImage, *spellImage; | ||||
|         MyGUI::ProgressPtr weapStatus, spellStatus; | ||||
|         MyGUI::Widget *effectBox, *minimapBox; | ||||
|         MyGUI::ImageBox* effect1; | ||||
|         MyGUI::ScrollView* minimap; | ||||
|         MyGUI::ImageBox* compass; | ||||
|         MyGUI::ImageBox* crosshair; | ||||
|         MyGUI::Widget *mWeapBox, *mSpellBox; | ||||
|         MyGUI::ImageBox *mWeapImage, *mSpellImage; | ||||
|         MyGUI::ProgressPtr mWeapStatus, mSpellStatus; | ||||
|         MyGUI::Widget *mEffectBox, *mMinimapBox; | ||||
|         MyGUI::ImageBox* mEffect1; | ||||
|         MyGUI::ScrollView* mMinimap; | ||||
|         MyGUI::ImageBox* mCompass; | ||||
|         MyGUI::ImageBox* mCrosshair; | ||||
|         MyGUI::TextBox* mCellNameBox; | ||||
|         MyGUI::TextBox* mWeaponSpellBox; | ||||
| 
 | ||||
|  | @ -55,9 +55,9 @@ namespace MWGui | |||
| 
 | ||||
|     private: | ||||
|         // bottom left elements
 | ||||
|         int hmsBaseLeft, weapBoxBaseLeft, spellBoxBaseLeft; | ||||
|         int mHealthManaStaminaBaseLeft, mWeapBoxBaseLeft, mSpellBoxBaseLeft; | ||||
|         // bottom right elements
 | ||||
|         int minimapBoxBaseRight, effectBoxBaseRight; | ||||
|         int mMinimapBoxBaseRight, mEffectBoxBaseRight; | ||||
| 
 | ||||
|         DragAndDrop* mDragAndDrop; | ||||
| 
 | ||||
|  |  | |||
|  | @ -84,7 +84,7 @@ book formatText(std::string text,book mBook,int maxLine, int lineSize) | |||
| 
 | ||||
| MWGui::JournalWindow::JournalWindow (WindowManager& parWindowManager) | ||||
|     : WindowBase("openmw_journal.layout", parWindowManager) | ||||
|     , lastPos(0) | ||||
|     , mLastPos(0) | ||||
|     , mVisible(false) | ||||
| { | ||||
|     //setCoord(0,0,498, 342);
 | ||||
|  | @ -148,19 +148,19 @@ void MWGui::JournalWindow::open() | |||
|         { | ||||
|             if(left) | ||||
|             { | ||||
|                 leftPages.push_back(*it); | ||||
|                 mLeftPages.push_back(*it); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 rightPages.push_back(*it); | ||||
|                 mRightPages.push_back(*it); | ||||
|             } | ||||
|             left = !left; | ||||
|         } | ||||
|         if(!left) rightPages.push_back(""); | ||||
|         if(!left) mRightPages.push_back(""); | ||||
| 
 | ||||
|         mPageNumber = leftPages.size()-1; | ||||
|         displayLeftText(leftPages[mPageNumber]); | ||||
|         displayRightText(rightPages[mPageNumber]); | ||||
|         mPageNumber = mLeftPages.size()-1; | ||||
|         displayLeftText(mLeftPages[mPageNumber]); | ||||
|         displayRightText(mRightPages[mPageNumber]); | ||||
| 
 | ||||
|     } | ||||
|     else | ||||
|  | @ -184,13 +184,13 @@ void MWGui::JournalWindow::displayRightText(std::string text) | |||
| 
 | ||||
| void MWGui::JournalWindow::notifyNextPage(MyGUI::WidgetPtr _sender) | ||||
| { | ||||
|     if(mPageNumber < int(leftPages.size())-1) | ||||
|     if(mPageNumber < int(mLeftPages.size())-1) | ||||
|     { | ||||
|         std::string nextSound = "book page2"; | ||||
|         MWBase::Environment::get().getSoundManager()->playSound (nextSound, 1.0, 1.0); | ||||
|         mPageNumber = mPageNumber + 1; | ||||
|         displayLeftText(leftPages[mPageNumber]); | ||||
|         displayRightText(rightPages[mPageNumber]); | ||||
|         displayLeftText(mLeftPages[mPageNumber]); | ||||
|         displayRightText(mRightPages[mPageNumber]); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -201,7 +201,7 @@ void MWGui::JournalWindow::notifyPrevPage(MyGUI::WidgetPtr _sender) | |||
|         std::string prevSound = "book page"; | ||||
|         MWBase::Environment::get().getSoundManager()->playSound (prevSound, 1.0, 1.0); | ||||
|         mPageNumber = mPageNumber - 1; | ||||
|         displayLeftText(leftPages[mPageNumber]); | ||||
|         displayRightText(rightPages[mPageNumber]); | ||||
|         displayLeftText(mLeftPages[mPageNumber]); | ||||
|         displayRightText(mRightPages[mPageNumber]); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -31,17 +31,17 @@ namespace MWGui | |||
|             void notifyNextPage(MyGUI::WidgetPtr _sender); | ||||
|             void notifyPrevPage(MyGUI::WidgetPtr _sender); | ||||
| 
 | ||||
|             static const int lineHeight; | ||||
|             static const int sLineHeight; | ||||
| 
 | ||||
|             MyGUI::WidgetPtr skillAreaWidget, skillClientWidget; | ||||
|             MyGUI::ScrollBar* skillScrollerWidget; | ||||
|             int lastPos, clientHeight; | ||||
|             MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget; | ||||
|             MyGUI::ScrollBar* mSkillScrollerWidget; | ||||
|             int mLastPos, mClientHeight; | ||||
|             MyGUI::EditPtr mLeftTextWidget; | ||||
|             MyGUI::EditPtr mRightTextWidget; | ||||
|             MyGUI::ButtonPtr mPrevBtn; | ||||
|             MyGUI::ButtonPtr mNextBtn; | ||||
|             std::vector<std::string> leftPages; | ||||
|             std::vector<std::string> rightPages; | ||||
|             std::vector<std::string> mLeftPages; | ||||
|             std::vector<std::string> mRightPages; | ||||
|             int mPageNumber; //store the number of the current left page
 | ||||
|             bool mVisible; | ||||
|     }; | ||||
|  |  | |||
|  | @ -149,7 +149,7 @@ int MessageBoxManager::readPressedButton () | |||
| MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::string& message) | ||||
|   : Layout("openmw_messagebox.layout") | ||||
|   , mMessageBoxManager(parMessageBoxManager) | ||||
|   , cMessage(message) | ||||
|   , mMessage(message) | ||||
| { | ||||
|     // defines
 | ||||
|     mFixedWidth = 300; | ||||
|  | @ -160,7 +160,7 @@ MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::strin | |||
|     getWidget(mMessageWidget, "message"); | ||||
| 
 | ||||
|     mMessageWidget->setOverflowToTheLeft(true); | ||||
|     mMessageWidget->setCaptionWithReplacing(cMessage); | ||||
|     mMessageWidget->setCaptionWithReplacing(mMessage); | ||||
| 
 | ||||
|     MyGUI::IntSize size; | ||||
|     size.width = mFixedWidth; | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ namespace MWGui | |||
|         protected: | ||||
|             MessageBoxManager& mMessageBoxManager; | ||||
|             int mHeight; | ||||
|             const std::string& cMessage; | ||||
|             const std::string& mMessage; | ||||
|             MyGUI::EditPtr mMessageWidget; | ||||
|             int mFixedWidth; | ||||
|             int mBottomPadding; | ||||
|  |  | |||
|  | @ -17,11 +17,11 @@ using namespace Widgets; | |||
| 
 | ||||
| RaceDialog::RaceDialog(WindowManager& parWindowManager) | ||||
|   : WindowBase("openmw_chargen_race.layout", parWindowManager) | ||||
|   , genderIndex(0) | ||||
|   , faceIndex(0) | ||||
|   , hairIndex(0) | ||||
|   , faceCount(10) | ||||
|   , hairCount(14) | ||||
|   , mGenderIndex(0) | ||||
|   , mFaceIndex(0) | ||||
|   , mHairIndex(0) | ||||
|   , mFaceCount(10) | ||||
|   , mHairCount(14) | ||||
| { | ||||
|     // Centre dialog
 | ||||
|     center(); | ||||
|  | @ -30,13 +30,13 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager) | |||
|     // real calls from outside the class later.
 | ||||
| 
 | ||||
|     setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance")); | ||||
|     getWidget(appearanceBox, "AppearanceBox"); | ||||
|     getWidget(mAppearanceBox, "AppearanceBox"); | ||||
| 
 | ||||
|     getWidget(headRotate, "HeadRotate"); | ||||
|     headRotate->setScrollRange(50); | ||||
|     headRotate->setScrollPosition(20); | ||||
|     headRotate->setScrollViewPage(10); | ||||
|     headRotate->eventScrollChangePosition += MyGUI::newDelegate(this, &RaceDialog::onHeadRotate); | ||||
|     getWidget(mHeadRotate, "HeadRotate"); | ||||
|     mHeadRotate->setScrollRange(50); | ||||
|     mHeadRotate->setScrollPosition(20); | ||||
|     mHeadRotate->setScrollViewPage(10); | ||||
|     mHeadRotate->eventScrollChangePosition += MyGUI::newDelegate(this, &RaceDialog::onHeadRotate); | ||||
| 
 | ||||
|     // Set up next/previous buttons
 | ||||
|     MyGUI::ButtonPtr prevButton, nextButton; | ||||
|  | @ -60,16 +60,16 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager) | |||
|     nextButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectNextHair); | ||||
| 
 | ||||
|     setText("RaceT", mWindowManager.getGameSettingString("sRaceMenu4", "Race")); | ||||
|     getWidget(raceList, "RaceList"); | ||||
|     raceList->setScrollVisible(true); | ||||
|     raceList->eventListSelectAccept += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); | ||||
|     raceList->eventListMouseItemActivate += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); | ||||
|     raceList->eventListChangePosition += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); | ||||
|     getWidget(mRaceList, "RaceList"); | ||||
|     mRaceList->setScrollVisible(true); | ||||
|     mRaceList->eventListSelectAccept += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); | ||||
|     mRaceList->eventListMouseItemActivate += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); | ||||
|     mRaceList->eventListChangePosition += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); | ||||
| 
 | ||||
|     setText("SkillsT", mWindowManager.getGameSettingString("sBonusSkillTitle", "Skill Bonus")); | ||||
|     getWidget(skillList, "SkillList"); | ||||
|     getWidget(mSkillList, "SkillList"); | ||||
|     setText("SpellPowerT", mWindowManager.getGameSettingString("sRaceMenu7", "Specials")); | ||||
|     getWidget(spellPowerList, "SpellPowerList"); | ||||
|     getWidget(mSpellPowerList, "SpellPowerList"); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr backButton; | ||||
|     getWidget(backButton, "BackButton"); | ||||
|  | @ -116,14 +116,14 @@ void RaceDialog::open() | |||
| 
 | ||||
| void RaceDialog::setRaceId(const std::string &raceId) | ||||
| { | ||||
|     currentRaceId = raceId; | ||||
|     raceList->setIndexSelected(MyGUI::ITEM_NONE); | ||||
|     size_t count = raceList->getItemCount(); | ||||
|     mCurrentRaceId = raceId; | ||||
|     mRaceList->setIndexSelected(MyGUI::ITEM_NONE); | ||||
|     size_t count = mRaceList->getItemCount(); | ||||
|     for (size_t i = 0; i < count; ++i) | ||||
|     { | ||||
|         if (boost::iequals(*raceList->getItemDataAt<std::string>(i), raceId)) | ||||
|         if (boost::iequals(*mRaceList->getItemDataAt<std::string>(i), raceId)) | ||||
|         { | ||||
|             raceList->setIndexSelected(i); | ||||
|             mRaceList->setIndexSelected(i); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  | @ -161,32 +161,32 @@ void RaceDialog::onHeadRotate(MyGUI::ScrollBar*, size_t _position) | |||
| 
 | ||||
| void RaceDialog::onSelectPreviousGender(MyGUI::Widget*) | ||||
| { | ||||
|     genderIndex = wrap(genderIndex - 1, 2); | ||||
|     mGenderIndex = wrap(mGenderIndex - 1, 2); | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::onSelectNextGender(MyGUI::Widget*) | ||||
| { | ||||
|     genderIndex = wrap(genderIndex + 1, 2); | ||||
|     mGenderIndex = wrap(mGenderIndex + 1, 2); | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::onSelectPreviousFace(MyGUI::Widget*) | ||||
| { | ||||
|     faceIndex = wrap(faceIndex - 1, faceCount); | ||||
|     mFaceIndex = wrap(mFaceIndex - 1, mFaceCount); | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::onSelectNextFace(MyGUI::Widget*) | ||||
| { | ||||
|     faceIndex = wrap(faceIndex + 1, faceCount); | ||||
|     mFaceIndex = wrap(mFaceIndex + 1, mFaceCount); | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::onSelectPreviousHair(MyGUI::Widget*) | ||||
| { | ||||
|     hairIndex = wrap(hairIndex - 1, hairCount); | ||||
|     mHairIndex = wrap(mHairIndex - 1, mHairCount); | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::onSelectNextHair(MyGUI::Widget*) | ||||
| { | ||||
|     hairIndex = wrap(hairIndex - 1, hairCount); | ||||
|     mHairIndex = wrap(mHairIndex - 1, mHairCount); | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index) | ||||
|  | @ -194,11 +194,11 @@ void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index) | |||
|     if (_index == MyGUI::ITEM_NONE) | ||||
|         return; | ||||
| 
 | ||||
|     const std::string *raceId = raceList->getItemDataAt<std::string>(_index); | ||||
|     if (boost::iequals(currentRaceId, *raceId)) | ||||
|     const std::string *raceId = mRaceList->getItemDataAt<std::string>(_index); | ||||
|     if (boost::iequals(mCurrentRaceId, *raceId)) | ||||
|         return; | ||||
| 
 | ||||
|     currentRaceId = *raceId; | ||||
|     mCurrentRaceId = *raceId; | ||||
|     updateSkills(); | ||||
|     updateSpellPowers(); | ||||
| } | ||||
|  | @ -207,7 +207,7 @@ void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index) | |||
| 
 | ||||
| void RaceDialog::updateRaces() | ||||
| { | ||||
|     raceList->removeAllItems(); | ||||
|     mRaceList->removeAllItems(); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
| 
 | ||||
|  | @ -221,30 +221,30 @@ void RaceDialog::updateRaces() | |||
|         if (!playable) // Only display playable races
 | ||||
|             continue; | ||||
| 
 | ||||
|         raceList->addItem(race.name, it->first); | ||||
|         if (boost::iequals(it->first, currentRaceId)) | ||||
|             raceList->setIndexSelected(index); | ||||
|         mRaceList->addItem(race.name, it->first); | ||||
|         if (boost::iequals(it->first, mCurrentRaceId)) | ||||
|             mRaceList->setIndexSelected(index); | ||||
|         ++index; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void RaceDialog::updateSkills() | ||||
| { | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = skillItems.begin(); it != skillItems.end(); ++it) | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = mSkillItems.begin(); it != mSkillItems.end(); ++it) | ||||
|     { | ||||
|         MyGUI::Gui::getInstance().destroyWidget(*it); | ||||
|     } | ||||
|     skillItems.clear(); | ||||
|     mSkillItems.clear(); | ||||
| 
 | ||||
|     if (currentRaceId.empty()) | ||||
|     if (mCurrentRaceId.empty()) | ||||
|         return; | ||||
| 
 | ||||
|     MWSkillPtr skillWidget; | ||||
|     const int lineHeight = 18; | ||||
|     MyGUI::IntCoord coord1(0, 0, skillList->getWidth(), 18); | ||||
|     MyGUI::IntCoord coord1(0, 0, mSkillList->getWidth(), 18); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
|     const ESM::Race *race = store.races.find(currentRaceId); | ||||
|     const ESM::Race *race = store.races.find(mCurrentRaceId); | ||||
|     int count = sizeof(race->data.bonus)/sizeof(race->data.bonus[0]); // TODO: Find a portable macro for this ARRAYSIZE?
 | ||||
|     for (int i = 0; i < count; ++i) | ||||
|     { | ||||
|  | @ -252,7 +252,7 @@ void RaceDialog::updateSkills() | |||
|         if (skillId < 0 || skillId > ESM::Skill::Length) // Skip unknown skill indexes
 | ||||
|             continue; | ||||
| 
 | ||||
|         skillWidget = skillList->createWidget<MWSkill>("MW_StatNameValue", coord1, MyGUI::Align::Default, | ||||
|         skillWidget = mSkillList->createWidget<MWSkill>("MW_StatNameValue", coord1, MyGUI::Align::Default, | ||||
|                                                        std::string("Skill") + boost::lexical_cast<std::string>(i)); | ||||
|         skillWidget->setWindowManager(&mWindowManager); | ||||
|         skillWidget->setSkillNumber(skillId); | ||||
|  | @ -260,7 +260,7 @@ void RaceDialog::updateSkills() | |||
|         ToolTips::createSkillToolTip(skillWidget, skillId); | ||||
| 
 | ||||
| 
 | ||||
|         skillItems.push_back(skillWidget); | ||||
|         mSkillItems.push_back(skillWidget); | ||||
| 
 | ||||
|         coord1.top += lineHeight; | ||||
|     } | ||||
|  | @ -268,34 +268,34 @@ void RaceDialog::updateSkills() | |||
| 
 | ||||
| void RaceDialog::updateSpellPowers() | ||||
| { | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = spellPowerItems.begin(); it != spellPowerItems.end(); ++it) | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = mSpellPowerItems.begin(); it != mSpellPowerItems.end(); ++it) | ||||
|     { | ||||
|         MyGUI::Gui::getInstance().destroyWidget(*it); | ||||
|     } | ||||
|     spellPowerItems.clear(); | ||||
|     mSpellPowerItems.clear(); | ||||
| 
 | ||||
|     if (currentRaceId.empty()) | ||||
|     if (mCurrentRaceId.empty()) | ||||
|         return; | ||||
| 
 | ||||
|     MWSpellPtr spellPowerWidget; | ||||
|     const int lineHeight = 18; | ||||
|     MyGUI::IntCoord coord(0, 0, spellPowerList->getWidth(), 18); | ||||
|     MyGUI::IntCoord coord(0, 0, mSpellPowerList->getWidth(), 18); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
|     const ESM::Race *race = store.races.find(currentRaceId); | ||||
|     const ESM::Race *race = store.races.find(mCurrentRaceId); | ||||
| 
 | ||||
|     std::vector<std::string>::const_iterator it = race->powers.list.begin(); | ||||
|     std::vector<std::string>::const_iterator end = race->powers.list.end(); | ||||
|     for (int i = 0; it != end; ++it) | ||||
|     { | ||||
|         const std::string &spellpower = *it; | ||||
|         spellPowerWidget = spellPowerList->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("SpellPower") + boost::lexical_cast<std::string>(i)); | ||||
|         spellPowerWidget = mSpellPowerList->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("SpellPower") + boost::lexical_cast<std::string>(i)); | ||||
|         spellPowerWidget->setWindowManager(&mWindowManager); | ||||
|         spellPowerWidget->setSpellId(spellpower); | ||||
|         spellPowerWidget->setUserString("ToolTipType", "Spell"); | ||||
|         spellPowerWidget->setUserString("Spell", spellpower); | ||||
| 
 | ||||
|         spellPowerItems.push_back(spellPowerWidget); | ||||
|         mSpellPowerItems.push_back(spellPowerWidget); | ||||
| 
 | ||||
|         coord.top += lineHeight; | ||||
|         ++i; | ||||
|  |  | |||
|  | @ -32,13 +32,13 @@ namespace MWGui | |||
|             GM_Female | ||||
|         }; | ||||
| 
 | ||||
|         const std::string &getRaceId() const { return currentRaceId; } | ||||
|         Gender getGender() const { return genderIndex == 0 ? GM_Male : GM_Female; } | ||||
|         const std::string &getRaceId() const { return mCurrentRaceId; } | ||||
|         Gender getGender() const { return mGenderIndex == 0 ? GM_Male : GM_Female; } | ||||
|         // getFace()
 | ||||
|         // getHair()
 | ||||
| 
 | ||||
|         void setRaceId(const std::string &raceId); | ||||
|         void setGender(Gender gender) { genderIndex = gender == GM_Male ? 0 : 1; } | ||||
|         void setGender(Gender gender) { mGenderIndex = gender == GM_Male ? 0 : 1; } | ||||
|         // setFace()
 | ||||
|         // setHair()
 | ||||
| 
 | ||||
|  | @ -75,20 +75,20 @@ namespace MWGui | |||
|         void updateSkills(); | ||||
|         void updateSpellPowers(); | ||||
| 
 | ||||
|         MyGUI::CanvasPtr  appearanceBox; | ||||
|         MyGUI::ListBox*    raceList; | ||||
|         MyGUI::ScrollBar* headRotate; | ||||
|         MyGUI::CanvasPtr  mAppearanceBox; | ||||
|         MyGUI::ListBox*   mRaceList; | ||||
|         MyGUI::ScrollBar* mHeadRotate; | ||||
| 
 | ||||
|         MyGUI::WidgetPtr skillList; | ||||
|         std::vector<MyGUI::WidgetPtr> skillItems; | ||||
|         MyGUI::WidgetPtr mSkillList; | ||||
|         std::vector<MyGUI::WidgetPtr> mSkillItems; | ||||
| 
 | ||||
|         MyGUI::WidgetPtr spellPowerList; | ||||
|         std::vector<MyGUI::WidgetPtr> spellPowerItems; | ||||
|         MyGUI::WidgetPtr mSpellPowerList; | ||||
|         std::vector<MyGUI::WidgetPtr> mSpellPowerItems; | ||||
| 
 | ||||
|         int genderIndex, faceIndex, hairIndex; | ||||
|         int faceCount, hairCount; | ||||
|         int mGenderIndex, mFaceIndex, mHairIndex; | ||||
|         int mFaceCount, mHairCount; | ||||
| 
 | ||||
|         std::string currentRaceId; | ||||
|         std::string mCurrentRaceId; | ||||
|     }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -17,49 +17,49 @@ | |||
| using namespace MWGui; | ||||
| using namespace Widgets; | ||||
| 
 | ||||
| const int ReviewDialog::lineHeight = 18; | ||||
| const int ReviewDialog::sLineHeight = 18; | ||||
| 
 | ||||
| ReviewDialog::ReviewDialog(WindowManager& parWindowManager) | ||||
|     : WindowBase("openmw_chargen_review.layout", parWindowManager) | ||||
|     , lastPos(0) | ||||
|     , mLastPos(0) | ||||
| { | ||||
|     // Centre dialog
 | ||||
|     center(); | ||||
| 
 | ||||
|     // Setup static stats
 | ||||
|     ButtonPtr button; | ||||
|     getWidget(nameWidget, "NameText"); | ||||
|     getWidget(mNameWidget, "NameText"); | ||||
|     getWidget(button, "NameButton"); | ||||
|     adjustButtonSize(button); | ||||
|     button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onNameClicked);; | ||||
| 
 | ||||
|     getWidget(raceWidget, "RaceText"); | ||||
|     getWidget(mRaceWidget, "RaceText"); | ||||
|     getWidget(button, "RaceButton"); | ||||
|     adjustButtonSize(button); | ||||
|     button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onRaceClicked);; | ||||
| 
 | ||||
|     getWidget(classWidget, "ClassText"); | ||||
|     getWidget(mClassWidget, "ClassText"); | ||||
|     getWidget(button, "ClassButton"); | ||||
|     adjustButtonSize(button); | ||||
|     button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onClassClicked);; | ||||
| 
 | ||||
|     getWidget(birthSignWidget, "SignText"); | ||||
|     getWidget(mBirthSignWidget, "SignText"); | ||||
|     getWidget(button, "SignButton"); | ||||
|     adjustButtonSize(button); | ||||
|     button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onBirthSignClicked);; | ||||
| 
 | ||||
|     // Setup dynamic stats
 | ||||
|     getWidget(health, "Health"); | ||||
|     health->setTitle(mWindowManager.getGameSettingString("sHealth", "")); | ||||
|     health->setValue(45, 45); | ||||
|     getWidget(mHealth, "Health"); | ||||
|     mHealth->setTitle(mWindowManager.getGameSettingString("sHealth", "")); | ||||
|     mHealth->setValue(45, 45); | ||||
| 
 | ||||
|     getWidget(magicka, "Magicka"); | ||||
|     magicka->setTitle(mWindowManager.getGameSettingString("sMagic", "")); | ||||
|     magicka->setValue(50, 50); | ||||
|     getWidget(mMagicka, "Magicka"); | ||||
|     mMagicka->setTitle(mWindowManager.getGameSettingString("sMagic", "")); | ||||
|     mMagicka->setValue(50, 50); | ||||
| 
 | ||||
|     getWidget(fatigue, "Fatigue"); | ||||
|     fatigue->setTitle(mWindowManager.getGameSettingString("sFatigue", "")); | ||||
|     fatigue->setValue(160, 160); | ||||
|     getWidget(mFatigue, "Fatigue"); | ||||
|     mFatigue->setTitle(mWindowManager.getGameSettingString("sFatigue", "")); | ||||
|     mFatigue->setValue(160, 160); | ||||
| 
 | ||||
|     // Setup attributes
 | ||||
| 
 | ||||
|  | @ -67,24 +67,24 @@ ReviewDialog::ReviewDialog(WindowManager& parWindowManager) | |||
|     for (int idx = 0; idx < ESM::Attribute::Length; ++idx) | ||||
|     { | ||||
|         getWidget(attribute, std::string("Attribute") + boost::lexical_cast<std::string>(idx)); | ||||
|         attributeWidgets.insert(std::make_pair(static_cast<int>(ESM::Attribute::attributeIds[idx]), attribute)); | ||||
|         mAttributeWidgets.insert(std::make_pair(static_cast<int>(ESM::Attribute::attributeIds[idx]), attribute)); | ||||
|         attribute->setWindowManager(&mWindowManager); | ||||
|         attribute->setAttributeId(ESM::Attribute::attributeIds[idx]); | ||||
|         attribute->setAttributeValue(MWAttribute::AttributeValue(0, 0)); | ||||
|     } | ||||
| 
 | ||||
|     // Setup skills
 | ||||
|     getWidget(skillAreaWidget, "Skills"); | ||||
|     getWidget(skillClientWidget, "SkillClient"); | ||||
|     getWidget(skillScrollerWidget, "SkillScroller"); | ||||
|     skillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
|     skillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &ReviewDialog::onScrollChangePosition); | ||||
|     getWidget(mSkillAreaWidget, "Skills"); | ||||
|     getWidget(mSkillClientWidget, "SkillClient"); | ||||
|     getWidget(mSkillScrollerWidget, "SkillScroller"); | ||||
|     mSkillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
|     mSkillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &ReviewDialog::onScrollChangePosition); | ||||
|     updateScroller(); | ||||
| 
 | ||||
|     for (int i = 0; i < ESM::Skill::Length; ++i) | ||||
|     { | ||||
|         skillValues.insert(std::make_pair(i, MWMechanics::Stat<float>())); | ||||
|         skillWidgetMap.insert(std::make_pair(i, static_cast<MyGUI::TextBox*> (0))); | ||||
|         mSkillValues.insert(std::make_pair(i, MWMechanics::Stat<float>())); | ||||
|         mSkillWidgetMap.insert(std::make_pair(i, static_cast<MyGUI::TextBox*> (0))); | ||||
|     } | ||||
| 
 | ||||
|     static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &ReviewDialog::onWindowResize); | ||||
|  | @ -112,14 +112,14 @@ void ReviewDialog::open() | |||
| 
 | ||||
| void ReviewDialog::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos) | ||||
| { | ||||
|     int diff = lastPos - pos; | ||||
|     int diff = mLastPos - pos; | ||||
|     // Adjust position of all widget according to difference
 | ||||
|     if (diff == 0) | ||||
|         return; | ||||
|     lastPos = pos; | ||||
|     mLastPos = pos; | ||||
| 
 | ||||
|     std::vector<MyGUI::WidgetPtr>::const_iterator end = skillWidgets.end(); | ||||
|     for (std::vector<MyGUI::WidgetPtr>::const_iterator it = skillWidgets.begin(); it != end; ++it) | ||||
|     std::vector<MyGUI::WidgetPtr>::const_iterator end = mSkillWidgets.end(); | ||||
|     for (std::vector<MyGUI::WidgetPtr>::const_iterator it = mSkillWidgets.begin(); it != end; ++it) | ||||
|     { | ||||
|         (*it)->setCoord((*it)->getCoord() + MyGUI::IntPoint(0, diff)); | ||||
|     } | ||||
|  | @ -132,63 +132,63 @@ void ReviewDialog::onWindowResize(MyGUI::Window* window) | |||
| 
 | ||||
| void ReviewDialog::setPlayerName(const std::string &name) | ||||
| { | ||||
|     nameWidget->setCaption(name); | ||||
|     mNameWidget->setCaption(name); | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setRace(const std::string &raceId_) | ||||
| void ReviewDialog::setRace(const std::string &raceId) | ||||
| { | ||||
|     raceId = raceId_; | ||||
|     const ESM::Race *race = mWindowManager.getStore().races.search(raceId); | ||||
|     mRaceId = raceId; | ||||
|     const ESM::Race *race = mWindowManager.getStore().races.search(mRaceId); | ||||
|     if (race) | ||||
|     { | ||||
|         ToolTips::createRaceToolTip(raceWidget, race); | ||||
|         raceWidget->setCaption(race->name); | ||||
|         ToolTips::createRaceToolTip(mRaceWidget, race); | ||||
|         mRaceWidget->setCaption(race->name); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setClass(const ESM::Class& class_) | ||||
| { | ||||
|     klass = class_; | ||||
|     classWidget->setCaption(klass.name); | ||||
|     ToolTips::createClassToolTip(classWidget, klass); | ||||
|     mKlass = class_; | ||||
|     mClassWidget->setCaption(mKlass.name); | ||||
|     ToolTips::createClassToolTip(mClassWidget, mKlass); | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setBirthSign(const std::string& signId) | ||||
| { | ||||
|     birthSignId = signId; | ||||
|     const ESM::BirthSign *sign = mWindowManager.getStore().birthSigns.search(birthSignId); | ||||
|     mBirthSignId = signId; | ||||
|     const ESM::BirthSign *sign = mWindowManager.getStore().birthSigns.search(mBirthSignId); | ||||
|     if (sign) | ||||
|     { | ||||
|         birthSignWidget->setCaption(sign->name); | ||||
|         ToolTips::createBirthsignToolTip(birthSignWidget, birthSignId); | ||||
|         mBirthSignWidget->setCaption(sign->name); | ||||
|         ToolTips::createBirthsignToolTip(mBirthSignWidget, mBirthSignId); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setHealth(const MWMechanics::DynamicStat<int>& value) | ||||
| { | ||||
|     health->setValue(value.getCurrent(), value.getModified()); | ||||
|     mHealth->setValue(value.getCurrent(), value.getModified()); | ||||
|     std::string valStr =  boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified()); | ||||
|     health->setUserString("Caption_HealthDescription", "#{sHealthDesc}\n" + valStr); | ||||
|     mHealth->setUserString("Caption_HealthDescription", "#{sHealthDesc}\n" + valStr); | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setMagicka(const MWMechanics::DynamicStat<int>& value) | ||||
| { | ||||
|     magicka->setValue(value.getCurrent(), value.getModified()); | ||||
|     mMagicka->setValue(value.getCurrent(), value.getModified()); | ||||
|     std::string valStr =  boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified()); | ||||
|     magicka->setUserString("Caption_HealthDescription", "#{sIntDesc}\n" + valStr); | ||||
|     mMagicka->setUserString("Caption_HealthDescription", "#{sIntDesc}\n" + valStr); | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setFatigue(const MWMechanics::DynamicStat<int>& value) | ||||
| { | ||||
|     fatigue->setValue(value.getCurrent(), value.getModified()); | ||||
|     mFatigue->setValue(value.getCurrent(), value.getModified()); | ||||
|     std::string valStr =  boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified()); | ||||
|     fatigue->setUserString("Caption_HealthDescription", "#{sFatDesc}\n" + valStr); | ||||
|     mFatigue->setUserString("Caption_HealthDescription", "#{sFatDesc}\n" + valStr); | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const MWMechanics::Stat<int>& value) | ||||
| { | ||||
|     std::map<int, MWAttributePtr>::iterator attr = attributeWidgets.find(static_cast<int>(attributeId)); | ||||
|     if (attr == attributeWidgets.end()) | ||||
|     std::map<int, MWAttributePtr>::iterator attr = mAttributeWidgets.find(static_cast<int>(attributeId)); | ||||
|     if (attr == mAttributeWidgets.end()) | ||||
|         return; | ||||
| 
 | ||||
|     attr->second->setAttributeValue(value); | ||||
|  | @ -196,8 +196,8 @@ void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const M | |||
| 
 | ||||
| void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::Stat<float>& value) | ||||
| { | ||||
|     skillValues[skillId] = value; | ||||
|     MyGUI::TextBox* widget = skillWidgetMap[skillId]; | ||||
|     mSkillValues[skillId] = value; | ||||
|     MyGUI::TextBox* widget = mSkillWidgetMap[skillId]; | ||||
|     if (widget) | ||||
|     { | ||||
|         float modified = value.getModified(), base = value.getBase(); | ||||
|  | @ -216,20 +216,20 @@ void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanic | |||
| 
 | ||||
| void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vector<int>& minor) | ||||
| { | ||||
|     majorSkills = major; | ||||
|     minorSkills = minor; | ||||
|     mMajorSkills = major; | ||||
|     mMinorSkills = minor; | ||||
| 
 | ||||
|     // Update misc skills with the remaining skills not in major or minor
 | ||||
|     std::set<int> skillSet; | ||||
|     std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin())); | ||||
|     std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin())); | ||||
|     boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator end = ESM::Skill::skillIds.end(); | ||||
|     miscSkills.clear(); | ||||
|     mMiscSkills.clear(); | ||||
|     for (boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator it = ESM::Skill::skillIds.begin(); it != end; ++it) | ||||
|     { | ||||
|         int skill = *it; | ||||
|         if (skillSet.find(skill) == skillSet.end()) | ||||
|             miscSkills.push_back(skill); | ||||
|             mMiscSkills.push_back(skill); | ||||
|     } | ||||
| 
 | ||||
|     updateSkillArea(); | ||||
|  | @ -237,10 +237,10 @@ void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vec | |||
| 
 | ||||
| void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     MyGUI::ImageBox* separator = skillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default); | ||||
|     MyGUI::ImageBox* separator = mSkillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default); | ||||
|     separator->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
| 
 | ||||
|     skillWidgets.push_back(separator); | ||||
|     mSkillWidgets.push_back(separator); | ||||
| 
 | ||||
|     coord1.top += separator->getHeight(); | ||||
|     coord2.top += separator->getHeight(); | ||||
|  | @ -248,13 +248,13 @@ void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2 | |||
| 
 | ||||
| void ReviewDialog::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     MyGUI::TextBox* groupWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default); | ||||
|     MyGUI::TextBox* groupWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default); | ||||
|     groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
|     groupWidget->setCaption(label); | ||||
|     skillWidgets.push_back(groupWidget); | ||||
|     mSkillWidgets.push_back(groupWidget); | ||||
| 
 | ||||
|     coord1.top += lineHeight; | ||||
|     coord2.top += lineHeight; | ||||
|     coord1.top += sLineHeight; | ||||
|     coord2.top += sLineHeight; | ||||
| } | ||||
| 
 | ||||
| MyGUI::TextBox* ReviewDialog::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
|  | @ -262,20 +262,20 @@ MyGUI::TextBox* ReviewDialog::addValueItem(const std::string& text, const std::s | |||
|     MyGUI::TextBox* skillNameWidget; | ||||
|     MyGUI::TextBox* skillValueWidget; | ||||
| 
 | ||||
|     skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Default); | ||||
|     skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Default); | ||||
|     skillNameWidget->setCaption(text); | ||||
|     skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
| 
 | ||||
|     skillValueWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Top | MyGUI::Align::Right); | ||||
|     skillValueWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Top | MyGUI::Align::Right); | ||||
|     skillValueWidget->setCaption(value); | ||||
|     skillValueWidget->_setWidgetState(state); | ||||
|     skillValueWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
| 
 | ||||
|     skillWidgets.push_back(skillNameWidget); | ||||
|     skillWidgets.push_back(skillValueWidget); | ||||
|     mSkillWidgets.push_back(skillNameWidget); | ||||
|     mSkillWidgets.push_back(skillValueWidget); | ||||
| 
 | ||||
|     coord1.top += lineHeight; | ||||
|     coord2.top += lineHeight; | ||||
|     coord1.top += sLineHeight; | ||||
|     coord2.top += sLineHeight; | ||||
| 
 | ||||
|     return skillValueWidget; | ||||
| } | ||||
|  | @ -284,20 +284,20 @@ void ReviewDialog::addItem(const std::string& text, MyGUI::IntCoord &coord1, MyG | |||
| { | ||||
|     MyGUI::TextBox* skillNameWidget; | ||||
| 
 | ||||
|     skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default); | ||||
|     skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default); | ||||
|     skillNameWidget->setCaption(text); | ||||
|     skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); | ||||
| 
 | ||||
|     skillWidgets.push_back(skillNameWidget); | ||||
|     mSkillWidgets.push_back(skillNameWidget); | ||||
| 
 | ||||
|     coord1.top += lineHeight; | ||||
|     coord2.top += lineHeight; | ||||
|     coord1.top += sLineHeight; | ||||
|     coord2.top += sLineHeight; | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     // Add a line separator if there are items above
 | ||||
|     if (!skillWidgets.empty()) | ||||
|     if (!mSkillWidgets.empty()) | ||||
|     { | ||||
|         addSeparator(coord1, coord2); | ||||
|     } | ||||
|  | @ -312,7 +312,7 @@ void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId | |||
|             continue; | ||||
|         assert(skillId >= 0 && skillId < ESM::Skill::Length); | ||||
|         const std::string &skillNameId = ESMS::Skill::sSkillNameIds[skillId]; | ||||
|         const MWMechanics::Stat<float> &stat = skillValues.find(skillId)->second; | ||||
|         const MWMechanics::Stat<float> &stat = mSkillValues.find(skillId)->second; | ||||
|         float base = stat.getBase(); | ||||
|         float modified = stat.getModified(); | ||||
| 
 | ||||
|  | @ -325,44 +325,44 @@ void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId | |||
| 
 | ||||
|         for (int i=0; i<2; ++i) | ||||
|         { | ||||
|             ToolTips::createSkillToolTip(skillWidgets[skillWidgets.size()-1-i], skillId); | ||||
|             ToolTips::createSkillToolTip(mSkillWidgets[mSkillWidgets.size()-1-i], skillId); | ||||
|         } | ||||
| 
 | ||||
|         skillWidgetMap[skillId] = widget; | ||||
|         mSkillWidgetMap[skillId] = widget; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::updateSkillArea() | ||||
| { | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = skillWidgets.begin(); it != skillWidgets.end(); ++it) | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = mSkillWidgets.begin(); it != mSkillWidgets.end(); ++it) | ||||
|     { | ||||
|         MyGUI::Gui::getInstance().destroyWidget(*it); | ||||
|     } | ||||
|     skillWidgets.clear(); | ||||
|     mSkillWidgets.clear(); | ||||
| 
 | ||||
|     const int valueSize = 40; | ||||
|     MyGUI::IntCoord coord1(10, 0, skillClientWidget->getWidth() - (10 + valueSize), 18); | ||||
|     MyGUI::IntCoord coord1(10, 0, mSkillClientWidget->getWidth() - (10 + valueSize), 18); | ||||
|     MyGUI::IntCoord coord2(coord1.left + coord1.width, coord1.top, valueSize, coord1.height); | ||||
| 
 | ||||
|     if (!majorSkills.empty()) | ||||
|         addSkills(majorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2); | ||||
|     if (!mMajorSkills.empty()) | ||||
|         addSkills(mMajorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2); | ||||
| 
 | ||||
|     if (!minorSkills.empty()) | ||||
|         addSkills(minorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2); | ||||
|     if (!mMinorSkills.empty()) | ||||
|         addSkills(mMinorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2); | ||||
| 
 | ||||
|     if (!miscSkills.empty()) | ||||
|         addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2); | ||||
|     if (!mMiscSkills.empty()) | ||||
|         addSkills(mMiscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2); | ||||
| 
 | ||||
|     clientHeight = coord1.top; | ||||
|     mClientHeight = coord1.top; | ||||
|     updateScroller(); | ||||
| } | ||||
| 
 | ||||
| void ReviewDialog::updateScroller() | ||||
| { | ||||
|     skillScrollerWidget->setScrollRange(std::max(clientHeight - skillClientWidget->getHeight(), 0)); | ||||
|     skillScrollerWidget->setScrollPage(std::max(skillClientWidget->getHeight() - lineHeight, 0)); | ||||
|     if (clientHeight != 0) | ||||
|         skillScrollerWidget->setTrackSize( (skillAreaWidget->getHeight() / float(clientHeight)) * skillScrollerWidget->getLineSize() ); | ||||
|     mSkillScrollerWidget->setScrollRange(std::max(mClientHeight - mSkillClientWidget->getHeight(), 0)); | ||||
|     mSkillScrollerWidget->setScrollPage(std::max(mSkillClientWidget->getHeight() - sLineHeight, 0)); | ||||
|     if (mClientHeight != 0) | ||||
|         mSkillScrollerWidget->setTrackSize( (mSkillAreaWidget->getHeight() / float(mClientHeight)) * mSkillScrollerWidget->getLineSize() ); | ||||
| } | ||||
| 
 | ||||
| // widget controls
 | ||||
|  | @ -399,12 +399,12 @@ void ReviewDialog::onBirthSignClicked(MyGUI::Widget* _sender) | |||
| 
 | ||||
| void ReviewDialog::onMouseWheel(MyGUI::Widget* _sender, int _rel) | ||||
| { | ||||
|     if (skillScrollerWidget->getScrollPosition() - _rel*0.3 < 0) | ||||
|         skillScrollerWidget->setScrollPosition(0); | ||||
|     else if (skillScrollerWidget->getScrollPosition() - _rel*0.3 > skillScrollerWidget->getScrollRange()-1) | ||||
|         skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollRange()-1); | ||||
|     if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 < 0) | ||||
|         mSkillScrollerWidget->setScrollPosition(0); | ||||
|     else if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 > mSkillScrollerWidget->getScrollRange()-1) | ||||
|         mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollRange()-1); | ||||
|     else | ||||
|         skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollPosition() - _rel*0.3); | ||||
|         mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollPosition() - _rel*0.3); | ||||
| 
 | ||||
|     onScrollChangePosition(skillScrollerWidget, skillScrollerWidget->getScrollPosition()); | ||||
|     onScrollChangePosition(mSkillScrollerWidget, mSkillScrollerWidget->getScrollPosition()); | ||||
| } | ||||
|  |  | |||
|  | @ -82,23 +82,23 @@ namespace MWGui | |||
|         void onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos); | ||||
|         void onWindowResize(MyGUI::Window* window); | ||||
| 
 | ||||
|         static const int lineHeight; | ||||
|         static const int sLineHeight; | ||||
| 
 | ||||
|         MyGUI::TextBox *nameWidget, *raceWidget, *classWidget, *birthSignWidget; | ||||
|         MyGUI::WidgetPtr skillAreaWidget, skillClientWidget; | ||||
|         MyGUI::ScrollBar* skillScrollerWidget; | ||||
|         int lastPos, clientHeight; | ||||
|         MyGUI::TextBox *mNameWidget, *mRaceWidget, *mClassWidget, *mBirthSignWidget; | ||||
|         MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget; | ||||
|         MyGUI::ScrollBar* mSkillScrollerWidget; | ||||
|         int mLastPos, mClientHeight; | ||||
| 
 | ||||
|         Widgets::MWDynamicStatPtr health, magicka, fatigue; | ||||
|         Widgets::MWDynamicStatPtr mHealth, mMagicka, mFatigue; | ||||
| 
 | ||||
|         std::map<int, Widgets::MWAttributePtr> attributeWidgets; | ||||
|         std::map<int, Widgets::MWAttributePtr> mAttributeWidgets; | ||||
| 
 | ||||
|         SkillList majorSkills, minorSkills, miscSkills; | ||||
|         std::map<int, MWMechanics::Stat<float> > skillValues; | ||||
|         std::map<int, MyGUI::TextBox*> skillWidgetMap; | ||||
|         std::string name, raceId, birthSignId; | ||||
|         ESM::Class klass; | ||||
|         std::vector<MyGUI::WidgetPtr> skillWidgets; //< Skills and other information
 | ||||
|         SkillList mMajorSkills, mMinorSkills, mMiscSkills; | ||||
|         std::map<int, MWMechanics::Stat<float> > mSkillValues; | ||||
|         std::map<int, MyGUI::TextBox*> mSkillWidgetMap; | ||||
|         std::string mName, mRaceId, mBirthSignId; | ||||
|         ESM::Class mKlass; | ||||
|         std::vector<MyGUI::WidgetPtr> mSkillWidgets; //< Skills and other information
 | ||||
|     }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -19,26 +19,26 @@ | |||
| 
 | ||||
| 
 | ||||
| using namespace MWGui; | ||||
| const int StatsWindow::lineHeight = 18; | ||||
| const int StatsWindow::sLineHeight = 18; | ||||
| 
 | ||||
| StatsWindow::StatsWindow (WindowManager& parWindowManager) | ||||
|   : WindowPinnableBase("openmw_stats_window.layout", parWindowManager) | ||||
|   , skillAreaWidget(NULL) | ||||
|   , skillClientWidget(NULL) | ||||
|   , skillScrollerWidget(NULL) | ||||
|   , lastPos(0) | ||||
|   , clientHeight(0) | ||||
|   , majorSkills() | ||||
|   , minorSkills() | ||||
|   , miscSkills() | ||||
|   , skillValues() | ||||
|   , skillWidgetMap() | ||||
|   , factionWidgetMap() | ||||
|   , mSkillAreaWidget(NULL) | ||||
|   , mSkillClientWidget(NULL) | ||||
|   , mSkillScrollerWidget(NULL) | ||||
|   , mLastPos(0) | ||||
|   , mClientHeight(0) | ||||
|   , mMajorSkills() | ||||
|   , mMinorSkills() | ||||
|   , mMiscSkills() | ||||
|   , mSkillValues() | ||||
|   , mSkillWidgetMap() | ||||
|   , mFactionWidgetMap() | ||||
|   , mFactions() | ||||
|   , birthSignId() | ||||
|   , reputation(0) | ||||
|   , bounty(0) | ||||
|   , skillWidgets() | ||||
|   , mBirthSignId() | ||||
|   , mReputation(0) | ||||
|   , mBounty(0) | ||||
|   , mSkillWidgets() | ||||
|   , mChanged(true) | ||||
| { | ||||
|     setCoord(0,0,498, 342); | ||||
|  | @ -62,21 +62,21 @@ StatsWindow::StatsWindow (WindowManager& parWindowManager) | |||
|         setText (names[i][0], store.gameSettings.find (names[i][1])->str); | ||||
|     } | ||||
| 
 | ||||
|     getWidget(skillAreaWidget, "Skills"); | ||||
|     getWidget(skillClientWidget, "SkillClient"); | ||||
|     getWidget(skillScrollerWidget, "SkillScroller"); | ||||
|     getWidget(mSkillAreaWidget, "Skills"); | ||||
|     getWidget(mSkillClientWidget, "SkillClient"); | ||||
|     getWidget(mSkillScrollerWidget, "SkillScroller"); | ||||
|     getWidget(mLeftPane, "LeftPane"); | ||||
|     getWidget(mRightPane, "RightPane"); | ||||
| 
 | ||||
|     skillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
|     mSkillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
| 
 | ||||
|     skillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &StatsWindow::onScrollChangePosition); | ||||
|     mSkillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &StatsWindow::onScrollChangePosition); | ||||
|     updateScroller(); | ||||
| 
 | ||||
|     for (int i = 0; i < ESM::Skill::Length; ++i) | ||||
|     { | ||||
|         skillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>())); | ||||
|         skillWidgetMap.insert(std::pair<int, MyGUI::TextBox*>(i, nullptr)); | ||||
|         mSkillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>())); | ||||
|         mSkillWidgetMap.insert(std::pair<int, MyGUI::TextBox*>(i, nullptr)); | ||||
|     } | ||||
| 
 | ||||
|     MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget); | ||||
|  | @ -85,14 +85,14 @@ StatsWindow::StatsWindow (WindowManager& parWindowManager) | |||
| 
 | ||||
| void StatsWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos) | ||||
| { | ||||
|     int diff = lastPos - pos; | ||||
|     int diff = mLastPos - pos; | ||||
|     // Adjust position of all widget according to difference
 | ||||
|     if (diff == 0) | ||||
|         return; | ||||
|     lastPos = pos; | ||||
|     mLastPos = pos; | ||||
| 
 | ||||
|     std::vector<MyGUI::WidgetPtr>::const_iterator end = skillWidgets.end(); | ||||
|     for (std::vector<MyGUI::WidgetPtr>::const_iterator it = skillWidgets.begin(); it != end; ++it) | ||||
|     std::vector<MyGUI::WidgetPtr>::const_iterator end = mSkillWidgets.end(); | ||||
|     for (std::vector<MyGUI::WidgetPtr>::const_iterator it = mSkillWidgets.begin(); it != end; ++it) | ||||
|     { | ||||
|         (*it)->setCoord((*it)->getCoord() + MyGUI::IntPoint(0, diff)); | ||||
|     } | ||||
|  | @ -100,14 +100,14 @@ void StatsWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos) | |||
| 
 | ||||
| void StatsWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel) | ||||
| { | ||||
|     if (skillScrollerWidget->getScrollPosition() - _rel*0.3 < 0) | ||||
|         skillScrollerWidget->setScrollPosition(0); | ||||
|     else if (skillScrollerWidget->getScrollPosition() - _rel*0.3 > skillScrollerWidget->getScrollRange()-1) | ||||
|         skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollRange()-1); | ||||
|     if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 < 0) | ||||
|         mSkillScrollerWidget->setScrollPosition(0); | ||||
|     else if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 > mSkillScrollerWidget->getScrollRange()-1) | ||||
|         mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollRange()-1); | ||||
|     else | ||||
|         skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollPosition() - _rel*0.3); | ||||
|         mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollPosition() - _rel*0.3); | ||||
| 
 | ||||
|     onScrollChangePosition(skillScrollerWidget, skillScrollerWidget->getScrollPosition()); | ||||
|     onScrollChangePosition(mSkillScrollerWidget, mSkillScrollerWidget->getScrollPosition()); | ||||
| } | ||||
| 
 | ||||
| void StatsWindow::onWindowResize(MyGUI::Window* window) | ||||
|  | @ -224,8 +224,8 @@ void StatsWindow::setValue (const std::string& id, int value) | |||
| 
 | ||||
| void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value) | ||||
| { | ||||
|     skillValues[parSkill] = value; | ||||
|     MyGUI::TextBox* widget = skillWidgetMap[(int)parSkill]; | ||||
|     mSkillValues[parSkill] = value; | ||||
|     MyGUI::TextBox* widget = mSkillWidgetMap[(int)parSkill]; | ||||
|     if (widget) | ||||
|     { | ||||
|         float modified = value.getModified(), base = value.getBase(); | ||||
|  | @ -243,20 +243,20 @@ void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechani | |||
| 
 | ||||
| void StatsWindow::configureSkills (const std::vector<int>& major, const std::vector<int>& minor) | ||||
| { | ||||
|     majorSkills = major; | ||||
|     minorSkills = minor; | ||||
|     mMajorSkills = major; | ||||
|     mMinorSkills = minor; | ||||
| 
 | ||||
|     // Update misc skills with the remaining skills not in major or minor
 | ||||
|     std::set<int> skillSet; | ||||
|     std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin())); | ||||
|     std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin())); | ||||
|     boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator end = ESM::Skill::skillIds.end(); | ||||
|     miscSkills.clear(); | ||||
|     mMiscSkills.clear(); | ||||
|     for (boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator it = ESM::Skill::skillIds.begin(); it != end; ++it) | ||||
|     { | ||||
|         int skill = *it; | ||||
|         if (skillSet.find(skill) == skillSet.end()) | ||||
|             miscSkills.push_back(skill); | ||||
|             mMiscSkills.push_back(skill); | ||||
|     } | ||||
| 
 | ||||
|     updateSkillArea(); | ||||
|  | @ -289,20 +289,20 @@ void StatsWindow::setFactions (const FactionList& factions) | |||
| 
 | ||||
| void StatsWindow::setBirthSign (const std::string& signId) | ||||
| { | ||||
|     if (signId != birthSignId) | ||||
|     if (signId != mBirthSignId) | ||||
|     { | ||||
|         birthSignId = signId; | ||||
|         mBirthSignId = signId; | ||||
|         mChanged = true; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     MyGUI::ImageBox* separator = skillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", | ||||
|     MyGUI::ImageBox* separator = mSkillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", | ||||
|         MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), | ||||
|         MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); | ||||
|     separator->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
|     skillWidgets.push_back(separator); | ||||
|     mSkillWidgets.push_back(separator); | ||||
| 
 | ||||
|     coord1.top += separator->getHeight(); | ||||
|     coord2.top += separator->getHeight(); | ||||
|  | @ -310,35 +310,35 @@ void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | |||
| 
 | ||||
| void StatsWindow::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     MyGUI::TextBox* groupWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", | ||||
|     MyGUI::TextBox* groupWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", | ||||
|         MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), | ||||
|         MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); | ||||
|     groupWidget->setCaption(label); | ||||
|     groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
|     skillWidgets.push_back(groupWidget); | ||||
|     mSkillWidgets.push_back(groupWidget); | ||||
| 
 | ||||
|     coord1.top += lineHeight; | ||||
|     coord2.top += lineHeight; | ||||
|     coord1.top += sLineHeight; | ||||
|     coord2.top += sLineHeight; | ||||
| } | ||||
| 
 | ||||
| MyGUI::TextBox* StatsWindow::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     MyGUI::TextBox *skillNameWidget, *skillValueWidget; | ||||
| 
 | ||||
|     skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); | ||||
|     skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); | ||||
|     skillNameWidget->setCaption(text); | ||||
|     skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
| 
 | ||||
|     skillValueWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Right | MyGUI::Align::Top); | ||||
|     skillValueWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Right | MyGUI::Align::Top); | ||||
|     skillValueWidget->setCaption(value); | ||||
|     skillValueWidget->_setWidgetState(state); | ||||
|     skillValueWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
| 
 | ||||
|     skillWidgets.push_back(skillNameWidget); | ||||
|     skillWidgets.push_back(skillValueWidget); | ||||
|     mSkillWidgets.push_back(skillNameWidget); | ||||
|     mSkillWidgets.push_back(skillValueWidget); | ||||
| 
 | ||||
|     coord1.top += lineHeight; | ||||
|     coord2.top += lineHeight; | ||||
|     coord1.top += sLineHeight; | ||||
|     coord2.top += sLineHeight; | ||||
| 
 | ||||
|     return skillValueWidget; | ||||
| } | ||||
|  | @ -347,14 +347,14 @@ MyGUI::Widget* StatsWindow::addItem(const std::string& text, MyGUI::IntCoord &co | |||
| { | ||||
|     MyGUI::TextBox* skillNameWidget; | ||||
| 
 | ||||
|     skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default); | ||||
|     skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default); | ||||
|     skillNameWidget->setCaption(text); | ||||
|     skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); | ||||
| 
 | ||||
|     skillWidgets.push_back(skillNameWidget); | ||||
|     mSkillWidgets.push_back(skillNameWidget); | ||||
| 
 | ||||
|     coord1.top += lineHeight; | ||||
|     coord2.top += lineHeight; | ||||
|     coord1.top += sLineHeight; | ||||
|     coord2.top += sLineHeight; | ||||
| 
 | ||||
|     return skillNameWidget; | ||||
| } | ||||
|  | @ -362,7 +362,7 @@ MyGUI::Widget* StatsWindow::addItem(const std::string& text, MyGUI::IntCoord &co | |||
| void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) | ||||
| { | ||||
|     // Add a line separator if there are items above
 | ||||
|     if (!skillWidgets.empty()) | ||||
|     if (!mSkillWidgets.empty()) | ||||
|     { | ||||
|         addSeparator(coord1, coord2); | ||||
|     } | ||||
|  | @ -377,7 +377,7 @@ void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId, | |||
|             continue; | ||||
|         assert(skillId >= 0 && skillId < ESM::Skill::Length); | ||||
|         const std::string &skillNameId = ESMS::Skill::sSkillNameIds[skillId]; | ||||
|         const MWMechanics::Stat<float> &stat = skillValues.find(skillId)->second; | ||||
|         const MWMechanics::Stat<float> &stat = mSkillValues.find(skillId)->second; | ||||
|         float base = stat.getBase(); | ||||
|         float modified = stat.getModified(); | ||||
|         int progressPercent = (modified - float(static_cast<int>(modified))) * 100; | ||||
|  | @ -400,18 +400,18 @@ void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId, | |||
| 
 | ||||
|         for (int i=0; i<2; ++i) | ||||
|         { | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipLayout", "SkillToolTip"); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillName", "#{"+skillNameId+"}"); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillDescription", skill->description); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillAttribute", "#{sGoverningAttribute}: #{" + attr->name + "}"); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("ImageTexture_SkillImage", icon); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillProgressText", boost::lexical_cast<std::string>(progressPercent)+"/100"); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("Range_SkillProgress", "100"); | ||||
|             skillWidgets[skillWidgets.size()-1-i]->setUserString("RangePosition_SkillProgress", boost::lexical_cast<std::string>(progressPercent)); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipLayout", "SkillToolTip"); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillName", "#{"+skillNameId+"}"); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillDescription", skill->description); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillAttribute", "#{sGoverningAttribute}: #{" + attr->name + "}"); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ImageTexture_SkillImage", icon); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillProgressText", boost::lexical_cast<std::string>(progressPercent)+"/100"); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Range_SkillProgress", "100"); | ||||
|             mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("RangePosition_SkillProgress", boost::lexical_cast<std::string>(progressPercent)); | ||||
|         } | ||||
| 
 | ||||
|         skillWidgetMap[skillId] = widget; | ||||
|         mSkillWidgetMap[skillId] = widget; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -419,28 +419,28 @@ void StatsWindow::updateSkillArea() | |||
| { | ||||
|     mChanged = false; | ||||
| 
 | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = skillWidgets.begin(); it != skillWidgets.end(); ++it) | ||||
|     for (std::vector<MyGUI::WidgetPtr>::iterator it = mSkillWidgets.begin(); it != mSkillWidgets.end(); ++it) | ||||
|     { | ||||
|         MyGUI::Gui::getInstance().destroyWidget(*it); | ||||
|     } | ||||
|     skillWidgets.clear(); | ||||
|     mSkillWidgets.clear(); | ||||
| 
 | ||||
|     skillScrollerWidget->setScrollPosition(0); | ||||
|     onScrollChangePosition(skillScrollerWidget, 0); | ||||
|     clientHeight = 0; | ||||
|     mSkillScrollerWidget->setScrollPosition(0); | ||||
|     onScrollChangePosition(mSkillScrollerWidget, 0); | ||||
|     mClientHeight = 0; | ||||
| 
 | ||||
|     const int valueSize = 40; | ||||
|     MyGUI::IntCoord coord1(10, 0, skillClientWidget->getWidth() - (10 + valueSize), 18); | ||||
|     MyGUI::IntCoord coord1(10, 0, mSkillClientWidget->getWidth() - (10 + valueSize), 18); | ||||
|     MyGUI::IntCoord coord2(coord1.left + coord1.width, coord1.top, valueSize, coord1.height); | ||||
| 
 | ||||
|     if (!majorSkills.empty()) | ||||
|         addSkills(majorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2); | ||||
|     if (!mMajorSkills.empty()) | ||||
|         addSkills(mMajorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2); | ||||
| 
 | ||||
|     if (!minorSkills.empty()) | ||||
|         addSkills(minorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2); | ||||
|     if (!mMinorSkills.empty()) | ||||
|         addSkills(mMinorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2); | ||||
| 
 | ||||
|     if (!miscSkills.empty()) | ||||
|         addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2); | ||||
|     if (!mMiscSkills.empty()) | ||||
|         addSkills(mMiscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2); | ||||
| 
 | ||||
|     const ESMS::ESMStore &store = mWindowManager.getStore(); | ||||
| 
 | ||||
|  | @ -463,7 +463,7 @@ void StatsWindow::updateSkillArea() | |||
|     if (!mFactions.empty()) | ||||
|     { | ||||
|         // Add a line separator if there are items above
 | ||||
|         if (!skillWidgets.empty()) | ||||
|         if (!mSkillWidgets.empty()) | ||||
|             addSeparator(coord1, coord2); | ||||
| 
 | ||||
|         addGroup(mWindowManager.getGameSettingString("sFaction", "Faction"), coord1, coord2); | ||||
|  | @ -516,53 +516,53 @@ void StatsWindow::updateSkillArea() | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (!birthSignId.empty()) | ||||
|     if (!mBirthSignId.empty()) | ||||
|     { | ||||
|         // Add a line separator if there are items above
 | ||||
|         if (!skillWidgets.empty()) | ||||
|         if (!mSkillWidgets.empty()) | ||||
|             addSeparator(coord1, coord2); | ||||
| 
 | ||||
|         addGroup(mWindowManager.getGameSettingString("sBirthSign", "Sign"), coord1, coord2); | ||||
|         const ESM::BirthSign *sign = store.birthSigns.find(birthSignId); | ||||
|         const ESM::BirthSign *sign = store.birthSigns.find(mBirthSignId); | ||||
|         MyGUI::Widget* w = addItem(sign->name, coord1, coord2); | ||||
| 
 | ||||
|         ToolTips::createBirthsignToolTip(w, birthSignId); | ||||
|         ToolTips::createBirthsignToolTip(w, mBirthSignId); | ||||
|     } | ||||
| 
 | ||||
|     // Add a line separator if there are items above
 | ||||
|     if (!skillWidgets.empty()) | ||||
|     if (!mSkillWidgets.empty()) | ||||
|         addSeparator(coord1, coord2); | ||||
| 
 | ||||
|     addValueItem(mWindowManager.getGameSettingString("sReputation", "Reputation"), | ||||
|                 boost::lexical_cast<std::string>(static_cast<int>(reputation)), "normal", coord1, coord2); | ||||
|                 boost::lexical_cast<std::string>(static_cast<int>(mReputation)), "normal", coord1, coord2); | ||||
| 
 | ||||
|     for (int i=0; i<2; ++i) | ||||
|     { | ||||
|         skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); | ||||
|         skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip"); | ||||
|         skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sSkillsMenuReputationHelp}"); | ||||
|         mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); | ||||
|         mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip"); | ||||
|         mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sSkillsMenuReputationHelp}"); | ||||
|     } | ||||
| 
 | ||||
|     addValueItem(mWindowManager.getGameSettingString("sBounty", "Bounty"), | ||||
|                 boost::lexical_cast<std::string>(static_cast<int>(bounty)), "normal", coord1, coord2); | ||||
|                 boost::lexical_cast<std::string>(static_cast<int>(mBounty)), "normal", coord1, coord2); | ||||
| 
 | ||||
|     for (int i=0; i<2; ++i) | ||||
|     { | ||||
|         skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); | ||||
|         skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip"); | ||||
|         skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sCrimeHelp}"); | ||||
|         mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); | ||||
|         mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip"); | ||||
|         mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sCrimeHelp}"); | ||||
|     } | ||||
| 
 | ||||
|     clientHeight = coord1.top; | ||||
|     mClientHeight = coord1.top; | ||||
|     updateScroller(); | ||||
| } | ||||
| 
 | ||||
| void StatsWindow::updateScroller() | ||||
| { | ||||
|     skillScrollerWidget->setScrollRange(std::max(clientHeight - skillClientWidget->getHeight(), 0)); | ||||
|     skillScrollerWidget->setScrollPage(std::max(skillClientWidget->getHeight() - lineHeight, 0)); | ||||
|     if (clientHeight != 0) | ||||
|         skillScrollerWidget->setTrackSize( (skillAreaWidget->getHeight() / float(clientHeight)) * skillScrollerWidget->getLineSize() ); | ||||
|     mSkillScrollerWidget->setScrollRange(std::max(mClientHeight - mSkillClientWidget->getHeight(), 0)); | ||||
|     mSkillScrollerWidget->setScrollPage(std::max(mSkillClientWidget->getHeight() - sLineHeight, 0)); | ||||
|     if (mClientHeight != 0) | ||||
|         mSkillScrollerWidget->setTrackSize( (mSkillAreaWidget->getHeight() / float(mClientHeight)) * mSkillScrollerWidget->getLineSize() ); | ||||
| } | ||||
| 
 | ||||
| void StatsWindow::onPinToggled() | ||||
|  |  | |||
|  | @ -38,8 +38,8 @@ namespace MWGui | |||
|             void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value); | ||||
| 
 | ||||
|             void configureSkills (const SkillList& major, const SkillList& minor); | ||||
|             void setReputation (int reputation) { this->reputation = reputation; } | ||||
|             void setBounty (int bounty) { this->bounty = bounty; } | ||||
|             void setReputation (int reputation) { this->mReputation = reputation; } | ||||
|             void setBounty (int bounty) { this->mBounty = bounty; } | ||||
|             void updateSkillArea(); | ||||
| 
 | ||||
|         private: | ||||
|  | @ -57,23 +57,23 @@ namespace MWGui | |||
|             void onWindowResize(MyGUI::Window* window); | ||||
|             void onMouseWheel(MyGUI::Widget* _sender, int _rel); | ||||
| 
 | ||||
|             static const int lineHeight; | ||||
|             static const int sLineHeight; | ||||
| 
 | ||||
|             MyGUI::Widget* mLeftPane; | ||||
|             MyGUI::Widget* mRightPane; | ||||
| 
 | ||||
|             MyGUI::WidgetPtr skillAreaWidget, skillClientWidget; | ||||
|             MyGUI::ScrollBar* skillScrollerWidget; | ||||
|             int lastPos, clientHeight; | ||||
|             MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget; | ||||
|             MyGUI::ScrollBar* mSkillScrollerWidget; | ||||
|             int mLastPos, mClientHeight; | ||||
| 
 | ||||
|             SkillList majorSkills, minorSkills, miscSkills; | ||||
|             std::map<int, MWMechanics::Stat<float> > skillValues; | ||||
|             std::map<int, MyGUI::TextBox*> skillWidgetMap; | ||||
|             std::map<std::string, MyGUI::WidgetPtr> factionWidgetMap; | ||||
|             SkillList mMajorSkills, mMinorSkills, mMiscSkills; | ||||
|             std::map<int, MWMechanics::Stat<float> > mSkillValues; | ||||
|             std::map<int, MyGUI::TextBox*> mSkillWidgetMap; | ||||
|             std::map<std::string, MyGUI::WidgetPtr> mFactionWidgetMap; | ||||
|             FactionList mFactions; ///< Stores a list of factions and the current rank
 | ||||
|             std::string birthSignId; | ||||
|             int reputation, bounty; | ||||
|             std::vector<MyGUI::WidgetPtr> skillWidgets; //< Skills and other information
 | ||||
|             std::string mBirthSignId; | ||||
|             int mReputation, mBounty; | ||||
|             std::vector<MyGUI::WidgetPtr> mSkillWidgets; //< Skills and other information
 | ||||
| 
 | ||||
|             bool mChanged; | ||||
| 
 | ||||
|  |  | |||
|  | @ -9,15 +9,15 @@ TextInputDialog::TextInputDialog(WindowManager& parWindowManager) | |||
|     // Centre dialog
 | ||||
|     center(); | ||||
| 
 | ||||
|     getWidget(textEdit, "TextEdit"); | ||||
|     textEdit->eventEditSelectAccept += newDelegate(this, &TextInputDialog::onTextAccepted); | ||||
|     getWidget(mTextEdit, "TextEdit"); | ||||
|     mTextEdit->eventEditSelectAccept += newDelegate(this, &TextInputDialog::onTextAccepted); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr okButton; | ||||
|     getWidget(okButton, "OKButton"); | ||||
|     okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &TextInputDialog::onOkClicked); | ||||
| 
 | ||||
|     // Make sure the edit box has focus
 | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit); | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit); | ||||
| } | ||||
| 
 | ||||
| void TextInputDialog::setNextButtonShow(bool shown) | ||||
|  | @ -43,7 +43,7 @@ void TextInputDialog::setTextLabel(const std::string &label) | |||
| void TextInputDialog::open() | ||||
| { | ||||
|     // Make sure the edit box has focus
 | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit); | ||||
|     MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit); | ||||
|     setVisible(true); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,8 +20,8 @@ namespace MWGui | |||
|     public: | ||||
|         TextInputDialog(WindowManager& parWindowManager); | ||||
| 
 | ||||
|         std::string getTextInput() const { return textEdit ? textEdit->getOnlyText() : ""; } | ||||
|         void setTextInput(const std::string &text) { if (textEdit) textEdit->setOnlyText(text); } | ||||
|         std::string getTextInput() const { return mTextEdit ? mTextEdit->getOnlyText() : ""; } | ||||
|         void setTextInput(const std::string &text) { if (mTextEdit) mTextEdit->setOnlyText(text); } | ||||
| 
 | ||||
|         void setNextButtonShow(bool shown); | ||||
|         void setTextLabel(const std::string &label); | ||||
|  | @ -32,7 +32,7 @@ namespace MWGui | |||
|         void onTextAccepted(MyGUI::Edit* _sender); | ||||
| 
 | ||||
|     private: | ||||
|         MyGUI::EditPtr textEdit; | ||||
|         MyGUI::EditPtr mTextEdit; | ||||
|     }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -27,16 +27,16 @@ void MWGui::Widgets::fixTexturePath(std::string &path) | |||
| /* MWSkill */ | ||||
| 
 | ||||
| MWSkill::MWSkill() | ||||
|     : manager(nullptr) | ||||
|     , skillId(ESM::Skill::Length) | ||||
|     , skillNameWidget(nullptr) | ||||
|     , skillValueWidget(nullptr) | ||||
|     : mManager(nullptr) | ||||
|     , mSkillId(ESM::Skill::Length) | ||||
|     , mSkillNameWidget(nullptr) | ||||
|     , mSkillValueWidget(nullptr) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void MWSkill::setSkillId(ESM::Skill::SkillEnum skill) | ||||
| { | ||||
|     skillId = skill; | ||||
|     mSkillId = skill; | ||||
|     updateWidgets(); | ||||
| } | ||||
| 
 | ||||
|  | @ -50,36 +50,36 @@ void MWSkill::setSkillNumber(int skill) | |||
|         throw new std::runtime_error("Skill number out of range"); | ||||
| } | ||||
| 
 | ||||
| void MWSkill::setSkillValue(const SkillValue& value_) | ||||
| void MWSkill::setSkillValue(const SkillValue& value) | ||||
| { | ||||
|     value = value_; | ||||
|     mValue = value; | ||||
|     updateWidgets(); | ||||
| } | ||||
| 
 | ||||
| void MWSkill::updateWidgets() | ||||
| { | ||||
|     if (skillNameWidget && manager) | ||||
|     if (mSkillNameWidget && mManager) | ||||
|     { | ||||
|         if (skillId == ESM::Skill::Length) | ||||
|         if (mSkillId == ESM::Skill::Length) | ||||
|         { | ||||
|             static_cast<MyGUI::TextBox*>(skillNameWidget)->setCaption(""); | ||||
|             static_cast<MyGUI::TextBox*>(mSkillNameWidget)->setCaption(""); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             const std::string &name = manager->getGameSettingString(ESM::Skill::sSkillNameIds[skillId], ""); | ||||
|             static_cast<MyGUI::TextBox*>(skillNameWidget)->setCaption(name); | ||||
|             const std::string &name = mManager->getGameSettingString(ESM::Skill::sSkillNameIds[mSkillId], ""); | ||||
|             static_cast<MyGUI::TextBox*>(mSkillNameWidget)->setCaption(name); | ||||
|         } | ||||
|     } | ||||
|     if (skillValueWidget) | ||||
|     if (mSkillValueWidget) | ||||
|     { | ||||
|         SkillValue::Type modified = value.getModified(), base = value.getBase(); | ||||
|         static_cast<MyGUI::TextBox*>(skillValueWidget)->setCaption(boost::lexical_cast<std::string>(modified)); | ||||
|         SkillValue::Type modified = mValue.getModified(), base = mValue.getBase(); | ||||
|         static_cast<MyGUI::TextBox*>(mSkillValueWidget)->setCaption(boost::lexical_cast<std::string>(modified)); | ||||
|         if (modified > base) | ||||
|             skillValueWidget->_setWidgetState("increased"); | ||||
|             mSkillValueWidget->_setWidgetState("increased"); | ||||
|         else if (modified < base) | ||||
|             skillValueWidget->_setWidgetState("decreased"); | ||||
|             mSkillValueWidget->_setWidgetState("decreased"); | ||||
|         else | ||||
|             skillValueWidget->_setWidgetState("normal"); | ||||
|             mSkillValueWidget->_setWidgetState("normal"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -96,14 +96,14 @@ void MWSkill::initialiseOverride() | |||
| { | ||||
|     Base::initialiseOverride(); | ||||
| 
 | ||||
|     assignWidget(skillNameWidget, "StatName"); | ||||
|     assignWidget(skillValueWidget, "StatValue"); | ||||
|     assignWidget(mSkillNameWidget, "StatName"); | ||||
|     assignWidget(mSkillValueWidget, "StatValue"); | ||||
| 
 | ||||
|     MyGUI::ButtonPtr button; | ||||
|     assignWidget(button, "StatNameButton"); | ||||
|     if (button) | ||||
|     { | ||||
|         skillNameWidget = button; | ||||
|         mSkillNameWidget = button; | ||||
|         button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked); | ||||
|     } | ||||
| 
 | ||||
|  | @ -111,7 +111,7 @@ void MWSkill::initialiseOverride() | |||
|     assignWidget(button, "StatValueButton"); | ||||
|     if (button) | ||||
|     { | ||||
|         skillNameWidget = button; | ||||
|         mSkillNameWidget = button; | ||||
|         button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked); | ||||
|     } | ||||
| } | ||||
|  | @ -119,22 +119,22 @@ void MWSkill::initialiseOverride() | |||
| /* MWAttribute */ | ||||
| 
 | ||||
| MWAttribute::MWAttribute() | ||||
|     : manager(nullptr) | ||||
|     , id(-1) | ||||
|     , attributeNameWidget(nullptr) | ||||
|     , attributeValueWidget(nullptr) | ||||
|     : mManager(nullptr) | ||||
|     , mId(-1) | ||||
|     , mAttributeNameWidget(nullptr) | ||||
|     , mAttributeValueWidget(nullptr) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void MWAttribute::setAttributeId(int attributeId) | ||||
| { | ||||
|     id = attributeId; | ||||
|     mId = attributeId; | ||||
|     updateWidgets(); | ||||
| } | ||||
| 
 | ||||
| void MWAttribute::setAttributeValue(const AttributeValue& value_) | ||||
| void MWAttribute::setAttributeValue(const AttributeValue& value) | ||||
| { | ||||
|     value = value_; | ||||
|     mValue = value; | ||||
|     updateWidgets(); | ||||
| } | ||||
| 
 | ||||
|  | @ -145,11 +145,11 @@ void MWAttribute::onClicked(MyGUI::Widget* _sender) | |||
| 
 | ||||
| void MWAttribute::updateWidgets() | ||||
| { | ||||
|     if (attributeNameWidget && manager) | ||||
|     if (mAttributeNameWidget && mManager) | ||||
|     { | ||||
|         if (id < 0 || id >= 8) | ||||
|         if (mId < 0 || mId >= 8) | ||||
|         { | ||||
|             static_cast<MyGUI::TextBox*>(attributeNameWidget)->setCaption(""); | ||||
|             static_cast<MyGUI::TextBox*>(mAttributeNameWidget)->setCaption(""); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|  | @ -163,20 +163,20 @@ void MWAttribute::updateWidgets() | |||
|                 "sAttributePersonality", | ||||
|                 "sAttributeLuck" | ||||
|             }; | ||||
|             const std::string &name = manager->getGameSettingString(attributes[id], ""); | ||||
|             static_cast<MyGUI::TextBox*>(attributeNameWidget)->setCaption(name); | ||||
|             const std::string &name = mManager->getGameSettingString(attributes[mId], ""); | ||||
|             static_cast<MyGUI::TextBox*>(mAttributeNameWidget)->setCaption(name); | ||||
|         } | ||||
|     } | ||||
|     if (attributeValueWidget) | ||||
|     if (mAttributeValueWidget) | ||||
|     { | ||||
|         AttributeValue::Type modified = value.getModified(), base = value.getBase(); | ||||
|         static_cast<MyGUI::TextBox*>(attributeValueWidget)->setCaption(boost::lexical_cast<std::string>(modified)); | ||||
|         AttributeValue::Type modified = mValue.getModified(), base = mValue.getBase(); | ||||
|         static_cast<MyGUI::TextBox*>(mAttributeValueWidget)->setCaption(boost::lexical_cast<std::string>(modified)); | ||||
|         if (modified > base) | ||||
|             attributeValueWidget->_setWidgetState("increased"); | ||||
|             mAttributeValueWidget->_setWidgetState("increased"); | ||||
|         else if (modified < base) | ||||
|             attributeValueWidget->_setWidgetState("decreased"); | ||||
|             mAttributeValueWidget->_setWidgetState("decreased"); | ||||
|         else | ||||
|             attributeValueWidget->_setWidgetState("normal"); | ||||
|             mAttributeValueWidget->_setWidgetState("normal"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -188,14 +188,14 @@ void MWAttribute::initialiseOverride() | |||
| { | ||||
|     Base::initialiseOverride(); | ||||
| 
 | ||||
|     assignWidget(attributeNameWidget, "StatName"); | ||||
|     assignWidget(attributeValueWidget, "StatValue"); | ||||
|     assignWidget(mAttributeNameWidget, "StatName"); | ||||
|     assignWidget(mAttributeValueWidget, "StatValue"); | ||||
|      | ||||
|     MyGUI::ButtonPtr button; | ||||
|     assignWidget(button, "StatNameButton"); | ||||
|     if (button) | ||||
|     { | ||||
|         attributeNameWidget = button; | ||||
|         mAttributeNameWidget = button; | ||||
|         button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked); | ||||
|     } | ||||
| 
 | ||||
|  | @ -203,7 +203,7 @@ void MWAttribute::initialiseOverride() | |||
|     assignWidget(button, "StatValueButton"); | ||||
|     if (button) | ||||
|     { | ||||
|         attributeValueWidget = button; | ||||
|         mAttributeValueWidget = button; | ||||
|         button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked); | ||||
|     } | ||||
| } | ||||
|  | @ -212,21 +212,21 @@ void MWAttribute::initialiseOverride() | |||
| 
 | ||||
| MWSpell::MWSpell() | ||||
|     : mWindowManager(nullptr) | ||||
|     , spellNameWidget(nullptr) | ||||
|     , mSpellNameWidget(nullptr) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void MWSpell::setSpellId(const std::string &spellId) | ||||
| { | ||||
|     id = spellId; | ||||
|     mId = spellId; | ||||
|     updateWidgets(); | ||||
| } | ||||
| 
 | ||||
| void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, int flags) | ||||
| { | ||||
|     const ESMS::ESMStore &store = mWindowManager->getStore(); | ||||
|     const ESM::Spell *spell = store.spells.search(id); | ||||
|     MYGUI_ASSERT(spell, "spell with id '" << id << "' not found"); | ||||
|     const ESM::Spell *spell = store.spells.search(mId); | ||||
|     MYGUI_ASSERT(spell, "spell with id '" << mId << "' not found"); | ||||
| 
 | ||||
|     MWSpellEffectPtr effect = nullptr; | ||||
|     std::vector<ESM::ENAMstruct>::const_iterator end = spell->effects.list.end(); | ||||
|  | @ -253,14 +253,14 @@ void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI: | |||
| 
 | ||||
| void MWSpell::updateWidgets() | ||||
| { | ||||
|     if (spellNameWidget && mWindowManager) | ||||
|     if (mSpellNameWidget && mWindowManager) | ||||
|     { | ||||
|         const ESMS::ESMStore &store = mWindowManager->getStore(); | ||||
|         const ESM::Spell *spell = store.spells.search(id); | ||||
|         const ESM::Spell *spell = store.spells.search(mId); | ||||
|         if (spell) | ||||
|             static_cast<MyGUI::TextBox*>(spellNameWidget)->setCaption(spell->name); | ||||
|             static_cast<MyGUI::TextBox*>(mSpellNameWidget)->setCaption(spell->name); | ||||
|         else | ||||
|             static_cast<MyGUI::TextBox*>(spellNameWidget)->setCaption(""); | ||||
|             static_cast<MyGUI::TextBox*>(mSpellNameWidget)->setCaption(""); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -268,7 +268,7 @@ void MWSpell::initialiseOverride() | |||
| { | ||||
|     Base::initialiseOverride(); | ||||
| 
 | ||||
|     assignWidget(spellNameWidget, "StatName"); | ||||
|     assignWidget(mSpellNameWidget, "StatName"); | ||||
| } | ||||
| 
 | ||||
| MWSpell::~MWSpell() | ||||
|  | @ -367,8 +367,8 @@ SpellEffectList MWEffectList::effectListFromESM(const ESM::EffectList* effects) | |||
| 
 | ||||
| MWSpellEffect::MWSpellEffect() | ||||
|     : mWindowManager(nullptr) | ||||
|     , imageWidget(nullptr) | ||||
|     , textWidget(nullptr) | ||||
|     , mImageWidget(nullptr) | ||||
|     , mTextWidget(nullptr) | ||||
|     , mRequestedWidth(0) | ||||
| { | ||||
| } | ||||
|  | @ -388,7 +388,7 @@ void MWSpellEffect::updateWidgets() | |||
|     const ESM::MagicEffect *magicEffect = store.magicEffects.search(mEffectParams.mEffectID); | ||||
|     if (!magicEffect) | ||||
|         return; | ||||
|     if (textWidget) | ||||
|     if (mTextWidget) | ||||
|     { | ||||
|         std::string pt =  mWindowManager->getGameSettingString("spoint", ""); | ||||
|         std::string pts =  mWindowManager->getGameSettingString("spoints", ""); | ||||
|  | @ -448,14 +448,14 @@ void MWSpellEffect::updateWidgets() | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         static_cast<MyGUI::TextBox*>(textWidget)->setCaption(spellLine); | ||||
|         mRequestedWidth = textWidget->getTextSize().width + 24; | ||||
|         static_cast<MyGUI::TextBox*>(mTextWidget)->setCaption(spellLine); | ||||
|         mRequestedWidth = mTextWidget->getTextSize().width + 24; | ||||
|     } | ||||
|     if (imageWidget) | ||||
|     if (mImageWidget) | ||||
|     { | ||||
|         std::string path = std::string("icons\\") + magicEffect->icon; | ||||
|         fixTexturePath(path); | ||||
|         imageWidget->setImageTexture(path); | ||||
|         mImageWidget->setImageTexture(path); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -728,49 +728,49 @@ void MWSpellEffect::initialiseOverride() | |||
| { | ||||
|     Base::initialiseOverride(); | ||||
| 
 | ||||
|     assignWidget(textWidget, "Text"); | ||||
|     assignWidget(imageWidget, "Image"); | ||||
|     assignWidget(mTextWidget, "Text"); | ||||
|     assignWidget(mImageWidget, "Image"); | ||||
| } | ||||
| 
 | ||||
| /* MWDynamicStat */ | ||||
| 
 | ||||
| MWDynamicStat::MWDynamicStat() | ||||
| : value(0) | ||||
| , max(1) | ||||
| , textWidget(nullptr) | ||||
| , barWidget(nullptr) | ||||
| , barTextWidget(nullptr) | ||||
| : mValue(0) | ||||
| , mMax(1) | ||||
| , mTextWidget(nullptr) | ||||
| , mBarWidget(nullptr) | ||||
| , mBarTextWidget(nullptr) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void MWDynamicStat::setValue(int cur, int max_) | ||||
| void MWDynamicStat::setValue(int cur, int max) | ||||
| { | ||||
|     value = cur; | ||||
|     max = max_; | ||||
|     mValue = cur; | ||||
|     mMax = max; | ||||
| 
 | ||||
|     if (barWidget) | ||||
|     if (mBarWidget) | ||||
|     { | ||||
|         barWidget->setProgressRange(max); | ||||
|         barWidget->setProgressPosition(value); | ||||
|         mBarWidget->setProgressRange(mMax); | ||||
|         mBarWidget->setProgressPosition(mValue); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     if (barTextWidget) | ||||
|     if (mBarTextWidget) | ||||
|     { | ||||
|         if (value >= 0 && max > 0) | ||||
|         if (mValue >= 0 && mMax > 0) | ||||
|         { | ||||
|             std::stringstream out; | ||||
|             out << value << "/" << max; | ||||
|             static_cast<MyGUI::TextBox*>(barTextWidget)->setCaption(out.str().c_str()); | ||||
|             out << mValue << "/" << mMax; | ||||
|             static_cast<MyGUI::TextBox*>(mBarTextWidget)->setCaption(out.str().c_str()); | ||||
|         } | ||||
|         else | ||||
|             static_cast<MyGUI::TextBox*>(barTextWidget)->setCaption(""); | ||||
|             static_cast<MyGUI::TextBox*>(mBarTextWidget)->setCaption(""); | ||||
|     } | ||||
| } | ||||
| void MWDynamicStat::setTitle(const std::string& text) | ||||
| { | ||||
|     if (textWidget) | ||||
|         static_cast<MyGUI::TextBox*>(textWidget)->setCaption(text); | ||||
|     if (mTextWidget) | ||||
|         static_cast<MyGUI::TextBox*>(mTextWidget)->setCaption(text); | ||||
| } | ||||
| 
 | ||||
| MWDynamicStat::~MWDynamicStat() | ||||
|  | @ -781,7 +781,7 @@ void MWDynamicStat::initialiseOverride() | |||
| { | ||||
|     Base::initialiseOverride(); | ||||
| 
 | ||||
|     assignWidget(textWidget, "Text"); | ||||
|     assignWidget(barWidget, "Bar"); | ||||
|     assignWidget(barTextWidget, "BarText"); | ||||
|     assignWidget(mTextWidget, "Text"); | ||||
|     assignWidget(mBarWidget, "Bar"); | ||||
|     assignWidget(mBarTextWidget, "BarText"); | ||||
| } | ||||
|  |  | |||
|  | @ -73,7 +73,7 @@ namespace MWGui | |||
| 
 | ||||
|         typedef std::vector<SpellEffectParams> SpellEffectList; | ||||
| 
 | ||||
|         class MYGUI_EXPORT MWSkill : public Widget | ||||
|         class MYGUI_EXPORT MWSkill : public MyGUI::Widget | ||||
|         { | ||||
|             MYGUI_RTTI_DERIVED( MWSkill ); | ||||
|         public: | ||||
|  | @ -81,14 +81,14 @@ namespace MWGui | |||
| 
 | ||||
|             typedef MWMechanics::Stat<float> SkillValue; | ||||
| 
 | ||||
|             void setWindowManager(WindowManager *m) { manager = m; } | ||||
|             void setWindowManager(WindowManager *m) { mManager = m; } | ||||
|             void setSkillId(ESM::Skill::SkillEnum skillId); | ||||
|             void setSkillNumber(int skillId); | ||||
|             void setSkillValue(const SkillValue& value); | ||||
| 
 | ||||
|             WindowManager *getWindowManager() const { return manager; } | ||||
|             ESM::Skill::SkillEnum getSkillId() const { return skillId; } | ||||
|             const SkillValue& getSkillValue() const { return value; } | ||||
|             WindowManager *getWindowManager() const { return mManager; } | ||||
|             ESM::Skill::SkillEnum getSkillId() const { return mSkillId; } | ||||
|             const SkillValue& getSkillValue() const { return mValue; } | ||||
| 
 | ||||
|             // Events
 | ||||
|             typedef delegates::CMultiDelegate1<MWSkill*> EventHandle_SkillVoid; | ||||
|  | @ -109,14 +109,14 @@ namespace MWGui | |||
| 
 | ||||
|             void updateWidgets(); | ||||
| 
 | ||||
|             WindowManager *manager; | ||||
|             ESM::Skill::SkillEnum skillId; | ||||
|             SkillValue value; | ||||
|             MyGUI::WidgetPtr skillNameWidget, skillValueWidget; | ||||
|             WindowManager *mManager; | ||||
|             ESM::Skill::SkillEnum mSkillId; | ||||
|             SkillValue mValue; | ||||
|             MyGUI::WidgetPtr mSkillNameWidget, mSkillValueWidget; | ||||
|         }; | ||||
|         typedef MWSkill* MWSkillPtr; | ||||
| 
 | ||||
|         class MYGUI_EXPORT MWAttribute : public Widget | ||||
|         class MYGUI_EXPORT MWAttribute : public MyGUI::Widget | ||||
|         { | ||||
|             MYGUI_RTTI_DERIVED( MWAttribute ); | ||||
|         public: | ||||
|  | @ -124,13 +124,13 @@ namespace MWGui | |||
| 
 | ||||
|             typedef MWMechanics::Stat<int> AttributeValue; | ||||
| 
 | ||||
|             void setWindowManager(WindowManager *m) { manager = m; } | ||||
|             void setWindowManager(WindowManager *m) { mManager = m; } | ||||
|             void setAttributeId(int attributeId); | ||||
|             void setAttributeValue(const AttributeValue& value); | ||||
| 
 | ||||
|             WindowManager *getWindowManager() const { return manager; } | ||||
|             int getAttributeId() const { return id; } | ||||
|             const AttributeValue& getAttributeValue() const { return value; } | ||||
|             WindowManager *getWindowManager() const { return mManager; } | ||||
|             int getAttributeId() const { return mId; } | ||||
|             const AttributeValue& getAttributeValue() const { return mValue; } | ||||
| 
 | ||||
|             // Events
 | ||||
|             typedef delegates::CMultiDelegate1<MWAttribute*> EventHandle_AttributeVoid; | ||||
|  | @ -151,10 +151,10 @@ namespace MWGui | |||
| 
 | ||||
|             void updateWidgets(); | ||||
| 
 | ||||
|             WindowManager *manager; | ||||
|             int id; | ||||
|             AttributeValue value; | ||||
|             MyGUI::WidgetPtr attributeNameWidget, attributeValueWidget; | ||||
|             WindowManager *mManager; | ||||
|             int mId; | ||||
|             AttributeValue mValue; | ||||
|             MyGUI::WidgetPtr mAttributeNameWidget, mAttributeValueWidget; | ||||
|         }; | ||||
|         typedef MWAttribute* MWAttributePtr; | ||||
| 
 | ||||
|  | @ -162,7 +162,7 @@ namespace MWGui | |||
|          * @todo remove this class and use MWEffectList instead | ||||
|          */ | ||||
|         class MWSpellEffect; | ||||
|         class MYGUI_EXPORT MWSpell : public Widget | ||||
|         class MYGUI_EXPORT MWSpell : public MyGUI::Widget | ||||
|         { | ||||
|             MYGUI_RTTI_DERIVED( MWSpell ); | ||||
|         public: | ||||
|  | @ -182,7 +182,7 @@ namespace MWGui | |||
|              */ | ||||
|             void createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, int flags); | ||||
| 
 | ||||
|             const std::string &getSpellId() const { return id; } | ||||
|             const std::string &getSpellId() const { return mId; } | ||||
| 
 | ||||
|         protected: | ||||
|             virtual ~MWSpell(); | ||||
|  | @ -193,12 +193,12 @@ namespace MWGui | |||
|             void updateWidgets(); | ||||
| 
 | ||||
|             WindowManager* mWindowManager; | ||||
|             std::string id; | ||||
|             MyGUI::TextBox* spellNameWidget; | ||||
|             std::string mId; | ||||
|             MyGUI::TextBox* mSpellNameWidget; | ||||
|         }; | ||||
|         typedef MWSpell* MWSpellPtr; | ||||
| 
 | ||||
|         class MYGUI_EXPORT MWEffectList : public Widget | ||||
|         class MYGUI_EXPORT MWEffectList : public MyGUI::Widget | ||||
|         { | ||||
|             MYGUI_RTTI_DERIVED( MWEffectList ); | ||||
|         public: | ||||
|  | @ -239,7 +239,7 @@ namespace MWGui | |||
|         }; | ||||
|         typedef MWEffectList* MWEffectListPtr; | ||||
| 
 | ||||
|         class MYGUI_EXPORT MWSpellEffect : public Widget | ||||
|         class MYGUI_EXPORT MWSpellEffect : public MyGUI::Widget | ||||
|         { | ||||
|             MYGUI_RTTI_DERIVED( MWSpellEffect ); | ||||
|         public: | ||||
|  | @ -269,13 +269,13 @@ namespace MWGui | |||
| 
 | ||||
|             WindowManager* mWindowManager; | ||||
|             SpellEffectParams mEffectParams; | ||||
|             MyGUI::ImageBox* imageWidget; | ||||
|             MyGUI::TextBox* textWidget; | ||||
|             MyGUI::ImageBox* mImageWidget; | ||||
|             MyGUI::TextBox* mTextWidget; | ||||
|             int mRequestedWidth; | ||||
|         }; | ||||
|         typedef MWSpellEffect* MWSpellEffectPtr; | ||||
| 
 | ||||
|         class MYGUI_EXPORT MWDynamicStat : public Widget | ||||
|         class MYGUI_EXPORT MWDynamicStat : public MyGUI::Widget | ||||
|         { | ||||
|             MYGUI_RTTI_DERIVED( MWDynamicStat ); | ||||
|         public: | ||||
|  | @ -284,8 +284,8 @@ namespace MWGui | |||
|             void setValue(int value, int max); | ||||
|             void setTitle(const std::string& text); | ||||
| 
 | ||||
|             int getValue() const { return value; } | ||||
|             int getMax() const { return max; } | ||||
|             int getValue() const { return mValue; } | ||||
|             int getMax() const { return mMax; } | ||||
| 
 | ||||
|         protected: | ||||
|             virtual ~MWDynamicStat(); | ||||
|  | @ -294,10 +294,10 @@ namespace MWGui | |||
| 
 | ||||
|         private: | ||||
| 
 | ||||
|             int value, max; | ||||
|             MyGUI::TextBox* textWidget; | ||||
|             MyGUI::ProgressPtr barWidget; | ||||
|             MyGUI::TextBox* barTextWidget; | ||||
|             int mValue, mMax; | ||||
|             MyGUI::TextBox* mTextWidget; | ||||
|             MyGUI::ProgressPtr mBarWidget; | ||||
|             MyGUI::TextBox* mBarTextWidget; | ||||
|         }; | ||||
|         typedef MWDynamicStat* MWDynamicStatPtr; | ||||
|     } | ||||
|  |  | |||
|  | @ -43,13 +43,13 @@ using namespace MWGui; | |||
| WindowManager::WindowManager( | ||||
|     const Compiler::Extensions& extensions, int fpsLevel, bool newGame, OEngine::Render::OgreRenderer *mOgre, const std::string& logpath) | ||||
|   : mGuiManager(NULL) | ||||
|   , hud(NULL) | ||||
|   , map(NULL) | ||||
|   , menu(NULL) | ||||
|   , mHud(NULL) | ||||
|   , mMap(NULL) | ||||
|   , mMenu(NULL) | ||||
|   , mStatsWindow(NULL) | ||||
|   , mToolTips(NULL) | ||||
|   , mMessageBoxManager(NULL) | ||||
|   , console(NULL) | ||||
|   , mConsole(NULL) | ||||
|   , mJournal(NULL) | ||||
|   , mDialogueWindow(NULL) | ||||
|   , mBookWindow(NULL) | ||||
|  | @ -61,21 +61,21 @@ WindowManager::WindowManager( | |||
|   , mAlchemyWindow(NULL) | ||||
|   , mSpellWindow(NULL) | ||||
|   , mCharGen(NULL) | ||||
|   , playerClass() | ||||
|   , playerName() | ||||
|   , playerRaceId() | ||||
|   , playerAttributes() | ||||
|   , playerMajorSkills() | ||||
|   , playerMinorSkills() | ||||
|   , playerSkillValues() | ||||
|   , playerHealth() | ||||
|   , playerMagicka() | ||||
|   , playerFatigue() | ||||
|   , gui(NULL) | ||||
|   , garbageDialogs() | ||||
|   , shown(GW_ALL) | ||||
|   , allowed(newGame ? GW_None : GW_ALL) | ||||
|   , showFPSLevel(fpsLevel) | ||||
|   , mPlayerClass() | ||||
|   , mPlayerName() | ||||
|   , mPlayerRaceId() | ||||
|   , mPlayerAttributes() | ||||
|   , mPlayerMajorSkills() | ||||
|   , mPlayerMinorSkills() | ||||
|   , mPlayerSkillValues() | ||||
|   , mPlayerHealth() | ||||
|   , mPlayerMagicka() | ||||
|   , mPlayerFatigue() | ||||
|   , mGui(NULL) | ||||
|   , mGarbageDialogs() | ||||
|   , mShown(GW_ALL) | ||||
|   , mAllowed(newGame ? GW_None : GW_ALL) | ||||
|   , mShowFPSLevel(fpsLevel) | ||||
|   , mFPS(0.0f) | ||||
|   , mTriangleCount(0) | ||||
|   , mBatchCount(0) | ||||
|  | @ -83,7 +83,7 @@ WindowManager::WindowManager( | |||
| 
 | ||||
|     // Set up the GUI system
 | ||||
|     mGuiManager = new OEngine::GUI::MyGUIManager(mOgre->getWindow(), mOgre->getScene(), false, logpath); | ||||
|     gui = mGuiManager->getGui(); | ||||
|     mGui = mGuiManager->getGui(); | ||||
| 
 | ||||
|     //Register own widgets with MyGUI
 | ||||
|     MyGUI::FactoryManager::getInstance().registerFactory<DialogueHistory>("Widget"); | ||||
|  | @ -98,11 +98,11 @@ WindowManager::WindowManager( | |||
|     MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag); | ||||
| 
 | ||||
|     // Get size info from the Gui object
 | ||||
|     assert(gui); | ||||
|     assert(mGui); | ||||
|     int w = MyGUI::RenderManager::getInstance().getViewSize().width; | ||||
|     int h = MyGUI::RenderManager::getInstance().getViewSize().height; | ||||
| 
 | ||||
|     MyGUI::Widget* dragAndDropWidget = gui->createWidgetT("Widget","",0,0,w,h,MyGUI::Align::Default,"DragAndDrop","DragAndDropWidget"); | ||||
|     MyGUI::Widget* dragAndDropWidget = mGui->createWidgetT("Widget","",0,0,w,h,MyGUI::Align::Default,"DragAndDrop","DragAndDropWidget"); | ||||
|     dragAndDropWidget->setVisible(false); | ||||
| 
 | ||||
|     mDragAndDrop = new DragAndDrop(); | ||||
|  | @ -110,17 +110,17 @@ WindowManager::WindowManager( | |||
|     mDragAndDrop->mDraggedWidget = 0; | ||||
|     mDragAndDrop->mDragAndDropWidget = dragAndDropWidget; | ||||
| 
 | ||||
|     menu = new MainMenu(w,h); | ||||
|     map = new MapWindow(*this); | ||||
|     mMenu = new MainMenu(w,h); | ||||
|     mMap = new MapWindow(*this); | ||||
|     mStatsWindow = new StatsWindow(*this); | ||||
|     console = new Console(w,h, extensions); | ||||
|     mConsole = new Console(w,h, extensions); | ||||
|     mJournal = new JournalWindow(*this); | ||||
|     mMessageBoxManager = new MessageBoxManager(this); | ||||
|     mInventoryWindow = new InventoryWindow(*this,mDragAndDrop); | ||||
|     mTradeWindow = new TradeWindow(*this); | ||||
|     mDialogueWindow = new DialogueWindow(*this); | ||||
|     mContainerWindow = new ContainerWindow(*this,mDragAndDrop); | ||||
|     hud = new HUD(w,h, showFPSLevel, mDragAndDrop); | ||||
|     mHud = new HUD(w,h, mShowFPSLevel, mDragAndDrop); | ||||
|     mToolTips = new ToolTips(this); | ||||
|     mScrollWindow = new ScrollWindow(*this); | ||||
|     mBookWindow = new BookWindow(*this); | ||||
|  | @ -131,19 +131,19 @@ WindowManager::WindowManager( | |||
|     mSpellWindow = new SpellWindow(*this); | ||||
| 
 | ||||
|     // The HUD is always on
 | ||||
|     hud->setVisible(true); | ||||
|     mHud->setVisible(true); | ||||
| 
 | ||||
|     mCharGen = new CharacterCreation(this); | ||||
| 
 | ||||
|     // Setup player stats
 | ||||
|     for (int i = 0; i < ESM::Attribute::Length; ++i) | ||||
|     { | ||||
|         playerAttributes.insert(std::make_pair(ESM::Attribute::attributeIds[i], MWMechanics::Stat<int>())); | ||||
|         mPlayerAttributes.insert(std::make_pair(ESM::Attribute::attributeIds[i], MWMechanics::Stat<int>())); | ||||
|     } | ||||
| 
 | ||||
|     for (int i = 0; i < ESM::Skill::Length; ++i) | ||||
|     { | ||||
|         playerSkillValues.insert(std::make_pair(ESM::Skill::skillIds[i], MWMechanics::Stat<float>())); | ||||
|         mPlayerSkillValues.insert(std::make_pair(ESM::Skill::skillIds[i], MWMechanics::Stat<float>())); | ||||
|     } | ||||
| 
 | ||||
|     unsetSelectedSpell(); | ||||
|  | @ -156,11 +156,11 @@ WindowManager::WindowManager( | |||
| WindowManager::~WindowManager() | ||||
| { | ||||
|     delete mGuiManager; | ||||
|     delete console; | ||||
|     delete mConsole; | ||||
|     delete mMessageBoxManager; | ||||
|     delete hud; | ||||
|     delete map; | ||||
|     delete menu; | ||||
|     delete mHud; | ||||
|     delete mMap; | ||||
|     delete mMenu; | ||||
|     delete mStatsWindow; | ||||
|     delete mJournal; | ||||
|     delete mDialogueWindow; | ||||
|  | @ -183,13 +183,13 @@ WindowManager::~WindowManager() | |||
| void WindowManager::cleanupGarbage() | ||||
| { | ||||
|     // Delete any dialogs which are no longer in use
 | ||||
|     if (!garbageDialogs.empty()) | ||||
|     if (!mGarbageDialogs.empty()) | ||||
|     { | ||||
|         for (std::vector<OEngine::GUI::Layout*>::iterator it = garbageDialogs.begin(); it != garbageDialogs.end(); ++it) | ||||
|         for (std::vector<OEngine::GUI::Layout*>::iterator it = mGarbageDialogs.begin(); it != mGarbageDialogs.end(); ++it) | ||||
|         { | ||||
|             delete *it; | ||||
|         } | ||||
|         garbageDialogs.clear(); | ||||
|         mGarbageDialogs.clear(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -197,18 +197,18 @@ void WindowManager::update() | |||
| { | ||||
|     cleanupGarbage(); | ||||
| 
 | ||||
|     hud->setFPS(mFPS); | ||||
|     hud->setTriangleCount(mTriangleCount); | ||||
|     hud->setBatchCount(mBatchCount); | ||||
|     mHud->setFPS(mFPS); | ||||
|     mHud->setTriangleCount(mTriangleCount); | ||||
|     mHud->setBatchCount(mBatchCount); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::updateVisible() | ||||
| { | ||||
|     // Start out by hiding everything except the HUD
 | ||||
|     map->setVisible(false); | ||||
|     menu->setVisible(false); | ||||
|     mMap->setVisible(false); | ||||
|     mMenu->setVisible(false); | ||||
|     mStatsWindow->setVisible(false); | ||||
|     console->disable(); | ||||
|     mConsole->disable(); | ||||
|     mJournal->setVisible(false); | ||||
|     mDialogueWindow->setVisible(false); | ||||
|     mContainerWindow->setVisible(false); | ||||
|  | @ -230,10 +230,10 @@ void WindowManager::updateVisible() | |||
|     else | ||||
|         mToolTips->enterGuiMode(); | ||||
| 
 | ||||
|     setMinimapVisibility((allowed & GW_Map) && !map->pinned()); | ||||
|     setWeaponVisibility((allowed & GW_Inventory) && !mInventoryWindow->pinned()); | ||||
|     setSpellVisibility((allowed & GW_Magic) && !mSpellWindow->pinned()); | ||||
|     setHMSVisibility((allowed & GW_Stats) && !mStatsWindow->pinned()); | ||||
|     setMinimapVisibility((mAllowed & GW_Map) && !mMap->pinned()); | ||||
|     setWeaponVisibility((mAllowed & GW_Inventory) && !mInventoryWindow->pinned()); | ||||
|     setSpellVisibility((mAllowed & GW_Magic) && !mSpellWindow->pinned()); | ||||
|     setHMSVisibility((mAllowed & GW_Stats) && !mStatsWindow->pinned()); | ||||
| 
 | ||||
|     // If in game mode, don't show anything.
 | ||||
|     if (gameMode) | ||||
|  | @ -243,13 +243,13 @@ void WindowManager::updateVisible() | |||
| 
 | ||||
|     switch(mode) { | ||||
|         case GM_MainMenu: | ||||
|             menu->setVisible(true); | ||||
|             mMenu->setVisible(true); | ||||
|             break; | ||||
|         case GM_Settings: | ||||
|             mSettingsWindow->setVisible(true); | ||||
|             break; | ||||
|         case GM_Console: | ||||
|             console->enable(); | ||||
|             mConsole->enable(); | ||||
|             break; | ||||
|         case GM_Scroll: | ||||
|             mScrollWindow->setVisible(true); | ||||
|  | @ -276,13 +276,13 @@ void WindowManager::updateVisible() | |||
|             // This is controlled both by what windows the
 | ||||
|             // user has opened/closed (the 'shown' variable) and by what
 | ||||
|             // windows we are allowed to show (the 'allowed' var.)
 | ||||
|             int eff = shown & allowed; | ||||
|             int eff = mShown & mAllowed; | ||||
| 
 | ||||
|             // Show the windows we want
 | ||||
|             map   -> setVisible(eff & GW_Map); | ||||
|             mStatsWindow -> setVisible(eff & GW_Stats); | ||||
|             mMap            ->setVisible(eff & GW_Map); | ||||
|             mStatsWindow    ->setVisible(eff & GW_Stats); | ||||
|             mInventoryWindow->setVisible(eff & GW_Inventory); | ||||
|             mSpellWindow->setVisible(eff & GW_Magic); | ||||
|             mSpellWindow    ->setVisible(eff & GW_Magic); | ||||
|             break; | ||||
|         } | ||||
|         case GM_Container: | ||||
|  | @ -333,7 +333,7 @@ void WindowManager::setValue (const std::string& id, const MWMechanics::Stat<int | |||
|     { | ||||
|         if (id != ids[i]) | ||||
|             continue; | ||||
|         playerAttributes[attributes[i]] = value; | ||||
|         mPlayerAttributes[attributes[i]] = value; | ||||
|         break; | ||||
|     } | ||||
| } | ||||
|  | @ -343,27 +343,27 @@ void WindowManager::setValue(const ESM::Skill::SkillEnum parSkill, const MWMecha | |||
| { | ||||
|     mStatsWindow->setValue(parSkill, value); | ||||
|     mCharGen->setValue(parSkill, value); | ||||
|     playerSkillValues[parSkill] = value; | ||||
|     mPlayerSkillValues[parSkill] = value; | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setValue (const std::string& id, const MWMechanics::DynamicStat<int>& value) | ||||
| { | ||||
|     mStatsWindow->setValue (id, value); | ||||
|     hud->setValue (id, value); | ||||
|     mHud->setValue (id, value); | ||||
|     mCharGen->setValue(id, value); | ||||
|     if (id == "HBar") | ||||
|     { | ||||
|         playerHealth = value; | ||||
|         mPlayerHealth = value; | ||||
|         mCharGen->setPlayerHealth (value); | ||||
|     } | ||||
|     else if (id == "MBar") | ||||
|     { | ||||
|         playerMagicka = value; | ||||
|         mPlayerMagicka = value; | ||||
|         mCharGen->setPlayerMagicka (value); | ||||
|     } | ||||
|     else if (id == "FBar") | ||||
|     { | ||||
|         playerFatigue = value; | ||||
|         mPlayerFatigue = value; | ||||
|         mCharGen->setPlayerFatigue (value); | ||||
|     } | ||||
| } | ||||
|  | @ -372,11 +372,11 @@ void WindowManager::setValue (const std::string& id, const MWMechanics::DynamicS | |||
| MWMechanics::DynamicStat<int> WindowManager::getValue(const std::string& id) | ||||
| { | ||||
|     if(id == "HBar") | ||||
|         return playerHealth; | ||||
|         return layerHealth; | ||||
|     else if (id == "MBar") | ||||
|         return playerMagicka; | ||||
|         return mPlayerMagicka; | ||||
|     else if (id == "FBar") | ||||
|         return playerFatigue; | ||||
|         return mPlayerFatigue; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | @ -384,9 +384,9 @@ void WindowManager::setValue (const std::string& id, const std::string& value) | |||
| { | ||||
|     mStatsWindow->setValue (id, value); | ||||
|     if (id=="name") | ||||
|         playerName = value; | ||||
|         mPlayerName = value; | ||||
|     else if (id=="race") | ||||
|         playerRaceId = value; | ||||
|         mPlayerRaceId = value; | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setValue (const std::string& id, int value) | ||||
|  | @ -396,16 +396,16 @@ void WindowManager::setValue (const std::string& id, int value) | |||
| 
 | ||||
| void WindowManager::setPlayerClass (const ESM::Class &class_) | ||||
| { | ||||
|     playerClass = class_; | ||||
|     mStatsWindow->setValue("class", playerClass.name); | ||||
|     mPlayerClass = class_; | ||||
|     mStatsWindow->setValue("class", mPlayerClass.name); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::configureSkills (const SkillList& major, const SkillList& minor) | ||||
| { | ||||
|     mStatsWindow->configureSkills (major, minor); | ||||
|     mCharGen->configureSkills(major, minor); | ||||
|     playerMajorSkills = major; | ||||
|     playerMinorSkills = minor; | ||||
|     mPlayerMajorSkills = major; | ||||
|     mPlayerMinorSkills = minor; | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setReputation (int reputation) | ||||
|  | @ -429,7 +429,7 @@ void WindowManager::removeDialog(OEngine::GUI::Layout*dialog) | |||
|     if (!dialog) | ||||
|         return; | ||||
|     dialog->setVisible(false); | ||||
|     garbageDialogs.push_back(dialog); | ||||
|     mGarbageDialogs.push_back(dialog); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::messageBox (const std::string& message, const std::vector<std::string>& buttons) | ||||
|  | @ -484,12 +484,12 @@ void WindowManager::onFrame (float frameDuration) | |||
| 
 | ||||
|     mStatsWindow->onFrame(); | ||||
| 
 | ||||
|     hud->onFrame(frameDuration); | ||||
|     mHud->onFrame(frameDuration); | ||||
| 
 | ||||
|     mDialogueWindow->checkReferenceAvailable(); | ||||
|     mTradeWindow->checkReferenceAvailable(); | ||||
|     mContainerWindow->checkReferenceAvailable(); | ||||
|     console->checkReferenceAvailable(); | ||||
|     mConsole->checkReferenceAvailable(); | ||||
| } | ||||
| 
 | ||||
| const ESMS::ESMStore& WindowManager::getStore() const | ||||
|  | @ -513,56 +513,56 @@ void WindowManager::changeCell(MWWorld::Ptr::CellStore* cell) | |||
|                 name = getGameSettingString("sDefaultCellname", "Wilderness"); | ||||
|         } | ||||
| 
 | ||||
|         map->setCellName( name ); | ||||
|         hud->setCellName( name ); | ||||
|         mMap->setCellName( name ); | ||||
|         mHud->setCellName( name ); | ||||
| 
 | ||||
|         map->setCellPrefix("Cell"); | ||||
|         hud->setCellPrefix("Cell"); | ||||
|         map->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY ); | ||||
|         hud->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY ); | ||||
|         mMap->setCellPrefix("Cell"); | ||||
|         mHud->setCellPrefix("Cell"); | ||||
|         mMap->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY ); | ||||
|         mHud->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY ); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         map->setCellName( cell->cell->name ); | ||||
|         hud->setCellName( cell->cell->name ); | ||||
|         map->setCellPrefix( cell->cell->name ); | ||||
|         hud->setCellPrefix( cell->cell->name ); | ||||
|         mMap->setCellName( cell->cell->name ); | ||||
|         mHud->setCellName( cell->cell->name ); | ||||
|         mMap->setCellPrefix( cell->cell->name ); | ||||
|         mHud->setCellPrefix( cell->cell->name ); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setInteriorMapTexture(const int x, const int y) | ||||
| { | ||||
|     map->setActiveCell(x,y, true); | ||||
|     hud->setActiveCell(x,y, true); | ||||
|     mMap->setActiveCell(x,y, true); | ||||
|     mHud->setActiveCell(x,y, true); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setPlayerPos(const float x, const float y) | ||||
| { | ||||
|     map->setPlayerPos(x,y); | ||||
|     hud->setPlayerPos(x,y); | ||||
|     mMap->setPlayerPos(x,y); | ||||
|     mHud->setPlayerPos(x,y); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setPlayerDir(const float x, const float y) | ||||
| { | ||||
|     map->setPlayerDir(x,y); | ||||
|     hud->setPlayerDir(x,y); | ||||
|     mMap->setPlayerDir(x,y); | ||||
|     mHud->setPlayerDir(x,y); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setHMSVisibility(bool visible) | ||||
| { | ||||
|     hud->setBottomLeftVisibility(visible, hud->weapBox->getVisible(), hud->spellBox->getVisible()); | ||||
|     mHud->setBottomLeftVisibility(visible, mHud->mWeapBox->getVisible(), mHud->mSpellBox->getVisible()); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setMinimapVisibility(bool visible) | ||||
| { | ||||
|     hud->setBottomRightVisibility(hud->effectBox->getVisible(), visible); | ||||
|     mHud->setBottomRightVisibility(mHud->mEffectBox->getVisible(), visible); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::toggleFogOfWar() | ||||
| { | ||||
|     map->toggleFogOfWar(); | ||||
|     hud->toggleFogOfWar(); | ||||
|     mMap->toggleFogOfWar(); | ||||
|     mHud->toggleFogOfWar(); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setFocusObject(const MWWorld::Ptr& focus) | ||||
|  | @ -587,13 +587,13 @@ bool WindowManager::getFullHelp() const | |||
| 
 | ||||
| void WindowManager::setWeaponVisibility(bool visible) | ||||
| { | ||||
|     hud->setBottomLeftVisibility(hud->health->getVisible(), visible, hud->spellBox->getVisible()); | ||||
|     mHud->setBottomLeftVisibility(mHud->health->getVisible(), visible, mHud->mSpellBox->getVisible()); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setSpellVisibility(bool visible) | ||||
| { | ||||
|     hud->setBottomLeftVisibility(hud->health->getVisible(), hud->weapBox->getVisible(), visible); | ||||
|     hud->setBottomRightVisibility(visible, hud->minimapBox->getVisible()); | ||||
|     mHud->setBottomLeftVisibility(mHud->health->getVisible(), mHud->mWeapBox->getVisible(), visible); | ||||
|     mHud->setBottomRightVisibility(visible, mHud->mMinimapBox->getVisible()); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setMouseVisible(bool visible) | ||||
|  | @ -618,7 +618,7 @@ void WindowManager::onRetrieveTag(const MyGUI::UString& _tag, MyGUI::UString& _r | |||
| 
 | ||||
| void WindowManager::processChangedSettings(const Settings::CategorySettingVector& changed) | ||||
| { | ||||
|     hud->setFpsLevel(Settings::Manager::getInt("fps", "HUD")); | ||||
|     mHud->setFpsLevel(Settings::Manager::getInt("fps", "HUD")); | ||||
|     mToolTips->setDelay(Settings::Manager::getFloat("tooltip delay", "GUI")); | ||||
| 
 | ||||
|     bool changeRes = false; | ||||
|  | @ -637,8 +637,8 @@ void WindowManager::processChangedSettings(const Settings::CategorySettingVector | |||
|     { | ||||
|         int x = Settings::Manager::getInt("resolution x", "Video"); | ||||
|         int y = Settings::Manager::getInt("resolution y", "Video"); | ||||
|         hud->onResChange(x, y); | ||||
|         console->onResChange(x, y); | ||||
|         mHud->onResChange(x, y); | ||||
|         mConsole->onResChange(x, y); | ||||
|         mSettingsWindow->center(); | ||||
|         mAlchemyWindow->center(); | ||||
|         mScrollWindow->center(); | ||||
|  | @ -649,7 +649,7 @@ void WindowManager::processChangedSettings(const Settings::CategorySettingVector | |||
| 
 | ||||
| void WindowManager::pushGuiMode(GuiMode mode) | ||||
| { | ||||
|     if (mode==GM_Inventory && allowed==GW_None) | ||||
|     if (mode==GM_Inventory && mAllowed==GW_None) | ||||
|         return; | ||||
| 
 | ||||
|     mGuiModes.push_back(mode); | ||||
|  | @ -690,32 +690,32 @@ void WindowManager::removeGuiMode(GuiMode mode) | |||
| 
 | ||||
| void WindowManager::setSelectedSpell(const std::string& spellId, int successChancePercent) | ||||
| { | ||||
|     hud->setSelectedSpell(spellId, successChancePercent); | ||||
|     mHud->setSelectedSpell(spellId, successChancePercent); | ||||
|     const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().spells.find(spellId); | ||||
|     mSpellWindow->setTitle(spell->name); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) | ||||
| { | ||||
|     hud->setSelectedEnchantItem(item, chargePercent); | ||||
|     mHud->setSelectedEnchantItem(item, chargePercent); | ||||
|     mSpellWindow->setTitle(MWWorld::Class::get(item).getName(item)); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent) | ||||
| { | ||||
|     hud->setSelectedWeapon(item, durabilityPercent); | ||||
|     mHud->setSelectedWeapon(item, durabilityPercent); | ||||
|     mInventoryWindow->setTitle(MWWorld::Class::get(item).getName(item)); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::unsetSelectedSpell() | ||||
| { | ||||
|     hud->unsetSelectedSpell(); | ||||
|     mHud->unsetSelectedSpell(); | ||||
|     mSpellWindow->setTitle("#{sNone}"); | ||||
| } | ||||
| 
 | ||||
| void WindowManager::unsetSelectedWeapon() | ||||
| { | ||||
|     hud->unsetSelectedWeapon(); | ||||
|     mHud->unsetSelectedWeapon(); | ||||
|     mInventoryWindow->setTitle("#{sSkillHandtohand}"); | ||||
| } | ||||
| 
 | ||||
|  | @ -738,5 +738,5 @@ void WindowManager::getMousePosition(float &x, float &y) | |||
| 
 | ||||
| bool WindowManager::getWorldMouseOver() | ||||
| { | ||||
|     return hud->getWorldMouseOver(); | ||||
|     return mHud->getWorldMouseOver(); | ||||
| } | ||||
|  |  | |||
|  | @ -119,27 +119,27 @@ namespace MWGui | |||
| 
 | ||||
|     void toggleVisible(GuiWindow wnd) | ||||
|     { | ||||
|         shown = (shown & wnd) ? (GuiWindow) (shown & ~wnd) : (GuiWindow) (shown | wnd); | ||||
|         mShown = (mShown & wnd) ? (GuiWindow) (mShown & ~wnd) : (GuiWindow) (mShown | wnd); | ||||
|         updateVisible(); | ||||
|     } | ||||
| 
 | ||||
|     // Disallow all inventory mode windows
 | ||||
|     void disallowAll() | ||||
|     { | ||||
|       allowed = GW_None; | ||||
|       mAllowed = GW_None; | ||||
|       updateVisible(); | ||||
|     } | ||||
| 
 | ||||
|     // Allow one or more windows
 | ||||
|     void allow(GuiWindow wnd) | ||||
|     { | ||||
|       allowed = (GuiWindow)(allowed | wnd); | ||||
|       mAllowed = (GuiWindow)(mAllowed | wnd); | ||||
|       updateVisible(); | ||||
|     } | ||||
| 
 | ||||
|     bool isAllowed(GuiWindow wnd) const | ||||
|     { | ||||
|         return allowed & wnd; | ||||
|         return mAllowed & wnd; | ||||
|     } | ||||
| 
 | ||||
|     MWGui::DialogueWindow* getDialogueWindow() {return mDialogueWindow;} | ||||
|  | @ -151,9 +151,9 @@ namespace MWGui | |||
|     MWGui::ConfirmationDialog* getConfirmationDialog() {return mConfirmationDialog;} | ||||
|     MWGui::TradeWindow* getTradeWindow() {return mTradeWindow;} | ||||
|     MWGui::SpellWindow* getSpellWindow() {return mSpellWindow;} | ||||
|     MWGui::Console* getConsole() {return console;} | ||||
|     MWGui::Console* getConsole() {return mConsole;} | ||||
| 
 | ||||
|     MyGUI::Gui* getGui() const { return gui; } | ||||
|     MyGUI::Gui* getGui() const { return mGui; } | ||||
| 
 | ||||
|     void wmUpdateFps(float fps, unsigned int triangleCount, unsigned int batchCount) | ||||
|     { | ||||
|  | @ -219,10 +219,10 @@ namespace MWGui | |||
| 
 | ||||
|     void onFrame (float frameDuration); | ||||
| 
 | ||||
|     std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > getPlayerSkillValues() { return playerSkillValues; } | ||||
|     std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > getPlayerAttributeValues() { return playerAttributes; } | ||||
|     SkillList getPlayerMinorSkills() { return playerMinorSkills; } | ||||
|     SkillList getPlayerMajorSkills() { return playerMajorSkills; } | ||||
|     std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > getPlayerSkillValues() { return mPlayerSkillValues; } | ||||
|     std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > getPlayerAttributeValues() { return mPlayerAttributes; } | ||||
|     SkillList getPlayerMinorSkills() { return mPlayerMinorSkills; } | ||||
|     SkillList getPlayerMajorSkills() { return mPlayerMajorSkills; } | ||||
| 
 | ||||
|     /**
 | ||||
|      * Fetches a GMST string from the store, if there is no setting with the given | ||||
|  | @ -239,13 +239,13 @@ namespace MWGui | |||
| 
 | ||||
|   private: | ||||
|     OEngine::GUI::MyGUIManager *mGuiManager; | ||||
|     HUD *hud; | ||||
|     MapWindow *map; | ||||
|     MainMenu *menu; | ||||
|     HUD *mHud; | ||||
|     MapWindow *mMap; | ||||
|     MainMenu *mMenu; | ||||
|     ToolTips *mToolTips; | ||||
|     StatsWindow *mStatsWindow; | ||||
|     MessageBoxManager *mMessageBoxManager; | ||||
|     Console *console; | ||||
|     Console *mConsole; | ||||
|     JournalWindow* mJournal; | ||||
|     DialogueWindow *mDialogueWindow; | ||||
|     ContainerWindow *mContainerWindow; | ||||
|  | @ -263,33 +263,33 @@ namespace MWGui | |||
|     CharacterCreation* mCharGen; | ||||
| 
 | ||||
|     // Various stats about player as needed by window manager
 | ||||
|     ESM::Class playerClass; | ||||
|     std::string playerName; | ||||
|     std::string playerRaceId; | ||||
|     std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > playerAttributes; | ||||
|     SkillList playerMajorSkills, playerMinorSkills; | ||||
|     std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > playerSkillValues; | ||||
|     MWMechanics::DynamicStat<int> playerHealth, playerMagicka, playerFatigue; | ||||
|     ESM::Class mPlayerClass; | ||||
|     std::string mPlayerName; | ||||
|     std::string mPlayerRaceId; | ||||
|     std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > mPlayerAttributes; | ||||
|     SkillList mPlayerMajorSkills, mPlayerMinorSkills; | ||||
|     std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > mPlayerSkillValues; | ||||
|     MWMechanics::DynamicStat<int> mPlayerHealth, mPlayerMagicka, mPlayerFatigue; | ||||
| 
 | ||||
| 
 | ||||
|     MyGUI::Gui *gui; // Gui
 | ||||
|     MyGUI::Gui *mGui; // Gui
 | ||||
|     std::vector<GuiMode> mGuiModes; | ||||
| 
 | ||||
|     std::vector<OEngine::GUI::Layout*> garbageDialogs; | ||||
|     std::vector<OEngine::GUI::Layout*> mGarbageDialogs; | ||||
|     void cleanupGarbage(); | ||||
| 
 | ||||
|     GuiWindow shown; // Currently shown windows in inventory mode
 | ||||
|     GuiWindow mShown; // Currently shown windows in inventory mode
 | ||||
| 
 | ||||
|     /* Currently ALLOWED windows in inventory mode. This is used at
 | ||||
|        the start of the game, when windows are enabled one by one | ||||
|        through script commands. You can manipulate this through using | ||||
|        allow() and disableAll(). | ||||
|      */ | ||||
|     GuiWindow allowed; | ||||
|     GuiWindow mAllowed; | ||||
| 
 | ||||
|     void updateVisible(); // Update visibility of all windows based on mode, shown and allowed settings
 | ||||
| 
 | ||||
|     int showFPSLevel; | ||||
|     int mShowFPSLevel; | ||||
|     float mFPS; | ||||
|     unsigned int mTriangleCount; | ||||
|     unsigned int mBatchCount; | ||||
|  |  | |||
|  | @ -6,25 +6,26 @@ | |||
| #include <OgreBone.h> | ||||
| #include <OgreSubMesh.h> | ||||
| 
 | ||||
| namespace MWRender{ | ||||
|     std::map<std::string, int> Animation::mUniqueIDs; | ||||
| namespace MWRender | ||||
| { | ||||
|     std::map<std::string, int> Animation::sUniqueIDs; | ||||
| 
 | ||||
|     Animation::Animation(OEngine::Render::OgreRenderer& _rend) | ||||
|         : insert(NULL) | ||||
|         : mInsert(NULL) | ||||
|         , mRend(_rend) | ||||
|         , vecRotPos() | ||||
|         , time(0.0f) | ||||
|         , startTime(0.0f) | ||||
|         , stopTime(0.0f) | ||||
|         , animate(0) | ||||
|         , rindexI() | ||||
|         , tindexI() | ||||
|         , shapeNumber(0) | ||||
|         , shapeIndexI() | ||||
|         , shapes(NULL) | ||||
|         , transformations(NULL) | ||||
|         , textmappings(NULL) | ||||
|         , base(NULL) | ||||
|         , mVecRotPos() | ||||
|         , mTime(0.0f) | ||||
|         , mStartTime(0.0f) | ||||
|         , mStopTime(0.0f) | ||||
|         , mAnimate(0) | ||||
|         , mRindexI() | ||||
|         , mTindexI() | ||||
|         , mShapeNumber(0) | ||||
|         , mShapeIndexI() | ||||
|         , mShapes(NULL) | ||||
|         , mTransformations(NULL) | ||||
|         , mTextmappings(NULL) | ||||
|         , mBase(NULL) | ||||
|     { | ||||
|     } | ||||
| 
 | ||||
|  | @ -32,178 +33,191 @@ namespace MWRender{ | |||
|     { | ||||
|     } | ||||
| 
 | ||||
|     std::string Animation::getUniqueID(std::string mesh){ | ||||
|     int counter; | ||||
|     std::string copy = mesh; | ||||
|     std::transform(copy.begin(), copy.end(), copy.begin(), ::tolower); | ||||
|     if(mUniqueIDs.find(copy) == mUniqueIDs.end()){ | ||||
|         counter = mUniqueIDs[copy] = 0; | ||||
|     } | ||||
|     else{ | ||||
|         mUniqueIDs[copy] = mUniqueIDs[copy] + 1; | ||||
|         counter = mUniqueIDs[copy]; | ||||
|     } | ||||
| 
 | ||||
|     std::stringstream out; | ||||
| 			if(counter > 99 && counter < 1000) | ||||
| 				out << "0"; | ||||
| 			else if(counter > 9) | ||||
| 				out << "00"; | ||||
| 			else | ||||
| 				out << "000"; | ||||
|             out << counter; | ||||
|     return out.str(); | ||||
| } | ||||
| 	void Animation::startScript(std::string groupname, int mode, int loops){ | ||||
| 		//If groupname is recognized set animate to true
 | ||||
| 		//Set the start time and stop time
 | ||||
| 		//How many times to loop
 | ||||
|         if(groupname == "all"){ | ||||
|             animate = loops; | ||||
|             time = startTime; | ||||
|     std::string Animation::getUniqueID(std::string mesh) | ||||
|     { | ||||
|         int counter; | ||||
|         std::string copy = mesh; | ||||
|         std::transform(copy.begin(), copy.end(), copy.begin(), ::tolower); | ||||
|          | ||||
|         if(sUniqueIDs.find(copy) == sUniqueIDs.end()) | ||||
|         { | ||||
|             counter = sUniqueIDs[copy] = 0; | ||||
|         } | ||||
|         else if(textmappings){ | ||||
|         else | ||||
|         { | ||||
|             sUniqueIDs[copy] = sUniqueIDs[copy] + 1; | ||||
|             counter = sUniqueIDs[copy]; | ||||
|         } | ||||
| 
 | ||||
|         std::stringstream out; | ||||
|          | ||||
|         if(counter > 99 && counter < 1000) | ||||
|             out << "0"; | ||||
|         else if(counter > 9) | ||||
|             out << "00"; | ||||
|         else | ||||
|             out << "000"; | ||||
|         out << counter; | ||||
|          | ||||
|         return out.str(); | ||||
|     } | ||||
|      | ||||
|     void Animation::startScript(std::string groupname, int mode, int loops) | ||||
|     { | ||||
|         //If groupname is recognized set animate to true
 | ||||
|         //Set the start time and stop time
 | ||||
|         //How many times to loop
 | ||||
|         if(groupname == "all") | ||||
|         { | ||||
|             mAnimate = loops; | ||||
|             mTime = mStartTime; | ||||
|         } | ||||
|         else if(mTextmappings) | ||||
|         { | ||||
| 
 | ||||
|             std::string startName = groupname + ": loop start"; | ||||
|             std::string stopName = groupname + ": loop stop"; | ||||
| 
 | ||||
|             bool first = false; | ||||
| 
 | ||||
|             if(loops > 1){ | ||||
|             if(loops > 1) | ||||
|             { | ||||
|                 startName = groupname + ": loop start"; | ||||
|                 stopName = groupname + ": loop stop"; | ||||
| 
 | ||||
|                 for(std::map<std::string, float>::iterator iter = textmappings->begin(); iter != textmappings->end(); iter++){ | ||||
|                 for(std::map<std::string, float>::iterator iter = mTextmappings->begin(); iter != mTextmappings->end(); iter++) | ||||
|                 { | ||||
| 
 | ||||
|                 std::string current = iter->first.substr(0, startName.size()); | ||||
|                 std::transform(current.begin(), current.end(), current.begin(), ::tolower); | ||||
|                 std::string current2 = iter->first.substr(0, stopName.size()); | ||||
|                 std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower); | ||||
|                     std::string current = iter->first.substr(0, startName.size()); | ||||
|                     std::transform(current.begin(), current.end(), current.begin(), ::tolower); | ||||
|                     std::string current2 = iter->first.substr(0, stopName.size()); | ||||
|                     std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower); | ||||
| 
 | ||||
|                 if(current == startName){ | ||||
|                     startTime = iter->second; | ||||
|                      animate = loops; | ||||
|                      time = startTime; | ||||
|                      first = true; | ||||
|                 } | ||||
|                 if(current2 == stopName){ | ||||
|                     stopTime = iter->second; | ||||
|                     if(first) | ||||
|                         break; | ||||
|                 } | ||||
|                     if(current == startName) | ||||
|                     { | ||||
|                         mStartTime = iter->second; | ||||
|                          mAnimate = loops; | ||||
|                          mTime = mStartTime; | ||||
|                          first = true; | ||||
|                     } | ||||
|                     if(current2 == stopName) | ||||
|                     { | ||||
|                         mStopTime = iter->second; | ||||
|                         if(first) | ||||
|                             break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             if(!first){ | ||||
|             if(!first) | ||||
|             { | ||||
|                 startName = groupname + ": start"; | ||||
|                 stopName = groupname + ": stop"; | ||||
| 
 | ||||
|             for(std::map<std::string, float>::iterator iter = textmappings->begin(); iter != textmappings->end(); iter++){ | ||||
|                 for(std::map<std::string, float>::iterator iter = mTextmappings->begin(); iter != mTextmappings->end(); iter++) | ||||
|                 { | ||||
| 
 | ||||
|                 std::string current = iter->first.substr(0, startName.size()); | ||||
|                 std::transform(current.begin(), current.end(), current.begin(), ::tolower); | ||||
|                 std::string current2 = iter->first.substr(0, stopName.size()); | ||||
|                 std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower); | ||||
|                     std::string current = iter->first.substr(0, startName.size()); | ||||
|                     std::transform(current.begin(), current.end(), current.begin(), ::tolower); | ||||
|                     std::string current2 = iter->first.substr(0, stopName.size()); | ||||
|                     std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower); | ||||
| 
 | ||||
|                 if(current == startName){ | ||||
|                     startTime = iter->second; | ||||
|                      animate = loops; | ||||
|                      time = startTime; | ||||
|                      first = true; | ||||
|                 } | ||||
|                 if(current2 == stopName){ | ||||
|                     stopTime = iter->second; | ||||
|                     if(first) | ||||
|                         break; | ||||
|                     if(current == startName) | ||||
|                     { | ||||
|                         mStartTime = iter->second; | ||||
|                         mAnimate = loops; | ||||
|                         mTime = mStartTime; | ||||
|                         first = true; | ||||
|                     } | ||||
|                     if(current2 == stopName) | ||||
|                     { | ||||
|                         mStopTime = iter->second; | ||||
|                         if(first) | ||||
|                             break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             } | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
| 	} | ||||
|     void Animation::stopScript(){ | ||||
|         animate = 0; | ||||
|     } | ||||
| 
 | ||||
|    void Animation::handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel){ | ||||
|         shapeNumber = 0; | ||||
|          | ||||
|     void Animation::stopScript() | ||||
|     { | ||||
|         mAnimate = 0; | ||||
|     } | ||||
|      | ||||
|     void Animation::handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel) | ||||
|     { | ||||
|         mShapeNumber = 0; | ||||
| 
 | ||||
|         if (allshapes == NULL || creaturemodel == NULL || skel == NULL) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         std::vector<Nif::NiTriShapeCopy>::iterator allshapesiter; | ||||
| 	    for(allshapesiter = allshapes->begin(); allshapesiter != allshapes->end(); allshapesiter++) | ||||
|         for(allshapesiter = allshapes->begin(); allshapesiter != allshapes->end(); allshapesiter++) | ||||
|         { | ||||
|             //std::map<unsigned short, PosAndRot> vecPosRot;
 | ||||
| 
 | ||||
|                 { | ||||
|                     //std::map<unsigned short, PosAndRot> vecPosRot;
 | ||||
|             Nif::NiTriShapeCopy& copy = *allshapesiter; | ||||
|             std::vector<Ogre::Vector3>* allvertices = ©.vertices; | ||||
| 
 | ||||
| 			Nif::NiTriShapeCopy& copy = *allshapesiter; | ||||
| 			std::vector<Ogre::Vector3>* allvertices = ©.vertices; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 			//std::set<unsigned int> vertices;
 | ||||
| 			//std::set<unsigned int> normals;
 | ||||
| 			//std::vector<Nif::NiSkinData::BoneInfoCopy> boneinfovector =  copy.boneinfo;
 | ||||
|             //std::set<unsigned int> vertices;
 | ||||
|             //std::set<unsigned int> normals;
 | ||||
|             //std::vector<Nif::NiSkinData::BoneInfoCopy> boneinfovector =  copy.boneinfo;
 | ||||
|             std::map<int, std::vector<Nif::NiSkinData::IndividualWeight> >* verticesToChange = ©.vertsToWeights; | ||||
| 
 | ||||
| 			//std::cout << "Name " << copy.sname << "\n";
 | ||||
| 			Ogre::HardwareVertexBufferSharedPtr vbuf = creaturemodel->getMesh()->getSubMesh(copy.sname)->vertexData->vertexBufferBinding->getBuffer(0); | ||||
| 		            Ogre::Real* pReal = static_cast<Ogre::Real*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL)); | ||||
|             //std::cout << "Name " << copy.sname << "\n";
 | ||||
|             Ogre::HardwareVertexBufferSharedPtr vbuf = creaturemodel->getMesh()->getSubMesh(copy.sname)->vertexData->vertexBufferBinding->getBuffer(0); | ||||
|             Ogre::Real* pReal = static_cast<Ogre::Real*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL)); | ||||
| 
 | ||||
| 
 | ||||
| 				std::vector<Ogre::Vector3> initialVertices = copy.morph.getInitialVertices(); | ||||
| 				//Each shape has multiple indices
 | ||||
| 				if(initialVertices.size() ) | ||||
| 				{ | ||||
|             std::vector<Ogre::Vector3> initialVertices = copy.morph.getInitialVertices(); | ||||
|             //Each shape has multiple indices
 | ||||
|             if(initialVertices.size() ) | ||||
|             { | ||||
|                 if(copy.vertices.size() == initialVertices.size()) | ||||
|                 { | ||||
|                     //Create if it doesn't already exist
 | ||||
|                     if(mShapeIndexI.size() == static_cast<std::size_t> (mShapeNumber)) | ||||
|                     { | ||||
|                         std::vector<int> vec; | ||||
|                         mShapeIndexI.push_back(vec); | ||||
|                     } | ||||
|                     if(mTime >= copy.morph.getStartTime() && mTime <= copy.morph.getStopTime()) | ||||
|                     { | ||||
|                         float x; | ||||
|                         for (unsigned int i = 0; i < copy.morph.getAdditionalVertices().size(); i++) | ||||
|                         { | ||||
|                             int j = 0; | ||||
|                             if(mShapeIndexI[mShapeNumber].size() <= i) | ||||
|                                 mShapeIndexI[mShapeNumber].push_back(0); | ||||
| 
 | ||||
| 					if(copy.vertices.size() == initialVertices.size()) | ||||
| 					{ | ||||
| 						//Create if it doesn't already exist
 | ||||
| 						if(shapeIndexI.size() == static_cast<std::size_t> (shapeNumber)) | ||||
| 						{ | ||||
| 							std::vector<int> vec; | ||||
| 							shapeIndexI.push_back(vec); | ||||
| 						} | ||||
|                         if(time >= copy.morph.getStartTime() && time <= copy.morph.getStopTime()){ | ||||
| 						float x; | ||||
| 						for (unsigned int i = 0; i < copy.morph.getAdditionalVertices().size(); i++){ | ||||
| 							int j = 0; | ||||
| 							if(shapeIndexI[shapeNumber].size() <= i) | ||||
| 								shapeIndexI[shapeNumber].push_back(0); | ||||
|                             if(timeIndex(mTime,copy.morph.getRelevantTimes()[i],(mShapeIndexI[mShapeNumber])[i], j, x)) | ||||
|                             { | ||||
|                                 int indexI = (mShapeIndexI[mShapeNumber])[i]; | ||||
|                                 std::vector<Ogre::Vector3> relevantData = (copy.morph.getRelevantData()[i]); | ||||
|                                 float v1 = relevantData[indexI].x; | ||||
|                                 float v2 = relevantData[j].x; | ||||
|                                 float t = v1 + (v2 - v1) * x; | ||||
|                                  | ||||
|                                 if ( t < 0 ) | ||||
|                                     t = 0; | ||||
|                                 if ( t > 1 ) | ||||
|                                     t = 1; | ||||
|                                 if( t != 0 && initialVertices.size() == copy.morph.getAdditionalVertices()[i].size()) | ||||
|                                     for (unsigned int v = 0; v < initialVertices.size(); v++) | ||||
|                                         initialVertices[v] += ((copy.morph.getAdditionalVertices()[i])[v]) * t; | ||||
|                             } | ||||
| 
 | ||||
| 
 | ||||
| 							if(timeIndex(time,copy.morph.getRelevantTimes()[i],(shapeIndexI[shapeNumber])[i], j, x)){ | ||||
| 							int indexI = (shapeIndexI[shapeNumber])[i]; | ||||
| 							std::vector<Ogre::Vector3> relevantData = (copy.morph.getRelevantData()[i]); | ||||
| 							float v1 = relevantData[indexI].x; | ||||
| 							float v2 = relevantData[j].x; | ||||
| 							float t = v1 + (v2 - v1) * x; | ||||
| 							if ( t < 0 ) t = 0; | ||||
| 							if ( t > 1 ) t = 1; | ||||
| 						    if( t != 0 && initialVertices.size() == copy.morph.getAdditionalVertices()[i].size()) | ||||
| 							{ | ||||
| 								for (unsigned int v = 0; v < initialVertices.size(); v++){ | ||||
| 									initialVertices[v] += ((copy.morph.getAdditionalVertices()[i])[v]) * t; | ||||
| 								} | ||||
| 							} | ||||
| 
 | ||||
| 							} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 						} | ||||
| 
 | ||||
| 						allvertices = &initialVertices; | ||||
|                         } | ||||
| 						shapeNumber++; | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
|                         allvertices = &initialVertices; | ||||
|                     } | ||||
|                     mShapeNumber++; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
| 			    if(verticesToChange->size() > 0){ | ||||
|             if(verticesToChange->size() > 0) | ||||
|             { | ||||
| 
 | ||||
|                 for(std::map<int, std::vector<Nif::NiSkinData::IndividualWeight> >::iterator iter = verticesToChange->begin(); | ||||
|                     iter != verticesToChange->end(); iter++) | ||||
|  | @ -214,26 +228,25 @@ namespace MWRender{ | |||
|                     Nif::NiSkinData::BoneInfoCopy* boneinfocopy = &(allshapesiter->boneinfo[inds[0].boneinfocopyindex]); | ||||
|                     Ogre::Bone *bonePtr = 0; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|                     Ogre::Vector3 vecPos; | ||||
|                     Ogre::Quaternion vecRot; | ||||
| 					std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot>::iterator result = vecRotPos.find(boneinfocopy); | ||||
|                     std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot>::iterator result = mVecRotPos.find(boneinfocopy); | ||||
| 
 | ||||
|                     if(result == vecRotPos.end()){ | ||||
|                     if(result == mVecRotPos.end()) | ||||
|                     { | ||||
|                         bonePtr = skel->getBone(boneinfocopy->bonename); | ||||
| 
 | ||||
|                         vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.trans; | ||||
|                         vecRot = bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.rotation; | ||||
| 
 | ||||
| 
 | ||||
|                              PosAndRot both; | ||||
|                             both.vecPos = vecPos; | ||||
|                             both.vecRot = vecRot; | ||||
|                             vecRotPos[boneinfocopy] = both; | ||||
|                         PosAndRot both; | ||||
|                         both.vecPos = vecPos; | ||||
|                         both.vecRot = vecRot; | ||||
|                         mVecRotPos[boneinfocopy] = both; | ||||
| 
 | ||||
|                     } | ||||
|                     else{ | ||||
|                     else | ||||
|                     { | ||||
|                         PosAndRot both = result->second; | ||||
|                         vecPos = both.vecPos; | ||||
|                         vecRot = both.vecRot; | ||||
|  | @ -241,263 +254,249 @@ namespace MWRender{ | |||
| 
 | ||||
|                     Ogre::Vector3 absVertPos = (vecPos + vecRot * currentVertex) * inds[0].weight; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|                     for(std::size_t i = 1; i < inds.size(); i++){ | ||||
|                     for(std::size_t i = 1; i < inds.size(); i++) | ||||
|                     { | ||||
|                         boneinfocopy = &(allshapesiter->boneinfo[inds[i].boneinfocopyindex]); | ||||
|                         result = vecRotPos.find(boneinfocopy); | ||||
|                         result = mVecRotPos.find(boneinfocopy); | ||||
| 
 | ||||
| 
 | ||||
|                         if(result == vecRotPos.end()){ | ||||
|                         if(result == mVecRotPos.end()) | ||||
|                         { | ||||
|                             bonePtr = skel->getBone(boneinfocopy->bonename); | ||||
|                             vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.trans; | ||||
|                             vecRot = bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.rotation; | ||||
| 
 | ||||
|                                 PosAndRot both; | ||||
|                                 both.vecPos = vecPos; | ||||
|                                 both.vecRot = vecRot; | ||||
|                                 vecRotPos[boneinfocopy] = both; | ||||
|                             PosAndRot both; | ||||
|                             both.vecPos = vecPos; | ||||
|                             both.vecRot = vecRot; | ||||
|                             mVecRotPos[boneinfocopy] = both; | ||||
| 
 | ||||
|                         } | ||||
|                          else{ | ||||
|                                 PosAndRot both = result->second; | ||||
|                                 vecPos = both.vecPos; | ||||
|                                 vecRot = both.vecRot; | ||||
|                         else | ||||
|                         { | ||||
|                             PosAndRot both = result->second; | ||||
|                             vecPos = both.vecPos; | ||||
|                             vecRot = both.vecRot; | ||||
|                         } | ||||
| 
 | ||||
| 
 | ||||
|                         absVertPos += (vecPos + vecRot * currentVertex) * inds[i].weight; | ||||
| 
 | ||||
|                     } | ||||
|                     Ogre::Real* addr = (pReal + 3 * verIndex); | ||||
|                     *addr = absVertPos.x; | ||||
|                     *(addr+1) = absVertPos.y; | ||||
|                     *(addr+2) = absVertPos.z; | ||||
| 
 | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 //Ogre::Bone *bonePtr = creaturemodel->getSkeleton()->getBone(copy.bonename);
 | ||||
|                 Ogre::Quaternion shaperot = copy.trafo.rotation; | ||||
|                 Ogre::Vector3 shapetrans = copy.trafo.trans; | ||||
|                 float shapescale = copy.trafo.scale; | ||||
|                 std::vector<std::string> boneSequence = copy.boneSequence; | ||||
| 
 | ||||
|                 Ogre::Vector3 transmult; | ||||
|                 Ogre::Quaternion rotmult; | ||||
|                 float scale; | ||||
|                 if(boneSequence.size() > 0) | ||||
|                 { | ||||
|                     std::vector<std::string>::iterator boneSequenceIter = boneSequence.begin(); | ||||
|                     if(skel->hasBone(*boneSequenceIter)) | ||||
|                     { | ||||
|                         Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter); | ||||
| 
 | ||||
|                         transmult = bonePtr->getPosition(); | ||||
|                         rotmult = bonePtr->getOrientation(); | ||||
|                         scale = bonePtr->getScale().x; | ||||
|                         boneSequenceIter++; | ||||
| 
 | ||||
|                         for(; boneSequenceIter != boneSequence.end(); boneSequenceIter++) | ||||
|                         { | ||||
|                             if(skel->hasBone(*boneSequenceIter)) | ||||
|                             { | ||||
|                                 Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter); | ||||
|                                 // Computes C = B + AxC*scale
 | ||||
|                                 transmult = transmult + rotmult * bonePtr->getPosition(); | ||||
|                                 rotmult = rotmult * bonePtr->getOrientation(); | ||||
|                                 scale = scale * bonePtr->getScale().x; | ||||
|                             } | ||||
|                             //std::cout << "Bone:" << *boneSequenceIter << "   ";
 | ||||
|                         } | ||||
|                         transmult = transmult + rotmult * shapetrans; | ||||
|                         rotmult = rotmult * shaperot; | ||||
|                         scale = shapescale * scale; | ||||
| 
 | ||||
|                         //std::cout << "Position: " << transmult << "Rotation: " << rotmult << "\n";
 | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     transmult = shapetrans; | ||||
|                     rotmult = shaperot; | ||||
|                     scale = shapescale; | ||||
|                 } | ||||
| 
 | ||||
|                 // Computes C = B + AxC*scale
 | ||||
|                 // final_vector = old_vector + old_rotation*new_vector*old_scale/
 | ||||
| 
 | ||||
|                 for(unsigned int i = 0; i < allvertices->size(); i++) | ||||
|                 { | ||||
|                     Ogre::Vector3 current = transmult + rotmult * (*allvertices)[i]; | ||||
|                     Ogre::Real* addr = pReal + i * 3; | ||||
|                     *addr = current.x; | ||||
|                     *(addr+1) = current.y; | ||||
|                     *(addr + 2) = current.z; | ||||
| 
 | ||||
|                 }/*
 | ||||
|                 for(int i = 0; i < allnormals.size(); i++){ | ||||
|                     Ogre::Vector3 current =rotmult * allnormals[i]; | ||||
|                     Ogre::Real* addr = pRealNormal + i * 3; | ||||
|                     *addr = current.x; | ||||
|                     *(addr+1) = current.y; | ||||
|                     *(addr + 2) = current.z; | ||||
| 
 | ||||
|                 }*/ | ||||
| 
 | ||||
|             } | ||||
|             vbuf->unlock(); | ||||
|         } | ||||
|      | ||||
|     } | ||||
|          | ||||
|     bool Animation::timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x ) | ||||
|     { | ||||
|         int count; | ||||
|         if (  (count = times.size()) > 0 ) | ||||
|         { | ||||
|             if ( time <= times[0] ) | ||||
|             { | ||||
|                 i = j = 0; | ||||
|                 x = 0.0; | ||||
|                 return true; | ||||
|             } | ||||
|             if ( time >= times[count - 1] ) | ||||
|             { | ||||
|                 i = j = count - 1; | ||||
|                 x = 0.0; | ||||
|                 return true; | ||||
|             } | ||||
| 
 | ||||
|             if ( i < 0 || i >= count ) | ||||
|                 i = 0; | ||||
| 
 | ||||
|             float tI = times[i]; | ||||
|             if ( time > tI ) | ||||
|             { | ||||
|                 j = i + 1; | ||||
|                 float tJ; | ||||
|                 while ( time >= ( tJ = times[j]) ) | ||||
|                 { | ||||
|                     i = j++; | ||||
|                     tI = tJ; | ||||
|                 } | ||||
|                 x = ( time - tI ) / ( tJ - tI ); | ||||
|                 return true; | ||||
|             } | ||||
|             else if ( time < tI ) | ||||
|             { | ||||
|                 j = i - 1; | ||||
|                 float tJ; | ||||
|                 while ( time <= ( tJ = times[j] ) ) | ||||
|                 { | ||||
|                     i = j--; | ||||
|                     tI = tJ; | ||||
|                 } | ||||
|                 x = ( time - tI ) / ( tJ - tI ); | ||||
|                 return true; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 j = i; | ||||
|                 x = 0.0; | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|             return false; | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     void Animation::handleAnimationTransforms() | ||||
|     { | ||||
|         Ogre::SkeletonInstance* skel = mBase->getSkeleton(); | ||||
| 
 | ||||
|         Ogre::Bone* b = skel->getRootBone(); | ||||
|         b->setOrientation(Ogre::Real(.3),Ogre::Real(.3),Ogre::Real(.3), Ogre::Real(.3));   //This is a trick
 | ||||
| 
 | ||||
|         skel->_updateTransforms(); | ||||
|         //skel->_notifyManualBonesDirty();
 | ||||
| 
 | ||||
|         mBase->getAllAnimationStates()->_notifyDirty(); | ||||
|         //mBase->_updateAnimation();
 | ||||
|         //mBase->_notifyMoved();
 | ||||
| 
 | ||||
|         std::vector<Nif::NiKeyframeData>::iterator iter; | ||||
|         int slot = 0; | ||||
|         if(mTransformations) | ||||
|         { | ||||
|             for(iter = mTransformations->begin(); iter != mTransformations->end(); iter++) | ||||
|             { | ||||
|                 if(mTime < iter->getStartTime() || mTime < mStartTime || mTime > iter->getStopTime()) | ||||
|                 { | ||||
|                     slot++; | ||||
|                     continue; | ||||
|                 } | ||||
| 
 | ||||
|                 float x; | ||||
|                 float x2; | ||||
| 
 | ||||
|                 const std::vector<Ogre::Quaternion> & quats = iter->getQuat(); | ||||
| 
 | ||||
|                 const std::vector<float> & ttime = iter->gettTime(); | ||||
|                 const std::vector<float> & rtime = iter->getrTime(); | ||||
|                 int rindexJ = mRindexI[slot]; | ||||
| 
 | ||||
|                 timeIndex(mTime, rtime, mRindexI[slot], rindexJ, x2); | ||||
|                 int tindexJ = mTindexI[slot]; | ||||
| 
 | ||||
|                 const std::vector<Ogre::Vector3> & translist1 = iter->getTranslist1(); | ||||
| 
 | ||||
|                 timeIndex(mTime, ttime, mTindexI[slot], tindexJ, x); | ||||
| 
 | ||||
|                 Ogre::Vector3 t; | ||||
|                 Ogre::Quaternion r; | ||||
| 
 | ||||
|                 bool bTrans = translist1.size() > 0; | ||||
| 
 | ||||
|                 bool bQuats = quats.size() > 0; | ||||
| 
 | ||||
|                 if(skel->hasBone(iter->getBonename())) | ||||
|                 { | ||||
|                     Ogre::Bone* bone = skel->getBone(iter->getBonename()); | ||||
|                      | ||||
|                     if(bTrans) | ||||
|                     { | ||||
|                         Ogre::Vector3 v1 = translist1[mTindexI[slot]]; | ||||
|                         Ogre::Vector3 v2 = translist1[tindexJ]; | ||||
|                         t = (v1 + (v2 - v1) * x); | ||||
|                         bone->setPosition(t); | ||||
| 
 | ||||
|                     } | ||||
|                      Ogre::Real* addr = (pReal + 3 * verIndex); | ||||
| 							  *addr = absVertPos.x; | ||||
| 							  *(addr+1) = absVertPos.y; | ||||
| 				              *(addr+2) = absVertPos.z; | ||||
|                      | ||||
|                     if(bQuats) | ||||
|                     { | ||||
|                         r = Ogre::Quaternion::Slerp(x2, quats[mRindexI[slot]], quats[rindexJ], true); | ||||
|                         bone->setOrientation(r); | ||||
|                     } | ||||
| 
 | ||||
|                 } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					//Ogre::Bone *bonePtr = creaturemodel->getSkeleton()->getBone(copy.bonename);
 | ||||
| 					Ogre::Quaternion shaperot = copy.trafo.rotation; | ||||
| 					Ogre::Vector3 shapetrans = copy.trafo.trans; | ||||
| 					float shapescale = copy.trafo.scale; | ||||
| 					std::vector<std::string> boneSequence = copy.boneSequence; | ||||
| 
 | ||||
| 					Ogre::Vector3 transmult; | ||||
| 						Ogre::Quaternion rotmult; | ||||
| 						float scale; | ||||
| 					if(boneSequence.size() > 0){ | ||||
|                         std::vector<std::string>::iterator boneSequenceIter = boneSequence.begin(); | ||||
|                         if(skel->hasBone(*boneSequenceIter)){ | ||||
| 					Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 						transmult = bonePtr->getPosition(); | ||||
| 						rotmult = bonePtr->getOrientation(); | ||||
| 						scale = bonePtr->getScale().x; | ||||
| 						boneSequenceIter++; | ||||
| 
 | ||||
| 					    for(; boneSequenceIter != boneSequence.end(); boneSequenceIter++) | ||||
| 					    { | ||||
| 							if(skel->hasBone(*boneSequenceIter)){ | ||||
| 							Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter); | ||||
| 								// Computes C = B + AxC*scale
 | ||||
| 								transmult = transmult + rotmult * bonePtr->getPosition(); | ||||
| 								rotmult = rotmult * bonePtr->getOrientation(); | ||||
| 								scale = scale * bonePtr->getScale().x; | ||||
| 							} | ||||
| 						    //std::cout << "Bone:" << *boneSequenceIter << "   ";
 | ||||
| 					    } | ||||
| 						transmult = transmult + rotmult * shapetrans; | ||||
| 						rotmult = rotmult * shaperot; | ||||
| 						scale = shapescale * scale; | ||||
| 
 | ||||
| 						//std::cout << "Position: " << transmult << "Rotation: " << rotmult << "\n";
 | ||||
| 					} | ||||
|                     } | ||||
| 					else | ||||
| 					{ | ||||
| 						transmult = shapetrans; | ||||
| 						rotmult = shaperot; | ||||
| 						scale = shapescale; | ||||
| 					} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 					// Computes C = B + AxC*scale
 | ||||
| 					 // final_vector = old_vector + old_rotation*new_vector*old_scale/
 | ||||
| 
 | ||||
| 					for(unsigned int i = 0; i < allvertices->size(); i++){ | ||||
| 						Ogre::Vector3 current = transmult + rotmult * (*allvertices)[i]; | ||||
| 						Ogre::Real* addr = pReal + i * 3; | ||||
| 					    *addr = current.x; | ||||
| 						*(addr+1) = current.y; | ||||
| 						*(addr + 2) = current.z; | ||||
| 
 | ||||
| 					}/*
 | ||||
| 					for(int i = 0; i < allnormals.size(); i++){ | ||||
| 						Ogre::Vector3 current =rotmult * allnormals[i]; | ||||
| 						Ogre::Real* addr = pRealNormal + i * 3; | ||||
| 					    *addr = current.x; | ||||
| 						*(addr+1) = current.y; | ||||
| 						*(addr + 2) = current.z; | ||||
| 
 | ||||
| 					}*/ | ||||
| 
 | ||||
| 				} | ||||
| 				vbuf->unlock(); | ||||
| 
 | ||||
| 		} | ||||
| 
 | ||||
|                 slot++; | ||||
|             } | ||||
|             skel->_updateTransforms(); | ||||
|             mBase->getAllAnimationStates()->_notifyDirty(); | ||||
|         } | ||||
|     } | ||||
|     bool Animation::timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x ){ | ||||
| 	int count; | ||||
| 	if (  (count = times.size()) > 0 ) | ||||
| 	{ | ||||
| 		if ( time <= times[0] ) | ||||
| 		{ | ||||
| 			i = j = 0; | ||||
| 			x = 0.0; | ||||
| 			return true; | ||||
| 		} | ||||
| 		if ( time >= times[count - 1] ) | ||||
| 		{ | ||||
| 			i = j = count - 1; | ||||
| 			x = 0.0; | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		if ( i < 0 || i >= count ) | ||||
| 			i = 0; | ||||
| 
 | ||||
| 		float tI = times[i]; | ||||
| 		if ( time > tI ) | ||||
| 		{ | ||||
| 			j = i + 1; | ||||
| 			float tJ; | ||||
| 			while ( time >= ( tJ = times[j]) ) | ||||
| 			{ | ||||
| 				i = j++; | ||||
| 				tI = tJ; | ||||
| 			} | ||||
| 			x = ( time - tI ) / ( tJ - tI ); | ||||
| 			return true; | ||||
| 		} | ||||
| 		else if ( time < tI ) | ||||
| 		{ | ||||
| 			j = i - 1; | ||||
| 			float tJ; | ||||
| 			while ( time <= ( tJ = times[j] ) ) | ||||
| 			{ | ||||
| 				i = j--; | ||||
| 				tI = tJ; | ||||
| 			} | ||||
| 			x = ( time - tI ) / ( tJ - tI ); | ||||
| 			return true; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			j = i; | ||||
| 			x = 0.0; | ||||
| 			return true; | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 		return false; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  void Animation::handleAnimationTransforms(){ | ||||
| 
 | ||||
| 
 | ||||
|     Ogre::SkeletonInstance* skel = base->getSkeleton(); | ||||
| 
 | ||||
| 
 | ||||
|     Ogre::Bone* b = skel->getRootBone(); | ||||
| 	    b->setOrientation(Ogre::Real(.3),Ogre::Real(.3),Ogre::Real(.3), Ogre::Real(.3));   //This is a trick
 | ||||
| 
 | ||||
|         skel->_updateTransforms(); | ||||
| 	    //skel->_notifyManualBonesDirty();
 | ||||
| 
 | ||||
|          base->getAllAnimationStates()->_notifyDirty(); | ||||
|      //base->_updateAnimation();
 | ||||
|    //base->_notifyMoved();
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     std::vector<Nif::NiKeyframeData>::iterator iter; | ||||
|     int slot = 0; | ||||
|     if(transformations){ | ||||
|     for(iter = transformations->begin(); iter != transformations->end(); iter++){ | ||||
|         if(time < iter->getStartTime() || time < startTime || time > iter->getStopTime()) | ||||
| 	    { | ||||
|             slot++; | ||||
| 		    continue; | ||||
| 	    } | ||||
| 
 | ||||
|          float x; | ||||
| 		float x2; | ||||
| 
 | ||||
| 	    const std::vector<Ogre::Quaternion> & quats = iter->getQuat(); | ||||
| 
 | ||||
|         const std::vector<float> & ttime = iter->gettTime(); | ||||
| 
 | ||||
| 
 | ||||
|         const std::vector<float> & rtime = iter->getrTime(); | ||||
|         int rindexJ = rindexI[slot]; | ||||
| 
 | ||||
| 	    timeIndex(time, rtime, rindexI[slot], rindexJ, x2); | ||||
| 	    int tindexJ = tindexI[slot]; | ||||
| 
 | ||||
| 
 | ||||
|         const std::vector<Ogre::Vector3> & translist1 = iter->getTranslist1(); | ||||
| 
 | ||||
|         timeIndex(time, ttime, tindexI[slot], tindexJ, x); | ||||
| 
 | ||||
|         Ogre::Vector3 t; | ||||
|         Ogre::Quaternion r; | ||||
| 
 | ||||
|         bool bTrans = translist1.size() > 0; | ||||
| 
 | ||||
| 
 | ||||
|         bool bQuats = quats.size() > 0; | ||||
| 
 | ||||
|     if(skel->hasBone(iter->getBonename())){ | ||||
|         Ogre::Bone* bone = skel->getBone(iter->getBonename()); | ||||
|         if(bTrans){ | ||||
| 			 Ogre::Vector3 v1 = translist1[tindexI[slot]]; | ||||
|             Ogre::Vector3 v2 = translist1[tindexJ]; | ||||
|            t = (v1 + (v2 - v1) * x); | ||||
|             bone->setPosition(t); | ||||
| 
 | ||||
| 		} | ||||
|         if(bQuats){ | ||||
| 			 r = Ogre::Quaternion::Slerp(x2, quats[rindexI[slot]], quats[rindexJ], true); | ||||
|             bone->setOrientation(r); | ||||
| 		} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
|     slot++; | ||||
|     } | ||||
| 	skel->_updateTransforms(); | ||||
|         base->getAllAnimationStates()->_notifyDirty(); | ||||
| } | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -18,36 +18,30 @@ struct PosAndRot{ | |||
| class Animation{ | ||||
| 
 | ||||
|    protected: | ||||
|     Ogre::SceneNode* insert; | ||||
|     Ogre::SceneNode* mInsert; | ||||
|     OEngine::Render::OgreRenderer &mRend; | ||||
|     std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot> vecRotPos; | ||||
|     static std::map<std::string, int> mUniqueIDs; | ||||
|     std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot> mVecRotPos; | ||||
|     static std::map<std::string, int> sUniqueIDs; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     float time; | ||||
| 	float startTime; | ||||
| 	float stopTime; | ||||
| 	int animate; | ||||
| 	//Represents a rotation index for each bone
 | ||||
| 	std::vector<int>rindexI; | ||||
|     float mTime; | ||||
|     float mStartTime; | ||||
|     float mStopTime; | ||||
|     int mAnimate; | ||||
|     //Represents a rotation index for each bone
 | ||||
|     std::vector<int>mRindexI; | ||||
|     //Represents a translation index for each bone
 | ||||
| 	std::vector<int>tindexI; | ||||
|     std::vector<int>mTindexI; | ||||
| 
 | ||||
| 	//Only shapes with morphing data will use a shape number
 | ||||
| 	int shapeNumber; | ||||
| 	std::vector<std::vector<int> > shapeIndexI; | ||||
|     //Only shapes with morphing data will use a shape number
 | ||||
|     int mShapeNumber; | ||||
|     std::vector<std::vector<int> > mShapeIndexI; | ||||
| 
 | ||||
| 	//Ogre::SkeletonInstance* skel;
 | ||||
|      std::vector<Nif::NiTriShapeCopy>* shapes;          //All the NiTriShapeData for a creature
 | ||||
|     //Ogre::SkeletonInstance* skel;
 | ||||
|      std::vector<Nif::NiTriShapeCopy>* mShapes;          //All the NiTriShapeData for a creature
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     std::vector<Nif::NiKeyframeData>* transformations; | ||||
|     std::map<std::string,float>* textmappings; | ||||
|     Ogre::Entity* base; | ||||
|     std::vector<Nif::NiKeyframeData>* mTransformations; | ||||
|     std::map<std::string,float>* mTextmappings; | ||||
|     Ogre::Entity* mBase; | ||||
|     void handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel); | ||||
|     void handleAnimationTransforms(); | ||||
|     bool timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x ); | ||||
|  | @ -59,7 +53,6 @@ class Animation{ | |||
|         void startScript(std::string groupname, int mode, int loops); | ||||
|         void stopScript(); | ||||
| 
 | ||||
| 
 | ||||
|         virtual ~Animation(); | ||||
| 
 | ||||
| }; | ||||
|  |  | |||
|  | @ -12,26 +12,28 @@ using namespace Ogre; | |||
| using namespace NifOgre; | ||||
| namespace MWRender{ | ||||
| 
 | ||||
| CreatureAnimation::~CreatureAnimation(){ | ||||
| CreatureAnimation::~CreatureAnimation() | ||||
| { | ||||
| }                  | ||||
| 
 | ||||
| } | ||||
| CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend): Animation(_rend){ | ||||
|     insert = ptr.getRefData().getBaseNode(); | ||||
|     MWWorld::LiveCellRef<ESM::Creature> *ref = | ||||
|             ptr.get<ESM::Creature>(); | ||||
| CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend): Animation(_rend) | ||||
| { | ||||
|     mInsert = ptr.getRefData().getBaseNode(); | ||||
|     MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>(); | ||||
| 
 | ||||
|     assert (ref->base != NULL); | ||||
|     if(!ref->base->model.empty()){ | ||||
|     if(!ref->base->model.empty()) | ||||
|     { | ||||
|         const std::string &mesh = "meshes\\" + ref->base->model; | ||||
|         std::string meshNumbered = mesh + getUniqueID(mesh) + ">|"; | ||||
|         NifOgre::NIFLoader::load(meshNumbered); | ||||
|         base = mRend.getScene()->createEntity(meshNumbered); | ||||
|         base->setVisibilityFlags(RV_Actors); | ||||
|         mBase = mRend.getScene()->createEntity(meshNumbered); | ||||
|         mBase->setVisibilityFlags(RV_Actors); | ||||
| 
 | ||||
|         bool transparent = false; | ||||
|         for (unsigned int i=0; i<base->getNumSubEntities(); ++i) | ||||
|         for (unsigned int i=0; i < mBase->getNumSubEntities(); ++i) | ||||
|         { | ||||
|             Ogre::MaterialPtr mat = base->getSubEntity(i)->getMaterial(); | ||||
|             Ogre::MaterialPtr mat = mBase->getSubEntity(i)->getMaterial(); | ||||
|             Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator(); | ||||
|             while (techIt.hasMoreElements()) | ||||
|             { | ||||
|  | @ -46,46 +48,51 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::O | |||
|                 } | ||||
|             } | ||||
|         } | ||||
|         base->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); | ||||
|         mBase->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); | ||||
| 
 | ||||
|         std::string meshZero = mesh + "0000>|"; | ||||
| 
 | ||||
|         if((transformations = (NIFLoader::getSingletonPtr())->getAnim(meshZero))){ | ||||
| 
 | ||||
|         for(std::size_t init = 0; init < transformations->size(); init++){ | ||||
| 				rindexI.push_back(0); | ||||
| 				tindexI.push_back(0); | ||||
| 			} | ||||
|         stopTime = transformations->begin()->getStopTime(); | ||||
| 		startTime = transformations->begin()->getStartTime(); | ||||
| 		shapes = (NIFLoader::getSingletonPtr())->getShapes(meshZero); | ||||
|         if((mTransformations = (NIFLoader::getSingletonPtr())->getAnim(meshZero))) | ||||
|         { | ||||
|             for(std::size_t init = 0; init < mTransformations->size(); init++) | ||||
|             { | ||||
|                 mRindexI.push_back(0); | ||||
|                 mTindexI.push_back(0); | ||||
|             } | ||||
|             mStopTime = mTransformations->begin()->getStopTime(); | ||||
|             mStartTime = mTransformations->begin()->getStartTime(); | ||||
|             mShapes = (NIFLoader::getSingletonPtr())->getShapes(meshZero); | ||||
|         } | ||||
|         textmappings = NIFLoader::getSingletonPtr()->getTextIndices(meshZero); | ||||
|         insert->attachObject(base); | ||||
|         mTextmappings = NIFLoader::getSingletonPtr()->getTextIndices(meshZero); | ||||
|         mInsert->attachObject(mBase); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void CreatureAnimation::runAnimation(float timepassed){ | ||||
|     vecRotPos.clear(); | ||||
| 	if(animate > 0){ | ||||
| 		//Add the amount of time passed to time
 | ||||
| void CreatureAnimation::runAnimation(float timepassed) | ||||
| { | ||||
|     mVecRotPos.clear(); | ||||
|     if(mAnimate > 0) | ||||
|     { | ||||
|         //Add the amount of time passed to time
 | ||||
| 
 | ||||
| 		//Handle the animation transforms dependent on time
 | ||||
|         //Handle the animation transforms dependent on time
 | ||||
| 
 | ||||
| 		//Handle the shapes dependent on animation transforms
 | ||||
|         time += timepassed; | ||||
|         if(time >= stopTime){ | ||||
|             animate--; | ||||
|         //Handle the shapes dependent on animation transforms
 | ||||
|         mTime += timepassed; | ||||
|         if(mTime >= mStopTime) | ||||
|         { | ||||
|             mAnimate--; | ||||
|             //std::cout << "Stopping the animation\n";
 | ||||
|             if(animate == 0) | ||||
|                 time = stopTime; | ||||
|             if(mAnimate == 0) | ||||
|                 mTime = mStopTime; | ||||
|             else | ||||
|                 time = startTime + (time - stopTime); | ||||
|                 mTime = mStartTime + (mTime - mStopTime); | ||||
|         } | ||||
| 
 | ||||
|         handleAnimationTransforms(); | ||||
|         handleShapes(shapes, base, base->getSkeleton()); | ||||
|         handleShapes(mShapes, mBase, mBase->getSkeleton()); | ||||
| 
 | ||||
| 	} | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -13,8 +13,7 @@ class CreatureAnimation: public Animation{ | |||
|     public: | ||||
|     virtual ~CreatureAnimation(); | ||||
|     CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend); | ||||
| 	virtual void runAnimation(float timepassed); | ||||
| 
 | ||||
|     virtual void runAnimation(float timepassed); | ||||
| 
 | ||||
| }; | ||||
| } | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -12,54 +12,52 @@ namespace MWRender{ | |||
| 
 | ||||
| class NpcAnimation: public Animation{ | ||||
| private: | ||||
| 	MWWorld::InventoryStore& inv; | ||||
| 	int mStateID; | ||||
| 	//Free Parts
 | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> chest; | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> skirt; | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> lhand; | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> rhand; | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> tail; | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> lFreeFoot; | ||||
| 	   std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> rFreeFoot; | ||||
|     MWWorld::InventoryStore& mInv; | ||||
|     int mStateID; | ||||
|     //Free Parts
 | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mChest; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mSkirt; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mLhand; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mRhand; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mTail; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mLFreeFoot; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mRFreeFoot; | ||||
| 
 | ||||
|        int partslots[27];  //Each part slot is taken by clothing, armor, or is empty
 | ||||
|        int partpriorities[27]; | ||||
|        std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> zero; | ||||
|         int mPartslots[27];  //Each part slot is taken by clothing, armor, or is empty
 | ||||
|         int mPartPriorities[27]; | ||||
|         std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mZero; | ||||
| 
 | ||||
|     //Bounded Parts
 | ||||
|     Ogre::Entity* lclavicle; | ||||
|     Ogre::Entity* rclavicle; | ||||
|     Ogre::Entity* rupperArm; | ||||
|     Ogre::Entity* lupperArm; | ||||
|     Ogre::Entity* rUpperLeg; | ||||
|     Ogre::Entity* lUpperLeg; | ||||
|     Ogre::Entity* lForearm; | ||||
|     Ogre::Entity* rForearm; | ||||
|     Ogre::Entity* lWrist; | ||||
|     Ogre::Entity* rWrist; | ||||
|     Ogre::Entity* rKnee; | ||||
|     Ogre::Entity* lKnee; | ||||
|     Ogre::Entity* neck; | ||||
|     Ogre::Entity* rAnkle; | ||||
|     Ogre::Entity* lAnkle; | ||||
|     Ogre::Entity* groin; | ||||
|     Ogre::Entity* lfoot; | ||||
|     Ogre::Entity* rfoot; | ||||
|     Ogre::Entity* hair; | ||||
|     Ogre::Entity* head; | ||||
| 
 | ||||
| 
 | ||||
| 	//Bounded Parts
 | ||||
| 	Ogre::Entity* lclavicle; | ||||
| 	Ogre::Entity* rclavicle; | ||||
| 	Ogre::Entity* rupperArm; | ||||
| 	Ogre::Entity* lupperArm; | ||||
| 	Ogre::Entity* rUpperLeg; | ||||
| 	Ogre::Entity* lUpperLeg; | ||||
| 	Ogre::Entity* lForearm; | ||||
| 	Ogre::Entity* rForearm; | ||||
| 	Ogre::Entity* lWrist; | ||||
| 	Ogre::Entity* rWrist; | ||||
| 	Ogre::Entity* rKnee; | ||||
| 	Ogre::Entity* lKnee; | ||||
| 	Ogre::Entity* neck; | ||||
| 	Ogre::Entity* rAnkle; | ||||
| 	Ogre::Entity* lAnkle; | ||||
| 	Ogre::Entity* groin; | ||||
| 	Ogre::Entity* lfoot; | ||||
| 	Ogre::Entity* rfoot; | ||||
| 	Ogre::Entity* hair; | ||||
| 	Ogre::Entity* head; | ||||
| 
 | ||||
| 	Ogre::SceneNode* insert; | ||||
|     Ogre::SceneNode* insert; | ||||
|     bool isBeast; | ||||
|     bool isFemale; | ||||
| 	std::string headModel; | ||||
| 	std::string hairModel; | ||||
| 	std::string npcName; | ||||
| 	std::string bodyRaceID; | ||||
| 	float timeToChange; | ||||
| 	MWWorld::ContainerStoreIterator robe; | ||||
|     std::string headModel; | ||||
|     std::string hairModel; | ||||
|     std::string npcName; | ||||
|     std::string bodyRaceID; | ||||
|     float timeToChange; | ||||
|     MWWorld::ContainerStoreIterator robe; | ||||
|     MWWorld::ContainerStoreIterator helmet; | ||||
|     MWWorld::ContainerStoreIterator shirt; | ||||
|     MWWorld::ContainerStoreIterator cuirass; | ||||
|  | @ -72,22 +70,21 @@ private: | |||
|     MWWorld::ContainerStoreIterator rightglove; | ||||
|     MWWorld::ContainerStoreIterator skirtiter; | ||||
| 
 | ||||
|     public: | ||||
|      NpcAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend, MWWorld::InventoryStore& _inv); | ||||
|      virtual ~NpcAnimation(); | ||||
| public: | ||||
|     NpcAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend, MWWorld::InventoryStore& _inv); | ||||
|     virtual ~NpcAnimation(); | ||||
|     Ogre::Entity* insertBoundedPart(const std::string &mesh, std::string bonename); | ||||
|      std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> insertFreePart(const std::string &mesh, const std::string& suffix); | ||||
|      void insertFootPart(int type, const std::string &mesh); | ||||
| 	virtual void runAnimation(float timepassed); | ||||
| 	void updateParts(); | ||||
|     std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> insertFreePart(const std::string &mesh, const std::string& suffix); | ||||
|     void insertFootPart(int type, const std::string &mesh); | ||||
|     virtual void runAnimation(float timepassed); | ||||
|     void updateParts(); | ||||
|     void removeIndividualPart(int type); | ||||
|     void reserveIndividualPart(int type, int group, int priority); | ||||
| 
 | ||||
|     bool addOrReplaceIndividualPart(int type, int group, int priority, const std::string &mesh); | ||||
|      void removePartGroup(int group); | ||||
|     void removePartGroup(int group); | ||||
|     void addPartGroup(int group, int priority, std::vector<ESM::PartReference>& parts); | ||||
| 
 | ||||
| 
 | ||||
| }; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue