Skip to content

Commit e2e2fc2

Browse files
committed
some refactoring of ETCS speed distance DMI
1 parent 5615bcb commit e2e2fc2

File tree

1 file changed

+55
-42
lines changed

1 file changed

+55
-42
lines changed

Source/RunActivity/Viewer3D/RollingStock/SubSystems/ETCS/SpeedDistanceMonitoring.cs

Lines changed: 55 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
using ORTS.Scripting.Api.ETCS;
2626
using System;
2727
using System.Collections.Generic;
28+
using System.Linq;
2829
using static Orts.Viewer3D.RollingStock.Subsystems.ETCS.DriverMachineInterface;
2930

3031
namespace Orts.Viewer3D.RollingStock.Subsystems.ETCS
@@ -104,7 +105,7 @@ public CircularSpeedGauge(int maxSpeed, bool unitMetric, bool unitVisible, bool
104105
SetRange(MaxSpeed);
105106

106107
CurrentSpeed = new TextPrimitive[3];
107-
for (var i = 0; i < CurrentSpeed.Length; i++)
108+
foreach (int i in Enumerable.Range(0, CurrentSpeed.Length))
108109
CurrentSpeed[i] = new TextPrimitive(new Point(CurrentSpeedPosition[i], CurrentSpeedPosition[3]), Color.Black, "0", FontCurrentSpeed);
109110

110111
ReleaseSpeed = new TextPrimitive(ReleaseSpeedPosition, ColorGrey, String.Empty, FontReleaseSpeed);
@@ -114,8 +115,8 @@ public CircularSpeedGauge(int maxSpeed, bool unitMetric, bool unitVisible, bool
114115
NeedleTextureData = new Color[128 * 16];
115116

116117
// Needle texture is according to ETCS specification
117-
for (var v = 0; v < 128; v++)
118-
for (var u = 0; u < 16; u++)
118+
foreach (int v in Enumerable.Range(0, 128))
119+
foreach (int u in Enumerable.Range(0, 16))
119120
NeedleTextureData[u + 16 * v] = (
120121
v <= 15 && 5 < u && u < 9
121122
|| 15 < v && v <= 23 && 5f - (float)(v - 15) / 8f * 3f < u && u < 9f + (float)(v - 15) / 8f * 3f
@@ -290,42 +291,56 @@ private void SetData(ETCSStatus status)
290291
if (currentSpeed > permittedSpeed && currentSpeed > interventionSpeed)
291292
interventionSpeed = Math.Max(currentSpeed - 1, releaseSpeed);
292293

293-
if (status.CurrentMode == Mode.SB || status.CurrentMode == Mode.NL || status.CurrentMode == Mode.PT)
294+
switch (status.CurrentMode)
294295
{
295-
NeedleColor = ColorGrey;
296-
}
297-
else if (status.CurrentMode == Mode.TR)
298-
{
299-
NeedleColor = ColorRed;
300-
}
301-
else if (status.CurrentMode == Mode.SH || status.CurrentMode == Mode.RV)
302-
{
303-
if (currentSpeed <= permittedSpeed) NeedleColor = ColorGrey;
304-
else NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
305-
}
306-
else if (status.CurrentMode == Mode.SR || status.CurrentMode == Mode.UN)
307-
{
308-
if (currentSpeed > permittedSpeed) NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
309-
else if (status.CurrentMonitor == Monitor.TargetSpeed) NeedleColor = currentSpeed < targetSpeed ? ColorGrey : ColorYellow;
310-
else if (targetSpeed < permittedSpeed && currentSpeed >= targetSpeed) NeedleColor = Color.White;
311-
else NeedleColor = ColorGrey;
312-
}
313-
else if (status.CurrentMode == Mode.LS)
314-
{
315-
if (currentSpeed > permittedSpeed) NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
316-
else if (status.CurrentMonitor == Monitor.ReleaseSpeed) NeedleColor = ColorYellow;
317-
else NeedleColor = ColorGrey;
318-
}
319-
else if (status.CurrentMode == Mode.FS || status.CurrentMode == Mode.OS)
320-
{
321-
if (currentSpeed > permittedSpeed) NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
322-
else if (status.CurrentMonitor == Monitor.TargetSpeed || status.CurrentMonitor == Monitor.ReleaseSpeed) NeedleColor = currentSpeed < targetSpeed ? ColorGrey : ColorYellow;
323-
else if (targetSpeed < permittedSpeed && currentSpeed >= targetSpeed) NeedleColor = Color.White;
324-
else NeedleColor = ColorGrey;
325-
}
326-
else if (status.CurrentMode == Mode.SN)
327-
{
328-
// TODO: Allow direct management of colors from STM
296+
case Mode.SB:
297+
case Mode.NL:
298+
case Mode.PT:
299+
NeedleColor = ColorGrey;
300+
break;
301+
case Mode.TR:
302+
NeedleColor = ColorRed;
303+
break;
304+
case Mode.SH:
305+
case Mode.RV:
306+
if (currentSpeed <= permittedSpeed)
307+
NeedleColor = ColorGrey;
308+
else
309+
NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
310+
break;
311+
case Mode.SR:
312+
case Mode.UN:
313+
if (currentSpeed > permittedSpeed)
314+
NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
315+
else if (status.CurrentMonitor == Monitor.TargetSpeed)
316+
NeedleColor = currentSpeed < targetSpeed ? ColorGrey : ColorYellow;
317+
else if (targetSpeed < permittedSpeed && currentSpeed >= targetSpeed)
318+
NeedleColor = Color.White;
319+
else
320+
NeedleColor = ColorGrey;
321+
break;
322+
case Mode.LS:
323+
if (currentSpeed > permittedSpeed)
324+
NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
325+
else if (status.CurrentMonitor == Monitor.ReleaseSpeed)
326+
NeedleColor = ColorYellow;
327+
else
328+
NeedleColor = ColorGrey;
329+
break;
330+
case Mode.FS:
331+
case Mode.OS:
332+
if (currentSpeed > permittedSpeed)
333+
NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange;
334+
else if (status.CurrentMonitor == Monitor.TargetSpeed || status.CurrentMonitor == Monitor.ReleaseSpeed)
335+
NeedleColor = currentSpeed < targetSpeed ? ColorGrey : ColorYellow;
336+
else if (targetSpeed < permittedSpeed && currentSpeed >= targetSpeed)
337+
NeedleColor = Color.White;
338+
else
339+
NeedleColor = ColorGrey;
340+
break;
341+
case Mode.SN:
342+
// TODO: Allow direct management of colors from STM
343+
break;
329344
}
330345
SpeedColor = NeedleColor == ColorRed ? Color.White : Color.Black;
331346
if (status.CurrentMode == Mode.FS)
@@ -462,7 +477,7 @@ public override void PrepareFrame(ETCSStatus status)
462477
}
463478
if (tti.HasValue)
464479
{
465-
for (int n = 1; n <= 10; n++)
480+
foreach (int n in Enumerable.Range(1, 10))
466481
{
467482
if (T_dispTTI * (10 - n) / 10f <= tti && tti < T_dispTTI * (10 - (n - 1)) / 10f)
468483
{
@@ -504,10 +519,8 @@ public override void Draw(SpriteBatch spriteBatch, Point position)
504519
DrawRectangle(spriteBatch, position, DistanceBar.X, DistanceBar.Y + 30, DistanceBar.Z, DistanceBar.W, ColorGrey);
505520

506521
// Distance speed lines
507-
for (int i = 0; i < 11; i++)
508-
{
522+
foreach (int i in Enumerable.Range(0, 11))
509523
DrawIntRectangle(spriteBatch, position, DistanceLinePositionsX[i], DistanceLinePositionsY[i] + 30, 25 - DistanceLinePositionsX[i], (int)Math.Max(1, 1 / Scale), ColorGrey);
510-
}
511524
}
512525
if (DisplayDistanceText)
513526
{

0 commit comments

Comments
 (0)