コード例 #1
0
        public static SplitFile ImportFromWsplit(string path)
        {
            var firstLine = File.ReadLines(path).First();
            if (!firstLine.Contains("Title=")) throw new Exception("Cannot find Title.");

            var linesOfText = File.ReadAllLines(path);
            var runName = firstLine.Replace("Title=", string.Empty);

            //var heightWidth = linesOfText[3].Replace("Size=", string.Empty).Split(',');
            //var height = double.Parse(heightWidth[0]);
            //var width = double.Parse(heightWidth[1]);

            var decodedStrings = linesOfText.Skip(4).Take(linesOfText.Length - 5).Select(s =>
            {
                var commaSplit = s.Split(',');

                return new
                {
                    Name = commaSplit[0],
                    PbTime = TimeSpan.FromSeconds(double.Parse(commaSplit[2], System.Globalization.CultureInfo.InvariantCulture)),
                    Gold = TimeSpan.FromSeconds(double.Parse(commaSplit[3], System.Globalization.CultureInfo.InvariantCulture))
                };
            }).ToArray();

            var splits = Enumerable.Range(0, decodedStrings.Length).Select(i =>
            {
                var split = decodedStrings[i];

                SplitTimeSpan pbSplit;
                    
                if (split.PbTime == TimeSpan.Zero) pbSplit = new SplitTimeSpan(TimeSpan.Zero, false);
                else if (i == 0) pbSplit = new SplitTimeSpan(split.PbTime);
                else
                {
                    var lastGoodTime = decodedStrings.Take(i).Where(a => a.PbTime != TimeSpan.Zero).Select(a => a.PbTime).LastOrDefault();
                    pbSplit = new SplitTimeSpan(split.PbTime.Subtract(lastGoodTime));
                }

                return new SplitInfo()
                {
                    Name = split.Name,
                    PersonalBestSplit = pbSplit,
                    SumOfBestSplit = split.Gold == TimeSpan.Zero ? SplitTimeSpan.Unknown : new SplitTimeSpan(split.Gold)
                };
            }).ToArray();

            var result = new SplitFile(runName, splits);

            //result.DisplaySettings.WindowHeight = height;
            //result.DisplaySettings.WindowWidth = width;

            return result;
        }
コード例 #2
0
        public void CreateNewFile()
        {
            var emptySplit = new SplitInfo()
            {
                Name = "Unnamed Split",
                PersonalBestSplit = SplitTimeSpan.Unknown,
                SumOfBestSplit = SplitTimeSpan.Unknown
            };

            CurrentFile = new SplitFile("Unnamed Run", Enumerable.Repeat(emptySplit, 1).ToArray());
        }
コード例 #3
0
        public void LoadFromFile(SplitFile file)
        {
            var pbAndGold = file.RunDefinition.Zip(file.PersonalBest.Splits, (d, pb) => new { D = d, Pb = pb })
                .Zip(file.SumOfBest.Splits, (a, gs) => new { Definition = a.D, PersonalBest = a.Pb, Gold = gs }).ToArray();

            Splits = new ObservableCollection<SplitRowEdit>(pbAndGold.Select(a =>
            {
                var editRow = new SplitRowEdit(this);
                editRow.GoldSplitLength = a.Definition.SumOfBestSplit.Time;
                editRow.IsGoldTimeUnknown = !a.Definition.SumOfBestSplit.IsPrecise;
                editRow.PersonalBestTimeAtSplit = a.PersonalBest.TimeFromRunStart;
                editRow.IsPbTimeUnknown = !a.PersonalBest.IsPrecise;
                editRow.Name = a.Definition.Name;

                return editRow;
            }));

            RunTitle = file.Header;
            PersonalBestDate = file.PersonalBestDate;
        }