Game Engine Math

KWEngine, Teil 28: Map-Overlay

Jede Welt-Instanz hat einen Verweis auf ein Objekt (namens Map), das von der Klasse WorldMap stammt. Sie muss einmalig pro Welt konfiguriert werden.

Objekte, die auf der Map angezeigt werden sollen, werden (anders als es für andere Objekte nötig ist) keiner Liste hinzugefügt, sondern müssen pro Frame neu bestimmt werden. Aus diesem Grund muss die Welt in ihrer Act()-Methode regelmäßig entscheiden, welche Objekte angezeigt werden.

Das Map-Overlay wird wie folgt in der Prepare()-Methode der Welt-Instanz konfiguriert (Schritt 1) und dann in der Act()-Methode regelmäßig befüllt (Schritt 2):

public class MapExample : World
{
    public override void Act()
    {
        // Schritt 2: Jeden Frame dynamisch Objekte der Map hinzufügen
        if(Map.Enabled == true)
        {
            // Optional: Map gemäß der Spielerposition verschieben und rotieren
            Map.UpdateCameraRotation(myPlayerObject.LookAtVectorXZ);
            Map.UpdateCamera(
                new Vector3(
                    myPlayerObject.Position.X, 
                    myPlayerObject.Position.Y + 50, 
                    myPlayerObject.Position.Z)
            );
            
            // Objekte auf Map anzeigen:
            // Liste aller in der Welt liegenden Items erfragen
            List<Item> items = GetGameObjectsByType<Item>();
            for(int i = 0; i < items.Count; i++)
            {
                Map.Add(
                    items[i],                  // Objekt, das angezeigt werden soll
                    0,                         // z-Index (muss zwischen -2f und +2f liegen)
                    new Vector3(1, 0, 1),      // Färbung des Objekts
                    new Vector3(1, 1, 1),      // Leuchtfärbung des Objekts
                    0,                         // Intensität der Leuchtfärbung
                    1,                         // Sichtbarkeit (zwischen 0f und 1f)
                    0,                         // Wenn > 0, wird stattdessen dieser Wert als Objektgröße verwendet
                    "./Textures/someImage.png" // Für das Map-Objekt zu verwendende Textur
                );
            }
        }
    }

    public override void Prepare()
    {
        // Kamera der Map konfigurieren:
        Map.SetCamera(
            0f, 50f, 0f,                   // Position der Map-Kamera
            ProjectionDirection.NegativeY, // Blickrichtung der Kamera (in diesem Beispiel nach unten)
            50,                            // Sichtfeld der Kamera (in z.B. Metern) in der Breite
            50,                            // Sichtfeld der Kamera (in z.B. Metern) in der Höhe
            1,                             // Naheinstellgrenze (Objekte näher als 1 Einheit werden ignoriert)
            100);                          // Ferneinstellgrenze (Weiter als 100 Einheiten entfernte Objekte werden ignoriert)

        // Position der Map auf dem Bildschirm konfigurieren:
        Map.SetViewport(
            Window.Width - 384 / 2,        // X-Position der Mitte der Map auf dem Bildschirm
            Window.Height - 384 / 2,       // Y-Position der Mitte der Map auf dem Bildschirm
            384,                           // Breite der Map auf dem Bildschirm
            384,                           // Höhe der Map auf dem Bildschirm
            true);                         // Map soll als Kreis dargestellt werden

        // Optional: Hintergrund der Map konfigurieren
        Map.SetBackground(
            "./Textures/myGrid.png",       // Hintergrundtextur
            100,                           // Wie viele Einheiten der Spielwelt deckt der Hintergrund ab? (Breite)
            100,                           // Wie viele Einheiten der Spielwelt deckt der Hintergrund ab? (Höhe)
            1.0f,                          // Sichtbarkeit (zwischen 0f und 1f)
            1.0f,                          // Texturwiederholung in X-Richtung
            1.0f);                         // Texturwiederholung in Y-Richtung

        Map.Enabled = true;                // Map anzeigen lassen
    }
}

Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.