Missing cards calculation is attached on top of CardDb.ctor

This commit is contained in:
Maxmtg
2013-06-05 21:19:58 +00:00
parent c108d462c2
commit cc799addb3

View File

@@ -35,8 +35,10 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.Card; import forge.Card;
import forge.card.CardEdition.Type;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.Lang;
import forge.util.MyRandom; import forge.util.MyRandom;
import forge.util.maps.CollectionSuppliers; import forge.util.maps.CollectionSuppliers;
import forge.util.maps.MapOfLists; import forge.util.maps.MapOfLists;
@@ -69,8 +71,8 @@ public final class CardDb implements ICardDatabase {
synchronized (CardDb.class) { synchronized (CardDb.class) {
if (CardDb.commonCards == null) { // It's broken under 1.4 and below, on 1.5+ works again! if (CardDb.commonCards == null) { // It's broken under 1.4 and below, on 1.5+ works again!
CardSorter cs = new CardSorter(rules); CardSorter cs = new CardSorter(rules);
commonCards = new CardDb(cs.regularCards, editions); commonCards = new CardDb(cs.regularCards, editions, false /*true*/);
variantCards = new CardDb(cs.variantsCards, editions); variantCards = new CardDb(cs.variantsCards, editions, false);
} }
} }
} }
@@ -93,9 +95,13 @@ public final class CardDb implements ICardDatabase {
} }
}; };
private CardDb(Map<String, CardRules> rules, Iterable<CardEdition> editions) { private CardDb(Map<String, CardRules> rules, Iterable<CardEdition> editions, boolean logMissingCards) {
this.rulesByName = rules; this.rulesByName = rules;
List<String> missingCards = new ArrayList<String>();
for(CardEdition e : editions) { for(CardEdition e : editions) {
boolean worthLogging = logMissingCards && ( e.getType() == Type.CORE || e.getType() == Type.EXPANSION );
if(worthLogging)
System.out.print(e.getName() + " (" + e.getCards().length + " cards)");
String lastCardName = null; String lastCardName = null;
int artIdx = 0; int artIdx = 0;
for(CardEdition.CardInSet cis : e.getCards()) { for(CardEdition.CardInSet cis : e.getCards()) {
@@ -108,7 +114,17 @@ public final class CardDb implements ICardDatabase {
CardRules cr = rulesByName.get(lastCardName); CardRules cr = rulesByName.get(lastCardName);
if( cr != null ) if( cr != null )
addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx)); addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx));
// else card is not scripted yet else if (worthLogging)
missingCards.add(cis.name);
}
if(worthLogging) {
if(missingCards.isEmpty())
System.out.println(" ... 100% ");
else {
int missing = (e.getCards().length - missingCards.size()) * 10000 / e.getCards().length;
System.out.printf(" ... %.2f%% (%s missing: %s)%n", missing * 0.01f, Lang.nounWithAmount(missingCards.size(), "card"), StringUtils.join(missingCards, " | ") );
}
missingCards.clear();
} }
} }