forked from mirror/openmw-tes3mp
split info records between journal and topic info tables
This commit is contained in:
parent
ba88c94d58
commit
69f28ee4be
3 changed files with 29 additions and 4 deletions
|
@ -456,6 +456,8 @@ void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
|||
|
||||
reader.open (path.string());
|
||||
|
||||
const ESM::Dialogue *dialogue = 0;
|
||||
|
||||
// Note: We do not need to send update signals here, because at this point the model is not connected
|
||||
// to any view.
|
||||
while (reader.hasMoreRecs())
|
||||
|
@ -516,10 +518,15 @@ void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
|||
|
||||
if (record.mType==ESM::Dialogue::Journal)
|
||||
{
|
||||
int index = mJournals.getAppendIndex (id);
|
||||
mJournals.load (record, base);
|
||||
dialogue = &mJournals.getRecord (index).get();
|
||||
}
|
||||
else if (record.mType==ESM::Dialogue::Deleted)
|
||||
{
|
||||
dialogue = 0; // record vector can be shuffled around which would make pointer
|
||||
// to record invalid
|
||||
|
||||
if (mJournals.tryDelete (id))
|
||||
{
|
||||
/// \todo handle info records
|
||||
|
@ -535,7 +542,9 @@ void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
|||
}
|
||||
else
|
||||
{
|
||||
int index = mTopics.getAppendIndex (id);
|
||||
mTopics.load (record, base);
|
||||
dialogue = &mTopics.getRecord (index).get();
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -543,14 +552,25 @@ void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
|||
|
||||
case ESM::REC_INFO:
|
||||
{
|
||||
/// \todo associate info record with last loaded dialogue record
|
||||
mJournalInfos.load (reader, base);
|
||||
if (!dialogue)
|
||||
{
|
||||
/// \todo INFO record without matching DIAL record -> report to user
|
||||
reader.skipRecord();
|
||||
break;
|
||||
}
|
||||
|
||||
if (dialogue->mType==ESM::Dialogue::Journal)
|
||||
mJournalInfos.load (reader, base, *dialogue);
|
||||
else
|
||||
mTopicInfos.load (reader, base, *dialogue);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
|
||||
/// \todo throw an exception instead, once all records are implemented
|
||||
/// or maybe report error and continue?
|
||||
reader.skipRecord();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ void CSMWorld::InfoCollection::load (const ESM::DialInfo& record, bool base)
|
|||
}
|
||||
}
|
||||
|
||||
void CSMWorld::InfoCollection::load (ESM::ESMReader& reader, bool base)
|
||||
void CSMWorld::InfoCollection::load (ESM::ESMReader& reader, bool base, const ESM::Dialogue& dialogue)
|
||||
{
|
||||
/// \todo put records into proper order
|
||||
/// \todo adjust ID
|
||||
|
|
|
@ -5,6 +5,11 @@
|
|||
|
||||
#include "collection.hpp"
|
||||
|
||||
namespace ESM
|
||||
{
|
||||
class Dialogue;
|
||||
}
|
||||
|
||||
namespace CSMWorld
|
||||
{
|
||||
class InfoCollection : public Collection<ESM::DialInfo, IdAccessor<ESM::DialInfo> >
|
||||
|
@ -13,7 +18,7 @@ namespace CSMWorld
|
|||
|
||||
public:
|
||||
|
||||
void load (ESM::ESMReader& reader, bool base);
|
||||
void load (ESM::ESMReader& reader, bool base, const ESM::Dialogue& dialogue);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue