diff --git a/VectoCore/VectoCore/Models/SimulationComponent/IDriverActions.cs b/VectoCore/VectoCore/Models/SimulationComponent/IDriverActions.cs index d76fbcf6059e766e6eeede5268112a54309af9f9..aba54b2fcfe60dfebdd8b95a091c82ed7bf4f687 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/IDriverActions.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/IDriverActions.cs @@ -32,6 +32,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Simulation.DataBus; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; using DriverData = TUGraz.VectoCore.Models.SimulationComponent.Data.DriverData; namespace TUGraz.VectoCore.Models.SimulationComponent @@ -83,12 +84,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent /// <param name="gradient"></param> /// <param name="previousResponse"></param> /// <param name="targetDistance"></param> + /// <param name="overrideAction"></param> /// <returns> /// * ResponseSuccess /// * ResponseDrivingCycleDistanceExceeded: vehicle is at low speed, coasting would lead to stop before ds is reached. /// </returns> IResponse DrivingActionBrake(Second absTime, Meter ds, MeterPerSecond nextTargetSpeed, Radian gradient, - IResponse previousResponse = null, Meter targetDistance = null); + IResponse previousResponse = null, Meter targetDistance = null, DrivingAction? overrideAction = null); /// <summary> /// perform a 'roll driving action', i.e., the clutch is open and the vehicle rolls without motoring. adjust the acceleration diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 054ad5684ae6f6cb12421b0b1af067c0a0dfde0f..fd02cf2bd42d33cd595ee6bdfc4da56284d6ab83 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -653,7 +653,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl response = Driver.DrivingActionAccelerate(absTime, ds, 1.KMPHtoMeterPerSecond(), gradient); if (response is ResponseUnderload) { - response = Driver.DrivingActionBrake(absTime, ds, 1.KMPHtoMeterPerSecond(), gradient, response); + response = Driver.DrivingActionBrake(absTime, ds, 1.KMPHtoMeterPerSecond(), gradient, response, overrideAction: DrivingAction.Accelerate); } } else { response = Driver.DrivingActionBrake( diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs index 34bfd9b2a0b0fd7f05b59f4b23d6c63927da96b3..6427763daa34ba797f3aa2d1ebc0dcddc63e681e 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs @@ -478,10 +478,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return response; } - public IResponse DrivingActionBrake(Second absTime, Meter ds, MeterPerSecond nextTargetSpeed, Radian gradient, - IResponse previousResponse = null, Meter targetDistance = null) + public IResponse DrivingActionBrake(Second absTime, Meter ds, MeterPerSecond nextTargetSpeed, Radian gradient, IResponse previousResponse = null, Meter targetDistance = null, DrivingAction? overrideAction = null) { - DrivingAction = DrivingAction.Brake; + DrivingAction = overrideAction ?? DrivingAction.Brake; IterationStatistics.Increment(this, "Brake"); Log.Debug("DrivingAction Brake");