another 2 calls to gui removed

This commit is contained in:
Maxmtg
2013-11-24 19:21:30 +00:00
parent 9190ce038f
commit 8af7fadbf6
4 changed files with 53 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -56,11 +57,13 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
validDesc = sa.getParam("ValidDesc"); validDesc = sa.getParam("ValidDesc");
} }
boolean randomChoice = sa.hasParam("AtRandom");
for (final Player p : tgtPlayers) { for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) {
boolean ok = false; String chosen = "";
while (!ok) {
if (sa.hasParam("AtRandom")) { while (true) {
if (randomChoice) {
// Currently only used for Momir Avatar, if something else gets added here, make it more generic // Currently only used for Momir Avatar, if something else gets added here, make it more generic
Predicate<CardRules> baseRule = CardRulesPredicates.Presets.IS_CREATURE; Predicate<CardRules> baseRule = CardRulesPredicates.Presets.IS_CREATURE;
@@ -75,47 +78,44 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
Predicates.compose(additionalRule, PaperCard.FN_GET_RULES)); Predicates.compose(additionalRule, PaperCard.FN_GET_RULES));
cards = Lists.newArrayList(Iterables.filter(cards, cpp)); cards = Lists.newArrayList(Iterables.filter(cards, cpp));
if (!cards.isEmpty()) { if (!cards.isEmpty()) {
host.setNamedCard(Aggregates.random(cards).getName()); chosen = Aggregates.random(cards).getName();
} else { } else {
host.setNamedCard(""); chosen = "";
} }
ok = true; break;
} else if (p.isHuman()) { }
if (p.isHuman()) {
final String message = validDesc.equals("card") ? "Name a card" : "Name a " + validDesc + " card."; final String message = validDesc.equals("card") ? "Name a card" : "Name a " + validDesc + " card.";
List<PaperCard> cards = Lists.newArrayList(Singletons.getMagicDb().getCommonCards().getUniqueCards()); Predicate<PaperCard> cpp = null;
if ( StringUtils.containsIgnoreCase(valid, "nonland") ) if ( StringUtils.containsIgnoreCase(valid, "nonland") )
{ {
Predicate<PaperCard> cpp = Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard.FN_GET_RULES); cpp = Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard.FN_GET_RULES);
cards = Lists.newArrayList(Iterables.filter(cards, cpp));
} }
if ( StringUtils.containsIgnoreCase(valid, "nonbasic") ) if ( StringUtils.containsIgnoreCase(valid, "nonbasic") )
{ {
Predicate<PaperCard> cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND), PaperCard.FN_GET_RULES); cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND), PaperCard.FN_GET_RULES);
cards = Lists.newArrayList(Iterables.filter(cards, cpp));
} }
if ( StringUtils.containsIgnoreCase(valid, "noncreature") ) if ( StringUtils.containsIgnoreCase(valid, "noncreature") )
{ {
Predicate<PaperCard> cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_CREATURE), PaperCard.FN_GET_RULES); cpp = Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_CREATURE), PaperCard.FN_GET_RULES);
cards = Lists.newArrayList(Iterables.filter(cards, cpp));
} }
else if ( StringUtils.containsIgnoreCase(valid, "creature") ) else if ( StringUtils.containsIgnoreCase(valid, "creature") )
{ {
Predicate<PaperCard> cpp = Predicates.compose(CardRulesPredicates.Presets.IS_CREATURE, PaperCard.FN_GET_RULES); cpp = Predicates.compose(CardRulesPredicates.Presets.IS_CREATURE, PaperCard.FN_GET_RULES);
cards = Lists.newArrayList(Iterables.filter(cards, cpp));
} }
Collections.sort(cards); PaperCard cp = p.getController().chooseSinglePaperCard(sa, message, cpp, sa.getSourceCard().getName());
PaperCard cp = GuiChoose.one(message, cards);
Card instanceForPlayer = Card.fromPaperCard(cp, p); // the Card instance for test needs a game to be tested Card instanceForPlayer = Card.fromPaperCard(cp, p); // the Card instance for test needs a game to be tested
if (instanceForPlayer.isValid(valid, host.getController(), host)) { if (!instanceForPlayer.isValid(valid, host.getController(), host))
host.setNamedCard(cp.getName()); continue;
p.setNamedCard(cp.getName());
ok = true; chosen = cp.getName();
}
} else { } else {
String chosen = "";
if (sa.hasParam("AILogic")) { if (sa.hasParam("AILogic")) {
final String logic = sa.getParam("AILogic"); final String logic = sa.getParam("AILogic");
if (logic.equals("MostProminentInComputerDeck")) { if (logic.equals("MostProminentInComputerDeck")) {
@@ -137,12 +137,13 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
if (chosen.equals("")) { if (chosen.equals("")) {
chosen = "Morphling"; 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);
}
} }
} }
} }

View File

@@ -9,6 +9,7 @@ import java.util.Map;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import forge.deck.Deck; import forge.deck.Deck;
@@ -28,6 +29,7 @@ import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices; import forge.game.spellability.TargetChoices;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.item.PaperCard;
/** /**
@@ -174,7 +176,8 @@ public abstract class PlayerController {
public abstract List<AbilitySub> chooseModeForAbility(SpellAbility sa, int min, int num); public abstract List<AbilitySub> chooseModeForAbility(SpellAbility sa, int min, int num);
public abstract String chooseSingleColor(ImmutableList<String> onlyColors); public abstract String chooseSingleColor(ImmutableList<String> onlyColors);
public abstract String chooseHybridMana(String s); public abstract String chooseHybridMana(String s);
public abstract PaperCard chooseSinglePaperCard(SpellAbility sa, String message, Predicate<PaperCard> cpp, String name);
} }

View File

@@ -13,6 +13,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.esotericsoftware.minlog.Log; import com.esotericsoftware.minlog.Log;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@@ -45,6 +46,7 @@ import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices; import forge.game.spellability.TargetChoices;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.item.PaperCard;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.MyRandom; import forge.util.MyRandom;
@@ -502,4 +504,10 @@ public class PlayerControllerAi extends PlayerController {
return s.substring(0, 1); return s.substring(0, 1);
} }
} }
@Override
public PaperCard chooseSinglePaperCard(SpellAbility sa, String message,
Predicate<PaperCard> cpp, String name) {
throw new UnsupportedOperationException("Should not be called for AI"); // or implement it if you know how
}
} }

View File

@@ -4,6 +4,7 @@ import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -21,6 +22,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@@ -839,4 +841,13 @@ public class PlayerControllerHuman extends PlayerController {
public String chooseHybridMana(String s) { public String chooseHybridMana(String s) {
return GuiChoose.one("Choose a type", s.split("/")); return GuiChoose.one("Choose a type", s.split("/"));
} }
@Override
public PaperCard chooseSinglePaperCard(SpellAbility sa, String message, Predicate<PaperCard> cpp, String name) {
Iterable<PaperCard> cardsFromDb = Singletons.getMagicDb().getCommonCards().getUniqueCards();
List<PaperCard> cards = Lists.newArrayList(Iterables.filter(cardsFromDb, cpp));
Collections.sort(cards);
return GuiChoose.one(message, cards);
}
} }