Skip to content

Commit 06985f4

Browse files
committed
Synchronized compressor startup
1 parent ba514c8 commit 06985f4

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ public float OdometerM
351351
public float TrainBrakePipeLeakPSIorInHgpS = 0.0f; // Air leakage from train brake pipe - should normally be no more then 5psi/min - default off
352352
public float CompressorRestartPressurePSI = 110;
353353
public float CompressorChargingRateM3pS = 0.075f;
354+
public bool CompressorIsMUControlled = false;
354355
public float MainResChargingRatePSIpS = 0.4f;
355356
public float EngineBrakeReleaseRatePSIpS = 12.5f;
356357
public float EngineBrakeApplyRatePSIpS = 12.5f;
@@ -983,6 +984,7 @@ public override void Parse(string lowercasetoken, STFReader stf)
983984
CompressorIsMechanical = true;
984985
}
985986
break;
987+
case "engine(ortscompressorismucontrolled": CompressorIsMUControlled = stf.ReadBoolBlock(false); break;
986988
case "engine(trainpipeleakrate": TrainBrakePipeLeakPSIorInHgpS = stf.ReadFloatBlock(STFReader.UNITS.PressureRateDefaultPSIpS, null); break;
987989
case "engine(vacuumbrakesvacuumpumpresistance": VacuumPumpResistanceN = stf.ReadFloatBlock(STFReader.UNITS.Force, null); break;
988990

@@ -1171,6 +1173,7 @@ public override void Copy(MSTSWagon copy)
11711173

11721174
CompressorIsMechanical = locoCopy.CompressorIsMechanical;
11731175
CompressorRestartPressurePSI = locoCopy.CompressorRestartPressurePSI;
1176+
CompressorIsMUControlled = locoCopy.CompressorIsMUControlled;
11741177
TrainBrakePipeLeakPSIorInHgpS = locoCopy.TrainBrakePipeLeakPSIorInHgpS;
11751178
MaxMainResPressurePSI = locoCopy.MaxMainResPressurePSI;
11761179
MainResPressurePSI = locoCopy.MaxMainResPressurePSI;
@@ -2661,9 +2664,20 @@ protected virtual void UpdateCompressor(float elapsedClockSeconds)
26612664

26622665
// Turn compressor on and off
26632666
if (MainResPressurePSI < CompressorRestartPressurePSI && LocomotivePowerSupply.AuxiliaryPowerSupplyState == PowerSupplyState.PowerOn && !CompressorIsOn)
2667+
{
26642668
SignalEvent(Event.CompressorOn);
2669+
foreach (var loco in Train.Cars.OfType<MSTSLocomotive>())
2670+
{
2671+
if (loco.RemoteControlGroup == 0 && loco.LocomotivePowerSupply.AuxiliaryPowerSupplyOn && !loco.CompressorIsOn && loco.CompressorIsMUControlled)
2672+
{
2673+
loco.SignalEvent(Event.CompressorOn);
2674+
}
2675+
}
2676+
}
26652677
else if ((MainResPressurePSI >= MaxMainResPressurePSI || LocomotivePowerSupply.AuxiliaryPowerSupplyState != PowerSupplyState.PowerOn) && CompressorIsOn)
2678+
{
26662679
SignalEvent(Event.CompressorOff);
2680+
}
26672681

26682682
if (CompressorIsOn)
26692683
MainResPressurePSI += elapsedClockSeconds * reservoirChargingRate;

0 commit comments

Comments
 (0)