TrainzScript Keywords
From TrainzOnline
(Difference between revisions)
Builderbob (Talk | contribs) m (Categories) |
m (Add links between language reference pages) |
||
Line 1: | Line 1: | ||
+ | * [[TrainzScript Language Reference]] | ||
+ | ** [[Comments & Delineation]] | ||
+ | ** [[TrainzScript Keywords]] | ||
+ | ** [[Operators]] | ||
+ | ** [[Types]] | ||
+ | |||
+ | <br /> | ||
+ | |||
==Keywords== | ==Keywords== | ||
__NOEDITSECTION__ | __NOEDITSECTION__ |
Revision as of 00:09, 29 December 2020
- TrainzScript Language Reference
- Comments & Delineation
- TrainzScript Keywords
- Operators
- Types
Keywords
break
- Exits from current code block (for, wait, switch, while)
- Execution will continue with the first statement after the loop.
// This loop will complete when n is greater than 5 or when n == list.size(), whichever occurs first for (n = 0; n < list.size(); n++) { if (n > 5) break; }
case
- Individual case statements are labels that the code will jump to dependent on the value of the integer expression following the keyword.
- The case statement is used in the switch control flow statement to declare an integer option and the action to be taken when execution is transferred to this label.
- This code will print the days of the week from Sunday to Saturday:
int i; string dayOfWeek; for(i = 0; i < 6; i++) { switch(i) { case 0 : dayOfWeek = "Sunday"; break; case 1 : dayOfWeek = "Monday"; break; case 2 : dayOfWeek = "Tuesday"; break; case 3 : dayOfWeek = "Wednesday"; break; case 4 : dayOfWeek = "Thursday"; break; case 5 : dayOfWeek = "Friday"; break; case 6 : dayOfWeek = "Saturday"; break; default : dayOfWeek = "ERROR"; } Interface.Print(dayOfWeek); }
- switch transfers execution to the statement immedaitely following the appropriate case label.
- If there is no match execution continues after the default label.
- Note that the list of statements following the case selector should normally terminate with break; (which exits from the switch statement) or return (which exits from the entire method) to prevent the code from running on into the next section.
class
- Class defines a new class declaration and the identity of the immediate parent:
class ChildClass isclass ParentClass { class members... class methods... };
- More than one class declaration may be included in the same file.
continue
int i; for(i = 0; i < 10; ++i) { if(i == 5) continue; Interface.Print(i); }
- The above code will print 0 to 4, skip 5 and then print 6 to 9.
default
- See case.
define
- define is used to declare a constant
- Constants must be initialised on declaration and cannot be changed in code.
define string firstDay = "Monday"; // declares a string variable available anywhere within the containing class define public int daysInWeek = 7; // declares an integer variable which will also be available from outside the class.
else
- see if
false
- Boolean constant
!true = false
final
- A class or method specifier that prevents users from overriding the declaration
final class Info { string name; string address; }
- Given the above the declaration the following declaration would not be possible
class DetailedInfo isclass Info { string telephone; }
for
- for is a control flow loop statement.
- A for loop has four parts and takes the form: for(A; B; C) D where:
- A initialises a counter variable, and is executed before the looping begins
- B is the test condition, looping will continue while B is true
- C is the loop expression, and will be executed at the end of every loop
- D is the code body statement, usually a compound statement, and is executed on every loop.
int i; Junction[] junctions = World.GetJunctionList(); for (i = 0; i < junctions.size(); i++) { string name = junctions[i].GetName(); Interface.Print("Junction " + i + " is called " + name); }
- Depending on the values of Parts A and B the loop may not execute at all.
game
- Class specifier reserved for built-in predefined classes.
goto
- The goto statement will branch to a label statement. For example:
int i = 5 A: // label statement Interface.Print("hello"); if(i--) goto A;
- The above code will print hello 5 times. (zero evaluates as boolean false)
if
- if and else are keywords for the construction of if / then / else constructs used to control program flow
- Code following an if(condition) statement is executed only when the condition evaluates to true.
- In any other case execution branches to any immediately following else statement.
- else and else if clauses are optional.
int i = Math.Rand(0, 3); if (i == 0) { Interface.Print("i is 0"); } else if (i == 1) { Interface.Print("i is 1"); } else { Interface.Print("i is 2"); }
include
- Syntax: include "filename.gs"
- This statement must appear before any class declarations and will include the contents of the specified script file.
- It is generally sufficient to include the *.gs filename related to the immediate parent of your script.
inherited
- an inherited() statement is made within a method definition to call the corresponding method in the immediate parent of the class.
- inherited() returns the same type, and takes the same parameters as the parent method.
- Inheritance is central to Object Oriented Programming, you should not omit these calls.
mandatory
- mandatory is a method specifier which indicates that, if the method is over-ridden the over-ridden method must call inherited.
me
- me refers to the current object, similar to self or this keywords in other languages.
- me is often understood if not stated, these statements would have the same effect:
me.SetMeshAnimationState(); SetMeshAnimationState()
native
- A method specifier which indicates that the method is implemented by the game rather than in script code.
null
- null is an uninitialised expression.
- Every reference that is not assigned to an object has the value null.
- Assigning null to an existing object will delete the reference to that object.
on
- see wait()
public
- A specifier indicating that the member or method is accessible from outside the current class.
return
- Exits immediately from the current method, used when the method return type is void.
- or exit from the current method returning value to the calling routine.
- Value must match the method return type.
static
- static is a class specifier denoting that only one instance of the class may exist.
- Static classes cannot be created using the new operator.
- To access a static class refer to its members or methods using the class name as follows:
static class owner { public string forename; // public member public string surname; // public member public string GetName(void) { // public method return forename + " " + surname; } }; class postbox isclass MapObject { public void Init(void) { if (!owner.forename) owner.forename = "Fred"; if (!owner.surname) owner.surname = "Bloggs"; Interface.Print(owner.GetName()); } }
- Since only one instance of owner may exist it will be created along with the first instance of the postbox obect
- Any future postboxes will find the members of the owner class already initialised and ready for use.
switch
- See case.
thread
- A thread is a method which runs independently of the main script code.
- threads can be started and synchronised by standard methods or other threads but are allowed to wait for events or to carry out tasks requiring periods of inactivity without interrupting the main program flow.
- Threaded methods may only be declared in classes extending the GameObject class or its children.
- Many threads (up to 64) may be running on the same game object instance at a time.
class Tutorial isclass Buildable { bool doorsOpen = false; public void Init(void) { inherited(); AddHandler(me,"Object","","ObjectHandler"); } thread void RingTheBell(void) { while (doorsOpen) { Sleep(0.35 + World.Play2DSound(GetAsset(),"bell.wav")); } } void ObjectHandler(Message msg) { if (msg.minor == "Enter") { doorsOpen = true; RingTheBell(); } else doorsOpen = false; } };
- In the above the thread RingTheBell is started on an Object,Enter message and will terminate on any other Object message, irrespective of other code within the class.
true
- Boolean constant
!false = true
void
- void is a null type used in two situations:
- to indicate that a method requires no parameters
- to indicate that a method does not return a value
public void DoTheDo(void);
wait
- wait is a control flow statement that suspends execution of a thread pending receipt of a message of a given type.
- It can listen for multiple message types using the on statement.
- When a wait statement is executed, execution stops on the thread until one of the on conditions is met.
wait() { on "hello", "world" : { // code here will execute for any hello,world message and then continue to wait for other messages. continue; } on "hi", "there" : { // code here will execute for any hi,there message and then exit the loop. break; } on "hey", "" : { // code here will execute for any message with a major type of // "hey" this will break by default, terminating the wait() loop. } }
while
- A while(condition) is a loop control method that will continue as long as its condition evaluates to true.
- Note that if the condition is initially false the loop will not run at all
int i = 5; while (i > 0) { Interface.Print("i is greater than zero"); }