Skip to content

Commit 815bc18

Browse files
committed
NoSpeedUpdate signal option
1 parent ebafd5d commit 815bc18

File tree

6 files changed

+24
-4
lines changed

6 files changed

+24
-4
lines changed

Source/Orts.Formats.Msts/SignalConfigurationFile.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,8 @@ public class SignalAspect
10521052
public float SpeedMpS { get; private set; }
10531053
/// <summary>Set to true if SignalFlags ASAP option specified, meaning train needs to go to speed As Soon As Possible</summary>
10541054
public bool Asap { get; private set; }
1055+
/// <summary>Set to true if SignalFlags NoSpeedUpdate option specified, meaning speed limits are not in any way affected by the state of this signal>
1056+
public bool NoSpeedUpdate { get; private set; }
10551057
/// <summary>Set to true if SignalFlags RESET option specified (ORTS only)</summary>
10561058
public bool Reset;
10571059
/// <summary>Set to true if no speed reduction is required for RESTRICTED or STOP_AND_PROCEED aspects (ORTS only) </summary>
@@ -1068,6 +1070,7 @@ public SignalAspect(MstsSignalAspect reqAspect, string reqName)
10681070
DrawStateName = String.Copy(reqName);
10691071
SpeedMpS = -1;
10701072
Asap = false;
1073+
NoSpeedUpdate = false;
10711074
NoSpeedReduction = false;
10721075
}
10731076

