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.

...->Source gibt den Ausschnitt aus der Textur an

...->TCInverted (false) rotiert die Textur um 90°

...->Color.a wird als Transparenz (Sichtbarkeit) benutzt

Text-Anzeigen ed

Stellt einen String als Textelement auf dem Bildschirm dar.

...->Centric (false) richtet den Text mit ...->Pos als Mittelpunkt aus

...->Vertical (false) ordnet die Buchstaben übereinander an

...->Color.a wird als Transparenz (Sichtbarkeit) benutzt

...->Size ist die Höhe der Zeichen pro Bildschirm-(Target)-Höhe

...->Font (DefaultFont) ist ein mit LoadXFont zu ladender BitMap-Font

3D-Modelle in den Anzeigen ed

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

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

...->Lighting (false) lässt die Modelle von Lichtquellen beleuchten

...->Matrix Transformations-Matrix von Modell- nach Anzeige-Koordinaten

...->model das eigentliche Modell

Anzeigen-Gruppierungen ed

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

...->Pos ist die kollektive Position, die den Elementen hinzuaddiert werden soll

...->Color ist die farbe, mit der die Farben der Elemente multipliziert werden sollen

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

Beispiel ed

Beispiel:

void main()
{
    // eine alles einhuellende Gruppe
    grouping group = CreateGrouping( vector( 0.2f, 0.2f, 0.1f ), // Position
                                     White,                      // keine Einfaerbung
                                     true );                     // die folgenden Anzeigen der Gruppe hinzufuegen

    // ein Bildchen
    picture pic = CreatePicture( vector( 0.1f, 0.1f, 0 ),                 // Position
                                 0.2f, 0.2f,                              // Groesse relativ zum Bildschirm
                                 LoadTexture( "irgend_eine_textur.jpg" ), // kein Ausschnitt, die komplette Textur verwenden
                                 White );                                 // keine Einfaerbung

    // Text
    text txt = CreateText( vector( 0.1f, 0.2f, 0 ), // Position
                           0.04f,                   // Schriftgroesse (relativ zum Bildschirm)
                           Blue,                    // blau
                           "test" );                // eigentlicher Text

    // ein Modell
    matrix mat;
    MatrixRotation( mat, vector( 0.5f, 1.1f, 0 ) );
    picture3d p3d = CreatePicture3D( LoadModel( "irgend_ein_model" ), // ein Modell
                                     &mat,                            // die Drehung
                                     0.1f);                           // Bildschirm-Tiefe

    // Gruppierung abschliessen
    CurrentGrouping = NULL;

    float t = 0;

    while( true ){

        // Text-Anzeige fuer die Lebenspunkte verwenden
        txt->Str = "Lebenspunkte: " + f2s( ego->Life, 1 );

        // die komplette Gruppe blinken lassen
        t += elapsed * 2;
        group->Color.a = 0.7f + 0.3f * sin( t );

        wait_of();
    }

}