Commander: more fixes for new Commander changes and Color Identity

This commit is contained in:
Hanmac
2016-10-26 09:01:16 +00:00
parent 91d8afdf85
commit a27fb9106b
4 changed files with 22 additions and 28 deletions

View File

@@ -28,10 +28,12 @@ import org.apache.commons.lang3.Range;
import org.apache.commons.lang3.tuple.ImmutablePair;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
import forge.StaticData;
import forge.card.CardRules;
import forge.card.CardRulesPredicates;
import forge.card.CardType;
import forge.card.ICardFace;
import forge.deck.generation.DeckGenPool;
@@ -383,13 +385,11 @@ public enum DeckFormat {
};
}
public Predicate<PaperCard> isLegalCardForCommanderPredicate(PaperCard commander) {
final byte cmdCI = commander.getRules().getColorIdentity().getColor();
return new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard card) {
return card.getRules().getColorIdentity().hasNoColorsExcept(cmdCI);
}
};
public Predicate<PaperCard> isLegalCardForCommanderPredicate(List<PaperCard> commanders) {
byte cmdCI = 0;
for (final PaperCard p : commanders) {
cmdCI |= p.getRules().getColorIdentity().getColor();
}
return Predicates.compose(CardRulesPredicates.hasColorIdentity(cmdCI), PaperCard.FN_GET_RULES);
}
}

View File

@@ -40,6 +40,7 @@ import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType;
import forge.util.Callback;
import forge.util.ItemPool;
import forge.util.Lang;
import forge.util.Utils;
import forge.util.storage.IStorage;
@@ -523,8 +524,8 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
protected void save(final Callback<Boolean> callback) {
if (StringUtils.isEmpty(deck.getName())) {
PaperCard commander = deck.getCommander();
String initialInput = commander == null ? "" : commander.getName(); //use commander name as default deck name
List<PaperCard> commanders = deck.getCommanders(); //use commander name as default deck name
String initialInput = Lang.joinHomogenous(commanders);
FOptionPane.showInputDialog("Enter name for new deck", initialInput, new Callback<String>() {
@Override
public void run(String result) {
@@ -915,15 +916,15 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
break;
case Commander:
case TinyLeaders:
final PaperCard commander = parentScreen.getDeck().getCommander();
if (commander == null) {
final List<PaperCard> commanders = parentScreen.getDeck().getCommanders();
if (commanders.isEmpty()) {
//if no commander set for deck, only show valid commanders
additionalFilter = DeckFormat.Commander.isLegalCommanderPredicate();
cardManager.setCaption("Commanders");
}
else {
//if a commander has been set, only show cards that match its color identity
additionalFilter = DeckFormat.Commander.isLegalCardForCommanderPredicate(commander);
additionalFilter = DeckFormat.Commander.isLegalCardForCommanderPredicate(commanders);
cardManager.setCaption("Cards");
}
//fall through to below
@@ -951,7 +952,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
}
private boolean needsCommander() {
return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommander() == null;
return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().isEmpty();
}
private void setCommander(PaperCard card) {

View File

@@ -10,6 +10,7 @@ import com.google.common.base.Predicates;
import forge.GuiBase;
import forge.assets.ISkinImage;
import forge.card.CardRulesPredicates;
import forge.card.ColorSet;
import forge.deck.generation.DeckGenPool;
import forge.item.PaperCard;
@@ -112,13 +113,7 @@ public class ConquestRegion {
break;
case "colors":
colorSet = ColorSet.fromNames(value.toCharArray());
final int colorMask = colorSet.getColor();
pred = new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard pc) {
return pc.getRules().getColorIdentity().hasNoColorsExcept(colorMask);
}
};
pred = Predicates.compose(CardRulesPredicates.hasColorIdentity(colorSet.getColor()), PaperCard.FN_GET_RULES);
break;
case "sets":
final String[] sets = value.split(",");

View File

@@ -8,7 +8,9 @@ import java.util.List;
import java.util.Map.Entry;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.assets.FSkinProp;
import forge.assets.IHasSkinProp;
@@ -129,13 +131,9 @@ public class ConquestUtil {
//remove any cards that aren't allowed in deck due to color identity
if (colorIdentity != MagicColor.ALL_COLORS) {
List<PaperCard> invalidCards = new ArrayList<PaperCard>();
for (PaperCard pc : availableCards) {
if (!pc.getRules().getColorIdentity().hasNoColorsExcept(colorIdentity)) {
invalidCards.add(pc);
}
}
availableCards.removeAll(invalidCards);
Predicate<PaperCard> pred = DeckFormat.Commander.isLegalCardForCommanderPredicate(deck.getCommanders());
availableCards.retainAll(Lists.newArrayList(Iterables.filter(availableCards, pred)));
}
//create pool from available cards