From be35e05f4d2e0fba55d7d462e0909bc136a5350b Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Tue, 22 Mar 2022 15:29:57 +0100
Subject: [PATCH] PowertrainBuilder: Reformated
 BuildSimpleSerialHybridPowertrain

---
 .../Simulation/Impl/PowertrainBuilder.cs      | 75 ++++++++-----------
 1 file changed, 33 insertions(+), 42 deletions(-)

diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 9650ae8a99..9b226d18cd 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -860,64 +860,55 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			var ctl = new SimpleHybridController(container, es);
 
-			var pos = data.ElectricMachinesData.Select(x => x.Item1).First(x => x != PowertrainPosition.GEN);
-
+			//Vehicle-->Wheels-->SimpleHybridController-->Brakes
 			var vehicle = new Vehicle(container, data.VehicleData, data.AirdragData);
 			var powertrain = vehicle
-				.AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius,
-					data.VehicleData.WheelsInertia))
+				.AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia))
 				.AddComponent(ctl)
 				.AddComponent(new Brakes(container));
 
+			var pos = data.ElectricMachinesData.First(x => x.Item1 != PowertrainPosition.GEN).Item1;
 			switch (pos) {
-				case PowertrainPosition.HybridPositionNotSet:
-					throw new VectoException("invalid powertrain position");
+				case PowertrainPosition.BatteryElectricE4:
+					//-->Engine E4
+					powertrain.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE4,
+						data.ElectricMachinesData, container, es, ctl));
+
+					new DummyGearboxInfo(container);
+					new ATClutchInfo(container);
+					break;
+
+				case PowertrainPosition.BatteryElectricE3:
+					//-->AxleGear-->Engine E3
+					powertrain.AddComponent(new AxleGear(container, data.AxleGearData))
+						.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE3,
+							data.ElectricMachinesData, container, es, ctl));
+
+					new DummyGearboxInfo(container);
+					new ATClutchInfo(container);
+					break;
+
 				case PowertrainPosition.BatteryElectricE2:
+					//-->AxleGear-->(AngleDrive)-->(Output Retarder)-->APTNGearbox or Gearbox-->(Input Retarder)-->Engine E2
 					var gearbox = data.GearboxData.Type.AutomaticTransmission()
-						? (IHybridControlledGearbox)new APTNGearbox(container, ctl.ShiftStrategy)
+						? new APTNGearbox(container, ctl.ShiftStrategy)
 						: new Gearbox(container, ctl.ShiftStrategy);
-					powertrain = powertrain.AddComponent(new AxleGear(container, data.AxleGearData))
-						.AddComponent(data.AngledriveData != null
-							? new Angledrive(container, data.AngledriveData)
-							: null)
-						.AddComponent((IGearbox)gearbox, data.Retarder, container)
-						.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE2, data.ElectricMachinesData,
-							container,
-							es, ctl));
+
+					powertrain.AddComponent(new AxleGear(container, data.AxleGearData))
+						.AddComponent(data.AngledriveData != null ? new Angledrive(container, data.AngledriveData) : null)
+						.AddComponent(gearbox, data.Retarder, container)
+						.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE2,
+							data.ElectricMachinesData, container, es, ctl));
+
 					ctl.Gearbox = gearbox;
 					if (data.GearboxData.Type.AutomaticTransmission()) {
 						new DummyEngineInfo(container);
 					}
 					break;
-				case PowertrainPosition.BatteryElectricE3:
-					powertrain = powertrain.AddComponent(new AxleGear(container, data.AxleGearData))
-						.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE3, data.ElectricMachinesData,
-							container,
-							es, ctl));
-					new DummyGearboxInfo(container);
-					//new MockEngineInfo(container);
-					new ATClutchInfo(container);
-					break;
-				case PowertrainPosition.BatteryElectricE4:
-					powertrain = powertrain.AddComponent(GetElectricMachine(PowertrainPosition.BatteryElectricE4, data.ElectricMachinesData,
-							container,
-							es, ctl));
-					new DummyGearboxInfo(container);
-					//new MockEngineInfo(container);
-					new ATClutchInfo(container);
-					break;
-				case PowertrainPosition.HybridP0:
-				case PowertrainPosition.HybridP1:
-				case PowertrainPosition.HybridP2_5:
-				case PowertrainPosition.HybridP2:
-				case PowertrainPosition.HybridP3:
-				case PowertrainPosition.HybridP4:
-
-					throw new VectoException("testcase does not support parallel powertrain configurations");
+
 				default:
-					throw new ArgumentOutOfRangeException(nameof(pos), pos, null);
+					throw new ArgumentOutOfRangeException(nameof(pos), pos, "Invalid engine powertrain position for simple serial hybrid vehicles.");
 			}
-
 		}
 
 		public void BuildSimpleGenSet(VectoRunData data, VehicleContainer container)
-- 
GitLab