Add new booster pack quest starting pool generation, fix a card duplication bug in the quest shop, and improve the way the card shop generates singles

This commit is contained in:
Krazy
2017-05-25 06:13:04 +00:00
parent 5195b9c5b5
commit 3953610b56
12 changed files with 449 additions and 280 deletions

View File

@@ -52,6 +52,7 @@ public enum CSubmenuQuestData implements ICDoc {
private List<Byte> preferredColors = new ArrayList<>();
private PoolType poolType = PoolType.BALANCED;
private boolean includeArtifacts = true;
private int numberOfBoosters = 0;
@Override
public void register() {
@@ -112,6 +113,7 @@ public enum CSubmenuQuestData implements ICDoc {
preferredColors = colorChooser.getPreferredColors();
poolType = colorChooser.getPoolType();
includeArtifacts = colorChooser.includeArtifacts();
numberOfBoosters = colorChooser.getNumberOfBoosters();
}
});
}
@@ -270,7 +272,7 @@ public enum CSubmenuQuestData implements ICDoc {
}
}
final StartingPoolPreferences userPrefs = new StartingPoolPreferences(poolType, preferredColors, includeArtifacts, view.startWithCompleteSet(), view.allowDuplicateCards());
final StartingPoolPreferences userPrefs = new StartingPoolPreferences(poolType, preferredColors, includeArtifacts, view.startWithCompleteSet(), view.allowDuplicateCards(), numberOfBoosters);
String questName;
while (true) {

View File

@@ -30,6 +30,9 @@ public class DialogChooseColors {
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 FTextField numberOfBoostersField = new FTextField.Builder().text("0").maxLength(10).build();
private final FButton btnOk = new FButton("OK");
@@ -68,16 +71,25 @@ public class DialogChooseColors {
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;
}
@@ -122,6 +134,7 @@ public class DialogChooseColors {
poolTypePanel.add(radBalanced, radioConstraints);
poolTypePanel.add(radRandom, radioConstraints);
poolTypePanel.add(radSurpriseMe, radioConstraints);
poolTypePanel.add(radBoosters, radioConstraints);
ActionListener radioButtonListener = new ActionListener() {
@Override
@@ -133,7 +146,8 @@ public class DialogChooseColors {
cbxRed.setEnabled(radBalanced.isSelected());
cbxWhite.setEnabled(radBalanced.isSelected());
cbxColorless.setEnabled(radBalanced.isSelected());
cbxArtifacts.setEnabled(!radSurpriseMe.isSelected());
cbxArtifacts.setEnabled(!radSurpriseMe.isSelected() && !radBoosters.isSelected());
numberOfBoostersField.setEnabled(radBoosters.isSelected());
}
};
@@ -144,19 +158,23 @@ public class DialogChooseColors {
cbxRed.setEnabled(radBalanced.isSelected());
cbxWhite.setEnabled(radBalanced.isSelected());
cbxColorless.setEnabled(radBalanced.isSelected());
cbxArtifacts.setEnabled(!radSurpriseMe.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.");
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);
radRandom.addActionListener(radioButtonListener);
radSurpriseMe.addActionListener(radioButtonListener);
radBoosters.addActionListener(radioButtonListener);
left.add(poolTypePanel, "gaptop 15");
left.add(cbxArtifacts, "gaptop 25");
left.add(numberOfBoostersField, "w 100px!, gaptop 15");
//Add Bottom and Panels
mainPanel.add(left);
@@ -234,6 +252,8 @@ public class DialogChooseColors {
return PoolType.RANDOM;
} else if (radSurpriseMe.isSelected()) {
return PoolType.RANDOM_BALANCED;
} else if (radBoosters.isSelected()) {
return PoolType.BOOSTERS;
}
return PoolType.BALANCED;
@@ -244,4 +264,12 @@ public class DialogChooseColors {
return cbxArtifacts.isSelected();
}
public int getNumberOfBoosters() {
try {
return Integer.valueOf(numberOfBoostersField.getText());
} catch (NumberFormatException e) {
return 0;
}
}
}

View File

@@ -1,12 +1,10 @@
package forge.toolbox;
import java.util.Date;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import forge.interfaces.IProgressBar;
import javax.swing.*;
import java.util.Date;
/**
* A simple progress bar component using the Forge skin.
*/
@@ -47,8 +45,8 @@ public class FProgressBar extends JProgressBar implements IProgressBar {
};
@Override
public void setValue(final int value0) {
super.setValue(value0);
public void setValue(final int progress) {
super.setValue(progress);
// String.format leads to StringBuilder anyway. Direct calls will be faster
final StringBuilder sb = new StringBuilder(desc);
@@ -56,15 +54,15 @@ public class FProgressBar extends JProgressBar implements IProgressBar {
sb.append(" ");
final int maximum = getMaximum();
if (percentMode) {
sb.append(100 * value0 / maximum).append("%");
sb.append(100 * progress / maximum).append("%");
}
else {
sb.append(value0).append(" of ").append(maximum);
sb.append(progress).append(" of ").append(maximum);
}
}
if (showETA) {
calculateETA(value0);
calculateETA(progress);
sb.append(", ETA").append(String.format("%02d:%02d:%02d", etaSecs / 3600, (etaSecs % 3600) / 60, etaSecs % 60 + 1));
}
setString(sb.toString());