Skip to content

Commit a81711c

Browse files
committed
Add SignalTypeName and DrawStateName to SignalFeatures
https://blueprints.launchpad.net/or/+spec/tcs-extensions
1 parent 84864e0 commit a81711c

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,16 +692,20 @@ public enum MonitoringStatus
692692
public struct SignalFeatures
693693
{
694694
public readonly string MainHeadSignalTypeName;
695+
public readonly string SignalTypeName;
695696
public readonly Aspect Aspect;
697+
public readonly string DrawStateName;
696698
public readonly float DistanceM;
697699
public readonly float SpeedLimitMpS;
698700
public readonly float AltitudeM;
699701
public readonly string TextAspect;
700702

701-
public SignalFeatures(string mainHeadSignalTypeName, Aspect aspect, float distanceM, float speedLimitMpS, float altitudeM, string textAspect = "")
703+
public SignalFeatures(string mainHeadSignalTypeName, string signalTypeName, Aspect aspect, string drawStateName, float distanceM, float speedLimitMpS, float altitudeM, string textAspect = "")
702704
{
703705
MainHeadSignalTypeName = mainHeadSignalTypeName;
706+
SignalTypeName = signalTypeName;
704707
Aspect = aspect;
708+
DrawStateName = drawStateName;
705709
DistanceM = distanceM;
706710
SpeedLimitMpS = speedLimitMpS;
707711
AltitudeM = altitudeM;

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -593,10 +593,12 @@ T NextGenericSignalItem<T>(int itemSequenceIndex, ref T retval, float maxDistanc
593593
return retval;
594594
}
595595

596-
SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequenceIndex, float maxDistanceM, Train.TrainObjectItem.TRAINOBJECTTYPE type)
596+
SignalFeatures NextGenericSignalFeatures(string signalFunctionTypeName, int itemSequenceIndex, float maxDistanceM, Train.TrainObjectItem.TRAINOBJECTTYPE type)
597597
{
598598
var mainHeadSignalTypeName = "";
599+
var signalTypeName = "";
599600
var aspect = Aspect.None;
601+
var drawStateName = "";
600602
var distanceM = float.MaxValue;
601603
var speedLimitMpS = -1f;
602604
var altitudeM = float.MinValue;
@@ -609,7 +611,7 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
609611

610612
int index = dir == 0 ? Locomotive.Train.PresentPosition[dir].RouteListIndex :
611613
Locomotive.Train.ValidRoute[dir].GetRouteIndex(Locomotive.Train.PresentPosition[dir].TCSectionIndex, 0);
612-
int fn_type = Locomotive.Train.signalRef.ORTSSignalTypes.IndexOf(signalTypeName);
614+
int fn_type = Locomotive.Train.signalRef.ORTSSignalTypes.IndexOf(signalFunctionTypeName);
613615
if (index < 0)
614616
goto Exit;
615617
if (type == Train.TrainObjectItem.TRAINOBJECTTYPE.SIGNAL)
@@ -629,7 +631,7 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
629631
// All OK, we can retrieve the data for the required signal;
630632
distanceM = trainSignal.DistanceToTrainM;
631633
mainHeadSignalTypeName = trainSignal.SignalObject.SignalHeads[0].SignalTypeName;
632-
if (signalTypeName == "NORMAL")
634+
if (signalFunctionTypeName == "NORMAL")
633635
{
634636
aspect = (Aspect)trainSignal.SignalState;
635637
speedLimitMpS = trainSignal.AllowedSpeedMpS;
@@ -639,7 +641,13 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
639641
{
640642
aspect = (Aspect)Locomotive.Train.signalRef.TranslateToTCSAspect(trainSignal.SignalObject.this_sig_lr(fn_type));
641643
}
644+
642645
var functionHead = trainSignal.SignalObject.SignalHeads.Find(head => head.ORTSsigFunctionIndex == fn_type);
646+
signalTypeName = functionHead.SignalTypeName;
647+
if (functionHead.draw_state >= 0)
648+
{
649+
drawStateName = functionHead.signalType.DrawStates.First(d => d.Value.Index == functionHead.draw_state).Value.Name;
650+
}
643651
textAspect = functionHead?.TextSignalAspect ?? "";
644652
}
645653
else if (type == Train.TrainObjectItem.TRAINOBJECTTYPE.SPEEDPOST)
@@ -657,7 +665,7 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
657665
}
658666

659667
Exit:
660-
return new SignalFeatures(mainHeadSignalTypeName: mainHeadSignalTypeName, aspect: aspect, distanceM: distanceM, speedLimitMpS: speedLimitMpS,
668+
return new SignalFeatures(mainHeadSignalTypeName: mainHeadSignalTypeName, signalTypeName: signalTypeName, aspect: aspect, drawStateName: drawStateName, distanceM: distanceM, speedLimitMpS: speedLimitMpS,
661669
altitudeM: altitudeM, textAspect: textAspect);
662670
}
663671

0 commit comments

Comments
 (0)