diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs index e825fcab839bea6c55ce2506ef41174c6fa6e01f..94dc120c21a8c6bdee90fafee8ffaac091eb9cec 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs @@ -178,9 +178,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies var disengageTCEngineSpeedLowerIdle = braking && torqueNegative && gear1C && inAngularVelocity.IsSmallerOrEqual(DataBus.EngineInfo.EngineIdleSpeed); - if (disengageBeforeHalting || disengageTCEngineSpeedLowerIdle || disengageAngularVelocityZero || - disengageTOutNegativeAndTInPositive) { - _nextGear.SetState(absTime, disengaged: true, gear: Gears.First()); + if (disengageBeforeHalting + || disengageTCEngineSpeedLowerIdle + || disengageAngularVelocityZero + || disengageTOutNegativeAndTInPositive) + { + // In order to make it to the halting distance do not allow disengaging if propulsion from engine is needed. + bool allowDisengageGear = braking && !torqueNegative && slowerThanDisengageSpeed; + + _nextGear.SetState(absTime, disengaged: !allowDisengageGear, gear: Gears.First()); return true; }