From 97b418c9dec2801edc77ec5ed84c54c883be858b Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Fri, 29 Mar 2013 06:21:51 +0000 Subject: [PATCH] renamed input classes, used a common branch in modular --- .gitattributes | 4 +- .../card/cardfactory/CardFactoryUtil.java | 52 ++++++++----------- .../card/spellability/TargetSelection.java | 2 +- .../forge/control/input/InputSelectCards.java | 2 +- .../input/InputSelectCardsFromList.java | 3 ++ ...utSelectList.java => InputSelectMany.java} | 2 +- ...ListBase.java => InputSelectManyBase.java} | 8 +-- 7 files changed, 32 insertions(+), 41 deletions(-) rename src/main/java/forge/control/input/{InputSelectList.java => InputSelectMany.java} (68%) rename src/main/java/forge/control/input/{InputSelectListBase.java => InputSelectManyBase.java} (86%) diff --git a/.gitattributes b/.gitattributes index 191b6e686a4..35a142ed88e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -13832,8 +13832,8 @@ src/main/java/forge/control/input/InputPayManaX.java -text src/main/java/forge/control/input/InputPayment.java -text src/main/java/forge/control/input/InputSelectCards.java -text src/main/java/forge/control/input/InputSelectCardsFromList.java -text -src/main/java/forge/control/input/InputSelectList.java -text -src/main/java/forge/control/input/InputSelectListBase.java -text +src/main/java/forge/control/input/InputSelectMany.java -text +src/main/java/forge/control/input/InputSelectManyBase.java -text src/main/java/forge/control/input/InputSynchronized.java -text src/main/java/forge/control/input/InputSyncronizedBase.java -text src/main/java/forge/control/input/package-info.java svneol=native#text/plain diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 777236a52bb..45215e45b30 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -65,6 +65,7 @@ import forge.card.trigger.TriggerHandler; import forge.card.trigger.TriggerType; import forge.control.input.InputBase; import forge.control.input.InputSelectCards; +import forge.control.input.InputSelectCardsFromList; import forge.game.GameState; import forge.game.ai.ComputerUtil; import forge.game.ai.ComputerUtilCard; @@ -3555,43 +3556,34 @@ public class CardFactoryUtil { @Override public void execute() { + final Player modularPlayer = card.getController(); + final List choices = Lists.newArrayList(); + for(Card c : modularPlayer.getGame().getCardsIn(ZoneType.Battlefield)) { + if( c.isCreature() && c.isArtifact() && c.canBeTargetedBy(ability)) + choices.add(c); + } + + Card card2 = null; // Target as Modular is Destroyed - if (card.getController().isComputer()) { - List choices = - CardLists.filter(card.getController().getCardsIn(ZoneType.Battlefield), new Predicate() { - @Override - public boolean apply(final Card c) { - return c.isCreature() && c.isArtifact(); - } - }); - if (choices.size() != 0) { - ability.setTargetCard(ComputerUtilCard.getBestCreatureAI(choices)); - - if (ability.getTargetCard() != null) { - ability.setStackDescription("Put " + card.getCounters(CounterType.P1P1) - + " +1/+1 counter/s from " + card + " on " + ability.getTargetCard()); - Singletons.getModel().getGame().getStack().addSimultaneousStackEntry(ability); - - } + if (modularPlayer.isComputer()) { + final List aiChoices = CardLists.filterControlledBy(choices, modularPlayer); + if (!aiChoices.isEmpty()) { + card2 = ComputerUtilCard.getBestCreatureAI(aiChoices); } } else { - InputSelectCards inp = new InputSelectCards(1,1) { - private static final long serialVersionUID = -7895723996302990127L; - - @Override - protected boolean isValidChoice(Card card2) { - return card2.isCreature() && card2.isArtifact() && card.isInPlay() && card.canBeTargetedBy(ability); - } - }; + InputSelectCards inp = new InputSelectCardsFromList(0, 1, choices); + inp.setMessage("Select target artifact creature to put +1/+1 counter on it"); FThreads.setInputAndWait(inp); if( !inp.hasCancelled() ) { - Card card2 = inp.getSelected().get(0); - ability.setTargetCard(card2); - String desc = String.format("Put %d +1/+1 counter/s from %s on %s", card.getCounters(CounterType.P1P1), card, card2); - ability.setStackDescription(desc); - Singletons.getModel().getGame().getStack().add(ability); + card2 = inp.getSelected().get(0); } } + ability.setTargetCard(card2); + if ( null != card2 ) { + String desc = String.format("Put %d +1/+1 counter/s from %s on %s", card.getCounters(CounterType.P1P1), card, card2); + ability.setStackDescription(desc); + modularPlayer.getGame().getStack().addSimultaneousStackEntry(ability); + } } }); } diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index f07ef9fc1af..4f8185c312e 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -91,7 +91,7 @@ public class TargetSelection { sb.append("\n"); sb.append(tgt.getVTSelection()); - CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString()); + showMessage(sb.toString()); // If reached Minimum targets, enable OK button if (!tgt.isMinTargetsChosen(sa.getSourceCard(), sa) || tgt.isDividedAsYouChoose()) { diff --git a/src/main/java/forge/control/input/InputSelectCards.java b/src/main/java/forge/control/input/InputSelectCards.java index af9fd4a032b..1ab25e83afb 100644 --- a/src/main/java/forge/control/input/InputSelectCards.java +++ b/src/main/java/forge/control/input/InputSelectCards.java @@ -2,7 +2,7 @@ package forge.control.input; import forge.Card; -public abstract class InputSelectCards extends InputSelectListBase { +public abstract class InputSelectCards extends InputSelectManyBase { private static final long serialVersionUID = -6609493252672573139L; protected InputSelectCards(int min, int max) { diff --git a/src/main/java/forge/control/input/InputSelectCardsFromList.java b/src/main/java/forge/control/input/InputSelectCardsFromList.java index 762fb962728..c65363b3a0d 100644 --- a/src/main/java/forge/control/input/InputSelectCardsFromList.java +++ b/src/main/java/forge/control/input/InputSelectCardsFromList.java @@ -12,6 +12,9 @@ public class InputSelectCardsFromList extends InputSelectCards { public InputSelectCardsFromList(int min, int max, List validCards) { super(min, Math.min(max, validCards.size())); // to avoid hangs this.validChoices = validCards; + + if ( min > validCards.size() ) + throw new RuntimeException(String.format("Trying to choose at least %d cards from a list with only %d cards!", min, validCards.size())); } @Override diff --git a/src/main/java/forge/control/input/InputSelectList.java b/src/main/java/forge/control/input/InputSelectMany.java similarity index 68% rename from src/main/java/forge/control/input/InputSelectList.java rename to src/main/java/forge/control/input/InputSelectMany.java index 9d8aafe13e5..427108d7088 100644 --- a/src/main/java/forge/control/input/InputSelectList.java +++ b/src/main/java/forge/control/input/InputSelectMany.java @@ -6,7 +6,7 @@ import java.util.List; * TODO: Write javadoc for this type. * */ -public interface InputSelectList extends InputSynchronized { +public interface InputSelectMany extends InputSynchronized { boolean hasCancelled(); List getSelected(); } \ No newline at end of file diff --git a/src/main/java/forge/control/input/InputSelectListBase.java b/src/main/java/forge/control/input/InputSelectManyBase.java similarity index 86% rename from src/main/java/forge/control/input/InputSelectListBase.java rename to src/main/java/forge/control/input/InputSelectManyBase.java index 0e4c5908fe4..ccf42ce8fdb 100644 --- a/src/main/java/forge/control/input/InputSelectListBase.java +++ b/src/main/java/forge/control/input/InputSelectManyBase.java @@ -7,7 +7,7 @@ import forge.GameEntity; import forge.gui.match.CMatchUI; import forge.view.ButtonUtil; -public abstract class InputSelectListBase extends InputSyncronizedBase implements InputSelectList { +public abstract class InputSelectManyBase extends InputSyncronizedBase implements InputSelectMany { private static final long serialVersionUID = -2305549394512889450L; @@ -22,7 +22,7 @@ public abstract class InputSelectListBase extends InputSyn - protected InputSelectListBase(int min, int max) { + protected InputSelectManyBase(int min, int max) { selected = new ArrayList(); if (min > max) { throw new IllegalArgumentException("Min must not be greater than Max"); @@ -82,10 +82,6 @@ public abstract class InputSelectListBase extends InputSyn @Override public final void selectButtonOK() { - // should check here if it still gets into an infinite loop - // if an ability is put on stack before this input is stopped; - // if it does, uncomment the 5 lines below, use them as method body - this.stop(); }