@Override public Task getNextStep(Faction faction) { Task task = getFlavorMatchTask(faction); if (!world.hasSpy(faction)) { if (new PlantSpyFromPlanetTask(world, this).canPerform(faction)) return new PlantSpyFromPlanetTask(world, this); if (new PlantSpyByGateTask(faction.getHomeWorld(), world, this).canPerform(faction)) return new PlantSpyByGateTask(faction.getHomeWorld(), world, this); if (new PlantSpyByShipTask(faction.getHomeWorld(), world, this).canPerform(faction)) return new PlantSpyByShipTask(faction.getHomeWorld(), world, this); } else if (world.hasSpy(faction)) return task; return null; }
@Override public int stepsToCompletion(Faction faction) { Task task = getFlavorMatchTask(faction); return new TransportTroopsTask(faction.getHomeWorld(), world, 1, this) .stepsToCompletion(faction) + task.stepsToCompletion(faction); }
@Override public boolean canPerform(Faction faction) { Task task = getFlavorMatchTask(faction); if (!world.hasSpy(faction) && world.getTroopCount(faction) == 0) return new TransportTroopsTask(faction.getHomeWorld(), world, 1, this).canPerform(faction); if (!world.hasSpy(faction) && world.getTroopCount(faction) > 0) return new PlantSpyFromPlanetTask(world, this).canPerform(faction); else return task.canPerform(faction); }