Skip to content

Commit 966a61c

Browse files
committed
Bug fix for not being able to brake
1 parent f281de6 commit 966a61c

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/CruiseControl.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,12 @@ public void CalculateRequiredForce(float elapsedClockSeconds, float AbsWheelSpee
11651165
{
11661166
IncreaseForce(ref CCThrottleOrDynBrakePercent, elapsedClockSeconds, 0);
11671167
}
1168+
if (DynamicBrakeIsSelectedForceDependant)
1169+
{
1170+
float maxPercent = (MaxForceSelectorIsDiscrete ? (int)SelectedMaxAccelerationStep : SelectedMaxAccelerationStep) * 100 / SpeedRegulatorMaxForceSteps;
1171+
if (CCThrottleOrDynBrakePercent < -maxPercent)
1172+
CCThrottleOrDynBrakePercent = -maxPercent;
1173+
}
11681174
}
11691175
if (UseTrainBrakeAndDynBrake || !Locomotive.DynamicBrakeAvailable) // use TrainBrake
11701176
SetTrainBrake(ref trainBrakePercent, elapsedClockSeconds, deltaSpeedMpS);
@@ -1186,7 +1192,7 @@ public void CalculateRequiredForce(float elapsedClockSeconds, float AbsWheelSpee
11861192
}
11871193
else // start braking
11881194
{
1189-
if (CCThrottleOrDynBrakePercent >= 0)
1195+
if (CCThrottleOrDynBrakePercent > 0)
11901196
{
11911197
DecreaseForce(ref CCThrottleOrDynBrakePercent, elapsedClockSeconds, 0);
11921198
}
@@ -1198,12 +1204,19 @@ public void CalculateRequiredForce(float elapsedClockSeconds, float AbsWheelSpee
11981204
AccelerationDemandMpSS = -(float)Math.Sqrt(val);
11991205
if (RelativeAccelerationMpSS > AccelerationDemandMpSS)
12001206
{
1201-
float maxPercent = DynamicBrakeIsSelectedForceDependant ? ((MaxForceSelectorIsDiscrete ? (int)SelectedMaxAccelerationStep : SelectedMaxAccelerationStep) * 100 / SpeedRegulatorMaxForceSteps) : 100;
1202-
DecreaseForce(ref CCThrottleOrDynBrakePercent, elapsedClockSeconds, -maxPercent);
1207+
float maxStep = (RelativeAccelerationMpSS - AccelerationDemandMpSS) * 2;
1208+
DecreaseForce(ref CCThrottleOrDynBrakePercent, elapsedClockSeconds, Math.Max(CCThrottleOrDynBrakePercent-maxStep, -100));
12031209
}
12041210
else if (RelativeAccelerationMpSS + 0.01f < AccelerationDemandMpSS)
12051211
{
1206-
IncreaseForce(ref CCThrottleOrDynBrakePercent, elapsedClockSeconds, 0);
1212+
float maxStep = (AccelerationDemandMpSS - RelativeAccelerationMpSS) * 2;
1213+
IncreaseForce(ref CCThrottleOrDynBrakePercent, elapsedClockSeconds, Math.Min(CCThrottleOrDynBrakePercent+maxStep, 0));
1214+
}
1215+
if (DynamicBrakeIsSelectedForceDependant)
1216+
{
1217+
float maxPercent = (MaxForceSelectorIsDiscrete ? (int)SelectedMaxAccelerationStep : SelectedMaxAccelerationStep) * 100 / SpeedRegulatorMaxForceSteps;
1218+
if (CCThrottleOrDynBrakePercent < -maxPercent)
1219+
CCThrottleOrDynBrakePercent = -maxPercent;
12071220
}
12081221
}
12091222
if (UseTrainBrakeAndDynBrake || !Locomotive.DynamicBrakeAvailable) // use TrainBrake

0 commit comments

Comments
 (0)