5252using System . Diagnostics ;
5353using System . IO ;
5454using System . Linq ;
55+ using static Orts . Simulation . RollingStocks . MSTSLocomotive ;
5556using Event = Orts . Common . Event ;
5657
5758namespace Orts . Simulation . RollingStocks
@@ -149,6 +150,7 @@ public enum WindowState
149150
150151 bool TenderWeightInitialize = true ;
151152 float TenderWagonMaxFuelMassKG ;
153+ float TenderWagonMaxOilMassL ;
152154 float TenderWagonMaxWaterMassKG ;
153155
154156 // Wind Impacts
@@ -1203,6 +1205,7 @@ public virtual void Parse(string lowercasetoken, STFReader stf)
12031205 case "wagon(ortsauxtenderwatermass" : AuxTenderWaterMassKG = stf . ReadFloatBlock ( STFReader . UNITS . Mass , null ) ; break ;
12041206 case "wagon(ortstenderwagonwoodmass" :
12051207 case "wagon(ortstenderwagoncoalmass" : TenderWagonMaxFuelMassKG = stf . ReadFloatBlock ( STFReader . UNITS . Mass , null ) ; break ;
1208+ case "wagon(ortsmaxtenderfueloilvolume" : TenderWagonMaxOilVolumeL = stf . ReadFloatBlock ( STFReader . UNITS . Volume , null ) ; break ;
12061209 case "wagon(ortstenderwagonwatermass" : TenderWagonMaxWaterMassKG = stf . ReadFloatBlock ( STFReader . UNITS . Mass , null ) ; break ;
12071210 case "wagon(ortsheatingwindowderatingfactor" : WindowDeratingFactor = stf . ReadFloatBlock ( STFReader . UNITS . None , null ) ; break ;
12081211 case "wagon(ortsheatingcompartmenttemperatureset" : DesiredCompartmentTempSetpointC = stf . ReadFloatBlock ( STFReader . UNITS . Temperature , null ) ; break ;
@@ -1600,6 +1603,7 @@ public virtual void Copy(MSTSWagon copy)
16001603 WheelFlangeLengthM = copy . WheelFlangeLengthM ;
16011604 AuxTenderWaterMassKG = copy . AuxTenderWaterMassKG ;
16021605 TenderWagonMaxFuelMassKG = copy . TenderWagonMaxFuelMassKG ;
1606+ TenderWagonMaxOilVolumeL = copy . TenderWagonMaxOilMassL ;
16031607 TenderWagonMaxWaterMassKG = copy . TenderWagonMaxWaterMassKG ;
16041608 InitWagonNumAxles = copy . InitWagonNumAxles ;
16051609 WagonNumAxles = copy . WagonNumAxles ;
@@ -1965,7 +1969,7 @@ public override void Update(float elapsedClockSeconds)
19651969 ConfirmSteamLocomotiveTender ( ) ; // Confirms that a tender is connected to the steam locomotive
19661970
19671971 // Adjusts water and coal mass based upon values assigned to the tender found in the WAG file rather then those defined in ENG file.
1968- if ( WagonType == WagonTypes . Tender && TenderWeightInitialize && TenderWagonMaxFuelMassKG != 0 && TenderWagonMaxWaterMassKG != 0 )
1972+ if ( WagonType == WagonTypes . Tender && TenderWeightInitialize && ( TenderWagonMaxFuelMassKG != 0 || TenderWagonMaxOilMassL != 0 ) && TenderWagonMaxWaterMassKG != 0 )
19691973 {
19701974
19711975 // Find the associated steam locomotive for this tender
@@ -1986,10 +1990,18 @@ public override void Update(float elapsedClockSeconds)
19861990 // amount of water defined in the ENG file, and adding the water defined in the WAG file.
19871991 float TempMaxCombinedWater = TendersSteamLocomotive . MaxTotalCombinedWaterVolumeUKG ;
19881992 TendersSteamLocomotive . MaxTotalCombinedWaterVolumeUKG = ( TempMaxCombinedWater - ( Kg . ToLb ( TendersSteamLocomotive . MaxLocoTenderWaterMassKG ) / WaterLBpUKG ) ) + ( Kg . ToLb ( TenderWagonMaxWaterMassKG ) / WaterLBpUKG ) ;
1989-
1990- TendersSteamLocomotive . MaxTenderFuelMassKG = TenderWagonMaxFuelMassKG ;
1993+
19911994 TendersSteamLocomotive . MaxLocoTenderWaterMassKG = TenderWagonMaxWaterMassKG ;
19921995
1996+ if ( TendersSteamLocomotive . SteamLocomotiveFuelType == SteamLocomotiveFuelTypes . Oil )
1997+ {
1998+ TendersSteamLocomotive . MaxTenderFuelMassKG = TendersSteamLocomotive . MaxTenderOilMassL * TendersSteamLocomotive . OilSpecificGravity ;
1999+ }
2000+ else
2001+ {
2002+ TendersSteamLocomotive . MaxTenderFuelMassKG = TenderWagonMaxFuelMassKG ;
2003+ }
2004+
19932005 if ( Simulator . Settings . VerboseConfigurationMessages )
19942006 {
19952007 Trace . TraceInformation ( "Fuel and Water Masses adjusted to Tender Values Specified in WAG File - Coal mass {0} kg, Water Mass {1}" , FormatStrings . FormatMass ( TendersSteamLocomotive . MaxTenderFuelMassKG , IsMetric ) , FormatStrings . FormatFuelVolume ( L . FromGUK ( TendersSteamLocomotive . MaxTotalCombinedWaterVolumeUKG ) , IsMetric , IsUK ) ) ;
@@ -3784,6 +3796,9 @@ public MSTSCoupling Coupler
37843796 return Couplers [ 0 ] ; // defaults to the rear coupler (typically the first read)
37853797 }
37863798 }
3799+
3800+ public float TenderWagonMaxOilVolumeL { get ; private set ; }
3801+
37873802 public override float GetCouplerZeroLengthM ( )
37883803 {
37893804 if ( IsPlayerTrain && Simulator . UseAdvancedAdhesion && ! Simulator . Settings . SimpleControlPhysics && IsAdvancedCoupler )
0 commit comments