mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
DeckManagers use DeckProxies
This commit is contained in:
@@ -31,7 +31,6 @@ import java.util.TreeSet;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.StaticData;
|
||||
@@ -307,29 +306,4 @@ public class Deck extends DeckBase implements Iterable<Entry<DeckSection, CardPo
|
||||
}
|
||||
return ColorSet.fromMask(colorProfile);
|
||||
}
|
||||
|
||||
//create predicate that applys a card predicate to all cards in deck
|
||||
public static final Predicate<Deck> createPredicate(final Predicate<PaperCard> cardPredicate) {
|
||||
return new Predicate<Deck>() {
|
||||
@Override
|
||||
public boolean apply(Deck input) {
|
||||
for (Entry<DeckSection, CardPool> deckEntry : input) {
|
||||
switch (deckEntry.getKey()) {
|
||||
case Main:
|
||||
case Sideboard:
|
||||
case Commander:
|
||||
for (Entry<PaperCard, Integer> poolEntry : deckEntry.getValue()) {
|
||||
if (!cardPredicate.apply(poolEntry.getKey())) {
|
||||
return false; //all cards in deck must pass card predicate to pass deck predicate
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break; //ignore other sections
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,17 +13,15 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.game.GameType;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.itemmanager.DeckManager;
|
||||
import forge.gui.toolbox.itemmanager.ItemManagerContainer;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.quest.QuestController;
|
||||
import forge.quest.QuestEvent;
|
||||
import forge.quest.QuestEventChallenge;
|
||||
import forge.quest.QuestUtil;
|
||||
@@ -79,7 +77,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
private void updateCustom() {
|
||||
lstDecks.setAllowMultipleSelections(false);
|
||||
|
||||
lstDecks.setPool(Singletons.getModel().getDecks().getConstructed());
|
||||
lstDecks.setPool(DeckProxy.getAllConstructedDecks());
|
||||
lstDecks.update();
|
||||
|
||||
btnRandom.setText("Random Deck");
|
||||
@@ -93,43 +91,36 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
lstDecks.setSelectedIndex(0);
|
||||
}
|
||||
|
||||
//Deck that generates its card pool via some algorithm
|
||||
private abstract class DeckGenerator extends Deck {
|
||||
public DeckGenerator(final String name0) {
|
||||
super(name0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DeckBase newInstance(final String name0) {
|
||||
final DeckGenerator deckGen = this;
|
||||
return new DeckGenerator(name0) {
|
||||
@Override
|
||||
public Deck generateDeck() {
|
||||
return deckGen.generateDeck();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public abstract Deck generateDeck();
|
||||
}
|
||||
|
||||
private class ColorDeckGenerator extends DeckGenerator {
|
||||
private class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDeckGenerator> {
|
||||
private String name;
|
||||
private int index;
|
||||
|
||||
public ColorDeckGenerator(String name0, int index0) {
|
||||
super(name0);
|
||||
super(null, null, null);
|
||||
name = name0;
|
||||
this.index = index0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(final DeckBase d) {
|
||||
return d instanceof ColorDeckGenerator ? Integer.compare(this.index, ((ColorDeckGenerator)d).index) : super.compareTo(d);
|
||||
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 generateDeck() {
|
||||
public Deck getDeck() {
|
||||
List<String> selection = new ArrayList<String>();
|
||||
for (Deck deck : lstDecks.getSelectedItems()) {
|
||||
for (DeckProxy deck : lstDecks.getSelectedItems()) {
|
||||
selection.add(deck.getName());
|
||||
}
|
||||
if (DeckgenUtil.colorCheck(selection)) {
|
||||
@@ -144,7 +135,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
|
||||
String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
|
||||
"White", "Blue", "Black", "Red", "Green" };
|
||||
ArrayList<Deck> decks = new ArrayList<Deck>();
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (int i = 0; i < colors.length; i++) {
|
||||
decks.add(new ColorDeckGenerator(colors[i], i));
|
||||
}
|
||||
@@ -164,26 +155,10 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
lstDecks.setSelectedIndices(new Integer[]{0, 1});
|
||||
}
|
||||
|
||||
private class ThemeDeckGenerator extends DeckGenerator {
|
||||
public ThemeDeckGenerator(String name0) {
|
||||
super(name0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Deck generateDeck() {
|
||||
return DeckgenUtil.buildThemeDeck(this.getName());
|
||||
}
|
||||
}
|
||||
|
||||
private void updateThemes() {
|
||||
lstDecks.setAllowMultipleSelections(false);
|
||||
|
||||
ArrayList<Deck> decks = new ArrayList<Deck>();
|
||||
for (final String s : GenerateThemeDeck.getThemeNames()) {
|
||||
decks.add(new ThemeDeckGenerator(s));
|
||||
}
|
||||
|
||||
lstDecks.setPool(decks);
|
||||
lstDecks.setPool(DeckProxy.getAllThemeDecks());
|
||||
lstDecks.update(true);
|
||||
|
||||
btnRandom.setText("Random Deck");
|
||||
@@ -200,12 +175,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
private void updatePrecons() {
|
||||
lstDecks.setAllowMultipleSelections(false);
|
||||
|
||||
ArrayList<Deck> decks = new ArrayList<Deck>();
|
||||
for (final PreconDeck preconDeck : QuestController.getPrecons()) {
|
||||
decks.add(preconDeck.getDeck());
|
||||
}
|
||||
|
||||
lstDecks.setPool(decks);
|
||||
lstDecks.setPool(DeckProxy.getAllPreconstructedDecks());
|
||||
lstDecks.update(false, true);
|
||||
|
||||
btnRandom.setText("Random Deck");
|
||||
@@ -222,16 +192,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
private void updateQuestEvents() {
|
||||
lstDecks.setAllowMultipleSelections(false);
|
||||
|
||||
ArrayList<Deck> decks = new ArrayList<Deck>();
|
||||
QuestController quest = Singletons.getModel().getQuest();
|
||||
for (QuestEvent e : quest.getDuelsManager().getAllDuels()) {
|
||||
decks.add(e.getEventDeck());
|
||||
}
|
||||
for (QuestEvent e : quest.getChallenges()) {
|
||||
decks.add(e.getEventDeck());
|
||||
}
|
||||
|
||||
lstDecks.setPool(decks);
|
||||
lstDecks.setPool(DeckProxy.getAllQuestEventAndChallenges());
|
||||
lstDecks.update(false, true);
|
||||
|
||||
btnRandom.setText("Random Deck");
|
||||
@@ -246,11 +207,8 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
}
|
||||
|
||||
public Deck getDeck() {
|
||||
Deck deck = lstDecks.getSelectedItem();
|
||||
if (deck instanceof DeckGenerator) {
|
||||
return ((DeckGenerator)deck).generateDeck();
|
||||
}
|
||||
return deck;
|
||||
DeckProxy proxy = lstDecks.getSelectedItem();
|
||||
return proxy.getDeck();
|
||||
}
|
||||
|
||||
/** Generates deck from current list selection(s). */
|
||||
@@ -348,31 +306,33 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
|
||||
private String getState() {
|
||||
String deckType = decksComboBox.getDeckType().name();
|
||||
String state = deckType;
|
||||
state += ";";
|
||||
Iterable<Deck> selectedDecks = lstDecks.getSelectedItems();
|
||||
StringBuilder state = new StringBuilder(deckType);
|
||||
state.append(";");
|
||||
joinSelectedDecks(state, SELECTED_DECK_DELIMITER);
|
||||
return state.toString();
|
||||
}
|
||||
|
||||
private void joinSelectedDecks(StringBuilder state, String delimiter) {
|
||||
Iterable<DeckProxy> selectedDecks = lstDecks.getSelectedItems();
|
||||
boolean isFirst = true;
|
||||
if (selectedDecks != null) {
|
||||
for (Deck deck : selectedDecks) {
|
||||
state += deck + SELECTED_DECK_DELIMITER;
|
||||
for (DeckProxy deck : selectedDecks) {
|
||||
if(isFirst)
|
||||
isFirst = false;
|
||||
else
|
||||
state.append(delimiter);
|
||||
state.append(deck.getName());
|
||||
}
|
||||
state = state.substring(0, state.length() - SELECTED_DECK_DELIMITER.length());
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
/** Returns a clean name from the state that can be used for labels. */
|
||||
public final String getStateForLabel() {
|
||||
String deckType = decksComboBox.getDeckType().toString();
|
||||
String state = deckType;
|
||||
state += ": ";
|
||||
Iterable<Deck> selectedDecks = lstDecks.getSelectedItems();
|
||||
if (selectedDecks != null) {
|
||||
for (Deck deck : selectedDecks) {
|
||||
state += deck + ", ";
|
||||
}
|
||||
state = state.substring(0, state.length() - 2);
|
||||
}
|
||||
return state;
|
||||
StringBuilder state = new StringBuilder(deckType);
|
||||
state.append(": ");
|
||||
joinSelectedDecks(state, ", ");
|
||||
return state.toString();
|
||||
}
|
||||
|
||||
private void restoreSavedState() {
|
||||
|
||||
@@ -1,12 +1,28 @@
|
||||
package forge.gui.deckeditor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.card.ColorSet;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckGroup;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.GameFormat;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckchooser.DeckgenUtil;
|
||||
import forge.gui.deckchooser.GenerateThemeDeck;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.PaperCard;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.quest.QuestController;
|
||||
import forge.quest.QuestEvent;
|
||||
import forge.util.storage.IStorage;
|
||||
|
||||
public class DeckProxy implements InventoryItem {
|
||||
@@ -34,6 +50,10 @@ public class DeckProxy implements InventoryItem {
|
||||
return "Deck";
|
||||
}
|
||||
|
||||
public Deck getDeck() {
|
||||
return deck;
|
||||
}
|
||||
|
||||
public void invalidateCache() {
|
||||
color = null;
|
||||
formats = null;
|
||||
@@ -76,6 +96,114 @@ public class DeckProxy implements InventoryItem {
|
||||
|
||||
public void deleteFromStorage() {
|
||||
// if storage is not readonly, delete the deck from there.
|
||||
}
|
||||
|
||||
// TODO: The methods below should not take the decks collections from singletons, instead they are supposed to use data passed in parameters
|
||||
|
||||
public static Iterable<DeckProxy> getAllConstructedDecks() {
|
||||
// This is a temporary solution that does not iterate over subfolders. - will improve
|
||||
|
||||
return Iterables.transform(Singletons.getModel().getDecks().getConstructed(), new Function<Deck, DeckProxy>(){
|
||||
public DeckProxy apply(Deck deck) { return new DeckProxy(deck, GameType.Constructed, Singletons.getModel().getDecks().getConstructed());
|
||||
}});
|
||||
}
|
||||
|
||||
|
||||
//create predicate that applys a card predicate to all cards in deck
|
||||
public static final Predicate<DeckProxy> createPredicate(final Predicate<PaperCard> cardPredicate) {
|
||||
return new Predicate<DeckProxy>() {
|
||||
@Override
|
||||
public boolean apply(DeckProxy input) {
|
||||
for (Entry<DeckSection, CardPool> deckEntry : input.getDeck()) {
|
||||
switch (deckEntry.getKey()) {
|
||||
case Main:
|
||||
case Sideboard:
|
||||
case Commander:
|
||||
for (Entry<PaperCard, Integer> poolEntry : deckEntry.getValue()) {
|
||||
if (!cardPredicate.apply(poolEntry.getKey())) {
|
||||
return false; //all cards in deck must pass card predicate to pass deck predicate
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break; //ignore other sections
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static class ThemeDeckGenerator extends DeckProxy {
|
||||
private final String name;
|
||||
public ThemeDeckGenerator(String name0) {
|
||||
super(null, null, null);
|
||||
name = name0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Deck getDeck() {
|
||||
return DeckgenUtil.buildThemeDeck(this.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() { return name; }
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllThemeDecks() {
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (final String s : GenerateThemeDeck.getThemeNames()) {
|
||||
decks.add(new ThemeDeckGenerator(s));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllPreconstructedDecks() {
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (final PreconDeck preconDeck : QuestController.getPrecons()) {
|
||||
decks.add(new DeckProxy(preconDeck.getDeck(), null, null));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllQuestEventAndChallenges() {
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
QuestController quest = Singletons.getModel().getQuest();
|
||||
for (QuestEvent e : quest.getDuelsManager().getAllDuels()) {
|
||||
decks.add(new DeckProxy(e.getEventDeck(), null, null));
|
||||
}
|
||||
for (QuestEvent e : quest.getChallenges()) {
|
||||
decks.add(new DeckProxy(e.getEventDeck(), null, null));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllSealedDecks(IStorage<DeckGroup> sealed) {
|
||||
final List<DeckProxy> humanDecks = new ArrayList<DeckProxy>();
|
||||
|
||||
// Since AI decks are tied directly to the human choice,
|
||||
// they're just mapped in a parallel map and grabbed when the game starts.
|
||||
for (final DeckGroup d : sealed) {
|
||||
humanDecks.add(new DeckProxy(d.getHumanDeck(), GameType.Sealed, null));
|
||||
}
|
||||
return humanDecks;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllQuestDecks(IStorage<Deck> storage) {
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
if( storage != null )
|
||||
for (final Deck preconDeck : storage) {
|
||||
decks.add(new DeckProxy(preconDeck, GameType.Quest, storage));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getDraftDecks(IStorage<DeckGroup> draft) {
|
||||
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (DeckGroup d : draft) {
|
||||
decks.add(new DeckProxy(d.getHumanDeck(), GameType.Draft, null));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package forge.gui.deckeditor.controllers;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.deckeditor.views.VAllDecks;
|
||||
import forge.gui.framework.ICDoc;
|
||||
|
||||
@@ -30,8 +30,7 @@ public enum CAllDecks implements ICDoc {
|
||||
*/
|
||||
@Override
|
||||
public void initialize() {
|
||||
VAllDecks.SINGLETON_INSTANCE.getLstDecks().setPool(
|
||||
Singletons.getModel().getDecks().getConstructed());
|
||||
VAllDecks.SINGLETON_INSTANCE.getLstDecks().setPool(DeckProxy.getAllConstructedDecks());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package forge.gui.home.quest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
@@ -8,6 +8,7 @@ import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.deckeditor.controllers.CEditorQuest;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
@@ -31,7 +32,7 @@ public enum CSubmenuQuestDecks implements ICDoc {
|
||||
private final Command cmdDeckSelect = new Command() {
|
||||
@Override
|
||||
public void run() {
|
||||
currentDeck = VSubmenuQuestDecks.SINGLETON_INSTANCE.getLstDecks().getSelectedItem();
|
||||
currentDeck = VSubmenuQuestDecks.SINGLETON_INSTANCE.getLstDecks().getSelectedItem().getDeck();
|
||||
Singletons.getModel().getQuestPreferences().setPref(QPref.CURRENT_DECK, currentDeck.toString());
|
||||
Singletons.getModel().getQuestPreferences().save();
|
||||
}
|
||||
@@ -66,7 +67,7 @@ public enum CSubmenuQuestDecks implements ICDoc {
|
||||
final QuestController qData = Singletons.getModel().getQuest();
|
||||
boolean hasQuest = qData.getAssets() != null;
|
||||
// Retrieve and set all decks
|
||||
view.getLstDecks().setPool(hasQuest ? qData.getMyDecks() : new ArrayList<Deck>());
|
||||
view.getLstDecks().setPool(DeckProxy.getAllQuestDecks(hasQuest ? qData.getMyDecks() : null));
|
||||
view.getLstDecks().update();
|
||||
|
||||
// Look through list for preferred deck from prefs
|
||||
@@ -75,13 +76,11 @@ public enum CSubmenuQuestDecks implements ICDoc {
|
||||
if (hasQuest) {
|
||||
final String cd = Singletons.getModel().getQuestPreferences().getPref(QPref.CURRENT_DECK);
|
||||
|
||||
for (Deck d : qData.getMyDecks()) {
|
||||
if (d.getName() != null && d.getName().equals(cd)) {
|
||||
currentDeck = d;
|
||||
view.getLstDecks().setSelectedItem(d);
|
||||
for (Entry<DeckProxy, Integer> d : view.getLstDecks().getPool() )
|
||||
if( d.getKey().getName().equals(cd) ) {
|
||||
view.getLstDecks().setSelectedItem(d.getKey());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Not found? Set first one. Still not found? OK, throw to setCurrentDeckStatus().
|
||||
|
||||
@@ -17,6 +17,7 @@ import forge.game.player.RegisteredPlayer;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.deckeditor.controllers.CEditorDraftingProcess;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
@@ -74,18 +75,13 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
*/
|
||||
@Override
|
||||
public void update() {
|
||||
List<Deck> human = new ArrayList<Deck>();
|
||||
for (DeckGroup d : Singletons.getModel().getDecks().getDraft()) {
|
||||
human.add(d.getHumanDeck());
|
||||
}
|
||||
|
||||
final VSubmenuDraft view = VSubmenuDraft.SINGLETON_INSTANCE;
|
||||
final VSubmenuDraft view = VSubmenuDraft.SINGLETON_INSTANCE;
|
||||
final JButton btnStart = view.getBtnStart();
|
||||
|
||||
view.getLstDecks().setPool(human);
|
||||
view.getLstDecks().setPool(DeckProxy.getDraftDecks(Singletons.getModel().getDecks().getDraft()));
|
||||
view.getLstDecks().update();
|
||||
|
||||
if (human.size() > 1) {
|
||||
if (!view.getLstDecks().getPool().isEmpty()) {
|
||||
btnStart.setEnabled(true);
|
||||
}
|
||||
|
||||
@@ -102,7 +98,7 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
|
||||
private void startGame(final GameType gameType) {
|
||||
final boolean gauntlet = !VSubmenuDraft.SINGLETON_INSTANCE.isSingleSelected();
|
||||
final Deck humanDeck = VSubmenuDraft.SINGLETON_INSTANCE.getLstDecks().getSelectedItem();
|
||||
final DeckProxy humanDeck = VSubmenuDraft.SINGLETON_INSTANCE.getLstDecks().getSelectedItem();
|
||||
final int aiIndex = (int) Math.floor(Math.random() * 7);
|
||||
|
||||
if (humanDeck == null) {
|
||||
@@ -111,7 +107,7 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
}
|
||||
|
||||
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
|
||||
String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(humanDeck);
|
||||
String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(humanDeck.getDeck());
|
||||
if (null != errorMessage) {
|
||||
FOptionPane.showErrorDialog("Your deck " + errorMessage + " Please edit or choose a different deck.", "Invalid Deck");
|
||||
return;
|
||||
@@ -122,7 +118,7 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
|
||||
if (gauntlet) {
|
||||
int rounds = Singletons.getModel().getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size();
|
||||
Singletons.getModel().getGauntletMini().launch(rounds, humanDeck, gameType);
|
||||
Singletons.getModel().getGauntletMini().launch(rounds, humanDeck.getDeck(), gameType);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -142,7 +138,7 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
|
||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||
Lobby lobby = FServer.instance.getLobby();
|
||||
starter.add(new RegisteredPlayer(humanDeck).setPlayer(lobby.getGuiPlayer()));
|
||||
starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(lobby.getGuiPlayer()));
|
||||
starter.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
||||
|
||||
Singletons.getControl().startMatch(GameType.Draft, starter);
|
||||
|
||||
@@ -23,6 +23,7 @@ import forge.deck.DeckSection;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.deckeditor.controllers.ACEditorBase;
|
||||
import forge.gui.deckeditor.controllers.CEditorLimited;
|
||||
import forge.gui.framework.FScreen;
|
||||
@@ -105,7 +106,7 @@ public enum CSubmenuSealed implements ICDoc {
|
||||
}
|
||||
|
||||
final VSubmenuSealed view = VSubmenuSealed.SINGLETON_INSTANCE;
|
||||
view.getLstDecks().setPool(humanDecks);
|
||||
view.getLstDecks().setPool(DeckProxy.getAllSealedDecks(Singletons.getModel().getDecks().getSealed()));
|
||||
view.getLstDecks().update();
|
||||
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@@ -121,7 +122,7 @@ public enum CSubmenuSealed implements ICDoc {
|
||||
}
|
||||
|
||||
private void startGame(final GameType gameType) {
|
||||
final Deck human = VSubmenuSealed.SINGLETON_INSTANCE.getLstDecks().getSelectedItem();
|
||||
final DeckProxy human = VSubmenuSealed.SINGLETON_INSTANCE.getLstDecks().getSelectedItem();
|
||||
|
||||
if (human == null) {
|
||||
FOptionPane.showErrorDialog("Please build and/or select a deck for yourself.", "No Deck");
|
||||
@@ -129,7 +130,7 @@ public enum CSubmenuSealed implements ICDoc {
|
||||
}
|
||||
|
||||
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
|
||||
String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(human);
|
||||
String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(human.getDeck());
|
||||
if (null != errorMessage) {
|
||||
FOptionPane.showErrorDialog("Your deck " + errorMessage + " Please edit or choose a different deck.", "Invalid Deck");
|
||||
return;
|
||||
@@ -137,7 +138,7 @@ public enum CSubmenuSealed implements ICDoc {
|
||||
}
|
||||
|
||||
int matches = Singletons.getModel().getDecks().getSealed().get(human.getName()).getAiDecks().size();
|
||||
Singletons.getModel().getGauntletMini().launch(matches, human, gameType);
|
||||
Singletons.getModel().getGauntletMini().launch(matches, human.getDeck(), gameType);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
@@ -26,10 +26,10 @@ import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckchooser.DecksComboBox.DeckType;
|
||||
import forge.gui.deckchooser.FDeckChooser;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
@@ -428,7 +428,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
||||
mainDeckPanel.add(mainChooser, "grow, push, wrap");
|
||||
}
|
||||
|
||||
protected void onDeckClicked(int iPlayer, DeckType type, Iterable<Deck> selectedDecks) {
|
||||
protected void onDeckClicked(int iPlayer, DeckType type, Iterable<DeckProxy> selectedDecks) {
|
||||
String text = type.toString() + ": " + Lang.joinHomogenous(selectedDecks);
|
||||
deckSelectorBtns.get(iPlayer).setText(text);
|
||||
}
|
||||
|
||||
@@ -13,12 +13,12 @@ import javax.swing.event.ListSelectionListener;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.game.GameFormat;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.deckeditor.SEditorIO;
|
||||
import forge.gui.deckeditor.controllers.ACEditorBase;
|
||||
import forge.gui.deckeditor.controllers.CEditorLimited;
|
||||
@@ -47,7 +47,7 @@ import forge.quest.QuestWorld;
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public final class DeckManager extends ItemManager<Deck> {
|
||||
public final class DeckManager extends ItemManager<DeckProxy> {
|
||||
private static final FSkin.SkinIcon icoDelete = FSkin.getIcon(FSkin.InterfaceIcons.ICO_DELETE);
|
||||
private static final FSkin.SkinIcon icoDeleteOver = FSkin.getIcon(FSkin.InterfaceIcons.ICO_DELETE_OVER);
|
||||
private static final FSkin.SkinIcon icoEdit = FSkin.getIcon(FSkin.InterfaceIcons.ICO_EDIT);
|
||||
@@ -71,7 +71,7 @@ public final class DeckManager extends ItemManager<Deck> {
|
||||
* @param gt
|
||||
*/
|
||||
public DeckManager(final GameType gt) {
|
||||
super(Deck.class, true);
|
||||
super(DeckProxy.class, true);
|
||||
this.gametype = gt;
|
||||
|
||||
columns.get(ColumnDef.DECK_ACTIONS).setCellRenderer(new DeckActionsRenderer());
|
||||
@@ -149,7 +149,7 @@ public final class DeckManager extends ItemManager<Deck> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemFilter<Deck> createSearchFilter() {
|
||||
protected ItemFilter<DeckProxy> createSearchFilter() {
|
||||
return new DeckSearchFilter(this);
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ public final class DeckManager extends ItemManager<Deck> {
|
||||
}, getFilter(DeckColorFilter.class) == null);
|
||||
}
|
||||
|
||||
private <T extends DeckBase> void editDeck(final Deck deck) {
|
||||
private <T extends DeckBase> void editDeck(final DeckProxy deck) {
|
||||
if (deck == null || this.preventEdit) { return; }
|
||||
|
||||
ACEditorBase<? extends InventoryItem, ? extends DeckBase> editorCtrl = null;
|
||||
@@ -252,7 +252,7 @@ public final class DeckManager extends ItemManager<Deck> {
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(deck.getName());
|
||||
}
|
||||
|
||||
public boolean deleteDeck(Deck deck) {
|
||||
public boolean deleteDeck(DeckProxy deck) {
|
||||
if (deck == null || this.preventEdit) { return false; }
|
||||
|
||||
if (!FOptionPane.showConfirmDialog(
|
||||
@@ -316,7 +316,7 @@ public final class DeckManager extends ItemManager<Deck> {
|
||||
int x = e.getX() - cellBounds.x;
|
||||
|
||||
if (e.getID() == MouseEvent.MOUSE_PRESSED && e.getButton() == 1) {
|
||||
Deck deck = (Deck) value;
|
||||
DeckProxy deck = (DeckProxy) value;
|
||||
|
||||
if (x >= 0 && x < imgSize) { //delete button
|
||||
if (DeckManager.this.deleteDeck(deck)) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import javax.swing.JPanel;
|
||||
import com.google.common.base.Predicate;
|
||||
import forge.card.MagicColor;
|
||||
import forge.deck.Deck;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
import forge.gui.toolbox.itemmanager.SItemManagerUtil.StatTypes;
|
||||
import forge.util.BinaryUtil;
|
||||
@@ -14,13 +15,13 @@ import forge.util.ItemPool;
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckColorFilter extends StatTypeFilter<Deck> {
|
||||
public DeckColorFilter(ItemManager<? super Deck> itemManager0) {
|
||||
public class DeckColorFilter extends StatTypeFilter<DeckProxy> {
|
||||
public DeckColorFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<Deck> createCopy() {
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
return new DeckColorFilter(itemManager);
|
||||
}
|
||||
|
||||
@@ -36,10 +37,10 @@ public class DeckColorFilter extends StatTypeFilter<Deck> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Predicate<Deck> buildPredicate() {
|
||||
return new Predicate<Deck>() {
|
||||
protected final Predicate<DeckProxy> buildPredicate() {
|
||||
return new Predicate<DeckProxy>() {
|
||||
@Override
|
||||
public boolean apply(Deck input) {
|
||||
public boolean apply(DeckProxy input) {
|
||||
byte colorProfile = input.getColor().getColor();
|
||||
if (colorProfile == 0) {
|
||||
return buttonMap.get(StatTypes.DECK_COLORLESS).getSelected();
|
||||
@@ -121,7 +122,7 @@ public class DeckColorFilter extends StatTypeFilter<Deck> {
|
||||
|
||||
@Override
|
||||
public void afterFiltersApplied() {
|
||||
final ItemPool<? super Deck> items = itemManager.getFilteredItems();
|
||||
final ItemPool<? super DeckProxy> items = itemManager.getFilteredItems();
|
||||
|
||||
buttonMap.get(StatTypes.DECK_WHITE).setText(String.valueOf(items.countAll(IS_WHITE, Deck.class)));
|
||||
buttonMap.get(StatTypes.DECK_BLUE).setText(String.valueOf(items.countAll(IS_BLUE, Deck.class)));
|
||||
|
||||
@@ -2,8 +2,8 @@ package forge.gui.toolbox.itemmanager.filters;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameFormat;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
import forge.gui.toolbox.itemmanager.SFilterUtil;
|
||||
|
||||
@@ -11,23 +11,23 @@ import forge.gui.toolbox.itemmanager.SFilterUtil;
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckFormatFilter extends FormatFilter<Deck> {
|
||||
public DeckFormatFilter(ItemManager<? super Deck> itemManager0) {
|
||||
public class DeckFormatFilter extends FormatFilter<DeckProxy> {
|
||||
public DeckFormatFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
public DeckFormatFilter(ItemManager<? super Deck> itemManager0, GameFormat format0) {
|
||||
public DeckFormatFilter(ItemManager<? super DeckProxy> itemManager0, GameFormat format0) {
|
||||
super(itemManager0, format0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<Deck> createCopy() {
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
DeckFormatFilter copy = new DeckFormatFilter(itemManager);
|
||||
copy.formats.addAll(this.formats);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Predicate<Deck> buildPredicate() {
|
||||
return Deck.createPredicate(SFilterUtil.buildFormatFilter(this.formats, this.allowReprints));
|
||||
protected final Predicate<DeckProxy> buildPredicate() {
|
||||
return DeckProxy.createPredicate(SFilterUtil.buildFormatFilter(this.formats, this.allowReprints));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameFormat;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
import forge.quest.QuestWorld;
|
||||
|
||||
@@ -16,17 +16,17 @@ import forge.quest.QuestWorld;
|
||||
public class DeckQuestWorldFilter extends DeckFormatFilter {
|
||||
private final Set<QuestWorld> questWorlds = new HashSet<QuestWorld>();
|
||||
|
||||
public DeckQuestWorldFilter(ItemManager<? super Deck> itemManager0) {
|
||||
public DeckQuestWorldFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
public DeckQuestWorldFilter(ItemManager<? super Deck> itemManager0, QuestWorld questWorld0) {
|
||||
public DeckQuestWorldFilter(ItemManager<? super DeckProxy> itemManager0, QuestWorld questWorld0) {
|
||||
super(itemManager0);
|
||||
this.questWorlds.add(questWorld0);
|
||||
this.formats.add(getQuestWorldFormat(questWorld0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<Deck> createCopy() {
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
DeckQuestWorldFilter copy = new DeckQuestWorldFilter(itemManager);
|
||||
copy.questWorlds.addAll(this.questWorlds);
|
||||
for (QuestWorld w : this.questWorlds) {
|
||||
@@ -41,7 +41,7 @@ public class DeckQuestWorldFilter extends DeckFormatFilter {
|
||||
super.reset();
|
||||
}
|
||||
|
||||
public static boolean canAddQuestWorld(QuestWorld questWorld, ItemFilter<Deck> existingFilter) {
|
||||
public static boolean canAddQuestWorld(QuestWorld questWorld, ItemFilter<DeckProxy> existingFilter) {
|
||||
if (questWorld.getFormat() == null && Singletons.getModel().getQuest().getMainFormat() == null) {
|
||||
return false; //must have format
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package forge.gui.toolbox.itemmanager.filters;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckSearchFilter extends TextSearchFilter<Deck> {
|
||||
public DeckSearchFilter(ItemManager<? super Deck> itemManager0) {
|
||||
public class DeckSearchFilter extends TextSearchFilter<DeckProxy> {
|
||||
public DeckSearchFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<Deck> createCopy() {
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
DeckSearchFilter copy = new DeckSearchFilter(itemManager);
|
||||
copy.getWidget(); //initialize widget
|
||||
copy.txtSearch.setText(this.txtSearch.getText());
|
||||
|
||||
@@ -4,8 +4,8 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameFormat;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.home.quest.DialogChooseSets;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
|
||||
@@ -16,7 +16,7 @@ import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
public class DeckSetFilter extends DeckFormatFilter {
|
||||
private final Set<String> sets = new HashSet<String>();
|
||||
|
||||
public DeckSetFilter(ItemManager<? super Deck> itemManager0, Collection<String> sets0, boolean allowReprints0) {
|
||||
public DeckSetFilter(ItemManager<? super DeckProxy> itemManager0, Collection<String> sets0, boolean allowReprints0) {
|
||||
super(itemManager0);
|
||||
this.sets.addAll(sets0);
|
||||
this.formats.add(new GameFormat(null, this.sets, null));
|
||||
@@ -24,7 +24,7 @@ public class DeckSetFilter extends DeckFormatFilter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<Deck> createCopy() {
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
return new DeckSetFilter(itemManager, this.sets, this.allowReprints);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import java.util.Map;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
import forge.gui.toolbox.itemmanager.SItemManagerUtil;
|
||||
@@ -12,8 +12,8 @@ import forge.item.InventoryItem;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.ItemPool;
|
||||
|
||||
public abstract class DeckStatTypeFilter extends StatTypeFilter<Deck> {
|
||||
public DeckStatTypeFilter(ItemManager<? super Deck> itemManager0) {
|
||||
public abstract class DeckStatTypeFilter extends StatTypeFilter<DeckProxy> {
|
||||
public DeckStatTypeFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
@@ -24,11 +24,11 @@ public abstract class DeckStatTypeFilter extends StatTypeFilter<Deck> {
|
||||
|
||||
@Override
|
||||
public void afterFiltersApplied() {
|
||||
final ItemPool<? super Deck> items = itemManager.getFilteredItems();
|
||||
final ItemPool<? super DeckProxy> items = itemManager.getFilteredItems();
|
||||
|
||||
for (Map.Entry<SItemManagerUtil.StatTypes, FLabel> btn : buttonMap.entrySet()) {
|
||||
if (btn.getKey().predicate != null) {
|
||||
int count = items.countAll(Deck.createPredicate(Predicates.compose(btn.getKey().predicate, PaperCard.FN_GET_RULES)), Deck.class);
|
||||
int count = items.countAll(DeckProxy.createPredicate(Predicates.compose(btn.getKey().predicate, PaperCard.FN_GET_RULES)), DeckProxy.class);
|
||||
btn.getValue().setText(String.valueOf(count));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.GameFormat;
|
||||
import forge.gui.CardPreferences;
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.InventoryItemFromSet;
|
||||
@@ -546,7 +547,7 @@ public class ItemColumn extends TableColumn {
|
||||
return i instanceof Deck ? ((Deck) i) : null;
|
||||
}
|
||||
private static ColorSet toDeckColor(final InventoryItem i) {
|
||||
return i instanceof Deck ? ((Deck) i).getColor() : null;
|
||||
return i instanceof DeckProxy ? ((DeckProxy) i).getColor() : null;
|
||||
}
|
||||
private static int toDeckCount(final InventoryItem i, DeckSection section) {
|
||||
Deck deck = toDeck(i);
|
||||
|
||||
Reference in New Issue
Block a user