From a7f9837601dc2a2dfaca38ec3d1aabab941c9e7e Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 3 Aug 2014 16:07:24 +0000 Subject: [PATCH] Refactor random and color deck generators --- .gitattributes | 3 + .../main/java/forge/game/IHasGameType.java | 5 + .../java/forge/deckchooser/FDeckChooser.java | 142 +----------------- .../java/forge/itemmanager/DeckManager.java | 5 +- .../src/forge/deck/FDeckChooser.java | 116 +------------- .../src/forge/itemmanager/DeckManager.java | 3 +- .../java/forge/deck/ColorDeckGenerator.java | 55 +++++++ .../java/forge/deck/RandomDeckGenerator.java | 101 +++++++++++++ 8 files changed, 179 insertions(+), 251 deletions(-) create mode 100644 forge-game/src/main/java/forge/game/IHasGameType.java create mode 100644 forge-gui/src/main/java/forge/deck/ColorDeckGenerator.java create mode 100644 forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java diff --git a/.gitattributes b/.gitattributes index c539f3c7be1..560136e38d0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -277,6 +277,7 @@ forge-game/src/main/java/forge/game/GameRules.java -text forge-game/src/main/java/forge/game/GameStage.java -text forge-game/src/main/java/forge/game/GameType.java -text forge-game/src/main/java/forge/game/GlobalRuleChange.java -text +forge-game/src/main/java/forge/game/IHasGameType.java -text forge-game/src/main/java/forge/game/Match.java -text forge-game/src/main/java/forge/game/PlanarDice.java -text forge-game/src/main/java/forge/game/StaticEffect.java svneol=native#text/plain @@ -16604,10 +16605,12 @@ forge-gui/src/main/java/forge/control/ChatArea.java -text forge-gui/src/main/java/forge/control/FControlGameEventHandler.java -text forge-gui/src/main/java/forge/control/FControlGamePlayback.java -text forge-gui/src/main/java/forge/control/package-info.java -text +forge-gui/src/main/java/forge/deck/ColorDeckGenerator.java -text forge-gui/src/main/java/forge/deck/DeckGeneratorTheme.java -text forge-gui/src/main/java/forge/deck/DeckProxy.java -text forge-gui/src/main/java/forge/deck/DeckType.java -text forge-gui/src/main/java/forge/deck/DeckgenUtil.java -text +forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java -text forge-gui/src/main/java/forge/deck/io/DeckHtmlSerializer.java -text forge-gui/src/main/java/forge/deck/io/DeckPreferences.java -text forge-gui/src/main/java/forge/deck/io/OldDeckParser.java -text diff --git a/forge-game/src/main/java/forge/game/IHasGameType.java b/forge-game/src/main/java/forge/game/IHasGameType.java new file mode 100644 index 00000000000..9dc58a9577b --- /dev/null +++ b/forge-game/src/main/java/forge/game/IHasGameType.java @@ -0,0 +1,5 @@ +package forge.game; + +public interface IHasGameType { + GameType getGameType(); +} diff --git a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java index 0dd1964c91f..4cc0fa359b3 100644 --- a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java +++ b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java @@ -1,10 +1,12 @@ package forge.deckchooser; import forge.UiCommand; +import forge.deck.ColorDeckGenerator; import forge.deck.Deck; import forge.deck.DeckProxy; import forge.deck.DeckType; import forge.deck.DeckgenUtil; +import forge.deck.RandomDeckGenerator; import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.itemmanager.DeckManager; @@ -18,8 +20,6 @@ import forge.quest.QuestEvent; import forge.quest.QuestEventChallenge; import forge.quest.QuestUtil; import forge.toolbox.FLabel; -import forge.util.Aggregates; -import forge.util.storage.IStorage; import net.miginfocom.swing.MigLayout; import org.apache.commons.lang3.StringUtils; @@ -95,138 +95,6 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lstDecks.setSelectedIndex(0); } - private class ColorDeckGenerator extends DeckProxy implements Comparable { - private String name; - private int index; - - public ColorDeckGenerator(String name0, int index0) { - super(); - name = name0; - this.index = index0; - } - - @Override - public String getName() { - return name; - } - - @Override - public String toString() { - return name; - } - - - @Override - public int compareTo(final ColorDeckGenerator d) { - return d instanceof ColorDeckGenerator ? Integer.compare(this.index, ((ColorDeckGenerator)d).index) : 1; - } - - @Override - public Deck getDeck() { - List selection = new ArrayList(); - for (DeckProxy deck : lstDecks.getSelectedItems()) { - selection.add(deck.getName()); - } - if (DeckgenUtil.colorCheck(selection)) { - return DeckgenUtil.buildColorDeck(selection, isAi); - } - return null; - } - - @Override - public boolean isGeneratedDeck() { - return true; - } - } - - private class RandomDeckGenerator extends DeckProxy implements Comparable { - private String name; - private int index; - - public RandomDeckGenerator(String name0, int index0) { - super(); - name = name0; - index = index0; - } - - @Override - public String getName() { - return name; - } - - @Override - public String toString() { - return name; - } - - @Override - public int compareTo(final RandomDeckGenerator d) { - return d instanceof RandomDeckGenerator ? Integer.compare(index, ((RandomDeckGenerator)d).index) : 1; - } - - @Override - public Deck getDeck() { - String sel = lstDecks.getSelectedItem().getName(); - switch (lstDecks.getGameType()) { - case Commander: - if (sel.equals("Random User Deck")) { - IStorage decks = FModel.getDecks().getCommander(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - return DeckgenUtil.generateCommanderDeck(isAi); - case Archenemy: - if (sel.equals("Random User Deck")) { - IStorage decks = FModel.getDecks().getScheme(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - return DeckgenUtil.generateSchemeDeck(); - case Planechase: - if (sel.equals("Random User Deck")) { - IStorage decks = FModel.getDecks().getPlane(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - return DeckgenUtil.generatePlanarDeck(); - default: - if (sel.equals("Random User Deck")) { - IStorage decks = FModel.getDecks().getConstructed(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - while (true) { - switch (Aggregates.random(DeckType.values())) { - case PRECONSTRUCTED_DECK: - return Aggregates.random(DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons())).getDeck(); - case QUEST_OPPONENT_DECK: - return Aggregates.random(DeckProxy.getAllQuestEventAndChallenges()).getDeck(); - case COLOR_DECK: - List colors = new ArrayList(); - int count = Aggregates.randomInt(1, 3); - for (int i = 1; i <= count; i++) { - colors.add("Random " + i); - } - return DeckgenUtil.buildColorDeck(colors, isAi); - case THEME_DECK: - return Aggregates.random(DeckProxy.getAllThemeDecks()).getDeck(); - default: - continue; - } - } - } - } - - @Override - public boolean isGeneratedDeck() { - return true; - } - } - private void updateColors() { lstDecks.setAllowMultipleSelections(true); @@ -234,7 +102,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { "White", "Blue", "Black", "Red", "Green" }; ArrayList decks = new ArrayList(); for (int i = 0; i < colors.length; i++) { - decks.add(new ColorDeckGenerator(colors[i], i)); + decks.add(new ColorDeckGenerator(colors[i], i, lstDecks, isAi)); } lstDecks.setPool(decks); @@ -307,8 +175,8 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lstDecks.setAllowMultipleSelections(false); ArrayList decks = new ArrayList(); - decks.add(new RandomDeckGenerator("Random Generated Deck", 0)); - decks.add(new RandomDeckGenerator("Random User Deck", 1)); + decks.add(new RandomDeckGenerator("Random Generated Deck", 0, lstDecks, isAi)); + decks.add(new RandomDeckGenerator("Random User Deck", 1, lstDecks, isAi)); lstDecks.setPool(decks); lstDecks.setup(ItemManagerConfig.STRING_ONLY); diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java index e4e6d22e6be..1ab329c40b9 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java @@ -8,6 +8,7 @@ import forge.deck.DeckProxy; import forge.deck.io.DeckPreferences; import forge.game.GameFormat; import forge.game.GameType; +import forge.game.IHasGameType; import forge.gui.GuiUtils; import forge.gui.framework.FScreen; import forge.item.InventoryItem; @@ -25,11 +26,13 @@ import forge.screens.deckeditor.controllers.CEditorQuest; import forge.screens.home.quest.DialogChooseSets; import forge.toolbox.FOptionPane; import forge.toolbox.FSkin; + import org.apache.commons.lang3.StringUtils; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; + import java.awt.*; import java.awt.event.MouseEvent; import java.util.*; @@ -41,7 +44,7 @@ import java.util.Map.Entry; * */ @SuppressWarnings("serial") -public final class DeckManager extends ItemManager { +public final class DeckManager extends ItemManager implements IHasGameType { private static final FSkin.SkinIcon icoDelete = FSkin.getIcon(FSkinProp.ICO_DELETE); private static final FSkin.SkinIcon icoDeleteOver = FSkin.getIcon(FSkinProp.ICO_DELETE_OVER); private static final FSkin.SkinIcon icoEdit = FSkin.getIcon(FSkinProp.ICO_EDIT); diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index 0706964cd06..5cfdde2345f 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -21,7 +21,6 @@ import forge.toolbox.FComboBox; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FOptionPane; -import forge.util.Aggregates; import forge.util.Callback; import forge.util.Utils; import forge.util.storage.IStorage; @@ -233,6 +232,7 @@ public class FDeckChooser extends FScreen { cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK); cmbDeckTypes.addItem(DeckType.COLOR_DECK); cmbDeckTypes.addItem(DeckType.THEME_DECK); + cmbDeckTypes.addItem(DeckType.RANDOM_DECK); } else { cmbDeckTypes.addItem(DeckType.CUSTOM_DECK); @@ -340,49 +340,6 @@ public class FDeckChooser extends FScreen { }); } - private class ColorDeckGenerator extends DeckProxy implements Comparable { - private String name; - private int index; - - public ColorDeckGenerator(String name0, int index0) { - super(); - name = name0; - index = index0; - } - - @Override - public String getName() { - return name; - } - - @Override - public String toString() { - return name; - } - - @Override - public int compareTo(final ColorDeckGenerator d) { - return d instanceof ColorDeckGenerator ? Integer.compare(index, ((ColorDeckGenerator)d).index) : 1; - } - - @Override - public Deck getDeck() { - List selection = new ArrayList(); - for (DeckProxy deck : lstDecks.getSelectedItems()) { - selection.add(deck.getName()); - } - if (DeckgenUtil.colorCheck(selection)) { - return DeckgenUtil.buildColorDeck(selection, isAi); - } - return null; - } - - @Override - public boolean isGeneratedDeck() { - return true; - } - } - private void updateColors() { lstDecks.setSelectionSupport(1, 3); //TODO: Consider supporting more than 3 color random decks @@ -390,7 +347,7 @@ public class FDeckChooser extends FScreen { "White", "Blue", "Black", "Red", "Green" }; ArrayList decks = new ArrayList(); for (int i = 0; i < colors.length; i++) { - decks.add(new ColorDeckGenerator(colors[i], i)); + decks.add(new ColorDeckGenerator(colors[i], i, lstDecks, isAi)); } lstDecks.setPool(decks); @@ -436,77 +393,12 @@ public class FDeckChooser extends FScreen { }); } - private class RandomDeckGenerator extends DeckProxy implements Comparable { - private String name; - private int index; - - public RandomDeckGenerator(String name0, int index0) { - super(); - name = name0; - index = index0; - } - - @Override - public String getName() { - return name; - } - - @Override - public String toString() { - return name; - } - - @Override - public int compareTo(final RandomDeckGenerator d) { - return d instanceof RandomDeckGenerator ? Integer.compare(index, ((RandomDeckGenerator)d).index) : 1; - } - - @Override - public Deck getDeck() { - String sel = lstDecks.getSelectedItem().getName(); - switch (lstDecks.getGameType()) { - case Commander: - if (sel.equals("Random")) { - IStorage decks = FModel.getDecks().getCommander(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - return DeckgenUtil.generateCommanderDeck(isAi); - case Archenemy: - if (sel.equals("Random")) { - IStorage decks = FModel.getDecks().getScheme(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - return DeckgenUtil.generateSchemeDeck(); - case Planechase: - if (sel.equals("Random")) { - IStorage decks = FModel.getDecks().getPlane(); - if (decks.size() > 0) { - return Aggregates.random(decks); - } - } - return DeckgenUtil.generatePlanarDeck(); - default: - break; - } - return null; - } - - @Override - public boolean isGeneratedDeck() { - return true; - } - } - private void updateRandom() { lstDecks.setSelectionSupport(1, 1); ArrayList decks = new ArrayList(); - decks.add(new RandomDeckGenerator("Random Generated Deck", 0)); - decks.add(new RandomDeckGenerator("Random User Deck", 1)); + decks.add(new RandomDeckGenerator("Random Generated Deck", 0, lstDecks, isAi)); + decks.add(new RandomDeckGenerator("Random User Deck", 1, lstDecks, isAi)); lstDecks.setPool(decks); lstDecks.setup(ItemManagerConfig.STRING_ONLY); diff --git a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java index 3f8292646a3..0e700447d03 100644 --- a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java @@ -11,6 +11,7 @@ import forge.deck.DeckProxy; import forge.deck.FDeckViewer; import forge.deck.io.DeckPreferences; import forge.game.GameType; +import forge.game.IHasGameType; import forge.itemmanager.filters.DeckColorFilter; import forge.itemmanager.filters.DeckFormatFilter; import forge.itemmanager.filters.DeckSearchFilter; @@ -27,7 +28,7 @@ import java.util.Map.Entry; * ItemManager for decks * */ -public final class DeckManager extends ItemManager { +public final class DeckManager extends ItemManager implements IHasGameType { private final GameType gameType; /** diff --git a/forge-gui/src/main/java/forge/deck/ColorDeckGenerator.java b/forge-gui/src/main/java/forge/deck/ColorDeckGenerator.java new file mode 100644 index 00000000000..23a27a30a2f --- /dev/null +++ b/forge-gui/src/main/java/forge/deck/ColorDeckGenerator.java @@ -0,0 +1,55 @@ +package forge.deck; + +import java.util.ArrayList; +import java.util.List; + +import forge.itemmanager.IItemManager; + + +public class ColorDeckGenerator extends DeckProxy implements Comparable { + private String name; + private int index; + private final IItemManager lstDecks; + private final boolean isAi; + + public ColorDeckGenerator(String name0, int index0, IItemManager lstDecks0, boolean isAi0) { + super(); + name = name0; + index = index0; + lstDecks = lstDecks0; + isAi = isAi0; + } + + @Override + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } + + + @Override + public int compareTo(final ColorDeckGenerator d) { + return d instanceof ColorDeckGenerator ? Integer.compare(index, ((ColorDeckGenerator)d).index) : 1; + } + + @Override + public Deck getDeck() { + List selection = new ArrayList(); + for (DeckProxy deck : lstDecks.getSelectedItems()) { + selection.add(deck.getName()); + } + if (DeckgenUtil.colorCheck(selection)) { + return DeckgenUtil.buildColorDeck(selection, isAi); + } + return null; + } + + @Override + public boolean isGeneratedDeck() { + return true; + } +} \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java b/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java new file mode 100644 index 00000000000..f6e883fb19a --- /dev/null +++ b/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java @@ -0,0 +1,101 @@ +package forge.deck; + +import java.util.ArrayList; +import java.util.List; + +import forge.game.IHasGameType; +import forge.model.FModel; +import forge.quest.QuestController; +import forge.util.Aggregates; +import forge.util.storage.IStorage; + +public class RandomDeckGenerator extends DeckProxy implements Comparable { + private final String name; + private final int index; + private final IHasGameType lstDecks; + private final boolean isAi; + + public RandomDeckGenerator(String name0, int index0, IHasGameType lstDecks0, boolean isAi0) { + super(); + name = name0; + index = index0; + lstDecks = lstDecks0; + isAi = isAi0; + } + + @Override + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } + + @Override + public int compareTo(final RandomDeckGenerator d) { + return d instanceof RandomDeckGenerator ? Integer.compare(index, ((RandomDeckGenerator)d).index) : 1; + } + + @Override + public Deck getDeck() { + switch (lstDecks.getGameType()) { + case Commander: + if (index == 1) { + IStorage decks = FModel.getDecks().getCommander(); + if (decks.size() > 0) { + return Aggregates.random(decks); + } + } + return DeckgenUtil.generateCommanderDeck(isAi); + case Archenemy: + if (index == 1) { + IStorage decks = FModel.getDecks().getScheme(); + if (decks.size() > 0) { + return Aggregates.random(decks); + } + } + return DeckgenUtil.generateSchemeDeck(); + case Planechase: + if (index == 1) { + IStorage decks = FModel.getDecks().getPlane(); + if (decks.size() > 0) { + return Aggregates.random(decks); + } + } + return DeckgenUtil.generatePlanarDeck(); + default: + if (index == 1) { + IStorage decks = FModel.getDecks().getConstructed(); + if (decks.size() > 0) { + return Aggregates.random(decks); + } + } + while (true) { + switch (Aggregates.random(DeckType.values())) { + case PRECONSTRUCTED_DECK: + return Aggregates.random(DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons())).getDeck(); + case QUEST_OPPONENT_DECK: + return Aggregates.random(DeckProxy.getAllQuestEventAndChallenges()).getDeck(); + case COLOR_DECK: + List colors = new ArrayList(); + int count = Aggregates.randomInt(1, 3); + for (int i = 1; i <= count; i++) { + colors.add("Random " + i); + } + return DeckgenUtil.buildColorDeck(colors, isAi); + case THEME_DECK: + return Aggregates.random(DeckProxy.getAllThemeDecks()).getDeck(); + default: + continue; + } + } + } + } + + @Override + public boolean isGeneratedDeck() { + return true; + } +}