Skip to content

Commit 5c98e2f

Browse files
committed
Fix for crash
1 parent 939b2b2 commit 5c98e2f

File tree

4 files changed

+30
-19
lines changed

4 files changed

+30
-19
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8173,7 +8173,7 @@ public TCSubpathRoute CheckManualPath(int direction, TCPosition requiredPosition
81738173
bool hasEndSignal = false; // ends with cleared signal
81748174
int sectionWithSignalIndex = 0;
81758175

8176-
SignalObject previousSignal = new SignalObject(signalRef);
8176+
SignalObject previousSignal = new SignalObject(signalRef, SignalObjectType.Signal);
81778177

81788178
for (int iindex = 0; iindex < newRoute.Count && !endWithSignal; iindex++)
81798179
{

Source/Orts.Simulation/Simulation/Signalling/SignalObject.cs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,7 @@ public enum Permission
9090
public int thisRef; // This signal's reference.
9191
public int direction; // Direction facing on track
9292

93-
public SignalObjectType Type
94-
{
95-
get
96-
{
97-
if (SignalHeads.Exists(x => x.Function.MstsFunction != MstsSignalFunction.SPEED))
98-
{
99-
return SignalObjectType.Signal;
100-
}
101-
else
102-
{
103-
return SpeedPostWorldObject != null ? SignalObjectType.SpeedPost : SignalObjectType.SpeedSignal;
104-
}
105-
}
106-
}
93+
public SignalObjectType Type { get; protected set; }
10794
public List<SignalHead> SignalHeads = new List<SignalHead>();
10895

10996
public int SignalNumClearAhead_MSTS = -2; // Overall maximum SignalNumClearAhead over all heads (MSTS calculation)
@@ -203,10 +190,12 @@ public int revDir // Needed because signal faces train!
203190
/// <summary>
204191
/// Constructor for empty item
205192
/// </summary>
206-
public SignalObject(Signals signalReference)
193+
public SignalObject(Signals signalReference, SignalObjectType type)
207194
{
208195
signalRef = signalReference;
209196

197+
Type = type;
198+
210199
LockedTrains = new List<KeyValuePair<int, int>>();
211200

212201
foreach (SignalFunction function in signalRef.SignalFunctions.Values)
@@ -222,7 +211,18 @@ public SignalObject(Signals signalReference)
222211
public SignalObject(SignalObject copy)
223212
{
224213
signalRef = copy.signalRef;
225-
WorldObject = new SignalWorldObject(copy.WorldObject);
214+
Type = copy.Type;
215+
switch (Type)
216+
{
217+
case SignalObjectType.Signal:
218+
case SignalObjectType.SpeedSignal:
219+
WorldObject = new SignalWorldObject(copy.WorldObject);
220+
break;
221+
222+
case SignalObjectType.SpeedPost:
223+
SpeedPostWorldObject = new SpeedPostWorldObject(copy.SpeedPostWorldObject);
224+
break;
225+
}
226226

227227
trackNode = copy.trackNode;
228228
LockedTrains = new List<KeyValuePair<int, int>>();
@@ -1881,6 +1881,12 @@ public void SetSignalType(SignalConfigurationFile sigCFG)
18811881
{
18821882
sigHead.SetSignalType(trItems, sigCFG);
18831883
}
1884+
1885+
if (Type == SignalObjectType.Signal
1886+
&& !SignalHeads.Exists(x => x.Function.MstsFunction != MstsSignalFunction.SPEED))
1887+
{
1888+
Type = SignalObjectType.SpeedSignal;
1889+
}
18841890
}
18851891

18861892
public void Initialize()

Source/Orts.Simulation/Simulation/Signalling/Signals.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,7 @@ private int AddSignal(int trackNode, int nodeIndx, SignalItem sigItem, int TDBRe
10101010
{
10111011
validSignal = true;
10121012

1013-
SignalObjects[foundSignals] = new SignalObject(this);
1013+
SignalObjects[foundSignals] = new SignalObject(this, SignalObjectType.Signal);
10141014
SignalObjects[foundSignals].direction = (int)sigItem.Direction;
10151015
SignalObjects[foundSignals].trackNode = trackNode;
10161016
SignalObjects[foundSignals].trRefIndex = nodeIndx;
@@ -1056,7 +1056,7 @@ private int AddSignal(int trackNode, int nodeIndx, SignalItem sigItem, int TDBRe
10561056
/// </summary>
10571057
private int AddSpeed(int trackNode, int nodeIndx, SpeedPostItem speedItem, int TDBRef, TrackSectionsFile tsectiondat, TrackDatabaseFile tdbfile)
10581058
{
1059-
SignalObjects[foundSignals] = new SignalObject(this);
1059+
SignalObjects[foundSignals] = new SignalObject(this, SignalObjectType.SpeedPost);
10601060
SignalObjects[foundSignals].direction = 0; // preset - direction not yet known //
10611061
SignalObjects[foundSignals].trackNode = trackNode;
10621062
SignalObjects[foundSignals].trRefIndex = nodeIndx;

Source/Orts.Simulation/Simulation/Signalling/SpeedPostWorldObject.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,10 @@ public SpeedPostWorldObject(SpeedPostObj speedPostItem)
1212
// get filename in Uppercase
1313
SFileName = Path.GetFileName(speedPostItem.FileName).ToUpperInvariant();
1414
}
15+
16+
public SpeedPostWorldObject(SpeedPostWorldObject other)
17+
{
18+
SFileName = other.SFileName;
19+
}
1520
}
1621
}

0 commit comments

Comments
 (0)