How to Use Variables in Sessions (Examples)

From TrainzOnline
(Difference between revisions)
Jump to: navigation, search
m (Trainz Wiki)
m
 
(42 intermediate revisions by one user not shown)
Line 1: Line 1:
 +
The information in this Wiki Page applies to '''TANE''', '''TRS19''', '''Trainz Plus''' and '''TRS22'''. It gives examples of using variables in Sessions.
 +
<table width=1000>
 +
<tr valign="top">
 +
<td width=350>
 
__TOC__
 
__TOC__
 +
</td>
 +
<td>
 +
<table bgcolor="lightcyan" cellpadding=2>
 +
<tr valign="top">
 +
<td width=10>[[image:BlueDot10x10.png|link=]]</td>
 +
<td>Variables store '''integer values''' in Sessions that can be used to:-
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:BlueDot10x10.png|link=]]</td>
 +
<td>'''Test''' for certain events (e.g. if something has occurred a set number of times)</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:BlueDot10x10.png|link=]]</td>
 +
<td>Make decisions according to the value held by a variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:BlueDot10x10.png|link=]]</td>
 +
<td>Act as '''counters''' or '''score keepers'''</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:BlueDot10x10.png|link=]]</td>
 +
<td>Variables can be used for basic arithmetic by having set values added or subtracted</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:BlueDot10x10.png|link=]]</td>
 +
<td>Variables can have random values assigned to them</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 
<br>
 
<br>
The screenshots shown below give examples of how variables can be used to control the operation of a session.
+
The scenarios shown below give examples of how variables can be used to control the operation of a session.
 
<br>
 
<br>
 +
<table width=1000> <!-- BEGIN Nav Buttons Table NO SKIPS -->
 +
<tr valign="top">
 +
<td width=629><span id="stepEx1"></span>
 
='''Example 1: Random Passenger Stop'''=
 
='''Example 1: Random Passenger Stop'''=
 +
</td>
 +
<td width=50>&#160;</td> <!-- Skip Down -->
 +
<td width=50>&#160;</td> <!-- Skip Up -->
 +
