From 9a93dcc39e22d84b8c6b41b5b9df6e3ba71e5bb5 Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Tue, 6 Jun 2023 19:17:03 +0200 Subject: [PATCH] Dehardcode the list of skills in the stats window --- apps/openmw/mwgui/charactercreation.cpp | 2 +- apps/openmw/mwgui/charactercreation.hpp | 6 ++---- apps/openmw/mwgui/review.cpp | 17 ++++++++--------- apps/openmw/mwgui/review.hpp | 9 ++++----- apps/openmw/mwgui/statswatcher.cpp | 10 +++++----- apps/openmw/mwgui/statswatcher.hpp | 4 ++-- apps/openmw/mwgui/statswindow.cpp | 14 +++++++------- apps/openmw/mwgui/statswindow.hpp | 10 ++++------ 8 files changed, 33 insertions(+), 39 deletions(-) diff --git a/apps/openmw/mwgui/charactercreation.cpp b/apps/openmw/mwgui/charactercreation.cpp index 0229fccb16..dc1608b9c7 100644 --- a/apps/openmw/mwgui/charactercreation.cpp +++ b/apps/openmw/mwgui/charactercreation.cpp @@ -145,7 +145,7 @@ namespace MWGui mReviewDialog->setSkillValue(id, value); } - void CharacterCreation::configureSkills(const SkillList& major, const SkillList& minor) + void CharacterCreation::configureSkills(const std::vector& major, const std::vector& minor) { if (mReviewDialog) mReviewDialog->configureSkills(major, minor); diff --git a/apps/openmw/mwgui/charactercreation.hpp b/apps/openmw/mwgui/charactercreation.hpp index 79cf5a35a7..f9e76d1fc6 100644 --- a/apps/openmw/mwgui/charactercreation.hpp +++ b/apps/openmw/mwgui/charactercreation.hpp @@ -38,8 +38,6 @@ namespace MWGui class CharacterCreation : public StatsListener { public: - typedef std::vector SkillList; - CharacterCreation(osg::Group* parent, Resource::ResourceSystem* resourceSystem); virtual ~CharacterCreation(); @@ -49,7 +47,7 @@ namespace MWGui void setValue(std::string_view id, const MWMechanics::AttributeValue& value) override; void setValue(std::string_view id, const MWMechanics::DynamicStat& value) override; void setValue(ESM::RefId id, const MWMechanics::SkillValue& value) override; - void configureSkills(const SkillList& major, const SkillList& minor) override; + void configureSkills(const std::vector& major, const std::vector& minor) override; void onFrame(float duration); @@ -57,7 +55,7 @@ namespace MWGui osg::Group* mParent; Resource::ResourceSystem* mResourceSystem; - SkillList mPlayerMajorSkills, mPlayerMinorSkills; + std::vector mPlayerMajorSkills, mPlayerMinorSkills; std::map mPlayerAttributes; std::map mPlayerSkillValues; diff --git a/apps/openmw/mwgui/review.cpp b/apps/openmw/mwgui/review.cpp index 161e43203e..8887b9eb4f 100644 --- a/apps/openmw/mwgui/review.cpp +++ b/apps/openmw/mwgui/review.cpp @@ -226,21 +226,21 @@ namespace MWGui mUpdateSkillArea = true; } - void ReviewDialog::configureSkills(const std::vector& major, const std::vector& minor) + void ReviewDialog::configureSkills(const std::vector& major, const std::vector& minor) { mMajorSkills = major; mMinorSkills = minor; // Update misc skills with the remaining skills not in major or minor - std::set skillSet; + std::set skillSet; std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin())); std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin())); mMiscSkills.clear(); const auto& store = MWBase::Environment::get().getWorld()->getStore().get(); for (const ESM::Skill& skill : store) { - if (!skillSet.contains(skill.mIndex)) - mMiscSkills.push_back(skill.mIndex); + if (!skillSet.contains(skill.mId)) + mMiscSkills.push_back(skill.mId); } mUpdateSkillArea = true; @@ -328,8 +328,8 @@ namespace MWGui coord2.top += lineHeight; } - void ReviewDialog::addSkills(const SkillList& skills, const std::string& titleId, const std::string& titleDefault, - MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2) + void ReviewDialog::addSkills(const std::vector& 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 (!mSkillWidgets.empty()) @@ -340,10 +340,9 @@ namespace MWGui addGroup( MWBase::Environment::get().getWindowManager()->getGameSettingString(titleId, titleDefault), coord1, coord2); - for (const int& skillIndex : skills) + for (const ESM::RefId& skillId : skills) { - const ESM::Skill* skill = MWBase::Environment::get().getESMStore()->get().search( - ESM::Skill::indexToRefId(skillIndex)); + const ESM::Skill* skill = MWBase::Environment::get().getESMStore()->get().search(skillId); if (!skill) // Skip unknown skills continue; const MWMechanics::SkillValue& stat = mSkillValues.find(skill->mId)->second; diff --git a/apps/openmw/mwgui/review.hpp b/apps/openmw/mwgui/review.hpp index 44a60bd833..dcb63d4d05 100644 --- a/apps/openmw/mwgui/review.hpp +++ b/apps/openmw/mwgui/review.hpp @@ -24,7 +24,6 @@ namespace MWGui CLASS_DIALOG, BIRTHSIGN_DIALOG }; - typedef std::vector SkillList; ReviewDialog(); @@ -41,7 +40,7 @@ namespace MWGui void setAttribute(ESM::Attribute::AttributeID attributeId, const MWMechanics::AttributeValue& value); - void configureSkills(const SkillList& major, const SkillList& minor); + void configureSkills(const std::vector& major, const std::vector& minor); void setSkillValue(ESM::RefId id, const MWMechanics::SkillValue& value); void onOpen() override; @@ -76,8 +75,8 @@ namespace MWGui void onMouseWheel(MyGUI::Widget* _sender, int _rel); private: - void addSkills(const SkillList& skills, const std::string& titleId, const std::string& titleDefault, - MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); + void addSkills(const std::vector& skills, const std::string& titleId, + const std::string& titleDefault, MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); void addSeparator(MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); void addGroup(std::string_view label, MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); MyGUI::TextBox* addValueItem(std::string_view text, const std::string& value, const std::string& state, @@ -93,7 +92,7 @@ namespace MWGui std::map mAttributeWidgets; - SkillList mMajorSkills, mMinorSkills, mMiscSkills; + std::vector mMajorSkills, mMinorSkills, mMiscSkills; std::map mSkillValues; std::map mSkillWidgetMap; ESM::RefId mRaceId, mBirthSignId; diff --git a/apps/openmw/mwgui/statswatcher.cpp b/apps/openmw/mwgui/statswatcher.cpp index 05e170a2ad..dab6b9bf82 100644 --- a/apps/openmw/mwgui/statswatcher.cpp +++ b/apps/openmw/mwgui/statswatcher.cpp @@ -125,13 +125,13 @@ namespace MWGui setValue("class", cls->mName); size_t size = cls->mData.mSkills.size(); - MWBase::WindowManager::SkillList majorSkills(size); - MWBase::WindowManager::SkillList minorSkills(size); + std::vector majorSkills(size); + std::vector minorSkills(size); for (size_t i = 0; i < size; ++i) { - minorSkills[i] = cls->mData.mSkills[i][0]; - majorSkills[i] = cls->mData.mSkills[i][1]; + minorSkills[i] = ESM::Skill::indexToRefId(cls->mData.mSkills[i][0]); + majorSkills[i] = ESM::Skill::indexToRefId(cls->mData.mSkills[i][1]); } configureSkills(majorSkills, minorSkills); @@ -181,7 +181,7 @@ namespace MWGui listener->setValue(id, value); } - void StatsWatcher::configureSkills(const std::vector& major, const std::vector& minor) + void StatsWatcher::configureSkills(const std::vector& major, const std::vector& minor) { for (StatsListener* listener : mListeners) listener->configureSkills(major, minor); diff --git a/apps/openmw/mwgui/statswatcher.hpp b/apps/openmw/mwgui/statswatcher.hpp index 5a7c007020..e7339294da 100644 --- a/apps/openmw/mwgui/statswatcher.hpp +++ b/apps/openmw/mwgui/statswatcher.hpp @@ -24,7 +24,7 @@ namespace MWGui virtual void setValue(std::string_view, const std::string& value) {} virtual void setValue(std::string_view, int value) {} virtual void setValue(ESM::RefId id, const MWMechanics::SkillValue& value) {} - virtual void configureSkills(const std::vector& major, const std::vector& minor) {} + virtual void configureSkills(const std::vector& major, const std::vector& minor) {} }; class StatsWatcher @@ -55,7 +55,7 @@ namespace MWGui void setValue(std::string_view id, const std::string& value); void setValue(std::string_view id, int value); void setValue(ESM::RefId id, const MWMechanics::SkillValue& value); - void configureSkills(const std::vector& major, const std::vector& minor); + void configureSkills(const std::vector& major, const std::vector& minor); public: StatsWatcher(); diff --git a/apps/openmw/mwgui/statswindow.cpp b/apps/openmw/mwgui/statswindow.cpp index ac04977177..25bc3aee90 100644 --- a/apps/openmw/mwgui/statswindow.cpp +++ b/apps/openmw/mwgui/statswindow.cpp @@ -304,21 +304,21 @@ namespace MWGui } } - void StatsWindow::configureSkills(const std::vector& major, const std::vector& minor) + void StatsWindow::configureSkills(const std::vector& major, const std::vector& minor) { mMajorSkills = major; mMinorSkills = minor; // Update misc skills with the remaining skills not in major or minor - std::set skillSet; + std::set skillSet; std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin())); std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin())); mMiscSkills.clear(); const auto& store = MWBase::Environment::get().getWorld()->getStore().get(); for (const auto& skill : store) { - if (!skillSet.contains(skill.mIndex)) - mMiscSkills.push_back(skill.mIndex); + if (!skillSet.contains(skill.mId)) + mMiscSkills.push_back(skill.mId); } updateSkillArea(); @@ -482,7 +482,7 @@ namespace MWGui return skillNameWidget; } - void StatsWindow::addSkills(const SkillList& skills, const std::string& titleId, const std::string& titleDefault, + void StatsWindow::addSkills(const std::vector& skills, const std::string& titleId, const std::string& titleDefault, MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2) { // Add a line separator if there are items above @@ -495,9 +495,9 @@ namespace MWGui MWBase::Environment::get().getWindowManager()->getGameSettingString(titleId, titleDefault), coord1, coord2); const MWWorld::ESMStore& esmStore = *MWBase::Environment::get().getESMStore(); - for (const int skillId : skills) + for (const ESM::RefId& skillId : skills) { - const ESM::Skill* skill = esmStore.get().search(ESM::Skill::indexToRefId(skillId)); + const ESM::Skill* skill = esmStore.get().search(skillId); if (!skill) // Skip unknown skills continue; diff --git a/apps/openmw/mwgui/statswindow.hpp b/apps/openmw/mwgui/statswindow.hpp index c497353d9a..ca7a5a7e07 100644 --- a/apps/openmw/mwgui/statswindow.hpp +++ b/apps/openmw/mwgui/statswindow.hpp @@ -12,8 +12,6 @@ namespace MWGui public: typedef std::map FactionList; - typedef std::vector SkillList; - StatsWindow(DragAndDrop* drag); /// automatically updates all the data in the stats window, but only if it has changed. @@ -28,7 +26,7 @@ namespace MWGui void setValue(std::string_view id, const std::string& value) override; void setValue(std::string_view id, int value) override; void setValue(ESM::RefId id, const MWMechanics::SkillValue& value) override; - void configureSkills(const SkillList& major, const SkillList& minor) override; + void configureSkills(const std::vector& major, const std::vector& minor) override; void setReputation(int reputation) { @@ -47,8 +45,8 @@ namespace MWGui void onOpen() override { onWindowResize(mMainWidget->castType()); } private: - void addSkills(const SkillList& skills, const std::string& titleId, const std::string& titleDefault, - MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); + void addSkills(const std::vector& skills, const std::string& titleId, + const std::string& titleDefault, MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); void addSeparator(MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); void addGroup(std::string_view label, MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2); std::pair addValueItem(std::string_view text, const std::string& value, @@ -67,7 +65,7 @@ namespace MWGui MyGUI::ScrollView* mSkillView; - SkillList mMajorSkills, mMinorSkills, mMiscSkills; + std::vector mMajorSkills, mMinorSkills, mMiscSkills; std::map mSkillValues; std::map> mSkillWidgetMap; std::map mFactionWidgetMap;