mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Preconstructed Decks added to quest mode shop.
This commit is contained in:
13
.gitattributes
vendored
13
.gitattributes
vendored
@@ -11234,6 +11234,7 @@ src/main/java/forge/item/InventoryItem.java -text
|
||||
src/main/java/forge/item/InventoryItemFromSet.java -text
|
||||
src/main/java/forge/item/ItemPool.java -text
|
||||
src/main/java/forge/item/ItemPoolView.java -text
|
||||
src/main/java/forge/item/PreconDeck.java -text
|
||||
src/main/java/forge/item/package-info.java -text
|
||||
src/main/java/forge/model/BuildInfo.java -text
|
||||
src/main/java/forge/model/FGameState.java -text
|
||||
@@ -11248,12 +11249,18 @@ src/main/java/forge/properties/NewConstants.java svneol=native#text/plain
|
||||
src/main/java/forge/properties/Preferences.java svneol=native#text/plain
|
||||
src/main/java/forge/properties/SavePreferencesListener.java svneol=native#text/plain
|
||||
src/main/java/forge/properties/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/ReadPriceList.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/SellRules.java -text
|
||||
src/main/java/forge/quest/data/QuestChallenge.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/QuestData.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/QuestDataIO.java svneol=native#text/plain
|
||||
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/QuestPreconManager.java -text
|
||||
src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain
|
||||
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/ReadPriceList.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/bazaar/QuestStallDefinition.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/bazaar/QuestStallManager.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/data/bazaar/QuestStallPurchasable.java svneol=native#text/plain
|
||||
@@ -11286,12 +11293,8 @@ src/main/java/forge/quest/gui/bazaar/QuestBazaarItem.java svneol=native#text/pla
|
||||
src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/bazaar/QuestBazaarStall.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/bazaar/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/main/QuestChallenge.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/main/QuestChallengePanel.java -text
|
||||
src/main/java/forge/quest/gui/main/QuestDuel.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/main/QuestDuelPanel.java -text
|
||||
src/main/java/forge/quest/gui/main/QuestEvent.java -text
|
||||
src/main/java/forge/quest/gui/main/QuestEventManager.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/main/QuestSelectablePanel.java -text
|
||||
src/main/java/forge/quest/gui/main/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/quest/gui/package-info.java svneol=native#text/plain
|
||||
|
||||
@@ -34,8 +34,8 @@ import forge.model.FMatchState;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.gui.main.QuestEvent;
|
||||
import forge.quest.gui.main.QuestEventManager;
|
||||
import forge.quest.data.QuestEvent;
|
||||
import forge.quest.data.QuestEventManager;
|
||||
import forge.view.toolbox.FOverlay;
|
||||
|
||||
/**
|
||||
@@ -172,7 +172,7 @@ public final class AllZone {
|
||||
* getQuestEvent.
|
||||
* </p>
|
||||
*
|
||||
* @return a {@link forge.quest.gui.main.QuestEvent} object.
|
||||
* @return a {@link forge.quest.data.QuestEvent} object.
|
||||
* @since 1.0.15
|
||||
*/
|
||||
public static QuestEvent getQuestEvent() {
|
||||
@@ -185,7 +185,7 @@ public final class AllZone {
|
||||
* </p>
|
||||
*
|
||||
* @param q
|
||||
* a {@link forge.quest.gui.main.QuestEvent} object.
|
||||
* a {@link forge.quest.data.QuestEvent} object.
|
||||
*/
|
||||
public static void setQuestEvent(final QuestEvent q) {
|
||||
AllZone.questEvent = q;
|
||||
@@ -196,7 +196,7 @@ public final class AllZone {
|
||||
* getQuestEventManager.
|
||||
* </p>
|
||||
*
|
||||
* @return {@link forge.quest.gui.main.QuestEventManager} object.
|
||||
* @return {@link forge.quest.data.QuestEventManager} object.
|
||||
* @since 1.0.15
|
||||
*/
|
||||
public static QuestEventManager getQuestEventManager() {
|
||||
@@ -209,7 +209,7 @@ public final class AllZone {
|
||||
* </p>
|
||||
*
|
||||
* @param qem
|
||||
* a {@link forge.quest.gui.main.QuestEventManager} object
|
||||
* a {@link forge.quest.data.QuestEventManager} object
|
||||
*/
|
||||
public static void setQuestEventManager(final QuestEventManager qem) {
|
||||
AllZone.questEventManager = qem;
|
||||
|
||||
@@ -114,7 +114,7 @@ public class ImageCache {
|
||||
}
|
||||
|
||||
File file = null;
|
||||
final String fName = key.endsWith(".png") ? key : key + ".jpg";
|
||||
final String fName = key.endsWith(".png") || key.endsWith(".jpg") ? key : key + ".jpg";
|
||||
file = new File(path, fName);
|
||||
if (!file.exists()) {
|
||||
// DEBUG
|
||||
|
||||
@@ -16,11 +16,11 @@ import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckeditor.DeckEditorQuest;
|
||||
import forge.gui.deckeditor.DeckEditorShop;
|
||||
import forge.quest.data.QuestChallenge;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestEvent;
|
||||
import forge.quest.data.QuestUtil;
|
||||
import forge.quest.data.item.QuestItemZeppelin;
|
||||
import forge.quest.gui.main.QuestChallenge;
|
||||
import forge.quest.gui.main.QuestEvent;
|
||||
import forge.view.GuiTopLevel;
|
||||
import forge.view.home.ViewQuest;
|
||||
|
||||
|
||||
@@ -95,19 +95,22 @@ public class DeckIO {
|
||||
* a {@link java.io.File} object.
|
||||
* @return a {@link forge.deck.Deck} object.
|
||||
*/
|
||||
public static Deck readDeck(final File deckFile) {
|
||||
|
||||
final List<String> lines = FileUtil.readFile(deckFile);
|
||||
final Map<String, List<String>> sections = SectionUtil.parseSections(lines);
|
||||
public static Deck readDeck(final File deckFile) {
|
||||
return readDeck(FileUtil.readFile(deckFile));
|
||||
}
|
||||
|
||||
public static Deck readDeck(final List<String> deckFileLines) {
|
||||
final Map<String, List<String>> sections = SectionUtil.parseSections(deckFileLines);
|
||||
if (sections.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Deck d = new Deck();
|
||||
|
||||
final String firstLine = lines.get(0);
|
||||
final String firstLine = deckFileLines.get(0);
|
||||
if (!firstLine.startsWith("[") || firstLine.equalsIgnoreCase("[general]")) {
|
||||
readDeckOldMetadata(lines.iterator(), d);
|
||||
readDeckOldMetadata(deckFileLines.iterator(), d);
|
||||
} else {
|
||||
readDeckMetadata(sections.get("metadata"), d);
|
||||
}
|
||||
|
||||
@@ -45,8 +45,9 @@ import forge.item.BoosterPack;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.quest.ReadPriceList;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.ReadPriceList;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -295,6 +296,8 @@ public final class DeckEditorShop extends DeckEditorBase {
|
||||
}
|
||||
} else if (card instanceof BoosterPack) {
|
||||
return 395;
|
||||
} else if (card instanceof PreconDeck) {
|
||||
return ((PreconDeck)card).getRecommendedDeals().getCost();
|
||||
}
|
||||
return 1337;
|
||||
}
|
||||
@@ -308,14 +311,17 @@ public final class DeckEditorShop extends DeckEditorBase {
|
||||
final int value = this.getCardValue(item);
|
||||
|
||||
if (value <= this.questData.getCredits()) {
|
||||
|
||||
if (item instanceof CardPrinted) {
|
||||
this.getTopTableWithCards().removeCard(item);
|
||||
|
||||
final CardPrinted card = (CardPrinted) item;
|
||||
this.getBottomTableWithCards().addCard(card);
|
||||
this.getTopTableWithCards().removeCard(card);
|
||||
|
||||
this.questData.getCards().buyCard(card, value);
|
||||
|
||||
} else if (item instanceof BoosterPack) {
|
||||
this.getTopTableWithCards().removeCard(item);
|
||||
|
||||
final BoosterPack booster = (BoosterPack) ((BoosterPack) item).clone();
|
||||
this.questData.getCards().buyBooster(booster, value);
|
||||
final List<CardPrinted> newCards = booster.getCards();
|
||||
@@ -325,8 +331,19 @@ public final class DeckEditorShop extends DeckEditorBase {
|
||||
final CardListViewer c = new CardListViewer(booster.getName(),
|
||||
"You have found the following cards inside:", newCards);
|
||||
c.show();
|
||||
} else if ( item instanceof PreconDeck ) {
|
||||
this.getTopTableWithCards().removeCard(item);
|
||||
final PreconDeck deck = (PreconDeck)item;
|
||||
this.questData.getCards().buyPreconDeck(deck, value);
|
||||
|
||||
for (final CardPrinted card : deck.getDeck().getMain().toFlatList()) {
|
||||
this.getBottomTableWithCards().addCard(card);
|
||||
}
|
||||
JOptionPane.showMessageDialog(null, String.format("Deck '%s' was added to youd decklist.%n%nCards from it were also added to your pool.", deck.getName()), "Thanks for purchase!", JOptionPane.INFORMATION_MESSAGE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
this.creditsLabel.setText("Total credits: " + this.questData.getCredits());
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "Not enough credits!");
|
||||
|
||||
77
src/main/java/forge/item/PreconDeck.java
Normal file
77
src/main/java/forge/item/PreconDeck.java
Normal file
@@ -0,0 +1,77 @@
|
||||
package forge.item;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.SetUtils;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.quest.SellRules;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.SectionUtil;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class PreconDeck implements InventoryItemFromSet {
|
||||
|
||||
private final Deck deck;
|
||||
private final String imageFilename;
|
||||
private final String set;
|
||||
private final SellRules recommendedDeals;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return deck.getName();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getImageFilename() {
|
||||
return "precons/" + this.imageFilename;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return "Prebuilt Deck";
|
||||
}
|
||||
|
||||
public PreconDeck(final File f)
|
||||
{
|
||||
List<String> deckLines = FileUtil.readFile(f);
|
||||
Map<String, List<String>> sections = SectionUtil.parseSections(deckLines);
|
||||
deck = DeckIO.readDeck(deckLines);
|
||||
|
||||
String filenameProxy = null;
|
||||
String setProxy = "n/a";
|
||||
List<String> metadata = sections.get("metadata");
|
||||
if ( null != metadata && !metadata.isEmpty() ) for(String s : metadata) {
|
||||
String[] kv = s.split("=");
|
||||
if( "Image".equalsIgnoreCase(kv[0]))
|
||||
filenameProxy = kv[1];
|
||||
if( "set".equalsIgnoreCase(kv[0]) && SetUtils.getSetByCode(kv[1].toUpperCase()) != null )
|
||||
setProxy = kv[1];
|
||||
}
|
||||
imageFilename = filenameProxy;
|
||||
set = setProxy;
|
||||
recommendedDeals = new SellRules(sections.get("shop"));
|
||||
}
|
||||
|
||||
|
||||
public final Deck getDeck() {
|
||||
return deck;
|
||||
}
|
||||
|
||||
|
||||
public final SellRules getRecommendedDeals() {
|
||||
return recommendedDeals;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSet() {
|
||||
return set;
|
||||
}
|
||||
}
|
||||
@@ -50,6 +50,7 @@ public final class NewConstants {
|
||||
/** Constant <code>NEW_DECKS="decks-dir"</code>. */
|
||||
public static final String NEW_DECKS = "decks-dir";
|
||||
|
||||
|
||||
/** Constant <code>TOKENS="tokens"</code>. */
|
||||
public static final String TOKENS = "tokens";
|
||||
/** Constant <code>CARD_PICTURES="card-pictures"</code>. */
|
||||
@@ -206,6 +207,8 @@ public final class NewConstants {
|
||||
|
||||
/** The PET_TOKEN_IMAGES. */
|
||||
public static final String PET_TOKEN_IMAGES = "quest/pet/tokens";
|
||||
|
||||
public static final String PRECONS = "quest/precons-dir";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.quest.data;
|
||||
package forge.quest;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
45
src/main/java/forge/quest/SellRules.java
Normal file
45
src/main/java/forge/quest/SellRules.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package forge.quest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.quest.data.QuestData;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class SellRules {
|
||||
|
||||
private int minWins = 0;
|
||||
private int cost = 250;
|
||||
private int minDifficulty = 0;
|
||||
private int maxDifficulty = 5;
|
||||
|
||||
public SellRules(List<String> questShop) {
|
||||
if( null == questShop || questShop.isEmpty() ) return;
|
||||
|
||||
for( String s : questShop ) {
|
||||
String[] kv = s.split("=");
|
||||
if( "WinsToUnlock".equalsIgnoreCase(kv[0]) ) minWins = Integer.parseInt(kv[1]);
|
||||
else if ("Credits".equalsIgnoreCase(kv[0])) cost = Integer.parseInt(kv[1]);
|
||||
else if ("MaxDifficulty".equalsIgnoreCase(kv[0])) maxDifficulty = Integer.parseInt(kv[1]);
|
||||
else if ("MinDifficulty".equalsIgnoreCase(kv[0])) minDifficulty = Integer.parseInt(kv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean meetsRequiremnts(QuestData quest)
|
||||
{
|
||||
if( quest.getWin() < minWins ) return false;
|
||||
if( quest.getDifficultyIndex() < minDifficulty || quest.getDifficultyIndex() > maxDifficulty ) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public final int getCost() {
|
||||
return cost;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.quest.gui.main;
|
||||
package forge.quest.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -155,6 +155,9 @@ public final class QuestData {
|
||||
// complex
|
||||
private transient QuestUtilCards myCards;
|
||||
|
||||
// This is used by shop. Had no idea where else to place this
|
||||
private static transient QuestPreconManager preconManager = new QuestPreconManager(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",
|
||||
"Level 2 - Death by Megrim", "Level 3 - Shattered the Competition", "Level 4 - Black Knighted",
|
||||
@@ -681,6 +684,10 @@ public final class QuestData {
|
||||
this.myDecks = myDecks0;
|
||||
}
|
||||
|
||||
public static final QuestPreconManager getPreconManager() {
|
||||
return preconManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the inventory.
|
||||
*
|
||||
|
||||
@@ -52,6 +52,7 @@ import forge.item.CardDb;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.data.item.QuestInventory;
|
||||
@@ -283,6 +284,13 @@ public class QuestDataIO {
|
||||
writer.endNode();
|
||||
}
|
||||
|
||||
private void write(final PreconDeck deck, final Integer count, final HierarchicalStreamWriter writer) {
|
||||
writer.startNode("precon");
|
||||
writer.addAttribute("s", deck.getName());
|
||||
writer.addAttribute("n", count.toString());
|
||||
writer.endNode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void marshal(final Object source, final HierarchicalStreamWriter writer, final MarshallingContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -294,6 +302,8 @@ public class QuestDataIO {
|
||||
this.write((CardPrinted) item, count, writer);
|
||||
} else if (item instanceof BoosterPack) {
|
||||
this.write((BoosterPack) item, count, writer);
|
||||
} else if (item instanceof PreconDeck) {
|
||||
this.write((PreconDeck) item, count, writer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,12 +324,24 @@ public class QuestDataIO {
|
||||
result.add(this.readCardPrinted(reader), cnt);
|
||||
} else if ("booster".equals(nodename)) {
|
||||
result.add(this.readBooster(reader), cnt);
|
||||
} else if ("precon".equals(nodename)) {
|
||||
PreconDeck toAdd = this.readPreconDeck(reader);
|
||||
result.add(toAdd, cnt);
|
||||
}
|
||||
reader.moveUp();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private PreconDeck readPreconDeck(final HierarchicalStreamReader reader) {
|
||||
final String name = reader.getAttribute("n");
|
||||
for( PreconDeck d : QuestData.getPreconManager().getDecks() )
|
||||
if ( name.equalsIgnoreCase( d.getName() ) )
|
||||
return d;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private BoosterPack readBooster(final HierarchicalStreamReader reader) {
|
||||
final String set = reader.getAttribute("s");
|
||||
return new BoosterPack(set);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.quest.gui.main;
|
||||
package forge.quest.data;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.quest.gui.main;
|
||||
package forge.quest.data;
|
||||
|
||||
import forge.deck.Deck;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.quest.gui.main;
|
||||
package forge.quest.data;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
@@ -25,11 +25,8 @@ import java.util.Random;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.data.QuestPreferences;
|
||||
import forge.quest.data.QuestUtil;
|
||||
import forge.util.FileUtil;
|
||||
|
||||
/**
|
||||
@@ -75,10 +72,6 @@ public class QuestEventManager {
|
||||
List<String> contents;
|
||||
QuestEvent tempEvent;
|
||||
|
||||
final File file = ForgeProps.getFile(NewConstants.Quest.DECKS);
|
||||
|
||||
final DeckManager manager = new DeckManager(file);
|
||||
|
||||
final File[] allFiles = ForgeProps.getFile(NewConstants.Quest.DECKS).listFiles(DeckIO.DCK_FILE_FILTER);
|
||||
|
||||
for (final File f : allFiles) {
|
||||
@@ -97,7 +90,7 @@ public class QuestEventManager {
|
||||
|
||||
// Assemble metadata (may not be necessary later) and deck object.
|
||||
this.assembleEventMetadata(contents, tempEvent);
|
||||
tempEvent.setEventDeck(manager.getDeck(tempEvent.getName()));
|
||||
tempEvent.setEventDeck(DeckIO.readDeck(contents));
|
||||
} // End for(allFiles)
|
||||
|
||||
this.assembleDuelDifficultyLists();
|
||||
59
src/main/java/forge/quest/data/QuestPreconManager.java
Normal file
59
src/main/java/forge/quest/data/QuestPreconManager.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package forge.quest.data;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.deck.DeckIO;
|
||||
import forge.item.PreconDeck;
|
||||
|
||||
/**
|
||||
* Very simple function - store all precons
|
||||
*
|
||||
*/
|
||||
public class QuestPreconManager {
|
||||
|
||||
final List<PreconDeck> decks = new ArrayList<PreconDeck>();
|
||||
|
||||
|
||||
public QuestPreconManager(File deckDir) {
|
||||
final List<String> decksThatFailedToLoad = new ArrayList<String>();
|
||||
File[] files = deckDir.listFiles(DeckIO.DCK_FILE_FILTER);
|
||||
for (final File file : files) {
|
||||
try {
|
||||
decks.add(new PreconDeck(file));
|
||||
} catch (final NoSuchElementException ex) {
|
||||
final String message = String.format("%s failed to load because ---- %s", file.getName(), ex.getMessage());
|
||||
decksThatFailedToLoad.add(message);
|
||||
}
|
||||
}
|
||||
|
||||
if (!decksThatFailedToLoad.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(null,
|
||||
StringUtils.join(decksThatFailedToLoad, System.getProperty("line.separator")),
|
||||
"Some of your decks were not loaded.", JOptionPane.WARNING_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param q
|
||||
* @return
|
||||
*/
|
||||
public List<PreconDeck> getDecksForCurrent(QuestData q) {
|
||||
|
||||
return decks;
|
||||
}
|
||||
|
||||
|
||||
public final List<PreconDeck> getDecks() {
|
||||
return decks;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,8 +28,6 @@ import forge.Player;
|
||||
import forge.card.BoosterUtils;
|
||||
import forge.card.CardRarity;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.quest.gui.main.QuestChallenge;
|
||||
import forge.quest.gui.main.QuestEvent;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -63,7 +61,7 @@ public class QuestUtil {
|
||||
* @param qd
|
||||
* a {@link forge.quest.data.QuestData} object.
|
||||
* @param qe
|
||||
* a {@link forge.quest.gui.main.QuestEvent} object.
|
||||
* a {@link forge.quest.data.QuestEvent} object.
|
||||
* @return a {@link forge.CardList} object.
|
||||
*/
|
||||
public static CardList getComputerStartingCards(final QuestData qd, final QuestEvent qe) {
|
||||
@@ -114,7 +112,7 @@ public class QuestUtil {
|
||||
* @param qd
|
||||
* a {@link forge.quest.data.QuestData} object.
|
||||
* @param qe
|
||||
* a {@link forge.quest.gui.main.QuestEvent} object.
|
||||
* a {@link forge.quest.data.QuestEvent} object.
|
||||
* @return a {@link forge.CardList} object.
|
||||
*/
|
||||
public static CardList getHumanStartingCards(final QuestData qd, final QuestEvent qe) {
|
||||
|
||||
@@ -35,6 +35,7 @@ import forge.item.CardPrinted;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
/**
|
||||
@@ -204,6 +205,15 @@ public final class QuestUtilCards {
|
||||
}
|
||||
}
|
||||
|
||||
public void buyPreconDeck(final PreconDeck precon, final int value) {
|
||||
if (this.q.getCredits() >= value) {
|
||||
this.q.setCredits(this.q.getCredits() - value);
|
||||
this.q.getShopList().remove(precon);
|
||||
this.q.addDeck(precon.getDeck());
|
||||
this.addAllCards(precon.getDeck().getMain().toFlatList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sell card.
|
||||
*
|
||||
@@ -293,6 +303,30 @@ public final class QuestUtilCards {
|
||||
/**
|
||||
* Generate cards in shop.
|
||||
*/
|
||||
final Predicate<CardSet> filterExt = CardSet.Predicates.Presets.SETS_IN_EXT;
|
||||
final Predicate<CardSet> filterT2booster = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER,
|
||||
CardSet.Predicates.Presets.SETS_IN_STANDARD);
|
||||
final Predicate<CardSet> filterExtButT2 = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER,
|
||||
Predicate.and(filterExt, Predicate.not(CardSet.Predicates.Presets.SETS_IN_STANDARD)));
|
||||
final Predicate<CardSet> filterNotExt = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER,
|
||||
Predicate.not(filterExt));
|
||||
|
||||
public void generateBoostersInShop(int count)
|
||||
{
|
||||
for (int i = 0; i < count; i++) {
|
||||
final int rollD100 = MyRandom.getRandom().nextInt(100);
|
||||
final Predicate<CardSet> filter = rollD100 < 40 ? filterT2booster : (rollD100 < 75 ? filterExtButT2
|
||||
: filterNotExt);
|
||||
this.q.getShopList().addAllCards(filter.random(SetUtils.getAllSets(), 1, BoosterPack.FN_FROM_SET));
|
||||
}
|
||||
}
|
||||
|
||||
public void generatePreconsInShop(int count)
|
||||
{
|
||||
List<PreconDeck> validDecks = QuestData.getPreconManager().getDecksForCurrent(q);
|
||||
this.q.getShopList().addAllCards(Predicate.getTrue(PreconDeck.class).random(validDecks, count));
|
||||
}
|
||||
|
||||
public void generateCardsInShop() {
|
||||
final BoosterGenerator pack = new BoosterGenerator(CardDb.instance().getAllCards());
|
||||
|
||||
@@ -300,25 +334,15 @@ public final class QuestUtilCards {
|
||||
final int winPacks = this.q.getWin() / 10;
|
||||
final int totalPacks = Math.min(levelPacks + winPacks, 6);
|
||||
|
||||
final Predicate<CardSet> filterExt = CardSet.Predicates.Presets.SETS_IN_EXT;
|
||||
final Predicate<CardSet> filterT2booster = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER,
|
||||
CardSet.Predicates.Presets.SETS_IN_STANDARD);
|
||||
final Predicate<CardSet> filterExtButT2 = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER,
|
||||
Predicate.and(filterExt, Predicate.not(CardSet.Predicates.Presets.SETS_IN_STANDARD)));
|
||||
final Predicate<CardSet> filterNotExt = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER,
|
||||
Predicate.not(filterExt));
|
||||
|
||||
this.q.getShopList().clear();
|
||||
for (int i = 0; i < totalPacks; i++) {
|
||||
this.q.getShopList().addAllCards(pack.getBoosterPack(7, 3, 1, 0, 0, 0, 0, 0, 0));
|
||||
|
||||
// add some boosters
|
||||
final int rollD100 = MyRandom.getRandom().nextInt(100);
|
||||
final Predicate<CardSet> filter = rollD100 < 40 ? filterT2booster : (rollD100 < 75 ? filterExtButT2
|
||||
: filterNotExt);
|
||||
this.q.getShopList().addAllCards(filter.random(SetUtils.getAllSets(), 1, BoosterPack.FN_FROM_SET));
|
||||
}
|
||||
|
||||
generateBoostersInShop(totalPacks);
|
||||
generatePreconsInShop(totalPacks);
|
||||
|
||||
this.addBasicLands(this.q.getShopList(), 10, 5);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,14 +52,14 @@ import forge.deck.Deck;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.gui.deckeditor.DeckEditorQuest;
|
||||
import forge.gui.deckeditor.DeckEditorShop;
|
||||
import forge.quest.data.QuestChallenge;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestDuel;
|
||||
import forge.quest.data.QuestEventManager;
|
||||
import forge.quest.data.QuestUtil;
|
||||
import forge.quest.data.item.QuestItemZeppelin;
|
||||
import forge.quest.gui.main.QuestChallenge;
|
||||
import forge.quest.gui.main.QuestChallengePanel;
|
||||
import forge.quest.gui.main.QuestDuel;
|
||||
import forge.quest.gui.main.QuestDuelPanel;
|
||||
import forge.quest.gui.main.QuestEventManager;
|
||||
import forge.quest.gui.main.QuestSelectablePanel;
|
||||
import forge.view.GuiTopLevel;
|
||||
|
||||
@@ -77,7 +77,7 @@ public class QuestMainPanel extends QuestAbstractPanel {
|
||||
private static final long serialVersionUID = 6142934729724012402L;
|
||||
|
||||
private final forge.quest.data.QuestData questData;
|
||||
private forge.quest.gui.main.QuestEventManager qem;
|
||||
private forge.quest.data.QuestEventManager qem;
|
||||
|
||||
/** The credits label. */
|
||||
private final JLabel creditsLabel = new JLabel();
|
||||
|
||||
@@ -45,11 +45,11 @@ import forge.gui.GuiUtils;
|
||||
import forge.gui.ListChooser;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.model.FMatchState;
|
||||
import forge.quest.data.QuestChallenge;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestEvent;
|
||||
import forge.quest.data.QuestPreferences;
|
||||
import forge.quest.data.QuestUtil;
|
||||
import forge.quest.gui.main.QuestChallenge;
|
||||
import forge.quest.gui.main.QuestEvent;
|
||||
import forge.util.MyRandom;
|
||||
import forge.view.GuiTopLevel;
|
||||
import forge.view.match.ViewWinLose;
|
||||
|
||||
@@ -20,6 +20,7 @@ package forge.quest.gui.main;
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.quest.data.QuestChallenge;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
package forge.quest.gui.main;
|
||||
|
||||
import forge.quest.data.QuestDuel;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* QuestDuelPanel.
|
||||
|
||||
@@ -34,6 +34,7 @@ import javax.swing.border.LineBorder;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.data.QuestEvent;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -31,14 +31,14 @@ import forge.control.home.ControlQuest;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.data.QuestChallenge;
|
||||
import forge.quest.data.QuestData;
|
||||
import forge.quest.data.QuestDataIO;
|
||||
import forge.quest.data.QuestDuel;
|
||||
import forge.quest.data.QuestEvent;
|
||||
import forge.quest.data.QuestEventManager;
|
||||
import forge.quest.data.item.QuestItemZeppelin;
|
||||
import forge.quest.data.pet.QuestPetAbstract;
|
||||
import forge.quest.gui.main.QuestChallenge;
|
||||
import forge.quest.gui.main.QuestDuel;
|
||||
import forge.quest.gui.main.QuestEvent;
|
||||
import forge.quest.gui.main.QuestEventManager;
|
||||
import forge.view.toolbox.FList;
|
||||
import forge.view.toolbox.FProgressBar;
|
||||
import forge.view.toolbox.FScrollPane;
|
||||
|
||||
Reference in New Issue
Block a user