pog
This commit is contained in:
1 parent
d97efd0e88
commit
c61fd84f90
4 files changed
+57
-50
No files matched your search
+41
-19
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.IO;
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
public enum NoticeCategory {
|
||||
Initial,
|
||||
@@ -12,27 +13,42 @@ public enum NoticeCategory {
|
||||
Fastest,
|
||||
}
|
||||
|
||||
// public record TimingNotice(
|
||||
// double Seconds,
|
||||
// NoticeCategory Category,
|
||||
// ) {
|
||||
// Label ToLabel() {
|
||||
// Label l = Category switch {
|
||||
// DiffType.Slower => new Label($"+{diff:0.000}"),
|
||||
// DiffType.Faster => new Label($"-{diff:0.000}"),
|
||||
// DiffType.Fastest => new Label($"-{diff:0.000}"),
|
||||
// };
|
||||
public class TimingNotice {
|
||||
public double Seconds;
|
||||
NoticeCategory Category = NoticeCategory.Initial;
|
||||
|
||||
// string colourClass = Category Switch {
|
||||
// DiffType.Slower => "yellow",
|
||||
// DiffType.Faster => "green",
|
||||
// DiffType.Fastest => "purple",
|
||||
// };
|
||||
public TimingNotice Compare(double comparison) {
|
||||
double s = Math.Abs(comparison - Seconds);
|
||||
NoticeCategory cat = comparison switch {
|
||||
double c when Seconds < c => NoticeCategory.Faster,
|
||||
_ => NoticeCategory.Slower,
|
||||
};
|
||||
|
||||
// l.AddToClassList(colourClass);
|
||||
// return l;
|
||||
// }
|
||||
// }
|
||||
return new TimingNotice {
|
||||
Seconds = s,
|
||||
Category = cat,
|
||||
};
|
||||
}
|
||||
|
||||
public Label ToLabel() {
|
||||
Label l = Category switch {
|
||||
NoticeCategory.Slower => new Label($"+{Seconds:0.000}"),
|
||||
NoticeCategory.Faster => new Label($"-{Seconds:0.000}"),
|
||||
NoticeCategory.Fastest => new Label($"-{Seconds:0.000}"),
|
||||
NoticeCategory.Initial => new Label($"{TimeSpan.FromSeconds(Seconds):m\\:ss\\.fff}"),
|
||||
};
|
||||
|
||||
string colourClass = Category switch {
|
||||
NoticeCategory.Slower => "yellow",
|
||||
NoticeCategory.Faster => "green",
|
||||
NoticeCategory.Fastest => "purple",
|
||||
NoticeCategory.Initial => "",
|
||||
};
|
||||
|
||||
l.AddToClassList(colourClass);
|
||||
return l;
|
||||
}
|
||||
}
|
||||
|
||||
public enum DiffColour {
|
||||
Green,
|
||||
@@ -127,3 +143,9 @@ static class LapStorageService {
|
||||
.MinBy(l => l.TotalTime);
|
||||
}
|
||||
}
|
||||
|
||||
// Add this magic code, you will be able to use record and init.
|
||||
// I only tested in editor, not sure whether it would work on other platforms.
|
||||
namespace System.Runtime.CompilerServices {
|
||||
class IsExternalInit {}
|
||||
}
|
||||
@@ -129,17 +129,17 @@ public class Timing: MonoBehaviour {
|
||||
return LapStorageService.PB(mapName);
|
||||
}
|
||||
|
||||
public double PBSectorDiff(SectorTime s) => PB() switch {
|
||||
public TimingNotice PBSectorDiff(SectorTime s) => PB() switch {
|
||||
Lap pb => pb.Sectors.SingleOrDefault(fls => fls.Sector == s.Sector) switch {
|
||||
SectorTime fastestSector => s.Seconds - fastestSector.Seconds,
|
||||
null => -1d,
|
||||
SectorTime fastestSector => (new TimingNotice { Seconds = s.Seconds }).Compare(fastestSector.Seconds),
|
||||
null => new TimingNotice { Seconds = s.Seconds }, // this one should never happen
|
||||
},
|
||||
null => -1d,
|
||||
null => new TimingNotice { Seconds = s.Seconds }, // there is no pb
|
||||
};
|
||||
|
||||
public double PBLapDiff(Lap lap) => PB() switch {
|
||||
Lap pb => lap.TotalTime - pb.TotalTime,
|
||||
null => -1d,
|
||||
public TimingNotice PBLapDiff(Lap lap) => PB() switch {
|
||||
Lap pb => (new TimingNotice { Seconds = lap.TotalTime }).Compare(pb.TotalTime),
|
||||
null => new TimingNotice { Seconds = lap.TotalTime },
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -7,7 +7,9 @@
|
||||
<ui:VisualElement name="notice" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0);">
|
||||
<ui:VisualElement name="noticeLap" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); flex-direction: row; justify-content: space-between; align-items: auto; width: auto; align-self: stretch; flex-shrink: 0;">
|
||||
<ui:Label tabindex="-1" text="1:24.248" display-tooltip-when-elided="true" name="noticeTime" style="align-self: flex-end; align-items: auto;" />
|
||||
<ui:Label tabindex="-1" text="-0.999" display-tooltip-when-elided="true" name="noticeDiff" />
|
||||
<ui:VisualElement name="noticeDiff" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); -unity-text-align: upper-right;">
|
||||
<ui:Label tabindex="-1" text="-0.999" display-tooltip-when-elided="true" />
|
||||
</ui:VisualElement>
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement name="noticeSectors" class="sectors" style="flex-grow: 0; background-color: rgba(0, 0, 0, 0); flex-direction: row; -unity-text-align: upper-left;">
|
||||
<ui:Label tabindex="-1" text="+2.1" display-tooltip-when-elided="true" class="yellow" />
|
||||
|
||||
@@ -19,8 +19,8 @@ public class TimingUI : MonoBehaviour {
|
||||
|
||||
VisualElement notice;
|
||||
VisualElement noticeSectors;
|
||||
VisualElement noticeDiff;
|
||||
Label noticeTime;
|
||||
Label noticeDiff;
|
||||
|
||||
void OnEnable() {
|
||||
Init();
|
||||
@@ -37,7 +37,7 @@ public class TimingUI : MonoBehaviour {
|
||||
timerSectors = uiDocument.rootVisualElement.Q<VisualElement>("timerSectors");
|
||||
|
||||
noticeTime = uiDocument.rootVisualElement.Q<Label>("noticeTime");
|
||||
noticeDiff = uiDocument.rootVisualElement.Q<Label>("noticeDiff");
|
||||
noticeDiff = uiDocument.rootVisualElement.Q<VisualElement>("noticeDiff");
|
||||
|
||||
timerTime = uiDocument.rootVisualElement.Q<Label>("timerTime");
|
||||
timerPb = uiDocument.rootVisualElement.Q<Label>("timerPb");
|
||||
@@ -73,7 +73,7 @@ public class TimingUI : MonoBehaviour {
|
||||
foreach (Sector sector in timing.sectors) {
|
||||
Label l = timing.sectorTimes
|
||||
.Where(s => s.Sector == sector.sector)
|
||||
.Select(s => SectorLabel(s))
|
||||
.Select(s => timing.PBSectorDiff(s).ToLabel())
|
||||
.DefaultIfEmpty(new Label("-"))
|
||||
.Single();
|
||||
|
||||
@@ -90,11 +90,12 @@ public class TimingUI : MonoBehaviour {
|
||||
|
||||
// should show the diff to the PB
|
||||
// or - if there is only 1 lap
|
||||
noticeDiff.text = lap.ToString();
|
||||
noticeDiff.Clear();
|
||||
noticeDiff.Add(timing.PBLapDiff(lap).ToLabel());
|
||||
|
||||
noticeSectors.Clear();
|
||||
foreach (SectorTime sector in lap.Sectors) {
|
||||
Label l = SectorLabel(sector);
|
||||
Label l = timing.PBSectorDiff(sector).ToLabel();
|
||||
noticeSectors.Add(l);
|
||||
}
|
||||
}
|
||||
@@ -103,22 +104,4 @@ public class TimingUI : MonoBehaviour {
|
||||
timer.RemoveFromClassList("hidden");
|
||||
notice.AddToClassList("hidden");
|
||||
}
|
||||
|
||||
Label SectorLabel(SectorTime s) {
|
||||
double diff = timing.PBSectorDiff(s);
|
||||
string sign = diff switch {
|
||||
< 0 => "",
|
||||
_ => "+",
|
||||
};
|
||||
|
||||
DiffColour colour = diff switch {
|
||||
< 0 => DiffColour.Green,
|
||||
_ => DiffColour.Yellow,
|
||||
};
|
||||
|
||||
Label l = new Label($"{sign}{diff:0.000}");
|
||||
string colourClass = colour.ToString().ToLowerInvariant();
|
||||
l.AddToClassList(colourClass);
|
||||
return l;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user