2D-Anzeigen mit Scripten programmieren ed

Allgemein ed

Das Koordinaten-System: (x=0)=links, (x=1)=rechts, (y=0)=oben, (y=1)=unten, (z=0)=vorne, (z=1)=hinten

Hiermit können Anzeigen realisiert werden, die unabhängig von der 3d-Welt sind. Sie eignen sich zum Beispiel für Lebenspunkt- und andere Statusanzeigen.

2D-Anzeigen ed

Stellt ein Bild, also ein Stück einer Textur, als ein rein 2-dimensionales Objekt am Bildschirm dar.

Picture.source (rect.ID) gibt den Ausschnitt aus der Textur an

Picture.tc_inverted (false) rotiert die Textur um 90°

Picture.color.a (White) wird als Transparenz (Sichtbarkeit) benutzt

Text-Anzeigen ed

Stellt einen String als Textelement auf dem Bildschirm dar.

Text.centric (false) richtet den Text mit Text.pos als Mittelpunkt aus

Text.vertical (false) ordnet die Buchstaben übereinander an

Text.color.a wird als Transparenz (Sichtbarkeit) benutzt

Text.size ist die Höhe der Zeichen pro Bildschirm-(Target)-Höhe

Text.font (engine.default_font) ist ein mit LoadFont zu ladender BitMap-Font

3D-Modelle in den Anzeigen ed

Ein 3d-Modell wird auf die 2-dimensionale Bildschirm-Ebene projeziert.

Picture3d.relative (true) gibt an, ob ein [0,1][0,1]-Koordinatensystem oder Bildschirm-Pixel-Angaben benutzt werden sollen

Picture3d.lighting (false) lässt die Modelle von Lichtquellen beleuchten

Picture3d.matrix Transformations-Matrix von Modell- nach Anzeige-Koordinaten

Picture3d.model das eigentliche Modell

Anzeigen-Gruppierungen ed

Fassen mehrere der obigen Elemente zusammen, so dass kollektiv deren Farben und Positionen beeinflusst werden können.

Layer.pos ist die kollektive Position, die den Elementen hinzuaddiert werden soll

Layer.color (White) ist die farbe, mit der die Farben der Elemente multipliziert werden sollen

Die Variable current_layer legt fest, ob und zu welcher Gruppe neue Elemente beim Erstellen hinzugefügt werden sollen. (siehe Beispiel)

Beispiel ed

Beispiel:

float t
Layer *group

void main()
    t = 0

    // eine alles einhüllende Gruppe
    group = new Layer( vector(0.2, 0.2, 0.1), // Position
                       true )                 // die folgenden Anzeigen der Gruppe hinzufügen

    // ein Bildchen
    Picture *pic = new Picture(vector(0.1, 0.1, 0),                   // Position
                               0.2, 0.2,                              // Größe relativ zum Bildschirm
                               LoadTexture("irgend_eine_textur.jpg")) // kein Ausschnitt, die komplette Textur verwenden

    // Text
    Text *txt = new Text(vector(0.1, 0.2, 0), // Position
                         0.04,                // Schriftgröße (relativ zum Bildschirm)
                         Blue,                // blau
                         "test")             // eigentlicher Text

    // ein Modell
    matrix mat = matrix_rotation(vector(0.5, 1.1, 0))
    Picture3d *p3d = new Picture3d(LoadModel("irgend-ein-model"), // ein Modell
                                   mat,                           // die Drehung
                                   0.1)                           // Bildschirm-Tiefe

    // Gruppierung abschließen
    current_layer = nil

void on_iterate(float dt)
    // die komplette Gruppe blinken lassen
    t += dt * 2
    group.color.a = 0.7 + 0.3 * sin(t)

Beispiel mit Klassen ed

Beispiel:

class HealthPanel extends Text

    void __init__()
        pos = vector(0.1, 0.1, 0)
        size = 0.04

    override void on_iterate(float dt)

        // Text-Anzeige für die Lebenspunkte (hier var[1]) verwenden
        text = "Lebenspunkte: " + ego.var[1].str2(1)