[Mobile] preload ItemPool and fix Planar Conquest new game

This commit is contained in:
Anthony Calosa
2021-04-01 02:34:14 +08:00
parent d9571f3c4d
commit c0af1fa1eb
4 changed files with 36 additions and 7 deletions

View File

@@ -282,7 +282,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
private void reIndex() {
uniqueCardsByName.clear();
for (Entry<String, Collection<PaperCard>> 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);
}
}

View File

@@ -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<FDeckEditor> {
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<PaperCard> questPool = new ItemPool<>(PaperCard.class);
@@ -1156,10 +1155,10 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
// 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;
}

View File

@@ -187,7 +187,7 @@ public class ConquestUtil {
public static Iterable<PaperCard> getStartingPlaneswalkerOptions(final PaperCard startingCommander) {
final byte colorIdentity = startingCommander.getRules().getColorIdentity().getColor();
final List<String> selected = Lists.newArrayList();
return Iterables.filter(FModel.getMagicDb().getCommonCards(), new Predicate<PaperCard>() {
return Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCards(), new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard card) {
if (FModel.getMagicDb().getEditions().get(card.getEdition()).getType() == CardEdition.Type.PROMOS

View File

@@ -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<ConquestPlane> planes;
private static IStorage<QuestWorld> worlds;
private static GameFormat.Collection formats;
private static ItemPool<PaperCard> uniqueCardsNoAlt, allCardsNoAlt, planechaseCards, archenemyCards;
public static void initialize(final IProgressBar progressBar, Function<ForgePreferences, Void> 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<PaperCard> getUniqueCardsNoAlt() {
return uniqueCardsNoAlt;
}
public static ItemPool<PaperCard> getAllCardsNoAlt() {
return allCardsNoAlt;
}
public static ItemPool<PaperCard> getArchenemyCards() {
return archenemyCards;
}
public static ItemPool<PaperCard> getPlanechaseCards() {
return planechaseCards;
}
private static boolean keywordsLoaded = false;
/**