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;
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<CardRules> 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<PaperCard> cards = Lists.newArrayList(Singletons.getMagicDb().getCommonCards().getUniqueCards());
Predicate<PaperCard> cpp = null;
if ( StringUtils.containsIgnoreCase(valid, "nonland") )
{
Predicate<PaperCard> 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<PaperCard> 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<PaperCard> 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<PaperCard> 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);
}
}
}
}

View File

@@ -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<AbilitySub> chooseModeForAbility(SpellAbility sa, int min, int num);
public abstract String chooseSingleColor(ImmutableList<String> onlyColors);
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 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<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.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<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);
}
}