mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Support generating deck for planar conquest commander
This commit is contained in:
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -193,11 +193,13 @@ forge-core/src/main/java/forge/deck/DeckFormat.java -text
|
||||
forge-core/src/main/java/forge/deck/DeckGroup.java -text
|
||||
forge-core/src/main/java/forge/deck/DeckRecognizer.java -text
|
||||
forge-core/src/main/java/forge/deck/DeckSection.java -text
|
||||
forge-core/src/main/java/forge/deck/generation/DeckGenPool.java -text
|
||||
forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java svneol=native#text/plain
|
||||
forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java svneol=native#text/plain
|
||||
forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java svneol=native#text/plain
|
||||
forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java -text
|
||||
forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java -text
|
||||
forge-core/src/main/java/forge/deck/generation/IDeckGenPool.java -text
|
||||
forge-core/src/main/java/forge/deck/generation/package-info.java svneol=native#text/plain
|
||||
forge-core/src/main/java/forge/deck/io/DeckFileHeader.java -text
|
||||
forge-core/src/main/java/forge/deck/io/DeckGroupSerializer.java -text
|
||||
@@ -17140,12 +17142,14 @@ forge-gui/src/main/java/forge/model/MetaSet.java -text
|
||||
forge-gui/src/main/java/forge/model/MultipleForgeJarsFoundError.java -text
|
||||
forge-gui/src/main/java/forge/model/UnOpenedMeta.java -text
|
||||
forge-gui/src/main/java/forge/model/package-info.java svneol=native#text/plain
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestController.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestData.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestDeckMap.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestPreferences.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java -text
|
||||
forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text
|
||||
forge-gui/src/main/java/forge/player/HumanCostDecision.java -text
|
||||
forge-gui/src/main/java/forge/player/HumanPlay.java -text
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.google.common.collect.Multimaps;
|
||||
|
||||
import forge.card.CardEdition.CardInSet;
|
||||
import forge.card.CardEdition.Type;
|
||||
import forge.deck.generation.IDeckGenPool;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.*;
|
||||
|
||||
@@ -34,7 +35,7 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public final class CardDb implements ICardDatabase {
|
||||
public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
public final static String foilSuffix = "+";
|
||||
public final static char NameSetSeparator = '|';
|
||||
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
package forge.deck;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.StaticData;
|
||||
import forge.card.CardDb;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.ItemPool;
|
||||
import forge.util.ItemPoolSorter;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -33,10 +35,7 @@ import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Deck section.
|
||||
*
|
||||
*/
|
||||
|
||||
public class CardPool extends ItemPool<PaperCard> {
|
||||
|
||||
public CardPool() {
|
||||
@@ -193,6 +192,4 @@ public class CardPool extends ItemPool<PaperCard> {
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package forge.deck.generation;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import forge.item.PaperCard;
|
||||
|
||||
public class DeckGenPool implements IDeckGenPool {
|
||||
private final HashMap<String, PaperCard> cards = new HashMap<String, PaperCard>();
|
||||
|
||||
public void add(PaperCard c) {
|
||||
cards.put(c.getName(), c);
|
||||
}
|
||||
public void addAll(Iterable<PaperCard> cc) {
|
||||
for (PaperCard c : cc) {
|
||||
add(c);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCard(String name) {
|
||||
return cards.get(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCard(String name, String edition) {
|
||||
return cards.get(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCard(String name, String edition, int artIndex) {
|
||||
return cards.get(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<PaperCard> getAllCards() {
|
||||
return cards.values();
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,11 @@
|
||||
package forge.deck.generation;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.ICardDatabase;
|
||||
import forge.card.MagicColor;
|
||||
import forge.deck.CardPool;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -55,18 +56,8 @@ public class DeckGenerator2Color extends DeckGeneratorBase {
|
||||
// 4x 7 - 20
|
||||
// = 52x - card pool (before further random filtering)
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for Generate2ColorDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param clr1
|
||||
* a {@link java.lang.String} object.
|
||||
* @param clr2
|
||||
* a {@link java.lang.String} object.
|
||||
*/
|
||||
public DeckGenerator2Color(ICardDatabase cardDb, final String clr1, final String clr2) {
|
||||
super(cardDb);
|
||||
public DeckGenerator2Color(IDeckGenPool pool, final String clr1, final String clr2) {
|
||||
super(pool);
|
||||
int c1 = MagicColor.fromName(clr1);
|
||||
int c2 = MagicColor.fromName(clr2);
|
||||
|
||||
|
||||
@@ -18,11 +18,12 @@
|
||||
package forge.deck.generation;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.ICardDatabase;
|
||||
import forge.card.MagicColor;
|
||||
import forge.deck.CardPool;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import java.util.List;
|
||||
@@ -43,20 +44,8 @@ public class DeckGenerator3Color extends DeckGeneratorBase {
|
||||
ImmutablePair.of(new FilterCMC(6, 20), 3)
|
||||
);
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for Generate3ColorDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param clr1
|
||||
* a {@link java.lang.String} object.
|
||||
* @param clr2
|
||||
* a {@link java.lang.String} object.
|
||||
* @param clr3
|
||||
* a {@link java.lang.String} object.
|
||||
*/
|
||||
public DeckGenerator3Color(ICardDatabase cardDb, final String clr1, final String clr2, final String clr3) {
|
||||
super(cardDb);
|
||||
public DeckGenerator3Color(IDeckGenPool pool, final String clr1, final String clr2, final String clr3) {
|
||||
super(pool);
|
||||
int c1 = MagicColor.fromName(clr1);
|
||||
int c2 = MagicColor.fromName(clr2);
|
||||
int c3 = MagicColor.fromName(clr3);
|
||||
|
||||
@@ -18,9 +18,10 @@
|
||||
package forge.deck.generation;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.ICardDatabase;
|
||||
import forge.deck.CardPool;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import java.util.List;
|
||||
@@ -50,8 +51,8 @@ public class DeckGenerator5Color extends DeckGeneratorBase {
|
||||
/**
|
||||
* Instantiates a new generate5 color deck.
|
||||
*/
|
||||
public DeckGenerator5Color(ICardDatabase cardDb) {
|
||||
super(cardDb);
|
||||
public DeckGenerator5Color(IDeckGenPool pool) {
|
||||
super(pool);
|
||||
colors = ColorSet.fromMask(0).inverse();
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ public abstract class DeckGeneratorBase {
|
||||
|
||||
protected ColorSet colors;
|
||||
protected final CardPool tDeck = new CardPool();
|
||||
protected final ICardDatabase cardDb;
|
||||
protected final IDeckGenPool pool;
|
||||
|
||||
// 2-colored deck generator has its own constants. The rest works fine with these ones
|
||||
protected float getLandsPercentage() { return 0.44f; }
|
||||
@@ -58,8 +58,8 @@ public abstract class DeckGeneratorBase {
|
||||
|
||||
StringBuilder tmpDeck = new StringBuilder();
|
||||
|
||||
public DeckGeneratorBase(ICardDatabase cardDb) {
|
||||
this.cardDb = cardDb;
|
||||
public DeckGeneratorBase(IDeckGenPool pool) {
|
||||
this.pool = pool;
|
||||
}
|
||||
|
||||
public void setSingleton(boolean singleton){
|
||||
@@ -107,7 +107,7 @@ public abstract class DeckGeneratorBase {
|
||||
throw new RuntimeException("Generate2ColorDeck : get2ColorDeck -- looped too much, please try again -- Cr12");
|
||||
}
|
||||
|
||||
tDeck.add(cardDb.getCard(cp.getName(),cp.getEdition()));
|
||||
tDeck.add(pool.getCard(cp.getName(), cp.getEdition()));
|
||||
|
||||
final int n = this.cardCounts.get(cp.getName());
|
||||
this.cardCounts.put(cp.getName(), n + 1);
|
||||
@@ -132,7 +132,7 @@ public abstract class DeckGeneratorBase {
|
||||
break;
|
||||
}
|
||||
|
||||
tDeck.add(cardDb.getCard(s));
|
||||
tDeck.add(pool.getCard(s));
|
||||
|
||||
final int n = this.cardCounts.get(s);
|
||||
this.cardCounts.put(s, n + 1);
|
||||
@@ -175,13 +175,13 @@ public abstract class DeckGeneratorBase {
|
||||
|
||||
PaperCard cp;
|
||||
if(edition != null)
|
||||
cp = cardDb.getCard(basicLandName, edition);
|
||||
cp = pool.getCard(basicLandName, edition);
|
||||
else
|
||||
cp = cardDb.getCard(basicLandName);
|
||||
cp = pool.getCard(basicLandName);
|
||||
String basicLandSet = cp.getEdition();
|
||||
|
||||
for (int i=0; i < nLand; i++) {
|
||||
tDeck.add(cardDb.getCard(cp.getName(), basicLandSet, -1), 1);
|
||||
tDeck.add(pool.getCard(cp.getName(), basicLandSet, -1), 1);
|
||||
}
|
||||
|
||||
landsLeft -= nLand;
|
||||
@@ -233,7 +233,7 @@ public abstract class DeckGeneratorBase {
|
||||
final List<PaperCard> curvedRandomized = Lists.newArrayList();
|
||||
for (PaperCard c : curved) {
|
||||
this.cardCounts.put(c.getName(), 0);
|
||||
curvedRandomized.add(cardDb.getCard(c.getName()));
|
||||
curvedRandomized.add(pool.getCard(c.getName()));
|
||||
}
|
||||
|
||||
addSome(addOfThisCmc, curvedRandomized);
|
||||
@@ -250,7 +250,7 @@ public abstract class DeckGeneratorBase {
|
||||
if (useArtifacts) {
|
||||
hasColor = Predicates.or(hasColor, COLORLESS_CARDS);
|
||||
}
|
||||
return Iterables.filter(cardDb.getAllCards(), Predicates.compose(Predicates.and(canPlay, hasColor), PaperCard.FN_GET_RULES));
|
||||
return Iterables.filter(pool.getAllCards(), Predicates.compose(Predicates.and(canPlay, hasColor), PaperCard.FN_GET_RULES));
|
||||
}
|
||||
|
||||
protected static Map<String, Integer> countLands(ItemPool<PaperCard> outList) {
|
||||
|
||||
@@ -18,10 +18,11 @@
|
||||
package forge.deck.generation;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.ICardDatabase;
|
||||
import forge.card.MagicColor;
|
||||
import forge.deck.CardPool;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import java.util.List;
|
||||
@@ -54,18 +55,8 @@ public class DeckGeneratorMonoColor extends DeckGeneratorBase {
|
||||
// 4x 7 - 20
|
||||
// = 52x - card pool (before further random filtering)
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for Generate2ColorDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param clr1
|
||||
* a {@link java.lang.String} object.
|
||||
* @param clr2
|
||||
* a {@link java.lang.String} object.
|
||||
*/
|
||||
public DeckGeneratorMonoColor(ICardDatabase cardDb, final String clr1) {
|
||||
super(cardDb);
|
||||
public DeckGeneratorMonoColor(IDeckGenPool pool, final String clr1) {
|
||||
super(pool);
|
||||
if (MagicColor.fromName(clr1) == 0) {
|
||||
int color1 = r.nextInt(5);
|
||||
colors = ColorSet.fromMask(MagicColor.WHITE << color1);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package forge.deck.generation;
|
||||
|
||||
import forge.item.PaperCard;
|
||||
|
||||
public interface IDeckGenPool {
|
||||
PaperCard getCard(String name);
|
||||
PaperCard getCard(String name, String edition);
|
||||
PaperCard getCard(String name, String edition, int artIndex);
|
||||
Iterable<PaperCard> getAllCards();
|
||||
}
|
||||
@@ -9,20 +9,17 @@ import forge.planarconquest.ConquestController;
|
||||
import forge.planarconquest.ConquestData;
|
||||
import forge.planarconquest.ConquestPlane;
|
||||
import forge.planarconquest.ConquestPreferences.CQPref;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.quest.QuestUtil;
|
||||
import forge.screens.FScreen;
|
||||
import forge.screens.LoadingOverlay;
|
||||
import forge.screens.planarconquest.ConquestMenu.LaunchReason;
|
||||
import forge.toolbox.FChoiceList;
|
||||
import forge.toolbox.FComboBox;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.ThreadUtil;
|
||||
import forge.util.Utils;
|
||||
import forge.util.gui.SOptionPane;
|
||||
|
||||
public class NewConquestScreen extends FScreen {
|
||||
private static final float EMBARK_BTN_HEIGHT = 2 * Utils.AVG_FINGER_HEIGHT;
|
||||
@@ -103,23 +100,8 @@ public class NewConquestScreen extends FScreen {
|
||||
}
|
||||
|
||||
private void newConquest() {
|
||||
String conquestName;
|
||||
while (true) {
|
||||
conquestName = SOptionPane.showInputDialog("Historians will recall your conquest as:", "Conquest Name");
|
||||
if (conquestName == null) { return; }
|
||||
|
||||
conquestName = QuestUtil.cleanString(conquestName);
|
||||
|
||||
if (conquestName.isEmpty()) {
|
||||
SOptionPane.showMessageDialog("Please specify a conquest name.");
|
||||
continue;
|
||||
}
|
||||
if (FileUtil.doesFileExist(ForgeConstants.CONQUEST_SAVE_DIR + conquestName + ".dat")) {
|
||||
SOptionPane.showMessageDialog("A quest already exists with that name. Please pick another quest name.");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
String conquestName = FModel.getConquest().promptForName();
|
||||
if (conquestName == null) { return; }
|
||||
startNewConquest(conquestName);
|
||||
}
|
||||
|
||||
@@ -127,7 +109,7 @@ public class NewConquestScreen extends FScreen {
|
||||
FThreads.invokeInEdtLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
LoadingOverlay.show("Creating new quest...", new Runnable() {
|
||||
LoadingOverlay.show("Starting new conquest...", new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ConquestController qc = FModel.getConquest();
|
||||
@@ -137,6 +119,8 @@ public class NewConquestScreen extends FScreen {
|
||||
// Save in preferences.
|
||||
FModel.getConquestPreferences().setPref(CQPref.CURRENT_CONQUEST, conquestName + ".dat");
|
||||
FModel.getConquestPreferences().save();
|
||||
|
||||
ConquestMenu.launchPlanarConquest(LaunchReason.NewConquest); //launch quest mode for new quest
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
*/
|
||||
package forge.deck;
|
||||
|
||||
import forge.card.ICardDatabase;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.generation.DeckGeneratorBase;
|
||||
import forge.deck.generation.IDeckGenPool;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.MyRandom;
|
||||
@@ -47,8 +47,8 @@ public class DeckGeneratorTheme extends DeckGeneratorBase {
|
||||
* Constructor for ThemeDeckGenerator.
|
||||
* </p>
|
||||
*/
|
||||
public DeckGeneratorTheme(ICardDatabase cardDb) {
|
||||
super(cardDb);
|
||||
public DeckGeneratorTheme(IDeckGenPool pool) {
|
||||
super(pool);
|
||||
this.maxDuplicates = 4;
|
||||
}
|
||||
|
||||
@@ -133,10 +133,12 @@ public class DeckGeneratorTheme extends DeckGeneratorBase {
|
||||
}
|
||||
|
||||
final int n = cardCounts.get(ss[0]);
|
||||
if(ss.length == 1)
|
||||
tDeck.add(cardDb.getCard(ss[0]));
|
||||
else
|
||||
tDeck.add(cardDb.getCard(ss[0],ss[1]));
|
||||
if (ss.length == 1) {
|
||||
tDeck.add(pool.getCard(ss[0]));
|
||||
}
|
||||
else {
|
||||
tDeck.add(pool.getCard(ss[0],ss[1]));
|
||||
}
|
||||
cardCounts.put(ss[0], n + 1);
|
||||
errorBuilder.append(s + "\n");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package forge.planarconquest;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.generation.DeckGenPool;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
public class ConquestCommander {
|
||||
private final PaperCard card;
|
||||
private final Deck deck;
|
||||
|
||||
public ConquestCommander(PaperCard card0, DeckGenPool cardPool0) {
|
||||
card = card0;
|
||||
deck = ConquestUtil.generateHumanDeck(card0, cardPool0);
|
||||
}
|
||||
|
||||
public PaperCard getCard() {
|
||||
return card;
|
||||
}
|
||||
|
||||
public Deck getDeck() {
|
||||
return deck;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return card.getName();
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,10 @@ import com.google.common.eventbus.Subscribe;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.event.GameEvent;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.quest.QuestUtil;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.gui.SOptionPane;
|
||||
import forge.util.storage.IStorage;
|
||||
|
||||
public class ConquestController {
|
||||
@@ -56,6 +60,27 @@ public class ConquestController {
|
||||
}
|
||||
}
|
||||
|
||||
public String promptForName() {
|
||||
String name;
|
||||
while (true) {
|
||||
name = SOptionPane.showInputDialog("Historians will recall your conquest as:", "Conquest Name");
|
||||
if (name == null) { return null; }
|
||||
|
||||
name = QuestUtil.cleanString(name);
|
||||
|
||||
if (name.isEmpty()) {
|
||||
SOptionPane.showMessageDialog("Please specify a conquest name.");
|
||||
continue;
|
||||
}
|
||||
if (FileUtil.doesFileExist(ForgeConstants.CONQUEST_SAVE_DIR + name + ".dat")) {
|
||||
SOptionPane.showMessageDialog("A conquest already exists with that name. Please pick another quest name.");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void receiveGameEvent(GameEvent ev) { // Receives events only during planar conquest games
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ public final class ConquestData {
|
||||
private int winStreakCurrent = 0;
|
||||
private int difficulty;
|
||||
private ConquestPlane startingPlane, currentPlane;
|
||||
private List<PaperCard> commanders = new ArrayList<PaperCard>();
|
||||
private List<ConquestCommander> commanders = new ArrayList<ConquestCommander>();
|
||||
|
||||
private final CardPool cardPool = new CardPool();
|
||||
private final HashMap<String, Deck> decks = new HashMap<String, Deck>();
|
||||
@@ -55,7 +55,7 @@ public final class ConquestData {
|
||||
difficulty = difficulty0;
|
||||
startingPlane = startingPlane0;
|
||||
currentPlane = startingPlane0;
|
||||
commanders.add(startingCommander0);
|
||||
commanders.add(new ConquestCommander(startingCommander0, startingPlane.getCardPool()));
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
|
||||
@@ -25,7 +25,7 @@ import forge.card.CardRulesPredicates;
|
||||
import forge.card.CardEdition.CardInSet;
|
||||
import forge.card.CardType;
|
||||
import forge.card.MagicColor;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.generation.DeckGenPool;
|
||||
import forge.item.PaperCard;
|
||||
import forge.model.FModel;
|
||||
import forge.util.FCollection;
|
||||
@@ -250,7 +250,7 @@ public enum ConquestPlane {
|
||||
private final FCollection<CardEdition> editions = new FCollection<CardEdition>();
|
||||
private final FCollection<Region> regions;
|
||||
private final FCollection<String> bannedCards = new FCollection<String>();
|
||||
private final CardPool cardPool = new CardPool();
|
||||
private final DeckGenPool cardPool = new DeckGenPool();
|
||||
private final FCollection<PaperCard> commanders = new FCollection<PaperCard>();
|
||||
|
||||
private ConquestPlane(String name0, String[] setCodes0, Region[] regions0) {
|
||||
@@ -271,30 +271,28 @@ public enum ConquestPlane {
|
||||
PaperCard pc = FModel.getMagicDb().getCommonCards().getCard(card.name, setCode);
|
||||
if (pc != null) {
|
||||
CardType type = pc.getRules().getType();
|
||||
if (!type.isBasicLand()) { //don't include basic lands
|
||||
boolean isCommander = type.isLegendary() && type.isCreature();
|
||||
cardPool.add(pc);
|
||||
if (isCommander) {
|
||||
commanders.add(pc);
|
||||
}
|
||||
int count = 0;
|
||||
for (Region region : regions) {
|
||||
if (region.pred.apply(pc)) {
|
||||
region.cardPool.add(pc);
|
||||
if (isCommander) {
|
||||
region.commanders.add(pc);
|
||||
}
|
||||
count++;
|
||||
boolean isCommander = type.isLegendary() && type.isCreature();
|
||||
cardPool.add(pc);
|
||||
if (isCommander) {
|
||||
commanders.add(pc);
|
||||
}
|
||||
int count = 0;
|
||||
for (Region region : regions) {
|
||||
if (region.pred.apply(pc)) {
|
||||
region.cardPool.add(pc);
|
||||
if (isCommander) {
|
||||
region.commanders.add(pc);
|
||||
}
|
||||
count++;
|
||||
}
|
||||
//if card doesn't match any region's predicate,
|
||||
//make card available to all regions
|
||||
if (count == 0) {
|
||||
for (Region region : regions) {
|
||||
region.cardPool.add(pc);
|
||||
if (isCommander) {
|
||||
region.commanders.add(pc);
|
||||
}
|
||||
}
|
||||
//if card doesn't match any region's predicate,
|
||||
//make card available to all regions
|
||||
if (count == 0) {
|
||||
for (Region region : regions) {
|
||||
region.cardPool.add(pc);
|
||||
if (isCommander) {
|
||||
region.commanders.add(pc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -322,7 +320,7 @@ public enum ConquestPlane {
|
||||
return regions;
|
||||
}
|
||||
|
||||
public CardPool getCardPool() {
|
||||
public DeckGenPool getCardPool() {
|
||||
return cardPool;
|
||||
}
|
||||
|
||||
@@ -338,7 +336,7 @@ public enum ConquestPlane {
|
||||
private final String name;
|
||||
private final String artCardName;
|
||||
private final Predicate<PaperCard> pred;
|
||||
private final CardPool cardPool = new CardPool();
|
||||
private final DeckGenPool cardPool = new DeckGenPool();
|
||||
private final FCollection<PaperCard> commanders = new FCollection<PaperCard>();
|
||||
|
||||
private Region(String name0, String artCardName0, Predicate<PaperCard> pred0) {
|
||||
@@ -367,7 +365,7 @@ public enum ConquestPlane {
|
||||
return name;
|
||||
}
|
||||
|
||||
public CardPool getCardPool() {
|
||||
public DeckGenPool getCardPool() {
|
||||
return cardPool;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
package forge.planarconquest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.deck.generation.DeckGenerator2Color;
|
||||
import forge.deck.generation.DeckGenerator3Color;
|
||||
import forge.deck.generation.DeckGenerator5Color;
|
||||
import forge.deck.generation.DeckGeneratorBase;
|
||||
import forge.deck.generation.DeckGeneratorMonoColor;
|
||||
import forge.deck.generation.IDeckGenPool;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.Aggregates;
|
||||
|
||||
public class ConquestUtil {
|
||||
private ConquestUtil() {}
|
||||
|
||||
public static Deck generateHumanDeck(PaperCard commander, IDeckGenPool pool) {
|
||||
return generateDeck(commander, pool, false);
|
||||
}
|
||||
public static Deck generateAiDeck(Iterable<PaperCard> commanderOptions, IDeckGenPool pool) {
|
||||
return generateDeck(Aggregates.random(commanderOptions), pool, true);
|
||||
}
|
||||
private static Deck generateDeck(PaperCard commander, IDeckGenPool pool, boolean forAi) {
|
||||
ColorSet colorID = commander.getRules().getColorIdentity();
|
||||
|
||||
List<String> colors = new ArrayList<String>();
|
||||
if (colorID.hasWhite()) { colors.add("White"); }
|
||||
if (colorID.hasBlue()) { colors.add("Blue"); }
|
||||
if (colorID.hasBlack()) { colors.add("Black"); }
|
||||
if (colorID.hasRed()) { colors.add("Red"); }
|
||||
if (colorID.hasGreen()) { colors.add("Green"); }
|
||||
|
||||
DeckGeneratorBase gen;
|
||||
switch (colors.size()) {
|
||||
case 0:
|
||||
gen = new DeckGeneratorMonoColor(pool, "");
|
||||
break;
|
||||
case 1:
|
||||
gen = new DeckGeneratorMonoColor(pool, colors.get(0));
|
||||
break;
|
||||
case 2:
|
||||
gen = new DeckGenerator2Color(pool, colors.get(0), colors.get(1));
|
||||
break;
|
||||
case 3:
|
||||
gen = new DeckGenerator3Color(pool, colors.get(0), colors.get(1), colors.get(2));
|
||||
break;
|
||||
case 5:
|
||||
gen = new DeckGenerator5Color(pool);
|
||||
break;
|
||||
default:
|
||||
return null; //shouldn't happen
|
||||
}
|
||||
|
||||
gen.setSingleton(true);
|
||||
CardPool cards = gen.getDeck(60, forAi);
|
||||
|
||||
Deck deck = new Deck(commander.getName());
|
||||
deck.getMain().addAll(cards);
|
||||
deck.getOrCreate(DeckSection.Commander).add(commander);
|
||||
|
||||
return deck;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user