mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Commander: more fixes for new Commander changes and Color Identity
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(",");
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user