moved some duplicate methods to base class

This commit is contained in:
Maxmtg
2013-03-15 21:28:18 +00:00
parent 9c3497c7f4
commit 5b4c6e8490
3 changed files with 53 additions and 94 deletions

View File

@@ -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();
@@ -38,6 +33,12 @@ public class TapAi extends TapAiBase {
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<Card> 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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}