feat: implemented config-based character deserialization
This commit is contained in:
@ -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)) {
|
||||
|
Reference in New Issue
Block a user