Merge branch 'chaos-draft' into 'master'

Chaos draft

See merge request core-developers/forge!999
This commit is contained in:
Michael Kamensky
2018-10-13 05:04:50 +00:00
3 changed files with 68 additions and 1 deletions

View File

@@ -0,0 +1,26 @@
package forge.item.generation;
import forge.card.CardEdition;
import forge.item.BoosterPack;
import forge.item.PaperCard;
import java.util.List;
public class ChaosBoosterSupplier implements IUnOpenedProduct {
private List<CardEdition> sets;
public ChaosBoosterSupplier(List<CardEdition> sets) {
this.sets = sets;
}
@Override
public List<PaperCard> get() {
if (sets.size() == 0) {
System.out.println("No chaos boosters left to supply.");
return null;
}
final CardEdition set = sets.remove(0);
final BoosterPack pack = new BoosterPack(set.getCode(), set.getBoosterTemplate());
return pack.getCards();
}
}

View File

@@ -17,12 +17,17 @@
*/
package forge.limited;
import com.google.common.base.Predicate;
import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.StaticData;
import forge.card.CardEdition;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.item.PaperCard;
import forge.item.SealedProduct;
import forge.item.generation.ChaosBoosterSupplier;
import forge.item.generation.IUnOpenedProduct;
import forge.item.generation.UnOpenedProduct;
import forge.model.CardBlock;
@@ -35,6 +40,7 @@ import forge.util.TextUtil;
import forge.util.gui.SGuiChoose;
import forge.util.gui.SOptionPane;
import forge.util.storage.IStorage;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.ArrayUtils;
import java.io.File;
@@ -168,6 +174,40 @@ public class BoosterDraft implements IBoosterDraft {
}
break;
case Chaos:
final CardEdition.Collection allEditions = StaticData.instance().getEditions();
final Iterable<CardEdition> chaosDraftEditions = Iterables.filter(allEditions.getOrderedEditions(), new Predicate<CardEdition>() {
@Override
public boolean apply(final CardEdition cardEdition) {
boolean isExpansion = cardEdition.getType().equals(CardEdition.Type.EXPANSION);
boolean isCoreSet = cardEdition.getType().equals(CardEdition.Type.CORE);
boolean isReprintSet = cardEdition.getType().equals(CardEdition.Type.REPRINT);
if (isExpansion || isCoreSet || isReprintSet) {
// Only allow sets with 15 cards in booster packs
if (cardEdition.hasBoosterTemplate()) {
final List<Pair<String, Integer>> slots = cardEdition.getBoosterTemplate().getSlots();
int boosterSize = 0;
for (Pair<String, Integer> slot : slots) {
boosterSize += slot.getRight();
}
return boosterSize == 15;
}
}
return false;
}
});
// Randomize order of sets
List<CardEdition> shuffled = Lists.newArrayList(chaosDraftEditions);
Collections.shuffle(shuffled);
final Supplier<List<PaperCard>> ChaosDraftSupplier = new ChaosBoosterSupplier(shuffled);
for (int i = 0; i < 3; i++) {
this.product.add(ChaosDraftSupplier);
}
break;
default:
throw new NoSuchElementException("Draft for mode " + this.draftFormat + " has not been set up!");
}

View File

@@ -4,7 +4,8 @@ public enum LimitedPoolType {
Full("Full Cardpool"),
Block("Block / Set"),
FantasyBlock("Fantasy Block"),
Custom("Custom Cube");
Custom("Custom Cube"),
Chaos("Chaos Draft");
private final String displayName;
private LimitedPoolType(String name) {