diff --git a/.gitattributes b/.gitattributes index 3b372272630..00801d55827 100644 --- a/.gitattributes +++ b/.gitattributes @@ -60,7 +60,15 @@ forge-core/src/main/java/forge/deck/CardPool.java -text forge-core/src/main/java/forge/deck/Deck.java svneol=native#text/plain forge-core/src/main/java/forge/deck/DeckBase.java -text 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/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/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/DeckSerializer.java -text forge-core/src/main/java/forge/deck/io/OldDeckFileFormatException.java -text @@ -15084,17 +15092,6 @@ forge-gui/src/main/java/forge/control/KeyboardShortcuts.java -text forge-gui/src/main/java/forge/control/RestartUtil.java -text forge-gui/src/main/java/forge/control/package-info.java -text forge-gui/src/main/java/forge/deck/CardCollections.java -text -forge-gui/src/main/java/forge/deck/DeckGroup.java -text -forge-gui/src/main/java/forge/deck/DeckRecognizer.java -text -forge-gui/src/main/java/forge/deck/DeckgenUtil.java -text -forge-gui/src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain -forge-gui/src/main/java/forge/deck/generate/Generate3ColorDeck.java svneol=native#text/plain -forge-gui/src/main/java/forge/deck/generate/Generate5ColorDeck.java svneol=native#text/plain -forge-gui/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java -text -forge-gui/src/main/java/forge/deck/generate/GenerateDeckUtil.java -text -forge-gui/src/main/java/forge/deck/generate/GenerateMonoColorDeck.java -text -forge-gui/src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain -forge-gui/src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/deck/io/DeckGroupSerializer.java -text forge-gui/src/main/java/forge/deck/io/DeckHtmlSerializer.java -text forge-gui/src/main/java/forge/deck/io/OldDeckParser.java -text @@ -15237,9 +15234,11 @@ forge-gui/src/main/java/forge/gui/UnsortedListModel.java -text forge-gui/src/main/java/forge/gui/WrapLayout.java -text forge-gui/src/main/java/forge/gui/bazaar/CBazaarUI.java -text forge-gui/src/main/java/forge/gui/bazaar/VBazaarUI.java -text +forge-gui/src/main/java/forge/gui/deckchooser/DeckgenUtil.java -text forge-gui/src/main/java/forge/gui/deckchooser/DecksComboBox.java -text forge-gui/src/main/java/forge/gui/deckchooser/DecksComboBoxEvent.java -text forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java -text +forge-gui/src/main/java/forge/gui/deckchooser/GenerateThemeDeck.java svneol=native#text/plain forge-gui/src/main/java/forge/gui/deckchooser/IDecksComboBoxListener.java -text forge-gui/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java -text forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java -text diff --git a/forge-gui/src/main/java/forge/deck/DeckGroup.java b/forge-core/src/main/java/forge/deck/DeckGroup.java similarity index 100% rename from forge-gui/src/main/java/forge/deck/DeckGroup.java rename to forge-core/src/main/java/forge/deck/DeckGroup.java diff --git a/forge-gui/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java similarity index 95% rename from forge-gui/src/main/java/forge/deck/DeckRecognizer.java rename to forge-core/src/main/java/forge/deck/DeckRecognizer.java index 541ed95169c..cef1dbec0ce 100644 --- a/forge-gui/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -24,7 +24,7 @@ import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; -import forge.Singletons; +import forge.card.CardDb; import forge.card.ICardDatabase; import forge.item.PaperCard; @@ -167,9 +167,9 @@ public class DeckRecognizer { private final ICardDatabase db; private Date recognizeCardsPrintedBefore = null; - public DeckRecognizer(boolean fromLatestSet) { + public DeckRecognizer(boolean fromLatestSet, CardDb db) { useLastSet = fromLatestSet; - db = Singletons.getMagicDb().getCommonCards(); + this.db = db; } public Token recognizeLine(final String rawLine) { diff --git a/forge-gui/src/main/java/forge/deck/generate/Generate2ColorDeck.java b/forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java similarity index 85% rename from forge-gui/src/main/java/forge/deck/generate/Generate2ColorDeck.java rename to forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java index 4986a881a00..e27b9ece6cd 100644 --- a/forge-gui/src/main/java/forge/deck/generate/Generate2ColorDeck.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGenerator2Color.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.deck.generate; +package forge.deck.generation; import java.util.Arrays; import java.util.List; @@ -24,8 +24,8 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import com.google.common.collect.Lists; import forge.card.ColorSet; +import forge.card.ICardDatabase; import forge.card.MagicColor; -import forge.deck.generate.GenerateDeckUtil.FilterCMC; import forge.item.PaperCard; import forge.util.ItemPoolView; @@ -37,17 +37,17 @@ import forge.util.ItemPoolView; * @author Forge * @version $Id$ */ -public class Generate2ColorDeck extends GenerateColoredDeckBase { +public class DeckGenerator2Color extends DeckGeneratorBase { @Override protected final float getLandsPercentage() { return 0.39f; } @Override protected final float getCreatPercentage() { return 0.36f; } @Override protected final float getSpellPercentage() { return 0.25f; } @SuppressWarnings("unchecked") final List> cmcRelativeWeights = Lists.newArrayList( - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(0, 2), 6), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(3, 4), 4), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(5, 6), 2), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(7, 20), 1) + ImmutablePair.of(new FilterCMC(0, 2), 6), + ImmutablePair.of(new FilterCMC(3, 4), 4), + ImmutablePair.of(new FilterCMC(5, 6), 2), + ImmutablePair.of(new FilterCMC(7, 20), 1) ); // mana curve of the card pool @@ -67,7 +67,8 @@ public class Generate2ColorDeck extends GenerateColoredDeckBase { * @param clr2 * a {@link java.lang.String} object. */ - public Generate2ColorDeck(final String clr1, final String clr2) { + public DeckGenerator2Color(ICardDatabase cardDb, final String clr1, final String clr2) { + super(cardDb); int c1 = MagicColor.fromName(clr1); int c2 = MagicColor.fromName(clr2); @@ -96,7 +97,7 @@ public class Generate2ColorDeck extends GenerateColoredDeckBase { tmpDeck.append(String.format("Adjusted deck size to: %d, should add %d land(s)%n", size - numLands, numLands)); // Add dual lands - List duals = GenerateDeckUtil.getDualLandList(colors); + List duals = getDualLandList(); for (String s : duals) { this.cardCounts.put(s, 0); } diff --git a/forge-gui/src/main/java/forge/deck/generate/Generate3ColorDeck.java b/forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java similarity index 86% rename from forge-gui/src/main/java/forge/deck/generate/Generate3ColorDeck.java rename to forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java index 53f9f663efd..e2c1c70d5f7 100644 --- a/forge-gui/src/main/java/forge/deck/generate/Generate3ColorDeck.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGenerator3Color.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.deck.generate; +package forge.deck.generation; import java.util.List; @@ -24,8 +24,8 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import com.google.common.collect.Lists; import forge.card.ColorSet; +import forge.card.ICardDatabase; import forge.card.MagicColor; -import forge.deck.generate.GenerateDeckUtil.FilterCMC; import forge.item.PaperCard; import forge.util.ItemPoolView; import forge.util.MyRandom; @@ -38,12 +38,12 @@ import forge.util.MyRandom; * @author Forge * @version $Id$ */ -public class Generate3ColorDeck extends GenerateColoredDeckBase { +public class DeckGenerator3Color extends DeckGeneratorBase { @SuppressWarnings("unchecked") final List> cmcLevels = Lists.newArrayList( - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(0, 2), 12), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(3, 5), 9), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(6, 20), 3) + ImmutablePair.of(new FilterCMC(0, 2), 12), + ImmutablePair.of(new FilterCMC(3, 5), 9), + ImmutablePair.of(new FilterCMC(6, 20), 3) ); /** @@ -58,7 +58,8 @@ public class Generate3ColorDeck extends GenerateColoredDeckBase { * @param clr3 * a {@link java.lang.String} object. */ - public Generate3ColorDeck(final String clr1, final String clr2, final String clr3) { + public DeckGenerator3Color(ICardDatabase cardDb, final String clr1, final String clr2, final String clr3) { + super(cardDb); int c1 = MagicColor.fromName(clr1); int c2 = MagicColor.fromName(clr2); int c3 = MagicColor.fromName(clr3); @@ -105,7 +106,7 @@ public class Generate3ColorDeck extends GenerateColoredDeckBase { tmpDeck.append("numLands:").append(numLands).append("\n"); // Add dual lands - List duals = GenerateDeckUtil.getDualLandList(colors); + List duals = getDualLandList(); for (String s : duals) { this.cardCounts.put(s, 0); } diff --git a/forge-gui/src/main/java/forge/deck/generate/Generate5ColorDeck.java b/forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java similarity index 82% rename from forge-gui/src/main/java/forge/deck/generate/Generate5ColorDeck.java rename to forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java index e11180761a1..44a21c09adb 100644 --- a/forge-gui/src/main/java/forge/deck/generate/Generate5ColorDeck.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGenerator5Color.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.deck.generate; +package forge.deck.generation; import java.util.List; @@ -24,7 +24,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import com.google.common.collect.Lists; import forge.card.ColorSet; -import forge.deck.generate.GenerateDeckUtil.FilterCMC; +import forge.card.ICardDatabase; import forge.item.PaperCard; import forge.util.ItemPoolView; @@ -36,12 +36,12 @@ import forge.util.ItemPoolView; * @author Forge * @version $Id$ */ -public class Generate5ColorDeck extends GenerateColoredDeckBase { +public class DeckGenerator5Color extends DeckGeneratorBase { @SuppressWarnings("unchecked") final List> cmcLevels = Lists.newArrayList( - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(0, 2), 3), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(3, 5), 2), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(6, 20), 1) + ImmutablePair.of(new FilterCMC(0, 2), 3), + ImmutablePair.of(new FilterCMC(3, 5), 2), + ImmutablePair.of(new FilterCMC(6, 20), 1) ); // resulting mana curve of the card pool @@ -53,7 +53,8 @@ public class Generate5ColorDeck extends GenerateColoredDeckBase { /** * Instantiates a new generate5 color deck. */ - public Generate5ColorDeck() { + public DeckGenerator5Color(ICardDatabase cardDb) { + super(cardDb); colors = ColorSet.fromMask(0).inverse(); } @@ -68,7 +69,7 @@ public class Generate5ColorDeck extends GenerateColoredDeckBase { tmpDeck.append("numLands:").append(numLands).append("\n"); // Add dual lands - List duals = GenerateDeckUtil.getDualLandList(colors); + List duals = getDualLandList(); for (String s : duals) { this.cardCounts.put(s, 0); } diff --git a/forge-gui/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java similarity index 61% rename from forge-gui/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java rename to forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java index 66b57f4387e..c7d02006490 100644 --- a/forge-gui/src/main/java/forge/deck/generate/GenerateColoredDeckBase.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java @@ -15,8 +15,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.deck.generate; +package forge.deck.generation; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,14 +32,13 @@ import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import forge.Singletons; import forge.card.CardRules; import forge.card.CardRulesPredicates; import forge.card.ColorSet; +import forge.card.ICardDatabase; import forge.card.MagicColor; -import forge.deck.generate.GenerateDeckUtil.FilterCMC; +import forge.card.mana.ManaCost; import forge.item.PaperCard; -import forge.properties.ForgePreferences.FPref; import forge.util.Aggregates; import forge.util.ItemPool; import forge.util.ItemPoolView; @@ -52,13 +52,15 @@ import forge.util.MyRandom; * @author Forge * @version $Id: Generate2ColorDeck.java 14959 2012-03-28 14:03:43Z Chris H. $ */ -public abstract class GenerateColoredDeckBase { +public abstract class DeckGeneratorBase { protected final Random r = MyRandom.getRandom(); protected final Map cardCounts = new HashMap(); - protected int maxDuplicates; + protected int maxDuplicates = 4; + protected boolean useArtifacts = true; protected ColorSet colors; - protected final ItemPool tDeck; + protected final ItemPool tDeck = new ItemPool(PaperCard.class); + protected final ICardDatabase cardDb; // 2-colored deck generator has its own constants. The rest works fine with these ones protected float getLandsPercentage() { return 0.44f; } @@ -67,9 +69,15 @@ public abstract class GenerateColoredDeckBase { StringBuilder tmpDeck = new StringBuilder(); - public GenerateColoredDeckBase() { - this.maxDuplicates = Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_SINGLETONS) ? 1 : 4; - tDeck = new ItemPool(PaperCard.class); + public DeckGeneratorBase(ICardDatabase cardDb) { + this.cardDb = cardDb; + } + + public void setSingleton(boolean singleton){ + this.maxDuplicates = singleton ? 1 : 4; + } + public void setUseArtifacts(boolean value) { + this.useArtifacts = value; } protected void addCreaturesAndSpells(int size, List> cmcLevels, boolean forAi) { @@ -130,8 +138,7 @@ public abstract class GenerateColoredDeckBase { } while ((this.cardCounts.get(s) > 3) && (lc <= 20)); // not an error if looped too much - could play singleton mode, with 6 slots for 3 non-basic lands. - PaperCard cp = Singletons.getMagicDb().getCommonCards().getCard(s); - tDeck.add(Singletons.getMagicDb().getCommonCards().getCard(cp.getName(), false)); + tDeck.add(cardDb.getCard(s, false)); final int n = this.cardCounts.get(s); this.cardCounts.put(s, n + 1); @@ -157,20 +164,20 @@ public abstract class GenerateColoredDeckBase { int landsLeft = cnt; for (Entry c : clrCnts.entrySet()) { - String color = c.getKey(); + String basicLandName = c.getKey(); // calculate number of lands for each color final int nLand = Math.min(landsLeft, Math.round(cnt * c.getValue() / totalColor)); - tmpDeck.append("nLand-").append(color).append(":").append(nLand).append("\n"); + tmpDeck.append("nLand-").append(basicLandName).append(":").append(nLand).append("\n"); // just to prevent a null exception by the deck size fixing code - this.cardCounts.put(color, nLand); + this.cardCounts.put(basicLandName, nLand); - PaperCard cp = Singletons.getMagicDb().getCommonCards().getCard(color); + PaperCard cp = cardDb.getCard(basicLandName); String basicLandSet = cp.getEdition(); - tDeck.add(Singletons.getMagicDb().getCommonCards().getCard(cp.getName(), basicLandSet), nLand); + tDeck.add(cardDb.getCard(cp.getName(), basicLandSet), nLand); landsLeft -= nLand; } } @@ -220,7 +227,7 @@ public abstract class GenerateColoredDeckBase { final List curvedRandomized = Lists.newArrayList(); for (PaperCard c : curved) { this.cardCounts.put(c.getName(), 0); - curvedRandomized.add(Singletons.getMagicDb().getCommonCards().getCard(c.getName(), false)); + curvedRandomized.add(cardDb.getCard(c.getName(), false)); } addSome(addOfThisCmc, curvedRandomized); @@ -231,13 +238,13 @@ public abstract class GenerateColoredDeckBase { // start with all cards // remove cards that generated decks don't like - Predicate canPlay = forAi ? GenerateDeckUtil.AI_CAN_PLAY : GenerateDeckUtil.HUMAN_CAN_PLAY; - Predicate hasColor = new GenerateDeckUtil.MatchColorIdentity(colors); + Predicate canPlay = forAi ? AI_CAN_PLAY : HUMAN_CAN_PLAY; + Predicate hasColor = new MatchColorIdentity(colors); - if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)) { - hasColor = Predicates.or(hasColor, GenerateDeckUtil.COLORLESS_CARDS); + if (useArtifacts) { + hasColor = Predicates.or(hasColor, COLORLESS_CARDS); } - return Iterables.filter(Singletons.getMagicDb().getCommonCards().getAllCards(), Predicates.compose(Predicates.and(canPlay, hasColor), PaperCard.FN_GET_RULES)); + return Iterables.filter(cardDb.getAllCards(), Predicates.compose(Predicates.and(canPlay, hasColor), PaperCard.FN_GET_RULES)); } protected static Map countLands(ItemPool outList) { @@ -272,4 +279,127 @@ public abstract class GenerateColoredDeckBase { final Integer boxed = map.get(key); map.put(key, boxed == null ? delta : boxed.intValue() + delta); } + + public static final Predicate AI_CAN_PLAY = new Predicate() { + @Override + public boolean apply(CardRules c) { + return !c.getAiHints().getRemAIDecks() && !c.getAiHints().getRemRandomDecks(); + } + }; + + public static final Predicate HUMAN_CAN_PLAY = new Predicate() { + @Override + public boolean apply(CardRules c) { + return !c.getAiHints().getRemRandomDecks(); + } + }; + + public static final Predicate COLORLESS_CARDS = new Predicate() { + @Override + public boolean apply(CardRules c) { + ManaCost mc = c.getManaCost(); + return c.getColorIdentity().isColorless() && !mc.isNoCost(); + } + }; + + public static class MatchColorIdentity implements Predicate { + private final ColorSet allowedColor; + + public MatchColorIdentity(ColorSet color) { + allowedColor = color; + } + + @Override + public boolean apply(CardRules subject) { + ManaCost mc = subject.getManaCost(); + return !mc.isPureGeneric() && allowedColor.containsAllColorsFrom(subject.getColorIdentity().getColor()); + //return mc.canBePaidWithAvaliable(allowedColor); + // return allowedColor.containsAllColorsFrom(mc.getColorProfile()); + } + } + + public static class FilterCMC implements Predicate { + private final int min; + private final int max; + + public FilterCMC(int from, int to) { + min = from; + max = to; + } + + @Override + public boolean apply(CardRules c) { + ManaCost mc = c.getManaCost(); + int cmc = mc.getCMC(); + return cmc >= min && cmc <= max && !mc.isNoCost(); + } + } + + private static Map dualLands = new HashMap(); + static { + dualLands.put(MagicColor.WHITE | MagicColor.BLUE, new String[] { "Tundra", "Hallowed Fountain", "Flooded Strand" }); + dualLands.put(MagicColor.BLACK | MagicColor.BLUE, new String[] { "Underground Sea", "Watery Grave", "Polluted Delta" }); + dualLands.put(MagicColor.BLACK | MagicColor.RED, new String[] { "Badlands", "Blood Crypt", "Bloodstained Mire" }); + dualLands.put(MagicColor.GREEN | MagicColor.RED, new String[] { "Taiga", "Stomping Ground", "Wooded Foothills" }); + dualLands.put(MagicColor.GREEN | MagicColor.WHITE, new String[] { "Savannah", "Temple Garden", "Windswept Heath" }); + + dualLands.put(MagicColor.WHITE | MagicColor.BLACK, new String[] { "Scrubland", "Godless Shrine", "Marsh Flats" }); + dualLands.put(MagicColor.BLUE | MagicColor.RED, new String[] { "Volcanic Island", "Steam Vents", "Scalding Tarn" }); + dualLands.put(MagicColor.BLACK | MagicColor.GREEN, new String[] { "Bayou", "Overgrown Tomb", "Verdant Catacombs" }); + dualLands.put(MagicColor.WHITE | MagicColor.RED, new String[] { "Plateau", "Sacred Foundry", "Arid Mesa" }); + dualLands.put(MagicColor.GREEN | MagicColor.BLUE, new String[] { "Tropical Island", "Breeding Pool", "Misty Rainforest" }); + } + + /** + * Get list of dual lands for this color combo. + * + * @param color + * the color + * @return dual land names + */ + protected List getDualLandList() { + + final List dLands = new ArrayList(); + + if (colors.countColors() > 3) { + dLands.add("Rupture Spire"); + dLands.add("Undiscovered Paradise"); + } + + if (colors.countColors() > 2) { + dLands.add("Evolving Wilds"); + dLands.add("Terramorphic Expanse"); + } + for (Entry dual : dualLands.entrySet()) { + if (colors.hasAllColors(dual.getKey())) { + for (String s : dual.getValue()) { + dLands.add(s); + } + } + } + + return dLands; + } + + /** + * Get all dual lands that do not match this color combo. + * + * @param color + * the color + * @return dual land names + */ + protected List getInverseDualLandList() { + + final List dLands = new ArrayList(); + + for (Entry dual : dualLands.entrySet()) { + if (!colors.hasAllColors(dual.getKey())) { + for (String s : dual.getValue()) { + dLands.add(s); + } + } + } + + return dLands; + } } diff --git a/forge-gui/src/main/java/forge/deck/generate/GenerateMonoColorDeck.java b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java similarity index 82% rename from forge-gui/src/main/java/forge/deck/generate/GenerateMonoColorDeck.java rename to forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java index b84128e097b..6be24b8fc0e 100644 --- a/forge-gui/src/main/java/forge/deck/generate/GenerateMonoColorDeck.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorMonoColor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.deck.generate; +package forge.deck.generation; import java.util.List; @@ -24,8 +24,8 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import com.google.common.collect.Lists; import forge.card.ColorSet; +import forge.card.ICardDatabase; import forge.card.MagicColor; -import forge.deck.generate.GenerateDeckUtil.FilterCMC; import forge.item.PaperCard; import forge.util.ItemPoolView; @@ -37,17 +37,17 @@ import forge.util.ItemPoolView; * @author Forge * @version $Id: Generate2ColorDeck.java 19765 2013-02-20 03:01:37Z myk $ */ -public class GenerateMonoColorDeck extends GenerateColoredDeckBase { +public class DeckGeneratorMonoColor extends DeckGeneratorBase { @Override protected final float getLandsPercentage() { return 0.39f; } @Override protected final float getCreatPercentage() { return 0.36f; } @Override protected final float getSpellPercentage() { return 0.25f; } @SuppressWarnings("unchecked") final List> cmcLevels = Lists.newArrayList( - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(0, 2), 10), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(3, 4), 8), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(5, 6), 5), - ImmutablePair.of(new GenerateDeckUtil.FilterCMC(7, 20), 3) + ImmutablePair.of(new FilterCMC(0, 2), 10), + ImmutablePair.of(new FilterCMC(3, 4), 8), + ImmutablePair.of(new FilterCMC(5, 6), 5), + ImmutablePair.of(new FilterCMC(7, 20), 3) ); // mana curve of the card pool @@ -67,7 +67,8 @@ public class GenerateMonoColorDeck extends GenerateColoredDeckBase { * @param clr2 * a {@link java.lang.String} object. */ - public GenerateMonoColorDeck(final String clr1) { + public DeckGeneratorMonoColor(ICardDatabase cardDb, final String clr1) { + super(cardDb); 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/package-info.java b/forge-core/src/main/java/forge/deck/generation/package-info.java new file mode 100644 index 00000000000..12dfe2aa1d1 --- /dev/null +++ b/forge-core/src/main/java/forge/deck/generation/package-info.java @@ -0,0 +1,3 @@ +/** Forge Card Game. */ +package forge.deck.generation; + diff --git a/forge-gui/src/main/java/forge/deck/generate/GenerateDeckUtil.java b/forge-gui/src/main/java/forge/deck/generate/GenerateDeckUtil.java deleted file mode 100644 index 1ae46455980..00000000000 --- a/forge-gui/src/main/java/forge/deck/generate/GenerateDeckUtil.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package forge.deck.generate; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import com.google.common.base.Predicate; - -import forge.card.CardRules; -import forge.card.ColorSet; -import forge.card.MagicColor; -import forge.card.mana.ManaCost; - -/** - *

