Skip to content

Commit 8a2fb4e

Browse files
committed
Add proper brake initialization code
1 parent 01aaca7 commit 8a2fb4e

File tree

3 files changed

+26
-23
lines changed

3 files changed

+26
-23
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Brakes/BrakeSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ public abstract class BrakeSystem
8686
/// but for vacuum brakes it is a conversion to an internally used equivalent pressure.
8787
/// </summary>
8888
public abstract float InternalPressure(float realPressure);
89-
9089
public abstract void Initialize(bool handbrakeOn, float maxPressurePSI, float fullServPressurePSI, bool immediateRelease);
9190
public abstract void SetHandbrakePercent(float percent);
9291
public abstract bool GetHandbrakeStatus();
9392
public abstract void SetRetainer(RetainerSetting setting);
93+
public virtual void Initialize() {}
9494
public abstract void InitializeMoving(); // starting conditions when starting speed > 0
9595
public abstract void LocoInitializeMoving(); // starting conditions when starting speed > 0
9696
public abstract bool IsBraking(); // return true if the wagon is braking above a certain threshold

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Brakes/MSTS/AirSinglePipe.cs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -310,25 +310,6 @@ public override void Restore(BinaryReader inf)
310310

311311
public override void Initialize(bool handbrakeOn, float maxPressurePSI, float fullServPressurePSI, bool immediateRelease)
312312
{
313-
// reducing size of Emergency Reservoir for short (fake) cars
314-
if (Car.Simulator.Settings.CorrectQuestionableBrakingParams && Car.CarLengthM <= 1)
315-
EmergResVolumeM3 = Math.Min (0.02f, EmergResVolumeM3);
316-
317-
// Install a plain triple valve if no brake valve defined
318-
// Do not install it for tenders if not defined, to allow tenders with straight brake only
319-
if (Car.Simulator.Settings.CorrectQuestionableBrakingParams && (Car as MSTSWagon).BrakeValve == MSTSWagon.BrakeValveType.None && (Car as MSTSWagon).WagonType != TrainCar.WagonTypes.Tender)
320-
{
321-
(Car as MSTSWagon).BrakeValve = MSTSWagon.BrakeValveType.TripleValve;
322-
Trace.TraceWarning("{0} does not define a brake valve, defaulting to a plain triple valve", (Car as MSTSWagon).WagFilePath);
323-
}
324-
325-
// In simple brake mode set emergency reservoir volume, override high volume values to allow faster brake release.
326-
if (Car.Simulator.Settings.SimpleControlPhysics && EmergResVolumeM3 > 2.0)
327-
EmergResVolumeM3 = 0.7f;
328-
329-
if (MaxTripleValveCylPressurePSI == 0) MaxTripleValveCylPressurePSI = MaxCylPressurePSI / RelayValveRatio;
330-
if (EngineRelayValveRatio == 0) EngineRelayValveRatio = RelayValveRatio;
331-
332313
BrakeLine1PressurePSI = Car.Train.EqualReservoirPressurePSIorInHg;
333314
BrakeLine2PressurePSI = Car.Train.BrakeLine2PressurePSI;
334315
BrakeLine3PressurePSI = 0;
@@ -344,11 +325,32 @@ public override void Initialize(bool handbrakeOn, float maxPressurePSI, float fu
344325
HoldingValve = ValveState.Release;
345326
HandbrakePercent = handbrakeOn & (Car as MSTSWagon).HandBrakePresent ? 100 : 0;
346327
SetRetainer(RetainerSetting.Exhaust);
347-
MSTSLocomotive loco = Car as MSTSLocomotive;
348-
if (loco != null)
328+
if (Car is MSTSLocomotive loco)
349329
{
350330
loco.MainResPressurePSI = loco.MaxMainResPressurePSI;
351331
}
332+
}
333+
334+
public override void Initialize()
335+
{
336+
// reducing size of Emergency Reservoir for short (fake) cars
337+
if (Car.Simulator.Settings.CorrectQuestionableBrakingParams && Car.CarLengthM <= 1)
338+
EmergResVolumeM3 = Math.Min (0.02f, EmergResVolumeM3);
339+
340+
// Install a plain triple valve if no brake valve defined
341+
// Do not install it for tenders if not defined, to allow tenders with straight brake only
342+
if (Car.Simulator.Settings.CorrectQuestionableBrakingParams && (Car as MSTSWagon).BrakeValve == MSTSWagon.BrakeValveType.None && (Car as MSTSWagon).WagonType != TrainCar.WagonTypes.Tender)
343+
{
344+
(Car as MSTSWagon).BrakeValve = MSTSWagon.BrakeValveType.TripleValve;
345+
Trace.TraceWarning("{0} does not define a brake valve, defaulting to a plain triple valve", (Car as MSTSWagon).WagFilePath);
346+
}
347+
348+
// In simple brake mode set emergency reservoir volume, override high volume values to allow faster brake release.
349+
if (Car.Simulator.Settings.SimpleControlPhysics && EmergResVolumeM3 > 2.0)
350+
EmergResVolumeM3 = 0.7f;
351+
352+
if (MaxTripleValveCylPressurePSI == 0) MaxTripleValveCylPressurePSI = MaxCylPressurePSI / RelayValveRatio;
353+
if (EngineRelayValveRatio == 0) EngineRelayValveRatio = RelayValveRatio;
352354

353355
if (EmergResVolumeM3 > 0 && EmergAuxVolumeRatio > 0 && BrakePipeVolumeM3 > 0)
354356
AuxBrakeLineVolumeRatio = EmergResVolumeM3 / EmergAuxVolumeRatio / BrakePipeVolumeM3;
@@ -357,7 +359,7 @@ public override void Initialize(bool handbrakeOn, float maxPressurePSI, float fu
357359

358360
if (CylVolumeM3 == 0) CylVolumeM3 = EmergResVolumeM3 / EmergAuxVolumeRatio / AuxCylVolumeRatio;
359361

360-
RelayValveFitted |= (loco != null && (loco.DynamicBrakeAutoBailOff || loco.DynamicBrakePartialBailOff)) || (Car as MSTSWagon).BrakeValve == MSTSWagon.BrakeValveType.DistributingValve;
362+
RelayValveFitted |= (Car is MSTSLocomotive loco && (loco.DynamicBrakeAutoBailOff || loco.DynamicBrakePartialBailOff)) || (Car as MSTSWagon).BrakeValve == MSTSWagon.BrakeValveType.DistributingValve;
361363
}
362364

363365
/// <summary>

Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,7 @@ public struct CarTunnelInfoData
700700

701701
public virtual void Initialize()
702702
{
703+
BrakeSystem.Initialize();
703704
CurveSpeedDependent = Simulator.Settings.CurveSpeedDependent;
704705

705706
//CurveForceFilter.Initialize();

0 commit comments

Comments
 (0)