From 7a5641cd576598a2e1344879d4d067621e3e9883 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 19 Feb 2019 15:07:07 +0100
Subject: [PATCH] default driver strategy: repeat handling of
 overspeed/gearshift as this may occur in different combinations

---
 .../Impl/DefaultDriverStrategy.cs             | 24 +++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index 2799c6fc18..2dc82a9a78 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -818,17 +818,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 
 			// handle the SpeedLimitExceeded Response and Gearshift Response separately in case it occurs in one of the requests in the second try
-			response.Switch().Case<ResponseGearShift>(
+			for (var i = 0; i < 3 && (response is ResponseGearShift || response is ResponseSpeedLimitExceeded); i++) {
+				response.Switch()
+				.Case<ResponseGearShift>(
 						r => { response = Driver.DrivingActionRoll(absTime, ds, targetVelocity, gradient); })
-					.Case<ResponseSpeedLimitExceeded>(
-						() => {
-							response = Driver.DrivingActionBrake(
-								absTime, ds, DataBus.VehicleSpeed,
-								gradient);
-							if (response is ResponseOverload && !DataBus.ClutchClosed(absTime)) {
-								response = Driver.DrivingActionRoll(absTime, ds, DataBus.VehicleSpeed, gradient);
-							}
-						});
+				.Case<ResponseSpeedLimitExceeded>(
+					() => {
+						response = Driver.DrivingActionBrake(
+							absTime, ds, DataBus.VehicleSpeed,
+							gradient);
+						if (response is ResponseOverload && !DataBus.ClutchClosed(absTime)) {
+							response = Driver.DrivingActionRoll(absTime, ds, DataBus.VehicleSpeed, gradient);
+						}
+					});
+			}
+
 			return response;
 		}
 
-- 
GitLab