@@ -500,6 +500,23 @@ public virtual void LoadFromWagFile(string wagFilePath)
500500 }
501501 }
502502
503+ // Should always be at least one bogie on rolling stock. If is zero then NaN error occurs.
504+ if ( WagonNumBogies == 0 )
505+ {
506+ WagonNumBogies = 1 ;
507+ }
508+
509+ // Set wheel flange parameters to default values.
510+ if ( MaximumWheelFlangeAngleRad == 0 )
511+ {
512+ MaximumWheelFlangeAngleRad = 1.22173f ; // Default = 70 deg - Pre 1990 AAR 1:20 wheel
513+ }
514+
515+ if ( WheelFlangeLengthM == 0 )
516+ {
517+ WheelFlangeLengthM = 0.0254f ; // Height = 1.00in - Pre 1990 AAR 1:20 wheel
518+ }
519+
503520 // Initialise steam heat parameters
504521 if ( TrainHeatBoilerWaterUsageGalukpH == null ) // If no table entered in WAG file, then use the default table
505522 {
@@ -1015,6 +1032,8 @@ public virtual void Parse(string lowercasetoken, STFReader stf)
10151032 case "wagon(ortslengthairhose" : CarAirHoseLengthM = stf . ReadFloatBlock ( STFReader . UNITS . Distance , null ) ; break ;
10161033 case "wagon(ortshorizontallengthairhose" : CarAirHoseHorizontalLengthM = stf . ReadFloatBlock ( STFReader . UNITS . Distance , null ) ; break ;
10171034 case "wagon(ortslengthcouplerface" : CarCouplerFaceLengthM = stf . ReadFloatBlock ( STFReader . UNITS . Distance , null ) ; break ;
1035+ case "wagon(ortswheelflangelength" : WheelFlangeLengthM = stf . ReadFloatBlock ( STFReader . UNITS . Distance , null ) ; break ;
1036+ case "wagon(ortsmaximumwheelflangeangle" : MaximumWheelFlangeAngleRad = stf . ReadFloatBlock ( STFReader . UNITS . Angle , null ) ; break ;
10181037 case "wagon(ortstrackgauge" :
10191038 stf . MustMatch ( "(" ) ;
10201039 TrackGaugeM = stf . ReadFloat ( STFReader . UNITS . Distance , null ) ;
@@ -1472,6 +1491,8 @@ public virtual void Copy(MSTSWagon copy)
14721491 CarCouplerFaceLengthM = copy . CarCouplerFaceLengthM ;
14731492 CarAirHoseLengthM = copy . CarAirHoseLengthM ;
14741493 CarAirHoseHorizontalLengthM = copy . CarAirHoseHorizontalLengthM ;
1494+ MaximumWheelFlangeAngleRad = copy . MaximumWheelFlangeAngleRad ;
1495+ WheelFlangeLengthM = copy . WheelFlangeLengthM ;
14751496 AuxTenderWaterMassKG = copy . AuxTenderWaterMassKG ;
14761497 TenderWagonMaxCoalMassKG = copy . TenderWagonMaxCoalMassKG ;
14771498 TenderWagonMaxWaterMassKG = copy . TenderWagonMaxWaterMassKG ;
@@ -1710,6 +1731,11 @@ public override void Save(BinaryWriter outf)
17101731
17111732 outf . Write ( WheelBrakeSlideProtectionActive ) ;
17121733 outf . Write ( WheelBrakeSlideProtectionTimerS ) ;
1734+ outf . Write ( AngleOfAttackRad ) ;
1735+ outf . Write ( DerailClimbDistanceM ) ;
1736+ outf . Write ( DerailPossible ) ;
1737+ outf . Write ( DerailExpected ) ;
1738+ outf . Write ( DerailElapsedTimeS ) ;
17131739
17141740 base . Save ( outf ) ;
17151741 }
@@ -1757,6 +1783,11 @@ public override void Restore(BinaryReader inf)
17571783
17581784 WheelBrakeSlideProtectionActive = inf . ReadBoolean ( ) ;
17591785 WheelBrakeSlideProtectionTimerS = inf . ReadInt32 ( ) ;
1786+ AngleOfAttackRad = inf . ReadSingle ( ) ;
1787+ DerailClimbDistanceM = inf . ReadSingle ( ) ;
1788+ DerailPossible = inf . ReadBoolean ( ) ;
1789+ DerailExpected = inf . ReadBoolean ( ) ;
1790+ DerailElapsedTimeS = inf . ReadSingle ( ) ;
17601791
17611792 base . Restore ( inf ) ;
17621793 }
0 commit comments