AI: basic support playing MDFC lands

This commit is contained in:
tool4EvEr
2021-04-23 22:43:14 +02:00
parent 65e702aed7
commit 8196ee531a
3 changed files with 10 additions and 2 deletions

View File

@@ -34,6 +34,7 @@ import forge.ai.ability.ChangeZoneAi;
import forge.ai.ability.ExploreAi;
import forge.ai.ability.LearnAi;
import forge.ai.simulation.SpellAbilityPicker;
import forge.card.CardStateName;
import forge.card.MagicColor;
import forge.card.mana.ManaCost;
import forge.deck.CardPool;
@@ -1454,6 +1455,12 @@ public class AiController {
if (!game.getPhaseHandler().is(PhaseType.MAIN1) || !isSafeToHoldLandDropForMain2(land)) {
final List<SpellAbility> abilities = Lists.newArrayList();
// TODO extend this logic to evaluate MDFC with both sides land
// this can only happen if its a MDFC land
if (!land.isLand()) {
land.setState(CardStateName.Modal, false);
}
LandAbility la = new LandAbility(land, player, null);
la.setCardState(land.getCurrentState());
if (la.canPlay()) {

View File

@@ -4529,7 +4529,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
public final boolean isShrine() { return getType().hasSubtype("Shrine"); }
public final boolean isAttachment() { return isAura() || isEquipment() || isFortification(); }
public final boolean isHistoric() {return getType().isLegendary() || isArtifact() || getType().hasSubtype("Saga");}
public final boolean isHistoric() { return getType().isLegendary() || isArtifact() || getType().hasSubtype("Saga"); }
public final boolean isScheme() { return getType().isScheme(); }
public final boolean isPhenomenon() { return getType().isPhenomenon(); }

View File

@@ -22,6 +22,7 @@ import java.util.Comparator;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import forge.card.CardStateName;
import forge.game.CardTraitBase;
import forge.game.combat.CombatUtil;
import forge.game.keyword.Keyword;
@@ -653,7 +654,7 @@ public final class CardPredicates {
public static final Predicate<Card> LANDS = new Predicate<Card>() {
@Override
public boolean apply(Card c) {
return c.isLand();
return c.isLand() || (!c.isInZone(ZoneType.Battlefield) && c.isModal() && c.getState(CardStateName.Modal).getType().isLand());
}
};
/**