Skip to content

Commit 9f90b84

Browse files
committed
Discrete selector by default unless MPC is used
1 parent 13230d5 commit 9f90b84

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/CruiseControl.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ public enum SpeedSelectorMode { Parking, Neutral, On, Start }
171171
public bool HasIndependentThrottleDynamicBrakeLever = false;
172172
public bool HasProportionalSpeedSelector = false;
173173
public bool SpeedSelectorIsDiscrete = false;
174+
private bool speedSelectorIsDiscreteSet = false;
174175
public bool DoComputeNumberOfAxles = false;
175176
public bool DisableManualSwitchToAutoWhenSetSpeedNotAtTop = false;
176177
public bool EnableSelectedSpeedSelectionWhenManualModeSet = false;
@@ -301,6 +302,7 @@ public CruiseControl(CruiseControl other, MSTSLocomotive locomotive)
301302
DisableManualSwitchToAutoWhenSetSpeedNotAtTop = other.DisableManualSwitchToAutoWhenSetSpeedNotAtTop;
302303
EnableSelectedSpeedSelectionWhenManualModeSet = other.EnableSelectedSpeedSelectionWhenManualModeSet;
303304
SpeedSelectorIsDiscrete = other.SpeedSelectorIsDiscrete;
305+
speedSelectorIsDiscreteSet = other.SpeedSelectorIsDiscrete;
304306
DoComputeNumberOfAxles = other.DoComputeNumberOfAxles;
305307
UseTrainBrakeAndDynBrake = other.UseTrainBrakeAndDynBrake;
306308
UseDynBrake = other.UseDynBrake;
@@ -392,7 +394,7 @@ public void Parse(STFReader stf)
392394
case "ascspeedtakespriorityoverspeedselector": ASCSpeedTakesPriorityOverSpeedSelector = stf.ReadBoolBlock(false); break;
393395
case "hasindependentthrottledynamicbrakelever": HasIndependentThrottleDynamicBrakeLever = stf.ReadBoolBlock(false); break;
394396
case "hasproportionalspeedselector": HasProportionalSpeedSelector = stf.ReadBoolBlock(false); break;
395-
case "speedselectorisdiscrete": SpeedSelectorIsDiscrete = stf.ReadBoolBlock(false); break;
397+
case "speedselectorisdiscrete": speedSelectorIsDiscreteSet = true; SpeedSelectorIsDiscrete = stf.ReadBoolBlock(false); break;
396398
case "usetrainbrakeanddynbrake": UseTrainBrakeAndDynBrake = stf.ReadBoolBlock(false); break;
397399
case "usedynbrake": UseDynBrake = stf.ReadBoolBlock(false); break;
398400
case "speeddeltatoenabletrainbrake": SpeedDeltaToEnableTrainBrake = stf.ReadFloatBlock(STFReader.UNITS.Speed, 5f); break;
@@ -507,6 +509,13 @@ public void Initialize()
507509

508510
if (StartInAutoMode) SpeedRegMode = SpeedRegulatorMode.Auto;
509511

512+
if (!speedSelectorIsDiscreteSet)
513+
{
514+
var mpc = Locomotive.MultiPositionControllers.Where(x => x.controllerBinding == ControllerBinding.SelectedSpeed).FirstOrDefault();
515+
SpeedSelectorIsDiscrete = mpc == null;
516+
}
517+
if (SpeedSelectorIsDiscrete && SpeedRegulatorNominalSpeedStepMpS <= 0) SpeedRegulatorNominalSpeedStepMpS = MpS.FromMpS(1.0f, !SpeedIsMph);
518+
510519
if (UseThrottleAsForceSelector)
511520
{
512521
MaxForceSelectorController = Locomotive.ThrottleController;

0 commit comments

Comments
 (0)