1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-29 04:20:29 +00:00

Reduce the number of magic numbers

This commit is contained in:
Evil Eye 2023-06-18 16:21:06 +02:00
parent 6adcd122a8
commit bac6777fae
9 changed files with 49 additions and 53 deletions

View File

@ -1171,7 +1171,7 @@ namespace EsmTool
template <> template <>
void Record<ESM::Race>::print() void Record<ESM::Race>::print()
{ {
static const char* sAttributeNames[8] static const char* sAttributeNames[ESM::Attribute::Length]
= { "Strength", "Intelligence", "Willpower", "Agility", "Speed", "Endurance", "Personality", "Luck" }; = { "Strength", "Intelligence", "Willpower", "Agility", "Speed", "Endurance", "Personality", "Luck" };
std::cout << " Name: " << mData.mName << std::endl; std::cout << " Name: " << mData.mName << std::endl;

View File

@ -7,6 +7,7 @@
#include <apps/opencs/model/world/refiddata.hpp> #include <apps/opencs/model/world/refiddata.hpp>
#include <apps/opencs/model/world/universalid.hpp> #include <apps/opencs/model/world/universalid.hpp>
#include <components/esm/attr.hpp>
#include <components/esm3/loadcont.hpp> #include <components/esm3/loadcont.hpp>
#include <components/esm3/loadmgef.hpp> #include <components/esm3/loadmgef.hpp>
#include <components/esm3/loadskil.hpp> #include <components/esm3/loadskil.hpp>
@ -1007,8 +1008,7 @@ int CSMWorld::NpcAttributesRefIdAdapter::getNestedColumnsCount(const RefIdColumn
int CSMWorld::NpcAttributesRefIdAdapter::getNestedRowsCount( int CSMWorld::NpcAttributesRefIdAdapter::getNestedRowsCount(
const RefIdColumn* column, const RefIdData& data, int index) const const RefIdColumn* column, const RefIdData& data, int index) const
{ {
// There are 8 attributes return ESM::Attribute::Length;
return 8;
} }
void CSMWorld::NpcSkillsRefIdAdapter::addNestedRow( void CSMWorld::NpcSkillsRefIdAdapter::addNestedRow(
@ -1385,8 +1385,7 @@ int CSMWorld::CreatureAttributesRefIdAdapter::getNestedColumnsCount(
int CSMWorld::CreatureAttributesRefIdAdapter::getNestedRowsCount( int CSMWorld::CreatureAttributesRefIdAdapter::getNestedRowsCount(
const RefIdColumn* column, const RefIdData& data, int index) const const RefIdColumn* column, const RefIdData& data, int index) const
{ {
// There are 8 attributes return ESM::Attribute::Length;
return 8;
} }
void CSMWorld::CreatureAttackRefIdAdapter::addNestedRow( void CSMWorld::CreatureAttackRefIdAdapter::addNestedRow(

View File

@ -123,7 +123,7 @@ namespace MWClass
const MWWorld::LiveCellRef<ESM::Clothing>* ref = ptr.get<ESM::Clothing>(); const MWWorld::LiveCellRef<ESM::Clothing>* ref = ptr.get<ESM::Clothing>();
static const ESM::RefId ringUp = ESM::RefId::stringRefId("Item Ring Up"); static const ESM::RefId ringUp = ESM::RefId::stringRefId("Item Ring Up");
static const ESM::RefId clothsUp = ESM::RefId::stringRefId("Item Clothes Up"); static const ESM::RefId clothsUp = ESM::RefId::stringRefId("Item Clothes Up");
if (ref->mBase->mData.mType == 8) if (ref->mBase->mData.mType == ESM::Clothing::Ring)
{ {
return ringUp; return ringUp;
} }
@ -135,7 +135,7 @@ namespace MWClass
const MWWorld::LiveCellRef<ESM::Clothing>* ref = ptr.get<ESM::Clothing>(); const MWWorld::LiveCellRef<ESM::Clothing>* ref = ptr.get<ESM::Clothing>();
static const ESM::RefId ringDown = ESM::RefId::stringRefId("Item Ring Down"); static const ESM::RefId ringDown = ESM::RefId::stringRefId("Item Ring Down");
static const ESM::RefId clothsDown = ESM::RefId::stringRefId("Item Clothes Down"); static const ESM::RefId clothsDown = ESM::RefId::stringRefId("Item Clothes Down");
if (ref->mBase->mData.mType == 8) if (ref->mBase->mData.mType == ESM::Clothing::Ring)
{ {
return ringDown; return ringDown;
} }

View File

@ -69,7 +69,7 @@ namespace MWGui
MWMechanics::CreatureStats& creatureStats = player.getClass().getCreatureStats(player); MWMechanics::CreatureStats& creatureStats = player.getClass().getCreatureStats(player);
MWMechanics::NpcStats& pcStats = player.getClass().getNpcStats(player); MWMechanics::NpcStats& pcStats = player.getClass().getNpcStats(player);
for (int i = 0; i < 8; ++i) for (int i = 0; i < ESM::Attribute::Length; ++i)
{ {
int val = creatureStats.getAttribute(i).getBase(); int val = creatureStats.getAttribute(i).getBase();
if (std::find(mSpentAttributes.begin(), mSpentAttributes.end(), i) != mSpentAttributes.end()) if (std::find(mSpentAttributes.begin(), mSpentAttributes.end(), i) != mSpentAttributes.end())
@ -149,7 +149,7 @@ namespace MWGui
mLevelDescription->setCaption(toUString(levelupdescription)); mLevelDescription->setCaption(toUString(levelupdescription));
unsigned int availableAttributes = 0; unsigned int availableAttributes = 0;
for (int i = 0; i < 8; ++i) for (int i = 0; i < ESM::Attribute::Length; ++i)
{ {
MyGUI::TextBox* text = mAttributeMultipliers[i]; MyGUI::TextBox* text = mAttributeMultipliers[i];
if (pcStats.getAttribute(i).getBase() < 100) if (pcStats.getAttribute(i).getBase() < 100)

View File

@ -129,17 +129,15 @@ namespace MWGui::Widgets
{ {
if (mAttributeNameWidget) if (mAttributeNameWidget)
{ {
if (mId < 0 || mId >= 8) const ESM::Attribute* attribute
= MWBase::Environment::get().getESMStore()->get<ESM::Attribute>().search(mId);
if (!attribute)
{ {
mAttributeNameWidget->setCaption({}); mAttributeNameWidget->setCaption({});
} }
else else
{ {
static const std::string_view attributes[8] MyGUI::UString name = toUString(attribute->mName);
= { "sAttributeStrength", "sAttributeIntelligence", "sAttributeWillpower", "sAttributeAgility",
"sAttributeSpeed", "sAttributeEndurance", "sAttributePersonality", "sAttributeLuck" };
MyGUI::UString name = toUString(
MWBase::Environment::get().getWindowManager()->getGameSettingString(attributes[mId], {}));
mAttributeNameWidget->setCaption(name); mAttributeNameWidget->setCaption(name);
} }
} }

View File

@ -535,10 +535,10 @@ namespace MWMechanics
void CreatureStats::writeState(ESM::CreatureStats& state) const void CreatureStats::writeState(ESM::CreatureStats& state) const
{ {
for (int i = 0; i < ESM::Attribute::Length; ++i) for (size_t i = 0; i < state.mAttributes.size(); ++i)
mAttributes[i].writeState(state.mAttributes[i]); mAttributes[i].writeState(state.mAttributes[i]);
for (int i = 0; i < 3; ++i) for (size_t i = 0; i < state.mDynamic.size(); ++i)
mDynamic[i].writeState(state.mDynamic[i]); mDynamic[i].writeState(state.mDynamic[i]);
state.mTradeTime = mLastRestock.toEsm(); state.mTradeTime = mLastRestock.toEsm();
@ -582,7 +582,7 @@ namespace MWMechanics
state.mSummonGraveyard = mSummonGraveyard; state.mSummonGraveyard = mSummonGraveyard;
state.mHasAiSettings = true; state.mHasAiSettings = true;
for (int i = 0; i < 4; ++i) for (size_t i = 0; i < state.mAiSettings.size(); ++i)
mAiSettings[i].writeState(state.mAiSettings[i]); mAiSettings[i].writeState(state.mAiSettings[i]);
state.mMissingACDT = false; state.mMissingACDT = false;
@ -592,10 +592,10 @@ namespace MWMechanics
{ {
if (!state.mMissingACDT) if (!state.mMissingACDT)
{ {
for (int i = 0; i < ESM::Attribute::Length; ++i) for (size_t i = 0; i < state.mAttributes.size(); ++i)
mAttributes[i].readState(state.mAttributes[i]); mAttributes[i].readState(state.mAttributes[i]);
for (int i = 0; i < 3; ++i) for (size_t i = 0; i < state.mDynamic.size(); ++i)
mDynamic[i].readState(state.mDynamic[i]); mDynamic[i].readState(state.mDynamic[i]);
mGoldPool = state.mGoldPool; mGoldPool = state.mGoldPool;
@ -636,7 +636,7 @@ namespace MWMechanics
mSummonGraveyard = state.mSummonGraveyard; mSummonGraveyard = state.mSummonGraveyard;
if (state.mHasAiSettings) if (state.mHasAiSettings)
for (int i = 0; i < 4; ++i) for (size_t i = 0; i < state.mAiSettings.size(); ++i)
mAiSettings[i].readState(state.mAiSettings[i]); mAiSettings[i].readState(state.mAiSettings[i]);
if (state.mRecalcDynamicStats) if (state.mRecalcDynamicStats)
recalculateMagicka(); recalculateMagicka();

View File

@ -43,8 +43,7 @@ namespace MWWorld
ESM::CreatureStats::CorprusStats stats; ESM::CreatureStats::CorprusStats stats;
stats.mNextWorsening = oldStats.mNextWorsening; stats.mNextWorsening = oldStats.mNextWorsening;
for (int i = 0; i < ESM::Attribute::Length; ++i) stats.mWorsenings.fill(0);
stats.mWorsenings[i] = 0;
for (auto& effect : spell->mEffects.mList) for (auto& effect : spell->mEffects.mList)
{ {
@ -179,8 +178,8 @@ namespace MWWorld
{ {
it->mNextWorsening = spell.second.mNextWorsening; it->mNextWorsening = spell.second.mNextWorsening;
int worsenings = 0; int worsenings = 0;
for (int i = 0; i < ESM::Attribute::Length; ++i) for (const auto& worsening : spell.second.mWorsenings)
worsenings = std::max(spell.second.mWorsenings[i], worsenings); worsenings = std::max(worsening, worsenings);
it->mWorsenings = worsenings; it->mWorsenings = worsenings;
} }
} }
@ -209,20 +208,19 @@ namespace MWWorld
} }
} }
// Reset modifiers that were previously recalculated each frame // Reset modifiers that were previously recalculated each frame
for (std::size_t i = 0; i < ESM::Attribute::Length; ++i) for (auto& attribute : creatureStats.mAttributes)
creatureStats.mAttributes[i].mMod = 0.f; attribute.mMod = 0.f;
for (std::size_t i = 0; i < 3; ++i) for (auto& dynamic : creatureStats.mDynamic)
{ {
auto& dynamic = creatureStats.mDynamic[i];
dynamic.mCurrent -= dynamic.mMod - dynamic.mBase; dynamic.mCurrent -= dynamic.mMod - dynamic.mBase;
dynamic.mMod = 0.f; dynamic.mMod = 0.f;
} }
for (std::size_t i = 0; i < 4; ++i) for (auto& setting : creatureStats.mAiSettings)
creatureStats.mAiSettings[i].mMod = 0.f; setting.mMod = 0.f;
if (npcStats) if (npcStats)
{ {
for (std::size_t i = 0; i < npcStats->mSkills.size(); ++i) for (auto& skill : npcStats->mSkills)
npcStats->mSkills[i].mMod = 0.f; skill.mMod = 0.f;
} }
} }
@ -230,9 +228,9 @@ namespace MWWorld
// version or not // version or not
void convertStats(ESM::CreatureStats& creatureStats) void convertStats(ESM::CreatureStats& creatureStats)
{ {
for (std::size_t i = 0; i < 3; ++i) for (auto& dynamic : creatureStats.mDynamic)
creatureStats.mDynamic[i].mMod = 0.f; dynamic.mMod = 0.f;
for (std::size_t i = 0; i < 4; ++i) for (auto& setting : creatureStats.mAiSettings)
creatureStats.mAiSettings[i].mMod = 0.f; setting.mMod = 0.f;
} }
} }

View File

@ -10,11 +10,11 @@ namespace ESM
void CreatureStats::load(ESMReader& esm) void CreatureStats::load(ESMReader& esm)
{ {
const bool intFallback = esm.getFormatVersion() <= MaxIntFallbackFormatVersion; const bool intFallback = esm.getFormatVersion() <= MaxIntFallbackFormatVersion;
for (int i = 0; i < 8; ++i) for (auto& attribute : mAttributes)
mAttributes[i].load(esm, intFallback); attribute.load(esm, intFallback);
for (int i = 0; i < 3; ++i) for (auto& dynamic : mDynamic)
mDynamic[i].load(esm); dynamic.load(esm);
mGoldPool = 0; mGoldPool = 0;
esm.getHNOT(mGoldPool, "GOLD"); esm.getHNOT(mGoldPool, "GOLD");
@ -154,8 +154,8 @@ namespace ESM
if (mHasAiSettings) if (mHasAiSettings)
{ {
for (int i = 0; i < 4; ++i) for (auto& setting : mAiSettings)
mAiSettings[i].load(esm); setting.load(esm);
} }
while (esm.isNextSub("CORP")) while (esm.isNextSub("CORP"))
@ -179,11 +179,11 @@ namespace ESM
void CreatureStats::save(ESMWriter& esm) const void CreatureStats::save(ESMWriter& esm) const
{ {
for (int i = 0; i < 8; ++i) for (const auto& attribute : mAttributes)
mAttributes[i].save(esm); attribute.save(esm);
for (int i = 0; i < 3; ++i) for (const auto& dynamic : mDynamic)
mDynamic[i].save(esm); dynamic.save(esm);
if (mGoldPool) if (mGoldPool)
esm.writeHNT("GOLD", mGoldPool); esm.writeHNT("GOLD", mGoldPool);
@ -268,8 +268,8 @@ namespace ESM
esm.writeHNT("AISE", mHasAiSettings); esm.writeHNT("AISE", mHasAiSettings);
if (mHasAiSettings) if (mHasAiSettings)
{ {
for (int i = 0; i < 4; ++i) for (const auto& setting : mAiSettings)
mAiSettings[i].save(esm); setting.save(esm);
} }
if (mMissingACDT) if (mMissingACDT)
esm.writeHNT("NOAC", mMissingACDT); esm.writeHNT("NOAC", mMissingACDT);

View File

@ -1,6 +1,7 @@
#ifndef OPENMW_ESM_CREATURESTATS_H #ifndef OPENMW_ESM_CREATURESTATS_H
#define OPENMW_ESM_CREATURESTATS_H #define OPENMW_ESM_CREATURESTATS_H
#include <array>
#include <map> #include <map>
#include <string> #include <string>
#include <vector> #include <vector>
@ -26,19 +27,19 @@ namespace ESM
{ {
struct CorprusStats struct CorprusStats
{ {
int mWorsenings[Attribute::Length]; std::array<int, Attribute::Length> mWorsenings;
TimeStamp mNextWorsening; TimeStamp mNextWorsening;
}; };
StatState<float> mAttributes[Attribute::Length]; std::array<StatState<float>, Attribute::Length> mAttributes;
StatState<float> mDynamic[3]; std::array<StatState<float>, 3> mDynamic;
MagicEffects mMagicEffects; MagicEffects mMagicEffects;
AiSequence::AiSequence mAiSequence; AiSequence::AiSequence mAiSequence;
bool mHasAiSettings; bool mHasAiSettings;
StatState<int> mAiSettings[4]; std::array<StatState<int>, 4> mAiSettings;
std::map<SummonKey, int> mSummonedCreatureMap; std::map<SummonKey, int> mSummonedCreatureMap;
std::multimap<int, int> mSummonedCreatures; std::multimap<int, int> mSummonedCreatures;