mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Added option to start quests with a precon deck
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -11529,6 +11529,7 @@ src/main/java/forge/quest/data/QuestDuel.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/QuestEvent.java -text
|
||||
src/main/java/forge/quest/data/QuestEventManager.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/QuestStartPool.java -text
|
||||
src/main/java/forge/quest/data/QuestUtil.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/QuestUtilCards.java -text
|
||||
src/main/java/forge/quest/data/bazaar/QuestStallDefinition.java svneol=native#text/plain
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
package forge.gui.home.quest;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
@@ -17,6 +10,15 @@ import forge.properties.NewConstants;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestDataIO;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
import forge.quest.data.QuestStartPool;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static forge.quest.data.QuestStartPool.*;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -139,6 +141,16 @@ public enum CSubmenuQuestData implements ICSubmenu {
|
||||
"ControlQuest() > newQuest(): Error starting new quest!");
|
||||
}
|
||||
|
||||
final QuestStartPool startPool;
|
||||
final String startPrecon = view.getPrecon();
|
||||
if (view.getRadCompleteStart().isSelected()) {
|
||||
startPool = COMPLETE;
|
||||
} else if (view.getRadStandardStart().isSelected()) {
|
||||
startPool = STANDARD;
|
||||
} else {
|
||||
startPool = PRECON;
|
||||
}
|
||||
|
||||
final Object o = JOptionPane.showInputDialog(null, "Poets will remember your quest as:", "Quest Name", JOptionPane.OK_CANCEL_OPTION);
|
||||
|
||||
if (o == null) { return; }
|
||||
@@ -151,7 +163,7 @@ public enum CSubmenuQuestData implements ICSubmenu {
|
||||
}
|
||||
|
||||
// Give the user a few cards to build a deck
|
||||
newdata.newGame(difficulty, mode, view.getCbStandardStart().isSelected());
|
||||
newdata.newGame(difficulty, mode, startPool, startPrecon);
|
||||
newdata.setName(questName);
|
||||
newdata.saveData();
|
||||
|
||||
|
||||
@@ -1,22 +1,17 @@
|
||||
package forge.gui.home.quest;
|
||||
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.gui.home.EMenuGroup;
|
||||
import forge.gui.home.EMenuItem;
|
||||
import forge.gui.home.ICSubmenu;
|
||||
import forge.gui.home.IVSubmenu;
|
||||
import forge.gui.toolbox.FCheckBox;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.FPanel;
|
||||
import forge.gui.toolbox.FRadioButton;
|
||||
import forge.gui.toolbox.FScrollPane;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.*;
|
||||
import forge.quest.data.QuestData;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Singleton instance of "Colors" submenu in "Constructed" group.
|
||||
@@ -35,10 +30,15 @@ public enum VSubmenuQuestData implements IVSubmenu {
|
||||
private final JRadioButton radMedium = new FRadioButton("Medium");
|
||||
private final JRadioButton radHard = new FRadioButton("Hard");
|
||||
private final JRadioButton radExpert = new FRadioButton("Expert");
|
||||
|
||||
private final JRadioButton radFantasy = new FRadioButton("Fantasy");
|
||||
private final JRadioButton radClassic = new FRadioButton("Classic");
|
||||
|
||||
private final JCheckBox cbStandardStart = new FCheckBox("Standard (Type 2) Starting Pool");
|
||||
private final JRadioButton radCompleteStart = new FRadioButton("Unrestricted Starting Pool");
|
||||
private final JRadioButton radStandardStart = new FRadioButton("Standard (Type 2) Starting Pool");
|
||||
private final JRadioButton radPreconStart = new FRadioButton("Preconstructed Deck: ");
|
||||
private final JComboBox cbxPrecon = new JComboBox();
|
||||
|
||||
private final FLabel btnEmbark = new FLabel.Builder().opaque(true).hoverable(true).text("Embark!").build();
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -73,14 +73,32 @@ public enum VSubmenuQuestData implements IVSubmenu {
|
||||
group1.add(radMedium);
|
||||
group1.add(radHard);
|
||||
group1.add(radExpert);
|
||||
|
||||
radEasy.setSelected(true);
|
||||
radClassic.setSelected(true);
|
||||
|
||||
final ButtonGroup group2 = new ButtonGroup();
|
||||
group2.add(radFantasy);
|
||||
group2.add(radClassic);
|
||||
radClassic.setSelected(true);
|
||||
|
||||
final ActionListener preconListener = new ActionListener() {
|
||||
@Override public void actionPerformed(ActionEvent actionEvent) {
|
||||
cbxPrecon.setEnabled(radPreconStart.isSelected());
|
||||
}
|
||||
};
|
||||
|
||||
for (String preconDeck : QuestData.getPrecons().getNames()) {
|
||||
cbxPrecon.addItem(preconDeck);
|
||||
}
|
||||
|
||||
final ButtonGroup group3 = new ButtonGroup();
|
||||
group3.add(radCompleteStart);
|
||||
radCompleteStart.addActionListener(preconListener);
|
||||
group3.add(radStandardStart);
|
||||
radStandardStart.addActionListener(preconListener);
|
||||
group3.add(radPreconStart);
|
||||
radPreconStart.addActionListener(preconListener);
|
||||
radCompleteStart.setSelected(true);
|
||||
cbxPrecon.setEnabled(false);
|
||||
final JPanel pnlOptions = new JPanel();
|
||||
pnlOptions.setOpaque(false);
|
||||
pnlOptions.setLayout(new MigLayout("insets 0, gap 0"));
|
||||
@@ -91,8 +109,11 @@ public enum VSubmenuQuestData implements IVSubmenu {
|
||||
pnlOptions.add(radMedium, constraints + ", gap 7.5% 2.5% 0 0");
|
||||
pnlOptions.add(radClassic, constraints + ", wrap");
|
||||
pnlOptions.add(radHard, constraints + ", gap 7.5% 2.5% 0 0");
|
||||
pnlOptions.add(cbStandardStart, constraints + ", wrap");
|
||||
pnlOptions.add(radExpert, constraints + ", gap 7.5% 2.5% 0 0, wrap");
|
||||
pnlOptions.add(radCompleteStart, constraints + ", wrap");
|
||||
pnlOptions.add(radExpert, constraints + ", gap 7.5% 2.5% 0 0 ");
|
||||
pnlOptions.add(radStandardStart, constraints + ", wrap");
|
||||
pnlOptions.add(radPreconStart, constraints + ", wrap, skip");
|
||||
pnlOptions.add(cbxPrecon, "gap 20 0, w 30%!, h 35px!, wrap, skip");
|
||||
|
||||
pnlOptions.add(btnEmbark, "w 40%!, h 30px!, gap 30% 0 20px 0, span 3 1");
|
||||
|
||||
@@ -111,7 +132,7 @@ public enum VSubmenuQuestData implements IVSubmenu {
|
||||
pnlViewport.add(scr, "w 96%!, pushy, growy, gap 2% 0 0 30px");
|
||||
|
||||
pnlViewport.add(pnlTitleNew, "w 96%, h 36px!, gap 2% 0 0 10px");
|
||||
pnlViewport.add(pnlOptions, "w 96%!, h 200px!, gap 2% 0 0 20px");
|
||||
pnlViewport.add(pnlOptions, "w 96%!, h 250px!, gap 2% 0 0 20px");
|
||||
|
||||
pnl.add(new FScrollPane(pnlViewport), "w 100%!, h 100%!");
|
||||
}
|
||||
@@ -192,11 +213,24 @@ public enum VSubmenuQuestData implements IVSubmenu {
|
||||
return radClassic;
|
||||
}
|
||||
|
||||
/** @return {@link javax.swing.JCheckBox} */
|
||||
public JCheckBox getCbStandardStart() {
|
||||
return cbStandardStart;
|
||||
public JRadioButton getRadCompleteStart() {
|
||||
return radCompleteStart;
|
||||
}
|
||||
|
||||
/** @return {@link javax.swing.JCheckBox} */
|
||||
public JRadioButton getRadStandardStart() {
|
||||
return radStandardStart;
|
||||
}
|
||||
|
||||
public JRadioButton getRadPreconStart() {
|
||||
return radPreconStart;
|
||||
}
|
||||
|
||||
public String getPrecon() {
|
||||
return (String) cbxPrecon.getSelectedItem();
|
||||
}
|
||||
|
||||
|
||||
/** @return {@link forge.gui.toolbox.FLabel} */
|
||||
public FLabel getBtnEmbark() {
|
||||
return btnEmbark;
|
||||
|
||||
@@ -17,28 +17,19 @@
|
||||
*/
|
||||
package forge.quest.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.item.*;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
import forge.quest.data.item.QuestInventory;
|
||||
import forge.quest.data.pet.QuestPetManager;
|
||||
import forge.util.Predicate;
|
||||
import forge.util.StorageView;
|
||||
import forge.util.IStorage;
|
||||
import forge.util.IStorageView;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
//when you create QuestDataOld and AFTER you copy the AI decks over
|
||||
//you have to call one of these two methods below
|
||||
@@ -172,8 +163,8 @@ public final class QuestData {
|
||||
private transient QuestEvent currentEvent;
|
||||
|
||||
// This is used by shop. Had no idea where else to place this
|
||||
private static transient IStorageView<PreconDeck> preconManager = new StorageView<PreconDeck>(new PreconReader(
|
||||
ForgeProps.getFile(NewConstants.Quest.PRECONS)));
|
||||
private static transient IStorageView<PreconDeck> preconManager =
|
||||
new StorageView<PreconDeck>(new PreconReader(ForgeProps.getFile(NewConstants.Quest.PRECONS)));
|
||||
|
||||
/** The Constant RANK_TITLES. */
|
||||
public static final String[] RANK_TITLES = new String[] { "Level 0 - Confused Wizard", "Level 1 - Mana Mage",
|
||||
@@ -235,22 +226,34 @@ public final class QuestData {
|
||||
*
|
||||
* @param diff
|
||||
* the diff
|
||||
* @param m0de
|
||||
* the m0de
|
||||
* @param standardStart
|
||||
* the standard start
|
||||
* @param mode
|
||||
* the mode
|
||||
* @param startPool
|
||||
* the start type
|
||||
*/
|
||||
public void newGame(final int diff, final String m0de, final boolean standardStart) {
|
||||
public void newGame(final int diff, final String mode, final QuestStartPool startPool, final String preconName) {
|
||||
this.setDifficulty(diff);
|
||||
|
||||
final Predicate<CardPrinted> filter = standardStart ? Singletons.getModel().getFormats().getStandard()
|
||||
.getFilterPrinted() : CardPrinted.Predicates.Presets.IS_TRUE;
|
||||
|
||||
this.myCards.setupNewGameCardPool(filter, diff);
|
||||
this.setCredits(Singletons.getModel().getQuestPreferences().getPreferenceInt(QPref.STARTING_CREDITS, diff));
|
||||
|
||||
this.mode = m0de;
|
||||
this.mode = mode;
|
||||
this.life = this.mode.equals(QuestData.FANTASY) ? 15 : 20;
|
||||
|
||||
final Predicate<CardPrinted> filter;
|
||||
switch (startPool) {
|
||||
case PRECON:
|
||||
myCards.addPreconDeck(preconManager.get(preconName));
|
||||
return;
|
||||
|
||||
case STANDARD:
|
||||
filter = Singletons.getModel().getFormats().getStandard().getFilterPrinted();
|
||||
break;
|
||||
|
||||
default: //Unrestricted
|
||||
filter = CardPrinted.Predicates.Presets.IS_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
this.setCredits(Singletons.getModel().getQuestPreferences().getPreferenceInt(QPref.STARTING_CREDITS, diff));
|
||||
this.myCards.setupNewGameCardPool(filter, diff);
|
||||
}
|
||||
|
||||
// All belongings
|
||||
|
||||
7
src/main/java/forge/quest/data/QuestStartPool.java
Normal file
7
src/main/java/forge/quest/data/QuestStartPool.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package forge.quest.data;
|
||||
|
||||
public enum QuestStartPool {
|
||||
COMPLETE,
|
||||
STANDARD,
|
||||
PRECON
|
||||
}
|
||||
@@ -17,30 +17,21 @@
|
||||
*/
|
||||
package forge.quest.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import net.slightlymagic.braids.util.lambda.Lambda1;
|
||||
import forge.Singletons;
|
||||
import forge.card.BoosterGenerator;
|
||||
import forge.card.CardEdition;
|
||||
import forge.card.FormatCollection;
|
||||
import forge.deck.Deck;
|
||||
import forge.item.BoosterPack;
|
||||
import forge.item.CardDb;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.FatPack;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.item.OpenablePack;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.item.TournamentPack;
|
||||
import forge.item.*;
|
||||
import forge.quest.BoosterUtils;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.Predicate;
|
||||
import net.slightlymagic.braids.util.lambda.Lambda1;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* This is a helper class to execute operations on QuestData. It has been
|
||||
@@ -222,10 +213,14 @@ public final class QuestUtilCards {
|
||||
if (this.q.getCredits() >= value) {
|
||||
this.q.setCredits(this.q.getCredits() - value);
|
||||
this.q.getShopList().remove(precon);
|
||||
addPreconDeck(precon);
|
||||
}
|
||||
}
|
||||
|
||||
void addPreconDeck(PreconDeck precon) {
|
||||
this.q.getMyDecks().add(precon.getDeck());
|
||||
this.addAllCards(precon.getDeck().getMain().toFlatList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sell card.
|
||||
@@ -357,7 +352,9 @@ public final class QuestUtilCards {
|
||||
*/
|
||||
public void generateTournamentsInShop(final int count) {
|
||||
Predicate<CardEdition> hasTournament = CardEdition.Predicates.HAS_TOURNAMENT_PACK;
|
||||
this.q.getShopList().addAllFlat(hasTournament.random(Singletons.getModel().getEditions(), count, TournamentPack.FN_FROM_SET));
|
||||
this.q.getShopList().addAllFlat(hasTournament.random(Singletons.getModel().getEditions(),
|
||||
count,
|
||||
TournamentPack.FN_FROM_SET));
|
||||
}
|
||||
|
||||
public void generateFatPacksInShop(final int count) {
|
||||
|
||||
Reference in New Issue
Block a user