mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 06:39:42 +00:00
write references in cells to saved game file
This commit is contained in:
parent
dd7d80ffbc
commit
419e3a7d30
4 changed files with 54 additions and 1 deletions
|
@ -73,7 +73,7 @@ void MWWorld::Cells::writeCell (ESM::ESMWriter& writer, const CellStore& cell) c
|
|||
writer.startRecord (ESM::REC_CSTA);
|
||||
cellState.mId.save (writer);
|
||||
cellState.save (writer);
|
||||
/// \todo write references
|
||||
cell.writeReferences (writer);
|
||||
writer.endRecord (ESM::REC_CSTA);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include <components/esm/cellstate.hpp>
|
||||
#include <components/esm/cellid.hpp>
|
||||
#include <components/esm/esmwriter.hpp>
|
||||
#include <components/esm/objectstate.hpp>
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/world.hpp"
|
||||
|
@ -32,6 +34,30 @@ namespace
|
|||
|
||||
return MWWorld::Ptr();
|
||||
}
|
||||
|
||||
template<typename RecordType, typename T>
|
||||
void writeReferenceCollection (ESM::ESMWriter& writer,
|
||||
const MWWorld::CellRefList<T>& collection)
|
||||
{
|
||||
if (!collection.mList.empty())
|
||||
{
|
||||
// section header
|
||||
writer.writeHNT ("CSEC", collection.mList.front().mBase->sRecordId);
|
||||
|
||||
// references
|
||||
for (typename MWWorld::CellRefList<T>::List::const_iterator
|
||||
iter (collection.mList.begin());
|
||||
iter!=collection.mList.end(); ++iter)
|
||||
{
|
||||
RecordType state;
|
||||
iter->save (state);
|
||||
|
||||
writer.startRecord (ESM::REC_OBJE);
|
||||
state.save (writer);
|
||||
writer.endRecord (ESM::REC_OBJE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace MWWorld
|
||||
|
@ -251,4 +277,28 @@ namespace MWWorld
|
|||
|
||||
state.mWaterLevel = mWaterLevel;
|
||||
}
|
||||
|
||||
void CellStore::writeReferences (ESM::ESMWriter& writer) const
|
||||
{
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mActivators);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mPotions);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mAppas);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mArmors);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mBooks);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mClothes);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mContainers);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mCreatures);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mDoors);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mIngreds);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mCreatureLists);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mItemLists);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mLights);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mLockpicks);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mMiscItems);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mNpcs);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mProbes);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mRepairs);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mStatics);
|
||||
writeReferenceCollection<ESM::ObjectState> (writer, mWeapons);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -142,6 +142,8 @@ namespace MWWorld
|
|||
|
||||
void saveState (ESM::CellState& state) const;
|
||||
|
||||
void writeReferences (ESM::ESMWriter& writer) const;
|
||||
|
||||
private:
|
||||
|
||||
template<class Functor, class List>
|
||||
|
|
|
@ -90,6 +90,7 @@ enum RecNameInts
|
|||
REC_GSCR = 0x52435347,
|
||||
REC_PLAY = 0x59414c50,
|
||||
REC_CSTA = 0x41545343,
|
||||
REC_OBJE = 0x454a424f,
|
||||
|
||||
// format 1
|
||||
REC_FILT = 0x544C4946
|
||||
|
|
Loading…
Reference in a new issue