Skip to content

Commit 048c7b2

Browse files
committed
Synchronized compressor startup
1 parent c15227b commit 048c7b2

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
@@ -349,6 +349,7 @@ public float OdometerM
349349
public float TrainBrakePipeLeakPSIorInHgpS = 0.0f; // Air leakage from train brake pipe - should normally be no more then 5psi/min - default off
350350
public float CompressorRestartPressurePSI = 110;
351351
public float CompressorChargingRateM3pS = 0.075f;
352+
public bool CompressorIsMUControlled = false;
352353
public float MainResChargingRatePSIpS = 0.4f;
353354
public float EngineBrakeReleaseRatePSIpS = 12.5f;
354355
public float EngineBrakeApplyRatePSIpS = 12.5f;
@@ -984,6 +985,7 @@ public override void Parse(string lowercasetoken, STFReader stf)
984985
CompressorIsMechanical = true;
985986
}
986987
break;
988+
case "engine(ortscompressorismucontrolled": CompressorIsMUControlled = stf.ReadBoolBlock(false); break;
987989
case "engine(trainpipeleakrate": TrainBrakePipeLeakPSIorInHgpS = stf.ReadFloatBlock(STFReader.UNITS.PressureRateDefaultPSIpS, null); break;
988990
case "engine(vacuumbrakesvacuumpumpresistance": VacuumPumpResistanceN = stf.ReadFloatBlock(STFReader.UNITS.Force, null); break;
989991

@@ -1172,6 +1174,7 @@ public override void Copy(MSTSWagon copy)
11721174

11731175
CompressorIsMechanical = locoCopy.CompressorIsMechanical;
11741176
CompressorRestartPressurePSI = locoCopy.CompressorRestartPressurePSI;
1177+
CompressorIsMUControlled = locoCopy.CompressorIsMUControlled;
11751178
TrainBrakePipeLeakPSIorInHgpS = locoCopy.TrainBrakePipeLeakPSIorInHgpS;
11761179
MaxMainResPressurePSI = locoCopy.MaxMainResPressurePSI;
11771180
MainResPressurePSI = locoCopy.MaxMainResPressurePSI;
@@ -2645,9 +2648,20 @@ protected virtual void UpdateCompressor(float elapsedClockSeconds)
26452648

26462649
// Turn compressor on and off
26472650
if (MainResPressurePSI < CompressorRestartPressurePSI && LocomotivePowerSupply.AuxiliaryPowerSupplyState == PowerSupplyState.PowerOn && !CompressorIsOn)
2651+
{
26482652
SignalEvent(Event.CompressorOn);
2653+
foreach (var loco in Train.Cars.OfType<MSTSLocomotive>())
2654+
{
2655+
if (loco.RemoteControlGroup == 0 && loco.LocomotivePowerSupply.AuxiliaryPowerSupplyOn && !loco.CompressorIsOn && loco.CompressorIsMUControlled)
2656+
{
2657+
loco.SignalEvent(Event.CompressorOn);
2658+
}
2659+
}
2660+
}
26492661
else if ((MainResPressurePSI >= MaxMainResPressurePSI || LocomotivePowerSupply.AuxiliaryPowerSupplyState != PowerSupplyState.PowerOn) && CompressorIsOn)
2662+
{
26502663
SignalEvent(Event.CompressorOff);
2664+
}
26512665

26522666
if (CompressorIsOn)
26532667
MainResPressurePSI += elapsedClockSeconds * reservoirChargingRate;

0 commit comments

Comments
 (0)