XMLHandler
(Thomas Dautzenberg)
Unser Leveleditor benutzt XML-Dateien, da diese einen klaren Aufbau haben und viele Informationen beinhalten können. Wir interagieren mit zwei Arten von XML-Dateien. Für alle Informationen darüber, wie groß welche Rooms sind und wo im vergleich zu deren Mittelpunkt die Wege positioniert sind, sowie deren Ausrichtung und Typ, haben wir eine große XML, aus der wir diese Daten leicht auslesen können.
Aufbau der XML-Datei
XMLHandler
Um einen XMLHandler zu erstellen, brauchen wir lediglich einen String, der angibt, wo sich die XML-Datei mit den Grundinformationen zu Räumen befindet, da diese im weiteren Verlauf benutzt wird. Die Datei wird, falls vorhanden, geladen und in einer finalen Variable gespeichert. Diese Variable ist vom Typ NodeList, welche die Struktur der XML-Datei beibehält.
createRoomFromXML
Diese Methode wird mit einem String aufgerufen, welcher den Namen des zu ladenden Rooms beinhaltet. Mit dieser Information können wir direkt in der gespeicherten NodeList den Node herausnehmen, der den Room und seine Ways enhält.
Da wir eine klare Struktur vorgegeben haben, können wir hier mit ein paar Abfragen, die lediglich von der Anzahl der Elemente abhängt, alle bentigten Daten sammeln, um mit ihnen den Konstruktor der Klasse Room aufzurufen und das so erstellte Objekt zurückzugeben.
toXML
Da wir ein XMLPanel haben, welches dem Benutzer zur Laufzeit die erstellte XML anzeigt, und um das tatsächliche Speichern der XML-Datei übersichtlicher zu gestalten, haben wir uns entschieden die Umwandlung des Levels in einen String in XML-Form in eine einzelne Methode zu verlagern.
Da die Karte im entgültigen Spiel auf die gleiche XML-Datei zugreifen kann, die wir auch zum laden benutzt haben, reicht es zum Beschreiben eines Levels, die Namen, Rotation und Positionen der gesetzten Raums zu speichern. Außerdem schreiben wir alle Wege in die XML, die nicht mit zwei Räumen verbunden sind - also alle Wege aus der Way-Liste des Levels - ebenfalls in die XML, damit sie später beim laden des Levels mit unbenutzbaren Türen gefüllt werden.
writeXML
In dieser Methode schreiben wir das Level in eine Datei. Dazu rufen wir die Klasseninterne Methode toXML auf, und übergeben den erhaltenen String in ein File, welches zurückgegeben wird.
clean
Da beim einlesen von XML-Dateien Artefakte in Form von leeren Nodes entstehen können, benutzen wir bei jedem Laden einer Datei diese Methode einmal um die NodeList zu säubern.