@@ -3192,9 +3192,11 @@ public enum SignalHoldType
31923192 public string StopName ;
31933193 public int arrivalTime ;
31943194 public int departureTime ;
3195+ public int passTime ;
31953196 public DateTime arrivalDT ;
31963197 public DateTime departureDT ;
3197- public bool arrdepvalid ;
3198+ public DateTime passDT ;
3199+ public bool arrdeppassvalid ;
31983200 public SignalHoldType holdState ;
31993201 public bool noWaitSignal ;
32003202 // public int passageTime; // not yet implemented
@@ -3215,17 +3217,34 @@ public StopInfo(string name, string arrTime, string depTime, TimetableInfo ttinf
32153217 refTTInfo = ttinfo ;
32163218 arrivalTime = - 1 ;
32173219 departureTime = - 1 ;
3220+ passTime = - 1 ;
32183221 Commands = null ;
32193222
32203223 TimeSpan atime ;
32213224 bool validArrTime = false ;
32223225 bool validDepTime = false ;
3226+ bool validPassTime = false ;
32233227
3224- validArrTime = TimeSpan . TryParse ( arrTime , out atime ) ;
3225- if ( validArrTime )
3228+ if ( arrTime . Contains ( "P" ) )
32263229 {
3227- arrivalTime = Convert . ToInt32 ( atime . TotalSeconds ) ;
3228- arrivalDT = new DateTime ( atime . Ticks ) ;
3230+ string passingTime = arrTime . Replace ( 'P' , ':' ) ;
3231+ validPassTime = TimeSpan . TryParse ( passingTime , out atime ) ;
3232+
3233+ if ( validPassTime )
3234+ {
3235+ passTime = Convert . ToInt32 ( atime . TotalSeconds ) ;
3236+ passDT = new DateTime ( atime . Ticks ) ;
3237+ }
3238+ }
3239+ else
3240+ {
3241+
3242+ validArrTime = TimeSpan . TryParse ( arrTime , out atime ) ;
3243+ if ( validArrTime )
3244+ {
3245+ arrivalTime = Convert . ToInt32 ( atime . TotalSeconds ) ;
3246+ arrivalDT = new DateTime ( atime . Ticks ) ;
3247+ }
32293248 }
32303249
32313250 validDepTime = TimeSpan . TryParse ( depTime , out atime ) ;
@@ -3235,7 +3254,7 @@ public StopInfo(string name, string arrTime, string depTime, TimetableInfo ttinf
32353254 departureDT = new DateTime ( atime . Ticks ) ;
32363255 }
32373256
3238- arrdepvalid = ( validArrTime || validDepTime ) ;
3257+ arrdeppassvalid = ( validArrTime || validDepTime ) ;
32393258
32403259 StopName = String . Copy ( name . ToLower ( ) ) ;
32413260 }
@@ -3252,8 +3271,8 @@ public bool BuildStopInfo(TTTrain actTrain, int actPlatformID, Signals signalRef
32523271 {
32533272 bool validStop = false ;
32543273
3255- // valid stop
3256- if ( arrdepvalid )
3274+ // valid stop and not passing
3275+ if ( arrdeppassvalid && passTime < 0 )
32573276 {
32583277 // check for station flags
32593278 bool terminal = false ;
@@ -3507,6 +3526,12 @@ public bool BuildStopInfo(TTTrain actTrain, int actPlatformID, Signals signalRef
35073526 }
35083527 }
35093528
3529+ // pass time only - valid condition but not yet processed
3530+ if ( ! validStop && passTime >= 0 )
3531+ {
3532+ validStop = true ;
3533+ }
3534+
35103535 return ( validStop ) ;
35113536 } // end buildStopInfo
35123537
0 commit comments