mirror of
https://github.com/MaSzyna-EU07/StarterNG.git
synced 2026-11-12 09:04:09 +01:00
Black box: the queries of the user's train worked out once a read, lights as the driver checks them
- The stations, the signals passed, the horn points, the couplings, the consists and the timetable progress of the user's train are kept until a read adds something; the views asked for them every frame, which on a long session with many trains took the window down. A read that adds nothing no longer counts as a change. - The lights are checked against the lamps the vehicles at the ends have (written by the simulator from now on), as its driver checks them: Pc 1 without the upper headlight, with the auxiliary lamps, Pc 5 with the rear-end signals. Only while the user drives: the autopilot's lights are its own. - A train off the platform counts at both ends: its head past the stop point as well as its tail before the platform's end. - A recording without the couplings keeps the timetable for any vehicle of the user. - A signal passed at danger is ringed on the map only once it was. - In the tapes window a black box opens on a click or Enter, not when the arrow keys go over it. - The viewer's screenshot of a window not laid out saves nothing and still closes.
This commit is contained in:
@@ -124,15 +124,16 @@ public sealed record DrivingSummary(
|
||||
else if (sample.Driving == Driver.Human && sample.AbsSpeedKmh > Rounding)
|
||||
driven += step;
|
||||
|
||||
// the light signals at both ends, while the train moves
|
||||
if (sample.AbsSpeedKmh > 1 && HeadCodes.Right(sample) is { } right)
|
||||
// the light signals at both ends, while the user drives the train and it moves: the autopilot's are its own
|
||||
if (sample.Driving == Driver.Human && sample.AbsSpeedKmh > 1 &&
|
||||
HeadCodes.HeadRight(sample) is { } headRight && HeadCodes.TailRight(sample) is { } tailRight)
|
||||
{
|
||||
lightsJudged += step;
|
||||
if (!right)
|
||||
if (!headRight || !tailRight)
|
||||
{
|
||||
lightsWrong += step;
|
||||
var fault = new LightsFault(before.Time, sample.Time, HeadCodes.Of(sample.LightsHead), HeadCodes.RequiredHead(sample)!.Value,
|
||||
HeadCodes.Of(sample.LightsTail), HeadCodes.RequiredTail(sample)!.Value);
|
||||
!headRight, HeadCodes.Of(sample.LightsTail), HeadCodes.RequiredTail(sample)!.Value, !tailRight);
|
||||
if (faults.Count > 0 && faults[^1].SameAs(fault) && fault.Start - faults[^1].End < 2)
|
||||
faults[^1] = faults[^1] with { End = sample.Time };
|
||||
else
|
||||
@@ -186,11 +187,10 @@ public sealed record DrivingSummary(
|
||||
}
|
||||
|
||||
/// <summary>A stretch the user's train moved with other light signals than it was to show, at its head and its tail.</summary>
|
||||
public sealed record LightsFault(double Start, double End, HeadCode Head, HeadCode HeadRequired, HeadCode Tail, HeadCode TailRequired)
|
||||
public sealed record LightsFault(double Start, double End, HeadCode Head, HeadCode HeadRequired, bool HeadWrong,
|
||||
HeadCode Tail, HeadCode TailRequired, bool TailWrong)
|
||||
{
|
||||
public bool HeadWrong => Head != HeadRequired;
|
||||
public bool TailWrong => Tail != TailRequired;
|
||||
|
||||
public bool SameAs(LightsFault other) =>
|
||||
Head == other.Head && HeadRequired == other.HeadRequired && Tail == other.Tail && TailRequired == other.TailRequired;
|
||||
Head == other.Head && HeadRequired == other.HeadRequired && HeadWrong == other.HeadWrong &&
|
||||
Tail == other.Tail && TailRequired == other.TailRequired && TailWrong == other.TailWrong;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user