Skip to content

Commit d9791e2

Browse files
committed
Set initial brake modes
1 parent 29a0d37 commit d9791e2

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

Source/Orts.Simulation/Simulation/AIs/AITrain.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3978,6 +3978,7 @@ public override void InitializeBrakes()
39783978
base.InitializeBrakes();
39793979
return;
39803980
}
3981+
SetInitialBrakeModes();
39813982
float maxPressurePSI = 90;
39823983
float fullServPressurePSI = 64;
39833984
float maxPressurePSIVacuum = 21;

Source/Orts.Simulation/Simulation/Physics/Train.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4076,6 +4076,8 @@ public void UnconditionalInitializeBrakes()
40764076
if (Simulator.Confirmer != null && IsActualPlayerTrain) // As Confirmer may not be created until after a restore.
40774077
Simulator.Confirmer.Confirm(CabControl.InitializeBrakes, CabSetting.Off);
40784078

4079+
SetInitialBrakeModes();
4080+
40794081
float maxPressurePSI = 90;
40804082
float fullServPressurePSI = 64;
40814083
if (FirstCar != null && FirstCar.BrakeSystem is VacuumSinglePipe)
@@ -4561,6 +4563,38 @@ public void CheckFreight()
45614563
if (TrainType == TRAINTYPE.AI_INCORPORATED && IncorporatingTrainNo > -1) IsPlayable = true;
45624564
} // CheckFreight
45634565

4566+
4567+
public void SetInitialBrakeModes()
4568+
{
4569+
var lead = LeadLocomotive ?? Cars?.FirstOrDefault();
4570+
if (lead == null) return;
4571+
4572+
// Check if lead is vacuum-braked
4573+
if (lead.BrakeSystem is VacuumSinglePipe || (lead.BrakeSystems?.Any(b => b.Value is VacuumSinglePipe) ?? false) &&
4574+
Cars.Count(c => c.BrakeSystem is VacuumSinglePipe || c.BrakeSystem is ManualBraking ||
4575+
(c.BrakeSystems?.Any(b => b.Value is VacuumSinglePipe || b.Value is ManualBraking) ?? false)) > Cars.Count / 3)
4576+
{
4577+
foreach (var car in Cars.Cast<MSTSWagon>())
4578+
{
4579+
if (car.BrakeSystems?.ContainsKey((BrakeModes.VP, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.VP, car.MassKG);
4580+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.VB, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.VB, car.MassKG);
4581+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.VU, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.VU, car.MassKG);
4582+
}
4583+
}
4584+
else
4585+
{
4586+
foreach (var car in Cars.Cast<MSTSWagon>())
4587+
{
4588+
if (car.BrakeSystems?.ContainsKey((BrakeModes.R_MG, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.R_MG, car.MassKG);
4589+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.R, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.R, car.MassKG);
4590+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.P, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.P, car.MassKG);
4591+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.AP, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.AP, car.MassKG);
4592+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.G, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.G, car.MassKG);
4593+
else if (car.BrakeSystems?.ContainsKey((BrakeModes.AG, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.AG, car.MassKG);
4594+
}
4595+
}
4596+
}
4597+
45644598
public void CalculatePositionOfCars()
45654599
{
45664600
CalculatePositionOfCars(0, 0);

Source/Orts.Simulation/Simulation/RollingStocks/MSTSWagon.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3280,7 +3280,7 @@ private void UpdateTenderLoad()
32803280

32813281
private void UpdateBrakeLoadCompensation(float massDiffRatio)
32823282
{
3283-
// The LoadFull... and LoadEmpty... variables are set by the SetBrakeSystem() method based on the actually active brake mode.
3283+
// The LoadFull... and LoadEmpty... variables are set by the SetBrakeSystemMode() method based on the actually active brake mode.
32843284
// The massDiffRatio is always 1 for manually switchable load stages, even for an empty wagon.
32853285
// Only wagons with automatic continuous load compensation can have a massDiffRatio below 1.
32863286
MaxBrakeForceN = ((LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN) * massDiffRatio) + LoadEmptyMaxBrakeForceN;

0 commit comments

Comments
 (0)