Added some random BoosterPacks to shop

This commit is contained in:
Maxmtg
2011-09-14 22:44:09 +00:00
parent e8e8856533
commit c353e9568f
5 changed files with 43 additions and 1 deletions

View File

@@ -1,6 +1,8 @@
package forge.card;
import forge.game.GameFormat;
import net.slightlymagic.braids.util.lambda.Lambda1;
import net.slightlymagic.maxmtg.Predicate;
/**
* <p>CardSet class.</p>
@@ -97,4 +99,22 @@ public final class CardSet implements Comparable<CardSet> { // immutable
public int getLand() { return nLand; }
public int getFoilChance() { return foilRate; }
}
public static abstract class Predicates {
public final static Predicate<CardSet> canMakeBooster = new CanMakeBooster();
public final static Predicate<CardSet> isLegalInFormat(GameFormat format) { return new LegalInFormat(format); }
private static class CanMakeBooster extends Predicate<CardSet> {
public boolean isTrue(CardSet subject) {
return subject.canGenerateBooster();
}
}
private static class LegalInFormat extends Predicate<CardSet> {
private final GameFormat format;
public LegalInFormat(final GameFormat fmt) { format = fmt; }
public boolean isTrue(CardSet subject) {
return format.isSetLegal(subject.getCode());
}
}
}
}

View File

@@ -54,6 +54,8 @@ public final class GameFormat {
public Predicate<CardPrinted> getFilterRules() { return filterRules; }
public Predicate<CardPrinted> getFilterPrinted() { return filterPrinted; }
public boolean isSetLegal(String setCode) { return allowedSetCodes.isEmpty() || allowedSetCodes.contains(setCode); }
@Override
public String toString()
{

View File

@@ -2,6 +2,8 @@ package forge.item;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.SetUtils;
import forge.card.BoosterGenerator;
import forge.card.CardSet;
@@ -12,6 +14,9 @@ import forge.card.CardSet;
*/
public class BoosterPack implements InventoryItemFromSet {
public final static Lambda1<BoosterPack, CardSet> fnFromSet = new Lambda1<BoosterPack, CardSet>() {
@Override public BoosterPack apply(CardSet arg1) { return new BoosterPack(arg1); } };
private final CardSet cardSet;
private final String name;

View File

@@ -7,9 +7,11 @@ import java.util.Map.Entry;
import net.slightlymagic.braids.util.lambda.Lambda1;
import net.slightlymagic.maxmtg.Predicate;
import forge.SetUtils;
import forge.card.BoosterGenerator;
import forge.card.CardRarity;
import forge.card.BoosterUtils;
import forge.card.CardSet;
import forge.deck.Deck;
import forge.item.BoosterPack;
import forge.item.CardDb;
@@ -163,7 +165,11 @@ public final class QuestUtilCards {
addBasicLands(q.shopList, 10, 5);
q.shopList.add(new BoosterPack("M10"));
Predicate<CardSet> filterT2 = CardSet.Predicates.isLegalInFormat(SetUtils.getStandard());
q.shopList.addAllCards(filterT2.random(SetUtils.getAllSets(), 2, BoosterPack.fnFromSet));
Predicate<CardSet> filterExt = CardSet.Predicates.isLegalInFormat(SetUtils.getExtended());
Predicate<CardSet> filterExtButT2 = Predicate.and(filterExt, Predicate.not(filterT2));
q.shopList.addAllCards(filterExtButT2.random(SetUtils.getAllSets(), 3, BoosterPack.fnFromSet));
}
public ItemPool<InventoryItem> getCardpool() {

View File

@@ -193,6 +193,15 @@ public abstract class Predicate<T> {
}
return result;
}
public final <V> List<V> random(final Iterable<T> source, final int count, final Lambda1<V, T> transformer) {
List<V> result = new ArrayList<V>();
for (int i = 0; i < count; ++i) {
T toAdd = random(source);
if (toAdd == null) { break; }
result.add(transformer.apply(toAdd));
}
return result;
}
// Static builder methods - they choose concrete implementation by themselves
public static <U, T> Predicate<U> brigde(final Predicate<T> predicate, final Lambda1<T, U> fnBridge) {