From 278d96898fee5d4562a94dd45f8c55e5a56d5a33 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 14:30:51 +0000 Subject: [PATCH] update AF_Regenerate with "Defined" targeting. AI still needs some work. --- src/forge/AbilityFactory_Regenerate.java | 53 ++++++++++++++++-------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/src/forge/AbilityFactory_Regenerate.java b/src/forge/AbilityFactory_Regenerate.java index 0832a0d892c..dbba58bdeab 100644 --- a/src/forge/AbilityFactory_Regenerate.java +++ b/src/forge/AbilityFactory_Regenerate.java @@ -73,17 +73,24 @@ public class AbilityFactory_Regenerate { final HashMap params = af.getMapParams(); StringBuilder sb = new StringBuilder(); String name = af.getHostCard().getName(); - sb.append(name).append(" - regenerate "); - Card tgt = sa.getTargetCard(); - if (tgt != null) { - if(tgt.isFaceDown()) sb.append("Morph"); - else sb.append(tgt.getName()); - } - else { - ArrayList tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); - for(Card c:tgtCards) { - if(c.isFaceDown()) sb.append("Morph "); - else sb.append(c.getName()).append(" "); + + ArrayList tgtCards; + Target tgt = af.getAbTgt(); + if (tgt != null) + tgtCards = tgt.getTargetCards(); + else + tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + + if(tgtCards.size() > 0) { + if (sa instanceof Ability_Sub) + sb.append(" "); + else + sb.append(name).append(" - "); + + sb.append("Regenerate "); + for(Card tgtC:tgtCards) { + if(tgtC.isFaceDown()) sb.append("Morph "); + else sb.append(tgtC.getName()).append(" "); } } sb.append("."); @@ -97,9 +104,14 @@ public class AbilityFactory_Regenerate { } private static boolean doCanPlayAI(final AbilityFactory af, final SpellAbility sa) { - //final HashMap params = af.getMapParams(); + final HashMap params = af.getMapParams(); + final Card hostCard = af.getHostCard(); boolean chance = false; - //ArrayList tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + ArrayList tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + + // if there is no target and host card isn't in play, don't activate + if (af.getAbTgt() == null && !AllZone.GameAction.isCardInPlay(hostCard)) + return false; // temporarily disabled until better AI if (af.getAbCost().getSacCost()) return false; @@ -175,16 +187,15 @@ public class AbilityFactory_Regenerate { } private static void doResolve(final AbilityFactory af, final SpellAbility sa) { - //Card hostCard = af.getHostCard(); + Card hostCard = af.getHostCard(); final HashMap params = af.getMapParams(); ArrayList tgtCards; Target tgt = af.getAbTgt(); if (tgt != null) tgtCards = tgt.getTargetCards(); - else{ - tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); - } + else + tgtCards = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa); for(final Card tgtC : tgtCards){ final Command untilEOT = new Command() { @@ -195,7 +206,7 @@ public class AbilityFactory_Regenerate { } }; - if (AllZone.GameAction.isCardInPlay(tgtC) && (tgt == null || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))){ + if (AllZone.GameAction.isCardInPlay(tgtC) && (tgt == null || CardFactoryUtil.canTarget(hostCard, tgtC))){ tgtC.addShield(); AllZone.EndOfTurn.addUntil(untilEOT); } @@ -206,6 +217,12 @@ public class AbilityFactory_Regenerate { if (abSub != null){ abSub.resolve(); } + else{ + Card first = tgtCards.get(0); + CardFactoryUtil.doDrawBack(params.get("SubAbility"), 0, + hostCard.getController(), hostCard.getController().getOpponent(), + first.getController(), hostCard, first, sa); + } } }//doResolve }