1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-03-04 01:09:41 +00:00

Merge branch 'loadingesm4' into 'master'

Track ESM4 file loading progress

See merge request OpenMW/openmw!4516
This commit is contained in:
psi29a 2025-01-17 11:59:20 +00:00
commit e515e99937
4 changed files with 12 additions and 5 deletions

View file

@ -70,7 +70,7 @@ namespace MWWorld
mEncoder != nullptr ? &mEncoder->getStatelessEncoder() : nullptr);
reader.setModIndex(index);
reader.updateModIndices(mNameToIndex);
mStore.loadESM4(reader);
mStore.loadESM4(reader, listener);
break;
}
}

View file

@ -468,9 +468,16 @@ namespace MWWorld
}
}
void ESMStore::loadESM4(ESM4::Reader& reader)
void ESMStore::loadESM4(ESM4::Reader& reader, Loading::Listener* listener)
{
auto visitorRec = [this](ESM4::Reader& reader) { return ESMStoreImp::readRecord(reader, *this); };
if (listener != nullptr)
listener->setProgressRange(::EsmLoader::fileProgress);
auto visitorRec = [this, listener](ESM4::Reader& reader) {
bool result = ESMStoreImp::readRecord(reader, *this);
if (listener != nullptr)
listener->setProgress(::EsmLoader::fileProgress * reader.getFileOffset() / reader.getFileSize());
return result;
};
ESM4::ReaderUtils::readAll(reader, visitorRec, [](ESM4::Reader&) {});
}

View file

@ -219,7 +219,7 @@ namespace MWWorld
void validateDynamic();
void load(ESM::ESMReader& esm, Loading::Listener* listener, ESM::Dialogue*& dialogue);
void loadESM4(ESM4::Reader& esm);
void loadESM4(ESM4::Reader& esm, Loading::Listener* listener);
template <class T>
const Store<T>& get() const

View file

@ -217,7 +217,7 @@ namespace ESM4
// Methods added for updating loading progress bars
inline std::size_t getFileSize() const { return mFileSize; }
inline std::size_t getFileOffset() const { return mStream->tellg(); }
inline std::size_t getFileOffset() const { return mSavedStream ? mSavedStream->tellg() : mStream->tellg(); }
// Methods added for saving/restoring context
ReaderContext getContext(); // WARN: must be called immediately after reading the record header