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 } }
Schreibe einen Kommentar