Skip to content

Commit cf8971c

Browse files
authored
Merge pull request #780 from Roeterdink/ProcessPassingTime
Process passing time
2 parents 7cdc4eb + 5b3f246 commit cf8971c

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

Source/Orts.Simulation/Simulation/Timetables/ProcessTimetable.cs

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3176,9 +3176,11 @@ public enum SignalHoldType
31763176
public string StopName;
31773177
public int arrivalTime;
31783178
public int departureTime;
3179+
public int passTime;
31793180
public DateTime arrivalDT;
31803181
public DateTime departureDT;
3181-
public bool arrdepvalid;
3182+
public DateTime passDT;
3183+
public bool arrdeppassvalid;
31823184
public SignalHoldType holdState;
31833185
public bool noWaitSignal;
31843186
// public int passageTime; // not yet implemented
@@ -3199,17 +3201,34 @@ public StopInfo(string name, string arrTime, string depTime, TimetableInfo ttinf
31993201
refTTInfo = ttinfo;
32003202
arrivalTime = -1;
32013203
departureTime = -1;
3204+
passTime = -1;
32023205
Commands = null;
32033206

32043207
TimeSpan atime;
32053208
bool validArrTime = false;
32063209
bool validDepTime = false;
3210+
bool validPassTime = false;
32073211

3208-
validArrTime = TimeSpan.TryParse(arrTime, out atime);
3209-
if (validArrTime)
3212+
if (arrTime.Contains("P"))
32103213
{
3211-
arrivalTime = Convert.ToInt32(atime.TotalSeconds);
3212-
arrivalDT = new DateTime(atime.Ticks);
3214+
string passingTime = arrTime.Replace('P', ':');
3215+
validPassTime = TimeSpan.TryParse(passingTime, out atime);
3216+
3217+
if (validPassTime)
3218+
{
3219+
passTime = Convert.ToInt32(atime.TotalSeconds);
3220+
passDT = new DateTime(atime.Ticks);
3221+
}
3222+
}
3223+
else
3224+
{
3225+
3226+
validArrTime = TimeSpan.TryParse(arrTime, out atime);
3227+
if (validArrTime)
3228+
{
3229+
arrivalTime = Convert.ToInt32(atime.TotalSeconds);
3230+
arrivalDT = new DateTime(atime.Ticks);
3231+
}
32133232
}
32143233

32153234
validDepTime = TimeSpan.TryParse(depTime, out atime);
@@ -3219,7 +3238,7 @@ public StopInfo(string name, string arrTime, string depTime, TimetableInfo ttinf
32193238
departureDT = new DateTime(atime.Ticks);
32203239
}
32213240

3222-
arrdepvalid = (validArrTime || validDepTime);
3241+
arrdeppassvalid = (validArrTime || validDepTime);
32233242

32243243
StopName = String.Copy(name.ToLower());
32253244
}
@@ -3236,8 +3255,8 @@ public bool BuildStopInfo(TTTrain actTrain, int actPlatformID, Signals signalRef
32363255
{
32373256
bool validStop = false;
32383257

3239-
// valid stop
3240-
if (arrdepvalid)
3258+
// valid stop and not passing
3259+
if (arrdeppassvalid && passTime < 0)
32413260
{
32423261
// check for station flags
32433262
bool terminal = false;
@@ -3491,6 +3510,12 @@ public bool BuildStopInfo(TTTrain actTrain, int actPlatformID, Signals signalRef
34913510
}
34923511
}
34933512

3513+
// pass time only - valid condition but not yet processed
3514+
if (!validStop && passTime >= 0)
3515+
{
3516+
validStop = true;
3517+
}
3518+
34943519
return (validStop);
34953520
} // end buildStopInfo
34963521

0 commit comments

Comments
 (0)