Skip to content

Commit 3023eb3

Browse files
authored
Merge pull request #700 from Sharpe49/csharp-script-extensions
Fix for crash during signal loading
2 parents dff8500 + 568fab5 commit 3023eb3

File tree

4 files changed

+31
-24
lines changed

4 files changed

+31
-24
lines changed

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

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

8143-
SignalObject previousSignal = new SignalObject(signalRef);
8143+
SignalObject previousSignal = new SignalObject(signalRef, SignalObjectType.Signal);
81448144

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

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: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
using System.Diagnostics;
2727
using System.IO;
2828
using System.Linq;
29+
using System.Text;
2930
using Microsoft.Xna.Framework;
3031
using Orts.Formats.Msts;
3132
using Orts.Formats.OR;
@@ -182,11 +183,6 @@ public Signals(Simulator simulator, SignalConfigurationFile sigcfg, Cancellation
182183
sob.AppendFormat("TDB Index : {0}\n", thisHead.TDBIndex);
183184
sob.AppendFormat("Junction Main Node : {0}\n", thisHead.JunctionMainNode);
184185
sob.AppendFormat("Junction Path : {0}\n", thisHead.JunctionPath);
185-
186-
if (thisHead.usedCsSignalScript == null && singleSignal.Type == SignalObjectType.Signal)
187-
{
188-
nonCSharpSignals.Add(thisHead.signalType.Name);
189-
}
190186
}
191187

192188
sob.AppendFormat("TC Reference : {0}\n", singleSignal.TCReference);
@@ -1010,7 +1006,7 @@ private int AddSignal(int trackNode, int nodeIndx, SignalItem sigItem, int TDBRe
10101006
{
10111007
validSignal = true;
10121008

1013-
SignalObjects[foundSignals] = new SignalObject(this);
1009+
SignalObjects[foundSignals] = new SignalObject(this, SignalObjectType.Signal);
10141010
SignalObjects[foundSignals].direction = (int)sigItem.Direction;
10151011
SignalObjects[foundSignals].trackNode = trackNode;
10161012
SignalObjects[foundSignals].trRefIndex = nodeIndx;
@@ -1056,7 +1052,7 @@ private int AddSignal(int trackNode, int nodeIndx, SignalItem sigItem, int TDBRe
10561052
/// </summary>
10571053
private int AddSpeed(int trackNode, int nodeIndx, SpeedPostItem speedItem, int TDBRef, TrackSectionsFile tsectiondat, TrackDatabaseFile tdbfile)
10581054
{
1059-
SignalObjects[foundSignals] = new SignalObject(this);
1055+
SignalObjects[foundSignals] = new SignalObject(this, SignalObjectType.SpeedPost);
10601056
SignalObjects[foundSignals].direction = 0; // preset - direction not yet known //
10611057
SignalObjects[foundSignals].trackNode = trackNode;
10621058
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)