コード例 #1
0
ファイル: TemplateInfo.cs プロジェクト: KHCmaster/PPD
 public TemplateInfo()
 {
     SoundManagerInfo  = new SoundManagerInfo();
     EventManagerInfo  = new EventManagerInfo();
     TimeLineInfo      = new TimeLineInfo();
     ScriptManagerInfo = new ScriptManagerInfo();
 }
コード例 #2
0
ファイル: TemplateInfo.cs プロジェクト: KHCmaster/PPD
        public void Load(string filePath)
        {
            var document = XDocument.Load(filePath);

            Type        = ReplaceLanguage(ReadAttribute(document.Root, "Type"));
            Name        = ReplaceLanguage(ReadAttribute(document.Root, "Name"));
            Description = ReplaceLanguage(ReadAttribute(document.Root, "Description")).Replace("\\n", "\n");
            IconPath    = ReplaceLanguage(ReadAttribute(document.Root, "IconPath"));

            if (File.Exists(IconPath))
            {
                Image = new BitmapImage();
                Image.BeginInit();
                Image.UriSource   = new Uri(IconPath, UriKind.RelativeOrAbsolute);
                Image.CacheOption = BitmapCacheOption.OnLoad;
                Image.EndInit();
            }

            foreach (var element in document.Descendants("SoundManager"))
            {
                foreach (var soundsElement in element.Elements("Sounds"))
                {
                    foreach (var soundElement in soundsElement.Elements("Sound"))
                    {
                        SoundManagerInfo.Add(soundElement.Value);
                    }
                    break;
                }
                foreach (var changesElement in element.Elements("Changes"))
                {
                    foreach (var changeElement in changesElement.Elements("Change"))
                    {
                        var time = GetElementValue(changeElement, "Time");
                        var data = GetElementValue(changeElement, "Data");
                        if (time == null || data == null)
                        {
                            continue;
                        }
                        SoundManagerInfo.AddChange(ParseFloat(time), ParseUshortList(data, 10));
                    }
                    break;
                }
                break;
            }

            foreach (var element in document.Descendants("EventManager"))
            {
                foreach (var eventsElement in element.Elements("Events"))
                {
                    foreach (var eventElement in eventsElement.Elements("Event"))
                    {
                        var time             = GetElementValue(eventElement, "Time");
                        var noteType         = GetElementValue(eventElement, "NoteType");
                        var bpm              = GetElementValue(eventElement, "BPM");
                        var initializeOrders = GetElementValue(eventElement, "InitializeOrders");
                        if (time == null)
                        {
                            continue;
                        }
                        var newEvent = new Event();
                        if (noteType != null)
                        {
                            newEvent.NoteType = ParseEnum <NoteType>(noteType);
                        }
                        if (bpm != null)
                        {
                            newEvent.BPM = ParseFloat(bpm);
                        }
                        if (initializeOrders != null)
                        {
                            var io = ParseIntList(initializeOrders, 10).Distinct().ToArray();
                            for (int i = 0; i < Math.Min(io.Length, newEvent.InitializeOrders.Length); i++)
                            {
                                newEvent.InitializeOrders[i] = io[i];
                            }
                        }
                        EventManagerInfo.Add(ParseFloat(time), newEvent);
                    }
                    break;
                }
                break;
            }
            foreach (var element in document.Descendants("TimeLine"))
            {
                var rowOrders       = GetElementValue(element, "RowOrders");
                var rowVisibilities = GetElementValue(element, "RowVisibilities");
                var rowLimited      = GetElementValue(element, "RowLimited");
                if (rowOrders != null)
                {
                    var ro = ParseIntList(rowOrders, 10).Distinct().ToArray();
                    for (int i = 0; i < Math.Min(ro.Length, TimeLineInfo.RowOrders.Length); i++)
                    {
                        TimeLineInfo.RowOrders[i] = ro[i];
                    }
                }
                if (rowVisibilities != null)
                {
                    var rv = ParseIntList(rowVisibilities, 10);
                    for (int i = 0; i < Math.Min(rv.Length, TimeLineInfo.RowVisibilities.Length); i++)
                    {
                        TimeLineInfo.RowVisibilities[i] = rv[i] == 1;
                    }
                }
                if (rowLimited != null)
                {
                    TimeLineInfo.RowLimited = int.Parse(rowLimited, NumberStyles.Integer, CultureInfo.InvariantCulture) == 1;
                }
                break;
            }

            foreach (var element in document.Descendants("ScriptManager"))
            {
                foreach (var scriptsElement in element.Elements("Scripts"))
                {
                    foreach (var scriptElement in scriptsElement.Elements("Script"))
                    {
                        var src  = GetElementValue(scriptElement, "Src");
                        var dest = GetElementValue(scriptElement, "Dest");
                        if (src == null || dest == null)
                        {
                            continue;
                        }
                        ScriptManagerInfo.Add(new ScriptInfo(src, dest));
                    }
                    break;
                }
                break;
            }
        }