<td width=46>[[image:BackToTop.png|link=#top|alt=Top|Top]]</td>
 +
<td width=75>&nbsp;</td>
 +
<td width=75>[[image:NextDown.png|link=#stepEx2|alt=Next Down|Next Down]]</td>
 +
<td width=75>[[image:BackToBottom.png|link=#bottom|alt=Bottom|Bottom]]</td>
 +
</tr>
 +
</table> <!-- END Nav Buttons Table -->
  
==The Scenario==
+
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=4>[[image:magnifier.png|link=]]</td>
 +
<td><span style="font-weight: 700; font-size: 17px;">The Scenario:</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>In the example shown below a random variable is to be used to decide which one of 3 stations a user controlled train will be required to stop at. The user will be informed of the decision, to stop or not, by a message placed on the screen before they reach each station.
  
A random variable is to be used to decide which one of 3 stations a user controlled train will be required to stop at. The user will be informed of the decision, to stop or not, by a message placed on the screen before they reach each station.
+
When the train approaches the first possible stopping place, Sandplace, the session checks the value stored in "stopID" and if it is "1" then a stop will be requested.</td>
 
+
</tr>
==Preconditions==
+
<tr valign="top">
 
+
<!-- <td>&#160;</td> -->
*The '''[[Session_Rule_List_with_Parameters#Randomize_Rule|Randomize Rule]]''' is used at the start of the session to create a different sequence of random values each time the session is run.
+
<td>[[image:RandomLogic.jpg|link=]]</td>
*The '''[[Session_Rule_List_with_Parameters#Navigation_Display_Rule|Navigation Display Rule]]''' is used to create a Navigation Point Set.
+
</tr>
*The '''[[Session_Rule_List_with_Parameters#Variable_Random_Rule|Variable Random Rule]]''' is used to create a variable, '''stopID''', with an integer random value from 1 to 3. Each number representing one of the stops.
+
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 
<table>
 
<table>
<tr>
+
<tr valign="top">
<td>[[file:VariableRandom.jpg]]</td>
+
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>If a stop is required then a predefined '''Navigation Point''' is shown to indicate the stopping place</td>
 
</tr>
 
</tr>
<tr>
+
<tr valign="top">
<td>Setting the random variable '''stopID'''</td>
+
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>The same logic is repeated for the other two stations with '''stopID''' values of "2" and "3"</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 
+
</td>
==Program Logic==
+
</tr>
 
+
</table>
When the train approaches the first possible stopping place, Sandplace, the session checks the value stored in "stopID" and if it is "1" then a stop will be requested.
+
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:conditions.PNG|link=]]</td>
 +
<td colspan=2><span style="font-size: 17px;">'''Preconditions:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 
<table>
 
<table>
<tr>
+
<tr valign="top">
<td>[[file:RandomLogic.jpg]]</td>
+
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>The '''[[Session_Rule_List_with_Parameters#Randomize_Rule|Randomize Rule]]''' is used at the start of the session to create a different sequence of random values each time the session is run</td>
 +
</tr>
 +
<tr valign="top">
 +
<td colspan=2>Setting the random variable '''stopID'''</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>The '''[[Session_Rule_List_with_Parameters#Navigation_Display_Rule|Navigation Display Rule]]''' is used to create three Navigation Point Sets, one for each stopping place</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>The '''[[Session_Rule_List_with_Parameters#Navigation_Set_Hide/Show_Rule|Navigation Set Hide/Show Rule]]''' is used to initially hide all three navigation sets</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>The '''[[Session_Rule_List_with_Parameters#Variable_Random_Rule|Variable Random Rule]]''' is used to create a variable, '''stopID''', with an integer random value from 1 to 3. Each number representing one of the stops</td>
 +
</tr>
 +
<tr valign="top">
 +
<td colspan=2>[[image:VariableRandom.jpg|link=]]</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 
+
</td>
If a stop is required then a predefined '''Navigation Point''' is shown to indicate the stopping place.
+
</tr>
 
+
</table>
The same logic is repeated for the other two stations with '''stopID''' values of "2" and "3".
+
<br>
 
+
<table width=1000 cellpadding=2 bgcolor=#ffffff>
==Rules Used==
+
<tr valign="top">
 
+
<td width=60 rowspan=2>[[image:RulesWiki.PNG|link=]]</td>
*'''[[Session_Rule_List_with_Parameters#Trigger_Check_Rule|Trigger Check Rule]]''' to trigger the decision and message event.
+
<td><span style="font-size: 17px;">'''Rules Used:'''</span></td>
*'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable.
+
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Navigation_Display_Rule|Navigation Display Rule]]''' to create three Navigation Point Sets (in '''Preconditions''' above)</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Navigation_Set_Hide/Show_Rule|Navigation Set Hide/Show Rule]]''' to hide all three navigation sets (in '''Preconditions''' above) and to reveal one set identified by the random variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Randomize_Rule|Randomize Rule]]''' to create a different sequence of random values each time the session is run (in '''Preconditions''' above)</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Random_Rule|Variable Random Rule]]''' to create the variable '''stopID''' (in '''Preconditions''' above)</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Trigger_Check_Rule|Trigger Check Rule]]''' to trigger the decision and message event</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable
 
<table>
 
<table>
 
<tr>
 
<tr>
<td>[[file:VariableCheck.jpg]]</td>
+
<td>[[image:VariableCheck.jpg|link=]]</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
<td>Checking the variable '''stopID'''</td>
+
<td>Checking the variable '''stopID''' for the first stopping place</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
*'''[[Session_Rule_List_with_Parameters#Navigation_Set_Hide/Show_Rule|Navigation Set Hide/Show Rule]]''' to display a predefined navigation point.
+
</td>
*'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to open a message window on the screen.
+
</tr>
 
+
<tr valign="top">
==Session Rules Screenshot==
+
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 
+
<td>'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to open a message window on the screen</td>
<table>
+
</tr>
<tr>
+
</table>
<td>[[file:AppRandomStop1.jpg]]</td>
+
</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 
==Explanation==
 
 
*'''Line 1: Trigger Check''' The event is triggered when the consist passes over a track trigger.
 
**'''Line 2: Variable Check''' The value stored in the variable '''stopID''' is tested "=1". Lines 3 and 4 are executed only if '''stopID''' is '''equal to''' "1"
 
***'''Line 3: Navigation Set Hide/Show''' Displays a navigation point showing the stopping location.
 
***'''Line 4: Message Popup''' Displays a message window showing that a stop has to be made at Sandplace.
 
**'''Line 5: Variable Check''' The value stored in the variable '''stopID''' is tested "<>1". Line 6 is executed only if '''stopID''' is '''not equal''' to "1".
 
***'''Line 6: Message Popup''' Displays a message window showing that no stop has to be made at Sandplace.
 
 
<br>
 
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:screenshot.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Session Editor Screenshot:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>[[image:AppRandomStop1.jpg|link=]]<br>
 +
The '''Trigger Check''' sequence</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:explanation.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Description:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;1&#160;</span>''': Trigger Check''' The event is triggered when the consist passes over a track trigger. This executes the following rules:-
 +
:'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;2&#160;</span>''': Variable Check''' The value stored in the variable '''stopID''' is tested "=1". Lines 3 and 4 are executed only if '''stopID''' is '''equal to''' "1"
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;3&#160;</span>''': Navigation Set Hide/Show''' Displays a navigation point showing the stopping location
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;4&#160;</span>''': Message Popup''' Displays a message window showing that a stop has to be made at Sandplace
 +
:'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;5&#160;</span>''': Variable Check''' The value stored in the variable '''stopID''' is tested "&lt;&gt;1". Line 6 is executed only if '''stopID''' is '''not equal''' to "1".
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;6&#160;</span>''': Message Popup''' Displays a message window showing that no stop has to be made at Sandplace</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000> <!-- BEGIN Nav Buttons Table NO SKIPS -->
 +
<tr valign="top">
 +
<td width=629><span id="stepEx2"></span>
 
='''Example 2: Event Counter and Message Selection'''=
 
='''Example 2: Event Counter and Message Selection'''=
 +
</td>
 +
<td width=50>&#160;</td> <!-- Skip Down -->
 +
<td width=50>&#160;</td> <!-- Skip Up -->
 +
<td width=46>[[image:BackToTop.png|link=#top|alt=Top|Top]]</td>
 +
<td width=75>[[image:NextUp.png|link=#stepEx1|alt=Next Up|Top]]</td>
 +
<td width=75>[[image:NextDown.png|link=#stepEx3|alt=Next Down|Next Down]]</td>
 +
<td width=75>[[image:BackToBottom.png|link=#bottom|alt=Bottom|Bottom]]</td>
 +
</tr>
 +
</table> <!-- END Nav Buttons Table -->
  
==The Scenario==
+
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 
+
<tr valign="top">
Each time a user causes a SPAD (Signal Passed At Danger) at specific locations, the event is counted and an appropriate message is displayed on the screen. The tone of the messages becomes more severe with each occurance.
+
<td width=60 rowspan=4>[[image:magnifier.png|link=]]</td>
 
+
<td><span style="font-weight: 700; font-size: 17px;">The Scenario:</span></td>
==Preconditions==
+
</tr>
 
+
<tr valign="top">
*A variable, '''SetSPAD''' (value "0" or "1"), is used to indicate whether a SPAD event is to be counted and responded to or not. This is set to "0" or "1" by track triggers.
+
<!-- <td>&#160;</td> -->
*A variable, '''SPADCounter''', is used to count the SPAD events and is initially set at 0.
+
<td>Each time a user causes a SPAD (Signal Passed At Danger) at specific locations, the event is counted and an appropriate message is displayed on the screen. The tone of the messages becomes more severe with each occurance.</td>
 
+
</tr>
==Rules Used==
+
</table>
 
+
<br>
*'''[[Session_Rule_List_with_Parameters#Signal_Passed_At_Danger_Check_Rule|Signal Passed At Danger Check Rule]]''' set to trigger on every SPAD event.
+
<table width=1000 cellpadding=2 bgcolor=#ffffff>
*'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable.
+
<tr valign="top">
*'''[[Session_Rule_List_with_Parameters#Driver_Schedule_Rule|Driver Schedule Rule]]''' used to immediately stop the train.
+
<td width=60 rowspan=4>[[image:conditions.PNG|link=]]</td>
 +
<td colspan=2><span style="font-size: 17px;">'''Preconditions:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>A variable, '''SetSPAD''' (value "0" or "1"), is used to indicate whether a SPAD event is to be counted and responded to or not. This is set to "0" or "1" by track triggers. Use the '''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to create and set this variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>A variable, '''SPADCounter''', is used to count the SPAD events and is initially set at 0. Use the '''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to create and set this variable</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:RulesWiki.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Rules Used:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Signal_Passed_At_Danger_Check_Rule|Signal Passed At Danger Check Rule]]''' set to trigger on every SPAD event</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Driver_Schedule_Rule|Driver Schedule Rule]]''' used to immediately stop the train</td>
 +
</tr>
 +
</table>
 
<table>
 
<table>
 
<tr>
 
<tr>
<td>[[file:DriverSchedule.jpg]]</td>
+
<td>[[image:DriverSchedule.jpg|link=]]</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
Line 92: Line 279:
 
</tr>
 
</tr>
 
</table>
 
</table>
*'''[[Session_Rule_List_with_Parameters#Simultaneous_List_Rule|Simultaneous List Rule]]''' to force all rules to run simultaneously for speed.
+
<table>
*'''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to alter the value held in a session variable.
+
<tr valign="top">
*'''[[Session_Rule_List_with_Parameters#Variable_Show_Rule|Variable Show Rule]]''' adds a session variable to the Heads Up Display.
+
<td>[[image:DotPoint.JPG|10px|link=]]</td>
*'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to open a message window on the screen.
+
<td>'''[[Session_Rule_List_with_Parameters#Simultaneous_List_Rule|Simultaneous List Rule]]''' to force all rules to run simultaneously for speed</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to alter the value held in a session variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Show_Rule|Variable Show Rule]]''' adds a session variable to the Heads Up Display</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to open a message window on the screen</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:screenshot.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Session Editor Screenshot:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>[[image:VariableSPADWarnings.jpg|link=]]</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=3>[[image:explanation.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Description:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;1&#160;</span>''': Signal Passed At Danger''' The event is triggered every time a consist passes a signal (or stop sign) set at STOP. This executes the following lines:-
 +
:'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;2&#160;</span>''': Variable Check''' The value stored in the variable '''SetSPAD''' is tested "=1". If true then the following lines are executed. This executes the following lines:-
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;3&#160;</span>''': Driver Schedule''' The current schedule (if any) for the user controlled driver is replaced with a '''Halt Train''' command to bring the train to an immediate stop
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;4&#160;</span>''': Variable Modify''' The value stored in the variable '''SPADCounter''' is increased by 1
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;5&#160;</span>''': Simultaneous List''' This forces all the '''Variable Check Rules''' to be run simultaneously. This is not strictly necessary but without it all the '''Variable Check Rules''' will be tested, one after the other, when only one (or none) of them will be executed. This will (marginally) speed up the processing. This will execute the following lines:-
 +
:::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;6&#160;</span>''': Variable Check''' The value stored in the variable '''SPADCounter''' is tested "=1". If true then the first SPAD event has occurred and the following lines are executed:-
 +
::::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;7&#160;</span>''': Variable Show''' The value stored in the variable '''SPADCounter''' is added to the '''Custom HUD'''. Each time the value changes it will be updated in the HUD
 +
::::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;8&#160;</span>''': Message Popup''' The first warning message is shown on the screen
 +
:::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;9&#160;</span>''': Variable Check''' The value stored in the variable '''SPADCounter''' is tested "=2". If true then the second SPAD event has occurred and the following line is executed:-
 +
::::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;10&#160;</span>''': Message Popup''' The second warning message is shown on the screen</td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>Lines <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;9&#160;</span> and <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;10&#160;</span> are then repeated with variations as shown. If more than 5 SPADs occur, then no new messages will be shown (the driver is clearly taking no notice so what is the point?) but the '''SPADCounter''' will continue to be updated.
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000> <!-- BEGIN Nav Buttons Table NO SKIPS -->
 +
<tr valign="top">
 +
<td width=629><span id="stepEx3"></span>
  
==Session Rules Screenshot==
+
='''Example 3: Counting Consist Checks'''=
 +
</td>
 +
<td width=50>&#160;</td> <!-- Skip Down -->
 +
<td width=50>&#160;</td> <!-- Skip Up -->
 +
<td width=46>[[image:BackToTop.png|link=#top|alt=Top|Top]]</td>
 +
<td width=75>[[image:NextUp.png|link=#stepEx2|alt=Next Up|Top]]</td>
 +
<td width=75>[[image:NextDown.png|link=#stepEx4|alt=Next Down|Next Down]]</td>
 +
<td width=75>[[image:BackToBottom.png|link=#bottom|alt=Bottom|Bottom]]</td>
 +
</tr>
 +
</table> <!-- END Nav Buttons Table -->
  
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=4>[[image:magnifier.png|link=]]</td>
 +
<td><span style="font-weight: 700; font-size: 17px;">The Scenario:</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>The '''Consist Check Rule''' cannot be set to trigger only once but sometimes you want it triggered only once on (for example) the 2nd time that a particular consist is formed. This example uses a variable to count the number of times the rule has been triggered and acts only when a set count has been reached. It could easily be modified to trigger a set number of times.</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=4>[[image:conditions.PNG|link=]]</td>
 +
<td colspan=2><span style="font-size: 17px;">'''Preconditions:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 
<table>
 
<table>
<tr>
+
<tr valign="top">
<td>[[file:VariableSPADWarnings.jpg]]</td>
+
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>A variable, '''ConsistCount''', is initially set to "0". Use the '''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to create and set this variable</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:RulesWiki.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Rules Used:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Consist_Check_Rule|Consist Check Rule]]''' set to trigger when a specific consist has been formed</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to set and increase the value held in a session variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to place a message on the screen</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:screenshot.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Session Editor Screenshot:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>[[image:VariableConsistCounter.JPG|link=]]</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=3>[[image:explanation.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Description:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;1&#160;</span>''': Consist Check Rule''' Triggered when the specified consist has been found. This executes the following lines:-
 +
:'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;2&#160;</span>''': Variable Modify Rule''' Adds 1 to the variable '''ConsistCounter'''
 +
:'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;3&#160;</span>''': Variable Check''' Compares the value stored in '''ConsistCounter''' to a set value (in this case 2). If it matches then the next line is executed:-
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;4&#160;</span>''': Places a message on the screen</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000> <!-- BEGIN Nav Buttons Table NO SKIPS -->
 +
<tr valign="top">
 +
<td width=629><span id="stepEx4"></span>
  
==Explanation==
+
='''Example 4: Train Status'''=
 +
</td>
 +
<td width=50>&#160;</td> <!-- Skip Down -->
 +
<td width=50>&#160;</td> <!-- Skip Up -->
 +
<td width=46>[[image:BackToTop.png|link=#top|alt=Top|Top]]</td>
 +
<td width=75>[[image:NextUp.png|link=#stepEx3|alt=Next Up|Top]]</td>
 +
<td width=75>[[image:NextDown.png|link=#stepRules|alt=Next Down|Next Down]]</td>
 +
<td width=75>[[image:BackToBottom.png|link=#bottom|alt=Bottom|Bottom]]</td>
 +
</tr>
 +
</table> <!-- END Nav Buttons Table -->
  
*'''Line 1: Signal Passed At Danger''' The event is triggered every time a consist passes a signal (or stop sign) set at STOP.
+
<table width=1000 cellpadding=2 bgcolor=#ffffff>
**'''Line 2: Variable Check''' The value stored in the variable '''SetSPAD''' is tested "=1". If true then the following lines are executed.
+
<tr valign="top">
***'''Line 3: Driver Schedule:''' The current schedule (if any) for the user controlled driver is replaced with a '''Halt Train''' command to bring the train to an immediate stop.
+
<td width=60 rowspan=4>[[image:magnifier.png|link=]]</td>
***'''Line 4: Variable Modify''' The value stored in the variable '''SPADCounter''' is increased by 1.
+
<td><span style="font-weight: 700; font-size: 17px;">The Scenario:</span></td>
***'''Line 5: Simultaneous List''' This forces all the '''Variable Check Rules''' to be run simultaneously. This is not strictly necessary but without it all the '''Variable Check Rules''' will be tested, one after the other, when only one (or none) of them will be executed. This will (marginally) speed up the processing.
+
</tr>
****'''Line 6: Variable Check''' The value stored in the variable '''SPADCounter''' is tested "=1". If true then the first SPAD event has occurred and the following lines are executed.
+
<tr valign="top">
*****'''Line 7: Variable Show''' The value stored in the variable '''SPADCounter''' is added to the '''Custom HUD'''. Each time the value changes it will be updated in the HUD.
+
<!-- <td>&#160;</td> -->
*****'''Line 8: Message Popup''' The first warning message is shown on the screen.
+
<td>A consist identified by number 188 passes over the same trigger twice, once when empty and once when loaded. Each time the user needs to be given a different set of instructions</td>
****'''Line 9: Variable Check''' The value stored in the variable '''SPADCounter''' is tested "=2". If true then the second SPAD event has occurred and the following line is executed.
+
</tr>
*****'''Line 10: Message Popup''' The second warning message is shown on the screen.
+
</table>
Lines 9 and 10 are then repeated with variations as shown. If more than 5 SPADs occur, then no further messages will be shown (the driver is clearly taking no notice so what is the point?) but the '''SPADCounter''' will continue to be updated.
+
 
<br>
 
<br>
='''Example 3: Counting Consist Checks'''=
+
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=4>[[image:conditions.PNG|link=]]</td>
 +
<td colspan=2><span style="font-size: 17px;">'''Preconditions:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>A variable, '''T188Status''' is initially set to "1" signifying that the train is empty. This will be modified to "2" after it has been loaded. Use the '''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to create and set this variable</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:RulesWiki.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Rules Used:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Trigger_Check_Rule|Trigger Check Rule]]''' to trigger the event when the consist reaches the trigger</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to place a message on the screen</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=2>[[image:screenshot.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Session Editor Screenshot:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>[[image:VariableTrainTrigger.JPG|link=]]</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=60 rowspan=3>[[image:explanation.PNG|link=]]</td>
 +
<td><span style="font-size: 17px;">'''Description:'''</span></td>
 +
</tr>
 +
<tr valign="top">
 +
<!-- <td>&#160;</td> -->
 +
<td>'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;1&#160;</span>''': Trigger Check Rule''' Triggered by the train. This is '''NOT''' set to trigger once only. When triggered it will execute the following lines:-
 +
:'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;2&#160;</span>''': Variable Check''' Compares the value stored in '''T188Status''' to 1, indicating "empty". If it matches then the next lines are executed:-
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;3&#160;</span>''': Message Popup''' Places a message on the screen
 +
::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;4&#160;</span>''': Variable Check''' Compares the value stored in '''T188Status''' to 2, indicating "loaded". If it matches then the next line is executed:-
 +
:::'''Line''' <span style="font-weight: 700; font-size: 15px; color: white; background-color: black;">&#160;5&#160;</span>''': Message Popup''' Places a message on the screen</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000> <!-- BEGIN Nav Buttons Table NO SKIPS -->
 +
<tr valign="top">
 +
<td width=629><span id="stepRules"></span>
  
==The Scenario==
+
='''Variable Rules and Commands'''=
 
+
</td>
The '''Consist Check Rule''' cannot be set to trigger only once but sometimes you want it triggered only once on (for example) the 1st, 2nd, 3rd, 4th, etc, time that a particular consist is formed. This example uses a variable to count the number of times the rule has been triggered and acts only when a set count has been reached. It could easily be modified to trigger a set number of times.
+
<td width=50>&#160;</td> <!-- Skip Down -->
 
+
<td width=50>&#160;</td> <!-- Skip Up -->
==Preconditions==
+
<td width=46>[[image:BackToTop.png|link=#top|alt=Top|Top]]</td>
 
+
<td width=75>[[image:NextUp.png|link=#stepEx4|alt=Next Up|Top]]</td>
*A variable, '''ConsistCount''' is initially set to "0".
+
<td width=75>&nbsp;</td>
 
+
<td width=75>[[image:BackToBottom.png|link=#bottom|alt=Bottom|Bottom]]</td>
==Rules Used==
+
</tr>
 
+
</table> <!-- END Nav Buttons Table -->
*'''[[Session_Rule_List_with_Parameters#Consist_Check_Rule|Consist Check Rule]]''' set to trigger when a specific consist has been formed.
+
*'''[[Session_Rule_List_with_Parameters#Variable_Modify_Rule|Variable Modify Rule]]''' to set and increase the value held in a session variable.
+
*'''[[Session_Rule_List_with_Parameters#Variable_Check_Rule|Variable Check Rule]]''' to check the value held in a session variable.
+
*'''[[Session_Rule_List_with_Parameters#Message_Popup_Rule|Message Popup Rule]]''' to place a message on the screen.
+
 
+
==Session Rules Screenshot==
+
  
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=50>[[image:RulesWiki.PNG|link=]]</td>
 +
<td>These are the '''Session Rules''' that can access, create and/or modify Session variables
 
<table>
 
<table>
<tr>
+
<tr valign="top">
<td>[[file:VariableConsistCounter.JPG]]</td>
+
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Randomize_Rule|Randomize Rule]]''' - creates a different set of random numbers every time a session is run</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable Check Rule|Variable Check Rule]]''' - executes child rules according to the value of a specified variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable Modify Rule|Variable Modify Rule]]''' - changes the value of a specified variable and creates new variables by setting their initial values</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable Modify Continuous Rule|Variable Modify Continuous Rule]]''' - continuously changes the value of a specified variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable Random Rule|Variable Random Rule]]''' - assigns a random value to a variable</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Session_Rule_List_with_Parameters#Variable Show Rule|Variable Show Rule]]''' - adds or removes a specified variable and a descriptive label to the custom HUD</td>
 +
</tr>
 +
</table>
 +
</td>
 +
</tr>
 +
</table>
 +
<br>
 +
<table width=1000 cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td width=50>[[image:CommandsWiki.png|link=]]</td>
 +
<td>These are the '''Driver Commands''' that can access Session variables. The [[image:WikiLink.PNG|link=]] '''[[Session Rule List with Parameters#InputTable Rule|InputTable Rule]]''' must be added to the Session and configured with the names of the variables before these Driver Commands can be used.
 +
<table>
 +
<tr valign="top">
 +
<td width=10>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Driver_Commands_List#Skip if Session-Variable|Skip if Session Variable]]''' - conditionally jumps to the named command label in the Driver Command Bar if a selected session variable meets a set condition</td>
 +
</tr>
 +
<tr valign="top">
 +
<td>[[image:DotPoint.JPG|10px|link=]]</td>
 +
<td>'''[[Driver_Commands_List#Wait Until S-Variable V3|Wait Until S-Variable V3]]''' - AI driver waits for the specified variable condition to occur</td>
 +
</tr>
 +
</table>
 +
</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
  
==Explanation==
+
<table width=1000> <!-- BEGIN Nav Buttons Table NO SKIPS -->
 
+
<tr valign="top">
*'''Line 1: Consist Check Rule''' Triggered when the specified consist has been found.
+
<td width=629><span id="bottom"></span>&#160;</td>
**'''Line 2: Variable Modify Rule''' Adds 1 to the variable '''ConsistCounter'''.
+
<td width=50>&#160;</td> <!-- Skip Down -->
**'''Line 3: Variable Check''' Compares the value stored in '''ConsistCounter''' to a set value (in this case 2). If it matches then the next lines are executed.
+
<td width=50>&#160;</td> <!-- Skip Up -->
***'''Line 4: Message Popup''' Places a message on the screen.
+
<td width=46>[[image:BackToTop.png|link=#top|alt=Top|Top]]</td>
 +
<td width=75>[[image:NextUp.png|link=#stepRules|alt=Next Up|Top]]</td>
 +
<td width=75>&nbsp;</td>
 +
<td width=75>&nbsp;</td>
 +
</tr>
 +
</table> <!-- END Nav Buttons Table -->
  
 
----
 
----
 
----
 
----
<br>
 
 
='''Trainz Wiki'''=
 
='''Trainz Wiki'''=
*'''<span class="plainlinks">[http://online.ts2009.com/mediaWiki/index.php/HowTo How to Guides]</span>'''
+
<table cellpadding=2 bgcolor=#ffffff>
 +
<tr valign="top">
 +
<td>[[image:TrainzWiki.png|link=]]</td>
 +
<td>
 +
<span style="font-size: 17px;">'''More Tutorials and Guides to Using Trainz'''</span><br>
 +
*'''<span class="plain;s">[http://online.ts2009.com/mediaWiki/index.php/HowTo How to Guides]</span>'''
 +
*'''[[Driver Commands List]]'''
 
*'''[[Session Rule List with Parameters|Session Rules List (Alphabetical) with Parameters]]'''
 
*'''[[Session Rule List with Parameters|Session Rules List (Alphabetical) with Parameters]]'''
 
*'''[[Session Rules By Categories With Properties|Session Rules List (Categories) With Parameters]]'''
 
*'''[[Session Rules By Categories With Properties|Session Rules List (Categories) With Parameters]]'''
<br>
+
</td>
<font size="3">'''Route Creation Tutorials:'''</font>
+
</tr>
<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">
+
</table>
*'''[[How to Use Bulk Asset Update/Replace Tool|Using the Bulk Asset Update/Replace Tool]]'''
+
----
*'''[[How to Use Layers|Using Layers]]'''
+
This page was created by Trainz user '''<span class="plain;s">[http://online.ts2009.com/mediaWiki/index.php/User:Pware pware]</span>''' in April 2018 and was last updated as shown below.
</div>
+
----
<br>
+
<font size="3">'''Session Creation Tutorials:'''</font>
+
<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">
+
*'''[[How to Use Message Popup Rule|Adding Message Popups]]'''
+
*'''[[How to Use Message Popup Rule (Applications)|Adding Message Popups - Applications]]'''
+
*'''[[How to Use Navigation Point Rules|Adding Navigation Points]]'''
+
*'''[[How to Use Navigation Point Rules (Applications)|Adding Navigation Points - Applications]]'''
+
*'''[[How to Use Driver Setup Rule|Configuring the Driver Setup Rule]]'''
+
*'''[[How to Control Junctions in Sessions|Controlling Junctions in Sessions]]'''
+
*'''[[How to Control Signals in Sessions|Controlling Signals in Sessions]]'''
+
*'''[[How to Create a HTML Asset|Creating a HTML Asset (Session Introduction Page and In Game Messages)]]'''
+
*'''[[Parent Rule List|List of Parent Rules]]'''
+
*'''[[How to Use Parent and Child Rules|Parent and Child Rules]]'''
+
*'''[[How to Use Track Triggers|Using Track Triggers]]'''
+
</div>
+
 
+
 
[[Category:How-to guides]]
 
[[Category:How-to guides]]

Latest revision as of 10:30, 2 August 2024

The information in this Wiki Page applies to TANE, TRS19, Trainz Plus and TRS22. It gives examples of using variables in Sessions.

Contents

BlueDot10x10.png Variables store integer values in Sessions that can be used to:-
BlueDot10x10.png Test for certain events (e.g. if something has occurred a set number of times)
BlueDot10x10.png Make decisions according to the value held by a variable
BlueDot10x10.png Act as counters or score keepers
BlueDot10x10.png Variables can be used for basic arithmetic by having set values added or subtracted
BlueDot10x10.png Variables can have random values assigned to them


The scenarios shown below give examples of how variables can be used to control the operation of a session.

[edit] Example 1: Random Passenger Stop

    Top   Next Down Bottom
Magnifier.png The Scenario:
In the example shown below a random variable is to be used to decide which one of 3 stations a user controlled train will be required to stop at. The user will be informed of the decision, to stop or not, by a message placed on the screen before they reach each station. When the train approaches the first possible stopping place, Sandplace, the session checks the value stored in "stopID" and if it is "1" then a stop will be requested.
RandomLogic.jpg
DotPoint.JPG If a stop is required then a predefined Navigation Point is shown to indicate the stopping place
DotPoint.JPG The same logic is repeated for the other two stations with stopID values of "2" and "3"


Conditions.PNG Preconditions:
DotPoint.JPG The Randomize Rule is used at the start of the session to create a different sequence of random values each time the session is run
Setting the random variable stopID
DotPoint.JPG The Navigation Display Rule is used to create three Navigation Point Sets, one for each stopping place
DotPoint.JPG The Navigation Set Hide/Show Rule is used to initially hide all three navigation sets
DotPoint.JPG The Variable Random Rule is used to create a variable, stopID, with an integer random value from 1 to 3. Each number representing one of the stops
VariableRandom.jpg


RulesWiki.PNG Rules Used:
DotPoint.JPG Navigation Display Rule to create three Navigation Point Sets (in Preconditions above)
DotPoint.JPG Navigation Set Hide/Show Rule to hide all three navigation sets (in Preconditions above) and to reveal one set identified by the random variable
DotPoint.JPG Randomize Rule to create a different sequence of random values each time the session is run (in Preconditions above)
DotPoint.JPG Variable Random Rule to create the variable stopID (in Preconditions above)
DotPoint.JPG Trigger Check Rule to trigger the decision and message event
DotPoint.JPG Variable Check Rule to check the value held in a session variable
VariableCheck.jpg
Checking the variable stopID for the first stopping place
DotPoint.JPG Message Popup Rule to open a message window on the screen


Screenshot.PNG Session Editor Screenshot:
AppRandomStop1.jpg
The Trigger Check sequence


Explanation.PNG Description:
Line  1 : Trigger Check The event is triggered when the consist passes over a track trigger. This executes the following rules:-
Line  2 : Variable Check The value stored in the variable stopID is tested "=1". Lines 3 and 4 are executed only if stopID is equal to "1"
Line  3 : Navigation Set Hide/Show Displays a navigation point showing the stopping location
Line  4 : Message Popup Displays a message window showing that a stop has to be made at Sandplace
Line  5 : Variable Check The value stored in the variable stopID is tested "<>1". Line 6 is executed only if stopID is not equal to "1".
Line  6 : Message Popup Displays a message window showing that no stop has to be made at Sandplace


[edit] Example 2: Event Counter and Message Selection

    Top Next Up Next Down Bottom
Magnifier.png The Scenario:
Each time a user causes a SPAD (Signal Passed At Danger) at specific locations, the event is counted and an appropriate message is displayed on the screen. The tone of the messages becomes more severe with each occurance.


Conditions.PNG Preconditions:
DotPoint.JPG A variable, SetSPAD (value "0" or "1"), is used to indicate whether a SPAD event is to be counted and responded to or not. This is set to "0" or "1" by track triggers. Use the Variable Modify Rule to create and set this variable
DotPoint.JPG A variable, SPADCounter, is used to count the SPAD events and is initially set at 0. Use the Variable Modify Rule to create and set this variable


RulesWiki.PNG Rules Used:
DotPoint.JPG Signal Passed At Danger Check Rule set to trigger on every SPAD event
DotPoint.JPG Variable Check Rule to check the value held in a session variable
DotPoint.JPG Driver Schedule Rule used to immediately stop the train
DriverSchedule.jpg
Using the Driver Schedule Rule to halt the train
DotPoint.JPG Simultaneous List Rule to force all rules to run simultaneously for speed
DotPoint.JPG Variable Modify Rule to alter the value held in a session variable
DotPoint.JPG Variable Show Rule adds a session variable to the Heads Up Display
DotPoint.JPG Message Popup Rule to open a message window on the screen


Screenshot.PNG Session Editor Screenshot:
VariableSPADWarnings.jpg


Explanation.PNG Description:
Line  1 : Signal Passed At Danger The event is triggered every time a consist passes a signal (or stop sign) set at STOP. This executes the following lines:-
Line  2 : Variable Check The value stored in the variable SetSPAD is tested "=1". If true then the following lines are executed. This executes the following lines:-
Line  3 : Driver Schedule The current schedule (if any) for the user controlled driver is replaced with a Halt Train command to bring the train to an immediate stop
Line  4 : Variable Modify The value stored in the variable SPADCounter is increased by 1
Line  5 : Simultaneous List This forces all the Variable Check Rules to be run simultaneously. This is not strictly necessary but without it all the Variable Check Rules will be tested, one after the other, when only one (or none) of them will be executed. This will (marginally) speed up the processing. This will execute the following lines:-
Line  6 : Variable Check The value stored in the variable SPADCounter is tested "=1". If true then the first SPAD event has occurred and the following lines are executed:-
Line  7 : Variable Show The value stored in the variable SPADCounter is added to the Custom HUD. Each time the value changes it will be updated in the HUD
Line  8 : Message Popup The first warning message is shown on the screen
Line  9 : Variable Check The value stored in the variable SPADCounter is tested "=2". If true then the second SPAD event has occurred and the following line is executed:-
Line  10 : Message Popup The second warning message is shown on the screen
Lines  9  and  10  are then repeated with variations as shown. If more than 5 SPADs occur, then no new messages will be shown (the driver is clearly taking no notice so what is the point?) but the SPADCounter will continue to be updated.


[edit] Example 3: Counting Consist Checks

    Top Next Up Next Down Bottom
Magnifier.png The Scenario:
The Consist Check Rule cannot be set to trigger only once but sometimes you want it triggered only once on (for example) the 2nd time that a particular consist is formed. This example uses a variable to count the number of times the rule has been triggered and acts only when a set count has been reached. It could easily be modified to trigger a set number of times.


Conditions.PNG Preconditions:
DotPoint.JPG A variable, ConsistCount, is initially set to "0". Use the Variable Modify Rule to create and set this variable


RulesWiki.PNG Rules Used:
DotPoint.JPG Consist Check Rule set to trigger when a specific consist has been formed
DotPoint.JPG Variable Modify Rule to set and increase the value held in a session variable
DotPoint.JPG Variable Check Rule to check the value held in a session variable
DotPoint.JPG Message Popup Rule to place a message on the screen


Screenshot.PNG Session Editor Screenshot:
VariableConsistCounter.JPG


Explanation.PNG Description:
Line  1 : Consist Check Rule Triggered when the specified consist has been found. This executes the following lines:-
Line  2 : Variable Modify Rule Adds 1 to the variable ConsistCounter
Line  3 : Variable Check Compares the value stored in ConsistCounter to a set value (in this case 2). If it matches then the next line is executed:-
Line  4 : Places a message on the screen


[edit] Example 4: Train Status

    Top Next Up Next Down Bottom
Magnifier.png The Scenario:
A consist identified by number 188 passes over the same trigger twice, once when empty and once when loaded. Each time the user needs to be given a different set of instructions


Conditions.PNG Preconditions:
DotPoint.JPG A variable, T188Status is initially set to "1" signifying that the train is empty. This will be modified to "2" after it has been loaded. Use the Variable Modify Rule to create and set this variable


RulesWiki.PNG Rules Used:
DotPoint.JPG Trigger Check Rule to trigger the event when the consist reaches the trigger
DotPoint.JPG Variable Check Rule to check the value held in a session variable
DotPoint.JPG Message Popup Rule to place a message on the screen


Screenshot.PNG Session Editor Screenshot:
VariableTrainTrigger.JPG


Explanation.PNG Description:
Line  1 : Trigger Check Rule Triggered by the train. This is NOT set to trigger once only. When triggered it will execute the following lines:-
Line  2 : Variable Check Compares the value stored in T188Status to 1, indicating "empty". If it matches then the next lines are executed:-
Line  3 : Message Popup Places a message on the screen
Line  4 : Variable Check Compares the value stored in T188Status to 2, indicating "loaded". If it matches then the next line is executed:-
Line  5 : Message Popup Places a message on the screen


[edit] Variable Rules and Commands

    Top Next Up   Bottom
RulesWiki.PNG These are the Session Rules that can access, create and/or modify Session variables
DotPoint.JPG Randomize Rule - creates a different set of random numbers every time a session is run
DotPoint.JPG Variable Check Rule - executes child rules according to the value of a specified variable
DotPoint.JPG Variable Modify Rule - changes the value of a specified variable and creates new variables by setting their initial values
DotPoint.JPG Variable Modify Continuous Rule - continuously changes the value of a specified variable
DotPoint.JPG Variable Random Rule - assigns a random value to a variable
DotPoint.JPG Variable Show Rule - adds or removes a specified variable and a descriptive label to the custom HUD


CommandsWiki.png These are the Driver Commands that can access Session variables. The WikiLink.PNG InputTable Rule must be added to the Session and configured with the names of the variables before these Driver Commands can be used.
DotPoint.JPG Skip if Session Variable - conditionally jumps to the named command label in the Driver Command Bar if a selected session variable meets a set condition
DotPoint.JPG Wait Until S-Variable V3 - AI driver waits for the specified variable condition to occur
      Top Next Up    


[edit] Trainz Wiki

TrainzWiki.png

More Tutorials and Guides to Using Trainz


This page was created by Trainz user pware in April 2018 and was last updated as shown below.


Personal tools