@@ -103,7 +103,8 @@ public float SetSpeedKpHOrMpH
103103 public float DynamicBrakeMaxForceAtSelectorStep = 0 ;
104104 public float ? ThrottlePercent { get ; private set ; }
105105 public float ? DynamicBrakePercent { get ; private set ; }
106- public float TrainBrakePercent { get ; private set ; }
106+ public float TrainBrakePercent { get ; private set ; }
107+ public float EngineBrakePercent { get ; private set ; }
107108 protected float trainLength = 0 ;
108109 public int TrainLengthMeters = 0 ;
109110 public float CurrentSelectedSpeedMpS = 0 ;
@@ -447,6 +448,7 @@ public void Update(float elapsedClockSeconds)
447448 ThrottlePercent = null ;
448449 DynamicBrakePercent = null ;
449450 TrainBrakePercent = 0 ;
451+ EngineBrakePercent = 0 ;
450452 return ;
451453 }
452454
@@ -477,6 +479,7 @@ public void Update(float elapsedClockSeconds)
477479 ThrottlePercent = null ;
478480 DynamicBrakePercent = null ;
479481 TrainBrakePercent = 0 ;
482+ EngineBrakePercent = 0 ;
480483 }
481484 else if ( SpeedRegMode == SpeedRegulatorMode . Auto )
482485 {
@@ -500,13 +503,18 @@ public void Update(float elapsedClockSeconds)
500503 timeFromEngineMoved = 0 ;
501504 reducingForce = true ;
502505 }
503- if ( SpeedRegulatorOptions . Contains ( "engageforceonnonzerospeed" ) && SelectedSpeedMpS > 0 )
506+ if ( SpeedRegulatorOptions . Contains ( "engageforceonnonzerospeed" ) && SelectedSpeedMpS > 0 && ( SpeedSelMode != SpeedSelectorMode . Parking || ! ForceResetRequiredAfterBraking || ( WasForceReset && SelectedMaxAccelerationPercent > 0 ) ) )
504507 {
505508 SpeedSelMode = SpeedSelectorMode . On ;
506509 SpeedRegMode = SpeedRegulatorMode . Auto ;
507510 SkipThrottleDisplay = true ;
508511 reducingForce = false ;
509512 }
513+ else if ( SpeedRegulatorOptions . Contains ( "engageparkingonzerospeed" ) && SelectedSpeedMpS == 0 && Locomotive . AbsWheelSpeedMpS <= ( SpeedIsMph ? MpS . FromMpH ( ParkingBrakeEngageSpeed ) : MpS . FromKpH ( ParkingBrakeEngageSpeed ) ) && SpeedSelMode != SpeedSelectorMode . Parking )
514+ {
515+ SpeedSelMode = SpeedSelectorMode . Parking ;
516+ WasForceReset = false ;
517+ }
510518 if ( Locomotive . TrainBrakeController . MaxPressurePSI - Locomotive . BrakeSystem . BrakeLine1PressurePSI < 1 && Locomotive . Train . BrakeLine4 <= 0 )
511519 {
512520 if ( TrainBrakePercent == 0 ) CCIsUsingTrainBrake = false ;
@@ -542,9 +550,6 @@ public void Update(float elapsedClockSeconds)
542550 ( ForceResetRequiredAfterBraking && ( TrainBrakeCommandHasPriorityOverAcceleratingCruiseControl && ( CCThrottleOrDynBrakePercent > 0 || TrainBrakeCommandHasPriorityOverCruiseControl ) ) &&
543551 ( ! WasForceReset || ( WasBraking && SelectedMaxAccelerationPercent > 0 ) ) ) )
544552 {
545- if ( SpeedSelMode == SpeedSelectorMode . Parking )
546- if ( Locomotive . AbsWheelSpeedMpS < ( SpeedIsMph ? MpS . FromMpH ( ParkingBrakeEngageSpeed ) : MpS . FromKpH ( ParkingBrakeEngageSpeed ) ) )
547- Locomotive . SetEngineBrakePercent ( ParkingBrakePercent ) ;
548553 CCThrottleOrDynBrakePercent = 0 ;
549554 TrainBrakePercent = 0 ;
550555 }
@@ -567,6 +572,15 @@ public void Update(float elapsedClockSeconds)
567572 }
568573 else if ( CCThrottleOrDynBrakePercent < 0 ) DynamicBrakePercent = - CCThrottleOrDynBrakePercent ;
569574 else DynamicBrakePercent = - 1 ;
575+ if ( SpeedSelMode == SpeedSelectorMode . Parking && ! EngineBrakePriority )
576+ {
577+ if ( Locomotive . AbsWheelSpeedMpS <= ( SpeedIsMph ? MpS . FromMpH ( ParkingBrakeEngageSpeed ) : MpS . FromKpH ( ParkingBrakeEngageSpeed ) ) )
578+ EngineBrakePercent = ParkingBrakePercent ;
579+ }
580+ else
581+ {
582+ EngineBrakePercent = 0 ;
583+ }
570584 if ( ! IsActive && wasActive )
571585 {
572586 CCIsUsingTrainBrake = false ;
@@ -724,7 +738,6 @@ public void SpeedSelectorModeStartIncrease()
724738 while ( ! test )
725739 {
726740 SpeedSelMode ++ ;
727- if ( SpeedSelMode != SpeedSelectorMode . Parking && ! EngineBrakePriority ) Locomotive . SetEngineBrakePercent ( 0 ) ;
728741 switch ( SpeedSelMode )
729742 {
730743 case SpeedSelectorMode . Neutral : if ( SpeedRegulatorOptions . Contains ( "selectorneutral" ) ) test = true ; break ;
@@ -1194,9 +1207,6 @@ public void CalculateRequiredForce(float elapsedClockSeconds, float AbsWheelSpee
11941207 {
11951208 CCThrottleOrDynBrakePercent = 0 ;
11961209 }
1197-
1198- if ( AbsWheelSpeedMpS < ( SpeedIsMph ? MpS . FromMpH ( ParkingBrakeEngageSpeed ) : MpS . FromKpH ( ParkingBrakeEngageSpeed ) ) )
1199- Locomotive . SetEngineBrakePercent ( ParkingBrakePercent ) ;
12001210 }
12011211 else if ( SpeedSelMode == SpeedSelectorMode . Neutral || SpeedSelMode < SpeedSelectorMode . Start && ! SpeedRegulatorOptions . Contains ( "startfromzero" ) && AbsWheelSpeedMpS < SafeSpeedForAutomaticOperationMpS )
12021212 {
0 commit comments