1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-06 00:55:50 +00:00

Merge branch 'fix_world_model' into 'master'

Fix WorldModel (#7474)

Closes #7474

See merge request OpenMW/openmw!3270
This commit is contained in:
psi29a 2023-07-24 09:10:06 +00:00
commit 09e1ff9a4b

View File

@ -32,10 +32,10 @@ namespace MWWorld
CellStore& emplaceCellStore(ESM::RefId id, const T& cell, ESMStore& store, ESM::ReadersCache& readers, CellStore& emplaceCellStore(ESM::RefId id, const T& cell, ESMStore& store, ESM::ReadersCache& readers,
std::unordered_map<ESM::RefId, CellStore>& cells) std::unordered_map<ESM::RefId, CellStore>& cells)
{ {
return cells const auto [it, inserted] = cells.emplace(
.emplace(std::piecewise_construct, std::forward_as_tuple(id), std::piecewise_construct, std::forward_as_tuple(id), std::forward_as_tuple(Cell(cell), store, readers));
std::forward_as_tuple(Cell(cell), store, readers)) assert(inserted);
.first->second; return it->second;
} }
const ESM::Cell* createEsmCell(ESM::ExteriorCellLocation location, ESMStore& store) const ESM::Cell* createEsmCell(ESM::ExteriorCellLocation location, ESMStore& store)
@ -205,6 +205,7 @@ namespace MWWorld
cellStore = &emplaceCellStore(cell4->mId, *cell4, mStore, mReaders, mCells); cellStore = &emplaceCellStore(cell4->mId, *cell4, mStore, mReaders, mCells);
else else
return nullptr; return nullptr;
mInteriors.emplace(name, cellStore);
} }
else else
{ {
@ -230,7 +231,12 @@ namespace MWWorld
{ {
auto it = mCells.find(id); auto it = mCells.find(id);
if (it != mCells.end()) if (it != mCells.end())
return &it->second; {
CellStore& cellStore = it->second;
if (forceLoad && cellStore.getState() != CellStore::State_Loaded)
cellStore.load();
return &cellStore;
}
if (id == draftCellId) if (id == draftCellId)
{ {