From ebece034b95da6bb0441a9ca78ae8d44558851b8 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sat, 14 Jan 2012 11:39:59 +0000 Subject: [PATCH] - Added canPlayFromEffectAI function. --- src/main/java/forge/GameActionUtil.java | 18 ++++++++++++++---- .../AbilityFactoryDealDamage.java | 8 ++++++-- .../java/forge/card/spellability/Spell.java | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java index 05206cfc77f..e383f8ddd26 100644 --- a/src/main/java/forge/GameActionUtil.java +++ b/src/main/java/forge/GameActionUtil.java @@ -27,6 +27,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.Ability; import forge.card.spellability.AbilityMana; +import forge.card.spellability.Spell; import forge.card.spellability.SpellAbility; import forge.game.GameLossReason; import forge.gui.GuiUtils; @@ -155,11 +156,20 @@ public final class GameActionUtil { final ArrayList choices = cascadedCard.getBasicSpells(); for (final SpellAbility sa : choices) { - if (sa.canPlayAI() || sa.doTrigger(false)) { - ComputerUtil.playStackFree(sa); - revealed.remove(cascadedCard); - break; + //Spells + if (sa instanceof Spell) { + Spell spell = (Spell) sa; + if (!spell.canPlayFromEffectAI(false, true)) { + continue; + } + } else { + if (!sa.canPlayAI()) { + continue; + } } + ComputerUtil.playStackFree(sa); + revealed.remove(cascadedCard); + break; } } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java index 310731e9908..62feb6cb88b 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java @@ -140,8 +140,12 @@ public class AbilityFactoryDealDamage { } @Override - public boolean doTrigger(final boolean mandatory) { - return AbilityFactoryDealDamage.this.dealDamageDoTriggerAINoCost( + public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) { + if (withOutManaCost) { + return AbilityFactoryDealDamage.this.dealDamageDoTriggerAINoCost( + AbilityFactoryDealDamage.this.abilityFactory, this, mandatory); + } + return AbilityFactoryDealDamage.this.dealDamageDoTriggerAI( AbilityFactoryDealDamage.this.abilityFactory, this, mandatory); } }; // Spell diff --git a/src/main/java/forge/card/spellability/Spell.java b/src/main/java/forge/card/spellability/Spell.java index fc97f406aba..436e0f3ae8f 100644 --- a/src/main/java/forge/card/spellability/Spell.java +++ b/src/main/java/forge/card/spellability/Spell.java @@ -153,4 +153,19 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable throw new RuntimeException("Spell : clone() error, " + ex); } } + + /** + *

+ * canPlayFromEffectAI. + *

+ * + * @param mandatory + * can the controller chose not to play the spell + * @param withOutManaCost + * is the spell cast without paying mana + * @return a boolean. + */ + public boolean canPlayFromEffectAI(boolean mandatory, boolean withOutManaCost) { + return canPlayAI(); + } }