code simplification in AF_Turns

This commit is contained in:
jendave
2011-08-06 23:17:56 +00:00
parent 3cd8eb0cbc
commit 2b642022d5

View File

@@ -4,10 +4,8 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import forge.AllZone; import forge.AllZone;
import forge.Card;
import forge.ComputerUtil; import forge.ComputerUtil;
import forge.Player; import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated; import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub; import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell; import forge.card.spellability.Spell;
@@ -15,21 +13,22 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target; import forge.card.spellability.Target;
public class AbilityFactory_Turns { public class AbilityFactory_Turns {
// ************************************************************************* // *************************************************************************
// ************************* ADD TURN ************************************** // ************************* ADD TURN **************************************
// ************************************************************************* // *************************************************************************
public static SpellAbility createAbilityAddTurn(final AbilityFactory AF){ public static SpellAbility createAbilityAddTurn(final AbilityFactory af) {
final SpellAbility abAddTurn = new Ability_Activated(AF.getHostCard(), AF.getAbCost(), AF.getAbTgt()){ final SpellAbility abAddTurn = new Ability_Activated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
private static final long serialVersionUID = -3526200766738015688L; private static final long serialVersionUID = -3526200766738015688L;
final AbilityFactory af = AF;
@Override @Override
public String getStackDescription(){ public String getStackDescription() {
return addTurnStackDescription(af, this); return addTurnStackDescription(af, this);
} }
@Override
public boolean canPlayAI() { public boolean canPlayAI() {
return addTurnCanPlayAI(af, this); return addTurnCanPlayAI(af, this);
} }
@@ -48,21 +47,17 @@ public class AbilityFactory_Turns {
return abAddTurn; return abAddTurn;
} }
public static SpellAbility createSpellAddTurn(final AbilityFactory AF){ public static SpellAbility createSpellAddTurn(final AbilityFactory af) {
final SpellAbility spAddTurn = new Spell(AF.getHostCard(), AF.getAbCost(), AF.getAbTgt()){ final SpellAbility spAddTurn = new Spell(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
private static final long serialVersionUID = -3921131887560356006L; private static final long serialVersionUID = -3921131887560356006L;
final AbilityFactory af = AF;
@Override @Override
public String getStackDescription(){ public String getStackDescription(){
return addTurnStackDescription(af, this); return addTurnStackDescription(af, this);
} }
public boolean canPlayAI() @Override
{ public boolean canPlayAI() {
// if X depends on abCost, the AI needs to choose which card he would sacrifice first
// then call xCount with that card to properly calculate the amount
// Or choosing how many to sacrifice
return addTurnCanPlayAI(af, this); return addTurnCanPlayAI(af, this);
} }
@@ -75,13 +70,12 @@ public class AbilityFactory_Turns {
return spAddTurn; return spAddTurn;
} }
public static SpellAbility createDrawbackAddTurn(final AbilityFactory AF){ public static SpellAbility createDrawbackAddTurn(final AbilityFactory af) {
final SpellAbility dbAddTurn = new Ability_Sub(AF.getHostCard(), AF.getAbTgt()){ final SpellAbility dbAddTurn = new Ability_Sub(af.getHostCard(), af.getAbTgt()) {
private static final long serialVersionUID = -562517287448810951L; private static final long serialVersionUID = -562517287448810951L;
final AbilityFactory af = AF;
@Override @Override
public String getStackDescription(){ public String getStackDescription() {
return addTurnStackDescription(af, this); return addTurnStackDescription(af, this);
} }
@@ -104,7 +98,7 @@ public class AbilityFactory_Turns {
return dbAddTurn; return dbAddTurn;
} }
private static String addTurnStackDescription(AbilityFactory af, SpellAbility sa){ private static String addTurnStackDescription(AbilityFactory af, SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
int numTurns = AbilityFactory.calculateAmount(af.getHostCard(), af.getMapParams().get("NumTurns"), sa); int numTurns = AbilityFactory.calculateAmount(af.getHostCard(), af.getMapParams().get("NumTurns"), sa);
@@ -116,7 +110,7 @@ public class AbilityFactory_Turns {
ArrayList<Player> tgtPlayers; ArrayList<Player> tgtPlayers;
Target tgt = af.getAbTgt(); Target tgt = af.getAbTgt();
if (tgt != null) if(tgt != null)
tgtPlayers = tgt.getTargetPlayers(); tgtPlayers = tgt.getTargetPlayers();
else else
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), af.getMapParams().get("Defined"), sa); tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), af.getMapParams().get("Defined"), sa);
@@ -136,47 +130,31 @@ public class AbilityFactory_Turns {
sb.append(" after this one."); sb.append(" after this one.");
Ability_Sub abSub = sa.getSubAbility(); Ability_Sub abSub = sa.getSubAbility();
if (abSub != null) { if(abSub != null) {
sb.append(abSub.getStackDescription()); sb.append(abSub.getStackDescription());
} }
return sb.toString(); return sb.toString();
} }
private static boolean addTurnCanPlayAI(final AbilityFactory af, final SpellAbility sa){ private static boolean addTurnCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
if (!ComputerUtil.canPayCost(sa)) return addTurnTriggerAI(af, sa, false);
return false;
Target tgt = sa.getTarget();
if (sa.getTarget() != null){
tgt.resetTargets();
sa.getTarget().addTarget(AllZone.ComputerPlayer);
}
else{
ArrayList<Player> tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), af.getMapParams().get("Defined"), sa);
for (Player p : tgtPlayers)
if (p.isHuman())
return false;
// not sure if the AI should be playing with cards that give the Human more turns.
}
return true;
} }
private static boolean addTurnTriggerAI(final AbilityFactory af, final SpellAbility sa, boolean mandatory){ private static boolean addTurnTriggerAI(final AbilityFactory af, final SpellAbility sa, boolean mandatory) {
if (!ComputerUtil.canPayCost(sa)) if (!ComputerUtil.canPayCost(sa))
return false; return false;
Target tgt = sa.getTarget(); Target tgt = sa.getTarget();
if (sa.getTarget() != null){ if(sa.getTarget() != null){
tgt.resetTargets(); tgt.resetTargets();
sa.getTarget().addTarget(AllZone.ComputerPlayer); sa.getTarget().addTarget(AllZone.ComputerPlayer);
} }
else{ else{
ArrayList<Player> tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), af.getMapParams().get("Defined"), sa); ArrayList<Player> tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), af.getMapParams().get("Defined"), sa);
for (Player p : tgtPlayers) for(Player p : tgtPlayers)
if (p.isHuman() && !mandatory) if(p.isHuman() && !mandatory)
return false; return false;
// not sure if the AI should be playing with cards that give the Human more turns. // not sure if the AI should be playing with cards that give the Human more turns.
} }
@@ -185,7 +163,6 @@ public class AbilityFactory_Turns {
private static void addTurnResolve(final AbilityFactory af, final SpellAbility sa){ private static void addTurnResolve(final AbilityFactory af, final SpellAbility sa){
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();
Card card = af.getHostCard();
int numTurns = AbilityFactory.calculateAmount(af.getHostCard(), params.get("NumTurns"), sa); int numTurns = AbilityFactory.calculateAmount(af.getHostCard(), params.get("NumTurns"), sa);
ArrayList<Player> tgtPlayers; ArrayList<Player> tgtPlayers;
@@ -204,17 +181,12 @@ public class AbilityFactory_Turns {
} }
} }
if (af.hasSubAbility()){ if(af.hasSubAbility()) {
Ability_Sub abSub = sa.getSubAbility(); Ability_Sub abSub = sa.getSubAbility();
if (abSub != null){ if(abSub != null) {
abSub.resolve(); abSub.resolve();
} }
else{
String DrawBack = params.get("SubAbility");
if (af.hasSubAbility())
CardFactoryUtil.doDrawBack(DrawBack, numTurns, card.getController(), card.getController().getOpponent(), tgtPlayers.get(0), card, null, sa);
}
} }
} }
} }//end class AbilityFactory_Turns