273273using System . Text ;
274274using System . IO ;
275275using Orts . Parsers . Msts ; // For class S (seconds)
276+ using ORTS . Common ;
276277
277278namespace Orts . Formats . Msts
278279{
@@ -492,23 +493,25 @@ public class Tr_Activity_File {
492493 public Traffic_Definition Traffic_Definition ;
493494 public PlatformNumPassengersWaiting PlatformNumPassengersWaiting ;
494495 public ActivityRestrictedSpeedZones ActivityRestrictedSpeedZones ;
495- public int ORTSAIHornAtCrossings = - 1 ;
496+ public bool AIBlowsHornAtLevelCrossings { get ; private set ; } = false ;
497+ public LevelCrossingHornPattern AILevelCrossingHornPattern { get ; private set ; } = LevelCrossingHornPattern . Single ;
496498
497499
498500 public Tr_Activity_File ( STFReader stf ) {
499501 stf . MustMatch ( "(" ) ;
500- stf . ParseBlock ( new STFReader . TokenProcessor [ ] {
502+ var parser = new List < STFReader . TokenProcessor > {
501503 new STFReader . TokenProcessor ( "player_service_definition" , ( ) => { Player_Service_Definition = new Player_Service_Definition ( stf ) ; } ) ,
502504 new STFReader . TokenProcessor ( "nextserviceuid" , ( ) => { NextServiceUID = stf . ReadIntBlock ( null ) ; } ) ,
503505 new STFReader . TokenProcessor ( "nextactivityobjectuid" , ( ) => { NextActivityObjectUID = stf . ReadIntBlock ( null ) ; } ) ,
504- new STFReader . TokenProcessor ( "ortsaihornatcrossings" , ( ) => { ORTSAIHornAtCrossings = stf . ReadIntBlock ( ORTSAIHornAtCrossings ) ; } ) ,
505506 new STFReader . TokenProcessor ( "events" , ( ) => { Events = new Events ( stf ) ; } ) ,
506507 new STFReader . TokenProcessor ( "traffic_definition" , ( ) => { Traffic_Definition = new Traffic_Definition ( stf ) ; } ) ,
507508 new STFReader . TokenProcessor ( "activityobjects" , ( ) => { ActivityObjects = new ActivityObjects ( stf ) ; } ) ,
508509 new STFReader . TokenProcessor ( "platformnumpassengerswaiting" , ( ) => { PlatformNumPassengersWaiting = new PlatformNumPassengersWaiting ( stf ) ; } ) , // 35 files. To test, use EUROPE1\ACTIVITIES\aftstorm.act
509510 new STFReader . TokenProcessor ( "activityfailedsignals" , ( ) => { ActivityFailedSignals = new ActivityFailedSignals ( stf ) ; } ) ,
510511 new STFReader . TokenProcessor ( "activityrestrictedspeedzones" , ( ) => { ActivityRestrictedSpeedZones = new ActivityRestrictedSpeedZones ( stf ) ; } ) , // 27 files. To test, use EUROPE1\ACTIVITIES\lclsrvce.act
511- } ) ;
512+ } ;
513+ parser . AddRange ( ORSpecificDataTokenProcessors ( stf ) ) ;
514+ stf . ParseBlock ( parser ) ;
512515 }
513516
514517 // Used for explore in activity mode
@@ -525,14 +528,28 @@ public Tr_Activity_File()
525528 public void InsertORSpecificData ( STFReader stf )
526529 {
527530 stf . MustMatch ( "(" ) ;
528- stf . ParseBlock ( new STFReader . TokenProcessor [ ] {
529- new STFReader . TokenProcessor ( "ortsaihornatcrossings" , ( ) => { ORTSAIHornAtCrossings = stf . ReadIntBlock ( ORTSAIHornAtCrossings ) ; } ) ,
531+ var parser = new List < STFReader . TokenProcessor > {
530532 new STFReader . TokenProcessor ( "events" , ( ) =>
531533 {
532534 if ( Events == null ) Events = new Events ( stf ) ;
533535 else Events . InsertORSpecificData ( stf ) ;
534536 }
535537 ) ,
538+ } ;
539+ parser . AddRange ( ORSpecificDataTokenProcessors ( stf ) ) ;
540+ stf . ParseBlock ( parser ) ;
541+ }
542+
543+ private IEnumerable < STFReader . TokenProcessor > ORSpecificDataTokenProcessors ( STFReader stf )
544+ {
545+ yield return new STFReader . TokenProcessor ( "ortsaihornatcrossings" , ( ) =>
546+ {
547+ AIBlowsHornAtLevelCrossings = stf . ReadIntBlock ( Convert . ToInt32 ( AIBlowsHornAtLevelCrossings ) ) > 0 ;
548+ } ) ;
549+ yield return new STFReader . TokenProcessor ( "ortsaicrossinghornpattern" , ( ) =>
550+ {
551+ if ( Enum . TryParse < LevelCrossingHornPattern > ( stf . ReadStringBlock ( "" ) , ignoreCase : true , out var value ) )
552+ AILevelCrossingHornPattern = value ;
536553 } ) ;
537554 }
538555 }
0 commit comments