From 034576ef768840d9537d68fa6f5baecbe8230f97 Mon Sep 17 00:00:00 2001 From: Hellfish Date: Sun, 25 Nov 2012 11:35:19 +0000 Subject: [PATCH] *Variants:Keep separate lists of traditional/nontraditional CardPrinted's in CardDb. *Variants:Fixed crash when only playing against 1 opponent on vanguard. *Variants:Fixed vanguard match not starting when selecting non-random avatar. --- .../java/forge/card/BoosterGenerator.java | 2 +- src/main/java/forge/card/MetaSet.java | 4 +-- src/main/java/forge/deck/CardCollections.java | 12 ++++++++- .../generate/GenerateColoredDeckBase.java | 2 +- .../gui/GuiMigrateLocalMWSSetPicturesHQ.java | 2 +- .../controllers/CEditorConstructed.java | 2 +- .../download/GuiDownloadSetPicturesLQ.java | 6 ++++- .../gui/home/variant/CSubmenuVanguard.java | 4 +++ .../gui/home/variant/VSubmenuVanguard.java | 5 ++-- src/main/java/forge/item/CardDb.java | 25 ++++++++++--------- src/main/java/forge/item/CardPrinted.java | 4 +++ src/main/java/forge/item/OpenablePack.java | 2 +- src/main/java/forge/quest/BoosterUtils.java | 4 +-- src/main/java/forge/quest/QuestUtilCards.java | 8 +++--- 14 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/main/java/forge/card/BoosterGenerator.java b/src/main/java/forge/card/BoosterGenerator.java index 2662fe79c17..701413ae9f5 100644 --- a/src/main/java/forge/card/BoosterGenerator.java +++ b/src/main/java/forge/card/BoosterGenerator.java @@ -122,7 +122,7 @@ public class BoosterGenerator { public BoosterGenerator(Predicate filter) { this(); - for (final CardPrinted c : Iterables.filter(CardDb.instance().getTraditionalCards(), filter)) { + for (final CardPrinted c : Iterables.filter(CardDb.instance().getAllTraditionalCards(), filter)) { this.addToRarity(c); // System.out.println(c); } diff --git a/src/main/java/forge/card/MetaSet.java b/src/main/java/forge/card/MetaSet.java index 87db58a726d..22246eb50df 100644 --- a/src/main/java/forge/card/MetaSet.java +++ b/src/main/java/forge/card/MetaSet.java @@ -226,7 +226,7 @@ public class MetaSet { // NOTE: The following code is far from ideal in a number of ways. If someone can // think of a way to improve it, please do so. --BBU // ItemPool cardPool = new ItemPool(CardPrinted.class); - for (CardPrinted aCard : CardDb.instance().getTraditionalCards()) { + for (CardPrinted aCard : CardDb.instance().getAllTraditionalCards()) { if (data.indexOf(aCard.getEdition()) > -1) { cardPool.add(aCard); // System.out.println("Added card" + aCard.getName()); @@ -293,7 +293,7 @@ public class MetaSet { if (mSet.type.equalsIgnoreCase("meta") || mSet.type.equalsIgnoreCase("booster") || mSet.type.equalsIgnoreCase("pack")) { final String mData = new String(mSet.data); - for (CardPrinted aCard : CardDb.instance().getTraditionalCards()) { + for (CardPrinted aCard : CardDb.instance().getAllTraditionalCards()) { if (mData.indexOf(aCard.getEdition()) > -1) { if (!cardPool.contains(aCard)) { cardPool.add(aCard); diff --git a/src/main/java/forge/deck/CardCollections.java b/src/main/java/forge/deck/CardCollections.java index c678322b208..e6407e3352b 100644 --- a/src/main/java/forge/deck/CardCollections.java +++ b/src/main/java/forge/deck/CardCollections.java @@ -34,6 +34,7 @@ public class CardCollections { private final IStorage draft; private final IStorage sealed; private final IStorage cube; + private final IStorage scheme; /** * TODO: Write javadoc for Constructor. @@ -45,8 +46,9 @@ public class CardCollections { this.draft = new StorageImmediatelySerialized(new DeckGroupSerializer(new File(file, "draft"))); this.sealed = new StorageImmediatelySerialized(new DeckGroupSerializer(new File(file, "sealed"))); this.cube = new StorageImmediatelySerialized(new DeckSerializer(new File(file, "cube"))); + this.scheme = new StorageImmediatelySerialized(new DeckSerializer(new File(file, "scheme"))); - System.out.printf("Read decks: %d constructed, %d sealed, %d draft, %d cubes.%n", constructed.getCount(), sealed.getCount(), draft.getCount(), cube.getCount()); + System.out.printf("Read decks: %d constructed, %d sealed, %d draft, %d cubes, %d scheme.%n", constructed.getCount(), sealed.getCount(), draft.getCount(), cube.getCount(), scheme.getCount()); // remove this after most people have been switched to new layout final OldDeckParser oldParser = new OldDeckParser(file, this.constructed, this.draft, this.sealed, this.cube); @@ -89,4 +91,12 @@ public class CardCollections { return this.sealed; } + /** + * TODO: Write javadoc for this method. + * @return + */ + public IStorage getScheme() { + return this.scheme; + } + } diff --git a/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java b/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java index da21ce588eb..fd34e709d75 100644 --- a/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java +++ b/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java @@ -220,7 +220,7 @@ public abstract class GenerateColoredDeckBase { if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)) { hasColor = Predicates.or(hasColor, GenerateDeckUtil.COLORLESS_CARDS); } - return Iterables.filter(CardDb.instance().getTraditionalCards(), Predicates.compose(Predicates.and(canPlay, hasColor), CardPrinted.FN_GET_RULES)); + return Iterables.filter(CardDb.instance().getAllTraditionalCards(), Predicates.compose(Predicates.and(canPlay, hasColor), CardPrinted.FN_GET_RULES)); } protected static Map countLands(ItemPool outList) { diff --git a/src/main/java/forge/gui/GuiMigrateLocalMWSSetPicturesHQ.java b/src/main/java/forge/gui/GuiMigrateLocalMWSSetPicturesHQ.java index 03a9ebc0684..150ac42e7c2 100644 --- a/src/main/java/forge/gui/GuiMigrateLocalMWSSetPicturesHQ.java +++ b/src/main/java/forge/gui/GuiMigrateLocalMWSSetPicturesHQ.java @@ -491,7 +491,7 @@ public final class GuiMigrateLocalMWSSetPicturesHQ extends DefaultBoundedRangeMo final String urlBase = "C:\\MTGForge\\HQPICS\\"; String imgFN = ""; - for (final CardPrinted cp : CardDb.instance().getAllCards()) + for (final CardPrinted cp : CardDb.instance().getAllTraditionalCards()) { // String url = c.getSVar("Picture"); // String[] URLs = url.split("\\\\"); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java index 663fc34874a..1e2395c4a7c 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java @@ -121,7 +121,7 @@ public final class CEditorConstructed extends ACEditorBase { @Override public void resetTables() { // Constructed mode can use all cards, no limitations. - this.getTableCatalog().setDeck(ItemPool.createFrom(CardDb.instance().getTraditionalCards(), CardPrinted.class)); + this.getTableCatalog().setDeck(ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), CardPrinted.class)); this.getTableDeck().setDeck(this.controller.getModel().getMain()); } diff --git a/src/main/java/forge/gui/download/GuiDownloadSetPicturesLQ.java b/src/main/java/forge/gui/download/GuiDownloadSetPicturesLQ.java index 6c1b14d85d6..46965cc4020 100644 --- a/src/main/java/forge/gui/download/GuiDownloadSetPicturesLQ.java +++ b/src/main/java/forge/gui/download/GuiDownloadSetPicturesLQ.java @@ -22,6 +22,8 @@ import java.util.ArrayList; import org.apache.commons.lang3.StringUtils; +import com.google.common.collect.Iterables; + import forge.CardUtil; import forge.Singletons; import forge.card.CardEdition; @@ -90,7 +92,9 @@ public class GuiDownloadSetPicturesLQ extends GuiDownloader { // read token names and urls final ArrayList cList = new ArrayList(); - for (final CardPrinted c : CardDb.instance().getAllCards()) { + Iterable allPrinted = Iterables.concat(CardDb.instance().getAllTraditionalCards(),CardDb.instance().getAllNonTraditionalCards()); + + for (final CardPrinted c : allPrinted) { final String setCode3 = c.getEdition(); if (StringUtils.isBlank(setCode3) || "???".equals(setCode3)) { continue; // we don't want cards from unknown sets diff --git a/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java b/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java index 36691dde9cd..2c01b3ce7d5 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java @@ -151,6 +151,10 @@ public enum CSubmenuVanguard implements ICDoc { avatar = Iterables.get(view.getAllAiAvatars(),rnd.nextInt(Iterables.size(view.getAllAiAvatars()))); } } + else + { + avatar = (CardPrinted)playerAvatars.get(i); + } helper.addVanguardPlayer(player, playerDecks.get(i), avatar); } diff --git a/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java b/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java index 37848e8f93b..62e7d5ab257 100644 --- a/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java +++ b/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java @@ -75,8 +75,7 @@ public enum VSubmenuVanguard implements IVSubmenu { private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts"); private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures"); - private final Predicate avatarTypePred = CardPrinted.Predicates.type("Vanguard"); - private final Iterable allAvatars = Iterables.filter(CardDb.instance().getAllCards(), avatarTypePred); + private final Iterable allAvatars = Iterables.filter(CardDb.instance().getAllNonTraditionalCards(), CardPrinted.Predicates.type("Vanguard")); private final List allAiAvatars = new ArrayList(); ////////////////////////////// @@ -333,7 +332,7 @@ public enum VSubmenuVanguard implements IVSubmenu { public int getNumPlayers() { - return currentNumTabsShown-1; + return currentNumTabsShown; } /** diff --git a/src/main/java/forge/item/CardDb.java b/src/main/java/forge/item/CardDb.java index 3422d69f542..dd4a96ed0f4 100644 --- a/src/main/java/forge/item/CardDb.java +++ b/src/main/java/forge/item/CardDb.java @@ -93,7 +93,9 @@ public final class CardDb { // need this to obtain cardReference by name+set+artindex private final Map> allCardsBySet = new Hashtable>(); // this is the same list in flat storage - private final List allCardsFlat = new ArrayList(); + private final List allTraditionalCardsFlat = new ArrayList(); + + private final List allNonTraditionalCardsFlat = new ArrayList(); // Lambda to get rules for selects from list of printed cards /** The Constant fnGetCardPrintedByForgeCard. */ @@ -167,7 +169,11 @@ public final class CardDb { setMap.put(cardName, cardCopies); for (int i = 0; i < count; i++) { lastAdded = CardPrinted.build(card, set, s.getValue().getRarity(), i); - this.allCardsFlat.add(lastAdded); + if(lastAdded.isTraditional()) { + this.allTraditionalCardsFlat.add(lastAdded); + } else { + this.allNonTraditionalCardsFlat.add(lastAdded); + } cardCopies[i] = lastAdded; } @@ -360,17 +366,12 @@ public final class CardDb { * * @return the all cards */ - public Iterable getAllCards() { - return this.allCardsFlat; + public Iterable getAllTraditionalCards() { + return this.allTraditionalCardsFlat; } - /** - * Gets all "traditional" (non-scheme/vanguard/plane) cards - * - * @return the cards - */ - public Iterable getTraditionalCards() { - return Iterables.filter(getAllCards(), CardPrinted.Predicates.Presets.TRADITIONAL); + public Iterable getAllNonTraditionalCards() { + return this.allNonTraditionalCardsFlat; } /** @@ -400,7 +401,7 @@ public final class CardDb { } else { // OK, plain name here final Predicate predicate = CardPrinted.Predicates.name(nameWithSet.left); - final Iterable namedCards = Iterables.filter(this.allCardsFlat, predicate); + final Iterable namedCards = Iterables.filter(this.allTraditionalCardsFlat, predicate); // Find card with maximal set index result = Aggregates.itemWithMax(namedCards, CardPrinted.FN_GET_EDITION_INDEX); if (null == result) { diff --git a/src/main/java/forge/item/CardPrinted.java b/src/main/java/forge/item/CardPrinted.java index 437fc39efe4..e311224c983 100644 --- a/src/main/java/forge/item/CardPrinted.java +++ b/src/main/java/forge/item/CardPrinted.java @@ -110,6 +110,10 @@ public final class CardPrinted implements Comparable, InventoryItem public boolean isFoil() { return this.foiled; } + + public boolean isTraditional() { + return !(getType().contains("Vanguard") || getType().contains("Scheme") || getType().contains("Plane")); + } /** * Gets the card. diff --git a/src/main/java/forge/item/OpenablePack.java b/src/main/java/forge/item/OpenablePack.java index 079045d70d9..c4789a25bc1 100644 --- a/src/main/java/forge/item/OpenablePack.java +++ b/src/main/java/forge/item/OpenablePack.java @@ -175,7 +175,7 @@ public abstract class OpenablePack implements InventoryItemFromSet { Predicate cardsRule = Predicates.and( CardPrinted.Predicates.printedInSets(setCode), Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, CardPrinted.FN_GET_RULES)); - return Aggregates.random(Iterables.filter(CardDb.instance().getTraditionalCards(), cardsRule), count); + return Aggregates.random(Iterables.filter(CardDb.instance().getAllTraditionalCards(), cardsRule), count); } } diff --git a/src/main/java/forge/quest/BoosterUtils.java b/src/main/java/forge/quest/BoosterUtils.java index 355a36a868b..01877c5f5db 100644 --- a/src/main/java/forge/quest/BoosterUtils.java +++ b/src/main/java/forge/quest/BoosterUtils.java @@ -88,7 +88,7 @@ public final class BoosterUtils { } // This will save CPU time when sets are limited - final List cardpool = Lists.newArrayList(Iterables.filter(CardDb.instance().getTraditionalCards(), filter)); + final List cardpool = Lists.newArrayList(Iterables.filter(CardDb.instance().getAllTraditionalCards(), filter)); final Predicate pCommon = CardPrinted.Predicates.Presets.IS_COMMON; cards.addAll(BoosterUtils.generateDefinetlyColouredCards(cardpool, pCommon, numCommon, colorFilters)); @@ -180,7 +180,7 @@ public final class BoosterUtils { * @return the list */ public static List generateDistinctCards(final Predicate filter, final int cntNeeded) { - return BoosterUtils.generateDistinctCards(CardDb.instance().getTraditionalCards(), filter, cntNeeded); + return BoosterUtils.generateDistinctCards(CardDb.instance().getAllTraditionalCards(), filter, cntNeeded); } /** diff --git a/src/main/java/forge/quest/QuestUtilCards.java b/src/main/java/forge/quest/QuestUtilCards.java index 29f9e9a4fdd..22c8282f0ef 100644 --- a/src/main/java/forge/quest/QuestUtilCards.java +++ b/src/main/java/forge/quest/QuestUtilCards.java @@ -189,7 +189,7 @@ public final class QuestUtilCards { final Predicate myFilter = applyFormatFilter(QuestUtilCards.RARE_PREDICATE); - final CardPrinted card = Aggregates.random(Iterables.filter(CardDb.instance().getTraditionalCards(), myFilter)); + final CardPrinted card = Aggregates.random(Iterables.filter(CardDb.instance().getAllTraditionalCards(), myFilter)); this.addSingleCard(card); return card; } @@ -204,7 +204,7 @@ public final class QuestUtilCards { public List addRandomRare(final int n) { final Predicate myFilter = applyFormatFilter(QuestUtilCards.RARE_PREDICATE); - final List newCards = Aggregates.random(Iterables.filter(CardDb.instance().getTraditionalCards(), myFilter), n); + final List newCards = Aggregates.random(Iterables.filter(CardDb.instance().getAllTraditionalCards(), myFilter), n); this.addAllCards(newCards); return newCards; } @@ -486,9 +486,9 @@ public final class QuestUtilCards { Iterable cardList = null; if (qc.getFormat() == null) { - cardList = CardDb.instance().getTraditionalCards(); } + cardList = CardDb.instance().getAllTraditionalCards(); } else { - cardList = Iterables.filter(CardDb.instance().getTraditionalCards(), qc.getFormat().getFilterPrinted()); + cardList = Iterables.filter(CardDb.instance().getAllTraditionalCards(), qc.getFormat().getFilterPrinted()); } final BoosterGenerator pack = new BoosterGenerator(cardList);