*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.
This commit is contained in:
Hellfish
2012-11-25 11:35:19 +00:00
parent 25f0b6901f
commit 034576ef76
14 changed files with 52 additions and 30 deletions

View File

@@ -122,7 +122,7 @@ public class BoosterGenerator {
public BoosterGenerator(Predicate<CardPrinted> filter) { public BoosterGenerator(Predicate<CardPrinted> filter) {
this(); this();
for (final CardPrinted c : Iterables.filter(CardDb.instance().getTraditionalCards(), filter)) { for (final CardPrinted c : Iterables.filter(CardDb.instance().getAllTraditionalCards(), filter)) {
this.addToRarity(c); this.addToRarity(c);
// System.out.println(c); // System.out.println(c);
} }

View File

@@ -226,7 +226,7 @@ public class MetaSet {
// NOTE: The following code is far from ideal in a number of ways. If someone can // 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 // think of a way to improve it, please do so. --BBU
// ItemPool<CardPrinted> cardPool = new ItemPool<CardPrinted>(CardPrinted.class); // ItemPool<CardPrinted> cardPool = new ItemPool<CardPrinted>(CardPrinted.class);
for (CardPrinted aCard : CardDb.instance().getTraditionalCards()) { for (CardPrinted aCard : CardDb.instance().getAllTraditionalCards()) {
if (data.indexOf(aCard.getEdition()) > -1) { if (data.indexOf(aCard.getEdition()) > -1) {
cardPool.add(aCard); cardPool.add(aCard);
// System.out.println("Added card" + aCard.getName()); // System.out.println("Added card" + aCard.getName());
@@ -293,7 +293,7 @@ public class MetaSet {
if (mSet.type.equalsIgnoreCase("meta") || mSet.type.equalsIgnoreCase("booster") if (mSet.type.equalsIgnoreCase("meta") || mSet.type.equalsIgnoreCase("booster")
|| mSet.type.equalsIgnoreCase("pack")) { || mSet.type.equalsIgnoreCase("pack")) {
final String mData = new String(mSet.data); 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 (mData.indexOf(aCard.getEdition()) > -1) {
if (!cardPool.contains(aCard)) { if (!cardPool.contains(aCard)) {
cardPool.add(aCard); cardPool.add(aCard);

View File

@@ -34,6 +34,7 @@ public class CardCollections {
private final IStorage<DeckGroup> draft; private final IStorage<DeckGroup> draft;
private final IStorage<DeckGroup> sealed; private final IStorage<DeckGroup> sealed;
private final IStorage<Deck> cube; private final IStorage<Deck> cube;
private final IStorage<Deck> scheme;
/** /**
* TODO: Write javadoc for Constructor. * TODO: Write javadoc for Constructor.
@@ -45,8 +46,9 @@ public class CardCollections {
this.draft = new StorageImmediatelySerialized<DeckGroup>(new DeckGroupSerializer(new File(file, "draft"))); this.draft = new StorageImmediatelySerialized<DeckGroup>(new DeckGroupSerializer(new File(file, "draft")));
this.sealed = new StorageImmediatelySerialized<DeckGroup>(new DeckGroupSerializer(new File(file, "sealed"))); this.sealed = new StorageImmediatelySerialized<DeckGroup>(new DeckGroupSerializer(new File(file, "sealed")));
this.cube = new StorageImmediatelySerialized<Deck>(new DeckSerializer(new File(file, "cube"))); this.cube = new StorageImmediatelySerialized<Deck>(new DeckSerializer(new File(file, "cube")));
this.scheme = new StorageImmediatelySerialized<Deck>(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 // 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); final OldDeckParser oldParser = new OldDeckParser(file, this.constructed, this.draft, this.sealed, this.cube);
@@ -89,4 +91,12 @@ public class CardCollections {
return this.sealed; return this.sealed;
} }
/**
* TODO: Write javadoc for this method.
* @return
*/
public IStorage<Deck> getScheme() {
return this.scheme;
}
} }

View File

@@ -220,7 +220,7 @@ public abstract class GenerateColoredDeckBase {
if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)) { if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)) {
hasColor = Predicates.or(hasColor, GenerateDeckUtil.COLORLESS_CARDS); 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<String, Integer> countLands(ItemPool<CardPrinted> outList) { protected static Map<String, Integer> countLands(ItemPool<CardPrinted> outList) {

View File

@@ -491,7 +491,7 @@ public final class GuiMigrateLocalMWSSetPicturesHQ extends DefaultBoundedRangeMo
final String urlBase = "C:\\MTGForge\\HQPICS\\"; final String urlBase = "C:\\MTGForge\\HQPICS\\";
String imgFN = ""; String imgFN = "";
for (final CardPrinted cp : CardDb.instance().getAllCards()) for (final CardPrinted cp : CardDb.instance().getAllTraditionalCards())
{ {
// String url = c.getSVar("Picture"); // String url = c.getSVar("Picture");
// String[] URLs = url.split("\\\\"); // String[] URLs = url.split("\\\\");

View File

@@ -121,7 +121,7 @@ public final class CEditorConstructed extends ACEditorBase<CardPrinted, Deck> {
@Override @Override
public void resetTables() { public void resetTables() {
// Constructed mode can use all cards, no limitations. // 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()); this.getTableDeck().setDeck(this.controller.getModel().getMain());
} }

View File

@@ -22,6 +22,8 @@ import java.util.ArrayList;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables;
import forge.CardUtil; import forge.CardUtil;
import forge.Singletons; import forge.Singletons;
import forge.card.CardEdition; import forge.card.CardEdition;
@@ -90,7 +92,9 @@ public class GuiDownloadSetPicturesLQ extends GuiDownloader {
// read token names and urls // read token names and urls
final ArrayList<DownloadObject> cList = new ArrayList<DownloadObject>(); final ArrayList<DownloadObject> cList = new ArrayList<DownloadObject>();
for (final CardPrinted c : CardDb.instance().getAllCards()) { Iterable<CardPrinted> allPrinted = Iterables.concat(CardDb.instance().getAllTraditionalCards(),CardDb.instance().getAllNonTraditionalCards());
for (final CardPrinted c : allPrinted) {
final String setCode3 = c.getEdition(); final String setCode3 = c.getEdition();
if (StringUtils.isBlank(setCode3) || "???".equals(setCode3)) { if (StringUtils.isBlank(setCode3) || "???".equals(setCode3)) {
continue; // we don't want cards from unknown sets continue; // we don't want cards from unknown sets

View File

@@ -151,6 +151,10 @@ public enum CSubmenuVanguard implements ICDoc {
avatar = Iterables.get(view.getAllAiAvatars(),rnd.nextInt(Iterables.size(view.getAllAiAvatars()))); avatar = Iterables.get(view.getAllAiAvatars(),rnd.nextInt(Iterables.size(view.getAllAiAvatars())));
} }
} }
else
{
avatar = (CardPrinted)playerAvatars.get(i);
}
helper.addVanguardPlayer(player, playerDecks.get(i), avatar); helper.addVanguardPlayer(player, playerDecks.get(i), avatar);
} }

View File

@@ -75,8 +75,7 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts"); private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts");
private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures"); private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures");
private final Predicate<CardPrinted> avatarTypePred = CardPrinted.Predicates.type("Vanguard"); private final Iterable<CardPrinted> allAvatars = Iterables.filter(CardDb.instance().getAllNonTraditionalCards(), CardPrinted.Predicates.type("Vanguard"));
private final Iterable<CardPrinted> allAvatars = Iterables.filter(CardDb.instance().getAllCards(), avatarTypePred);
private final List<CardPrinted> allAiAvatars = new ArrayList<CardPrinted>(); private final List<CardPrinted> allAiAvatars = new ArrayList<CardPrinted>();
////////////////////////////// //////////////////////////////
@@ -333,7 +332,7 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
public int getNumPlayers() public int getNumPlayers()
{ {
return currentNumTabsShown-1; return currentNumTabsShown;
} }
/** /**

View File

@@ -93,7 +93,9 @@ public final class CardDb {
// need this to obtain cardReference by name+set+artindex // need this to obtain cardReference by name+set+artindex
private final Map<String, Map<String, CardPrinted[]>> allCardsBySet = new Hashtable<String, Map<String, CardPrinted[]>>(); private final Map<String, Map<String, CardPrinted[]>> allCardsBySet = new Hashtable<String, Map<String, CardPrinted[]>>();
// this is the same list in flat storage // this is the same list in flat storage
private final List<CardPrinted> allCardsFlat = new ArrayList<CardPrinted>(); private final List<CardPrinted> allTraditionalCardsFlat = new ArrayList<CardPrinted>();
private final List<CardPrinted> allNonTraditionalCardsFlat = new ArrayList<CardPrinted>();
// Lambda to get rules for selects from list of printed cards // Lambda to get rules for selects from list of printed cards
/** The Constant fnGetCardPrintedByForgeCard. */ /** The Constant fnGetCardPrintedByForgeCard. */
@@ -167,7 +169,11 @@ public final class CardDb {
setMap.put(cardName, cardCopies); setMap.put(cardName, cardCopies);
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
lastAdded = CardPrinted.build(card, set, s.getValue().getRarity(), 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; cardCopies[i] = lastAdded;
} }
@@ -360,17 +366,12 @@ public final class CardDb {
* *
* @return the all cards * @return the all cards
*/ */
public Iterable<CardPrinted> getAllCards() { public Iterable<CardPrinted> getAllTraditionalCards() {
return this.allCardsFlat; return this.allTraditionalCardsFlat;
} }
/** public Iterable<CardPrinted> getAllNonTraditionalCards() {
* Gets all "traditional" (non-scheme/vanguard/plane) cards return this.allNonTraditionalCardsFlat;
*
* @return the cards
*/
public Iterable<CardPrinted> getTraditionalCards() {
return Iterables.filter(getAllCards(), CardPrinted.Predicates.Presets.TRADITIONAL);
} }
/** /**
@@ -400,7 +401,7 @@ public final class CardDb {
} else { } else {
// OK, plain name here // OK, plain name here
final Predicate<CardPrinted> predicate = CardPrinted.Predicates.name(nameWithSet.left); final Predicate<CardPrinted> predicate = CardPrinted.Predicates.name(nameWithSet.left);
final Iterable<CardPrinted> namedCards = Iterables.filter(this.allCardsFlat, predicate); final Iterable<CardPrinted> namedCards = Iterables.filter(this.allTraditionalCardsFlat, predicate);
// Find card with maximal set index // Find card with maximal set index
result = Aggregates.itemWithMax(namedCards, CardPrinted.FN_GET_EDITION_INDEX); result = Aggregates.itemWithMax(namedCards, CardPrinted.FN_GET_EDITION_INDEX);
if (null == result) { if (null == result) {

View File

@@ -111,6 +111,10 @@ public final class CardPrinted implements Comparable<CardPrinted>, InventoryItem
return this.foiled; return this.foiled;
} }
public boolean isTraditional() {
return !(getType().contains("Vanguard") || getType().contains("Scheme") || getType().contains("Plane"));
}
/** /**
* Gets the card. * Gets the card.
* *

View File

@@ -175,7 +175,7 @@ public abstract class OpenablePack implements InventoryItemFromSet {
Predicate<CardPrinted> cardsRule = Predicates.and( Predicate<CardPrinted> cardsRule = Predicates.and(
CardPrinted.Predicates.printedInSets(setCode), CardPrinted.Predicates.printedInSets(setCode),
Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, CardPrinted.FN_GET_RULES)); 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);
} }
} }

View File

@@ -88,7 +88,7 @@ public final class BoosterUtils {
} }
// This will save CPU time when sets are limited // This will save CPU time when sets are limited
final List<CardPrinted> cardpool = Lists.newArrayList(Iterables.filter(CardDb.instance().getTraditionalCards(), filter)); final List<CardPrinted> cardpool = Lists.newArrayList(Iterables.filter(CardDb.instance().getAllTraditionalCards(), filter));
final Predicate<CardPrinted> pCommon = CardPrinted.Predicates.Presets.IS_COMMON; final Predicate<CardPrinted> pCommon = CardPrinted.Predicates.Presets.IS_COMMON;
cards.addAll(BoosterUtils.generateDefinetlyColouredCards(cardpool, pCommon, numCommon, colorFilters)); cards.addAll(BoosterUtils.generateDefinetlyColouredCards(cardpool, pCommon, numCommon, colorFilters));
@@ -180,7 +180,7 @@ public final class BoosterUtils {
* @return the list * @return the list
*/ */
public static List<CardPrinted> generateDistinctCards(final Predicate<CardPrinted> filter, final int cntNeeded) { public static List<CardPrinted> generateDistinctCards(final Predicate<CardPrinted> filter, final int cntNeeded) {
return BoosterUtils.generateDistinctCards(CardDb.instance().getTraditionalCards(), filter, cntNeeded); return BoosterUtils.generateDistinctCards(CardDb.instance().getAllTraditionalCards(), filter, cntNeeded);
} }
/** /**

View File

@@ -189,7 +189,7 @@ public final class QuestUtilCards {
final Predicate<CardPrinted> myFilter = applyFormatFilter(QuestUtilCards.RARE_PREDICATE); final Predicate<CardPrinted> 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); this.addSingleCard(card);
return card; return card;
} }
@@ -204,7 +204,7 @@ public final class QuestUtilCards {
public List<CardPrinted> addRandomRare(final int n) { public List<CardPrinted> addRandomRare(final int n) {
final Predicate<CardPrinted> myFilter = applyFormatFilter(QuestUtilCards.RARE_PREDICATE); final Predicate<CardPrinted> myFilter = applyFormatFilter(QuestUtilCards.RARE_PREDICATE);
final List<CardPrinted> newCards = Aggregates.random(Iterables.filter(CardDb.instance().getTraditionalCards(), myFilter), n); final List<CardPrinted> newCards = Aggregates.random(Iterables.filter(CardDb.instance().getAllTraditionalCards(), myFilter), n);
this.addAllCards(newCards); this.addAllCards(newCards);
return newCards; return newCards;
} }
@@ -486,9 +486,9 @@ public final class QuestUtilCards {
Iterable<CardPrinted> cardList = null; Iterable<CardPrinted> cardList = null;
if (qc.getFormat() == null) { if (qc.getFormat() == null) {
cardList = CardDb.instance().getTraditionalCards(); } cardList = CardDb.instance().getAllTraditionalCards(); }
else { 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); final BoosterGenerator pack = new BoosterGenerator(cardList);