feat: implemented still-missing JSON ser/deser for portalEntities
This commit is contained in:
parent
518e458c5f
commit
e9b4bc5f58
@ -9,7 +9,8 @@ public enum SerializedEntityType {
|
|||||||
NPC,
|
NPC,
|
||||||
Character,
|
Character,
|
||||||
InfinityStone,
|
InfinityStone,
|
||||||
Rock;
|
Rock,
|
||||||
|
Portal;
|
||||||
|
|
||||||
private static final Map<EntityType, SerializedEntityType> entityTypeToDeserialized;
|
private static final Map<EntityType, SerializedEntityType> entityTypeToDeserialized;
|
||||||
|
|
||||||
@ -21,6 +22,7 @@ public enum SerializedEntityType {
|
|||||||
entityTypeToDeserialized.put(EntityType.P2, Character);
|
entityTypeToDeserialized.put(EntityType.P2, Character);
|
||||||
entityTypeToDeserialized.put(EntityType.InfinityStones, InfinityStone);
|
entityTypeToDeserialized.put(EntityType.InfinityStones, InfinityStone);
|
||||||
entityTypeToDeserialized.put(EntityType.Rocks, Rock);
|
entityTypeToDeserialized.put(EntityType.Rocks, Rock);
|
||||||
|
entityTypeToDeserialized.put(EntityType.Portals, Portal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SerializedEntityType valueOf(EntityType entityType) {
|
public static SerializedEntityType valueOf(EntityType entityType) {
|
||||||
|
@ -75,6 +75,10 @@ public class EntityDeserializer extends JsonDeserializer<Entity> {
|
|||||||
codec.treeToValue(node.get("position"), IntVector2.class),
|
codec.treeToValue(node.get("position"), IntVector2.class),
|
||||||
node.get("HP").asInt()
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,8 @@ public class EntitySerializer extends StdSerializer<Entity> {
|
|||||||
serializeRock((Rock) value, gen, provider);
|
serializeRock((Rock) value, gen, provider);
|
||||||
} else if (value instanceof InfinityStone) {
|
} else if (value instanceof InfinityStone) {
|
||||||
serializeInfinityStone((InfinityStone) value, gen, provider);
|
serializeInfinityStone((InfinityStone) value, gen, provider);
|
||||||
|
} else if (value instanceof Portal) {
|
||||||
|
serializePortal((Portal) value, gen, provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
gen.writeObjectField("position", value.getPosition());
|
gen.writeObjectField("position", value.getPosition());
|
||||||
@ -72,6 +74,10 @@ public class EntitySerializer extends StdSerializer<Entity> {
|
|||||||
gen.writeNumberField("ID", value.id.id);
|
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 */
|
/** Returns an int[] with the sorted integer representations of the stones in the given Inventory */
|
||||||
private int[] inventoryToIntArray(Inventory inventory) {
|
private int[] inventoryToIntArray(Inventory inventory) {
|
||||||
return Arrays.stream(inventory.getStonesAsArray())
|
return Arrays.stream(inventory.getStonesAsArray())
|
||||||
|
@ -271,12 +271,33 @@ class EntityDeserializerTest {
|
|||||||
rock.getPosition().getY()
|
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(character);
|
||||||
// System.out.println(jsonRepresentingCharacter);
|
// System.out.println(jsonRepresentingCharacter);
|
||||||
// System.out.println(stone);
|
// System.out.println(stone);
|
||||||
// System.out.println(jsonRepresentingStone);
|
// System.out.println(jsonRepresentingStone);
|
||||||
// System.out.println(rock);
|
// System.out.println(rock);
|
||||||
// System.out.println(jsonRepresentingRock);
|
// System.out.println(jsonRepresentingRock);
|
||||||
|
// System.out.println(portal);
|
||||||
|
// System.out.println(jsonRepresentingPortal);
|
||||||
|
|
||||||
// // Assertions
|
// // Assertions
|
||||||
assertThat((Character) (mapper.readValue(jsonRepresentingCharacter, Entity.class)))
|
assertThat((Character) (mapper.readValue(jsonRepresentingCharacter, Entity.class)))
|
||||||
@ -288,6 +309,9 @@ class EntityDeserializerTest {
|
|||||||
assertThat((Rock) (mapper.readValue(jsonRepresentingRock, Entity.class)))
|
assertThat((Rock) (mapper.readValue(jsonRepresentingRock, Entity.class)))
|
||||||
.isEqualTo(rock);
|
.isEqualTo(rock);
|
||||||
|
|
||||||
|
assertThat((Portal) mapper.readValue(jsonRepresentingPortal, Entity.class))
|
||||||
|
.isEqualTo(portal);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user