Skip to content

Commit d4e79e2

Browse files
committed
Trainwise dynamic brake blending table
1 parent 0a9b8a6 commit d4e79e2

File tree

4 files changed

+18
-6
lines changed

4 files changed

+18
-6
lines changed

Source/Orts.Simulation/Common/Scripting/BrakeController.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,6 @@ public void SetUpdateValue(float value)
226226
/// </summary>
227227
public void SetDynamicBrakeIntervention(float value)
228228
{
229-
if (value > 0 && Host.TrainDynamicBrakeIntervention <= 0)
230-
Host.TrainDynamicBrakeCommandStartTime = Host.Simulator.ClockTime;
231229
if (value <= 0)
232230
Host.TrainDynamicBrakeIntervention = -1;
233231
else Host.TrainDynamicBrakeIntervention = Math.Min(value, 1);

Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,7 @@ public override void Parse(string lowercasetoken, STFReader stf)
943943
case "engine(ortstrainbrakescontrollerslowapplicationrate":
944944
case "engine(ortstrainbrakecontroller":
945945
case "engine(enginecontrollers(brake_train":
946+
case "engine(ortstraindynamicblendingtable":
946947
TrainBrakeController.Parse(lowercasetoken, stf);
947948
TrainBrakeFitted = true;
948949
break;

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Controllers/BrakeController.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public bool OverchargeButtonPressed
152152
public float FullServReductionPSI { get; private set; }
153153
public float MinReductionPSI { get; private set; }
154154
public float TrainDynamicBrakeIntervention { get; set; } = -1;
155-
public double TrainDynamicBrakeCommandStartTime { get; set; }
155+
InterpolatorDiesel2D DynamicBrakeBlendingTable;
156156

157157
/// <summary>
158158
/// Needed for proper mouse operation in the cabview
@@ -227,6 +227,8 @@ public ScriptedBrakeController(ScriptedBrakeController controller, MSTSLocomotiv
227227
(item) => { Notches.Add(new MSTSNotch(item)); }
228228
);
229229

230+
DynamicBrakeBlendingTable = controller.DynamicBrakeBlendingTable;
231+
230232
Initialize();
231233
}
232234

@@ -321,6 +323,9 @@ public void Parse(string lowercasetoken, STFReader stf)
321323
case "engine(ortsenginebrakecontroller":
322324
ScriptName = stf.ReadStringBlock(null);
323325
break;
326+
case "engine(ortstraindynamicblendingtable":
327+
DynamicBrakeBlendingTable = new InterpolatorDiesel2D(stf, false);
328+
break;
324329
}
325330
}
326331

@@ -335,8 +340,10 @@ public void Initialize()
335340
}
336341
if (Script == null)
337342
{
338-
Script = new MSTSBrakeController() as BrakeController;
339-
(Script as MSTSBrakeController).ForceControllerReleaseGraduated = Simulator.Settings.GraduatedRelease;
343+
var mstsController = new MSTSBrakeController();
344+
mstsController.ForceControllerReleaseGraduated = Simulator.Settings.GraduatedRelease;
345+
mstsController.DynamicBrakeBlendingTable = DynamicBrakeBlendingTable;
346+
Script = mstsController as BrakeController;
340347
}
341348

342349
Script.AttachToHost(this);

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Controllers/MSTSBrakeController.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// along with Open Rails. If not, see <http://www.gnu.org/licenses/>.
1717

1818
using System;
19+
using Orts.Parsers.Msts;
1920
using ORTS.Scripting.Api;
2021

2122
namespace Orts.Simulation.RollingStocks.SubSystems.Controllers
@@ -37,9 +38,10 @@ public class MSTSBrakeController: BrakeController
3738
public bool ForceControllerReleaseGraduated;
3839
bool BrakeControllerInitialised; // flag to allow PreviousNotchPosition to be initially set.
3940
MSTSNotch PreviousNotchPosition;
40-
4141
bool EnforceMinimalReduction = false;
4242

43+
public InterpolatorDiesel2D DynamicBrakeBlendingTable;
44+
4345
public MSTSBrakeController()
4446
{
4547
}
@@ -70,6 +72,10 @@ public override float Update(float elapsedSeconds)
7072
IntermediateValue = NotchController.IntermediateValue;
7173
SetUpdateValue(NotchController.UpdateValue);
7274
CurrentNotch = NotchController.CurrentNotch;
75+
if (DynamicBrakeBlendingTable != null)
76+
{
77+
SetDynamicBrakeIntervention(DynamicBrakeBlendingTable.Get(CurrentValue(), SpeedMpS()));
78+
}
7379
return value;
7480
}
7581

0 commit comments

Comments
 (0)