1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-21 11:09:43 +00:00

Use RefId for skills in StatsListener

This commit is contained in:
Evil Eye 2023-06-06 12:35:01 +02:00
parent 28025e84f7
commit 1e0ed42294
8 changed files with 35 additions and 48 deletions

View file

@ -99,7 +99,7 @@ namespace MWGui
mPlayerAttributes.emplace(attribute.mId, MWMechanics::AttributeValue());
for (const auto& skill : store.get<ESM::Skill>())
mPlayerSkillValues.emplace(skill.mIndex, MWMechanics::SkillValue());
mPlayerSkillValues.emplace(skill.mId, MWMechanics::SkillValue());
}
void CharacterCreation::setValue(std::string_view id, const MWMechanics::AttributeValue& value)
@ -138,11 +138,11 @@ namespace MWGui
}
}
void CharacterCreation::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value)
void CharacterCreation::setValue(ESM::RefId id, const MWMechanics::SkillValue& value)
{
mPlayerSkillValues[parSkill] = value;
mPlayerSkillValues[id] = value;
if (mReviewDialog)
mReviewDialog->setSkillValue(parSkill, value);
mReviewDialog->setSkillValue(id, value);
}
void CharacterCreation::configureSkills(const SkillList& major, const SkillList& minor)
@ -275,10 +275,9 @@ namespace MWGui
mReviewDialog->setAttribute(
static_cast<ESM::Attribute::AttributeID>(attributePair.first), attributePair.second);
}
for (auto& skillPair : mPlayerSkillValues)
for (const auto& [skill, value] : mPlayerSkillValues)
{
mReviewDialog->setSkillValue(
static_cast<ESM::Skill::SkillEnum>(skillPair.first), skillPair.second);
mReviewDialog->setSkillValue(skill, value);
}
mReviewDialog->configureSkills(mPlayerMajorSkills, mPlayerMinorSkills);

View file

@ -48,7 +48,7 @@ namespace MWGui
void setValue(std::string_view id, const MWMechanics::AttributeValue& value) override;
void setValue(std::string_view id, const MWMechanics::DynamicStat<float>& value) override;
void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value) override;
void setValue(ESM::RefId id, const MWMechanics::SkillValue& value) override;
void configureSkills(const SkillList& major, const SkillList& minor) override;
void onFrame(float duration);
@ -59,7 +59,7 @@ namespace MWGui
SkillList mPlayerMajorSkills, mPlayerMinorSkills;
std::map<int, MWMechanics::AttributeValue> mPlayerAttributes;
std::map<int, MWMechanics::SkillValue> mPlayerSkillValues;
std::map<ESM::RefId, MWMechanics::SkillValue> mPlayerSkillValues;
// Dialogs
std::unique_ptr<TextInputDialog> mNameDialog;

View file

@ -93,7 +93,7 @@ namespace MWGui
for (const ESM::Skill& skill : MWBase::Environment::get().getESMStore()->get<ESM::Skill>())
{
mSkillValues.emplace(skill.mId, MWMechanics::SkillValue());
mSkillWidgetMap.emplace(skill.mIndex, static_cast<MyGUI::TextBox*>(nullptr));
mSkillWidgetMap.emplace(skill.mId, static_cast<MyGUI::TextBox*>(nullptr));
}
MyGUI::Button* backButton;
@ -204,10 +204,10 @@ namespace MWGui
}
}
void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::SkillValue& value)
void ReviewDialog::setSkillValue(ESM::RefId id, const MWMechanics::SkillValue& value)
{
mSkillValues[ESM::Skill::indexToRefId(skillId)] = value;
MyGUI::TextBox* widget = mSkillWidgetMap[skillId];
mSkillValues[id] = value;
MyGUI::TextBox* widget = mSkillWidgetMap[id];
if (widget)
{
float modified = value.getModified();
@ -363,7 +363,7 @@ namespace MWGui
ToolTips::createSkillToolTip(mSkillWidgets[mSkillWidgets.size() - 1 - i], skill->mIndex);
}
mSkillWidgetMap[skill->mIndex] = widget;
mSkillWidgetMap[skill->mId] = widget;
}
}

