Skip to content

Commit b1910d9

Browse files
committed
Add proper handling of emergency brakes
1 parent 7d41c80 commit b1910d9

File tree

2 files changed

+6
-22
lines changed

2 files changed

+6
-22
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ public int SetValue(float value)
281281

282282
public float SetPercent(float percent)
283283
{
284+
if (percent > 100) SetValue(1);
284285
float v = (MinimumValue < 0 && percent < 0 ? -MinimumValue : MaximumValue) * percent / 100;
285286
CurrentValue = MathHelper.Clamp(v, MinimumValue, MaximumValue);
286287

Source/RunActivity/Viewer3D/UserInputRailDriver.cs

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,11 @@ public void Update()
150150
Throttle.Value = Percentage(readBuffer[2], throttle) / 100;
151151
if (!fullRangeThrottle)
152152
DynamicBrake.Value = Percentage(readBuffer[2], dynamicBrake) / 100;
153-
TrainBrake.Value = Percentage(readBuffer[3], autoBrake) / 100;
153+
float trainBrake = Percentage(readBuffer[3], autoBrake) / 100;
154+
if (trainBrake >= 1 && Percentage(readBuffer[3], emergencyBrake) > 50)
155+
TrainBrake.Value = 2;
156+
else
157+
TrainBrake.Value = trainBrake;
154158
EngineBrake.Value = Percentage(readBuffer[4], independentBrake) / 100;
155159
float a = EngineBrake.Value;
156160
float calOff = (1 - a) * bailoffDisengaged.Item1 + a * bailoffDisengaged.Item2;
@@ -163,27 +167,6 @@ public void Update()
163167
{
164168
if (button is RailDriverButton rd) rd.Update(readBuffer);
165169
}
166-
167-
/* TODO: Emergency position of train brake controller is different to EBPB
168-
if (TrainBrakePercent >= 100)
169-
Emergency = Percentage(readBuffer[3], emergencyBrake) > 50;
170-
if (IsPressed(EmergencyStopCommandUp) || IsPressed(EmergencyStopCommandDown))
171-
Emergency = true;
172-
*/
173-
/* TODO: Not every command resets alerter. Should be handled by HandleEvent
174-
on TrainControlSystem elsewhere
175-
// check for alerter reset
176-
if (readBuffer?.Length >= 8 && readBufferHistory?.Length >= 8)
177-
{
178-
for (int i = 1; i <= 5; i++)
179-
{
180-
if (Math.Abs(readBuffer[i] - readBufferHistory[i]) > 1)
181-
{
182-
Changed = true;
183-
break;
184-
}
185-
}
186-
}*/
187170
}
188171
}
189172
}

0 commit comments

Comments
 (0)