using System; using System.Collections.Generic; using System.Linq; using System.IO; using UnityEngine; using UnityEngine.UIElements; public enum NoticeCategory { Initial, Slower, Faster, Fastest, } public class TimingNotice { double Seconds; NoticeCategory Category = NoticeCategory.Initial; public static TimingNotice Compare(double seconds, double? pbSeconds = null, double? lrSeconds = null) => lrSeconds switch { double lr when seconds < lr => new TimingNotice { Seconds = Math.Abs(lr - seconds), Category = NoticeCategory.Fastest }, _ => pbSeconds switch { double pb when seconds < pb => new TimingNotice { Seconds = Math.Abs(pb - seconds), Category = NoticeCategory.Faster }, double pb when seconds >= pb => new TimingNotice { Seconds = Math.Abs(pb - seconds), Category = NoticeCategory.Slower }, _ => new TimingNotice { Seconds = seconds, Category = NoticeCategory.Initial }, } }; public Label ToLabel() { Label l = Category switch { NoticeCategory.Initial => new Label($"{TimeSpan.FromSeconds(Seconds):m\\:ss\\.fff}"), NoticeCategory.Slower => new Label($"+{Seconds:0.000}"), NoticeCategory.Faster => new Label($"-{Seconds:0.000}"), NoticeCategory.Fastest => new Label($"-{Seconds:0.000}"), _ => new Label($"-{Seconds:0.000}"), }; string colourClass = Category switch { NoticeCategory.Initial => "", NoticeCategory.Slower => "yellow", NoticeCategory.Faster => "green", NoticeCategory.Fastest => "purple", _ => "", }; l.AddToClassList(colourClass); return l; } } public enum DiffColour { Green, Purple, White, Yellow, } public class SectorTime { public int Sector; public double Seconds; public override string ToString() => $"{Seconds:0.000}"; } public class Lap { public string Map; public List Sectors; // 0:1:39 public override string ToString() { return $"{TimeSpan.FromSeconds(TotalTime):m\\:ss\\.fff}"; } public double TotalTime => Sectors.Sum(s => s.Seconds); }