@@ -2326,16 +2326,21 @@ public override void Update(float elapsedClockSeconds)
23262326
23272327// Trace.TraceInformation("Run Mode - Timer {0} GearPeriod {1}", BoosterGearEngageTimeS, BoosterGearEngageTimePeriodS);
23282328
2329- if (BoosterGearEngageTimeS > BoosterGearEngageTimePeriodS)
2329+ if (BoosterGearEngageTimeS > BoosterGearEngageTimePeriodS) // Booster gears engaged
23302330 {
23312331 enginethrottle = throttle;
23322332 BoosterCylinderSteamExhaustOn = true;
2333- BoosterCylinderCocksOn = true ;
2333+ BoosterCylinderCocksOn = false ;
23342334 BoosterGearsEngaged = true;
23352335 BoosterIdleHeatingTimerReset = false;
23362336 BoosterIdleHeatingTimerS = 0;
23372337 // Trace.TraceInformation("Run Mode - " );
23382338 }
2339+ else
2340+ {
2341+ BoosterCylinderSteamExhaustOn = false;
2342+ BoosterCylinderCocksOn = true;
2343+ }
23392344 BoosterGearEngageTimeS += elapsedClockSeconds;
23402345 }
23412346 else if (!SteamBoosterAirOpen || !SteamBoosterLatchedLocked) // Turn Booster off completely
@@ -5797,6 +5802,7 @@ private void UpdateSteamTractiveForce(float elapsedClockSeconds, float locomotiv
57975802 SteamEngines[numberofengine].TractiveForceN = N.FromLbf((SteamEngines[numberofengine].MaxIndicatedHorsePowerHP * 375.0f) / pS.TopH(Me.ToMi(SpeedMpS)));
57985803 SteamEngines[numberofengine].IndicatedHorsePowerHP = SteamEngines[numberofengine].MaxIndicatedHorsePowerHP; // Set IHP to maximum value
57995804 IsCritTELimit = true; // Flag if limiting TE
5805+
58005806 }
58015807 else
58025808 {
@@ -5810,7 +5816,11 @@ private void UpdateSteamTractiveForce(float elapsedClockSeconds, float locomotiv
58105816 protected override void UpdateTractiveForce(float elapsedClockSeconds, float locomotivethrottle, float AbsSpeedMpS, float AbsWheelSpeedMpS)
58115817 {
58125818 TractiveForceN = 0; // reset tractiveforceN in preparation to calculating a new value
5813- MotiveForceN = 0;
5819+ if (!Simulator.UseAdvancedAdhesion && Simulator.Settings.SimpleControlPhysics)
5820+ {
5821+ // Simple adhesion
5822+ MotiveForceN = 0;
5823+ }
58145824 IndicatedHorsePowerHP = 0;
58155825 PistonSpeedFtpMin = 0;
58165826 MaxPowerW = 0;
@@ -5825,9 +5835,9 @@ protected override void UpdateTractiveForce(float elapsedClockSeconds, float loc
58255835
58265836 if (Simulator.UseAdvancedAdhesion && !Simulator.Settings.SimpleControlPhysics)
58275837 {
5828- SteamEngines[i].AttachedAxle.DriveForceN = SteamEngines[i].TractiveForceN / SteamEngines[i].AttachedAxle.NumberWheelAxles ;
5838+ SteamEngines[i].AttachedAxle.DriveForceN = SteamEngines[i].TractiveForceN;
58295839 UpdateAxleDriveForce();
5830- MotiveForceN += SteamEngines[i].AttachedAxle.CompensatedAxleForceN;
5840+ // MotiveForceN += SteamEngines[i].AttachedAxle.CompensatedAxleForceN;
58315841 }
58325842 else // Simple adhesion
58335843 {
@@ -5903,7 +5913,7 @@ protected override void UpdateAxleDriveForce()
59035913
59045914
59055915 public override void AdvancedAdhesion(float elapsedClockSeconds)
5906- {
5916+ {
59075917
59085918 foreach (var axle in LocomotiveAxles)
59095919 {
@@ -5969,9 +5979,41 @@ public override void AdvancedAdhesion(float elapsedClockSeconds)
59695979 axle.FrictionN = N.FromLbf(3.8f * Me.ToIn(linkedEngine.CylindersDiameterM) * Me.ToIn(linkedEngine.CylindersDiameterM) * Me.ToIn(linkedEngine.CylindersStrokeM) / (Me.ToIn(axle.WheelRadiusM * 2.0f)));
59705980
59715981 }
5982+
5983+ axle.BrakeRetardForceN = BrakeRetardForceN / LocomotiveAxles.Count;
5984+ axle.TrainSpeedMpS = SpeedMpS; //Set the train speed of the axle mod
5985+ axle.WheelRadiusM = linkedEngine.AttachedAxle.WheelRadiusM;
5986+ axle.WheelDistanceGaugeM = TrackGaugeM;
5987+ axle.CurrentCurveRadiusM = CurrentCurveRadiusM;
5988+ axle.BogieRigidWheelBaseM = RigidWheelBaseM;
5989+ axle.CurtiusKnifflerZeroSpeed = ZeroSpeedAdhesionBase;
5990+
5991+ }
5992+
5993+ LocomotiveAxles.Update(elapsedClockSeconds);
5994+
5995+ MotiveForceN = LocomotiveAxles.CompensatedForceN;
5996+
5997+ if (LocoNumDrvAxles <= 0)
5998+ {
5999+ WheelSpeedMpS = AbsSpeedMpS;
6000+ return;
6001+ }
6002+
6003+ if (elapsedClockSeconds > 0)
6004+ {
6005+ WheelSlip = LocomotiveAxles.IsWheelSlip;
6006+ WheelSlipWarning = LocomotiveAxles.IsWheelSlipWarning;
6007+ }
6008+
6009+ // This enables steam locomotives to have different speeds for driven and non-driven wheels.
6010+ if (SteamEngineType != MSTSSteamLocomotive.SteamEngineTypes.Geared)
6011+ {
6012+ WheelSpeedSlipMpS = (float)LocomotiveAxles[0].AxleSpeedMpS;
6013+ WheelSpeedMpS = SpeedMpS;
59726014 }
6015+ else WheelSpeedMpS = (float)LocomotiveAxles[0].AxleSpeedMpS;
59736016
5974- base.AdvancedAdhesion(elapsedClockSeconds);
59756017 }
59766018
59776019 private void UpdateAuxiliaries(float elapsedClockSeconds, float absSpeedMpS)
0 commit comments