From 8af7fadbf6a2a0bf64422b6e9b4a1212818f1517 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 24 Nov 2013 19:21:30 +0000 Subject: [PATCH] another 2 calls to gui removed --- .../ability/effects/ChooseCardNameEffect.java | 59 ++++++++++--------- .../forge/game/player/PlayerController.java | 5 +- .../forge/game/player/PlayerControllerAi.java | 8 +++ .../game/player/PlayerControllerHuman.java | 11 ++++ 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/forge-gui/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java b/forge-gui/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java index 2808a77cecc..08a63b91b9d 100644 --- a/forge-gui/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java +++ b/forge-gui/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -56,11 +57,13 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { validDesc = sa.getParam("ValidDesc"); } + boolean randomChoice = sa.hasParam("AtRandom"); for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { - boolean ok = false; - while (!ok) { - if (sa.hasParam("AtRandom")) { + String chosen = ""; + + while (true) { + if (randomChoice) { // Currently only used for Momir Avatar, if something else gets added here, make it more generic Predicate baseRule = CardRulesPredicates.Presets.IS_CREATURE; @@ -75,47 +78,44 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { Predicates.compose(additionalRule, PaperCard.FN_GET_RULES)); cards = Lists.newArrayList(Iterables.filter(cards, cpp)); if (!cards.isEmpty()) { - host.setNamedCard(Aggregates.random(cards).getName()); + chosen = Aggregates.random(cards).getName(); } else { - host.setNamedCard(""); + chosen = ""; } - ok = true; - } else if (p.isHuman()) { + break; + } + + if (p.isHuman()) { final String message = validDesc.equals("card") ? "Name a card" : "Name a " + validDesc + " card."; - List cards = Lists.newArrayList(Singletons.getMagicDb().getCommonCards().getUniqueCards()); + Predicate cpp = null; + + if ( StringUtils.containsIgnoreCase(valid, "nonland") ) { - Predicate cpp = Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard.FN_GET_RULES); - cards = Lists.newArrayList(Iterables.filter(cards, cpp)); + cpp = Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard.FN_GET_RULES); } if ( StringUtils.containsIgnoreCase(valid, "nonbasic") ) { - Predicate cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND), PaperCard.FN_GET_RULES); - cards = Lists.newArrayList(Iterables.filter(cards, cpp)); + cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND), PaperCard.FN_GET_RULES); } if ( StringUtils.containsIgnoreCase(valid, "noncreature") ) { - Predicate cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_CREATURE), PaperCard.FN_GET_RULES); - cards = Lists.newArrayList(Iterables.filter(cards, cpp)); + cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_CREATURE), PaperCard.FN_GET_RULES); } else if ( StringUtils.containsIgnoreCase(valid, "creature") ) { - Predicate cpp = Predicates.compose(CardRulesPredicates.Presets.IS_CREATURE, PaperCard.FN_GET_RULES); - cards = Lists.newArrayList(Iterables.filter(cards, cpp)); + cpp = Predicates.compose(CardRulesPredicates.Presets.IS_CREATURE, PaperCard.FN_GET_RULES); } - Collections.sort(cards); - - PaperCard cp = GuiChoose.one(message, cards); + PaperCard cp = p.getController().chooseSinglePaperCard(sa, message, cpp, sa.getSourceCard().getName()); Card instanceForPlayer = Card.fromPaperCard(cp, p); // the Card instance for test needs a game to be tested - if (instanceForPlayer.isValid(valid, host.getController(), host)) { - host.setNamedCard(cp.getName()); - p.setNamedCard(cp.getName()); - ok = true; - } + if (!instanceForPlayer.isValid(valid, host.getController(), host)) + continue; + + chosen = cp.getName(); } else { - String chosen = ""; + if (sa.hasParam("AILogic")) { final String logic = sa.getParam("AILogic"); if (logic.equals("MostProminentInComputerDeck")) { @@ -137,12 +137,13 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { if (chosen.equals("")) { chosen = "Morphling"; } - GuiChoose.one("Computer picked: ", new String[]{chosen}); - host.setNamedCard(chosen); - p.setNamedCard(chosen); - ok = true; } } + host.setNamedCard(chosen); + if(!randomChoice) { + p.getGame().getAction().nofityOfValue(sa, host, p.getName() + " picked " + chosen, p); + p.setNamedCard(chosen); + } } } } diff --git a/forge-gui/src/main/java/forge/game/player/PlayerController.java b/forge-gui/src/main/java/forge/game/player/PlayerController.java index 80976e50c99..4b4fb8a71a3 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerController.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerController.java @@ -9,6 +9,7 @@ import java.util.Map; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; +import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import forge.deck.Deck; @@ -28,6 +29,7 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; import forge.game.zone.ZoneType; +import forge.item.PaperCard; /** @@ -174,7 +176,8 @@ public abstract class PlayerController { public abstract List chooseModeForAbility(SpellAbility sa, int min, int num); public abstract String chooseSingleColor(ImmutableList onlyColors); - public abstract String chooseHybridMana(String s); + + public abstract PaperCard chooseSinglePaperCard(SpellAbility sa, String message, Predicate cpp, String name); } diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java index 5c4e58d48ee..e4adbe9d58d 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import com.esotericsoftware.minlog.Log; +import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -45,6 +46,7 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; import forge.game.zone.ZoneType; +import forge.item.PaperCard; import forge.util.Aggregates; import forge.util.MyRandom; @@ -502,4 +504,10 @@ public class PlayerControllerAi extends PlayerController { return s.substring(0, 1); } } + + @Override + public PaperCard chooseSinglePaperCard(SpellAbility sa, String message, + Predicate cpp, String name) { + throw new UnsupportedOperationException("Should not be called for AI"); // or implement it if you know how + } } diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java index 8af5bdb5d05..f8c7ef0f4ba 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java @@ -4,6 +4,7 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -21,6 +22,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import com.google.common.base.Function; +import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -839,4 +841,13 @@ public class PlayerControllerHuman extends PlayerController { public String chooseHybridMana(String s) { return GuiChoose.one("Choose a type", s.split("/")); } + + + @Override + public PaperCard chooseSinglePaperCard(SpellAbility sa, String message, Predicate cpp, String name) { + Iterable cardsFromDb = Singletons.getMagicDb().getCommonCards().getUniqueCards(); + List cards = Lists.newArrayList(Iterables.filter(cardsFromDb, cpp)); + Collections.sort(cards); + return GuiChoose.one(message, cards); + } }