mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Quest start UI done
This commit is contained in:
@@ -6,6 +6,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
@@ -13,6 +14,7 @@ import forge.deck.Deck;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.item.CardPrinted;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
@@ -39,6 +41,7 @@ public enum CSubmenuQuestData implements ICDoc {
|
|||||||
|
|
||||||
private final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE;
|
private final VSubmenuQuestData view = VSubmenuQuestData.SINGLETON_INSTANCE;
|
||||||
private final List<String> customFormatCodes = new ArrayList<String>();
|
private final List<String> customFormatCodes = new ArrayList<String>();
|
||||||
|
private final List<String> customPrizeFormatCodes = new ArrayList<String>();
|
||||||
|
|
||||||
private final Command cmdQuestSelect = new Command() { @Override
|
private final Command cmdQuestSelect = new Command() { @Override
|
||||||
public void execute() { changeQuest(); } };
|
public void execute() { changeQuest(); } };
|
||||||
@@ -57,6 +60,10 @@ public enum CSubmenuQuestData implements ICDoc {
|
|||||||
view.getBtnCustomFormat().setCommand( new Command() { @Override public void execute() {
|
view.getBtnCustomFormat().setCommand( new Command() { @Override public void execute() {
|
||||||
new DialogCustomFormat(customFormatCodes);
|
new DialogCustomFormat(customFormatCodes);
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
view.getBtnPrizeCustomFormat().setCommand( new Command() { @Override public void execute() {
|
||||||
|
new DialogCustomFormat(customPrizeFormatCodes);
|
||||||
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -173,7 +180,42 @@ public enum CSubmenuQuestData implements ICDoc {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameFormat fmtPrizes = fmtStartPool;
|
GameFormat fmtPrizes = null;
|
||||||
|
switch(view.getPrizedPoolType()) {
|
||||||
|
case Complete:
|
||||||
|
fmtPrizes = null;
|
||||||
|
break;
|
||||||
|
case CustomFormat:
|
||||||
|
if ( customPrizeFormatCodes.isEmpty() )
|
||||||
|
{
|
||||||
|
int answer = JOptionPane.showConfirmDialog(null, "You have defined custom format as containing no sets.\nThis will choose all editions without restriction as prized.\n\nContinue?");
|
||||||
|
if ( JOptionPane.YES_OPTION != answer )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fmtPrizes = customPrizeFormatCodes.isEmpty() ? null : new GameFormat("Custom Prizes", customPrizeFormatCodes, null); // chosen sets and no banend cards
|
||||||
|
break;
|
||||||
|
case Rotating:
|
||||||
|
fmtPrizes = view.getPrizedRotatingFormat();
|
||||||
|
break;
|
||||||
|
default: // same as starting
|
||||||
|
fmtPrizes = fmtStartPool;
|
||||||
|
if ( null == fmtPrizes && dckStartPool != null) { // build it form deck
|
||||||
|
List<String> sets = new ArrayList<String>();
|
||||||
|
for(Entry<CardPrinted, Integer> c : dckStartPool.getMain()) {
|
||||||
|
String edition = c.getKey().getEdition();
|
||||||
|
if ( !sets.contains(edition) )
|
||||||
|
sets.add(edition);
|
||||||
|
}
|
||||||
|
for(Entry<CardPrinted, Integer> c : dckStartPool.getSideboard()) {
|
||||||
|
String edition = c.getKey().getEdition();
|
||||||
|
if ( !sets.contains(edition) )
|
||||||
|
sets.add(edition);
|
||||||
|
}
|
||||||
|
fmtPrizes = new GameFormat("From deck", sets, null);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
final Object o = JOptionPane.showInputDialog(null, "Poets will remember your quest as:", "Quest Name", JOptionPane.OK_CANCEL_OPTION);
|
final Object o = JOptionPane.showInputDialog(null, "Poets will remember your quest as:", "Quest Name", JOptionPane.OK_CANCEL_OPTION);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.swing.ButtonGroup;
|
import javax.swing.ButtonGroup;
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
@@ -96,11 +95,18 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
private final JComboBox cbxCustomDeck = new JComboBox();
|
private final JComboBox cbxCustomDeck = new JComboBox();
|
||||||
|
|
||||||
private final FLabel btnDefineCustomFormat = new FLabel.Builder().opaque(true).hoverable(true).text("Define custom format").build();
|
private final FLabel btnDefineCustomFormat = 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();
|
||||||
|
|
||||||
private final JLabel lblPrizedCards = new FLabel.Builder().text("Prized cards:").build();
|
private final JLabel lblPrizedCards = new FLabel.Builder().text("Prized cards:").build();
|
||||||
private final JComboBox cbxPrizedCards = new JComboBox();
|
private final JComboBox cbxPrizedCards = new JComboBox();
|
||||||
|
|
||||||
private final JCheckBox cboAllowUnlocks = new FCheckBox("Allow sets unlock");
|
private final JLabel lblPrizeFormat = new FLabel.Builder().text("Sanctioned format:").build();
|
||||||
|
private final JComboBox cbxPrizeFormat = new JComboBox();
|
||||||
|
|
||||||
|
private final JLabel lblPrizeUnrestricted = new FLabel.Builder().text("All cards will be avaliable to win.").build();
|
||||||
|
private final JLabel lblPrizeSameAsStarting = new FLabel.Builder().text("Only sets found in starting pool will be avaliable.").build();
|
||||||
|
|
||||||
|
private final JCheckBox cboAllowUnlocks = new FCheckBox("Allow unlock of not included editions");
|
||||||
|
|
||||||
private final FLabel btnEmbark = new FLabel.Builder().opaque(true)
|
private final FLabel btnEmbark = new FLabel.Builder().opaque(true)
|
||||||
.fontSize(16).hoverable(true).text("Embark!").build();
|
.fontSize(16).hoverable(true).text("Embark!").build();
|
||||||
@@ -136,6 +142,21 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Listeners */
|
||||||
|
private final ActionListener alPrizesPool = new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
StartingPoolType newVal = getPrizedPoolType();
|
||||||
|
lblPrizeUnrestricted.setVisible(newVal == StartingPoolType.Complete);
|
||||||
|
cboAllowUnlocks.setVisible(newVal != StartingPoolType.Complete);
|
||||||
|
|
||||||
|
lblPrizeFormat.setVisible(newVal == StartingPoolType.Rotating);
|
||||||
|
cbxPrizeFormat.setVisible(newVal == StartingPoolType.Rotating);
|
||||||
|
btnPrizeDefineCustomFormat.setVisible(newVal == StartingPoolType.CustomFormat);
|
||||||
|
lblPrizeSameAsStarting.setVisible(newVal == null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
@@ -163,14 +184,21 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
|
|
||||||
// initial adjustment
|
// initial adjustment
|
||||||
alStartingPool.actionPerformed(null);
|
alStartingPool.actionPerformed(null);
|
||||||
|
alPrizesPool.actionPerformed(null);
|
||||||
|
|
||||||
cbxPrizedCards.addItem("Same format as staring pool");
|
cbxPrizedCards.addItem("Same as starting pool");
|
||||||
cbxPrizedCards.addItem("More options to come (WIP)");
|
cbxPrizedCards.addItem(StartingPoolType.Complete);
|
||||||
|
cbxPrizedCards.addItem(StartingPoolType.Rotating);
|
||||||
|
cbxPrizedCards.addItem(StartingPoolType.CustomFormat);
|
||||||
|
cbxPrizedCards.addActionListener(alPrizesPool);
|
||||||
|
|
||||||
for (GameFormat gf : Singletons.getModel().getFormats()) {
|
for (GameFormat gf : Singletons.getModel().getFormats()) {
|
||||||
cbxFormat.addItem(gf);
|
cbxFormat.addItem(gf);
|
||||||
|
cbxPrizeFormat.addItem(gf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cboAllowUnlocks.setSelected(true);
|
||||||
|
|
||||||
final Map<String, String> preconDescriptions = new HashMap<String, String>();
|
final Map<String, String> preconDescriptions = new HashMap<String, String>();
|
||||||
IStorageView<PreconDeck> preconDecks = QuestController.getPrecons();
|
IStorageView<PreconDeck> preconDecks = QuestController.getPrecons();
|
||||||
|
|
||||||
@@ -228,7 +256,7 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
final String cboWidth = "pushx, ";
|
final String cboWidth = "pushx, ";
|
||||||
final String cboWidthStart = cboWidth + hidemode;
|
final String cboWidthStart = cboWidth + hidemode;
|
||||||
|
|
||||||
pnlRestrictions.setLayout(new MigLayout("insets 0, gap 0, wrap 2", "[120, al right][240, fill]", "[|]12[|]"));
|
pnlRestrictions.setLayout(new MigLayout("insets 0, gap 0, wrap 2", "[120, al right][240, fill]", "[|]12[|]6[]"));
|
||||||
pnlRestrictions.add(lblStartingPool, constraints + lblWidthStart);
|
pnlRestrictions.add(lblStartingPool, constraints + lblWidthStart);
|
||||||
pnlRestrictions.add(cbxStartingPool, constraints + cboWidthStart);
|
pnlRestrictions.add(cbxStartingPool, constraints + cboWidthStart);
|
||||||
|
|
||||||
@@ -250,8 +278,15 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
pnlRestrictions.add(lblPrizedCards, constraints + lblWidth);
|
pnlRestrictions.add(lblPrizedCards, constraints + lblWidth);
|
||||||
pnlRestrictions.add(cbxPrizedCards, constraints + cboWidth);
|
pnlRestrictions.add(cbxPrizedCards, constraints + cboWidth);
|
||||||
|
|
||||||
pnlRestrictions.add(cboAllowUnlocks, constraints + "spanx 2, ax center");
|
|
||||||
cboAllowUnlocks.setOpaque(false);
|
pnlRestrictions.add(lblPrizeFormat, constraints + lblWidthStart);
|
||||||
|
pnlRestrictions.add(cbxPrizeFormat, constraints + cboWidthStart); // , skip 1
|
||||||
|
pnlRestrictions.add(btnPrizeDefineCustomFormat, constraints + hidemode + "spanx 2, w 240px");
|
||||||
|
pnlRestrictions.add(lblPrizeSameAsStarting, constraints + hidemode + "spanx 2" );
|
||||||
|
pnlRestrictions.add(lblPrizeUnrestricted, constraints + hidemode + "spanx 2" );
|
||||||
|
|
||||||
|
pnlRestrictions.add(cboAllowUnlocks, constraints + "spanx 2, ax right");
|
||||||
|
// cboAllowUnlocks.setOpaque(false);
|
||||||
pnlRestrictions.setOpaque(false);
|
pnlRestrictions.setOpaque(false);
|
||||||
pnlOptions.add(pnlRestrictions, "pushx, ay top");
|
pnlOptions.add(pnlRestrictions, "pushx, ay top");
|
||||||
|
|
||||||
@@ -389,6 +424,12 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
return (StartingPoolType) cbxStartingPool.getSelectedItem();
|
return (StartingPoolType) cbxStartingPool.getSelectedItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public StartingPoolType getPrizedPoolType() {
|
||||||
|
Object v = cbxPrizedCards.getSelectedItem();
|
||||||
|
return v instanceof StartingPoolType ? (StartingPoolType) v : null;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isFantasy() {
|
public boolean isFantasy() {
|
||||||
return boxFantasy.isSelected();
|
return boxFantasy.isSelected();
|
||||||
}
|
}
|
||||||
@@ -397,12 +438,15 @@ public enum VSubmenuQuestData implements IVSubmenu<CSubmenuQuestData> {
|
|||||||
return (GameFormat) cbxFormat.getSelectedItem();
|
return (GameFormat) cbxFormat.getSelectedItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public GameFormat getPrizedRotatingFormat() {
|
||||||
* TODO: Write javadoc for this method.
|
return (GameFormat) cbxPrizeFormat.getSelectedItem();
|
||||||
* @return
|
}
|
||||||
*/
|
|
||||||
public FLabel getBtnCustomFormat() {
|
public FLabel getBtnCustomFormat() {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return btnDefineCustomFormat;
|
return btnDefineCustomFormat;
|
||||||
}
|
}
|
||||||
|
public FLabel getBtnPrizeCustomFormat() {
|
||||||
|
return btnPrizeDefineCustomFormat;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ public class QuestController {
|
|||||||
final GameFormat formatPrizes, final boolean allowSetUnlocks,
|
final GameFormat formatPrizes, final boolean allowSetUnlocks,
|
||||||
final Deck startingCards, final GameFormat formatStartingPool) {
|
final Deck startingCards, final GameFormat formatStartingPool) {
|
||||||
|
|
||||||
this.load(new QuestData(name, difficulty, mode, formatPrizes)); // pass awards and unlocks here
|
this.load(new QuestData(name, difficulty, mode, formatPrizes, allowSetUnlocks)); // pass awards and unlocks here
|
||||||
|
|
||||||
if ( null != startingCards )
|
if ( null != startingCards )
|
||||||
this.myCards.addDeck(startingCards);
|
this.myCards.addDeck(startingCards);
|
||||||
@@ -349,8 +349,8 @@ public class QuestController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int toUnlock = this.questFormat.getExcludedSetCodes().size();
|
int toUnlock = this.questFormat.getExcludedSetCodes().size();
|
||||||
if (toUnlock > (wins + 50) / 50) {
|
if (toUnlock > 1 + wins / 50) {
|
||||||
toUnlock = (wins + 50) / 50;
|
toUnlock = 1 + wins / 50;
|
||||||
}
|
}
|
||||||
if (toUnlock > 8) {
|
if (toUnlock > 8) {
|
||||||
toUnlock = 8;
|
toUnlock = 8;
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ import forge.game.GameFormat;
|
|||||||
*/
|
*/
|
||||||
public final class GameFormatQuest extends GameFormat {
|
public final class GameFormatQuest extends GameFormat {
|
||||||
|
|
||||||
|
private boolean allowUnlocks = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new game format based on two lists.
|
* Instantiates a new game format based on two lists.
|
||||||
*
|
*
|
||||||
@@ -50,14 +52,20 @@ public final class GameFormatQuest extends GameFormat {
|
|||||||
super(newName, setsToAllow, cardsToBan);
|
super(newName, setsToAllow, cardsToBan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GameFormatQuest(final String newName, final List<String> setsToAllow, final List<String> cardsToBan, boolean allowSetUnlocks) {
|
||||||
|
super(newName, setsToAllow, cardsToBan);
|
||||||
|
allowUnlocks = allowSetUnlocks;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Instantiates a new game format based on an existing format.
|
* Instantiates a new game format based on an existing format.
|
||||||
*
|
*
|
||||||
* @param toCopy
|
* @param toCopy
|
||||||
* an existing format
|
* an existing format
|
||||||
|
* @param allowSetUnlocks
|
||||||
*/
|
*/
|
||||||
public GameFormatQuest(final GameFormat toCopy) {
|
public GameFormatQuest(final GameFormat toCopy, boolean allowSetUnlocks) {
|
||||||
this(toCopy.getName(), toCopy.getAllowedSetCodes(), toCopy.getBannedCardNames());
|
this(toCopy.getName(), toCopy.getAllowedSetCodes(), toCopy.getBannedCardNames());
|
||||||
|
allowUnlocks = allowSetUnlocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -82,17 +90,6 @@ public final class GameFormatQuest extends GameFormat {
|
|||||||
allowedSetCodes.clear();
|
allowedSetCodes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param setCode
|
|
||||||
* the set code to add
|
|
||||||
*/
|
|
||||||
public void addAllowedSet(final String setCode) {
|
|
||||||
if (!allowedSetCodes.contains(setCode)) {
|
|
||||||
allowedSetCodes.add(setCode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the list of excluded sets.
|
* Get the list of excluded sets.
|
||||||
*
|
*
|
||||||
@@ -137,6 +134,10 @@ public final class GameFormatQuest extends GameFormat {
|
|||||||
return (this.isSetLegal("ICE") || this.isSetLegal("CSP"));
|
return (this.isSetLegal("ICE") || this.isSetLegal("CSP"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canUnlockSets() {
|
||||||
|
return allowUnlocks;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class Predicates.
|
* The Class Predicates.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ public final class QuestData {
|
|||||||
private final QuestAssets assets;
|
private final QuestAssets assets;
|
||||||
private final QuestAchievements achievements;
|
private final QuestAchievements achievements;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new quest data.
|
* Instantiates a new quest data.
|
||||||
* @param mode2
|
* @param mode2
|
||||||
@@ -69,15 +71,17 @@ public final class QuestData {
|
|||||||
* String, persistent format for the quest (null if none).
|
* String, persistent format for the quest (null if none).
|
||||||
* @param userFormat
|
* @param userFormat
|
||||||
* user-defined format, if any (null if none).
|
* user-defined format, if any (null if none).
|
||||||
|
* @param allowSetUnlocks
|
||||||
*/
|
*/
|
||||||
public QuestData(String name2, int diff, QuestMode mode2, GameFormat userFormat) {
|
public QuestData(String name2, int diff, QuestMode mode2, GameFormat userFormat, boolean allowSetUnlocks) {
|
||||||
this.name = name2;
|
this.name = name2;
|
||||||
|
|
||||||
if ( userFormat != null)
|
if ( userFormat != null)
|
||||||
this.format = new GameFormatQuest(userFormat);
|
this.format = new GameFormatQuest(userFormat, allowSetUnlocks);
|
||||||
this.mode = mode2;
|
this.mode = mode2;
|
||||||
this.achievements = new QuestAchievements(diff);
|
this.achievements = new QuestAchievements(diff);
|
||||||
this.assets = new QuestAssets(format);
|
this.assets = new QuestAssets(format);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user