mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-27 03:35:27 +00:00
On store creation checks that each record has a different RecordId.
This commit is contained in:
parent
3b2d9161c4
commit
9b1c405467
@ -219,6 +219,35 @@ namespace MWWorld
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static unsigned int hasSameRecordId(const Store<T>& store, ESM::RecNameInts RecName)
|
||||||
|
{
|
||||||
|
if constexpr (HasRecordId<T>::value)
|
||||||
|
{
|
||||||
|
return T::sRecordId == RecName ? 1 : 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static void testRecNameIntCount(const Store<T>& store, const ESMStore::StoreTuple& stores)
|
||||||
|
{
|
||||||
|
if constexpr (HasRecordId<T>::value)
|
||||||
|
{
|
||||||
|
const unsigned int recordIdCount
|
||||||
|
= std::apply([](auto&&... x) { return (hasSameRecordId(x, T::sRecordId) + ...); }, stores);
|
||||||
|
assert(recordIdCount == 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void testAllRecNameIntUnique(const ESMStore::StoreTuple& stores)
|
||||||
|
{
|
||||||
|
std::apply([&stores](auto&&... x) { (testRecNameIntCount(x, stores), ...); }, stores);
|
||||||
|
}
|
||||||
|
|
||||||
static bool readRecord(ESM4::Reader& reader, ESMStore& store)
|
static bool readRecord(ESM4::Reader& reader, ESMStore& store)
|
||||||
{
|
{
|
||||||
return std::apply([&reader](auto&... x) { return (ESMStoreImp::typedReadRecordESM4(reader, x) || ...); },
|
return std::apply([&reader](auto&... x) { return (ESMStoreImp::typedReadRecordESM4(reader, x) || ...); },
|
||||||
@ -250,6 +279,7 @@ namespace MWWorld
|
|||||||
{
|
{
|
||||||
mStoreImp = std::make_unique<ESMStoreImp>();
|
mStoreImp = std::make_unique<ESMStoreImp>();
|
||||||
std::apply([this](auto&... x) { (ESMStoreImp::assignStoreToIndex(*this, x), ...); }, mStoreImp->mStores);
|
std::apply([this](auto&... x) { (ESMStoreImp::assignStoreToIndex(*this, x), ...); }, mStoreImp->mStores);
|
||||||
|
ESMStoreImp::testAllRecNameIntUnique(mStoreImp->mStores);
|
||||||
mDynamicCount = 0;
|
mDynamicCount = 0;
|
||||||
getWritable<ESM::Pathgrid>().setCells(getWritable<ESM::Cell>());
|
getWritable<ESM::Pathgrid>().setCells(getWritable<ESM::Cell>());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user