From c0af1fa1eb26f5ffaa2eb76192b69ba46afc73c3 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 1 Apr 2021 02:34:14 +0800 Subject: [PATCH] [Mobile] preload ItemPool and fix Planar Conquest new game --- .../src/main/java/forge/card/CardDb.java | 5 +++- .../src/forge/deck/FDeckEditor.java | 9 +++---- .../planarconquest/ConquestUtil.java | 2 +- .../src/main/java/forge/model/FModel.java | 27 +++++++++++++++++++ 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 56c793719da..232f5720bb0 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -282,7 +282,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { private void reIndex() { uniqueCardsByName.clear(); for (Entry> kv : getAllCardsByName().asMap().entrySet()) { - uniqueCardsByName.put(kv.getKey(), getFirstWithImage(kv.getValue())); + PaperCard pc = getFirstWithImage(kv.getValue()); + if (!loadNonLegalCards && (editions.get(pc.getEdition()).getType() == CardEdition.Type.FUNNY || editions.get(pc.getEdition()).getBorderColor() == CardEdition.BorderColor.SILVER)) + continue; + uniqueCardsByName.put(kv.getKey(), pc); } } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index a63bc7a4d00..f90f4105dc8 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -29,7 +29,6 @@ import forge.assets.FSkinImage; import forge.assets.FTextureRegionImage; import forge.card.CardDb; import forge.card.CardEdition; -import forge.card.CardRulesPredicates; import forge.deck.io.DeckPreferences; import forge.gamemodes.limited.BoosterDraft; import forge.gamemodes.planarconquest.ConquestUtil; @@ -1085,10 +1084,10 @@ public class FDeckEditor extends TabPageScreen { final Localizer localizer = Localizer.getInstance(); switch (editorType) { case Archenemy: - cardManager.setPool(ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_SCHEME, PaperCard.FN_GET_RULES)), PaperCard.class), true); + cardManager.setPool(FModel.getArchenemyCards(), true); break; case Planechase: - cardManager.setPool(ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_PLANE_OR_PHENOMENON, PaperCard.FN_GET_RULES)), PaperCard.class), true); + cardManager.setPool(FModel.getPlanechaseCards(), true); break; case Quest: final ItemPool questPool = new ItemPool<>(PaperCard.class); @@ -1156,10 +1155,10 @@ public class FDeckEditor extends TabPageScreen { // fall through to below default: if (cardManager.getWantUnique()) { - cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), PaperCard.class), additionalFilter), true); + cardManager.setPool(editorType.applyCardFilter(FModel.getUniqueCardsNoAlt(), additionalFilter), true); } else { - cardManager.setPool(editorType.applyCardFilter(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class), additionalFilter), true); + cardManager.setPool(editorType.applyCardFilter(FModel.getAllCardsNoAlt(), additionalFilter), true); } break; } diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java index 1de751a2adc..262ae6a52b9 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java @@ -187,7 +187,7 @@ public class ConquestUtil { public static Iterable getStartingPlaneswalkerOptions(final PaperCard startingCommander) { final byte colorIdentity = startingCommander.getRules().getColorIdentity().getColor(); final List selected = Lists.newArrayList(); - return Iterables.filter(FModel.getMagicDb().getCommonCards(), new Predicate() { + return Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCards(), new Predicate() { @Override public boolean apply(PaperCard card) { if (FModel.getMagicDb().getEditions().get(card.getEdition()).getType() == CardEdition.Type.PROMOS diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index 6120f8a67be..c3a7e3e09d5 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.Set; import com.google.common.base.Function; +import com.google.common.base.Predicates; import com.google.common.collect.Maps; import forge.CardStorageReader; @@ -31,6 +32,7 @@ import forge.ImageKeys; import forge.MulliganDefs; import forge.StaticData; import forge.ai.AiProfileUtil; +import forge.card.CardRulesPredicates; import forge.card.CardType; import forge.deck.CardArchetypeLDAGenerator; import forge.deck.CardRelationMatrixGenerator; @@ -55,6 +57,7 @@ import forge.gui.FThreads; import forge.gui.GuiBase; import forge.gui.card.CardPreferences; import forge.gui.interfaces.IProgressBar; +import forge.item.PaperCard; import forge.itemmanager.ItemManagerConfig; import forge.localinstance.achievements.AchievementCollection; import forge.localinstance.achievements.ConstructedAchievements; @@ -69,6 +72,7 @@ import forge.localinstance.properties.ForgePreferences.FPref; import forge.player.GamePlayerUtil; import forge.util.CardTranslation; import forge.util.FileUtil; +import forge.util.ItemPool; import forge.util.Lang; import forge.util.Localizer; import forge.util.storage.IStorage; @@ -109,6 +113,7 @@ public final class FModel { private static IStorage planes; private static IStorage worlds; private static GameFormat.Collection formats; + private static ItemPool uniqueCardsNoAlt, allCardsNoAlt, planechaseCards, archenemyCards; public static void initialize(final IProgressBar progressBar, Function adjustPrefs) { //init version to log @@ -270,6 +275,12 @@ public final class FModel { deckGenMatrixLoaded=false; } } + + //preload Itempool + uniqueCardsNoAlt = ItemPool.createFrom(getMagicDb().getCommonCards().getUniqueCardsNoAlt(), PaperCard.class); + allCardsNoAlt = ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(), PaperCard.class); + archenemyCards = ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_SCHEME, PaperCard.FN_GET_RULES)), PaperCard.class); + planechaseCards = ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_PLANE_OR_PHENOMENON, PaperCard.FN_GET_RULES)), PaperCard.class); } private static boolean deckGenMatrixLoaded=false; @@ -286,6 +297,22 @@ public final class FModel { return conquest; } + public static ItemPool getUniqueCardsNoAlt() { + return uniqueCardsNoAlt; + } + + public static ItemPool getAllCardsNoAlt() { + return allCardsNoAlt; + } + + public static ItemPool getArchenemyCards() { + return archenemyCards; + } + + public static ItemPool getPlanechaseCards() { + return planechaseCards; + } + private static boolean keywordsLoaded = false; /**