2525using ORTS . Scripting . Api . ETCS ;
2626using System ;
2727using System . Collections . Generic ;
28+ using System . Linq ;
2829using static Orts . Viewer3D . RollingStock . Subsystems . ETCS . DriverMachineInterface ;
2930
3031namespace 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