diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 918b12b4266..0f5b9c90dac 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -84,6 +84,16 @@ public class AdvancedSearch { return ConquestPlane.getAllPlanesOfCard(input); } }), + CARD_REGION("Region", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ConquestPlane.getAllRegions()) { + @Override + protected ConquestPlane.Region getItemValue(PaperCard input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(PaperCard input) { + return ConquestPlane.getAllRegionsOfCard(input); + } + }), CARD_QUEST_WORLD("Quest World", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getWorlds())) { @Override protected QuestWorld getItemValue(PaperCard input) { diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java index 271b486274e..fbbba09edbd 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java @@ -20,6 +20,7 @@ package forge.planarconquest; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -355,6 +356,10 @@ public enum ConquestPlane { bannedCards.addAll(bannedCards0); } + for (Region region : regions) { + region.plane = this; + } + CardDb commonCards = FModel.getMagicDb().getCommonCards(); for (String setCode : setCodes0) { CardEdition edition = FModel.getMagicDb().getEditions().get(setCode); @@ -466,6 +471,7 @@ public enum ConquestPlane { private final DeckGenPool cardPool = new DeckGenPool(); private final FCollection commanders = new FCollection(); + private ConquestPlane plane; private ISkinImage art; private Region(String name0, String artCardName0, final int colorMask) { @@ -509,8 +515,12 @@ public enum ConquestPlane { return commanders; } + public ConquestPlane getPlane() { + return plane; + } + public String toString() { - return name; + return plane.name + " - " + name; } } @@ -650,4 +660,28 @@ public enum ConquestPlane { } return planes; } + + public static Set getAllRegionsOfCard(PaperCard card) { + Set regions = new HashSet(); + for (ConquestPlane plane : values()) { + if (plane.cardPool.contains(card)) { + for (Region region : plane.getRegions()) { + if (region.cardPool.contains(card)) { + regions.add(region); + } + } + } + } + return regions; + } + + public static List getAllRegions() { + List regions = new ArrayList(); + for (ConquestPlane plane : values()) { + for (Region region : plane.getRegions()) { + regions.add(region); + } + } + return regions; + } }