2.2. Erweiterung des Modells
Level und GameObject erhalten ein zusätzliches Feld “graphicResource”. Da dies einfach ein Name ist, ist dies einfach ein String.
package org.jadv.model.level;
// ...
/**
* JAdventure Level
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode(callSuper=true)
public class Level extends SavedObject implements Container {
// ...
/**
* Height of the level.
*/
private int height;
/**
* Resource name of a graphic.
*/
private String graphicResource;
/**
* Game objects inside the level.
*/
@JsonAdapter(ListOfSavedObjectAdapter.class)
private final List<GameObject> objects = new ArrayList<>();
// ...
}
(gekürzt auf die Änderungen)
package org.jadv.model.objects;
import com.google.gson.annotations.JsonAdapter;
import lombok.*;
import org.jadv.model.Position;
import org.jadv.model.SavedObject;
import org.jadv.model.size.Size;
import org.jadv.serialization.SavedObjectAdapter;
/**
* An Object inside the JAdventure game.
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper=true)
public class GameObject extends SavedObject {
/**
* Name of the Object.
*/
private String name;
/**
* Size of the Object.
*/
@JsonAdapter(SavedObjectAdapter.class)
private Size size;
/**
* Position of the Object.
*/
private Position position;
/**
* Resource name of a graphic.
*/
private String graphicResource;
}
Durch die Änderungen sind nun auch die Unit-Tests anzupassen:
Beim Konstruktor der Klasse Level muss nun ein Parameter mehr angegeben werden. Daher fügen wir bei den Aufrufen als letzten Parameter noch “testlevel” hinzu.
Level level = new Level("TestLevel", 1000, 1000, "testlevel");
Das Feld graphicResource wird nun natürlich auch mit serialisiert und muss daher entsprechend mit aufgeführt werden. Dadurch ändert sich der JSON String in den Unit-Tests von ListOfSavedObjectAdapterTest:
String jsonLevel = "{\"name\":\"TestLevel\",\"width\":1000,\"height\":1000,\"graphicResource\":\"testlevel\",\"objects\":[{\"name\":\"TestObject\",\"size\":{\"width\":10,\"height\":10,\"type\":\"org.jadv.model.size.RectangleSize\"},\"position\":{\"x\":1,\"y\":2},\"type\":\"org.jadv.model.objects.GameObject\"},{\"name\":\"TestObject2\",\"size\":{\"width\":10,\"height\":10,\"type\":\"org.jadv.model.size.RectangleSize\"},\"position\":{\"x\":2,\"y\":3},\"type\":\"org.jadv.model.objects.GameObject\"}],\"type\":\"org.jadv.model.level.Level\"}";