package net.zomis.cardshifter.ecs;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import net.zomis.cardshifter.ecs.effects.EffectComponent;
import com.cardshifter.api.outgoing.CardInfoMessage;
import com.cardshifter.modapi.attributes.Attributes;
import com.cardshifter.modapi.base.Component;
import com.cardshifter.modapi.base.ComponentRetriever;
import com.cardshifter.modapi.base.CreatureTypeComponent;
import com.cardshifter.modapi.base.Entity;
import com.cardshifter.modapi.resources.Resources;
public class EntitySerialization {
private static final ComponentRetriever<CreatureTypeComponent> creatureType = ComponentRetriever.retreiverFor(CreatureTypeComponent.class);
private static final ComponentRetriever<EffectComponent> effect = ComponentRetriever.retreiverFor(EffectComponent.class);
public static CardInfoMessage serialize(int zoneId, Entity entity) {
return new CardInfoMessage(zoneId, entity.getId(), serialize(entity));
}
public static Map<String, Object> serialize(Entity entity) {
Map<String, Object> result = new HashMap<>();
result.putAll(Resources.map(entity));
result.putAll(Attributes.map(entity));
saveIfHave(entity, result, creatureType, "creatureType", comp -> comp.getAllTypes());
saveIfHave(entity, result, effect, "effect", comp -> comp.getDescription());
return result;
}
private static <T extends Component> void saveIfHave(Entity entity, Map<String, Object> result, ComponentRetriever<T> retriever,
String key, Function<T, Object> save) {
if (retriever.has(entity)) {
result.put(key, save.apply(retriever.get(entity)));
}
}
}