Skip to content

Das Loot System

Scrittl edited this page Dec 19, 2014 · 8 revisions

Allgemein

Das Lootsystem läuft über die Klasse "Chest", die Methoden zum Hinzufügen von Loot-Objekten, Anzeigen von Erfolgen und auch zum Anzeigen von gesammelten Loot-Objekten am Ende eines Levels. Eine Instanz dieser Klasse befindet sich in der protected Variable "chest" in der Level-Klasse, sodass alle Minispiele darauf zugreifen können.

Für Loot-Objekte gibt es bereits eine abstrakte Klasse "Loot". Jeder kann seine eigenen Loot-Klasse erzeugen, indem er von dieser Klasse erbt und folgende Methoden implementiert:

  • public LootImage getImage() - gibt eine Instance von LootImage zurück. Das LootImage speichert welches Bild das Loot repräsentieren soll
  • public int doHashCode() - berechnet den Hash-Code des Objektes anhand seiner Instanzvariablen, wir von hashCode aus Loot aufgerufen
  • public boolean doEquals(Object obj) - analog zu doHashCode, wir von equals aus Loot aufgerufen
  • eine parameterloser Konstruktor für das Laden der Loots per Reflection

Zudem sollte man im Konstruktor den super-Konstruktor super(name, description); aufrufen. Hierbei steht name natürlich für einen mehr oder weniger sprechenden Namen und description für eine nicht zu lange Beschreibung dessen, was man gerade gedroppt hat. z.B. gibt es eine PlayerColor mit dem Namen "Rot" und der Beschreibung "Die Farbe 'Rot' für dein Pferd".

Speichern und Anzeigen von Loot

In der Oberklasse Level steht eine Instanze der Klasse Chest als protected Variable "chest" zur Verfügung. Auf dieser ruft man chest.addLoot(Loot loot) oder chest.addLootAndShowAchievment(Loot loot) auf, um ein neues Loot-Objekt zu speichern und gegebenenfalls noch ein automatisch verschwindendes Achievment-Overlay anzeigen zu lassen.

Sämtlicher, bisher gesammelter, Loot kann mit der Methode chest.showAllLoot() in einem Popup angezeigt werden. Beim Anzeigen des Popup wird das Level auf Pause gesetzt (Render-Aufrufe kommen nur noch mit einem delta=0). Sobald bei dem Popup der "ok"-Button gedrückt wird, verschwindet das Popup und resume() wird auf dem unterliegenden Level aufgerufen. Beim Ende des Spiel muss noch chest.saveAllLoot(), um das gesammelte Loot auch im SaveGame zu speichern.

Clone this wiki locally