mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
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:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user