<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.trainzsimulator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Duckblaster</id>
	<title>TrainzOnline - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.trainzsimulator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Duckblaster"/>
	<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/wiki/Special:Contributions/Duckblaster"/>
	<updated>2026-11-05T05:26:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Class_Signal&amp;diff=1154</id>
		<title>Class Signal</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Class_Signal&amp;diff=1154"/>
		<updated>2010-02-28T15:00:25Z</updated>

		<summary type="html">&lt;p&gt;Duckblaster: Added reason strings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[TrainzScript Language Reference|API Hierarchy]]&lt;br /&gt;
**[[Class GSObject|GSObject]] *&lt;br /&gt;
***[[Class GameObject|GameObject]]&lt;br /&gt;
****[[Class TrainzGameObject|TrainzGameObject]]&lt;br /&gt;
****[[Class PropertyObject|PropertyObject]] *&lt;br /&gt;
*****[[Class MeshObject|MeshObject]]&lt;br /&gt;
******[[Class MapObject|MapObject]]&lt;br /&gt;
*******[[Class Trackside|Trackside]]&lt;br /&gt;
********Signal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Provides control over trackside signal objects.&lt;br /&gt;
*Methods to get a signal&#039;s state [[Class Trackside#GetSignalState|GetSignalState()]] and  [[Class Trackside#GetSignalStateEx|GetSignalStateEx()]] can be found in the parent [[Class Trackside|Trackside]] class.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Messages==&lt;br /&gt;
*Messages sent to and from Signal objects are listed below:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{TableHeader|width=50%|margin=15px}}&lt;br /&gt;
|-&lt;br /&gt;
|bgcolor=&amp;quot;#EEEEEE&amp;quot;|&#039;&#039;&#039;Major&#039;&#039;&#039;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&#039;&#039;&#039;Minor&#039;&#039;&#039;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&#039;&#039;&#039;Source&#039;&#039;&#039;||bgcolor=&amp;quot;#EEEEEE&amp;quot; |&#039;&#039;&#039;Destination&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[Signal Messages|Signal]]||StateChanged||Signal||Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|[[Signal Messages|Train]]||Entered red signal||Signal||Train&lt;br /&gt;
|-&lt;br /&gt;
|[[Signal Messages|Train]]||Entered red signal notify||Train||Broadcast&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
&lt;br /&gt;
===Useful Terminology===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{TableHeader|width=75%|margin=15px}}&lt;br /&gt;
|-&lt;br /&gt;
|width=100|&amp;lt;b&amp;gt;In Advance&amp;lt;/b&amp;gt;||Signal 2 is said to be &amp;quot;In Advance&amp;quot; of signal 1 if a driver at signal 1 will arrive at signal 2 later&amp;lt;br&amp;gt;ie: signal 2 is currently ahead of him.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;In Rear&amp;lt;/b&amp;gt;||Signal 1 is said to be &amp;quot;In Rear&amp;quot; of signal 2 if a driver at signal 2 has already passed signal 1&amp;lt;br&amp;gt;ie: signal 1 is behind him.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;On&amp;lt;/b&amp;gt;||A signal is said to be &amp;quot;On&amp;quot; if it is showing it&#039;s most restrictive aspect&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;Off&amp;lt;/b&amp;gt;||A signal is said to be &amp;quot;Off&amp;quot; if it is showing it&#039;s least restrictive aspect&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Distances===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{TableHeader|width=95%|margin=15px}}&lt;br /&gt;
|bgcolor=#EEEEEE|&amp;lt;b&amp;gt;Miscellaneous Distance Constants&amp;lt;/b&amp;gt;||bgcolor=#EEEEEE| &lt;br /&gt;
|-&lt;br /&gt;
|width=375|public define int HALF_A_CAR_LENGTH = 20||A 50m long traincar (sic)&lt;br /&gt;
|-&lt;br /&gt;
|public define int MINIMUM_SIGNAL_SPACING = 50||Signals must be placed more than 50m apart to increment state.&lt;br /&gt;
|-&lt;br /&gt;
|public define int PORTAL_LENGTH = 300||Just how far after finding a portal do we keep looking for trains?  This is because users may attach track to both ends of a portal.&lt;br /&gt;
|-&lt;br /&gt;
|public define int DEFAULT_OVERLAP = 25||Default. Overridden by &#039;overlap&#039; in the config.txt.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Signal States===&lt;br /&gt;
*Define the possible states for a track side signal.&lt;br /&gt;
*For more complex states, the Extended Signal States are used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TableHeader|width=95%|margin=15px}}&lt;br /&gt;
|width=375 bgcolor=&amp;quot;#EEEEEE&amp;quot;|&amp;lt;b&amp;gt;Signal States&amp;lt;/b&amp;gt;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|public define int AUTOMATIC = -1||Signal state is automatically handled by Trainz.&lt;br /&gt;
|-&lt;br /&gt;
|public define int RED = 0||Signal is red (stop state).&lt;br /&gt;
|-&lt;br /&gt;
|public define int YELLOW = 1||Signal is yellow (caution state).&lt;br /&gt;
|-&lt;br /&gt;
|public define int GREEN = 2||Signal is green (clear state).&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Extended Signal States===&lt;br /&gt;
*Values specifying an extended signal state.&lt;br /&gt;
*These are extra signal states for more specialist purposes that are defined in addition to the standard Signal States.&lt;br /&gt;
*Note: Not all signals may necessarily support the extended signal states.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TableHeader|width=95%|margin=15px}}&lt;br /&gt;
|width=375 bgcolor=&amp;quot;#EEEEEE&amp;quot;|&amp;lt;b&amp;gt;Shared States&amp;lt;/b&amp;gt;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_STOP = 0||Extended stop state. Signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_STOP_THEN_CONTINUE = 1||Alternative for stop - asset specific.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION = 4||The next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION = 7||The next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED = 8||Extended proceed state. Signal is green.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TableHeader|width=95%|margin=15px}}&lt;br /&gt;
|width=375 bgcolor=&amp;quot;#EEEEEE&amp;quot;|&amp;lt;b&amp;gt;Route Signalling Specific States&amp;lt;/b&amp;gt;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION_LEFT = 2||The next junction is left and the next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION_RIGHT = 3||The next junction is right and the next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION_LEFT_2 = 13||The next junction is 2nd left and the next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION_RIGHT_2 = 14||The next junction is 2nd right and the next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION_LEFT_3 = 15||The next junction is 3rd left and the next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_CAUTION_RIGHT_3 = 16||The next junction is 3rd right and the next signal is red.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION_LEFT = 11||The next junction is left and the next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION_RIGHT = 12||The next junction is right and the next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION_LEFT_2 = 17||The next junction is 2nd left and the next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION_RIGHT_2 = 18||The next junction is 2nd right and the next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION_LEFT_3 = 19||The next junction is 3rd left and the next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_ADVANCE_CAUTION_RIGHT_3 = 20||The next junction is 3rd right and the next signal is yellow.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED_LEFT = 5||The next junction is left and the next signal is green.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED_RIGHT = 6||The next junction is right and the next signal is green.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED_LEFT_2 = 21||The next junction is 2nd left and the next signal is green.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED_RIGHT_2 = 22||The next junction is 2nd right and the next signal is green.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED_LEFT_3 = 23||The next junction is 3rd left and the next signal is green.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_PROCEED_RIGHT_3 = 24||The next junction is 3rd right and the next signal is green.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TableHeader|width=95%|margin=15px}}&lt;br /&gt;
|width = 375 bgcolor=&amp;quot;#EEEEEE&amp;quot;|&amp;lt;b&amp;gt;Speed Signalling Specific States&amp;lt;/b&amp;gt;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_SLOW = 9||Proceed at slow speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_MEDIUM = 10||Proceed at medium speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_RESTRICTED = 25||Proceed at restricted speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_LIMITED = 26||Proceed at limited speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_APPROACH_LIMITED = 27||Approach next signal at limited speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_APPROACH_MEDIUM = 28||Approach next signal at medium speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_APPROACH_SLOW = 29||Approach next signal at slow speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_APPROACH_RESTRICTED = 30||Approach next signal at restricted speed.&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_LIMITED_APPROACH = 31||Proceed at Limited speed prepared to stop at next signal&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_MEDIUM_APPROACH = 32||Proceed at Medium speed prepared to stop at next signal&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_SLOW_APPROACH = 33||Proceed at Slow speed prepared to stop at next signal&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_LIMITED_APPROACH_MEDIUM = 34||Proceed at Limited speed, approach next signal at Medium speed&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_LIMITED_APPROACH_SLOW = 35;||Proceed at Limited speed, approach next signal at Slow speed&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_LIMITED_APPROACH_RESTRICTED = 36||Proceed at Limited speed, approach next signal at Restricted speed&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_MEDIUM_APPROACH_SLOW = 37;||Proceed at Medium speed, approach next signal at Slow speed&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_MEDIUM_APPROACH_RESTRICTED = 38||Proceed at Medium speed, approach next signal at Restricted speed&lt;br /&gt;
|-&lt;br /&gt;
|public define int EX_SLOW_APPROACH_RESTRICTED = 39||Proceed at Slow speed, approach next signal at Restricted speed&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
&lt;br /&gt;
===ApplySpeedLimitForStateEx===&lt;br /&gt;
{{MethodHeader|public void ApplySpeedLimitForStateEx(int state)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;state&#039;&#039; = One of the &#039;&#039;[[#Extended Signal States|Extended Signal State]]&#039;&#039; values.&lt;br /&gt;
;Returned Value&lt;br /&gt;
*None&lt;br /&gt;
;Syntax&lt;br /&gt;
 ApplySpeedLimitForState(Signal.EX_PROCEED_LEFT);&lt;br /&gt;
;Notes&lt;br /&gt;
*Sets the line speed limit to the value defined&lt;br /&gt;
*Any existing limit is rescinded if there is no applicable setting.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ApplyUpdatedState===&lt;br /&gt;
{{MethodHeader|void ApplyUpdatedState(Soup signalStateSoup)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;signalStateSoup&#039;&#039;&#039; = Soup in the format returned by DetermineUpdatedState().&lt;br /&gt;
;Returned Value&lt;br /&gt;
*None&lt;br /&gt;
;Syntax&lt;br /&gt;
 ApplyUpdatedState(stateSoup);&lt;br /&gt;
;Notes&lt;br /&gt;
*Signals can apply speed limits so check to see if this signal has a limit specified for this state.&lt;br /&gt;
*If there is a limit you can use ApplySpeedLimitForStateEx(signalState) to implement it.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CanDisplayStateEx===&lt;br /&gt;
{{MethodHeader|public bool CanDisplayStateEx(int state)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;state&#039;&#039; = One of the &#039;&#039;[[#Extended Signal States|Extended Signal State]]&#039;&#039; values.&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if the given state can be displayed by this signal, false otherwise&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool CanShow = CanDisplayStateEx(Signal.EX_CAUTION_LEFT_2); &lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CheckForOncomingTrain===&lt;br /&gt;
{{MethodHeader|public bool CheckForOncomingTrain(GSTrackSearch gst)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;gst&#039;&#039;&#039; = GSTrackSearch object to use in search.&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if a train is found, false otherwise.&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool trainFound = CheckForOncomingTrain(gst);&lt;br /&gt;
;Notes&lt;br /&gt;
*Called after &#039;&#039;CheckForTrainInOverlap()&#039;&#039; using the same GSTrackSearch object.&lt;br /&gt;
*The GSTrackSearch cursor will be moved on by this method.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CheckForTrainInOverlap===&lt;br /&gt;
{{MethodHeader|public bool CheckForTrainInOverlap(GSTrackSearch gst, float overlap)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;gst&#039;&#039;&#039; = GSTrackSearch object to use in search.&lt;br /&gt;
*&#039;&#039;&#039;overlap&#039;&#039;&#039; = Overlap distance to search.&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if a train is found within the signal&#039;s overlap, false otherwise&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool trainFound = CheckForTrainInOverlap(gst,overlap);&lt;br /&gt;
;Notes&lt;br /&gt;
*The GSTrackSearch cursor will be moved on by this method and left in te correct position for use by &#039;&#039;CheckForOncomingTrain()&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DetermineUpdatedState===&lt;br /&gt;
{{MethodHeader|public Soup DetermineUpdatedState(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
* A Soup object defining the new signal state, containing &amp;quot;state&amp;quot; and &amp;quot;reason&amp;quot; tags.&lt;br /&gt;
;Syntax&lt;br /&gt;
 Soup signalStateSoup = mySignal.DetermineUpdatedState();&lt;br /&gt;
;Notes&lt;br /&gt;
*This method sets a state for the signal based on the results of a serach along the line and the configuration of the signal object.&lt;br /&gt;
*The method can be overridden in a subclassed object to change behavior to suit your own particular prototype, however the method is called frequently for every signal on the map, which makes it very easy to destroy performance. &lt;br /&gt;
*Make sure that your code is as efficient as possible and does not make unneccessary calls, In particular, if you need to read &#039;&#039;config.txt&#039;&#039; do this in Init() and cache the result.&lt;br /&gt;
;Reason Strings&lt;br /&gt;
These will automatically show in the users selected language.&lt;br /&gt;
{{TableHeader|width=50%|margin=15px}}&lt;br /&gt;
|-&lt;br /&gt;
|bgcolor=&amp;quot;#EEEEEE&amp;quot;|&#039;&#039;&#039;String&#039;&#039;&#039;||bgcolor=&amp;quot;#EEEEEE&amp;quot;|&#039;&#039;&#039;Result (English)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|$signal_endofline_lbl||Line terminates or is closed&lt;br /&gt;
|-&lt;br /&gt;
|$signal_nextblockbusy_lbl||Line ahead is occupied by another train&lt;br /&gt;
|-&lt;br /&gt;
|$signal_nextsignalred_lbl||Line ahead is clear for one block&lt;br /&gt;
|-&lt;br /&gt;
|$signal_nsrdoubleblock_lbl||Line ahead is reserved as a safety block&lt;br /&gt;
|-&lt;br /&gt;
|$signal_nextsignalyellow_lbl||Line ahead is clear for two blocks&lt;br /&gt;
|-&lt;br /&gt;
|$signal_idle_lbl||No train approaching&lt;br /&gt;
|-&lt;br /&gt;
|$signal_unsignalled_lbl||Line ahead is unsignalled&lt;br /&gt;
|-&lt;br /&gt;
|$signal_lineclear_lbl||Line ahead is clear&lt;br /&gt;
|-&lt;br /&gt;
|$signal_repeater_lbl||Repeating State of signal ahead&lt;br /&gt;
|-&lt;br /&gt;
|$signal_overlapoccupied_lbl||Overlap of block ahead is occupied&lt;br /&gt;
|-&lt;br /&gt;
|$signal_oncomingtrain_lbl||Line ahead is reserved for an oncoming train&lt;br /&gt;
|-&lt;br /&gt;
|$signal_tooclose_lbl||Signal ahead is within the overlap distance&lt;br /&gt;
|-&lt;br /&gt;
|$signal_unknownstate_lbl||Signal ahead is in an unknown state!&lt;br /&gt;
|-&lt;br /&gt;
|$signal_aidirectionmarker_lbl||Line ahead has a track direction marker facing against us&lt;br /&gt;
|-&lt;br /&gt;
|$signal_lineclearportal_lbl||Line ahead is clear into Portal&lt;br /&gt;
|-&lt;br /&gt;
|$signal_apprel_lbl||Signal is waiting for train to approach&lt;br /&gt;
|-&lt;br /&gt;
|$signal_undecided_lbl||Signal undecided on what to do&lt;br /&gt;
|-&lt;br /&gt;
|$signal_trainapproaching_lbl||Train is approaching but not within this block&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===findApproachingTrain===&lt;br /&gt;
{{MethodHeader|public Train findApproachingTrain(Signal start, bool direction, int numSignals, float maxDistance)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;start&#039;&#039;&#039; = The signal to start searching from.&lt;br /&gt;
*&#039;&#039;&#039;direction&#039;&#039;&#039; = Direction in which to search.&lt;br /&gt;
*&#039;&#039;&#039;numSignals&#039;&#039;&#039; = How many signals to look past when trying to find a train.&lt;br /&gt;
*&#039;&#039;&#039;maxDistance&#039;&#039;&#039; = How far down the track graph to look for a train&lt;br /&gt;
;Returned Value&lt;br /&gt;
*A reference to a train, if one is found within the defined limits, null otherwise.&lt;br /&gt;
;Syntax&lt;br /&gt;
 train = findApproachingTrain(Signal1,false,2,200.0);&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FindNearestDisplayableStateEx===&lt;br /&gt;
{{MethodHeader|public int FindNearestDisplayableStateEx(int state)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;state&#039;&#039; = One of the &#039;&#039;[[#Extended Signal States|Extended Signal State]]&#039;&#039; values.&lt;br /&gt;
;Returned Value&lt;br /&gt;
*The nearest approximation to the specified state which this signal can display.&lt;br /&gt;
;Syntax&lt;br /&gt;
 int stateToShow = findNearestDisplayableState(Signal.EX_PROCEED_RIGHT);&lt;br /&gt;
;Notes&lt;br /&gt;
*If a sensible approximation can&#039;t be found the method returns the first state defined in &#039;&#039;config.txt&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetIsDistant===&lt;br /&gt;
{{MethodHeader|public native bool GetIsDistant(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if this is a &#039;&#039;Distant&#039;&#039; signal, false otherwise&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool distant = GetIsDistant();&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetIsHome===&lt;br /&gt;
{{MethodHeader|public native bool GetIsHome(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if this is a &#039;&#039;Home&#039;&#039; signal, false otherwise&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool home = GetIsHome();&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetIsRepeater===&lt;br /&gt;
{{MethodHeader|public native bool GetIsRepeater(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if this is a &#039;&#039;Repeater&#039;&#039; signal, false otherwise&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool repeater = GetIsRepeater();&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetOverlap===&lt;br /&gt;
{{MethodHeader|public native float GetOverlap(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
*The overlap distance of this signal.&lt;br /&gt;
;Syntax&lt;br /&gt;
 float overlap = GetOverlap();&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetSignalLit===&lt;br /&gt;
{{MethodHeader|public native bool GetSignalLit(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
*True if the signal is lit, false otherwise.&lt;br /&gt;
;Syntax&lt;br /&gt;
 bool showing = GetSignalLit();&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetSignalState===&lt;br /&gt;
{{MethodHeader|See [[Class Trackside#GetSignalState|Trackside.GetSignalState()]]}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GetSignalStateEx===&lt;br /&gt;
{{MethodHeader|See [[Class Trackside#GetSignalStateEx|Trackside.GetSignalStateEx()]]}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===LightSignal===&lt;br /&gt;
{{MethodHeader|public native void LightSignal(bool show)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;show&#039;&#039; = If true, turn the signal&#039;s lights on, else turn them off.&lt;br /&gt;
;Returned Value&lt;br /&gt;
*None&lt;br /&gt;
;Syntax&lt;br /&gt;
 signal.LightSignal(false);&lt;br /&gt;
;Notes&lt;br /&gt;
*AI trains will still read the signal state, even if it is switched off.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PerformLogic===&lt;br /&gt;
{{MethodHeader|final Soup PerformLogic(void)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*None&lt;br /&gt;
;Returned Value&lt;br /&gt;
* A Soup object defining the new signal state, containing &amp;quot;state&amp;quot; and &amp;quot;reason&amp;quot; tags.&lt;br /&gt;
;Syntax&lt;br /&gt;
 mySignal.PerformLogic();&lt;br /&gt;
;Notes&lt;br /&gt;
*Calls ApplyUpdatedState() with a Soup object obtained by a call to DetermineUpdatedState()&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SetSignalState===&lt;br /&gt;
{{MethodHeader|public native void SetSignalState(int state, string reason)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;state&#039;&#039;&#039; = One of the &#039;&#039;[[#Signal States|Signal State]]&#039;&#039; values to set this signal to.&lt;br /&gt;
*&#039;&#039;&#039;reason&#039;&#039;&#039; = Reason string to be displayed when a mouse cursor is placed over the signal&lt;br /&gt;
;Returned Value&lt;br /&gt;
*None&lt;br /&gt;
;Syntax&lt;br /&gt;
 signal.SetSignalState(Signal.GREEN,&amp;quot;Line is clear&amp;quot;);&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SetSignalStateEx===&lt;br /&gt;
{{MethodHeader|public native void SetSignalState(int state, string reason)}}&lt;br /&gt;
;Parameters&lt;br /&gt;
*&#039;&#039;&#039;state&#039;&#039;&#039; = One of the &#039;&#039;[[#Extended Signal States|Extended Signal State]]&#039;&#039; values to set this signal to.&lt;br /&gt;
*&#039;&#039;&#039;reason&#039;&#039;&#039; = Reason string to be displayed when a mouse cursor is placed over the signal&lt;br /&gt;
;Returned Value&lt;br /&gt;
*None&lt;br /&gt;
;Syntax&lt;br /&gt;
 signal.SetSignalStateEx(Signal.EX_PROCEED_LEFT,&amp;quot;Line to the left is clear&amp;quot;);&lt;br /&gt;
;Notes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Related Methods==&lt;br /&gt;
[[Class Trackside#GetSignalState|Trackside.GetSignalState()]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Class Trackside#GetSignalStateEx|Trackside.GetSignalStateEx()]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Class Trackside#GetSpeedLimit|Trackside.GetSpeedLimit()]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Class Trackside#SetSpeedLimit|Trackside.SetSpeedLimit()]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Class World#GetSignalList|World.GetSignalList()]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
[[Category:Script Class]]&lt;/div&gt;</summary>
		<author><name>Duckblaster</name></author>
	</entry>
</feed>