diff --git a/src/main/java/forge/card/ability/ai/TapAi.java b/src/main/java/forge/card/ability/ai/TapAi.java index 957ea63cbb1..29f40ffb98c 100644 --- a/src/main/java/forge/card/ability/ai/TapAi.java +++ b/src/main/java/forge/card/ability/ai/TapAi.java @@ -18,11 +18,6 @@ import forge.util.MyRandom; public class TapAi extends TapAiBase { @Override protected boolean canPlayAI(AIPlayer ai, SpellAbility sa) { - final Target tgt = sa.getTarget(); - final Card source = sa.getSourceCard(); - - final Random r = MyRandom.getRandom(); - boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); final PhaseHandler phase = Singletons.getModel().getGame().getPhaseHandler(); final Player turn = phase.getPlayerTurn(); @@ -37,6 +32,12 @@ public class TapAi extends TapAiBase { // Generally don't want to tap things with an Instant during AI turn outside of combat return false; } + + final Target tgt = sa.getTarget(); + final Card source = sa.getSourceCard(); + + final Random r = MyRandom.getRandom(); + boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); if (tgt == null) { final List defined = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa); @@ -59,50 +60,4 @@ public class TapAi extends TapAiBase { return randomReturn; } - @Override - protected boolean doTriggerAINoCost(AIPlayer ai, SpellAbility sa, boolean mandatory) { - - final Target tgt = sa.getTarget(); - final Card source = sa.getSourceCard(); - - if (tgt == null) { - if (mandatory) { - return true; - } - - // TODO: use Defined to determine, if this is an unfavorable result - - return true; - } else { - if (tapPrefTargeting(ai, source, tgt, sa, mandatory)) { - return true; - } else if (mandatory) { - // not enough preferred targets, but mandatory so keep going: - return tapUnpreferredTargeting(ai, sa, mandatory); - } - } - - return false; - } - - @Override - public boolean chkAIDrawback(SpellAbility sa, AIPlayer ai) { - final Target tgt = sa.getTarget(); - final Card source = sa.getSourceCard(); - - boolean randomReturn = true; - - if (tgt == null) { - // either self or defined, either way should be fine - } else { - // target section, maybe pull this out? - tgt.resetTargets(); - if (!tapPrefTargeting(ai, source, tgt, sa, false)) { - return false; - } - } - - return randomReturn; - } - } diff --git a/src/main/java/forge/card/ability/ai/TapAiBase.java b/src/main/java/forge/card/ability/ai/TapAiBase.java index 396a03f36e3..01f2a7a6cb0 100644 --- a/src/main/java/forge/card/ability/ai/TapAiBase.java +++ b/src/main/java/forge/card/ability/ai/TapAiBase.java @@ -18,6 +18,7 @@ import forge.game.ai.ComputerUtilCard; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; +import forge.game.player.AIPlayer; import forge.game.player.Player; import forge.game.zone.ZoneType; @@ -269,4 +270,50 @@ public abstract class TapAiBase extends SpellAbilityAi { return false; } + @Override + protected boolean doTriggerAINoCost(AIPlayer ai, SpellAbility sa, boolean mandatory) { + + final Target tgt = sa.getTarget(); + final Card source = sa.getSourceCard(); + + if (tgt == null) { + if (mandatory) { + return true; + } + + // TODO: use Defined to determine, if this is an unfavorable result + + return true; + } else { + if (tapPrefTargeting(ai, source, tgt, sa, mandatory)) { + return true; + } else if (mandatory) { + // not enough preferred targets, but mandatory so keep going: + return tapUnpreferredTargeting(ai, sa, mandatory); + } + } + + return false; + } + + @Override + public boolean chkAIDrawback(SpellAbility sa, AIPlayer ai) { + final Target tgt = sa.getTarget(); + final Card source = sa.getSourceCard(); + + boolean randomReturn = true; + + if (tgt == null) { + // either self or defined, either way should be fine + } else { + // target section, maybe pull this out? + tgt.resetTargets(); + if (!tapPrefTargeting(ai, source, tgt, sa, false)) { + return false; + } + } + + return randomReturn; + } + } diff --git a/src/main/java/forge/card/ability/ai/TapOrUntapAi.java b/src/main/java/forge/card/ability/ai/TapOrUntapAi.java index f2e62218454..7bdc958adc8 100644 --- a/src/main/java/forge/card/ability/ai/TapOrUntapAi.java +++ b/src/main/java/forge/card/ability/ai/TapOrUntapAi.java @@ -47,49 +47,6 @@ public class TapOrUntapAi extends TapAiBase { return randomReturn; } - @Override - protected boolean doTriggerAINoCost(AIPlayer ai, SpellAbility sa, boolean mandatory) { - final Target tgt = sa.getTarget(); - final Card source = sa.getSourceCard(); - if (tgt == null) { - if (mandatory) { - return true; - } - - // TODO: use Defined to determine if this is an unfavorable result - - return true; - } else { - if (tapPrefTargeting(ai, source, tgt, sa, mandatory)) { - return true; - } else if (mandatory) { - // not enough preferred targets, but mandatory so keep going: - return tapUnpreferredTargeting(ai, sa, mandatory); - } - } - - return false; - } - - @Override - public boolean chkAIDrawback(SpellAbility sa, AIPlayer ai) { - final Target tgt = sa.getTarget(); - final Card source = sa.getSourceCard(); - - boolean randomReturn = true; - - if (tgt == null) { - // either self or defined, either way should be fine - } else { - // target section, maybe pull this out? - tgt.resetTargets(); - if (!tapPrefTargeting(ai, source, tgt, sa, false)) { - return false; - } - } - - return randomReturn; - } }