From 4aa940800067043b302b69dc7473faac01abc9f3 Mon Sep 17 00:00:00 2001 From: austinio7116 Date: Thu, 11 May 2017 23:58:47 +0000 Subject: [PATCH] Improved handling of color selection for deckbuilding and land selection in card-based random decks - including fixing a few bugs with dual land detection regexs --- .gitattributes | 1 + .../deck/generation/DeckGeneratorBase.java | 4 +-- .../forge/limited/CardThemedDeckBuilder.java | 34 ++++++++++++++----- .../main/java/forge/limited/DeckColors.java | 4 +-- .../java/forge/limited/FullDeckColors.java | 10 ++++++ 5 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 forge-gui/src/main/java/forge/limited/FullDeckColors.java diff --git a/.gitattributes b/.gitattributes index 7f9524b7a86..01cfe2e127d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20939,6 +20939,7 @@ forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java -text forge-gui/src/main/java/forge/limited/CustomLimited.java svneol=native#text/plain forge-gui/src/main/java/forge/limited/DeckColors.java svneol=native#text/plain forge-gui/src/main/java/forge/limited/DraftRankCache.java -text +forge-gui/src/main/java/forge/limited/FullDeckColors.java -text forge-gui/src/main/java/forge/limited/GauntletMini.java -text forge-gui/src/main/java/forge/limited/IBoosterDraft.java svneol=native#text/plain forge-gui/src/main/java/forge/limited/LimitedDeckBuilder.java -text 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 c26e3b165b4..26fa6722aa9 100644 --- a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java @@ -393,7 +393,7 @@ public abstract class DeckGeneratorBase { */ protected List getDualLandList() { - + System.out.println("Dual Land Colors: " + colors.toEnumSet().toString()); if (colors.countColors() > 3) { addCardNameToList("Rupture Spire", dLands); addCardNameToList("Undiscovered Paradise", dLands); @@ -445,7 +445,7 @@ public abstract class DeckGeneratorBase { } public List regexFetchLandSearch(Iterable landCards){ - final String fetchPattern="Search your library for a ([^\\s]*) or ([^\\s]*) card"; + final String fetchPattern="Search your library for an* ([^\\s]*) or ([^\\s]*) card"; //final List dLands = new ArrayList(); Map colorLookup= new HashMap<>(); colorLookup.put("Plains","W"); diff --git a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java index 6b33e949d19..1fafc2b01bf 100644 --- a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java @@ -60,6 +60,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { protected Iterable keyCards; protected static final boolean logToConsole = false; + protected static final boolean logColorsToConsole = false; /** @@ -84,11 +85,18 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { deckColors.addColorsOf(c); } } - this.colors = deckColors.getChosenColors(); + colors = deckColors.getChosenColors(); + if (logColorsToConsole) { + System.out.println(keyCard.getName()); + System.out.println("Pre Colors: " + colors.toEnumSet().toString()); + } if(!colors.hasAllColors(keyCard.getRules().getColorIdentity().getColor())){ colors = ColorSet.fromMask(colors.getColor() | keyCard.getRules().getColorIdentity().getColor()); } - + if (logColorsToConsole) { + System.out.println(keyCard.getName()); + System.out.println("Pre Colors: " + colors.toEnumSet().toString()); + } findBasicLandSets(); } @@ -110,7 +118,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { public Deck buildDeck() { // 1. Prepare hasColor = Predicates.or(new MatchColorIdentity(colors), COLORLESS_CARDS); - if (logToConsole) { + if (logColorsToConsole) { System.out.println(keyCard.getName()); System.out.println("Colors: " + colors.toEnumSet().toString()); } @@ -174,7 +182,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { // 7. If not enough cards yet, try to add a third color, // to try and avoid adding purely random cards. addThirdColorCards(numSpellsNeeded - deckList.size()); - if (logToConsole) { + if (logColorsToConsole) { System.out.println("Post 3rd colour : " + deckList.size()); System.out.println("Colors: " + colors.toEnumSet().toString()); } @@ -188,7 +196,17 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { if (logToConsole) { System.out.println("Post Randoms : " + deckList.size()); } - + //TODO: update colors + FullDeckColors finalDeckColors = new FullDeckColors(); + for(PaperCard c:deckList){ + if(finalDeckColors.canChoseMoreColors()){ + finalDeckColors.addColorsOf(c); + } + } + colors = finalDeckColors.getChosenColors(); + if (logColorsToConsole) { + System.out.println("Final Colors: " + colors.toEnumSet().toString()); + } // 10. Add non-basic lands that were drafted. addWastesIfRequired(); List duals = getDualLandList(); @@ -833,11 +851,11 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { } /** - * @param colors + * @param colors0 * the colors to set */ - public void setColors(final ColorSet colors) { - this.colors = colors; + public void setColors(final ColorSet colors0) { + colors = colors0; } /** diff --git a/forge-gui/src/main/java/forge/limited/DeckColors.java b/forge-gui/src/main/java/forge/limited/DeckColors.java index 5a7ccf9437b..b93a20f06a6 100644 --- a/forge-gui/src/main/java/forge/limited/DeckColors.java +++ b/forge-gui/src/main/java/forge/limited/DeckColors.java @@ -28,7 +28,7 @@ public class DeckColors { private ColorSet chosen; private int colorMask; - public final static int MAX_COLORS = 2; + public int MAX_COLORS = 2; public ColorSet getChosenColors() { if (null == chosen) { @@ -47,7 +47,7 @@ public class DeckColors { return; } - for (final byte color : MagicColor.WUBRGC) { + for (final byte color : MagicColor.WUBRG) { if (toAdd.hasAnyColor(color)) { colorMask |= color; chosen = null; // invalidate color set diff --git a/forge-gui/src/main/java/forge/limited/FullDeckColors.java b/forge-gui/src/main/java/forge/limited/FullDeckColors.java new file mode 100644 index 00000000000..e8e7a67d36d --- /dev/null +++ b/forge-gui/src/main/java/forge/limited/FullDeckColors.java @@ -0,0 +1,10 @@ +package forge.limited; + +/** + * Created by maustin on 11/05/2017. + */ +public class FullDeckColors extends DeckColors { + public FullDeckColors(){ + MAX_COLORS = 5; + } +}