merge CustomFormats into MagicCustomFormat

master
melvinzhang 2015-06-20 13:19:47 +08:00
parent 282c1d809d
commit b25b66def2
11 changed files with 145 additions and 159 deletions

View File

@ -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);

View File

@ -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();
}
}
}

View File

@ -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());

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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) {

View File

@ -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...");