mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Added some random BoosterPacks to shop
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user