feat: implemented EntitySerializer and partial test
This commit is contained in:
parent
ad9d314b6b
commit
bfe7b10169
@ -1,13 +1,16 @@
|
|||||||
package uulm.teamname.marvelous.gamelibrary.entities;
|
package uulm.teamname.marvelous.gamelibrary.entities;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
||||||
import uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize.EntityDeserializer;
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize.EntityDeserializer;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.serialize.EntitySerializer;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/** Represents an abstract entity. */
|
/** Represents an abstract entity. */
|
||||||
@JsonDeserialize(using = EntityDeserializer.class)
|
@JsonDeserialize(using = EntityDeserializer.class)
|
||||||
|
@JsonSerialize(using = EntitySerializer.class)
|
||||||
public abstract class Entity {
|
public abstract class Entity {
|
||||||
/** Whether or not the entity is currently active in the game */
|
/** Whether or not the entity is currently active in the game */
|
||||||
protected boolean active = true;
|
protected boolean active = true;
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
package uulm.teamname.marvelous.gamelibrary.json.ingame.serialize;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||||
|
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.entities.*;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.entities.Character;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.SerializedEntityType;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class EntitySerializer extends StdSerializer<Entity> {
|
||||||
|
public EntitySerializer() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntitySerializer(Class<Entity> t) {
|
||||||
|
super(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void serialize(Entity value, JsonGenerator gen, SerializerProvider provider) throws IOException {
|
||||||
|
gen.writeStartObject();
|
||||||
|
gen.writeObjectField("entityType", SerializedEntityType.valueOf(value.id.type));
|
||||||
|
|
||||||
|
if (value instanceof NPC) {
|
||||||
|
System.out.println("instanceof NPC");
|
||||||
|
serializeNPC((NPC) value, gen, provider);
|
||||||
|
} else if (value instanceof Character) {
|
||||||
|
System.out.println("instanceof Chara");
|
||||||
|
serializeCharacter((Character) value, gen, provider);
|
||||||
|
} else if (value instanceof Rock) {
|
||||||
|
serializeRock((Rock) value, gen, provider);
|
||||||
|
} else if (value instanceof InfinityStone) {
|
||||||
|
serializeInfinityStone((InfinityStone) value, gen, provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
gen.writeObjectField("position", value.getPosition());
|
||||||
|
gen.writeEndObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void serializeNPC(NPC value, JsonGenerator gen, SerializerProvider provider)
|
||||||
|
throws IOException {
|
||||||
|
gen.writeNumberField("ID", value.id.id);
|
||||||
|
// gen.writeNumberField("MP",value.MP); // TODO: Doesn't exist yet?
|
||||||
|
// gen.writeArray(value.); // TODO: Put values here
|
||||||
|
}
|
||||||
|
|
||||||
|
private void serializeCharacter(Character value, JsonGenerator gen, SerializerProvider provider)
|
||||||
|
throws IOException {
|
||||||
|
gen.writeNumberField("PID", value.id.type == EntityType.P1 ? 1 : 2);
|
||||||
|
gen.writeNumberField("ID", value.id.id);
|
||||||
|
gen.writeNumberField("HP", value.hp.getValue());
|
||||||
|
gen.writeNumberField("MP", value.mp.getValue());
|
||||||
|
gen.writeNumberField("AP", value.ap.getValue());
|
||||||
|
|
||||||
|
gen.writeFieldName("stones");
|
||||||
|
gen.writeArray(
|
||||||
|
Arrays.stream(value.inventory.getStonesAsArray())
|
||||||
|
.mapToInt(StoneType::getID)
|
||||||
|
.sorted()
|
||||||
|
.toArray(),
|
||||||
|
0, value.inventory.getSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void serializeRock(Rock value, JsonGenerator gen, SerializerProvider provider)
|
||||||
|
throws IOException {
|
||||||
|
gen.writeNumberField("ID", value.id.id);
|
||||||
|
gen.writeNumberField("HP", value.getHp());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void serializeInfinityStone(InfinityStone value, JsonGenerator gen, SerializerProvider provider)
|
||||||
|
throws IOException {
|
||||||
|
gen.writeNumberField("ID", value.id.id);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package uulm.teamname.marvelous.gamelibrary.json.ingame.serialize;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.entities.Character;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.entities.EntityID;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.entities.EntityType;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.entities.StoneType;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize.EntityDeserializer;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class EntitySerializerTest {
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void notATestJustSomethingToRun() throws JsonProcessingException {
|
||||||
|
var mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
var chara = new Character(
|
||||||
|
new EntityID(EntityType.P2, 3),
|
||||||
|
new IntVector2(12, 24),
|
||||||
|
"CoolHeroThing",
|
||||||
|
200,
|
||||||
|
300,
|
||||||
|
400,
|
||||||
|
500,
|
||||||
|
600,
|
||||||
|
700);
|
||||||
|
|
||||||
|
chara.inventory.addStone(StoneType.SoulStone);
|
||||||
|
chara.inventory.addStone(StoneType.SpaceStone);
|
||||||
|
chara.inventory.addStone(StoneType.MindStone);
|
||||||
|
|
||||||
|
var result = mapper.writeValueAsString(chara);
|
||||||
|
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user