diff --git a/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/SerializedEntityType.java b/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/SerializedEntityType.java index 4f4dfeb..bb2be9b 100644 --- a/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/SerializedEntityType.java +++ b/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/SerializedEntityType.java @@ -9,7 +9,8 @@ public enum SerializedEntityType { NPC, Character, InfinityStone, - Rock; + Rock, + Portal; private static final Map entityTypeToDeserialized; @@ -21,6 +22,7 @@ public enum SerializedEntityType { entityTypeToDeserialized.put(EntityType.P2, Character); entityTypeToDeserialized.put(EntityType.InfinityStones, InfinityStone); entityTypeToDeserialized.put(EntityType.Rocks, Rock); + entityTypeToDeserialized.put(EntityType.Portals, Portal); } public static SerializedEntityType valueOf(EntityType entityType) { diff --git a/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializer.java b/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializer.java index 9826b6d..f9473b7 100644 --- a/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializer.java +++ b/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializer.java @@ -75,6 +75,10 @@ public class EntityDeserializer extends JsonDeserializer { codec.treeToValue(node.get("position"), IntVector2.class), node.get("HP").asInt() ); + case Portal -> result = new Portal( + new EntityID(EntityType.Portals, node.get("ID").asInt()), + codec.treeToValue(node.get("position"), IntVector2.class) + ); } return result; } diff --git a/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializer.java b/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializer.java index ef70879..dc5bdf0 100644 --- a/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializer.java +++ b/src/main/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializer.java @@ -32,6 +32,8 @@ public class EntitySerializer extends StdSerializer { serializeRock((Rock) value, gen, provider); } else if (value instanceof InfinityStone) { serializeInfinityStone((InfinityStone) value, gen, provider); + } else if (value instanceof Portal) { + serializePortal((Portal) value, gen, provider); } gen.writeObjectField("position", value.getPosition()); @@ -72,6 +74,10 @@ public class EntitySerializer extends StdSerializer { gen.writeNumberField("ID", value.id.id); } + private void serializePortal(Portal value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeNumberField("ID", value.id.id); + } + /** Returns an int[] with the sorted integer representations of the stones in the given Inventory */ private int[] inventoryToIntArray(Inventory inventory) { return Arrays.stream(inventory.getStonesAsArray()) diff --git a/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializerTest.java b/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializerTest.java index 368639c..ea03a39 100644 --- a/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializerTest.java +++ b/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/deserialize/EntityDeserializerTest.java @@ -271,12 +271,33 @@ class EntityDeserializerTest { rock.getPosition().getY() ); + // === RANDOM PORTAL === + + Portal portal = new Portal( + new EntityID(EntityType.Portals, Math.abs(randomIntegers.next())), + new IntVector2(Math.abs(randomIntegers.next()), Math.abs(randomIntegers.next())) + ); + + String jsonRepresentingPortal = """ + { + "entityType": "Portal", + "ID": %d, + "position": [%d, %d] + } + """.formatted(// formatting the string with the required arguments + portal.id.id, + portal.getPosition().getX(), + portal.getPosition().getY() + ); + // System.out.println(character); // System.out.println(jsonRepresentingCharacter); // System.out.println(stone); // System.out.println(jsonRepresentingStone); // System.out.println(rock); // System.out.println(jsonRepresentingRock); +// System.out.println(portal); +// System.out.println(jsonRepresentingPortal); // // Assertions assertThat((Character) (mapper.readValue(jsonRepresentingCharacter, Entity.class))) @@ -288,6 +309,9 @@ class EntityDeserializerTest { assertThat((Rock) (mapper.readValue(jsonRepresentingRock, Entity.class))) .isEqualTo(rock); + assertThat((Portal) mapper.readValue(jsonRepresentingPortal, Entity.class)) + .isEqualTo(portal); + diff --git a/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializerTest.java b/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializerTest.java index 1106eb0..634a162 100644 --- a/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializerTest.java +++ b/src/test/java/uulm/teamname/marvelous/gamelibrary/json/ingame/serialize/EntitySerializerTest.java @@ -243,4 +243,26 @@ class EntitySerializerTest { } + @Test + void serializePortal() throws JsonProcessingException { + var mapper = new ObjectMapper(); + + Portal portal = new Portal( + new EntityID(EntityType.Portals, 15), + new IntVector2(25, 35) + ); + + String jsonRepresentingPortal = """ + { + "entityType":"Portal", + "ID":15, + "position":[25,35] + } + """.replace("\n", ""); + + assertThat(mapper.writeValueAsString(portal)) + .isEqualTo(jsonRepresentingPortal); + } + + }