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; + } +}