Improve pool distribution dialog for new quests

This commit is contained in:
Krazy
2017-06-07 19:05:52 +00:00
parent a590edad78
commit 614caa837b
2 changed files with 250 additions and 212 deletions

View File

@@ -17,259 +17,297 @@ import java.util.List;
public class DialogChooseColors {
private final FPanel mainPanel = new FPanel(new MigLayout("insets 20, gap 25, center, wrap 2"));
private final FPanel mainPanel = new FPanel(new MigLayout("insets 20, gap 25, center, wrap 2"));
private final FCheckBox cbxBlack = new FCheckBox("Black");
private final FCheckBox cbxBlue = new FCheckBox("Blue");
private final FCheckBox cbxGreen = new FCheckBox("Green");
private final FCheckBox cbxRed = new FCheckBox("Red");
private final FCheckBox cbxWhite = new FCheckBox("White");
private final FCheckBox cbxColorless = new FCheckBox("Colorless");
private final FCheckBox cbxArtifacts = new FCheckBox("Include Artifacts");
private final FCheckBox cbxBlack = new FCheckBox("Black");
private final FCheckBox cbxBlue = new FCheckBox("Blue");
private final FCheckBox cbxGreen = new FCheckBox("Green");
private final FCheckBox cbxRed = new FCheckBox("Red");
private final FCheckBox cbxWhite = new FCheckBox("White");
private final FCheckBox cbxColorless = new FCheckBox("Colorless");
private final FCheckBox cbxArtifacts = new FCheckBox("Include Artifacts");
private final FRadioButton radBalanced = new FRadioButton("Balanced");
private final FRadioButton radRandom = new FRadioButton("Random");
private final FRadioButton radSurpriseMe = new FRadioButton("Surprise Me");
private final FRadioButton radBoosters = new FRadioButton("Boosters");
private final FRadioButton radBalanced = new FRadioButton("Balanced");
private final FRadioButton radRandom = new FRadioButton("True Random");
private final FRadioButton radSurpriseMe = new FRadioButton("Surprise Me");
private final FRadioButton radBoosters = new FRadioButton("Boosters");
private final FTextField numberOfBoostersField = new FTextField.Builder().text("0").maxLength(10).build();
private final FTextField numberOfBoostersField = new FTextField.Builder().text("0").maxLength(10).build();
private final FButton btnOk = new FButton("OK");
private final FButton btnOk = new FButton("OK");
private Runnable callback;
private Runnable callback;
@SuppressWarnings("serial")
public DialogChooseColors(final List<Byte> preferredColors, final PoolType poolType, final boolean includeArtifacts) {
@SuppressWarnings("serial")
public DialogChooseColors(final List<Byte> preferredColors, final PoolType poolType, final boolean includeArtifacts) {
for (Byte color : preferredColors) {
switch (color) {
case MagicColor.BLACK:
cbxBlack.setSelected(true);
break;
case MagicColor.BLUE:
cbxBlue.setSelected(true);
break;
case MagicColor.GREEN:
cbxGreen.setSelected(true);
break;
case MagicColor.RED:
cbxRed.setSelected(true);
break;
case MagicColor.WHITE:
cbxWhite.setSelected(true);
break;
case MagicColor.COLORLESS:
cbxColorless.setSelected(true);
break;
}
}
for (Byte color : preferredColors) {
switch (color) {
case MagicColor.BLACK:
cbxBlack.setSelected(true);
break;
case MagicColor.BLUE:
cbxBlue.setSelected(true);
break;
case MagicColor.GREEN:
cbxGreen.setSelected(true);
break;
case MagicColor.RED:
cbxRed.setSelected(true);
break;
case MagicColor.WHITE:
cbxWhite.setSelected(true);
break;
case MagicColor.COLORLESS:
cbxColorless.setSelected(true);
break;
}
}
cbxArtifacts.setSelected(includeArtifacts);
cbxArtifacts.setSelected(includeArtifacts);
switch (poolType) {
case BALANCED:
radBalanced.setSelected(true);
radRandom.setSelected(false);
radSurpriseMe.setSelected(false);
radBoosters.setSelected(false);
break;
case RANDOM:
radBalanced.setSelected(false);
radRandom.setSelected(true);
radSurpriseMe.setSelected(false);
radBoosters.setSelected(false);
break;
case RANDOM_BALANCED:
radBalanced.setSelected(false);
radRandom.setSelected(false);
radSurpriseMe.setSelected(true);
radBoosters.setSelected(false);
break;
case BOOSTERS:
radBalanced.setSelected(false);
radRandom.setSelected(false);
radSurpriseMe.setSelected(false);
radBoosters.setSelected(true);
break;
}
switch (poolType) {
case BALANCED:
radBalanced.setSelected(true);
radRandom.setSelected(false);
radSurpriseMe.setSelected(false);
radBoosters.setSelected(false);
break;
case RANDOM:
radBalanced.setSelected(false);
radRandom.setSelected(true);
radSurpriseMe.setSelected(false);
radBoosters.setSelected(false);
break;
case RANDOM_BALANCED:
radBalanced.setSelected(false);
radRandom.setSelected(false);
radSurpriseMe.setSelected(true);
radBoosters.setSelected(false);
break;
case BOOSTERS:
radBalanced.setSelected(false);
radRandom.setSelected(false);
radSurpriseMe.setSelected(false);
radBoosters.setSelected(true);
break;
}
mainPanel.setOpaque(false);
mainPanel.setBackgroundTexture(FSkin.getIcon(FSkinProp.BG_TEXTURE));
mainPanel.setOpaque(false);
mainPanel.setBackgroundTexture(FSkin.getIcon(FSkinProp.BG_TEXTURE));
final String contentPanelConstraints = "w 200px!, h 290px!, left, gap 5, insets 10 25 10 25, wrap 1";
final String contentPanelConstraints = "w 200px!, h 340px!, left, gap 5, insets 10 25 10 25, wrap 1";
//Right side
final FPanel right = new FPanel(new MigLayout(contentPanelConstraints));
right.setOpaque(false);
right.add(new FLabel.Builder().text("Colors").fontSize(18).build(), "gaptop 10");
//Right side
final FPanel right = new FPanel(new MigLayout(contentPanelConstraints));
right.setOpaque(false);
final FLabel clearColors = new FLabel.Builder().text("Clear All").fontSize(12).opaque(true).hoverable(true).build();
clearColors.setCommand(new UiCommand() {
@Override
public void run() {
cbxBlack.setSelected(false);
cbxBlue.setSelected(false);
cbxGreen.setSelected(false);
cbxRed.setSelected(false);
cbxWhite.setSelected(false);
cbxColorless.setSelected(false);
}
});
final FLabel clearColors = new FLabel.Builder().text("Clear All").fontSize(12).opaque(true).hoverable(true).build();
clearColors.setCommand(new UiCommand() {
@Override
public void run() {
cbxBlack.setSelected(false);
cbxBlue.setSelected(false);
cbxGreen.setSelected(false);
cbxRed.setSelected(false);
cbxWhite.setSelected(false);
cbxColorless.setSelected(false);
}
});
right.add(clearColors, "w 75px!, h 20px!, gaptop 10");
right.add(cbxBlack, "gaptop 10");
right.add(cbxBlue);
right.add(cbxGreen);
right.add(cbxRed);
right.add(cbxWhite);
right.add(cbxColorless);
final FLabel boosterPackLabel = new FLabel.Builder().text("Number of Boosters:").fontSize(14).build();
final FLabel colorsLabel = new FLabel.Builder().text("Colors").fontSize(18).build();
final FTextPane noSettingsText = new FTextPane("No settings are available for this selection.");
//Left Side
final FPanel left = new FPanel(new MigLayout(contentPanelConstraints));
left.setOpaque(false);
left.add(new FLabel.Builder().text("Distribution").fontSize(18).build(), "gaptop 10");
if (radBoosters.isSelected()) {
right.add(boosterPackLabel, "gaptop 10");
right.add(numberOfBoostersField, "w 100px!, gaptop 5");
} else if (radSurpriseMe.isSelected()) {
right.add(noSettingsText, "gaptop 10");
} else if (radRandom.isSelected()) {
right.add(cbxArtifacts, "gaptop 10");
} else {
right.add(colorsLabel, "gaptop 10");
right.add(clearColors, "w 75px!, h 20px!, gaptop 10");
right.add(cbxBlack, "gaptop 10");
right.add(cbxBlue);
right.add(cbxGreen);
right.add(cbxRed);
right.add(cbxWhite);
right.add(cbxColorless);
right.add(cbxArtifacts, "gaptop 25");
}
final JXButtonPanel poolTypePanel = new JXButtonPanel();
final String radioConstraints = "h 25px!, gaptop 5";
poolTypePanel.add(radBalanced, radioConstraints);
poolTypePanel.add(radRandom, radioConstraints);
poolTypePanel.add(radSurpriseMe, radioConstraints);
poolTypePanel.add(radBoosters, radioConstraints);
//Left Side
final FPanel left = new FPanel(new MigLayout(contentPanelConstraints));
left.setOpaque(false);
left.add(new FLabel.Builder().text("Distribution").fontSize(18).build(), "gaptop 10");
ActionListener radioButtonListener = new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
clearColors.setEnabled(radBalanced.isSelected());
cbxBlack.setEnabled(radBalanced.isSelected());
cbxBlue.setEnabled(radBalanced.isSelected());
cbxGreen.setEnabled(radBalanced.isSelected());
cbxRed.setEnabled(radBalanced.isSelected());
cbxWhite.setEnabled(radBalanced.isSelected());
cbxColorless.setEnabled(radBalanced.isSelected());
cbxArtifacts.setEnabled(!radSurpriseMe.isSelected() && !radBoosters.isSelected());
numberOfBoostersField.setEnabled(radBoosters.isSelected());
}
};
final JXButtonPanel poolTypePanel = new JXButtonPanel();
final String radioConstraints = "h 25px!, gaptop 5";
poolTypePanel.add(radBalanced, radioConstraints);
poolTypePanel.add(radRandom, radioConstraints);
poolTypePanel.add(radSurpriseMe, radioConstraints);
poolTypePanel.add(radBoosters, radioConstraints);
clearColors.setEnabled(radBalanced.isSelected());
cbxBlack.setEnabled(radBalanced.isSelected());
cbxBlue.setEnabled(radBalanced.isSelected());
cbxGreen.setEnabled(radBalanced.isSelected());
cbxRed.setEnabled(radBalanced.isSelected());
cbxWhite.setEnabled(radBalanced.isSelected());
cbxColorless.setEnabled(radBalanced.isSelected());
cbxArtifacts.setEnabled(!radSurpriseMe.isSelected() && !radBoosters.isSelected());
numberOfBoostersField.setEnabled(radBoosters.isSelected());
ActionListener radioButtonListener = new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
radBalanced.setToolTipText("A balanced distribution will provide a roughly equal number of cards in each selected color.");
radRandom.setToolTipText("A random distribution will be almost entirely randomly selected. This ignores any color selections.");
radSurpriseMe.setToolTipText("This is the same as a balanced distribution, except the colors picked will be random and you will not be told what they are.");
radBoosters.setToolTipText("This ignores all color settings and instead generates a card pool out of a specified number of booster packs.");
cbxArtifacts.setToolTipText("When selected, artifacts will be included in your pool regardless of color selections. This mimics the old card pool behavior.");
right.removeAll();
radBalanced.addActionListener(radioButtonListener);
radRandom.addActionListener(radioButtonListener);
radSurpriseMe.addActionListener(radioButtonListener);
radBoosters.addActionListener(radioButtonListener);
if (radBoosters.isSelected()) {
right.add(boosterPackLabel, "gaptop 10");
right.add(numberOfBoostersField, "w 100px!, gaptop 5");
} else if (radSurpriseMe.isSelected()) {
right.add(noSettingsText, "gaptop 10");
} else if (radRandom.isSelected()) {
right.add(cbxArtifacts, "gaptop 10");
} else {
right.add(colorsLabel, "gaptop 10");
right.add(clearColors, "w 75px!, h 20px!, gaptop 10");
right.add(cbxBlack, "gaptop 10");
right.add(cbxBlue);
right.add(cbxGreen);
right.add(cbxRed);
right.add(cbxWhite);
right.add(cbxColorless);
right.add(cbxArtifacts, "gaptop 25");
}
left.add(poolTypePanel, "gaptop 15");
left.add(cbxArtifacts, "gaptop 25");
left.add(numberOfBoostersField, "w 100px!, gaptop 15");
clearColors.setVisible(radBalanced.isSelected());
cbxBlack.setVisible(radBalanced.isSelected());
cbxBlue.setVisible(radBalanced.isSelected());
cbxGreen.setVisible(radBalanced.isSelected());
cbxRed.setVisible(radBalanced.isSelected());
cbxWhite.setVisible(radBalanced.isSelected());
cbxColorless.setVisible(radBalanced.isSelected());
cbxArtifacts.setVisible(!radSurpriseMe.isSelected() && !radBoosters.isSelected());
numberOfBoostersField.setVisible(radBoosters.isSelected());
//Add Bottom and Panels
mainPanel.add(left);
mainPanel.add(right);
right.validate();
right.repaint();
btnOk.setCommand(new UiCommand() {
@Override
public void run() {
SOverlayUtils.hideOverlay();
callback.run();
}
});
}
};
FButton btnCancel = new FButton("Cancel");
btnCancel.setCommand(new UiCommand() {
@Override
public void run() {
SOverlayUtils.hideOverlay();
}
});
clearColors.setVisible(radBalanced.isSelected());
cbxBlack.setVisible(radBalanced.isSelected());
cbxBlue.setVisible(radBalanced.isSelected());
cbxGreen.setVisible(radBalanced.isSelected());
cbxRed.setVisible(radBalanced.isSelected());
cbxWhite.setVisible(radBalanced.isSelected());
cbxColorless.setVisible(radBalanced.isSelected());
cbxArtifacts.setVisible(!radSurpriseMe.isSelected() && !radBoosters.isSelected());
numberOfBoostersField.setVisible(radBoosters.isSelected());
JPanel southPanel = new JPanel(new MigLayout("insets 10, gap 20, ax right"));
southPanel.setOpaque(false);
southPanel.add(btnOk, "w 150px!, h 30px!");
southPanel.add(btnCancel, "w 150px!, h 30px!");
radBalanced.setToolTipText("A balanced distribution will provide a roughly equal number of cards in each selected color.");
radRandom.setToolTipText("A random distribution will be almost entirely randomly selected. This ignores any color selections.");
radSurpriseMe.setToolTipText("This is the same as a balanced distribution, except the colors picked will be random and you will not be told what they are.");
radBoosters.setToolTipText("This ignores all color settings and instead generates a card pool out of a specified number of booster packs.");
cbxArtifacts.setToolTipText("When selected, artifacts will be included in your pool regardless of color selections. This mimics the old card pool behavior.");
mainPanel.add(southPanel, "dock south, gapBottom 10");
radBalanced.addActionListener(radioButtonListener);
radRandom.addActionListener(radioButtonListener);
radSurpriseMe.addActionListener(radioButtonListener);
radBoosters.addActionListener(radioButtonListener);
}
left.add(poolTypePanel, "gaptop 15");
public void show(final Runnable callback) {
//Add Bottom and Panels
mainPanel.add(left);
mainPanel.add(right);
this.callback = callback;
btnOk.setCommand(new UiCommand() {
@Override
public void run() {
SOverlayUtils.hideOverlay();
callback.run();
}
});
final JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel();
overlay.setLayout(new MigLayout("insets 30, gap 15, wrap, ax center, ay center"));
overlay.add(mainPanel);
FButton btnCancel = new FButton("Cancel");
btnCancel.setCommand(new UiCommand() {
@Override
public void run() {
SOverlayUtils.hideOverlay();
}
});
mainPanel.getRootPane().setDefaultButton(btnOk);
JPanel southPanel = new JPanel(new MigLayout("insets 10, gap 20, ax right"));
southPanel.setOpaque(false);
southPanel.add(btnOk, "w 150px!, h 30px!");
southPanel.add(btnCancel, "w 150px!, h 30px!");
SOverlayUtils.showOverlay();
mainPanel.add(southPanel, "dock south, gapBottom 10");
}
}
public List<Byte> getPreferredColors() {
public void show(final Runnable callback) {
List<Byte> preferredColors = new ArrayList<>();
this.callback = callback;
if (cbxBlack.isSelected()) {
preferredColors.add(MagicColor.BLACK);
}
if (cbxBlue.isSelected()) {
preferredColors.add(MagicColor.BLUE);
}
if (cbxGreen.isSelected()) {
preferredColors.add(MagicColor.GREEN);
}
if (cbxRed.isSelected()) {
preferredColors.add(MagicColor.RED);
}
if (cbxWhite.isSelected()) {
preferredColors.add(MagicColor.WHITE);
}
if (cbxColorless.isSelected()) {
preferredColors.add(MagicColor.COLORLESS);
}
final JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel();
overlay.setLayout(new MigLayout("insets 30, gap 15, wrap, ax center, ay center"));
overlay.add(mainPanel);
return preferredColors;
mainPanel.getRootPane().setDefaultButton(btnOk);
}
SOverlayUtils.showOverlay();
public PoolType getPoolType() {
}
if (radRandom.isSelected()) {
return PoolType.RANDOM;
} else if (radSurpriseMe.isSelected()) {
return PoolType.RANDOM_BALANCED;
} else if (radBoosters.isSelected()) {
return PoolType.BOOSTERS;
}
public List<Byte> getPreferredColors() {
return PoolType.BALANCED;
List<Byte> preferredColors = new ArrayList<>();
}
if (cbxBlack.isSelected()) {
preferredColors.add(MagicColor.BLACK);
}
if (cbxBlue.isSelected()) {
preferredColors.add(MagicColor.BLUE);
}
if (cbxGreen.isSelected()) {
preferredColors.add(MagicColor.GREEN);
}
if (cbxRed.isSelected()) {
preferredColors.add(MagicColor.RED);
}
if (cbxWhite.isSelected()) {
preferredColors.add(MagicColor.WHITE);
}
if (cbxColorless.isSelected()) {
preferredColors.add(MagicColor.COLORLESS);
}
public boolean includeArtifacts() {
return cbxArtifacts.isSelected();
}
return preferredColors;
public int getNumberOfBoosters() {
try {
return Integer.valueOf(numberOfBoostersField.getText());
} catch (NumberFormatException e) {
return 0;
}
}
}
public PoolType getPoolType() {
if (radRandom.isSelected()) {
return PoolType.RANDOM;
} else if (radSurpriseMe.isSelected()) {
return PoolType.RANDOM_BALANCED;
} else if (radBoosters.isSelected()) {
return PoolType.BOOSTERS;
}
return PoolType.BALANCED;
}
public boolean includeArtifacts() {
return cbxArtifacts.isSelected();
}
public int getNumberOfBoosters() {
try {
return Integer.valueOf(numberOfBoostersField.getText());
} catch (NumberFormatException e) {
return 0;
}
}
}

View File

@@ -86,8 +86,8 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
private final FCheckBox boxCompleteSet = new FCheckBox("Start with all cards in selected sets");
private final FCheckBox boxAllowDuplicates = new FCheckBox("Allow duplicate cards");
private final FLabel lblPreferredColor = new FLabel.Builder().text("Starting pool colors:").build();
private final FLabel btnPreferredColors = new FLabel.Builder().opaque(true).hoverable(true).text("Choose Colors").build();
private final FLabel lblPreferredColor = new FLabel.Builder().text("Starting pool distribution:").build();
private final FLabel btnPreferredColors = new FLabel.Builder().opaque(true).hoverable(true).text("Choose Distribution").build();
private final FLabel btnPrizeDefineCustomFormat = new FLabel.Builder().opaque(true).hoverable(true).text("Define custom format").build();