merge CustomFormats into MagicCustomFormat
parent
282c1d809d
commit
b25b66def2
|
@ -215,7 +215,7 @@ public class CardDefinitions {
|
|||
reporter.setMessage("Loading cards...100%");
|
||||
|
||||
// update card lists
|
||||
final MagicCustomFormat cube = CustomFormats.DEFAULT_CUBE;
|
||||
final MagicCustomFormat cube = MagicCustomFormat.DEFAULT_CUBE;
|
||||
for (final MagicCardDefinition cardDefinition : allPlayableCardDefs.values()) {
|
||||
if (cardDefinition.isToken() == false && cardDefinition.isHidden() == false) {
|
||||
defaultPlayableCardDefs.add(cardDefinition);
|
||||
|
|
|
@ -1,128 +0,0 @@
|
|||
package magic.data;
|
||||
|
||||
import magic.utility.FileIO;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import magic.utility.MagicSystem;
|
||||
import magic.model.MagicCardDefinition;
|
||||
import magic.utility.MagicFileSystem;
|
||||
import magic.utility.MagicFileSystem.DataPath;
|
||||
|
||||
public class CustomFormats {
|
||||
|
||||
private static final String CUBE_FILE_EXTENSION = "_cube.txt";
|
||||
private static final FileFilter CUBE_FILE_FILTER = new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(final File file) {
|
||||
return file.isFile() && file.getName().endsWith(CUBE_FILE_EXTENSION);
|
||||
}
|
||||
};
|
||||
|
||||
public static final MagicCustomFormat DEFAULT_CUBE = new MagicCustomFormat("all");
|
||||
|
||||
private static final List<MagicCustomFormat> cubeDefinitions = new ArrayList<>();
|
||||
private static MagicCustomFormat currentCube;
|
||||
static {
|
||||
cubeDefinitions.add(DEFAULT_CUBE);
|
||||
currentCube = DEFAULT_CUBE;
|
||||
}
|
||||
|
||||
public static MagicCustomFormat[] getCubesArray() {
|
||||
return cubeDefinitions.toArray(new MagicCustomFormat[cubeDefinitions.size()]);
|
||||
}
|
||||
|
||||
public static String[] getFilterValues() {
|
||||
final List<String> values = new ArrayList<>();
|
||||
for (MagicCustomFormat cube : cubeDefinitions) {
|
||||
if (cube != DEFAULT_CUBE) {
|
||||
values.add(cube.getLabel());
|
||||
}
|
||||
}
|
||||
return values.toArray(new String[values.size()]);
|
||||
}
|
||||
|
||||
private static void loadCubeDefinition(final String name,final File file) {
|
||||
List<String> content = Collections.emptyList();
|
||||
try { //load cube
|
||||
content = FileIO.toStrList(file);
|
||||
} catch (final IOException ex) {
|
||||
System.err.println("ERROR! Unable to load " + name);
|
||||
System.err.println(ex.getMessage());
|
||||
ex.printStackTrace();
|
||||
return;
|
||||
}
|
||||
final MagicCustomFormat cubeDefinition = new MagicCustomFormat(name);
|
||||
for (final String line: content) {
|
||||
final String cardName = line.trim();
|
||||
if (!cardName.isEmpty()) {
|
||||
cubeDefinition.add(cardName);
|
||||
}
|
||||
}
|
||||
cubeDefinitions.add(cubeDefinition);
|
||||
}
|
||||
|
||||
public static void loadCubeDefinitions() {
|
||||
final File[] cubeFiles = MagicFileSystem.getDataPath(DataPath.MODS).toFile().listFiles(CUBE_FILE_FILTER);
|
||||
if (cubeFiles!=null) {
|
||||
for (final File file : cubeFiles) {
|
||||
final String name = file.getName();
|
||||
final int index = name.indexOf(CUBE_FILE_EXTENSION);
|
||||
loadCubeDefinition(name.substring(0,index),file);
|
||||
}
|
||||
}
|
||||
|
||||
if (MagicSystem.showStartupStats()) {
|
||||
System.err.println(cubeDefinitions.size()+" cube definitions");
|
||||
for (final MagicCustomFormat cubeDefinition : cubeDefinitions) {
|
||||
System.err.println("Cube " + cubeDefinition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isCardInCube(final MagicCardDefinition card, final String cubeName) {
|
||||
final MagicCustomFormat cube = getCube(cubeName);
|
||||
return cube.isCardLegal(card);
|
||||
}
|
||||
|
||||
public static MagicCustomFormat getCube(final String cubeLabel) {
|
||||
|
||||
// prior to 1.62 the cube label including card count was saved to the duel
|
||||
// config file so for backwards compatibility during import need to check
|
||||
// for and remove card count if it exists to isolate just the cube name.
|
||||
final String cubeName = getCubeNameWithoutSize(cubeLabel);
|
||||
|
||||
if (!currentCube.getName().equals(cubeName)) {
|
||||
for (MagicCustomFormat cube : cubeDefinitions) {
|
||||
if (cube.getName().equals(cubeName)) {
|
||||
currentCube = cube;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return currentCube;
|
||||
|
||||
}
|
||||
|
||||
public static MagicCustomFormat createCube(Collection<MagicCardDefinition> cardPool) {
|
||||
final MagicCustomFormat cubeDefinition = new MagicCustomFormat("random");
|
||||
for (MagicCardDefinition card : cardPool) {
|
||||
cubeDefinition.add(card.getName());
|
||||
}
|
||||
return cubeDefinition;
|
||||
}
|
||||
|
||||
private static String getCubeNameWithoutSize(final String cube) {
|
||||
final int toIndex = cube.indexOf("(");
|
||||
if (toIndex == -1) {
|
||||
return cube;
|
||||
} else {
|
||||
return cube.substring(0, toIndex).trim();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -47,7 +47,7 @@ public class DeckGenerator {
|
|||
}
|
||||
|
||||
public MagicDeck getRandomDeck(final Collection<MagicCardDefinition> cardPool) {
|
||||
final MagicCustomFormat cubeDefinition = CustomFormats.createCube(cardPool);
|
||||
final MagicCustomFormat cubeDefinition = MagicCustomFormat.create(cardPool);
|
||||
final RandomDeckGenerator generator = new RandomDeckGenerator(cubeDefinition);
|
||||
deck = new MagicDeck();
|
||||
deckProfile = MagicDeckProfile.getDeckProfile(getColorText());
|
||||
|
|
|
@ -27,7 +27,7 @@ public class DuelConfig {
|
|||
private int startLife = 20;
|
||||
private int handSize = 7;
|
||||
private int games = 7;
|
||||
private MagicCustomFormat cube = CustomFormats.DEFAULT_CUBE;
|
||||
private MagicCustomFormat cube = MagicCustomFormat.DEFAULT_CUBE;
|
||||
private DuelPlayerConfig[] players = new DuelPlayerConfig[MAX_PLAYERS];
|
||||
|
||||
// CTR
|
||||
|
@ -94,7 +94,7 @@ public class DuelConfig {
|
|||
startLife = Integer.parseInt(properties.getProperty(START_LIFE, Integer.toString(startLife)));
|
||||
handSize = Integer.parseInt(properties.getProperty(HAND_SIZE, Integer.toString(handSize)));
|
||||
games = Integer.parseInt(properties.getProperty(GAMES, Integer.toString(games)));
|
||||
cube = CustomFormats.getCube(properties.getProperty(CUBE, cube.getName()));
|
||||
cube = MagicCustomFormat.get(properties.getProperty(CUBE, cube.getName()));
|
||||
loadPlayerConfigs(properties, loadPlayerDecks);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,11 +2,22 @@ package magic.data;
|
|||
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
|
||||
import magic.utility.FileIO;
|
||||
import magic.utility.MagicFileSystem;
|
||||
import magic.utility.MagicFileSystem.DataPath;
|
||||
import magic.utility.MagicSystem;
|
||||
import magic.model.MagicCardDefinition;
|
||||
|
||||
public class MagicCustomFormat extends MagicFormat {
|
||||
|
||||
|
||||
private final Set<String> legal = new HashSet<>();
|
||||
private final String name;
|
||||
|
||||
|
@ -41,4 +52,109 @@ public class MagicCustomFormat extends MagicFormat {
|
|||
public String toString() {
|
||||
return getLabel();
|
||||
}
|
||||
|
||||
// static members
|
||||
|
||||
private static final String CUBE_FILE_EXTENSION = "_cube.txt";
|
||||
private static final FileFilter CUBE_FILE_FILTER = new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(final File file) {
|
||||
return file.isFile() && file.getName().endsWith(CUBE_FILE_EXTENSION);
|
||||
}
|
||||
};
|
||||
|
||||
public static final MagicCustomFormat DEFAULT_CUBE = new MagicCustomFormat("all");
|
||||
private static List<MagicCustomFormat> values = Collections.emptyList();
|
||||
|
||||
public static List<MagicCustomFormat> values() {
|
||||
return values;
|
||||
}
|
||||
|
||||
public static MagicCustomFormat[] valuesArray() {
|
||||
return values.toArray(new MagicCustomFormat[0]);
|
||||
}
|
||||
|
||||
public static String[] getFilterValues() {
|
||||
final List<String> values = new ArrayList<>();
|
||||
for (final MagicCustomFormat cube : values()) {
|
||||
values.add(cube.getLabel());
|
||||
}
|
||||
return values.toArray(new String[0]);
|
||||
}
|
||||
|
||||
private static void loadCustomFormat(final String name, final File file, final List<MagicCustomFormat> fmts) {
|
||||
List<String> content = Collections.emptyList();
|
||||
try { //load cube
|
||||
content = FileIO.toStrList(file);
|
||||
} catch (final IOException ex) {
|
||||
System.err.println("ERROR! Unable to load " + name);
|
||||
System.err.println(ex.getMessage());
|
||||
ex.printStackTrace();
|
||||
return;
|
||||
}
|
||||
final MagicCustomFormat cubeDefinition = new MagicCustomFormat(name);
|
||||
for (final String line: content) {
|
||||
final String cardName = line.trim();
|
||||
if (!cardName.isEmpty()) {
|
||||
cubeDefinition.add(cardName);
|
||||
}
|
||||
}
|
||||
fmts.add(cubeDefinition);
|
||||
}
|
||||
|
||||
public static void loadCustomFormats() {
|
||||
final List<MagicCustomFormat> fmts = new ArrayList<>();
|
||||
fmts.add(DEFAULT_CUBE);
|
||||
|
||||
final File[] cubeFiles = MagicFileSystem.getDataPath(DataPath.MODS).toFile().listFiles(CUBE_FILE_FILTER);
|
||||
if (cubeFiles!=null) {
|
||||
for (final File file : cubeFiles) {
|
||||
final String name = file.getName();
|
||||
final int index = name.indexOf(CUBE_FILE_EXTENSION);
|
||||
loadCustomFormat(name.substring(0,index),file,fmts);
|
||||
}
|
||||
}
|
||||
|
||||
if (MagicSystem.showStartupStats()) {
|
||||
System.err.println(fmts.size()+" cube definitions");
|
||||
for (final MagicCustomFormat cubeDefinition : fmts) {
|
||||
System.err.println("Cube " + cubeDefinition);
|
||||
}
|
||||
}
|
||||
|
||||
values = Collections.unmodifiableList(fmts);
|
||||
}
|
||||
|
||||
private static String getNameWithoutSize(final String cube) {
|
||||
final int toIndex = cube.indexOf("(");
|
||||
if (toIndex == -1) {
|
||||
return cube;
|
||||
} else {
|
||||
return cube.substring(0, toIndex).trim();
|
||||
}
|
||||
}
|
||||
|
||||
public static MagicCustomFormat get(final String cubeLabel) {
|
||||
|
||||
// prior to 1.62 the cube label including card count was saved to the duel
|
||||
// config file so for backwards compatibility during import need to check
|
||||
// for and remove card count if it exists to isolate just the cube name.
|
||||
final String cubeName = getNameWithoutSize(cubeLabel);
|
||||
|
||||
for (final MagicCustomFormat cube : values) {
|
||||
if (cube.getName().equals(cubeName)) {
|
||||
return cube;
|
||||
}
|
||||
}
|
||||
|
||||
return DEFAULT_CUBE;
|
||||
}
|
||||
|
||||
public static MagicCustomFormat create(final Collection<MagicCardDefinition> cardPool) {
|
||||
final MagicCustomFormat cubeDefinition = new MagicCustomFormat("random");
|
||||
for (MagicCardDefinition card : cardPool) {
|
||||
cubeDefinition.add(card.getName());
|
||||
}
|
||||
return cubeDefinition;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,10 +103,10 @@ public class MagicPredefinedFormat extends MagicFormat {
|
|||
|
||||
public static String[] getFilterValues() {
|
||||
final List<String> values = new ArrayList<>();
|
||||
for (MagicPredefinedFormat f : MagicPredefinedFormat.values()) {
|
||||
for (final MagicPredefinedFormat f : values()) {
|
||||
values.add(f.getName());
|
||||
}
|
||||
return values.toArray(new String[values.size()]);
|
||||
return values.toArray(new String[0]);
|
||||
}
|
||||
|
||||
private void loadMagicFormatFile() {
|
||||
|
@ -193,5 +193,4 @@ public class MagicPredefinedFormat extends MagicFormat {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ import magic.model.MagicRandom;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import magic.data.CustomFormats;
|
||||
import magic.data.MagicCustomFormat;
|
||||
import magic.data.DeckGenerator;
|
||||
|
||||
public class RandomDeckGenerator {
|
||||
|
@ -25,7 +25,7 @@ public class RandomDeckGenerator {
|
|||
}
|
||||
|
||||
public RandomDeckGenerator() {
|
||||
this(CustomFormats.DEFAULT_CUBE);
|
||||
this(MagicCustomFormat.DEFAULT_CUBE);
|
||||
}
|
||||
|
||||
public void setCubeDefinition(final MagicCustomFormat cube) {
|
||||
|
|
|
@ -18,7 +18,8 @@ import javax.swing.JPanel;
|
|||
import javax.swing.JRadioButton;
|
||||
import javax.swing.JScrollPane;
|
||||
import magic.data.CardDefinitions;
|
||||
import magic.data.CustomFormats;
|
||||
import magic.data.MagicFormat;
|
||||
import magic.data.MagicCustomFormat;
|
||||
import magic.data.MagicPredefinedFormat;
|
||||
import magic.data.MagicSetDefinitions;
|
||||
import magic.data.MagicSets;
|
||||
|
@ -135,14 +136,6 @@ public class CardFilterPanel extends TexturedPanel implements ActionListener {
|
|||
add(btn);
|
||||
}
|
||||
|
||||
private void addFormatsFilter() {
|
||||
formatsPopup = addFilterPopupPanel("Format");
|
||||
formatsCheckBoxes = new JCheckBox[MagicPredefinedFormat.values().size()];
|
||||
formatsFilterChoices = new JRadioButton[FILTER_CHOICES.length];
|
||||
final String[] filterValues = MagicPredefinedFormat.getFilterValues();
|
||||
populateCheckboxPopup(formatsPopup, filterValues, formatsCheckBoxes, formatsFilterChoices, false);
|
||||
}
|
||||
|
||||
private void addStatusFilter() {
|
||||
final String[] filterValues = getStatusFilterValues();
|
||||
statusPopup = addFilterPopupPanel("Status");
|
||||
|
@ -169,12 +162,20 @@ public class CardFilterPanel extends TexturedPanel implements ActionListener {
|
|||
|
||||
private void addCubeFilter() {
|
||||
cubePopup = addFilterPopupPanel("Cube");
|
||||
final String[] filterValues = CustomFormats.getFilterValues();
|
||||
cubeCheckBoxes = new JCheckBox[filterValues.length];
|
||||
cubeCheckBoxes = new JCheckBox[MagicCustomFormat.values().size()];
|
||||
cubeFilterChoices = new JRadioButton[FILTER_CHOICES.length];
|
||||
final String[] filterValues = MagicCustomFormat.getFilterValues();
|
||||
populateCheckboxPopup(cubePopup, filterValues, cubeCheckBoxes, cubeFilterChoices, false);
|
||||
}
|
||||
|
||||
private void addFormatsFilter() {
|
||||
formatsPopup = addFilterPopupPanel("Format");
|
||||
formatsCheckBoxes = new JCheckBox[MagicPredefinedFormat.values().size()];
|
||||
formatsFilterChoices = new JRadioButton[FILTER_CHOICES.length];
|
||||
final String[] filterValues = MagicPredefinedFormat.getFilterValues();
|
||||
populateCheckboxPopup(formatsPopup, filterValues, formatsCheckBoxes, formatsFilterChoices, false);
|
||||
}
|
||||
|
||||
private ButtonControlledPopup addFilterPopupPanel(final String title, final String tooltip) {
|
||||
final JButton selectButton = new JButton(title);
|
||||
selectButton.setToolTipText(tooltip);
|
||||
|
@ -301,8 +302,8 @@ public class CardFilterPanel extends TexturedPanel implements ActionListener {
|
|||
new CardChecker() {
|
||||
@Override
|
||||
public boolean checkCard(final MagicCardDefinition card, final int i) {
|
||||
final String cubeName = cubeCheckBoxes[i].getText();
|
||||
return CustomFormats.isCardInCube(card, cubeName);
|
||||
final MagicFormat fmt = MagicCustomFormat.values().get(i);
|
||||
return fmt.isCardLegal(card);
|
||||
}
|
||||
})) {
|
||||
return false;
|
||||
|
@ -313,8 +314,8 @@ public class CardFilterPanel extends TexturedPanel implements ActionListener {
|
|||
new CardChecker() {
|
||||
@Override
|
||||
public boolean checkCard(final MagicCardDefinition card, final int i) {
|
||||
final MagicPredefinedFormat magicFormat = MagicPredefinedFormat.values().get(i);
|
||||
return magicFormat.isCardLegal(card);
|
||||
final MagicFormat fmt = MagicPredefinedFormat.values().get(i);
|
||||
return fmt.isCardLegal(card);
|
||||
}
|
||||
})) {
|
||||
return false;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package magic.ui.dialog;
|
||||
|
||||
import magic.utility.MagicSystem;
|
||||
import magic.data.CustomFormats;
|
||||
import magic.data.MagicCustomFormat;
|
||||
import magic.ui.MagicFrame;
|
||||
import magic.ui.widget.SliderPanel;
|
||||
|
@ -48,7 +47,7 @@ public class DuelPropertiesDialog extends JDialog {
|
|||
handSizeSliderPanel = new SliderPanel("Hand size:", null, 6, 8, 1, handSize);
|
||||
winsSliderPanel = new SliderPanel("Max. games:", null, 1, 11, 2, maxGames);
|
||||
|
||||
cubeComboBox = new JComboBox<>(CustomFormats.getCubesArray());
|
||||
cubeComboBox = new JComboBox<>(MagicCustomFormat.valuesArray());
|
||||
cubeComboBox.setLightWeightPopupEnabled(false);
|
||||
cubeComboBox.setFocusable(false);
|
||||
cubeComboBox.setSelectedItem(cube);
|
||||
|
|
|
@ -7,7 +7,6 @@ import java.awt.event.MouseEvent;
|
|||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.SwingConstants;
|
||||
import magic.data.CustomFormats;
|
||||
import magic.data.DuelConfig;
|
||||
import magic.data.MagicIcon;
|
||||
import magic.data.MagicCustomFormat;
|
||||
|
@ -30,7 +29,7 @@ public class DuelSettingsPanel extends TexturedPanel implements IThemeStyle {
|
|||
private int startLife;
|
||||
private int handSize;
|
||||
private int maxGames = 7;
|
||||
private MagicCustomFormat cube = CustomFormats.DEFAULT_CUBE;
|
||||
private MagicCustomFormat cube = MagicCustomFormat.DEFAULT_CUBE;
|
||||
private final MouseAdapter mouseAdapter = getMouseAdapter();
|
||||
|
||||
public DuelSettingsPanel(final MagicFrame frame, final DuelConfig config) {
|
||||
|
|
|
@ -2,7 +2,7 @@ package magic.utility;
|
|||
|
||||
import magic.data.DeckGenerators;
|
||||
import magic.data.KeywordDefinitions;
|
||||
import magic.data.CustomFormats;
|
||||
import magic.data.MagicCustomFormat;
|
||||
import magic.data.CardDefinitions;
|
||||
import magic.data.UnimplementedParser;
|
||||
import magic.data.GeneralConfig;
|
||||
|
@ -172,7 +172,7 @@ final public class MagicSystem {
|
|||
}
|
||||
|
||||
reporter.setMessage("Loading cube definitions...");
|
||||
CustomFormats.loadCubeDefinitions();
|
||||
MagicCustomFormat.loadCustomFormats();
|
||||
reporter.setMessage("Loading deck generators...");
|
||||
DeckGenerators.getInstance().loadDeckGenerators();
|
||||
reporter.setMessage("Loading keyword definitions...");
|
||||
|
|
Loading…
Reference in New Issue