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 { 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 cbxBlack = new FCheckBox("Black");
private final FCheckBox cbxBlue = new FCheckBox("Blue"); private final FCheckBox cbxBlue = new FCheckBox("Blue");
private final FCheckBox cbxGreen = new FCheckBox("Green"); private final FCheckBox cbxGreen = new FCheckBox("Green");
private final FCheckBox cbxRed = new FCheckBox("Red"); private final FCheckBox cbxRed = new FCheckBox("Red");
private final FCheckBox cbxWhite = new FCheckBox("White"); private final FCheckBox cbxWhite = new FCheckBox("White");
private final FCheckBox cbxColorless = new FCheckBox("Colorless"); private final FCheckBox cbxColorless = new FCheckBox("Colorless");
private final FCheckBox cbxArtifacts = new FCheckBox("Include Artifacts"); private final FCheckBox cbxArtifacts = new FCheckBox("Include Artifacts");
private final FRadioButton radBalanced = new FRadioButton("Balanced"); private final FRadioButton radBalanced = new FRadioButton("Balanced");
private final FRadioButton radRandom = new FRadioButton("Random"); private final FRadioButton radRandom = new FRadioButton("True Random");
private final FRadioButton radSurpriseMe = new FRadioButton("Surprise Me"); private final FRadioButton radSurpriseMe = new FRadioButton("Surprise Me");
private final FRadioButton radBoosters = new FRadioButton("Boosters"); 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") @SuppressWarnings("serial")
public DialogChooseColors(final List<Byte> preferredColors, final PoolType poolType, final boolean includeArtifacts) { public DialogChooseColors(final List<Byte> preferredColors, final PoolType poolType, final boolean includeArtifacts) {
for (Byte color : preferredColors) { for (Byte color : preferredColors) {
switch (color) { switch (color) {
case MagicColor.BLACK: case MagicColor.BLACK:
cbxBlack.setSelected(true); cbxBlack.setSelected(true);
break; break;
case MagicColor.BLUE: case MagicColor.BLUE:
cbxBlue.setSelected(true); cbxBlue.setSelected(true);
break; break;
case MagicColor.GREEN: case MagicColor.GREEN:
cbxGreen.setSelected(true); cbxGreen.setSelected(true);
break; break;
case MagicColor.RED: case MagicColor.RED:
cbxRed.setSelected(true); cbxRed.setSelected(true);
break; break;
case MagicColor.WHITE: case MagicColor.WHITE:
cbxWhite.setSelected(true); cbxWhite.setSelected(true);
break; break;
case MagicColor.COLORLESS: case MagicColor.COLORLESS:
cbxColorless.setSelected(true); cbxColorless.setSelected(true);
break; break;
} }
} }
cbxArtifacts.setSelected(includeArtifacts); cbxArtifacts.setSelected(includeArtifacts);
switch (poolType) { switch (poolType) {
case BALANCED: case BALANCED:
radBalanced.setSelected(true); radBalanced.setSelected(true);
radRandom.setSelected(false); radRandom.setSelected(false);
radSurpriseMe.setSelected(false); radSurpriseMe.setSelected(false);
radBoosters.setSelected(false); radBoosters.setSelected(false);
break; break;
case RANDOM: case RANDOM:
radBalanced.setSelected(false); radBalanced.setSelected(false);
radRandom.setSelected(true); radRandom.setSelected(true);
radSurpriseMe.setSelected(false); radSurpriseMe.setSelected(false);
radBoosters.setSelected(false); radBoosters.setSelected(false);
break; break;
case RANDOM_BALANCED: case RANDOM_BALANCED:
radBalanced.setSelected(false); radBalanced.setSelected(false);
radRandom.setSelected(false); radRandom.setSelected(false);
radSurpriseMe.setSelected(true); radSurpriseMe.setSelected(true);
radBoosters.setSelected(false); radBoosters.setSelected(false);
break; break;
case BOOSTERS: case BOOSTERS:
radBalanced.setSelected(false); radBalanced.setSelected(false);
radRandom.setSelected(false); radRandom.setSelected(false);
radSurpriseMe.setSelected(false); radSurpriseMe.setSelected(false);
radBoosters.setSelected(true); radBoosters.setSelected(true);
break; break;
} }
mainPanel.setOpaque(false); mainPanel.setOpaque(false);
mainPanel.setBackgroundTexture(FSkin.getIcon(FSkinProp.BG_TEXTURE)); 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 //Right side
final FPanel right = new FPanel(new MigLayout(contentPanelConstraints)); final FPanel right = new FPanel(new MigLayout(contentPanelConstraints));
right.setOpaque(false); right.setOpaque(false);
right.add(new FLabel.Builder().text("Colors").fontSize(18).build(), "gaptop 10");
final FLabel clearColors = new FLabel.Builder().text("Clear All").fontSize(12).opaque(true).hoverable(true).build(); final FLabel clearColors = new FLabel.Builder().text("Clear All").fontSize(12).opaque(true).hoverable(true).build();
clearColors.setCommand(new UiCommand() { clearColors.setCommand(new UiCommand() {
@Override @Override
public void run() { public void run() {
cbxBlack.setSelected(false); cbxBlack.setSelected(false);
cbxBlue.setSelected(false); cbxBlue.setSelected(false);
cbxGreen.setSelected(false); cbxGreen.setSelected(false);
cbxRed.setSelected(false); cbxRed.setSelected(false);
cbxWhite.setSelected(false); cbxWhite.setSelected(false);
cbxColorless.setSelected(false); cbxColorless.setSelected(false);
} }
}); });
right.add(clearColors, "w 75px!, h 20px!, gaptop 10"); final FLabel boosterPackLabel = new FLabel.Builder().text("Number of Boosters:").fontSize(14).build();
right.add(cbxBlack, "gaptop 10"); final FLabel colorsLabel = new FLabel.Builder().text("Colors").fontSize(18).build();
right.add(cbxBlue); final FTextPane noSettingsText = new FTextPane("No settings are available for this selection.");
right.add(cbxGreen);
right.add(cbxRed);
right.add(cbxWhite);
right.add(cbxColorless);
//Left Side if (radBoosters.isSelected()) {
final FPanel left = new FPanel(new MigLayout(contentPanelConstraints)); right.add(boosterPackLabel, "gaptop 10");
left.setOpaque(false); right.add(numberOfBoostersField, "w 100px!, gaptop 5");
left.add(new FLabel.Builder().text("Distribution").fontSize(18).build(), "gaptop 10"); } 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(); //Left Side
final String radioConstraints = "h 25px!, gaptop 5"; final FPanel left = new FPanel(new MigLayout(contentPanelConstraints));
poolTypePanel.add(radBalanced, radioConstraints); left.setOpaque(false);
poolTypePanel.add(radRandom, radioConstraints); left.add(new FLabel.Builder().text("Distribution").fontSize(18).build(), "gaptop 10");
poolTypePanel.add(radSurpriseMe, radioConstraints);
poolTypePanel.add(radBoosters, radioConstraints);
ActionListener radioButtonListener = new ActionListener() { final JXButtonPanel poolTypePanel = new JXButtonPanel();
@Override final String radioConstraints = "h 25px!, gaptop 5";
public void actionPerformed(final ActionEvent e) { poolTypePanel.add(radBalanced, radioConstraints);
clearColors.setEnabled(radBalanced.isSelected()); poolTypePanel.add(radRandom, radioConstraints);
cbxBlack.setEnabled(radBalanced.isSelected()); poolTypePanel.add(radSurpriseMe, radioConstraints);
cbxBlue.setEnabled(radBalanced.isSelected()); poolTypePanel.add(radBoosters, radioConstraints);
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());
}
};
clearColors.setEnabled(radBalanced.isSelected()); ActionListener radioButtonListener = new ActionListener() {
cbxBlack.setEnabled(radBalanced.isSelected()); @Override
cbxBlue.setEnabled(radBalanced.isSelected()); public void actionPerformed(final ActionEvent e) {
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());
radBalanced.setToolTipText("A balanced distribution will provide a roughly equal number of cards in each selected color."); right.removeAll();
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.");
radBalanced.addActionListener(radioButtonListener); if (radBoosters.isSelected()) {
radRandom.addActionListener(radioButtonListener); right.add(boosterPackLabel, "gaptop 10");
radSurpriseMe.addActionListener(radioButtonListener); right.add(numberOfBoostersField, "w 100px!, gaptop 5");
radBoosters.addActionListener(radioButtonListener); } 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"); clearColors.setVisible(radBalanced.isSelected());
left.add(cbxArtifacts, "gaptop 25"); cbxBlack.setVisible(radBalanced.isSelected());
left.add(numberOfBoostersField, "w 100px!, gaptop 15"); 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 right.validate();
mainPanel.add(left); right.repaint();
mainPanel.add(right);
btnOk.setCommand(new UiCommand() { }
@Override };
public void run() {
SOverlayUtils.hideOverlay();
callback.run();
}
});
FButton btnCancel = new FButton("Cancel"); clearColors.setVisible(radBalanced.isSelected());
btnCancel.setCommand(new UiCommand() { cbxBlack.setVisible(radBalanced.isSelected());
@Override cbxBlue.setVisible(radBalanced.isSelected());
public void run() { cbxGreen.setVisible(radBalanced.isSelected());
SOverlayUtils.hideOverlay(); 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")); radBalanced.setToolTipText("A balanced distribution will provide a roughly equal number of cards in each selected color.");
southPanel.setOpaque(false); radRandom.setToolTipText("A random distribution will be almost entirely randomly selected. This ignores any color selections.");
southPanel.add(btnOk, "w 150px!, h 30px!"); 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.");
southPanel.add(btnCancel, "w 150px!, h 30px!"); 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(); FButton btnCancel = new FButton("Cancel");
overlay.setLayout(new MigLayout("insets 30, gap 15, wrap, ax center, ay center")); btnCancel.setCommand(new UiCommand() {
overlay.add(mainPanel); @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()) { final JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel();
preferredColors.add(MagicColor.BLACK); overlay.setLayout(new MigLayout("insets 30, gap 15, wrap, ax center, ay center"));
} overlay.add(mainPanel);
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);
}
return preferredColors; mainPanel.getRootPane().setDefaultButton(btnOk);
} SOverlayUtils.showOverlay();
public PoolType getPoolType() { }
if (radRandom.isSelected()) { public List<Byte> getPreferredColors() {
return PoolType.RANDOM;
} else if (radSurpriseMe.isSelected()) {
return PoolType.RANDOM_BALANCED;
} else if (radBoosters.isSelected()) {
return PoolType.BOOSTERS;
}
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 preferredColors;
return cbxArtifacts.isSelected();
}
public int getNumberOfBoosters() { }
try {
return Integer.valueOf(numberOfBoostersField.getText()); public PoolType getPoolType() {
} catch (NumberFormatException e) {
return 0; 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 boxCompleteSet = new FCheckBox("Start with all cards in selected sets");
private final FCheckBox boxAllowDuplicates = new FCheckBox("Allow duplicate cards"); private final FCheckBox boxAllowDuplicates = new FCheckBox("Allow duplicate cards");
private final FLabel lblPreferredColor = new FLabel.Builder().text("Starting pool 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 Colors").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(); private final FLabel btnPrizeDefineCustomFormat = new FLabel.Builder().opaque(true).hoverable(true).text("Define custom format").build();