- Some refactoring and imports cleanup in ChooseTypeAi.

This commit is contained in:
Agetian
2017-06-16 15:05:07 +00:00
parent 130f384853
commit 43ec4e545f

View File

@@ -17,7 +17,6 @@ import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import java.util.Arrays;
import java.util.List;
public class ChooseTypeAi extends SpellAbilityAi {
@@ -27,45 +26,49 @@ public class ChooseTypeAi extends SpellAbilityAi {
return false;
} else if ("MostProminentComputerControls".equals(sa.getParam("AILogic"))) {
if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Mirror Entity Avatar")) {
if (AiCardMemory.isRememberedCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ANIMATED_THIS_TURN)) {
return false;
}
if (!aiPlayer.getGame().getPhaseHandler().is(PhaseType.MAIN1, aiPlayer)) {
return false;
}
List<String> valid = Lists.newArrayList(CardType.getAllCreatureTypes());
String chosenType = ComputerUtilCard.getMostProminentType(aiPlayer.getCardsIn(ZoneType.Battlefield), valid);
if (chosenType.isEmpty()) {
return false;
}
int maxX = ComputerUtilMana.determineMaxAffordableX(aiPlayer, sa);
int avgPower = 0;
if (maxX > 1) {
CardCollection cre = CardLists.filter(aiPlayer.getCardsIn(ZoneType.Battlefield),
Predicates.and(CardPredicates.isType(chosenType), CardPredicates.Presets.UNTAPPED));
if (!cre.isEmpty()) {
for (Card c: cre) {
avgPower += c.getCurrentPower();
}
avgPower /= cre.size();
if (maxX > avgPower) {
sa.setSVar("PayX", String.valueOf(maxX));
AiCardMemory.rememberCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ANIMATED_THIS_TURN);
return true;
}
}
}
return false;
return doMirrorEntityLogic(aiPlayer, sa);
}
}
return doTriggerAINoCost(aiPlayer, sa, false);
}
private boolean doMirrorEntityLogic(Player aiPlayer, SpellAbility sa) {
if (AiCardMemory.isRememberedCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ANIMATED_THIS_TURN)) {
return false;
}
if (!aiPlayer.getGame().getPhaseHandler().is(PhaseType.MAIN1, aiPlayer)) {
return false;
}
List<String> valid = Lists.newArrayList(CardType.getAllCreatureTypes());
String chosenType = ComputerUtilCard.getMostProminentType(aiPlayer.getCardsIn(ZoneType.Battlefield), valid);
if (chosenType.isEmpty()) {
return false;
}
int maxX = ComputerUtilMana.determineMaxAffordableX(aiPlayer, sa);
int avgPower = 0;
if (maxX > 1) {
CardCollection cre = CardLists.filter(aiPlayer.getCardsIn(ZoneType.Battlefield),
Predicates.and(CardPredicates.isType(chosenType), CardPredicates.Presets.UNTAPPED));
if (!cre.isEmpty()) {
for (Card c: cre) {
avgPower += c.getCurrentPower();
}
avgPower /= cre.size();
if (maxX > avgPower) {
sa.setSVar("PayX", String.valueOf(maxX));
AiCardMemory.rememberCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ANIMATED_THIS_TURN);
return true;
}
}
}
return false;
}
@Override
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
if (sa.usesTargeting()) {