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; }
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; }
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; }