Skip to content

Commit f70793e

Browse files
authored
Merge pull request #561 from cesarBLG/manual-callon-advanced
Manual call-on is reset when passing an advanced signal - https://bugs.launchpad.net/or/+bug/1955907
2 parents 5008448 + 36dcd19 commit f70793e

File tree

3 files changed

+8
-24
lines changed

3 files changed

+8
-24
lines changed

Source/Orts.Simulation/Simulation/Physics/Train.cs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ public enum TRAINTYPE
218218
public int IndexNextSignal = -1; // Index in SignalObjectItems for next signal
219219
public int IndexNextSpeedlimit = -1; // Index in SignalObjectItems for next speedpost
220220
public SignalObject[] NextSignalObject = new SignalObject[2]; // direct reference to next signal
221-
public SignalObject AllowedCallOnSignal; // Signal for which train has call on allowed by dispatcher
222221

223222
// Local max speed independently from signal and speedpost speed;
224223
// depends from various parameters like route max speed, overall or section efficiency of service,
@@ -2878,8 +2877,6 @@ public void UpdateManual(float elapsedClockSeconds)
28782877
// system will take back control of the signal
28792878
if (signalObject.holdState == SignalObject.HoldState.ManualPass ||
28802879
signalObject.holdState == SignalObject.HoldState.ManualApproach) signalObject.holdState = SignalObject.HoldState.None;
2881-
2882-
AllowedCallOnSignal = null;
28832880
}
28842881
UpdateSectionStateManual(); // update track occupation //
28852882
UpdateManualMode(SignalObjIndex); // update route clearance //
@@ -2907,8 +2904,6 @@ public void UpdateExplorer(float elapsedClockSeconds)
29072904
// system will take back control of the signal
29082905
if (signalObject.holdState == SignalObject.HoldState.ManualPass ||
29092906
signalObject.holdState == SignalObject.HoldState.ManualApproach) signalObject.holdState = SignalObject.HoldState.None;
2910-
2911-
AllowedCallOnSignal = null;
29122907
}
29132908
UpdateSectionStateExplorer(); // update track occupation //
29142909
UpdateExplorerMode(SignalObjIndex); // update route clearance //
@@ -7441,8 +7436,6 @@ public void UpdateRouteClearanceAhead(int signalObjectIndex, int backward, float
74417436
signalObject.holdState = SignalObject.HoldState.None;
74427437
}
74437438

7444-
AllowedCallOnSignal = null;
7445-
74467439
signalObject.resetSignalEnabled();
74477440
}
74487441
}
@@ -7594,9 +7587,6 @@ public bool CheckStoppedTrains(TCSubpathRoute thisRoute)
75947587

75957588
public virtual bool TestCallOn(SignalObject thisSignal, bool allowOnNonePlatform, TCSubpathRoute thisRoute, string dumpfile)
75967589
{
7597-
if (AllowedCallOnSignal == thisSignal)
7598-
return true;
7599-
76007590
bool intoPlatform = false;
76017591

76027592
foreach (Train.TCRouteElement routeElement in thisSignal.signalRoute)
@@ -7941,8 +7931,6 @@ public void UpdateManualMode(int signalObjectIndex)
79417931
if (thisSignal.holdState == SignalObject.HoldState.ManualPass ||
79427932
thisSignal.holdState == SignalObject.HoldState.ManualApproach) thisSignal.holdState = SignalObject.HoldState.None;
79437933

7944-
AllowedCallOnSignal = null;
7945-
79467934
thisSignal.resetSignalEnabled();
79477935
}
79487936

Source/Orts.Simulation/Simulation/Signalling/Signals.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8417,6 +8417,7 @@ public enum HoldState // signal is locked in hold
84178417
private InternalBlockstate internalBlockState = InternalBlockstate.Open; // internal blockstate
84188418
public Permission hasPermission = Permission.Denied; // Permission to pass red signal
84198419
public HoldState holdState = HoldState.None;
8420+
public bool CallOnManuallyAllowed;
84208421

84218422
public List<int> sigfound = new List<int>(); // active next signal - used for signals with NORMAL heads only
84228423
public int reqNormalSignal = -1; // ref of normal signal requesting route clearing (only used for signals without NORMAL heads)
@@ -10110,8 +10111,8 @@ public void Update()
1011010111
public void resetSignalEnabled()
1011110112
{
1011210113
// reset train information
10113-
1011410114
enabledTrain = null;
10115+
CallOnManuallyAllowed = false;
1011510116
trainRouteDirectionIndex = 0;
1011610117
signalRoute.Clear();
1011710118
fullRoute = hasFixedRoute;
@@ -12196,7 +12197,7 @@ public bool TrainHasCallOn(bool allowOnNonePlatform, bool allowAdvancedSignal, s
1219612197

1219712198
if (enabledTrain.Train != null && signalRoute != null)
1219812199
{
12199-
bool callOnValid = enabledTrain.Train.TestCallOn(this, allowOnNonePlatform, signalRoute, dumpfile);
12200+
bool callOnValid = CallOnManuallyAllowed || enabledTrain.Train.TestCallOn(this, allowOnNonePlatform, signalRoute, dumpfile);
1220012201
return (callOnValid);
1220112202
}
1220212203

@@ -12720,12 +12721,12 @@ public void SetManualCallOn(bool state)
1272012721
{
1272112722
if (state && CallOnEnabled)
1272212723
{
12723-
enabledTrain.Train.AllowedCallOnSignal = this;
1272412724
clearHoldSignalDispatcher();
12725+
CallOnManuallyAllowed = true;
1272512726
}
12726-
else if (enabledTrain.Train.AllowedCallOnSignal == this)
12727+
else
1272712728
{
12728-
enabledTrain.Train.AllowedCallOnSignal = null;
12729+
CallOnManuallyAllowed = false;
1272912730
}
1273012731
}
1273112732
}

Source/RunActivity/Viewer3D/Debugging/DebugViewerForm.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1547,13 +1547,8 @@ private void HandlePickedSignal()
15471547
boxSetSignal.Items.RemoveAt(4);
15481548

15491549
if (signalPickedItem.Signal.enabledTrain != null && signalPickedItem.Signal.CallOnEnabled)
1550-
{
1551-
if (signalPickedItem.Signal.enabledTrain.Train.AllowedCallOnSignal != signalPickedItem.Signal)
1552-
boxSetSignal.Items.Add("Enable call on");
1553-
/*else
1554-
boxSetSignal.Items.Add("Disable call on");*/
1555-
// To disable Call On signal must be manually set to stop, to avoid signal state change
1556-
// in the interval between this list is shown and the option is selected by dispatcher
1550+
{
1551+
if (!signalPickedItem.Signal.CallOnManuallyAllowed) boxSetSignal.Items.Add("Allow call on");
15571552
}
15581553

15591554
boxSetSignal.Location = new System.Drawing.Point(LastCursorPosition.X + 2, y);

0 commit comments

Comments
 (0)