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:
parent
28025e84f7
commit
1e0ed42294
8 changed files with 35 additions and 48 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue