feat: implemented config-based character deserialization

This commit is contained in:
2021-05-31 23:23:27 +02:00
parent fa6207e47d
commit c8d34fcc97
2 changed files with 60 additions and 14 deletions

View File

@ -3,18 +3,19 @@ package uulm.teamname.marvelous.gamelibrary.json.ingame;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character;
import uulm.teamname.marvelous.gamelibrary.json.config.CharacterConfig;
import uulm.teamname.marvelous.gamelibrary.json.config.CharacterProperties;
import java.io.IOException;
public class EntityDeserializer extends JsonDeserializer<Entity> {
private enum DeserializedEntityType {
Character,
InfinityStone,
@ -23,6 +24,9 @@ public class EntityDeserializer extends JsonDeserializer<Entity> {
@Override
public Entity deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
var config = (CharacterConfig) ctxt
.findInjectableValue("CharacterConfig", null, null);
ObjectCodec codec = p.getCodec();
JsonNode node = codec.readTree(p);
@ -35,16 +39,21 @@ public class EntityDeserializer extends JsonDeserializer<Entity> {
EntityID id = new EntityID(
EntityType.valueOf("P" + node.get("PID").intValue()),
node.get("ID").intValue());
String characterName = node.get("name").asText();
CharacterProperties properties = config.getMap().get(characterName);
result = new Character(
id,
codec.treeToValue(node.get("position"), IntVector2.class),
node.get("name").asText(),
characterName,
node.get("HP").asInt(),
node.get("MP").asInt(),
node.get("AP").asInt(),
-1,
-1,
-1
properties.attackRange,
properties.rangedDamage,
properties.meleeDamage
);
for (var i: codec.treeToValue(node.get("stones"), Integer[].class)) {