@@ -59,7 +59,7 @@ public Consist(Content content)
5959 var CarList = new List < Car > ( ) ;
6060 foreach ( Wagon wag in file . Train . TrainCfg . WagonList )
6161 {
62- float wagonMassKG = 0 ; int numEngAxlesOrts = 0 ;
62+ float wagonMassKG = 0 ; int ortsEngAxles = - 1 ; int numDriveAxles = 0 ; int numAllAxles = 0 ;
6363 try
6464 {
6565 var fileType = wag . IsEngine ? ".eng" : ".wag" ;
@@ -74,36 +74,46 @@ public Consist(Content content)
7474 MinCouplerStrengthN = Math . Min ( MinCouplerStrengthN , wagonFile . MinCouplerStrengthN ) ;
7575 if ( wagonFile . MaxBrakeForceN > 0 ) { NumOperativeBrakes ++ ; }
7676
77- if ( wag . IsEngine && engFile . MaxForceN > 25000 ) // exclude legacy driving trailers / cab-cars
77+ if ( wag . IsEngine )
7878 {
79- EngCount ++ ;
80- MaxPowerW += engFile . MaxPowerW ;
81- MaxTractiveForceN += engFile . MaxForceN ;
82- numEngAxlesOrts = engFile . NumDriveAxles ;
79+ // see MSTSLocomotive.Initialize()
80+ ortsEngAxles = engFile . NumDriveAxles ;
81+ if ( ortsEngAxles >= 0 ) { numDriveAxles = ortsEngAxles ; }
82+ else if ( engFile . NumEngWheels > 7f ) { numDriveAxles = ( int ) ( engFile . NumEngWheels / 2f ) ; }
83+ else if ( engFile . NumEngWheels > 0 ) { numDriveAxles = ( int ) engFile . NumEngWheels ; }
84+ else { numDriveAxles = 4 ; }
85+
86+ if ( engFile . MaxForceN > 25000 ) // exclude legacy driving trailers / cab-cars
87+ {
88+ EngCount ++ ;
89+ MaxPowerW += engFile . MaxPowerW ;
90+ MaxTractiveForceN += engFile . MaxForceN ;
91+ }
92+ else { WagCount ++ ; }
8393 }
8494 else if ( ! wag . IsEOT && wagonFile . WagonSize . LengthM > 1.1 ) // exclude legacy EOT
8595 {
8696 WagCount ++ ;
8797 }
8898
89- int totAxles = 0 ;
9099 // see MSTSWagon.LoadFromWagFile()
91- if ( numEngAxlesOrts > 0 ) { totAxles = numEngAxlesOrts + wagonFile . NumWagAxles ; }
92- else if ( wagonFile . NumWagAxles > 0 ) { totAxles = wagonFile . NumWagAxles ; }
93- else if ( wagonFile . NumWagWheels >= 7f ) { totAxles = ( int ) ( wagonFile . NumWagWheels / 2f ) ; }
94- else if ( wagonFile . NumWagWheels >= 0f ) { totAxles = ( int ) wagonFile . NumWagWheels ; }
95- else { totAxles = 4 ; }
100+ if ( ortsEngAxles >= 0 && wagonFile . NumWagAxles >= 0 ) { numAllAxles = ortsEngAxles + wagonFile . NumWagAxles ; }
101+ else if ( wagonFile . NumWagAxles >= 0 ) { numAllAxles = wagonFile . NumWagAxles ; }
102+ else if ( wagonFile . NumWagWheels >= 7f ) { numAllAxles = ( int ) ( wagonFile . NumWagWheels / 2f ) ; }
103+ else if ( wagonFile . NumWagWheels >= 0f ) { numAllAxles = ( int ) wagonFile . NumWagWheels ; }
104+ else { numAllAxles = 4 ; }
105+ if ( numDriveAxles > numAllAxles ) { numAllAxles = numDriveAxles ; }
96106
97107 // exclude legacy EOT from total axle count
98108 if ( ! wag . IsEOT && wagonFile . WagonSize . LengthM > 1.1 )
99109 {
100- NumAxles += totAxles ;
110+ NumAxles += numAllAxles ;
101111 }
102112
103- if ( totAxles > 0 && wagonFile . MassKG > 1000 )
113+ if ( numAllAxles > 0 && wagonFile . MassKG > 1000 )
104114 {
105115 const float GravitationalAccelerationMpS2 = 9.80665f ;
106- var derailForce = wagonFile . MassKG / totAxles / 2f * GravitationalAccelerationMpS2 ;
116+ var derailForce = wagonFile . MassKG / numAllAxles / 2f * GravitationalAccelerationMpS2 ;
107117 if ( derailForce > 1000f ) { MinDerailForceN = Math . Min ( MinDerailForceN , derailForce ) ; }
108118 }
109119 }
0 commit comments