コード例 #1
0
ファイル: Save_File.cs プロジェクト: Nagraal/Tactile-Engine
        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;
        }
コード例 #2
0
 public Data_Chapter(Data_Chapter chapter)
 {
     CopyFrom(chapter);
 }