mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
- Some refactoring and imports cleanup in ChooseTypeAi.
This commit is contained in:
@@ -17,7 +17,6 @@ import forge.game.phase.PhaseType;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ChooseTypeAi extends SpellAbilityAi {
|
public class ChooseTypeAi extends SpellAbilityAi {
|
||||||
@@ -27,45 +26,49 @@ public class ChooseTypeAi extends SpellAbilityAi {
|
|||||||
return false;
|
return false;
|
||||||
} else if ("MostProminentComputerControls".equals(sa.getParam("AILogic"))) {
|
} else if ("MostProminentComputerControls".equals(sa.getParam("AILogic"))) {
|
||||||
if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Mirror Entity Avatar")) {
|
if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Mirror Entity Avatar")) {
|
||||||
if (AiCardMemory.isRememberedCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ANIMATED_THIS_TURN)) {
|
return doMirrorEntityLogic(aiPlayer, sa);
|
||||||
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 doTriggerAINoCost(aiPlayer, sa, false);
|
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
|
@Override
|
||||||
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
|
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
|
||||||
if (sa.usesTargeting()) {
|
if (sa.usesTargeting()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user