Skip to content

Commit

Permalink
Add SignalTypeName and DrawStateName to SignalFeatures
Browse files Browse the repository at this point in the history
  • Loading branch information
Sharpe49 committed Oct 31, 2021
1 parent a4628ab commit 41d74e4
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -692,16 +692,20 @@ public enum MonitoringStatus
public struct SignalFeatures
{
public readonly string MainHeadSignalTypeName;
public readonly string SignalTypeName;
public readonly Aspect Aspect;
public readonly string DrawStateName;
public readonly float DistanceM;
public readonly float SpeedLimitMpS;
public readonly float AltitudeM;
public readonly string TextAspect;

public SignalFeatures(string mainHeadSignalTypeName, Aspect aspect, float distanceM, float speedLimitMpS, float altitudeM, string textAspect = "")
public SignalFeatures(string mainHeadSignalTypeName, string signalTypeName, Aspect aspect, string drawStateName, float distanceM, float speedLimitMpS, float altitudeM, string textAspect = "")
{
MainHeadSignalTypeName = mainHeadSignalTypeName;
SignalTypeName = signalTypeName;
Aspect = aspect;
DrawStateName = drawStateName;
DistanceM = distanceM;
SpeedLimitMpS = speedLimitMpS;
AltitudeM = altitudeM;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -593,10 +593,12 @@ T NextGenericSignalItem<T>(int itemSequenceIndex, ref T retval, float maxDistanc
return retval;
}

SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequenceIndex, float maxDistanceM, Train.TrainObjectItem.TRAINOBJECTTYPE type)
SignalFeatures NextGenericSignalFeatures(string signalFunctionTypeName, int itemSequenceIndex, float maxDistanceM, Train.TrainObjectItem.TRAINOBJECTTYPE type)
{
var mainHeadSignalTypeName = "";
var signalTypeName = "";
var aspect = Aspect.None;
var drawStateName = "";
var distanceM = float.MaxValue;
var speedLimitMpS = -1f;
var altitudeM = float.MinValue;
Expand All @@ -609,7 +611,7 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence

int index = dir == 0 ? Locomotive.Train.PresentPosition[dir].RouteListIndex :
Locomotive.Train.ValidRoute[dir].GetRouteIndex(Locomotive.Train.PresentPosition[dir].TCSectionIndex, 0);
int fn_type = Locomotive.Train.signalRef.ORTSSignalTypes.IndexOf(signalTypeName);
int fn_type = Locomotive.Train.signalRef.ORTSSignalTypes.IndexOf(signalFunctionTypeName);
if (index < 0)
goto Exit;
if (type == Train.TrainObjectItem.TRAINOBJECTTYPE.SIGNAL)
Expand All @@ -629,7 +631,7 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
// All OK, we can retrieve the data for the required signal;
distanceM = trainSignal.DistanceToTrainM;
mainHeadSignalTypeName = trainSignal.SignalObject.SignalHeads[0].SignalTypeName;
if (signalTypeName == "NORMAL")
if (signalFunctionTypeName == "NORMAL")
{
aspect = (Aspect)trainSignal.SignalState;
speedLimitMpS = trainSignal.AllowedSpeedMpS;
Expand All @@ -639,7 +641,13 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
{
aspect = (Aspect)Locomotive.Train.signalRef.TranslateToTCSAspect(trainSignal.SignalObject.this_sig_lr(fn_type));
}

var functionHead = trainSignal.SignalObject.SignalHeads.Find(head => head.ORTSsigFunctionIndex == fn_type);
signalTypeName = functionHead.SignalTypeName;
if (functionHead.draw_state >= 0)
{
drawStateName = functionHead.signalType.DrawStates.First(d => d.Value.Index == functionHead.draw_state).Value.Name;
}
textAspect = functionHead?.TextSignalAspect ?? "";
}
else if (type == Train.TrainObjectItem.TRAINOBJECTTYPE.SPEEDPOST)
Expand All @@ -657,7 +665,7 @@ SignalFeatures NextGenericSignalFeatures(string signalTypeName, int itemSequence
}

Exit:
return new SignalFeatures(mainHeadSignalTypeName: mainHeadSignalTypeName, aspect: aspect, distanceM: distanceM, speedLimitMpS: speedLimitMpS,
return new SignalFeatures(mainHeadSignalTypeName: mainHeadSignalTypeName, signalTypeName: signalTypeName, aspect: aspect, drawStateName: drawStateName, distanceM: distanceM, speedLimitMpS: speedLimitMpS,
altitudeM: altitudeM, textAspect: textAspect);
}

Expand Down

0 comments on commit 41d74e4

Please sign in to comment.