Esempio n. 1
0
        public Split(SplitTimeSpan splitTimeSpan, Run owner)
        {
            if (owner == null) throw new ArgumentNullException();

            Owner = owner;
            SplitInfo = splitTimeSpan;
        }
        public SplitInfo[] ConvertToSplitInfo()
        {
            var times = Splits.ToArray();

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

                SplitTimeSpan pbSplit;

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

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

            return splits;
        }
Esempio n. 3
0
        public Run(SplitTimeSpan[] splits)
        {
            Splits = splits.Select(sts => new Split(sts, this)).ToArray();

            //By setting current split to the length of the amount of splits, this run is marked as completed
            //The reason this constructor starts runs as completed immediately is that these runs are supposed to be
            //runs to compare to such as the personal best or the sum-of-best run
            CurrentSplit = Splits.Length;
            IsStarted = true;
        }
Esempio n. 4
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;
        }