@@ -1099,6 +1102,7 @@ public SignalAspect(STFReader stf)
10991102
switch (stf.ReadString().ToLower())
11001103
{
11011104
case "asap": Asap = true; break;
1105+
case "nospeedupdate": NoSpeedUpdate = true; break;
11021106
case "or_speedreset": Reset = true; break;
11031107
case "or_nospeedreduction": NoSpeedReduction = true; break;
11041108
default: stf.StepBackOneItem(); STFException.TraceInformation(stf, "Skipped unknown DrawLight flag " + stf.ReadString()); break;

Source/Orts.Simulation/Simulation/AIs/AITrain.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7007,6 +7007,7 @@ public static ObjectItemInfo RestoreActiveItem(BinaryReader inf, Signals signalR
70077007
thisInfo.speed_passenger = inf.ReadSingle();
70087008
thisInfo.speed_freight = inf.ReadSingle();
70097009
thisInfo.speed_flag = inf.ReadInt32();
7010+
thisInfo.no_speedUpdate = inf.ReadInt32();
70107011
thisInfo.actual_speed = inf.ReadSingle();
70117012

70127013
thisInfo.processed = inf.ReadBoolean();
@@ -7059,6 +7060,7 @@ public static void SaveActiveItem(BinaryWriter outf, ObjectItemInfo ActiveItem)
70597060
outf.Write(ActiveItem.speed_passenger);
70607061
outf.Write(ActiveItem.speed_freight);
70617062
outf.Write(ActiveItem.speed_flag);
7063+
outf.Write(ActiveItem.no_speedUpdate);
70627064
outf.Write(ActiveItem.actual_speed);
70637065

70647066
outf.Write(ActiveItem.processed);

Source/Orts.Simulation/Simulation/Physics/Train.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3513,6 +3513,7 @@ public void UpdateSignalState(int backward)
35133513
firstObject.speed_passenger = thisSpeed?.speed_pass ?? -1;
35143514
firstObject.speed_freight = thisSpeed?.speed_freight ?? -1;
35153515
firstObject.speed_flag = thisSpeed?.speed_flag ?? 0;
3516+
firstObject.no_speedUpdate = thisSpeed?.no_speedUpdate ?? 0;
35163517
firstObject.speed_reset = thisSpeed?.speed_reset ?? 0;
35173518
break;
35183519

@@ -3523,6 +3524,7 @@ public void UpdateSignalState(int backward)
35233524
firstObject.speed_freight = thisSpeed?.speed_freight ?? -1;
35243525
firstObject.speed_flag = thisSpeed?.speed_flag ?? 0;
35253526
firstObject.speed_reset = thisSpeed?.speed_reset ?? 0;
3527+
firstObject.no_speedUpdate = thisSpeed?.no_speedUpdate ?? 0;
35263528
firstObject.speed_noSpeedReductionOrIsTempSpeedReduction = thisSpeed?.speed_noSpeedReductionOrIsTempSpeedReduction ?? 0;
35273529
firstObject.speed_isWarning = thisSpeed?.speed_isWarning ?? false;
35283530
break;
@@ -3552,13 +3554,15 @@ public void UpdateSignalState(int backward)
35523554
nextObject.speed_passenger = -1;
35533555
nextObject.speed_freight = -1;
35543556
nextObject.speed_flag = 0;
3557+
nextObject.no_speedUpdate = 0;
35553558
nextObject.speed_reset = 0;
35563559
}
35573560
else
35583561
{
35593562
nextObject.speed_passenger = thisSpeed?.speed_pass ?? -1;
35603563
nextObject.speed_freight = thisSpeed?.speed_freight ?? -1;
35613564
nextObject.speed_flag = thisSpeed?.speed_flag ?? 0;
3565+
nextObject.no_speedUpdate = thisSpeed?.no_speedUpdate ?? 0;
35623566
nextObject.speed_reset = thisSpeed?.speed_reset ?? 0;
35633567
}
35643568
break;
@@ -3569,6 +3573,7 @@ public void UpdateSignalState(int backward)
35693573
nextObject.speed_passenger = thisSpeed?.speed_pass ?? -1;
35703574
nextObject.speed_freight = thisSpeed?.speed_freight ?? -1;
35713575
nextObject.speed_flag = thisSpeed?.speed_flag ?? 0;
3576+
nextObject.no_speedUpdate = thisSpeed?.no_speedUpdate ?? 0;
35723577
nextObject.speed_reset = thisSpeed?.speed_reset ?? 0;
35733578
nextObject.speed_noSpeedReductionOrIsTempSpeedReduction = thisSpeed?.speed_noSpeedReductionOrIsTempSpeedReduction ?? 0;
35743579
nextObject.speed_isWarning = thisSpeed?.speed_isWarning ?? false;
@@ -3644,6 +3649,7 @@ public void UpdateSignalState(int backward)
36443649
nextObject.speed_passenger = thisSpeed?.speed_pass ?? -1;
36453650
nextObject.speed_freight = thisSpeed?.speed_freight ?? -1;
36463651
nextObject.speed_flag = thisSpeed?.speed_flag ?? 0;
3652+
nextObject.no_speedUpdate = thisSpeed?.no_speedUpdate ?? 0;
36473653
nextObject.speed_reset = thisSpeed?.speed_reset ?? 0;
36483654
break;
36493655

@@ -3653,6 +3659,7 @@ public void UpdateSignalState(int backward)
36533659
nextObject.speed_passenger = thisSpeed?.speed_pass ?? -1;
36543660
nextObject.speed_freight = thisSpeed?.speed_freight ?? -1;
36553661
nextObject.speed_flag = thisSpeed?.speed_flag ?? 0;
3662+
nextObject.no_speedUpdate = thisSpeed?.no_speedUpdate ?? 0;
36563663
nextObject.speed_reset = thisSpeed?.speed_reset ?? 0;
36573664
nextObject.speed_noSpeedReductionOrIsTempSpeedReduction = thisSpeed?.speed_noSpeedReductionOrIsTempSpeedReduction ?? 0;
36583665
nextObject.speed_isWarning = thisSpeed?.speed_isWarning ?? false;
@@ -3820,7 +3827,7 @@ public void UpdateSpeedInfo()
38203827
#endif
38213828
}
38223829
}
3823-
else
3830+
else if (thisObject.no_speedUpdate == 1)
38243831
{
38253832
validSpeedSignalMpS = TrainMaxSpeedMpS;
38263833
float newSpeedMpS = Math.Min(validSpeedSignalMpS, Math.Min(validSpeedLimitMpS, validTempSpeedLimitMpS));

Source/Orts.Simulation/Simulation/Signalling/ObjectItemInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public enum ObjectItemFindState
5757
public int speed_reset;
5858
// for signals: if = 1 no speed reduction; for speedposts: if = 0 standard; = 1 start of temp speedreduction post; = 2 end of temp speed reduction post
5959
public int speed_noSpeedReductionOrIsTempSpeedReduction;
60+
public int no_speedUpdate;
6061
public bool speed_isWarning;
6162
public float actual_speed; // set active by TRAIN
6263

@@ -78,6 +79,7 @@ public ObjectItemInfo(SignalObject thisObject, float distance)
7879
speed_passenger = -1; // set active by TRAIN
7980
speed_freight = -1; // set active by TRAIN
8081
speed_flag = 0; // set active by TRAIN
82+
no_speedUpdate = 0; // set active by TRAIN
8183
speed_reset = 0; // set active by TRAIN
8284
speed_noSpeedReductionOrIsTempSpeedReduction = 0;
8385
}
@@ -89,6 +91,7 @@ public ObjectItemInfo(SignalObject thisObject, float distance)
8991
speed_passenger = speed_info.speed_pass;
9092
speed_freight = speed_info.speed_freight;
9193
speed_flag = speed_info.speed_flag;
94+
no_speedUpdate = speed_info.no_speedUpdate;
9295
speed_reset = speed_info.speed_reset;
9396
speed_noSpeedReductionOrIsTempSpeedReduction = speed_info.speed_noSpeedReductionOrIsTempSpeedReduction;
9497
speed_isWarning = speed_info.speed_isWarning;

