Skip to content

Commit 87ba54c

Browse files
authored
Merge pull request #777 from Roeterdink/SaveRestoreActionClearMovingTable
Save and restore ClearMovingTable action (for timetables)
2 parents e005953 + 7724f2b commit 87ba54c

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
@@ -904,6 +904,10 @@ public Train(Simulator simulator, BinaryReader inf)
904904
requiredActions.InsertAction(auxAction);
905905
Trace.TraceWarning("DistanceTravelledItem type 4 restored as AuxActionItem");
906906
break;
907+
case 5:
908+
ClearMovingTableAction cmtAction = new ClearMovingTableAction(inf);
909+
requiredActions.InsertAction(cmtAction);
910+
break;
907911
default:
908912
Trace.TraceWarning("Unknown type of DistanceTravelledItem (type {0}",
909913
actionType.ToString());
@@ -16236,7 +16240,7 @@ public virtual bool CheckPoolAccess(int sectionIndex)
1623616240
/// Clear moving table after moving table actions
1623716241
/// Dummy method to allow virtualization by child classes
1623816242
/// </summary>
16239-
public virtual void ClearMovingTable()
16243+
public virtual void ClearMovingTable(DistanceTravelledItem action)
1624016244
{
1624116245
}
1624216246

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

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

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

6521-
public override void ClearMovingTable()
6521+
public override void ClearMovingTable(DistanceTravelledItem action)
65226522
{
65236523
// only if valid reference
65246524
if (ActiveTurntable != null)
65256525
{
65266526
ActiveTurntable.RemoveTrainFromTurntable();
65276527
ActiveTurntable = null;
6528+
6529+
// set action to restore original speed
6530+
ClearMovingTableAction clearAction = action as ClearMovingTableAction;
6531+
6532+
float reqDistance = DistanceTravelledM + 1;
6533+
ActivateSpeedLimit speedLimit = new ActivateSpeedLimit((DistanceTravelledM + 1), clearAction.OriginalMaxTrainSpeedMpS, clearAction.OriginalMaxTrainSpeedMpS, clearAction.OriginalMaxTrainSpeedMpS);
6534+
requiredActions.InsertAction(speedLimit);
65286535
}
65296536
}
65306537

@@ -9246,7 +9253,7 @@ public override void ProcessEndOfPathReached(ref bool[] returnValue, int present
92469253
List<DistanceTravelledItem> reqActions = requiredActions.GetActions(0.0f, typeof(ClearMovingTableAction));
92479254
foreach (DistanceTravelledItem thisAction in reqActions)
92489255
{
9249-
ClearMovingTable();
9256+
ClearMovingTable(thisAction);
92509257
}
92519258

92529259
// check if train is to form new train

0 commit comments

Comments
 (0)