Refactor random and color deck generators

This commit is contained in:
drdev
2014-08-03 16:07:24 +00:00
parent 846fd1aa34
commit a7f9837601
8 changed files with 179 additions and 251 deletions

3
.gitattributes vendored
View File

@@ -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/GameStage.java -text
forge-game/src/main/java/forge/game/GameType.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/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/Match.java -text
forge-game/src/main/java/forge/game/PlanarDice.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 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/FControlGameEventHandler.java -text
forge-gui/src/main/java/forge/control/FControlGamePlayback.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/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/DeckGeneratorTheme.java -text
forge-gui/src/main/java/forge/deck/DeckProxy.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/DeckType.java -text
forge-gui/src/main/java/forge/deck/DeckgenUtil.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/DeckHtmlSerializer.java -text
forge-gui/src/main/java/forge/deck/io/DeckPreferences.java -text forge-gui/src/main/java/forge/deck/io/DeckPreferences.java -text
forge-gui/src/main/java/forge/deck/io/OldDeckParser.java -text forge-gui/src/main/java/forge/deck/io/OldDeckParser.java -text

View File

@@ -0,0 +1,5 @@
package forge.game;
public interface IHasGameType {
GameType getGameType();
}

View File

@@ -1,10 +1,12 @@
package forge.deckchooser; package forge.deckchooser;
import forge.UiCommand; import forge.UiCommand;
import forge.deck.ColorDeckGenerator;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckProxy; import forge.deck.DeckProxy;
import forge.deck.DeckType; import forge.deck.DeckType;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
import forge.deck.RandomDeckGenerator;
import forge.game.GameType; import forge.game.GameType;
import forge.game.player.RegisteredPlayer; import forge.game.player.RegisteredPlayer;
import forge.itemmanager.DeckManager; import forge.itemmanager.DeckManager;
@@ -18,8 +20,6 @@ import forge.quest.QuestEvent;
import forge.quest.QuestEventChallenge; import forge.quest.QuestEventChallenge;
import forge.quest.QuestUtil; import forge.quest.QuestUtil;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.util.Aggregates;
import forge.util.storage.IStorage;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -95,138 +95,6 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
lstDecks.setSelectedIndex(0); lstDecks.setSelectedIndex(0);
} }
private class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDeckGenerator> {
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<String> selection = new ArrayList<String>();
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<RandomDeckGenerator> {
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<Deck> 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<Deck> decks = FModel.getDecks().getScheme();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generateSchemeDeck();
case Planechase:
if (sel.equals("Random User Deck")) {
IStorage<Deck> decks = FModel.getDecks().getPlane();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generatePlanarDeck();
default:
if (sel.equals("Random User Deck")) {
IStorage<Deck> 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<String> colors = new ArrayList<String>();
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() { private void updateColors() {
lstDecks.setAllowMultipleSelections(true); lstDecks.setAllowMultipleSelections(true);
@@ -234,7 +102,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
"White", "Blue", "Black", "Red", "Green" }; "White", "Blue", "Black", "Red", "Green" };
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>(); ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
for (int i = 0; i < colors.length; i++) { 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); lstDecks.setPool(decks);
@@ -307,8 +175,8 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
lstDecks.setAllowMultipleSelections(false); lstDecks.setAllowMultipleSelections(false);
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>(); ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
decks.add(new RandomDeckGenerator("Random Generated Deck", 0)); decks.add(new RandomDeckGenerator("Random Generated Deck", 0, lstDecks, isAi));
decks.add(new RandomDeckGenerator("Random User Deck", 1)); decks.add(new RandomDeckGenerator("Random User Deck", 1, lstDecks, isAi));
lstDecks.setPool(decks); lstDecks.setPool(decks);
lstDecks.setup(ItemManagerConfig.STRING_ONLY); lstDecks.setup(ItemManagerConfig.STRING_ONLY);

View File

@@ -8,6 +8,7 @@ import forge.deck.DeckProxy;
import forge.deck.io.DeckPreferences; import forge.deck.io.DeckPreferences;
import forge.game.GameFormat; import forge.game.GameFormat;
import forge.game.GameType; import forge.game.GameType;
import forge.game.IHasGameType;
import forge.gui.GuiUtils; import forge.gui.GuiUtils;
import forge.gui.framework.FScreen; import forge.gui.framework.FScreen;
import forge.item.InventoryItem; import forge.item.InventoryItem;
@@ -25,11 +26,13 @@ import forge.screens.deckeditor.controllers.CEditorQuest;
import forge.screens.home.quest.DialogChooseSets; import forge.screens.home.quest.DialogChooseSets;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin; import forge.toolbox.FSkin;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionListener;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.*; import java.util.*;
@@ -41,7 +44,7 @@ import java.util.Map.Entry;
* *
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public final class DeckManager extends ItemManager<DeckProxy> { public final class DeckManager extends ItemManager<DeckProxy> implements IHasGameType {
private static final FSkin.SkinIcon icoDelete = FSkin.getIcon(FSkinProp.ICO_DELETE); 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 icoDeleteOver = FSkin.getIcon(FSkinProp.ICO_DELETE_OVER);
private static final FSkin.SkinIcon icoEdit = FSkin.getIcon(FSkinProp.ICO_EDIT); private static final FSkin.SkinIcon icoEdit = FSkin.getIcon(FSkinProp.ICO_EDIT);

View File

@@ -21,7 +21,6 @@ import forge.toolbox.FComboBox;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.util.Aggregates;
import forge.util.Callback; import forge.util.Callback;
import forge.util.Utils; import forge.util.Utils;
import forge.util.storage.IStorage; import forge.util.storage.IStorage;
@@ -233,6 +232,7 @@ public class FDeckChooser extends FScreen {
cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK); cmbDeckTypes.addItem(DeckType.QUEST_OPPONENT_DECK);
cmbDeckTypes.addItem(DeckType.COLOR_DECK); cmbDeckTypes.addItem(DeckType.COLOR_DECK);
cmbDeckTypes.addItem(DeckType.THEME_DECK); cmbDeckTypes.addItem(DeckType.THEME_DECK);
cmbDeckTypes.addItem(DeckType.RANDOM_DECK);
} }
else { else {
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK); cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
@@ -340,49 +340,6 @@ public class FDeckChooser extends FScreen {
}); });
} }
private class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDeckGenerator> {
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<String> selection = new ArrayList<String>();
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() { private void updateColors() {
lstDecks.setSelectionSupport(1, 3); //TODO: Consider supporting more than 3 color random decks 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" }; "White", "Blue", "Black", "Red", "Green" };
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>(); ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
for (int i = 0; i < colors.length; i++) { 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); lstDecks.setPool(decks);
@@ -436,77 +393,12 @@ public class FDeckChooser extends FScreen {
}); });
} }
private class RandomDeckGenerator extends DeckProxy implements Comparable<RandomDeckGenerator> {
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<Deck> decks = FModel.getDecks().getCommander();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generateCommanderDeck(isAi);
case Archenemy:
if (sel.equals("Random")) {
IStorage<Deck> decks = FModel.getDecks().getScheme();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generateSchemeDeck();
case Planechase:
if (sel.equals("Random")) {
IStorage<Deck> 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() { private void updateRandom() {
lstDecks.setSelectionSupport(1, 1); lstDecks.setSelectionSupport(1, 1);
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>(); ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
decks.add(new RandomDeckGenerator("Random Generated Deck", 0)); decks.add(new RandomDeckGenerator("Random Generated Deck", 0, lstDecks, isAi));
decks.add(new RandomDeckGenerator("Random User Deck", 1)); decks.add(new RandomDeckGenerator("Random User Deck", 1, lstDecks, isAi));
lstDecks.setPool(decks); lstDecks.setPool(decks);
lstDecks.setup(ItemManagerConfig.STRING_ONLY); lstDecks.setup(ItemManagerConfig.STRING_ONLY);

View File

@@ -11,6 +11,7 @@ import forge.deck.DeckProxy;
import forge.deck.FDeckViewer; import forge.deck.FDeckViewer;
import forge.deck.io.DeckPreferences; import forge.deck.io.DeckPreferences;
import forge.game.GameType; import forge.game.GameType;
import forge.game.IHasGameType;
import forge.itemmanager.filters.DeckColorFilter; import forge.itemmanager.filters.DeckColorFilter;
import forge.itemmanager.filters.DeckFormatFilter; import forge.itemmanager.filters.DeckFormatFilter;
import forge.itemmanager.filters.DeckSearchFilter; import forge.itemmanager.filters.DeckSearchFilter;
@@ -27,7 +28,7 @@ import java.util.Map.Entry;
* ItemManager for decks * ItemManager for decks
* *
*/ */
public final class DeckManager extends ItemManager<DeckProxy> { public final class DeckManager extends ItemManager<DeckProxy> implements IHasGameType {
private final GameType gameType; private final GameType gameType;
/** /**

View File

@@ -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<ColorDeckGenerator> {
private String name;
private int index;
private final IItemManager<DeckProxy> lstDecks;
private final boolean isAi;
public ColorDeckGenerator(String name0, int index0, IItemManager<DeckProxy> 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<String> selection = new ArrayList<String>();
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;
}
}

View File

@@ -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<RandomDeckGenerator> {
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<Deck> decks = FModel.getDecks().getCommander();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generateCommanderDeck(isAi);
case Archenemy:
if (index == 1) {
IStorage<Deck> decks = FModel.getDecks().getScheme();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generateSchemeDeck();
case Planechase:
if (index == 1) {
IStorage<Deck> decks = FModel.getDecks().getPlane();
if (decks.size() > 0) {
return Aggregates.random(decks);
}
}
return DeckgenUtil.generatePlanarDeck();
default:
if (index == 1) {
IStorage<Deck> 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<String> colors = new ArrayList<String>();
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;
}
}