Source/Orts.Simulation/Simulation/Signalling/ObjectSpeedInfo.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,18 @@ public class ObjectSpeedInfo
2222
public float speed_pass;
2323
public float speed_freight;
2424
public int speed_flag;
25+
public int no_speedUpdate;
2526
public int speed_reset;
2627
public int speed_noSpeedReductionOrIsTempSpeedReduction;
2728
public bool speed_isWarning;
2829

29-
public ObjectSpeedInfo(float pass, float freight, bool asap, bool reset, int nospeedreductionOristempspeedreduction, bool isWarning)
30+
public ObjectSpeedInfo(float pass, float freight, bool asap, bool reset, int nospeedreductionOristempspeedreduction, bool isWarning, bool nospeedupdate = false)
3031
{
3132
speed_pass = pass;
3233
speed_freight = freight;
3334
speed_flag = asap ? 1 : 0;
3435
speed_reset = reset ? 1 : 0;
36+
no_speedUpdate = nospeedupdate ? 1 : 0;
3537
speed_noSpeedReductionOrIsTempSpeedReduction = nospeedreductionOristempspeedreduction;
3638
speed_isWarning = isWarning;
3739
}

Source/Orts.Simulation/Simulation/Signalling/SignalHead.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ public SignalHead(SignalObject sigObject, int trItem, int TDBRef, SpeedPostItem
9999

100100
float passSpeed = speedItem.IsPassenger ? speedMpS : -1;
101101
float freightSpeed = speedItem.IsFreight ? speedMpS : -1;
102-
ObjectSpeedInfo speedinfo = new ObjectSpeedInfo(passSpeed, freightSpeed, false, false, speedItem is TempSpeedPostItem ? (speedMpS == 999f ? 2 : 1) : 0, speedItem.IsWarning);
102+
ObjectSpeedInfo speedinfo = new ObjectSpeedInfo(passSpeed, freightSpeed, false, false, speedItem is TempSpeedPostItem ? (speedMpS == 999f ? 2 : 1) : 0,
103+
speedItem.IsWarning);
103104
speed_info[(int)state] = speedinfo;
104105
}
105106

@@ -128,7 +129,8 @@ public void SetSignalType(TrItem[] TrItems, SignalConfigurationFile sigCFG)
128129
foreach (SignalAspect thisAspect in signalType.Aspects)
129130
{
130131
int arrindex = (int)thisAspect.Aspect;
131-
speed_info[arrindex] = new ObjectSpeedInfo(thisAspect.SpeedMpS, thisAspect.SpeedMpS, thisAspect.Asap, thisAspect.Reset, thisAspect.NoSpeedReduction ? 1 : 0, false);
132+
speed_info[arrindex] = new ObjectSpeedInfo(thisAspect.SpeedMpS, thisAspect.SpeedMpS, thisAspect.Asap, thisAspect.Reset,
133+
thisAspect.NoSpeedReduction ? 1 : 0, false, thisAspect.NoSpeedUpdate);
132134
}
133135

134136
// set normal subtype

0 commit comments

Comments
 (0)