package com.asteria.utility.json;
import java.util.Objects;
import com.asteria.game.World;
import com.asteria.game.character.npc.Npc;
import com.asteria.game.location.Position;
import com.asteria.utility.JsonLoader;
import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
/**
* The {@link JsonLoader} implementation that loads all npc nodes.
*
* @author lare96 <http://github.com/lare96>
*/
public final class NpcNodeLoader extends JsonLoader {
/**
* Creates a new {@link NpcNodeLoader}.
*/
public NpcNodeLoader() {
super("./data/json/npcs/npc_nodes.json");
}
@Override
public void load(JsonObject reader, Gson builder) {
int id = reader.get("id").getAsInt();
Position position = Objects.requireNonNull(builder.fromJson(reader.get("position").getAsJsonObject(), Position.class));
boolean coordinate = reader.get("random-walk").getAsBoolean();
int radius = reader.get("walk-radius").getAsInt();
Preconditions.checkState(!(coordinate && radius == 0));
Preconditions.checkState(!(!coordinate && radius > 0));
Npc npc = new Npc(id, position);
npc.setOriginalRandomWalk(coordinate);
npc.getMovementCoordinator().setCoordinate(coordinate);
npc.getMovementCoordinator().setRadius(radius);
npc.setRespawn(true);
if (!World.getNpcs().add(npc))
throw new IllegalStateException("NPC could not be added to the " + "world!");
}
}