Objekte mit Scripten programmieren ed

Variablen-Typ ist object.

Die komplette Script-Datei wird für jedes Objekt einzeln neu erzeugt! Objekte gleichen Typs haben somit unabhängige (globale) Variablen, aber die gleichen Funktionen. Das erzeugende Objekt kann immer über this angesprochen werden.

Sobald das Objekt geladen wird, wird auch angefangen, seine void main() auszuführen. Durch eine while-Schleife kann ein dauerhaftes Verhalten programmiert werden, es muss aber unbedingt ein wait()-Befehl eingebaut sein!!! Wird das Objekt gelöscht, so wird auch das Script beendet, sobald es einen wait-Befehl erreicht.

Bevor das Objekt gelöscht wird, wird die Funktion void KillObject() in dessen Script ausgeführt ("Destructor"). Hierin können zum Beispiel für das Objekt geladene Partikel, Sounds, etc. gelöscht werden.

Alle Objekte in der 3d-Welt sind in der Liste Object[] enthalten. Der Index ist für jedes Objekt fest, weswegen die Liste nach dem Löschen von Objekten Lücken enthalten kann.

Beispiel:

// per Makro einen Alias-Namen fuer die Objekt-Variable Nr 13 festlegen
#define Test	Var[13]

void main()
    this.Name = "Heinz" // Name in Heinz aendern
    this.Test = 4.1

    while true

        // solange das Objekt existiert seine Geschwindigkeit festhalten
        this.Vel = vector(100, 0, 0)

        // einen Frame warten
        wait_of()

Beispiel: (komplizierter)

void main()
    float time_run = 0
    float min_distance = 200.0

    // das ego-Objekt verfolgen
    while true

        // in welcher Richtung ist ego?
        vector dpos = ego.Pos - this.Pos
        float ang_y = atan2(dpos.z, dpos.x)
        float distance = VecLength(dpos)

        // in ego-Richtung ausrichten
        this.Ang = vector(0, ang_y, 0)

        // auf ego zulaufen
        vector dir
        VecNormalize(dir, dpos)
        if distance > min_distance
            this.Vel = dir * 100.0
        else
            this.Vel = v0

        // Animation
        this.Model.ResetMove()
        if distance > min_distance
            // vielleicht eine Lauf-Animation...
            this.Model.Move(MoveOpSet, 0, 0, 13, time_run, elapsed, 0, true)

        wait_of()