Skip to content

Commit 7724f2b

Browse files
committed
Save and restore ClearMovingTable action (for timetables)
1 parent 3ffb9bc commit 7724f2b

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5298,7 +5298,7 @@ public override void PerformActions(List<DistanceTravelledItem> nowActions)
52985298
}
52995299
else if (thisAction is ClearMovingTableAction)
53005300
{
5301-
ClearMovingTable();
5301+
ClearMovingTable(thisAction);
53025302
}
53035303
else if (thisAction is AIActionItem && !(thisAction is AuxActionItem))
53045304
{

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,10 @@ public Train(Simulator simulator, BinaryReader inf)
903903
requiredActions.InsertAction(auxAction);
904904
Trace.TraceWarning("DistanceTravelledItem type 4 restored as AuxActionItem");
905905
break;
906+
case 5:
907+
ClearMovingTableAction cmtAction = new ClearMovingTableAction(inf);
908+
requiredActions.InsertAction(cmtAction);
909+
break;
906910
default:
907911
Trace.TraceWarning("Unknown type of DistanceTravelledItem (type {0}",
908912
actionType.ToString());
@@ -16235,7 +16239,7 @@ public virtual bool CheckPoolAccess(int sectionIndex)
1623516239
/// Clear moving table after moving table actions
1623616240
/// Dummy method to allow virtualization by child classes
1623716241
/// </summary>
16238-
public virtual void ClearMovingTable()
16242+
public virtual void ClearMovingTable(DistanceTravelledItem action)
1623916243
{
1624016244
}
1624116245

@@ -20347,6 +20351,13 @@ public void Save(BinaryWriter outf)
2034720351
AuxActionItem thisAction = this as AuxActionItem;
2034820352
thisAction.SaveItem(outf);
2034920353
}
20354+
else if (this is ClearMovingTableAction)
20355+
{
20356+
outf.Write(5);
20357+
outf.Write(RequiredDistance);
20358+
ClearMovingTableAction thisAction = this as ClearMovingTableAction;
20359+
thisAction.SaveItem(outf);
20360+
}
2035020361
else
2035120362
{
2035220363
outf.Write(-1);

Source/Orts.Simulation/Simulation/Timetables/TTTrain.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6450,13 +6450,20 @@ public override void UpdateSectionState_Additional(int sectionIndex)
64506450
/// Clear moving table after moving off table
64516451
/// </summary>
64526452

6453-
public override void ClearMovingTable()
6453+
public override void ClearMovingTable(DistanceTravelledItem action)
64546454
{
64556455
// only if valid reference
64566456
if (ActiveTurntable != null)
64576457
{
64586458
ActiveTurntable.RemoveTrainFromTurntable();
64596459
ActiveTurntable = null;
6460+
6461+
// set action to restore original speed
6462+
ClearMovingTableAction clearAction = action as ClearMovingTableAction;
6463+
6464+
float reqDistance = DistanceTravelledM + 1;
6465+
ActivateSpeedLimit speedLimit = new ActivateSpeedLimit((DistanceTravelledM + 1), clearAction.OriginalMaxTrainSpeedMpS, clearAction.OriginalMaxTrainSpeedMpS, clearAction.OriginalMaxTrainSpeedMpS);
6466+
requiredActions.InsertAction(speedLimit);
64606467
}
64616468
}
64626469

@@ -9212,7 +9219,7 @@ public override void ProcessEndOfPathReached(ref bool[] returnValue, int present
92129219
List<DistanceTravelledItem> reqActions = requiredActions.GetActions(0.0f, typeof(ClearMovingTableAction));
92139220
foreach (DistanceTravelledItem thisAction in reqActions)
92149221
{
9215-
ClearMovingTable();
9222+
ClearMovingTable(thisAction);
92169223
}
92179224

92189225
// check if train is to form new train

0 commit comments

Comments
 (0)