@@ -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