View file

@ -42,7 +42,7 @@ namespace MWGui
void setAttribute(ESM::Attribute::AttributeID attributeId, const MWMechanics::AttributeValue& value);
void configureSkills(const SkillList& major, const SkillList& minor);
void setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::SkillValue& value);
void setSkillValue(ESM::RefId id, const MWMechanics::SkillValue& value);
void onOpen() override;
@ -95,7 +95,7 @@ namespace MWGui
SkillList mMajorSkills, mMinorSkills, mMiscSkills;
std::map<ESM::RefId, MWMechanics::SkillValue> mSkillValues;
std::map<int, MyGUI::TextBox*> mSkillWidgetMap;
std::map<ESM::RefId, MyGUI::TextBox*> mSkillWidgetMap;
ESM::RefId mRaceId, mBirthSignId;
std::string mName;
ESM::Class mKlass;

View file

@ -86,10 +86,10 @@ namespace MWGui
for (const ESM::Skill& skill : MWBase::Environment::get().getESMStore()->get<ESM::Skill>())
{
const auto& value = stats.getSkill(skill.mId);
if (value != mWatchedSkills[skill.mIndex] || mWatchedStatsEmpty)
if (value != mWatchedSkills[skill.mId] || mWatchedStatsEmpty)
{
mWatchedSkills[skill.mIndex] = value;
setValue(ESM::Skill::SkillEnum(skill.mIndex), value);
mWatchedSkills[skill.mId] = value;
setValue(skill.mId, value);
}
}
@ -157,12 +157,10 @@ namespace MWGui
listener->setValue(id, value);
}
void StatsWatcher::setValue(ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value)
void StatsWatcher::setValue(ESM::RefId id, const MWMechanics::SkillValue& value)
{
/// \todo Don't use the skill enum as a parameter type (we will have to drop it anyway, once we
/// allow custom skills.
for (StatsListener* listener : mListeners)
listener->setValue(parSkill, value);
listener->setValue(id, value);
}
void StatsWatcher::setValue(std::string_view id, const MWMechanics::DynamicStat<float>& value)

View file

@ -1,6 +1,7 @@
#ifndef MWGUI_STATSWATCHER_H
#define MWGUI_STATSWATCHER_H
#include <map>
#include <set>
#include <components/esm/attr.hpp>
@ -22,7 +23,7 @@ namespace MWGui
virtual void setValue(std::string_view id, const MWMechanics::DynamicStat<float>& value) {}
virtual void setValue(std::string_view, const std::string& value) {}
virtual void setValue(std::string_view, int value) {}
virtual void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value) {}
virtual void setValue(ESM::RefId id, const MWMechanics::SkillValue& value) {}
virtual void configureSkills(const std::vector<int>& major, const std::vector<int>& minor) {}
};
@ -31,7 +32,7 @@ namespace MWGui
MWWorld::Ptr mWatched;
MWMechanics::AttributeValue mWatchedAttributes[ESM::Attribute::Length];
MWMechanics::SkillValue mWatchedSkills[ESM::Skill::Length];
std::map<ESM::RefId, MWMechanics::SkillValue> mWatchedSkills;
MWMechanics::DynamicStat<float> mWatchedHealth;
MWMechanics::DynamicStat<float> mWatchedMagicka;
@ -53,7 +54,7 @@ namespace MWGui
void setValue(std::string_view id, const MWMechanics::DynamicStat<float>& value);
void setValue(std::string_view id, const std::string& value);
void setValue(std::string_view id, int value);
void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value);
void setValue(ESM::RefId id, const MWMechanics::SkillValue& value);
void configureSkills(const std::vector<int>& major, const std::vector<int>& minor);
public:

View file

