- A better implementation of random land set choice in CEditorQuest/CEditorConstructed.

This commit is contained in:
Agetian
2015-09-28 10:07:09 +00:00
parent 29eb441963
commit bd298d8ca5
2 changed files with 10 additions and 26 deletions

View File

@@ -19,7 +19,6 @@ package forge.screens.deckeditor.controllers;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import forge.StaticData;
import forge.UiCommand; import forge.UiCommand;
import forge.card.CardEdition; import forge.card.CardEdition;
@@ -36,14 +35,11 @@ import forge.properties.ForgePreferences.FPref;
import forge.screens.deckeditor.AddBasicLandsDialog; import forge.screens.deckeditor.AddBasicLandsDialog;
import forge.screens.deckeditor.SEditorIO; import forge.screens.deckeditor.SEditorIO;
import forge.screens.match.controllers.CDetailPicture; import forge.screens.match.controllers.CDetailPicture;
import forge.util.Aggregates;
import forge.util.ItemPool; import forge.util.ItemPool;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
/** /**
* Child controller for constructed deck editor UI. * Child controller for constructed deck editor UI.
@@ -340,22 +336,14 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
Deck deck = editor.getDeckController().getModel(); Deck deck = editor.getDeckController().getModel();
if (deck == null) { return; } if (deck == null) { return; }
List<String> landCodes = new ArrayList<>(); List<CardEdition> availableEditions = new ArrayList<>();
Set<String> availableEditions = new HashSet<>();
for (PaperCard c : deck.getAllCardsInASinglePool().toFlatList()) { for (PaperCard c : deck.getAllCardsInASinglePool().toFlatList()) {
availableEditions.add(c.getEdition()); availableEditions.add(FModel.getMagicDb().getEditions().get(c.getEdition()));
} }
for (String edCode : availableEditions) { CardEdition randomLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditions);
CardEdition ed = FModel.getMagicDb().getEditions().get(edCode); CardEdition defaultLandSet = randomLandSet == null ? FModel.getMagicDb().getEditions().get("ZEN") : randomLandSet;
// Sets with only 2 types of lands (e.g. duel decks) are handled by Predicated.hasBasicLands
if (CardEdition.Predicates.hasBasicLands.apply(ed)) {
landCodes.add(edCode);
}
}
CardEdition defaultLandSet = FModel.getMagicDb().getEditions().get(landCodes.isEmpty() ? "ZEN" : Aggregates.random(landCodes));
AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, restrictedCatalog); AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, restrictedCatalog);
CardPool landsToAdd = dialog.show(); CardPool landsToAdd = dialog.show();

View File

@@ -51,7 +51,6 @@ import forge.screens.deckeditor.views.VCurrentDeck;
import forge.screens.deckeditor.views.VDeckgen; import forge.screens.deckeditor.views.VDeckgen;
import forge.screens.home.quest.CSubmenuQuestDecks; import forge.screens.home.quest.CSubmenuQuestDecks;
import forge.screens.match.controllers.CDetailPicture; import forge.screens.match.controllers.CDetailPicture;
import forge.util.Aggregates;
import forge.util.ItemPool; import forge.util.ItemPool;
/** /**
@@ -313,18 +312,15 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
Deck deck = editor.getDeckController().getModel(); Deck deck = editor.getDeckController().getModel();
if (deck == null) { return; } if (deck == null) { return; }
List<String> landCodes = new ArrayList<>(); List<String> availableEditionCodes = questFormat != null ? questFormat.getAllowedSetCodes() : Lists.newArrayList(FModel.getMagicDb().getEditions().getItemNames());
List<String> availableEditions = questFormat != null ? questFormat.getAllowedSetCodes() : Lists.newArrayList(FModel.getMagicDb().getEditions().getItemNames()); List<CardEdition> availableEditions = new ArrayList<>();
for (String edCode : availableEditions) { for (String s : availableEditionCodes) {
CardEdition ed = FModel.getMagicDb().getEditions().get(edCode); availableEditions.add(FModel.getMagicDb().getEditions().get(s));
// Sets with only 2 types of lands (e.g. duel decks) are handled by Predicated.hasBasicLands
if (CardEdition.Predicates.hasBasicLands.apply(ed)) {
landCodes.add(edCode);
}
} }
CardEdition defaultLandSet = FModel.getMagicDb().getEditions().get(landCodes.isEmpty() ? "ZEN" : Aggregates.random(landCodes)); CardEdition randomLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditions);
CardEdition defaultLandSet = randomLandSet == null ? FModel.getMagicDb().getEditions().get("ZEN") : randomLandSet;
AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, restrictedCatalog); AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, restrictedCatalog);
CardPool landsToAdd = dialog.show(); CardPool landsToAdd = dialog.show();