Files
spacerace/Assets/Src/Laps.cs
T
2023-08-31 16:55:31 +10:00

75 lines
2.2 KiB
C#

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 = seconds, Category = NoticeCategory.Fastest },
_ => pbSeconds switch {
double pb when seconds < pb => new TimingNotice { Seconds = seconds, Category = NoticeCategory.Faster },
double pb when seconds > pb => new TimingNotice { Seconds = 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<SectorTime> Sectors;
// 0:1:39
public override string ToString() {
return $"{TimeSpan.FromSeconds(TotalTime):m\\:ss\\.fff}";
}
public double TotalTime => Sectors.Sum(s => s.Seconds);
}