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 org.apache.commons.lang3.tuple.ImmutablePair;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
import forge.StaticData;
|
import forge.StaticData;
|
||||||
import forge.card.CardRules;
|
import forge.card.CardRules;
|
||||||
|
import forge.card.CardRulesPredicates;
|
||||||
import forge.card.CardType;
|
import forge.card.CardType;
|
||||||
import forge.card.ICardFace;
|
import forge.card.ICardFace;
|
||||||
import forge.deck.generation.DeckGenPool;
|
import forge.deck.generation.DeckGenPool;
|
||||||
@@ -383,13 +385,11 @@ public enum DeckFormat {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Predicate<PaperCard> isLegalCardForCommanderPredicate(PaperCard commander) {
|
public Predicate<PaperCard> isLegalCardForCommanderPredicate(List<PaperCard> commanders) {
|
||||||
final byte cmdCI = commander.getRules().getColorIdentity().getColor();
|
byte cmdCI = 0;
|
||||||
return new Predicate<PaperCard>() {
|
for (final PaperCard p : commanders) {
|
||||||
@Override
|
cmdCI |= p.getRules().getColorIdentity().getColor();
|
||||||
public boolean apply(PaperCard card) {
|
}
|
||||||
return card.getRules().getColorIdentity().hasNoColorsExcept(cmdCI);
|
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.toolbox.FEvent.FEventType;
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
import forge.util.ItemPool;
|
import forge.util.ItemPool;
|
||||||
|
import forge.util.Lang;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
import forge.util.storage.IStorage;
|
import forge.util.storage.IStorage;
|
||||||
|
|
||||||
@@ -523,8 +524,8 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
|
|
||||||
protected void save(final Callback<Boolean> callback) {
|
protected void save(final Callback<Boolean> callback) {
|
||||||
if (StringUtils.isEmpty(deck.getName())) {
|
if (StringUtils.isEmpty(deck.getName())) {
|
||||||
PaperCard commander = deck.getCommander();
|
List<PaperCard> commanders = deck.getCommanders(); //use commander name as default deck name
|
||||||
String initialInput = commander == null ? "" : commander.getName(); //use commander name as default deck name
|
String initialInput = Lang.joinHomogenous(commanders);
|
||||||
FOptionPane.showInputDialog("Enter name for new deck", initialInput, new Callback<String>() {
|
FOptionPane.showInputDialog("Enter name for new deck", initialInput, new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(String result) {
|
public void run(String result) {
|
||||||
@@ -915,15 +916,15 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
break;
|
break;
|
||||||
case Commander:
|
case Commander:
|
||||||
case TinyLeaders:
|
case TinyLeaders:
|
||||||
final PaperCard commander = parentScreen.getDeck().getCommander();
|
final List<PaperCard> commanders = parentScreen.getDeck().getCommanders();
|
||||||
if (commander == null) {
|
if (commanders.isEmpty()) {
|
||||||
//if no commander set for deck, only show valid commanders
|
//if no commander set for deck, only show valid commanders
|
||||||
additionalFilter = DeckFormat.Commander.isLegalCommanderPredicate();
|
additionalFilter = DeckFormat.Commander.isLegalCommanderPredicate();
|
||||||
cardManager.setCaption("Commanders");
|
cardManager.setCaption("Commanders");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//if a commander has been set, only show cards that match its color identity
|
//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");
|
cardManager.setCaption("Cards");
|
||||||
}
|
}
|
||||||
//fall through to below
|
//fall through to below
|
||||||
@@ -951,7 +952,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean needsCommander() {
|
private boolean needsCommander() {
|
||||||
return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommander() == null;
|
return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCommander(PaperCard card) {
|
private void setCommander(PaperCard card) {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.google.common.base.Predicates;
|
|||||||
|
|
||||||
import forge.GuiBase;
|
import forge.GuiBase;
|
||||||
import forge.assets.ISkinImage;
|
import forge.assets.ISkinImage;
|
||||||
|
import forge.card.CardRulesPredicates;
|
||||||
import forge.card.ColorSet;
|
import forge.card.ColorSet;
|
||||||
import forge.deck.generation.DeckGenPool;
|
import forge.deck.generation.DeckGenPool;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
@@ -112,13 +113,7 @@ public class ConquestRegion {
|
|||||||
break;
|
break;
|
||||||
case "colors":
|
case "colors":
|
||||||
colorSet = ColorSet.fromNames(value.toCharArray());
|
colorSet = ColorSet.fromNames(value.toCharArray());
|
||||||
final int colorMask = colorSet.getColor();
|
pred = Predicates.compose(CardRulesPredicates.hasColorIdentity(colorSet.getColor()), PaperCard.FN_GET_RULES);
|
||||||
pred = new Predicate<PaperCard>() {
|
|
||||||
@Override
|
|
||||||
public boolean apply(PaperCard pc) {
|
|
||||||
return pc.getRules().getColorIdentity().hasNoColorsExcept(colorMask);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
break;
|
break;
|
||||||
case "sets":
|
case "sets":
|
||||||
final String[] sets = value.split(",");
|
final String[] sets = value.split(",");
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import java.util.List;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
import forge.assets.IHasSkinProp;
|
import forge.assets.IHasSkinProp;
|
||||||
@@ -129,13 +131,9 @@ public class ConquestUtil {
|
|||||||
|
|
||||||
//remove any cards that aren't allowed in deck due to color identity
|
//remove any cards that aren't allowed in deck due to color identity
|
||||||
if (colorIdentity != MagicColor.ALL_COLORS) {
|
if (colorIdentity != MagicColor.ALL_COLORS) {
|
||||||
List<PaperCard> invalidCards = new ArrayList<PaperCard>();
|
Predicate<PaperCard> pred = DeckFormat.Commander.isLegalCardForCommanderPredicate(deck.getCommanders());
|
||||||
for (PaperCard pc : availableCards) {
|
|
||||||
if (!pc.getRules().getColorIdentity().hasNoColorsExcept(colorIdentity)) {
|
availableCards.retainAll(Lists.newArrayList(Iterables.filter(availableCards, pred)));
|
||||||
invalidCards.add(pc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
availableCards.removeAll(invalidCards);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//create pool from available cards
|
//create pool from available cards
|
||||||
|
|||||||
Reference in New Issue
Block a user