@@ -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