Skip to content

Commit 74f0ec6

Browse files
committed
Fix enabling/disabling cruise control based on lever position
1 parent b0c622b commit 74f0ec6

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -820,30 +820,34 @@ public void Restore(BinaryReader inf)
820820
CCIsUsingTrainBrake = inf.ReadBoolean();
821821
}
822822

823+
public bool prevZeroThrottle;
824+
public bool prevZeroForce;
823825
public void UpdateSpeedRegulatorModeChanges()
824826
{
825827
var prevMode = SpeedRegMode;
826-
float throttle = Locomotive.ThrottleController.CurrentValue;
827-
float dynamic = (Locomotive.DynamicBrakeController?.CurrentValue ?? 0);
828+
bool zeroThrottle = Locomotive.ThrottleController.CurrentValue == 0;
829+
bool zeroDynamic = (Locomotive.DynamicBrakeController?.CurrentValue ?? 0) == 0;
828830
bool zeroForce = MaxForceSelectorController.CurrentValue == 0 && MaxForceSelectorController.SavedValue == 0;
829831
bool zeroSelectedSpeed = SpeedSelectorController.CurrentValue == 0 && SpeedSelectorController.SavedValue == 0;
832+
bool throttleFromZero = !zeroThrottle && prevZeroThrottle;
833+
bool forceFromZero = !zeroForce && prevZeroForce;
830834
if (DisableCruiseControlOnThrottleAndZeroSpeed)
831835
{
832-
if (throttle > 0 && Locomotive.AbsSpeedMpS == 0)
836+
if (throttleFromZero && Locomotive.AbsSpeedMpS == 0)
833837
{
834838
SpeedRegMode = SpeedRegulatorMode.Manual;
835839
}
836840
}
837841
if (DisableCruiseControlOnThrottleAndZeroForce)
838842
{
839-
if ((throttle > 0 || UseThrottleAsForceSelector) && zeroForce)
843+
if ((throttleFromZero || UseThrottleAsForceSelector) && zeroForce)
840844
{
841845
SpeedRegMode = SpeedRegulatorMode.Manual;
842846
}
843847
}
844848
if (DisableCruiseControlOnThrottleAndZeroForceAndZeroSpeed)
845849
{
846-
if ((throttle > 0 || UseThrottleAsForceSelector) && zeroForce && zeroSelectedSpeed)
850+
if ((throttleFromZero || UseThrottleAsForceSelector) && zeroForce && zeroSelectedSpeed)
847851
{
848852
SpeedRegMode = SpeedRegulatorMode.Manual;
849853
}
@@ -861,19 +865,21 @@ public void UpdateSpeedRegulatorModeChanges()
861865
}
862866
if (ForceRegulatorAutoWhenNonZeroSpeedSelectedAndThrottleAtZero)
863867
{
864-
if (SelectedSpeedMpS > 0 && throttle == 0 && dynamic == 0 &&
868+
if (SelectedSpeedMpS > 0 && zeroThrottle && zeroDynamic &&
865869
zeroForce && DisableCruiseControlOnThrottleAndZeroForceAndZeroSpeed)
866870
{
867871
SpeedRegMode = SpeedRegulatorMode.Auto;
868872
}
869873
}
870874
if (ForceRegulatorAutoWhenNonZeroForceSelected)
871875
{
872-
if (SelectedMaxAccelerationPercent > 0 && DisableCruiseControlOnThrottleAndZeroForce && (throttle == 0 || UseThrottleAsForceSelector) && dynamic == 0)
876+
if (forceFromZero && DisableCruiseControlOnThrottleAndZeroForce && (zeroThrottle || UseThrottleAsForceSelector) && zeroDynamic)
873877
{
874878
SpeedRegMode = SpeedRegulatorMode.Auto;
875879
}
876880
}
881+
prevZeroForce = zeroForce;
882+
prevZeroThrottle = zeroThrottle;
877883
if (prevMode != SpeedRegMode)
878884
{
879885
if (ZeroSelectedSpeedWhenPassingToThrottleMode && SpeedRegMode == SpeedRegulatorMode.Manual) SelectedSpeedMpS = 0;

0 commit comments

Comments
 (0)