package net.sf.colossus.ai; import java.util.ArrayList; import java.util.List; import net.sf.colossus.variant.CreatureType; import net.sf.colossus.variant.IVariantHint; import net.sf.colossus.variant.MasterBoardTerrain; import net.sf.colossus.variant.MasterHex; import net.sf.colossus.variant.Variant; /** * Abstract base class for variant-specific recruitment hinting. * * TODO: add implementations for the other IVariantHint methods, so this class * could be the default behaviour for new variants (thus getting rid of the * requirement that each variant has to compile Java code). */ public abstract class AbstractHintProvider implements IVariantHint { private final Variant variant; public AbstractHintProvider(Variant variant) { this.variant = variant; } /** * No creature gets an offset by default, subclasses can override. */ public int getHintedRecruitmentValueOffset(CreatureType creature, List<AIStyle> styles) { return 0; } protected Variant getVariant() { return variant; } protected CreatureType getCreatureType(String creatureName) { return variant.getCreatureByName(creatureName); } protected MasterHex getMasterHex(String hexLabel) { return variant.getMasterBoard().getHexByLabel(hexLabel); } protected MasterBoardTerrain getTerrain(String id) { return variant.getTerrainById(id); } // Convert list of recruits from Creature to String for easier compares. public static List<String> creaturesToStrings(List<CreatureType> creatures) { List<String> recruits = new ArrayList<String>(); for (CreatureType creature : creatures) { recruits.add(creature.getName()); } return recruits; } }