package Undead;
import java.util.ArrayList;
import java.util.List;
import net.sf.colossus.ai.AbstractHintProvider;
import net.sf.colossus.util.DevRandom;
import net.sf.colossus.variant.CreatureType;
import net.sf.colossus.variant.IHintOracle;
import net.sf.colossus.variant.IOracleLegion;
import net.sf.colossus.variant.MasterBoardTerrain;
import net.sf.colossus.variant.MasterHex;
import net.sf.colossus.variant.Variant;
public class UndeadHint extends AbstractHintProvider
{
public UndeadHint(Variant variant)
{
super(variant);
}
private final DevRandom rnd = new DevRandom();
public CreatureType getRecruitHint(MasterBoardTerrain terrain,
IOracleLegion legion, List<CreatureType> recruits,
IHintOracle oracle,
List<AIStyle> aiStyles)
{
String terrainId = terrain.getId();
List<String> recruitNames = AbstractHintProvider.creaturesToStrings(recruits);
if (terrainId.equals("Brush"))
{
if (recruitNames.contains("Zombie") && !legion.contains("Wraith")
&& legion.numCreature("Zombie") == 2
&& oracle.creatureAvailable("Wraith") >= 2)
{
return getCreatureType("Zombie");
}
}
else if (terrainId.equals("Plains"))
{
if (recruitNames.contains("Naga") && !legion.contains("Griffin")
&& legion.numCreature("Naga") == 2
&& oracle.canReach("Desert")
&& oracle.creatureAvailable("Griffin") >= 2)
{
return getCreatureType("Naga");
}
}
else if (terrainId.equals("Marsh"))
{
if (recruitNames.contains("Orc") && !legion.contains("Wyvern")
&& legion.numCreature("Orc") == 2 && oracle.canReach("Swamp")
&& oracle.creatureAvailable("Wyvern") >= 2)
{
return getCreatureType("Orc");
}
}
else if (terrainId.equals("Tower"))
{
if (recruitNames.contains("Beholder"))
{
return getCreatureType("Beholder");
}
if (recruitNames.contains("Harpy"))
{
return getCreatureType("Harpy");
}
if (recruitNames.contains("Golem"))
{
return getCreatureType("Golem");
}
if (recruitNames.contains("Wizard"))
{
return getCreatureType("Wizard");
}
if (recruitNames.contains("Skeleton")
&& legion.numCreature("Skeleton") == 1
&& oracle.creatureAvailable("Zombie") >= 3)
{
return getCreatureType("Skeleton");
}
if (recruitNames.contains("Troglodyte")
&& legion.numCreature("Troglodyte") == 1
&& oracle.creatureAvailable("Orc") >= 2)
{
return getCreatureType("Troglodyte");
}
if (recruitNames.contains("Paladin")
&& legion.numCreature("Paladin") == 1
&& oracle.creatureAvailable("Naga") >= 2)
{
return getCreatureType("Paladin");
}
if (recruitNames.contains("Skeleton")
&& legion.numCreature("Skeleton") == 0
&& oracle.creatureAvailable("Zombie") >= 6)
{
return getCreatureType("Skeleton");
}
if (recruitNames.contains("Troglodyte")
&& legion.numCreature("Troglodyte") == 0
&& oracle.creatureAvailable("Orc") >= 6)
{
return getCreatureType("Troglodyte");
}
if (recruitNames.contains("Paladin")
&& legion.numCreature("Paladin") == 0
&& oracle.creatureAvailable("Naga") >= 6)
{
return getCreatureType("Paladin");
}
}
return recruits.get(recruits.size() - 1);
}
public List<CreatureType> getInitialSplitHint(MasterHex hex,
List<AIStyle> aiStyles)
{
List<CreatureType> li = new ArrayList<CreatureType>();
if (hex.getLabel().equals("100"))
{
if (rnd.nextFloat() < 0.5)
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Paladin"));
li.add(getCreatureType("Paladin"));
}
else
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Troglodyte"));
}
}
else if (hex.getLabel().equals("200"))
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Troglodyte"));
}
else if (hex.getLabel().equals("300"))
{
if (rnd.nextFloat() < 0.5)
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Troglodyte"));
}
else
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Paladin"));
li.add(getCreatureType("Paladin"));
li.add(getCreatureType("Troglodyte"));
}
}
else if (hex.getLabel().equals("400"))
{
if (rnd.nextFloat() < 0.5)
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Troglodyte"));
li.add(getCreatureType("Troglodyte"));
}
else
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Paladin"));
}
}
else if (hex.getLabel().equals("500"))
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Paladin"));
}
else if (hex.getLabel().equals("600"))
{
if (rnd.nextFloat() < 0.5)
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Skeleton"));
li.add(getCreatureType("Paladin"));
}
else
{
li.add(getCreatureType("Titan"));
li.add(getCreatureType("Troglodyte"));
li.add(getCreatureType("Troglodyte"));
li.add(getCreatureType("Paladin"));
}
}
else
{
throw new RuntimeException("Bad hex: " + hex);
}
return li;
}
}