mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 13:26:38 +00:00 
			
		
		
		
	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