package com.galvarez.ttw.model.data;
import java.util.EnumMap;
import java.util.Map;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.Json.ReadOnlySerializer;
import com.badlogic.gdx.utils.JsonValue;
import com.galvarez.ttw.model.Faction;
// TODO do not allow modification after loading
public final class Culture {
public final String name;
public final Array<String> cities;
private int citiesIndex = -1;
public final Map<Faction, Integer> ai;
public Culture(String name, Array<String> cities, Map<Faction, Integer> ai) {
this.name = name;
this.cities = cities;
this.ai = ai;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
public String newCityName() {
citiesIndex = (citiesIndex + 1) % cities.size;
return cities.get(citiesIndex);
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
else if (obj instanceof Culture)
return name.equals(((Culture) obj).name);
else
return false;
}
public static final ReadOnlySerializer<Culture> SER = new ReadOnlySerializer<Culture>() {
@SuppressWarnings({ "unchecked", "rawtypes", "unused" })
@Override
public Culture read(Json json, JsonValue data, Class type) {
Map<Faction, Integer> ai = new EnumMap<>(Faction.class);
for (JsonValue child : data.get("ai")) {
ai.put(Faction.valueOf(child.name), child.asInt());
}
return new Culture(data.getString("name"), //
json.readValue(Array.class, data.get("cities")), //
ai //
);
}
};
}