fix for issue 672. This addresses the case where the random deck generator was creating decks with hidden cards.
parent
2f453bfb1d
commit
aaea93bfdb
|
@ -49,7 +49,11 @@ public class CardDefinitions {
|
|||
// Contains reference to all playable MagicCardDefinitions indexed by card name.
|
||||
private static final Map<String, MagicCardDefinition> allPlayableCardDefs = new HashMap<>();
|
||||
|
||||
private static final List<MagicCardDefinition> playableCards = new ArrayList<>();
|
||||
// Only contains reference to the main MagicCardDefinition aspect of a card. This is
|
||||
// required for functions like the Deck Editor where you should not be able to select
|
||||
// the reverse side of a double-side card, for example.
|
||||
private static final List<MagicCardDefinition> defaultPlayableCardDefs = new ArrayList<>();
|
||||
|
||||
private static Map<String, MagicCardDefinition> missingCards = null;
|
||||
private static final List<MagicCardDefinition> landCards = new ArrayList<>();
|
||||
private static final List<MagicCardDefinition> spellCards = new ArrayList<>();
|
||||
|
@ -85,7 +89,7 @@ public class CardDefinitions {
|
|||
}
|
||||
|
||||
private static void filterCards() {
|
||||
for (final MagicCardDefinition card : playableCards) {
|
||||
for (final MagicCardDefinition card : getDefaultPlayableCardDefs()) {
|
||||
if (!card.isLand() && !card.isToken()) {
|
||||
spellCards.add(card);
|
||||
} else if (!card.isBasic() && !card.isToken()) {
|
||||
|
@ -98,11 +102,14 @@ public class CardDefinitions {
|
|||
assert cardDefinition != null : "CardDefinitions.addDefinition passed null";
|
||||
assert cardDefinition.getIndex() == -1 : "cardDefinition has been assigned index";
|
||||
|
||||
cardDefinition.setIndex(playableCards.size());
|
||||
playableCards.add(cardDefinition);
|
||||
final String key = getASCII(cardDefinition.getFullName());
|
||||
allPlayableCardDefs.put(key,cardDefinition);
|
||||
allPlayableCardDefs.put(key, cardDefinition);
|
||||
|
||||
if (!cardDefinition.isHidden()) {
|
||||
cardDefinition.setIndex(defaultPlayableCardDefs.size());
|
||||
defaultPlayableCardDefs.add(cardDefinition);
|
||||
}
|
||||
|
||||
//add to tokens or all (vintage) cube
|
||||
if (cardDefinition.isToken()) {
|
||||
TokenCardDefinitions.add(cardDefinition);
|
||||
|
@ -216,7 +223,7 @@ public class CardDefinitions {
|
|||
|
||||
public static void loadCardAbilities() {
|
||||
final ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
||||
for (final MagicCardDefinition cdef : getPlayableCards()) {
|
||||
for (final MagicCardDefinition cdef : getDefaultPlayableCardDefs()) {
|
||||
//skip hidden cards as their abilities will be loaded from their normal card definition
|
||||
if (cdef.isHidden()) {
|
||||
continue;
|
||||
|
@ -266,8 +273,25 @@ public class CardDefinitions {
|
|||
throw new RuntimeException("No matching basic land for MagicColor " + color);
|
||||
}
|
||||
|
||||
public static List<MagicCardDefinition> getPlayableCards() {
|
||||
return playableCards;
|
||||
/**
|
||||
* Returns a list of all playable MagicCardDefinitions EXCEPT those classed as hidden.
|
||||
*/
|
||||
public static List<MagicCardDefinition> getDefaultPlayableCardDefs() {
|
||||
return defaultPlayableCardDefs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list all playable MagicCardDefinitions INCLUDING those classed as hidden.
|
||||
*/
|
||||
public static Collection<MagicCardDefinition> getAllPlayableCardDefs() {
|
||||
return allPlayableCardDefs.values();
|
||||
}
|
||||
|
||||
public static synchronized List<MagicCardDefinition> getAllCards() {
|
||||
final List<MagicCardDefinition> combined = new ArrayList<>();
|
||||
combined.addAll(getAllPlayableCardDefs());
|
||||
combined.addAll(getMissingCards());
|
||||
return combined;
|
||||
}
|
||||
|
||||
public static List<MagicCardDefinition> getLandCards() {
|
||||
|
@ -280,18 +304,11 @@ public class CardDefinitions {
|
|||
|
||||
private static void printStatistics() {
|
||||
if (MagicUtility.showStartupStats()) {
|
||||
final CardStatistics statistics=new CardStatistics(playableCards);
|
||||
final CardStatistics statistics=new CardStatistics(defaultPlayableCardDefs);
|
||||
statistics.printStatictics(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized List<MagicCardDefinition> getAllCards() {
|
||||
final List<MagicCardDefinition> combined = new ArrayList<>();
|
||||
combined.addAll(playableCards);
|
||||
combined.addAll(getMissingCards());
|
||||
return combined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of card names which have yet to be implemented.
|
||||
* <p>
|
||||
|
@ -379,7 +396,7 @@ public class CardDefinitions {
|
|||
}
|
||||
|
||||
public static boolean isMissingImages() {
|
||||
for (final MagicCardDefinition card : getPlayableCards()) {
|
||||
for (final MagicCardDefinition card : getDefaultPlayableCardDefs()) {
|
||||
if (card.getImageURL() != null) {
|
||||
if (!MagicFileSystem.getCardImageFile(card).exists()) {
|
||||
return true;
|
||||
|
@ -433,7 +450,7 @@ public class CardDefinitions {
|
|||
|
||||
private static List<String> getPlayableNonTokenCardNames() {
|
||||
final ArrayList<String> cardNames = new ArrayList<>();
|
||||
for (MagicCardDefinition card : playableCards) {
|
||||
for (MagicCardDefinition card : getAllPlayableCardDefs()) {
|
||||
if (!card.isToken()) {
|
||||
cardNames.add(card.getName());
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public class Ability_Mono_DeckGenerator extends RandomDeckGenerator {
|
|||
countColors.put(MagicColor.Blue, 0);
|
||||
|
||||
// count colors
|
||||
for (final MagicCardDefinition card : CardDefinitions.getPlayableCards()) {
|
||||
for (final MagicCardDefinition card : CardDefinitions.getDefaultPlayableCardDefs()) {
|
||||
if (card.hasAbility(ab)) {
|
||||
final int colorFlags = card.getColorFlags();
|
||||
for (final MagicColor c : countColors.keySet()) {
|
||||
|
|
|
@ -57,7 +57,7 @@ public class Tribal_Mono_DeckGenerator extends RandomDeckGenerator {
|
|||
countColors.put(MagicColor.Blue, new Integer(0));
|
||||
|
||||
// count colors
|
||||
for (final MagicCardDefinition card : CardDefinitions.getPlayableCards()) {
|
||||
for (final MagicCardDefinition card : CardDefinitions.getDefaultPlayableCardDefs()) {
|
||||
if (card.hasSubType(s)) {
|
||||
final int colorFlags = card.getColorFlags();
|
||||
|
||||
|
|
|
@ -427,17 +427,18 @@ public class ExplorerFilterPanel extends TexturedPanel implements ActionListener
|
|||
public boolean checkCard(MagicCardDefinition card, int i);
|
||||
}
|
||||
|
||||
public List<MagicCardDefinition> getCardDefinitions(final boolean includeInvalidCards) {
|
||||
public List<MagicCardDefinition> getCardDefinitions(final boolean isDeckEditor) {
|
||||
|
||||
final List<MagicCardDefinition> cardDefinitions = new ArrayList<>();
|
||||
|
||||
final List<MagicCardDefinition> cards =
|
||||
includeInvalidCards ? CardDefinitions.getAllCards() : CardDefinitions.getPlayableCards();
|
||||
final List<MagicCardDefinition> cards = isDeckEditor ?
|
||||
CardDefinitions.getDefaultPlayableCardDefs() :
|
||||
CardDefinitions.getAllCards();
|
||||
|
||||
missingCards = 0;
|
||||
playableCards = 0;
|
||||
for (final MagicCardDefinition cardDefinition : cards) {
|
||||
if (!cardDefinition.isHidden() || includeInvalidCards) {
|
||||
if (!cardDefinition.isHidden() || !isDeckEditor) {
|
||||
if (filter(cardDefinition)) {
|
||||
cardDefinitions.add(cardDefinition);
|
||||
if (cardDefinition.isMissing()) {
|
||||
|
|
|
@ -120,7 +120,7 @@ public class ExplorerPanel extends JPanel implements ICardSelectionListener {
|
|||
private Container getMainContentContainer() {
|
||||
|
||||
// card pool
|
||||
cardPoolDefs = filterPanel.getCardDefinitions(!isDeckEditor);
|
||||
cardPoolDefs = filterPanel.getCardDefinitions(isDeckEditor);
|
||||
|
||||
cardPoolTable = new CardTable(cardPoolDefs, generatePoolTitle(), false);
|
||||
cardPoolTable.addMouseListener(new CardPoolMouseListener());
|
||||
|
@ -202,7 +202,7 @@ public class ExplorerPanel extends JPanel implements ICardSelectionListener {
|
|||
}
|
||||
|
||||
public void updateCardPool() {
|
||||
cardPoolDefs = filterPanel.getCardDefinitions(!isDeckEditor);
|
||||
cardPoolDefs = filterPanel.getCardDefinitions(isDeckEditor);
|
||||
cardPoolTable.setCards(cardPoolDefs);
|
||||
cardPoolTable.setTitle(generatePoolTitle());
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ public class PlayableDownloadPanel extends MissingImagesDownloadPanel {
|
|||
protected Collection<MagicCardDefinition> getCards() {
|
||||
assert !SwingUtilities.isEventDispatchThread();
|
||||
final List<MagicCardDefinition> cards = new ArrayList<>();
|
||||
for (final MagicCardDefinition card : CardDefinitions.getPlayableCards()) {
|
||||
for (final MagicCardDefinition card : CardDefinitions.getAllPlayableCardDefs()) {
|
||||
if (card.getImageURL() != null) {
|
||||
if (!MagicFileSystem.getCardImageFile(card).exists()) {
|
||||
cards.add(card);
|
||||
|
|
|
@ -45,7 +45,7 @@ public final class MagicDownload {
|
|||
|
||||
public static List<MagicCardDefinition> getLowQualityImageCards() {
|
||||
final List<MagicCardDefinition> cards = new ArrayList<>();
|
||||
for (final MagicCardDefinition cardDefinition : CardDefinitions.getPlayableCards()) {
|
||||
for (final MagicCardDefinition cardDefinition : CardDefinitions.getDefaultPlayableCardDefs()) {
|
||||
if (cardDefinition.getImageURL() != null) {
|
||||
final File imageFile = MagicFileSystem.getCardImageFile(cardDefinition);
|
||||
if (imageFile.exists() && isLowQualityImage(imageFile)) {
|
||||
|
|
Loading…
Reference in New Issue