New State Logic
From Build #107.1, a new state logic for signals has been implemented.
The previous state control (see http://www.markhodson.nl/2kdhelp/446.htm) has been found to be unsatisfactory with some more complex signal types. It can still be used, but a new syntax, based on Rail3D scripting can now be used instead (as well).
Principles
Instead of providing a state table, you may now write script code to set a lamp colour.
For example:
if(#S)
{
#Colour(255,0,0,0);
}
else
{
#Colour(0,0,0,0);
}
would set the lamp to red (255.0.0) if the signal is On (State ‘S’ - stop), or to black (off) otherwise.
Scripting
The new code uses exactly the same scripting as the main Rail3D scripting engine (see Signal for details of scripting of signals. The only changes are:
- State setting code is added to a lamp inside a pair of braces
- State setting code is called as for the OnSetLamps() function (see Signal)
- Lamps must have a lamp id defined to use the new code
- Some shorthand is allowed in the lamp code block, for example #S is a shorthand for the signal being on. The full list of substitutions is given below.
Substitutions
To simplify the code in a signal lamp block, and hopefully draw the comparison with the older state tables, some script functions may be written in a shorthand. Thus the example given above is the shorthand version of:
if(Signal.IsOn())
{
Signal.SetLamp(id,255,0,0,0);
}
else
{
Signal.SetLamp(id,0,0,0,0);
}
where ‘id’ is the id of the signal lamp.
The full list of shorthand substitutions is:
#S |
IsOn() |
#C |
IsCau() |
#C2 |
IsCau2() |
#J |
IsJct() |
#J2 |
IsJct2() |
#H |
IsShunt() |
#L |
IsClear() |
#Colour |
SetLamp(id, |
MRG 05/06/2013 12:10:27