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

View File

@@ -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<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() {
lstDecks.setAllowMultipleSelections(true);
@@ -234,7 +102,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
"White", "Blue", "Black", "Red", "Green" };
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
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<DeckProxy> decks = new ArrayList<DeckProxy>();
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);

View File

@@ -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<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 icoDeleteOver = FSkin.getIcon(FSkinProp.ICO_DELETE_OVER);
private static final FSkin.SkinIcon icoEdit = FSkin.getIcon(FSkinProp.ICO_EDIT);