mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-03 17:39:42 +00:00
Use std::array in NpcStats
This commit is contained in:
parent
a5bb6c7d8d
commit
e01a3076dd
4 changed files with 31 additions and 31 deletions
|
@ -25,11 +25,11 @@ namespace ESSImport
|
||||||
faction.mReputation = essFaction.mReputation;
|
faction.mReputation = essFaction.mReputation;
|
||||||
out.mObject.mNpcStats.mFactions[ESM::RefId::stringRefId(essFaction.mFactionName.toString())] = faction;
|
out.mObject.mNpcStats.mFactions[ESM::RefId::stringRefId(essFaction.mFactionName.toString())] = faction;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 3; ++i)
|
for (size_t i = 0; i < out.mObject.mNpcStats.mSpecIncreases.size(); ++i)
|
||||||
out.mObject.mNpcStats.mSpecIncreases[i] = pcdt.mPNAM.mSpecIncreases[i];
|
out.mObject.mNpcStats.mSpecIncreases[i] = pcdt.mPNAM.mSpecIncreases[i];
|
||||||
for (int i = 0; i < 8; ++i)
|
for (size_t i = 0; i < out.mObject.mNpcStats.mSkillIncrease.size(); ++i)
|
||||||
out.mObject.mNpcStats.mSkillIncrease[i] = pcdt.mPNAM.mSkillIncreases[i];
|
out.mObject.mNpcStats.mSkillIncrease[i] = pcdt.mPNAM.mSkillIncreases[i];
|
||||||
for (int i = 0; i < 27; ++i)
|
for (size_t i = 0; i < out.mObject.mNpcStats.mSkills.size(); ++i)
|
||||||
out.mObject.mNpcStats.mSkills[i].mProgress = pcdt.mPNAM.mSkillProgress[i];
|
out.mObject.mNpcStats.mSkills[i].mProgress = pcdt.mPNAM.mSkillProgress[i];
|
||||||
out.mObject.mNpcStats.mLevelProgress = pcdt.mPNAM.mLevelProgress;
|
out.mObject.mNpcStats.mLevelProgress = pcdt.mPNAM.mLevelProgress;
|
||||||
|
|
||||||
|
|
|
@ -470,7 +470,7 @@ void MWMechanics::NpcStats::writeState(ESM::NpcStats& state) const
|
||||||
|
|
||||||
state.mDisposition = mDisposition;
|
state.mDisposition = mDisposition;
|
||||||
|
|
||||||
for (int i = 0; i < ESM::Skill::Length; ++i)
|
for (size_t i = 0; i < state.mSkills.size(); ++i)
|
||||||
mSkill[i].writeState(state.mSkills[i]);
|
mSkill[i].writeState(state.mSkills[i]);
|
||||||
|
|
||||||
state.mIsWerewolf = mIsWerewolf;
|
state.mIsWerewolf = mIsWerewolf;
|
||||||
|
@ -489,10 +489,10 @@ void MWMechanics::NpcStats::writeState(ESM::NpcStats& state) const
|
||||||
state.mWerewolfKills = mWerewolfKills;
|
state.mWerewolfKills = mWerewolfKills;
|
||||||
state.mLevelProgress = mLevelProgress;
|
state.mLevelProgress = mLevelProgress;
|
||||||
|
|
||||||
for (int i = 0; i < ESM::Attribute::Length; ++i)
|
for (size_t i = 0; i < state.mSkillIncrease.size(); ++i)
|
||||||
state.mSkillIncrease[i] = mSkillIncreases[i];
|
state.mSkillIncrease[i] = mSkillIncreases[i];
|
||||||
|
|
||||||
for (int i = 0; i < 3; ++i)
|
for (size_t i = 0; i < state.mSpecIncreases.size(); ++i)
|
||||||
state.mSpecIncreases[i] = mSpecIncreases[i];
|
state.mSpecIncreases[i] = mSpecIncreases[i];
|
||||||
|
|
||||||
std::copy(mUsedIds.begin(), mUsedIds.end(), std::back_inserter(state.mUsedIds));
|
std::copy(mUsedIds.begin(), mUsedIds.end(), std::back_inserter(state.mUsedIds));
|
||||||
|
@ -523,7 +523,7 @@ void MWMechanics::NpcStats::readState(const ESM::NpcStats& state)
|
||||||
|
|
||||||
mDisposition = state.mDisposition;
|
mDisposition = state.mDisposition;
|
||||||
|
|
||||||
for (int i = 0; i < ESM::Skill::Length; ++i)
|
for (size_t i = 0; i < state.mSkills.size(); ++i)
|
||||||
mSkill[i].readState(state.mSkills[i]);
|
mSkill[i].readState(state.mSkills[i]);
|
||||||
|
|
||||||
mIsWerewolf = state.mIsWerewolf;
|
mIsWerewolf = state.mIsWerewolf;
|
||||||
|
@ -534,10 +534,10 @@ void MWMechanics::NpcStats::readState(const ESM::NpcStats& state)
|
||||||
mWerewolfKills = state.mWerewolfKills;
|
mWerewolfKills = state.mWerewolfKills;
|
||||||
mLevelProgress = state.mLevelProgress;
|
mLevelProgress = state.mLevelProgress;
|
||||||
|
|
||||||
for (int i = 0; i < ESM::Attribute::Length; ++i)
|
for (size_t i = 0; i < state.mSkillIncrease.size(); ++i)
|
||||||
mSkillIncreases[i] = state.mSkillIncrease[i];
|
mSkillIncreases[i] = state.mSkillIncrease[i];
|
||||||
|
|
||||||
for (int i = 0; i < 3; ++i)
|
for (size_t i = 0; i < state.mSpecIncreases.size(); ++i)
|
||||||
mSpecIncreases[i] = state.mSpecIncreases[i];
|
mSpecIncreases[i] = state.mSpecIncreases[i];
|
||||||
|
|
||||||
for (auto iter(state.mUsedIds.begin()); iter != state.mUsedIds.end(); ++iter)
|
for (auto iter(state.mUsedIds.begin()); iter != state.mUsedIds.end(); ++iter)
|
||||||
|
|
|
@ -31,15 +31,15 @@ namespace ESM
|
||||||
|
|
||||||
esm.getHNOT(faction.mReputation, "FARE");
|
esm.getHNOT(faction.mReputation, "FARE");
|
||||||
|
|
||||||
mFactions.insert(std::make_pair(id, faction));
|
mFactions.emplace(id, faction);
|
||||||
}
|
}
|
||||||
|
|
||||||
mDisposition = 0;
|
mDisposition = 0;
|
||||||
esm.getHNOT(mDisposition, "DISP");
|
esm.getHNOT(mDisposition, "DISP");
|
||||||
|
|
||||||
const bool intFallback = esm.getFormatVersion() <= MaxIntFallbackFormatVersion;
|
const bool intFallback = esm.getFormatVersion() <= MaxIntFallbackFormatVersion;
|
||||||
for (int i = 0; i < 27; ++i)
|
for (auto& skill : mSkills)
|
||||||
mSkills[i].load(esm, intFallback);
|
skill.load(esm, intFallback);
|
||||||
|
|
||||||
mWerewolfDeprecatedData = false;
|
mWerewolfDeprecatedData = false;
|
||||||
if (esm.getFormatVersion() <= MaxWerewolfDeprecatedDataFormatVersion && esm.peekNextSub("STBA"))
|
if (esm.getFormatVersion() <= MaxWerewolfDeprecatedDataFormatVersion && esm.peekNextSub("STBA"))
|
||||||
|
@ -47,9 +47,9 @@ namespace ESM
|
||||||
// we have deprecated werewolf skills, stored interleaved
|
// we have deprecated werewolf skills, stored interleaved
|
||||||
// Load into one big vector, then remove every 2nd value
|
// Load into one big vector, then remove every 2nd value
|
||||||
mWerewolfDeprecatedData = true;
|
mWerewolfDeprecatedData = true;
|
||||||
std::vector<StatState<float>> skills(mSkills, mSkills + sizeof(mSkills) / sizeof(mSkills[0]));
|
std::vector<StatState<float>> skills(mSkills.begin(), mSkills.end());
|
||||||
|
|
||||||
for (int i = 0; i < 27; ++i)
|
for (int i = 0; i < ESM::Skill::Length; ++i)
|
||||||
{
|
{
|
||||||
StatState<float> skill;
|
StatState<float> skill;
|
||||||
skill.load(esm, intFallback);
|
skill.load(esm, intFallback);
|
||||||
|
@ -67,7 +67,7 @@ namespace ESM
|
||||||
if (skills.size() != std::size(mSkills))
|
if (skills.size() != std::size(mSkills))
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"Invalid number of skill for werewolf deprecated data: " + std::to_string(skills.size()));
|
"Invalid number of skill for werewolf deprecated data: " + std::to_string(skills.size()));
|
||||||
std::copy(skills.begin(), skills.end(), mSkills);
|
std::copy(skills.begin(), skills.end(), mSkills.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
// No longer used
|
// No longer used
|
||||||
|
@ -76,7 +76,7 @@ namespace ESM
|
||||||
if (hasWerewolfAttributes)
|
if (hasWerewolfAttributes)
|
||||||
{
|
{
|
||||||
StatState<int> dummy;
|
StatState<int> dummy;
|
||||||
for (int i = 0; i < 8; ++i)
|
for (int i = 0; i < ESM::Attribute::Length; ++i)
|
||||||
dummy.load(esm, intFallback);
|
dummy.load(esm, intFallback);
|
||||||
mWerewolfDeprecatedData = true;
|
mWerewolfDeprecatedData = true;
|
||||||
}
|
}
|
||||||
|
@ -104,12 +104,10 @@ namespace ESM
|
||||||
mLevelProgress = 0;
|
mLevelProgress = 0;
|
||||||
esm.getHNOT(mLevelProgress, "LPRO");
|
esm.getHNOT(mLevelProgress, "LPRO");
|
||||||
|
|
||||||
for (int i = 0; i < 8; ++i)
|
mSkillIncrease.fill(0);
|
||||||
mSkillIncrease[i] = 0;
|
|
||||||
esm.getHNOT(mSkillIncrease, "INCR");
|
esm.getHNOT(mSkillIncrease, "INCR");
|
||||||
|
|
||||||
for (int i = 0; i < 3; ++i)
|
mSpecIncreases.fill(0);
|
||||||
mSpecIncreases[i] = 0;
|
|
||||||
esm.getHNOT(mSpecIncreases, "SPEC");
|
esm.getHNOT(mSpecIncreases, "SPEC");
|
||||||
|
|
||||||
while (esm.isNextSub("USED"))
|
while (esm.isNextSub("USED"))
|
||||||
|
@ -152,8 +150,8 @@ namespace ESM
|
||||||
if (mDisposition)
|
if (mDisposition)
|
||||||
esm.writeHNT("DISP", mDisposition);
|
esm.writeHNT("DISP", mDisposition);
|
||||||
|
|
||||||
for (int i = 0; i < 27; ++i)
|
for (const auto& skill : mSkills)
|
||||||
mSkills[i].save(esm);
|
skill.save(esm);
|
||||||
|
|
||||||
if (mIsWerewolf)
|
if (mIsWerewolf)
|
||||||
esm.writeHNT("WOLF", mIsWerewolf);
|
esm.writeHNT("WOLF", mIsWerewolf);
|
||||||
|
@ -171,9 +169,9 @@ namespace ESM
|
||||||
esm.writeHNT("LPRO", mLevelProgress);
|
esm.writeHNT("LPRO", mLevelProgress);
|
||||||
|
|
||||||
bool saveSkillIncreases = false;
|
bool saveSkillIncreases = false;
|
||||||
for (int i = 0; i < 8; ++i)
|
for (int increase : mSkillIncrease)
|
||||||
{
|
{
|
||||||
if (mSkillIncrease[i] != 0)
|
if (increase != 0)
|
||||||
{
|
{
|
||||||
saveSkillIncreases = true;
|
saveSkillIncreases = true;
|
||||||
break;
|
break;
|
||||||
|
@ -204,10 +202,8 @@ namespace ESM
|
||||||
mReputation = 0;
|
mReputation = 0;
|
||||||
mWerewolfKills = 0;
|
mWerewolfKills = 0;
|
||||||
mLevelProgress = 0;
|
mLevelProgress = 0;
|
||||||
for (int i = 0; i < 8; ++i)
|
mSkillIncrease.fill(0);
|
||||||
mSkillIncrease[i] = 0;
|
mSpecIncreases.fill(0);
|
||||||
for (int i = 0; i < 3; ++i)
|
|
||||||
mSpecIncreases[i] = 0;
|
|
||||||
mTimeToStartDrowning = 20;
|
mTimeToStartDrowning = 20;
|
||||||
mCrimeId = -1;
|
mCrimeId = -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#ifndef OPENMW_ESM_NPCSTATS_H
|
#ifndef OPENMW_ESM_NPCSTATS_H
|
||||||
#define OPENMW_ESM_NPCSTATS_H
|
#define OPENMW_ESM_NPCSTATS_H
|
||||||
|
|
||||||
|
#include "loadskil.hpp"
|
||||||
#include "statstate.hpp"
|
#include "statstate.hpp"
|
||||||
|
#include <components/esm/attr.hpp>
|
||||||
#include <components/esm/refid.hpp>
|
#include <components/esm/refid.hpp>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -31,13 +35,13 @@ namespace ESM
|
||||||
|
|
||||||
std::map<ESM::RefId, Faction> mFactions; // lower case IDs
|
std::map<ESM::RefId, Faction> mFactions; // lower case IDs
|
||||||
int mDisposition;
|
int mDisposition;
|
||||||
StatState<float> mSkills[27];
|
std::array<StatState<float>, ESM::Skill::Length> mSkills;
|
||||||
int mBounty;
|
int mBounty;
|
||||||
int mReputation;
|
int mReputation;
|
||||||
int mWerewolfKills;
|
int mWerewolfKills;
|
||||||
int mLevelProgress;
|
int mLevelProgress;
|
||||||
int mSkillIncrease[8];
|
std::array<int, ESM::Attribute::Length> mSkillIncrease;
|
||||||
int mSpecIncreases[3];
|
std::array<int, 3> mSpecIncreases;
|
||||||
std::vector<ESM::RefId> mUsedIds; // lower case IDs
|
std::vector<ESM::RefId> mUsedIds; // lower case IDs
|
||||||
float mTimeToStartDrowning;
|
float mTimeToStartDrowning;
|
||||||
int mCrimeId;
|
int mCrimeId;
|
||||||
|
|
Loading…
Reference in a new issue