- * GenerateDeckUtil class. - *

- * - * @author Forge - * @version $Id: GenerateDeckUtil.java 10011 2011-08-28 12:20:52Z Sloth $ - */ -public class GenerateDeckUtil { - - public static final Predicate AI_CAN_PLAY = new Predicate() { - @Override - public boolean apply(CardRules c) { - return !c.getAiHints().getRemAIDecks() && !c.getAiHints().getRemRandomDecks(); - } - }; - - public static final Predicate HUMAN_CAN_PLAY = new Predicate() { - @Override - public boolean apply(CardRules c) { - return !c.getAiHints().getRemRandomDecks(); - } - }; - - public static final Predicate COLORLESS_CARDS = new Predicate() { - @Override - public boolean apply(CardRules c) { - ManaCost mc = c.getManaCost(); - return c.getColorIdentity().isColorless() && !mc.isNoCost(); - } - }; - - public static class MatchColorIdentity implements Predicate { - private final ColorSet allowedColor; - - public MatchColorIdentity(ColorSet color) { - allowedColor = color; - } - - @Override - public boolean apply(CardRules subject) { - ManaCost mc = subject.getManaCost(); - return !mc.isPureGeneric() && allowedColor.containsAllColorsFrom(subject.getColorIdentity().getColor()); - //return mc.canBePaidWithAvaliable(allowedColor); - // return allowedColor.containsAllColorsFrom(mc.getColorProfile()); - } - } - - public static class FilterCMC implements Predicate { - private final int min; - private final int max; - - public FilterCMC(int from, int to) { - min = from; - max = to; - } - - @Override - public boolean apply(CardRules c) { - ManaCost mc = c.getManaCost(); - int cmc = mc.getCMC(); - return cmc >= min && cmc <= max && !mc.isNoCost(); - } - } - - private static Map dualLands = new HashMap(); - static { - dualLands.put(MagicColor.WHITE | MagicColor.BLUE, new String[] { "Tundra", "Hallowed Fountain", "Flooded Strand", - "Azorius Guildgate" }); - dualLands.put(MagicColor.BLACK | MagicColor.BLUE, new String[] { "Underground Sea", "Watery Grave", - "Polluted Delta" }); - dualLands.put(MagicColor.BLACK | MagicColor.RED, new String[] { "Badlands", "Blood Crypt", "Bloodstained Mire", - "Rakdos Guildgate" }); - dualLands.put(MagicColor.GREEN | MagicColor.RED, new String[] { "Taiga", "Stomping Ground", "Wooded Foothills" }); - dualLands.put(MagicColor.GREEN | MagicColor.WHITE, new String[] { "Savannah", "Temple Garden", "Windswept Heath", - "Selesnya Guildgate" }); - - dualLands.put(MagicColor.WHITE | MagicColor.BLACK, new String[] { "Scrubland", "Godless Shrine", "Marsh Flats" }); - dualLands.put(MagicColor.BLUE | MagicColor.RED, new String[] { "Volcanic Island", "Steam Vents", "Scalding Tarn", - "Izzet Guildgate" }); - dualLands.put(MagicColor.BLACK | MagicColor.GREEN, new String[] { "Bayou", "Overgrown Tomb", "Verdant Catacombs", - "Golgari Guildgate" }); - dualLands.put(MagicColor.WHITE | MagicColor.RED, new String[] { "Plateau", "Sacred Foundry", "Arid Mesa" }); - dualLands.put(MagicColor.GREEN | MagicColor.BLUE, new String[] { "Tropical Island", "Breeding Pool", - "Misty Rainforest" }); - } - - /** - * Get list of dual lands for this color combo. - * - * @param color - * the color - * @return dual land names - */ - public static List getDualLandList(final ColorSet color) { - - final List dLands = new ArrayList(); - - if (color.countColors() > 3) { - dLands.add("Rupture Spire"); - dLands.add("Undiscovered Paradise"); - } - - if (color.countColors() > 2) { - dLands.add("Evolving Wilds"); - dLands.add("Terramorphic Expanse"); - } - for (Entry dual : dualLands.entrySet()) { - if (color.hasAllColors(dual.getKey())) { - for (String s : dual.getValue()) { - dLands.add(s); - } - } - } - - return dLands; - } - - /** - * Get all dual lands that do not match this color combo. - * - * @param color - * the color - * @return dual land names - */ - public static List getInverseDualLandList(final ColorSet color) { - - final List dLands = new ArrayList(); - - for (Entry dual : dualLands.entrySet()) { - if (!color.hasAllColors(dual.getKey())) { - for (String s : dual.getValue()) { - dLands.add(s); - } - } - } - - return dLands; - } - -} diff --git a/forge-gui/src/main/java/forge/deck/generate/package-info.java b/forge-gui/src/main/java/forge/deck/generate/package-info.java deleted file mode 100644 index 36bf2c15f35..00000000000 --- a/forge-gui/src/main/java/forge/deck/generate/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ -/** Forge Card Game. */ -package forge.deck.generate; - diff --git a/forge-gui/src/main/java/forge/game/limited/LimitedDeckBuilder.java b/forge-gui/src/main/java/forge/game/limited/LimitedDeckBuilder.java index e61f53b1648..cffeb8e77cc 100644 --- a/forge-gui/src/main/java/forge/game/limited/LimitedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/game/limited/LimitedDeckBuilder.java @@ -17,7 +17,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import forge.Singletons; -import forge.Constant.Preferences; + import forge.card.CardAiHints; import forge.card.CardEdition; import forge.card.CardEditionPredicates; @@ -31,20 +31,21 @@ import forge.card.mana.ManaCostShard; import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckSection; -import forge.deck.generate.GenerateDeckUtil; +import forge.deck.generation.DeckGeneratorBase; import forge.item.PaperCard; import forge.item.IPaperCard; +import forge.util.ItemPoolView; import forge.util.MyRandom; /** * Limited format deck. * */ -public class LimitedDeckBuilder { +public class LimitedDeckBuilder extends DeckGeneratorBase{ private int numSpellsNeeded = 22; private int landsNeeded = 18; - private ColorSet colors; + private final DeckColors deckColors; private Predicate hasColor; private final List availableList; @@ -59,6 +60,8 @@ public class LimitedDeckBuilder { private static ReadDraftRankings draftRankings = new ReadDraftRankings(); + private static final boolean logToConsole = false; + /** * * Constructor. @@ -69,6 +72,7 @@ public class LimitedDeckBuilder { * Chosen colors. */ public LimitedDeckBuilder(List dList, DeckColors pClrs) { + super(Singletons.getMagicDb().getCommonCards()); this.availableList = dList; this.deckColors = pClrs; this.colors = pClrs.getChosenColors(); @@ -93,6 +97,11 @@ public class LimitedDeckBuilder { this(list, new DeckColors()); } + @Override + public ItemPoolView getDeck(int size, boolean forAi) { + return buildDeck().getMain(); + } + /** *

* buildDeck. @@ -102,7 +111,7 @@ public class LimitedDeckBuilder { */ public Deck buildDeck() { // 1. Prepare - hasColor = Predicates.or(new GenerateDeckUtil.MatchColorIdentity(colors), GenerateDeckUtil.COLORLESS_CARDS); + hasColor = Predicates.or(new MatchColorIdentity(colors), COLORLESS_CARDS); colorList = Iterables.filter(aiPlayables, Predicates.compose(hasColor, PaperCard.FN_GET_RULES)); onColorCreatures = Iterables.filter(colorList, Predicates.compose(CardRulesPredicates.Presets.IS_CREATURE, PaperCard.FN_GET_RULES)); @@ -144,7 +153,7 @@ public class LimitedDeckBuilder { deckList.add(c); getAiPlayables().remove(c); landsNeeded--; - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Low CMC: " + c.getName()); } } @@ -178,7 +187,7 @@ public class LimitedDeckBuilder { CardPool cp = result.getOrCreate(DeckSection.Sideboard); cp.add(aiPlayables); cp.add(availableList); - if (Preferences.DEV_MODE) { + if (logToConsole) { debugFinalDeck(); } return result; @@ -301,7 +310,7 @@ public class LimitedDeckBuilder { // calculate number of lands for each color final float p = (float) clrCnts[i] / (float) totalColor; final int nLand = Math.round(landsNeeded * p); // desired truncation to int - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.printf("Basics[%s]: %d/%d = %f%% = %d cards%n", MagicColor.Constant.BASIC_LANDS.get(i), clrCnts[i], totalColor, 100*p, nLand); } @@ -359,7 +368,7 @@ public class LimitedDeckBuilder { * Add non-basic lands to the deck. */ private void addNonBasicLands() { - List inverseDuals = GenerateDeckUtil.getInverseDualLandList(colors); + List inverseDuals = getInverseDualLandList(); Iterable lands = Iterables.filter(aiPlayables, Predicates.compose(CardRulesPredicates.Presets.IS_NONBASIC_LAND, PaperCard.FN_GET_RULES)); List> ranked = rankCards(lands); @@ -374,7 +383,7 @@ public class LimitedDeckBuilder { deckList.add(bean.getValue()); aiPlayables.remove(bean.getValue()); landsNeeded--; - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("NonBasicLand[" + landsNeeded + "]:" + bean.getValue().getName()); } } @@ -401,8 +410,8 @@ public class LimitedDeckBuilder { } } - hasColor = Predicates.or(new GenerateDeckUtil.MatchColorIdentity(colors), - GenerateDeckUtil.COLORLESS_CARDS); + hasColor = Predicates.or(new DeckGeneratorBase.MatchColorIdentity(colors), + DeckGeneratorBase.COLORLESS_CARDS); Iterable threeColorList = Iterables.filter(aiPlayables, Predicates.compose(hasColor, PaperCard.FN_GET_RULES)); ranked = rankCards(threeColorList); @@ -411,7 +420,7 @@ public class LimitedDeckBuilder { deckList.add(bean.getValue()); aiPlayables.remove(bean.getValue()); nCards--; - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Third Color[" + nCards + "]:" + bean.getValue().getName() + "(" + bean.getValue().getRules().getManaCost() + ")"); } @@ -436,7 +445,7 @@ public class LimitedDeckBuilder { deckList.add(bean.getValue()); aiPlayables.remove(bean.getValue()); nCards--; - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Random[" + nCards + "]:" + bean.getValue().getName() + "(" + bean.getValue().getRules().getManaCost() + ")"); } @@ -460,7 +469,7 @@ public class LimitedDeckBuilder { deckList.add(cardToAdd); num--; getAiPlayables().remove(cardToAdd); - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Others[" + num + "]:" + cardToAdd.getName() + " (" + cardToAdd.getRules().getManaCost() + ")"); } @@ -486,7 +495,7 @@ public class LimitedDeckBuilder { if (hints != null && hints.getType() != DeckHints.Type.NONE) { Iterable onColor = Iterables.filter(aiPlayables, Predicates.compose(hasColor, PaperCard.FN_GET_RULES)); List comboCards = hints.filter(onColor); - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Found " + comboCards.size() + " cards for " + cardToAdd.getName()); } for (Pair comboBean : rankCards(comboCards)) { @@ -535,7 +544,7 @@ public class LimitedDeckBuilder { comboCards.addAll(hints.filter(deckList)); } if (comboCards.isEmpty()) { - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("No combo cards found for " + card.getName() + ", removing it."); } it.remove(); @@ -546,7 +555,7 @@ public class LimitedDeckBuilder { numOthers++; } } else { - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Found " + comboCards.size() + " cards for " + card.getName()); } } @@ -580,7 +589,7 @@ public class LimitedDeckBuilder { deckList.add(c); num--; getAiPlayables().remove(c); - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Creature[" + num + "]:" + c.getName() + " (" + c.getRules().getManaCost() + ")"); } num = addDeckHintsCards(c, num); @@ -645,12 +654,12 @@ public class LimitedDeckBuilder { num--; getAiPlayables().remove(c); creatureCosts.put(cmc, creatureCosts.get(cmc) + 1); - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println("Creature[" + num + "]:" + c.getName() + " (" + c.getRules().getManaCost() + ")"); } num = addDeckHintsCards(c, num); } else { - if (Preferences.DEV_MODE) { + if (logToConsole) { System.out.println(c.getName() + " not added because CMC " + c.getRules().getManaCost().getCMC() + " has " + currentAtCmc + " already."); } diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/gui/deckchooser/DeckgenUtil.java similarity index 89% rename from forge-gui/src/main/java/forge/deck/DeckgenUtil.java rename to forge-gui/src/main/java/forge/gui/deckchooser/DeckgenUtil.java index 9cc76f11791..a5da50e35ba 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/gui/deckchooser/DeckgenUtil.java @@ -1,4 +1,4 @@ -package forge.deck; +package forge.gui.deckchooser; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; @@ -15,14 +15,17 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import forge.Singletons; -import forge.deck.generate.Generate2ColorDeck; -import forge.deck.generate.Generate3ColorDeck; -import forge.deck.generate.Generate5ColorDeck; -import forge.deck.generate.GenerateColoredDeckBase; -import forge.deck.generate.GenerateMonoColorDeck; -import forge.deck.generate.GenerateThemeDeck; +import forge.card.CardDb; +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.item.PaperCard; -import forge.item.PreconDeck; +import forge.properties.ForgePreferences.FPref; import forge.quest.QuestController; import forge.quest.QuestEvent; import forge.quest.QuestEventChallenge; @@ -60,19 +63,20 @@ public class DeckgenUtil { final Deck deck; String deckName = null; - GenerateColoredDeckBase gen = null; - + DeckGeneratorBase gen = null; + CardDb cardDb = Singletons.getMagicDb().getCommonCards(); if (selection.size() == 1) { - gen = new GenerateMonoColorDeck(selection.get(0)); + gen = new DeckGeneratorMonoColor(cardDb, selection.get(0)); } else if (selection.size() == 2) { - gen = new Generate2ColorDeck(selection.get(0), selection.get(1)); + gen = new DeckGenerator2Color(cardDb, selection.get(0), selection.get(1)); } else if (selection.size() == 3) { - gen = new Generate3ColorDeck(selection.get(0), selection.get(1), selection.get(2)); + gen = new DeckGenerator3Color(cardDb, selection.get(0), selection.get(1), selection.get(2)); } else { - gen = new Generate5ColorDeck(); + gen = new DeckGenerator5Color(cardDb); deckName = "5 colors"; } - + gen.setSingleton(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_SINGLETONS)); + gen.setUseArtifacts(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)); ItemPoolView cards = gen == null ? null : gen.getDeck(60, forAi); if(null == deckName) @@ -92,6 +96,8 @@ public class DeckgenUtil { public static Deck buildThemeDeck(final String selection) { final GenerateThemeDeck gen = new GenerateThemeDeck(); final Deck deck = new Deck(); + gen.setSingleton(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_SINGLETONS)); + gen.setUseArtifacts(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)); deck.getMain().addAll(gen.getThemeDeck(selection, 60)); return deck; @@ -162,13 +168,6 @@ public class DeckgenUtil { final String name = allDecks.getItemNames().toArray(new String[0])[rand]; return allDecks.get(name); } - - public static Deck getRandomPreconDeck() { - final IStorage allDecks = QuestController.getPrecons(); - final int rand = (int) (Math.floor(Math.random() * allDecks.size())); - final String name = allDecks.getItemNames().toArray(new String[0])[rand]; - return allDecks.get(name).getDeck(); - } /** @return {@link forge.deck.Deck} */ public static Deck getRandomQuestDeck() { diff --git a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java index 8f16ad9916d..836bafc8633 100644 --- a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java +++ b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java @@ -22,8 +22,6 @@ import org.apache.commons.lang3.ArrayUtils; import forge.Command; import forge.Singletons; import forge.deck.Deck; -import forge.deck.DeckgenUtil; -import forge.deck.generate.GenerateThemeDeck; import forge.game.RegisteredPlayer; import forge.gui.MouseUtil; import forge.gui.MouseUtil.MouseCursor; diff --git a/forge-gui/src/main/java/forge/deck/generate/GenerateThemeDeck.java b/forge-gui/src/main/java/forge/gui/deckchooser/GenerateThemeDeck.java similarity index 97% rename from forge-gui/src/main/java/forge/deck/generate/GenerateThemeDeck.java rename to forge-gui/src/main/java/forge/gui/deckchooser/GenerateThemeDeck.java index 150b1331b73..d4f9cf8228c 100644 --- a/forge-gui/src/main/java/forge/deck/generate/GenerateThemeDeck.java +++ b/forge-gui/src/main/java/forge/gui/deckchooser/GenerateThemeDeck.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.deck.generate; +package forge.gui.deckchooser; import java.io.File; import java.util.ArrayList; @@ -23,6 +23,7 @@ import java.util.List; import java.util.Random; import forge.Singletons; +import forge.deck.generation.DeckGeneratorBase; import forge.error.BugReporter; import forge.item.PaperCard; import forge.util.FileUtil; @@ -37,7 +38,7 @@ import forge.util.MyRandom; * @author Forge * @version $Id$ */ -public class GenerateThemeDeck extends GenerateColoredDeckBase { +public class GenerateThemeDeck extends DeckGeneratorBase { private int basicLandPercentage = 0; private boolean testing = false; @@ -47,6 +48,7 @@ public class GenerateThemeDeck extends GenerateColoredDeckBase { *

*/ public GenerateThemeDeck() { + super(Singletons.getMagicDb().getCommonCards()); this.maxDuplicates = 4; } diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java b/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java index b4527dad450..78125e04962 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java @@ -38,6 +38,7 @@ import javax.swing.text.ElementIterator; import org.apache.commons.lang3.StringUtils; import net.miginfocom.swing.MigLayout; +import forge.Singletons; import forge.deck.Deck; import forge.deck.DeckBase; import forge.deck.DeckRecognizer; @@ -221,7 +222,7 @@ public class DeckImport ex final ElementIterator it = new ElementIterator(this.txtInput.getDocument().getDefaultRootElement()); Element e; - DeckRecognizer recognizer = new DeckRecognizer(newEditionCheck.isSelected()); + DeckRecognizer recognizer = new DeckRecognizer(newEditionCheck.isSelected(), Singletons.getMagicDb().getCommonCards()); if(dateTimeCheck.isSelected()) recognizer.setDateConstraint(monthDropdown.getSelectedIndex(), yearDropdown.getSelectedItem()); diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CDeckgen.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CDeckgen.java index 3753f4b82de..b661cc560bf 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CDeckgen.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CDeckgen.java @@ -6,13 +6,16 @@ import com.google.common.collect.Iterables; import forge.Command; import forge.Singletons; +import forge.card.CardDb; import forge.card.CardRulesPredicates; import forge.card.MagicColor; import forge.deck.Deck; import forge.deck.DeckBase; -import forge.deck.generate.Generate2ColorDeck; -import forge.deck.generate.Generate3ColorDeck; -import forge.deck.generate.Generate5ColorDeck; +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.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.SEditorIO; import forge.gui.deckeditor.views.VDeckgen; @@ -20,6 +23,7 @@ import forge.gui.framework.ICDoc; import forge.gui.toolbox.FLabel; import forge.item.PaperCard; import forge.item.InventoryItem; +import forge.properties.ForgePreferences.FPref; import forge.util.Aggregates; @@ -100,22 +104,22 @@ public enum CDeckgen implements ICDoc { if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; } final Deck genConstructed = new Deck(); - + CardDb cardDb = Singletons.getMagicDb().getCommonCards(); + DeckGeneratorBase gen = null; switch (colorCount0) { - case 2: - genConstructed.getMain().addAll((new Generate2ColorDeck(null, null)).getDeck(60, false)); - break; - case 3: - genConstructed.getMain().addAll((new Generate3ColorDeck(null, null, null)).getDeck(60, false)); - break; - case 5: - genConstructed.getMain().addAll((new Generate5ColorDeck()).getDeck(60, false)); - break; - default: + case 1: gen = new DeckGeneratorMonoColor(cardDb, null); break; + case 2: gen = new DeckGenerator2Color(cardDb, null, null); break; + case 3: gen = new DeckGenerator3Color(cardDb, null, null, null); break; + case 5: gen = new DeckGenerator5Color(cardDb); break; + } + + if( null != gen ) { + gen.setSingleton(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_SINGLETONS)); + gen.setUseArtifacts(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS)); + genConstructed.getMain().addAll(gen.getDeck(60, false)); } - final ACEditorBase ed = (ACEditorBase) - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); + final ACEditorBase ed = (ACEditorBase) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); ed.getDeckController().setModel((TModel) genConstructed); } diff --git a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java index 3cf6dbca5eb..7598015e44a 100644 --- a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java +++ b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java @@ -15,13 +15,13 @@ import forge.Command; import forge.FThreads; import forge.Singletons; import forge.deck.Deck; -import forge.deck.DeckgenUtil; import forge.game.GameType; import forge.game.Match; import forge.game.RegisteredPlayer; import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; +import forge.gui.deckchooser.DeckgenUtil; import forge.gui.framework.ICDoc; import forge.net.FServer; import forge.net.Lobby; diff --git a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java index c1daabee259..93925e90dc3 100644 --- a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java +++ b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java @@ -14,14 +14,14 @@ import forge.Command; import forge.FThreads; import forge.Singletons; import forge.deck.Deck; -import forge.deck.DeckgenUtil; -import forge.deck.DeckgenUtil.DeckTypes; import forge.game.GameType; import forge.game.Match; import forge.game.RegisteredPlayer; import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; +import forge.gui.deckchooser.DeckgenUtil; +import forge.gui.deckchooser.DeckgenUtil.DeckTypes; import forge.gui.framework.ICDoc; import forge.net.FServer; import forge.net.Lobby; diff --git a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java index 0b60abb2a88..316c66141f2 100644 --- a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java +++ b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java @@ -15,12 +15,12 @@ import forge.FThreads; import forge.Singletons; import forge.deck.Deck; import forge.deck.DeckSection; -import forge.deck.DeckgenUtil; import forge.game.GameType; import forge.game.Match; import forge.game.RegisteredPlayer; import forge.gui.GuiDialog; import forge.gui.SOverlayUtils; +import forge.gui.deckchooser.DeckgenUtil; import forge.gui.deckchooser.FDeckChooser; import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.controllers.CEditorVariant; diff --git a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java index 273e8b8149f..534d19e635c 100644 --- a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java +++ b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java @@ -15,13 +15,13 @@ import forge.FThreads; import forge.Singletons; import forge.deck.Deck; import forge.deck.DeckSection; -import forge.deck.DeckgenUtil; import forge.game.GameType; import forge.game.Match; import forge.game.RegisteredPlayer; import forge.game.player.LobbyPlayer; import forge.gui.GuiDialog; import forge.gui.SOverlayUtils; +import forge.gui.deckchooser.DeckgenUtil; import forge.gui.deckchooser.FDeckChooser; import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.controllers.CEditorVariant; diff --git a/forge-gui/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java b/forge-gui/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java index 710d77bec36..172a0844fea 100644 --- a/forge-gui/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java +++ b/forge-gui/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java @@ -3,6 +3,9 @@ package forge.deck.generate; import org.testng.Assert; import org.testng.annotations.Test; +import forge.Singletons; +import forge.card.CardDb; +import forge.deck.generation.DeckGenerator2Color; import forge.item.PaperCard; import forge.util.ItemPoolView; @@ -17,7 +20,8 @@ public class Generate2ColorDeckTest { */ @Test(enabled = false) public void generate2ColorDeckTest1() { - final Generate2ColorDeck gen = new Generate2ColorDeck("white", "blue"); + CardDb cardDb = Singletons.getMagicDb().getCommonCards(); + final DeckGenerator2Color gen = new DeckGenerator2Color(cardDb, "white", "blue"); final ItemPoolView cardList = gen.getDeck(60, false); Assert.assertNotNull(cardList); } diff --git a/forge-gui/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java b/forge-gui/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java index 0000138366f..905ed8c2140 100644 --- a/forge-gui/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java +++ b/forge-gui/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java @@ -3,6 +3,9 @@ package forge.deck.generate; import org.testng.Assert; import org.testng.annotations.Test; +import forge.Singletons; +import forge.card.CardDb; +import forge.deck.generation.DeckGenerator3Color; import forge.item.PaperCard; import forge.util.ItemPoolView; @@ -17,7 +20,8 @@ public class Generate3ColorDeckTest { */ @Test(timeOut = 1000, enabled = false) public void generate3ColorDeckTest1() { - final Generate3ColorDeck gen = new Generate3ColorDeck("white", "blue", "black"); + CardDb cardDb = Singletons.getMagicDb().getCommonCards(); + final DeckGenerator3Color gen = new DeckGenerator3Color(cardDb, "white", "blue", "black"); final ItemPoolView cardList = gen.getDeck(60, false); Assert.assertNotNull(cardList); } diff --git a/forge-gui/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java b/forge-gui/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java index ba16c147a9f..a880df8e75e 100644 --- a/forge-gui/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java +++ b/forge-gui/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java @@ -3,6 +3,9 @@ package forge.deck.generate; import org.testng.Assert; import org.testng.annotations.Test; +import forge.Singletons; +import forge.card.CardDb; +import forge.deck.generation.DeckGenerator5Color; import forge.item.PaperCard; import forge.util.ItemPoolView; @@ -17,7 +20,8 @@ public class Generate5ColorDeckTest { */ @Test(timeOut = 1000, enabled = false) public void generate5ColorDeckTest1() { - final Generate5ColorDeck gen = new Generate5ColorDeck(); + CardDb cardDb = Singletons.getMagicDb().getCommonCards(); + final DeckGenerator5Color gen = new DeckGenerator5Color(cardDb); final ItemPoolView cardList = gen.getDeck(60, false); Assert.assertNotNull(cardList); }