Freitag, 19. April 2013

Dein WheriGo in Hamburg, München, Köln, Berlin ....

Voraussetzung: "Der Einstieg in lua“
Was passiert, wenn man einen Wherigo veröffentlich hat, der gut ankommt? Richtig auf kurz oder lang kommen die Anfragen "Tolle Sache, können wir den in Leipzig, München, Hamburg, Berlin .... auch veröffentlichen?"
Wenn der Wherigo keine Ortmerkmale verlangt ist dies ja auch kein Problem. Vorallem wenn man ein Spielfeld braucht, das man an beliebiger Stelle spielen kann.
Möchte man aber keinen PlayAnywhere daraus bauen, bzw. dem Spieler das lästige und oft nicht verstandene Abstecken des Spielfeldes ersparen, so kann man mehrere Locations vordefinieren und dem Spieler eine MultipeChoice-Box vorlegen (die aber bei vielen Anfragen schon mal sehr lang ist und mit viel Scrollen verbunden ist)
Doch muss das sein? Wäre es nicht viel angenehmer, das Cartrigde entscheidet selbst wo gespielt werden soll? Wenn ich bei N 50° 56.000, E 6° 57.000 stehe macht es wenig Sinn die norddeutsche Version zu wählen. Nein einzig "Köln" ist die Option, die für mich Sinn macht.

Abbildung 1: Definition der möglichen Locations und Auswahl der nähesten

Wie soll aber das Cartrigde entscheiden welches die richtige Version ist? Natürlich über die Abstände zu den Spielfeldern. Dabei definiert man die möglichen Orte als Array wie in Zeile 227 - 229 zu sehen ist.
In diesem Beispiel geht es um ein rechteckiges Spielfeld bei dem ObenLinks und UntenRechts als Koordinaten definiert sind. Wie man daraus ein Rechteck berechnet seht ihr im nächsten Teil. (Wird die Tage folgen)
Zur Abstandsberechnung nehmen wir die Ecke ObenLinks.

Danach misst man mit Player.ObjectLocation seinen eigenen Standort. Der Rest ist ein ganz normaler Min/Max-Algorithmus:
  • Schaue für jede Location ob sie näher ist als das bisherige Minimum. (Oder ob es noch kein Minimum gab)
  • Wenn dem so ist, setze die Entfernung zur Location als neues Minimum und merke dir den Index. (Die Entfernung brauchen wir für den nächsten Vergleich und den Index als Pointer auf die Location)
Nach der Schleife über alle Locations greifen wir mit dem Index auf die näheste zu und setzten den die beiden Punkte für unser Rechteck.