@ -37,17 +37,8 @@ namespace MWGui
: WindowPinnableBase("openmw_stats_window.layout")
, NoDrop(drag, mMainWidget)
, mSkillView(nullptr)
, mMajorSkills()
, mMinorSkills()
, mMiscSkills()
, mSkillValues()
, mSkillWidgetMap()
, mFactionWidgetMap()
, mFactions()
, mBirthSignId()
, mReputation(0)
, mBounty(0)
, mSkillWidgets()
, mChanged(true)
, mMinFullWidth(mMainWidget->getSize().width)
{
@ -67,11 +58,10 @@ namespace MWGui
getWidget(mLeftPane, "LeftPane");
getWidget(mRightPane, "RightPane");
for (int i = 0; i < ESM::Skill::Length; ++i)
for (const ESM::Skill& skill : store.get<ESM::Skill>())
{
mSkillValues.insert(std::make_pair(i, MWMechanics::SkillValue()));
mSkillWidgetMap.insert(
std::make_pair(i, std::make_pair((MyGUI::TextBox*)nullptr, (MyGUI::TextBox*)nullptr)));
mSkillValues.emplace(skill.mId, MWMechanics::SkillValue());
mSkillWidgetMap.emplace(skill.mId, std::make_pair<MyGUI::TextBox*, MyGUI::TextBox*>(nullptr, nullptr));
}
MyGUI::Window* t = mMainWidget->castType<MyGUI::Window>();
@ -255,10 +245,10 @@ namespace MWGui
w->setUserString("RangePosition_SkillProgress", MyGUI::utility::toString(progressPercent));
}
void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value)
void StatsWindow::setValue(ESM::RefId id, const MWMechanics::SkillValue& value)
{
mSkillValues[parSkill] = value;
std::pair<MyGUI::TextBox*, MyGUI::TextBox*> widgets = mSkillWidgetMap[(int)parSkill];
mSkillValues[id] = value;
std::pair<MyGUI::TextBox*, MyGUI::TextBox*> widgets = mSkillWidgetMap[id];
MyGUI::TextBox* valueWidget = widgets.second;
MyGUI::TextBox* nameWidget = widgets.first;
if (valueWidget && nameWidget)
@ -296,7 +286,6 @@ namespace MWGui
valueWidget->setUserString("Visible_SkillProgressVBox", "true");
valueWidget->setUserString("UserData^Hidden_SkillProgressVBox", "false");
ESM::RefId id = ESM::Skill::indexToRefId(parSkill);
setSkillProgress(nameWidget, value.getProgress(), id);
setSkillProgress(valueWidget, value.getProgress(), id);
}
@ -516,7 +505,7 @@ namespace MWGui
std::pair<MyGUI::TextBox*, MyGUI::TextBox*> widgets
= addValueItem(skill->mName, {}, "normal", coord1, coord2);
mSkillWidgetMap[skillId] = widgets;
mSkillWidgetMap[skill->mId] = widgets;
for (int i = 0; i < 2; ++i)
{
@ -532,7 +521,7 @@ namespace MWGui
mSkillWidgets[mSkillWidgets.size() - 1 - i]->setUserString("Range_SkillProgress", "100");
}
setValue(static_cast<ESM::Skill::SkillEnum>(skillId), mSkillValues.find(skillId)->second);
setValue(skill->mId, mSkillValues.find(skill->mId)->second);
}
}

View file

@ -27,7 +27,7 @@ namespace MWGui
void setValue(std::string_view id, const MWMechanics::DynamicStat<float>& value) override;
void setValue(std::string_view id, const std::string& value) override;
void setValue(std::string_view id, int value) override;
void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value) override;
void setValue(ESM::RefId id, const MWMechanics::SkillValue& value) override;
void configureSkills(const SkillList& major, const SkillList& minor) override;
void setReputation(int reputation)
@ -68,8 +68,8 @@ namespace MWGui
MyGUI::ScrollView* mSkillView;
SkillList mMajorSkills, mMinorSkills, mMiscSkills;
std::map<int, MWMechanics::SkillValue> mSkillValues;
std::map<int, std::pair<MyGUI::TextBox*, MyGUI::TextBox*>> mSkillWidgetMap;
std::map<ESM::RefId, MWMechanics::SkillValue> mSkillValues;
std::map<ESM::RefId, std::pair<MyGUI::TextBox*, MyGUI::TextBox*>> mSkillWidgetMap;
std::map<std::string, MyGUI::Widget*> mFactionWidgetMap;
FactionList mFactions; ///< Stores a list of factions and the current rank
ESM::RefId mBirthSignId;