From 3f898343ecf13cfd5c1749590df069c15965ef42 Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 26 Sep 2015 15:41:07 +0000 Subject: [PATCH] Add Quest World option to card and deck advanced search options --- .../forge/itemmanager/AdvancedSearch.java | 22 ++++++++++++ .../src/main/java/forge/quest/QuestWorld.java | 35 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 3b31c462d7a..c569bf7aef4 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -3,6 +3,7 @@ package forge.itemmanager; import java.util.*; import java.util.Map.Entry; +import com.google.common.collect.ImmutableList; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -26,6 +27,7 @@ import forge.interfaces.IButton; import forge.item.InventoryItem; import forge.item.PaperCard; import forge.model.FModel; +import forge.quest.QuestWorld; import forge.util.gui.SGuiChoose; import forge.util.gui.SOptionPane; @@ -70,6 +72,16 @@ public class AdvancedSearch { return FModel.getFormats().getAllFormatsOfCard(input); } }), + CARD_QUEST_WORLD("Quest World", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getWorlds())) { + @Override + protected QuestWorld getItemValue(PaperCard input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(PaperCard input) { + return QuestWorld.getAllQuestWorldsOfCard(input); + } + }), CARD_COLOR("Color", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new ColorEvaluator() { @Override protected MagicColor.Color getItemValue(PaperCard input) { @@ -196,6 +208,16 @@ public class AdvancedSearch { return input.getFormats(); } }), + DECK_QUEST_WORLD("Quest World", DeckProxy.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getWorlds())) { + @Override + protected QuestWorld getItemValue(DeckProxy input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(DeckProxy input) { + return QuestWorld.getAllQuestWorldsOfDeck(input.getDeck()); + } + }), DECK_COLOR("Color", DeckProxy.class, FilterOperator.MULTI_LIST_OPS, new ColorEvaluator() { @Override protected MagicColor.Color getItemValue(DeckProxy input) { diff --git a/forge-gui/src/main/java/forge/quest/QuestWorld.java b/forge-gui/src/main/java/forge/quest/QuestWorld.java index 2f41afb9e17..a555d161a08 100644 --- a/forge-gui/src/main/java/forge/quest/QuestWorld.java +++ b/forge-gui/src/main/java/forge/quest/QuestWorld.java @@ -18,12 +18,19 @@ package forge.quest; import com.google.common.base.Function; + +import forge.deck.Deck; +import forge.game.GameFormat; +import forge.item.PaperCard; +import forge.model.FModel; import forge.quest.data.GameFormatQuest; import forge.util.storage.StorageReaderFile; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * This function holds the "world info" for the current quest. @@ -181,4 +188,32 @@ public class QuestWorld implements Comparable{ } return name.compareTo(other.name); } + + public static Set getAllQuestWorldsOfCard(PaperCard card) { + Set result = new HashSet(); + for (QuestWorld qw : FModel.getWorlds()) { + GameFormat format = qw.getFormat(); + if (format == null) { + format = FModel.getQuest().getMainFormat(); + } + if (format == null || format.getFilterRules().apply(card)) { + result.add(qw); + } + } + return result; + } + + public static Set getAllQuestWorldsOfDeck(Deck deck) { + Set result = new HashSet(); + for (QuestWorld qw : FModel.getWorlds()) { + GameFormat format = qw.getFormat(); + if (format == null) { + format = FModel.getQuest().getMainFormat(); + } + if (format == null || format.isDeckLegal(deck)) { + result.add(qw); + } + } + return result; + } }