public void load_data(string chapter_id, Dictionary <string, string> previous_chapters, string progression_id) { TactileLibrary.Data_Chapter chapter = Global.data_chapters[chapter_id]; if (chapter.Prior_Chapters.Count > 0) { #if DEBUG foreach (var previous_chapter in previous_chapters) { // Keys for Data are progression ids Debug.Assert(Data.ContainsKey(previous_chapter.Value), string.Format( "No save data for \"{0}\", the previous chapter of {1}", previous_chapter.Value, chapter_id)); if (chapter.Prior_Chapters.Contains(previous_chapter.Key)) { // This doesn't seem formed correctly, why is Prior_Chapters[0] required? //Yeti Debug.Assert(Data[previous_chapter.Value].ContainsKey( previous_chapter.Key), string.Format( "Chapter \"{0}\" doesn't have save data for progression id {1}", previous_chapter.Value, previous_chapter.Key)); } } #endif } // An list of the battalions of the chapters being loaded from, in order with the last being the most important List <int> previous_chapter_battalions = new List <int>(), completed_chapter_battalions = new List <int>(); Dictionary <int, Save_Data> battalion_chapters = new Dictionary <int, Save_Data>(); for (int i = 0; i < chapter.Prior_Chapters.Count; i++) { string prior_id = chapter.Prior_Chapters[i]; Save_Data data; if (previous_chapters.ContainsKey(prior_id)) { data = Data[previous_chapters[prior_id]][prior_id]; } else { data = recent_save(prior_id); } //int battalion = Global.data_chapters.Values.Single(x => x.Id == data.chapter_id).Battalion; //Debug int battalion = Global.data_chapters[data.chapter_id].Battalion; // If no data for this chapter's battalion yet if (!battalion_chapters.ContainsKey(battalion)) { battalion_chapters[battalion] = data; // Insert instead of add so the first added data will be at the end of the list, and iterated last below previous_chapter_battalions.Insert(0, battalion); } } for (int i = 0; i < chapter.Completed_Chapters.Count; i++) { string prior_id = chapter.Completed_Chapters[i]; Save_Data data; // If there's specific previous chapter data, load that if (previous_chapters.ContainsKey(prior_id)) { data = Data[previous_chapters[prior_id]][prior_id]; } // Otherwise default to the most recent valid save else { data = recent_save(prior_id); } //int battalion = Global.data_chapters.Values.Single(x => x.Id == data.chapter_id).Battalion; //Debug int battalion = Global.data_chapters[data.chapter_id].Battalion; // If no data for this chapter's battalion yet if (!battalion_chapters.ContainsKey(battalion)) { battalion_chapters[battalion] = data; completed_chapter_battalions.Insert(0, battalion); } } int chapter_battalion = chapter.Battalion; Save_Data.reset_old_data(); // Load system and event data from each previous file foreach (int battalion in previous_chapter_battalions) { battalion_chapters[battalion].load_data(); } foreach (int battalion in previous_chapter_battalions.Take(previous_chapter_battalions.Count - 1)) { battalion_chapters[battalion].load_event_data(false); } // I need to load event data from completed chapters, to check what gaidens other lords took and such //Debug // Actually no if you want event data from a previous chapter you need to use Prior Chapters //foreach (int battalion in completed_chapter_battalions) //Debug // battalion_chapters[battalion].load_event_data(false); // Load all actors from each save foreach (int battalion in completed_chapter_battalions) { battalion_chapters[battalion].load_actors(); } foreach (int battalion in previous_chapter_battalions) { battalion_chapters[battalion].load_actors(); } // Then load only battalion actors from every save, overwriting data actors might have on routes where they aren't PCs foreach (int battalion in completed_chapter_battalions) { battalion_chapters[battalion].load_battalion(battalion); } foreach (int battalion in previous_chapter_battalions) { battalion_chapters[battalion].load_battalion(battalion); } if (!Global.game_battalions.ContainsKey(chapter_battalion)) { Global.game_battalions.add_battalion(chapter_battalion); } Global.game_battalions.current_battalion = chapter_battalion; }
public Data_Chapter(Data_Chapter chapter) { CopyFrom(chapter); }