Aufruf von Scriptfunktionen

Durch den Aufruf einer Scriptfunktion wird der Script der Funktion ausgeführt. Dabei kann die aufrufende Scriptfunktion Parameter an die Funktion übergeben und den Rückgabewert der Funktion verwerten.

Aufruf einer lokalen Funktion

Befindet sich die Funktion, die aufgerufen werden soll, im selben Script wie die aufrufende Funktion, so ist dies ein "lokaler" Funktionsaufruf. Dabei wird die Funktion direkt über ihren Namen aufgerufen.

Beispiel:

func TestFunction()
{
  Log("The test function has been called!");
}

func MyCall()
{
  TestFunction();
}
Wird hier die Funktion MyCall() ausgeführt, so wird die Funktion TestFunction() aufgerufen, welche eine entsprechende Nachricht ins Log ausgibt.

Aufruf einer Funktion in einem anderen Objekt

Will man eine Funktion im Script eines anderen Objekts aufrufen, so reicht der Name nicht aus, um einen Aufruf ausführen zu können. Es muss zusätzlich das Objekt angegeben werden, in dem die aufzurufende Funktion steht.

Beispiel:

Script Objekt A (ID TestObjectA):
func Activate()
{
  Log("Activate has been called in Object A!");
  Explode(20);
}
Script Objekt B:
func Activate()
{
  var obj = FindObject(Find_Id(TestObjectA), Sort_Distance());
  obj->Activate();
}	
Der Script der Funktion Activate() in Objekt B sucht sich als erstes das nächstliegende Objekt vom Typ A (also mit der ID TestObjectA) und speichert es in der Veriable obj. Danach wird die Funktion Activate() im Script von diesem Objekt aufgerufen. Dazu wird zuerst das aufzurufende Objekt angegeben, gefolgt von dem Pfeil, der einen Objektaufruf markiert. Danach folgt der Funktionsname der aufzurufenden Funktion nebst der Parameterliste (in diesem Fall werden keine Parameter übergeben).
Es wird also durch den Aufruf von Activate() in Objekt B bewirkt, dass das nächstliegende Objekt vom Typ A in die Luft gejagt wird. Es handelt sich also im Beispiel um eine Art sehr primitiver Fernsteuerung für Objekt A. Der Aufruf erzeugt jedoch einen Fehler, wenn kein Objekt A existiert. Um dies zu vermeiden, sollte vor dem Aufruf von Activate() geprüft werden dass obj nicht nil ist.

Anmerkungen

Die Speicherung des Objektzeigers in der Variable obj im Beispiel ist nicht erforderlich. Die folgende Schreibweise der Funktion Activate() in B ist gleichwertig:
func Activate()
{
  FindObject(Find_Id(TestObjectA), Sort_Distance())->Activate();
}

Indirekter Aufruf von Skriptfunktionen

In manchen Situationen kann allerdings auch ein "indirekter" Aufruf durch die Engine-Funktionen Call und Verwandte sinnvoll sein. Hier wird der Funktionsname als String übergeben, was den Aufruf einer Funktion "nach Namen" ermöglicht.

Beispiel:

func TestFunction()
{
  Log("The test-function has been called!");
}
	
func MyCall()
{
  Call("TestFunction");
}
Mit Call ist es ist möglich, zur Laufzeit zu entscheiden, welche Funktion aufgerufen werden soll. Eine Anwendung soll das folgende Beispiel deutlich machen:
func TestFunction()
{
  Call(Format("MyCall%d", Random(3)));
}

func MyCall0() { Log("Die erste Funktion wurde aufgerufen!"); }
func MyCall1() { Log("Die zweite Funktion wurde aufgerufen!"); }
func MyCall2() { Log("Die dritte Funktion wurde aufgerufen!"); }
Hier wird in TestFunction() eine zufällige Funktion aufgerufen (mittels Random und Format wird zufällig einer der drei Strings "MyCall1", "MyCall2" oder "MyCall3" an Call übergeben).
Call muss hier verwendet werden, da erst zur Laufzeit bestimmt wird, welche Funktion aufgerufen wird. Außerdem wird bei jeder Ausführung von TestFunction() eine andere Scriptfunktion ausgewählt, die aufgerufen wird. Dies wäre mit einem direkten Aufruf nicht möglich.
Es gibt noch ein paar weitere Methoden für indirekte Aufrufe. Siehe GameCall.
PeterW, 2003-05
Günther, 2010-08