diff --git a/.gitattributes b/.gitattributes
index b7ba73bc328..7b33b9d59f0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -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
diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java
index e9f0f2aea1f..56c3916e3ea 100644
--- a/forge-core/src/main/java/forge/card/CardDb.java
+++ b/forge-core/src/main/java/forge/card/CardDb.java
@@ -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 = '|';
diff --git a/forge-core/src/main/java/forge/deck/CardPool.java b/forge-core/src/main/java/forge/deck/CardPool.java
index 9d9889afb3e..f80f32e719b 100644
--- a/forge-core/src/main/java/forge/deck/CardPool.java
+++ b/forge-core/src/main/java/forge/deck/CardPool.java
@@ -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 {
public CardPool() {
@@ -193,6 +192,4 @@ public class CardPool extends ItemPool {
}
return sb.toString();
}
-
-
}
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java
new file mode 100644
index 00000000000..01eaf89f063
--- /dev/null
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java
@@ -0,0 +1,38 @@
+package forge.deck.generation;
+
+import java.util.HashMap;
+
+import forge.item.PaperCard;
+
+public class DeckGenPool implements IDeckGenPool {
+ private final HashMap cards = new HashMap();
+
+ public void add(PaperCard c) {
+ cards.put(c.getName(), c);
+ }
+ public void addAll(Iterable 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 getAllCards() {
+ return cards.values();
+ }
+}
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java b/forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java
index 2af98d607db..1685d64d275 100644
--- a/forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java
@@ -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)
- /**
- *
- * Constructor for Generate2ColorDeck.
- *
- *
- * @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);
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java b/forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java
index 4ca2f99c92e..72471d7572d 100644
--- a/forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java
@@ -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)
);
- /**
- *
- * Constructor for Generate3ColorDeck.
- *
- *
- * @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);
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java b/forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java
index 0564a5f0388..a979546bb77 100644
--- a/forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java
@@ -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();
}
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java
index 82093e43e46..415960ad142 100644
--- a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java
@@ -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 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 countLands(ItemPool outList) {
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java
index 81b6a58e8cc..a34ebe5b383 100644
--- a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java
@@ -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)
- /**
- *
- * Constructor for Generate2ColorDeck.
- *
- *
- * @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);
diff --git a/forge-core/src/main/java/forge/deck/generation/IDeckGenPool.java b/forge-core/src/main/java/forge/deck/generation/IDeckGenPool.java
new file mode 100644
index 00000000000..cddf08e4d7d
--- /dev/null
+++ b/forge-core/src/main/java/forge/deck/generation/IDeckGenPool.java
@@ -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 getAllCards();
+}
diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java
index b3af410b9a5..534cd0741fe 100644
--- a/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java
+++ b/forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java
@@ -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
}
});
}
diff --git a/forge-gui/src/main/java/forge/deck/DeckGeneratorTheme.java b/forge-gui/src/main/java/forge/deck/DeckGeneratorTheme.java
index d803eb8c45b..19b4eb09c93 100644
--- a/forge-gui/src/main/java/forge/deck/DeckGeneratorTheme.java
+++ b/forge-gui/src/main/java/forge/deck/DeckGeneratorTheme.java
@@ -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.
*
*/
- 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");
}
diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java
new file mode 100644
index 00000000000..4731272ce0d
--- /dev/null
+++ b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java
@@ -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();
+ }
+}
diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestController.java b/forge-gui/src/main/java/forge/planarconquest/ConquestController.java
index 39069c206dd..c919d12c938 100644
--- a/forge-gui/src/main/java/forge/planarconquest/ConquestController.java
+++ b/forge-gui/src/main/java/forge/planarconquest/ConquestController.java
@@ -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
diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java
index ad8410b6a4d..d26adcb982d 100644
--- a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java
+++ b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java
@@ -42,7 +42,7 @@ public final class ConquestData {
private int winStreakCurrent = 0;
private int difficulty;
private ConquestPlane startingPlane, currentPlane;
- private List commanders = new ArrayList();
+ private List commanders = new ArrayList();
private final CardPool cardPool = new CardPool();
private final HashMap decks = new HashMap();
@@ -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() {
diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java
index 41e665ded27..b95de29fa94 100644
--- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java
+++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java
@@ -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 editions = new FCollection();
private final FCollection regions;
private final FCollection bannedCards = new FCollection();
- private final CardPool cardPool = new CardPool();
+ private final DeckGenPool cardPool = new DeckGenPool();
private final FCollection commanders = new FCollection();
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 pred;
- private final CardPool cardPool = new CardPool();
+ private final DeckGenPool cardPool = new DeckGenPool();
private final FCollection commanders = new FCollection();
private Region(String name0, String artCardName0, Predicate pred0) {
@@ -367,7 +365,7 @@ public enum ConquestPlane {
return name;
}
- public CardPool getCardPool() {
+ public DeckGenPool getCardPool() {
return cardPool;
}
diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java
new file mode 100644
index 00000000000..b89f95d5947
--- /dev/null
+++ b/forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java
@@ -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 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 colors = new ArrayList();
+ 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;
+ }
+}