Legacy:UnrealScript Language Reference/Program Structure: Difference between revisions
A couple of tweaks |
m added the legal stuff about the origin of the document |
||
Line 1: | Line 1: | ||
==UnrealScript Language Reference == | |||
''This subpage is part of a document by Tim Sweeney. The Unreal Wiki has been granted permission to host it. Please don't make any edits to these pages other than basic formatting of the text. If you have more to say on a topic here, please start a new Wiki page on it, for example from [[Legacy:UnrealScript|UnrealScript]] or [[Legacy:Unreal Engine|Unreal Engine]], and then add a "related topics" section to the very end of a page here.'' | |||
{{innerbox| Tim Sweeney <br />Epic MegaGames, Inc. <br />tim@epicgames.com <br />http://www.epicgames.com | |||
}} | |||
==Program Structure == | ==Program Structure == | ||
Line 201: | Line 209: | ||
</uscript> | </uscript> | ||
'''Note:''' due to a bug in the unrealscript parser, you cannot use a loop construct ('''while''', '''for''', ''etc'') in a simple '''else''' clause. You must use the form with brackets. | {| | ||
|- | |||
|'''Note:''' due to a bug in the unrealscript parser, you cannot use a loop construct ('''while''', '''for''', ''etc'') in a simple '''else''' clause. You must use the form with brackets. | |||
|} | |||
===Case Statements === | ===Case Statements === | ||
Line 231: | Line 243: | ||
</uscript> | </uscript> | ||
A '''switch''' statement | A '''switch''' statement consists of one or more '''case''' statements, and an optional '''default''' statement. After a switch statement, execution goes to the matching '''case''' statement if there is one; otherwise execution goes to the '''default''' statement; otherwise execution continues past the end of the '''select''' statement. | ||
After you write code following a '''case''' label, you must use a '''break''' statement to cause execution to go past the end of the '''switch''' statement. If you don’t use a '''break''', execution "falls through" to the next '''case''' handler. | After you write code following a '''case''' label, you must use a '''break''' statement to cause execution to go past the end of the '''switch''' statement. If you don’t use a '''break''', execution "falls through" to the next '''case''' handler. | ||
{| | {| |
Latest revision as of 14:40, 20 June 2006
UnrealScript Language Reference
This subpage is part of a document by Tim Sweeney. The Unreal Wiki has been granted permission to host it. Please don't make any edits to these pages other than basic formatting of the text. If you have more to say on a topic here, please start a new Wiki page on it, for example from UnrealScript or Unreal Engine, and then add a "related topics" section to the very end of a page here.
Tim Sweeney
Epic MegaGames, Inc.
tim@epicgames.com
http://www.epicgames.com
Program Structure
UnrealScript supports all the standard flow-control statements of C/C++/Java:
For Loops
For loops let you cycle through a loop as long as some condition is met. For example:
<uscript> // Example of "for" loop. function ForExample() {
local int i; log( "Demonstrating the for loop" ); for( i=0; i<4; i++ ) { log( "The value of i is " $ i ); } log( "Completed with i=" $ i);
} </uscript>
The output of this loop is:
Demonstrating the for loop The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 Completed with i=4
In a for loop, you must specify three expressions separated by semicolons. The first expression is for initializing a variable to its starting value. The second expression gives a condition which is checked before each iteration of the loop executes; if this expression is true, the loop executes. If it’s false, the loop terminates. The third condition gives an expression which increments the loop counter.
Though most for loop expressions just update a counter, you can also use for loops for more advanced things like traversing linked lists, by using the appropriate initialization, termination, and increment expressions.
In all of the flow control statements, you can either execute a single statement, without brackets, as follows:
<uscript> for( i=0; i<4; i++ )
log( "The value of i is " $ i );
</uscript>
Or you can execute multiple statements, surrounded by brackets, like this:
<uscript> for( i=0; i<4; i++ ) {
log( "The value of i is" ); log( i );
} </uscript>
Do-Until Loops
Do-Until loops let you cycle through a loop while some ending expression is true. Note that Unreal's do-until syntax differs from C/Java (which use do-while).
<uscript> // Example of "do" loop. function DoExample() {
local int i; log( "Demonstrating the do loop" ); do { log( "The value of i is " $ i ); i = i + 1; } until( i == 4 ); log( "Completed with i=" $ i);
} </uscript>
The output of this loop is:
Demonstrating the do loop The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 Completed with i=4
While Loops
While loops let you cycle through a loop while some starting expression is true.
<uscript> // Example of "while" loop. function WhileExample() {
local int i; log( "Demonstrating the while loop" ); while( i < 4 ) { log( "The value of i is " $ i ); i = i + 1; } log( "Completed with i=" $ i);
} </uscript>
The output of this loop is:
Demonstrating the while loop The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 Completed with i=4
Break
The break command exits out of the nearest loop (For, Do, or While).
<uscript> // Example of "while" loop. function WhileExample() {
local int i; log( "Demonstrating break" ); for( i=0; i<10; i++ ) { if( i == 3 ) break; log( "The value of i is " $ i ); } log( "Completed with i=" $ i );
} </uscript>
The output of this loop is:
Demonstrating break The value of i is 0 The value of i is 1 The value of i is 2 Completed with i=3
Goto
The Goto command goes to a label somewhere in the current function or state.
<uscript> // Example of "goto". function GotoExample() {
log( "Starting GotoExample" ); goto Hither;
Yon:
log( "At Yon" ); goto Elsewhere;
Hither:
log( "At Hither" ); goto Yon;
Elsewhere:
log( "At Elsewhere" );
} </uscript>
The output is:
Starting GotoExample At Hither At Yon At Elsewhere
Conditional Statements
If, Else If, and Else let you execute code if certain conditions are
met.
<uscript> // Example of simple "if". if( LightBrightness < 20 )
log( "My light is dim" );
// Example of "if-else". if( LightBrightness < 20 )
log( "My light is dim" );
else
log( "My light is bright" );
// Example of "if-else if-else". if( LightBrightness < 20 )
log( "My light is dim" );
else if( LightBrightness < 40 )
log( "My light is medium" );
else if( LightBrightness < 60 )
log( "My light is kinda bright" );
else
log( "My light is very bright" );
// Example of "if" with brackets. if( LightType == LT_Steady ) {
log( "Light is steady" );
} else {
log( "Light is not steady" );
} </uscript>
Note: due to a bug in the unrealscript parser, you cannot use a loop construct (while, for, etc) in a simple else clause. You must use the form with brackets. |
Case Statements
Switch, Case, Default, and Break let you handle lists of conditions easily.
<uscript> // Example of switch-case. function TestSwitch() {
// Execute one of the case statements below, based on // the value in LightType. switch( LightType ) { case LT_None: log( "There is no lighting" ); break; case LT_Steady: log( "There is steady lighting" ); break; case LT_Backdrop: log( "There is backdrop lighting" ); break; default: log( "There is dynamic" ); break; }
} </uscript>
A switch statement consists of one or more case statements, and an optional default statement. After a switch statement, execution goes to the matching case statement if there is one; otherwise execution goes to the default statement; otherwise execution continues past the end of the select statement.
After you write code following a case label, you must use a break statement to cause execution to go past the end of the switch statement. If you don’t use a break, execution "falls through" to the next case handler.
see also Flow Syntax on the Wiki |
Prev Page: Legacy:UnrealScript Language Reference/Functions – Section 5 of 9 – Next Page: Legacy:UnrealScript Language Reference/States