diff --git a/.gitattributes b/.gitattributes index 02e9b1084e3..bc657d60d12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/src/main/java/forge/AllZone.java b/src/main/java/forge/AllZone.java index 74833602734..1456be7a443 100644 --- a/src/main/java/forge/AllZone.java +++ b/src/main/java/forge/AllZone.java @@ -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. *

* - * @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 { *

* * @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. *

* - * @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 { *

* * @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; diff --git a/src/main/java/forge/ImageCache.java b/src/main/java/forge/ImageCache.java index 967561f5436..9f68807b03b 100644 --- a/src/main/java/forge/ImageCache.java +++ b/src/main/java/forge/ImageCache.java @@ -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 diff --git a/src/main/java/forge/control/home/ControlQuest.java b/src/main/java/forge/control/home/ControlQuest.java index a0fbef83d9b..5aa7f8aaf87 100644 --- a/src/main/java/forge/control/home/ControlQuest.java +++ b/src/main/java/forge/control/home/ControlQuest.java @@ -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; diff --git a/src/main/java/forge/deck/DeckIO.java b/src/main/java/forge/deck/DeckIO.java index 7a672398560..a233a6bb1eb 100644 --- a/src/main/java/forge/deck/DeckIO.java +++ b/src/main/java/forge/deck/DeckIO.java @@ -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 lines = FileUtil.readFile(deckFile); - final Map> sections = SectionUtil.parseSections(lines); + public static Deck readDeck(final File deckFile) { + return readDeck(FileUtil.readFile(deckFile)); + } + + public static Deck readDeck(final List deckFileLines) { + final Map> 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); } diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorShop.java b/src/main/java/forge/gui/deckeditor/DeckEditorShop.java index 1043bfa59ba..2b696f6d8a7 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorShop.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorShop.java @@ -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; /** *

@@ -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 newCards = booster.getCards(); @@ -325,7 +331,18 @@ 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 { diff --git a/src/main/java/forge/item/PreconDeck.java b/src/main/java/forge/item/PreconDeck.java new file mode 100644 index 00000000000..a68c5555350 --- /dev/null +++ b/src/main/java/forge/item/PreconDeck.java @@ -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 deckLines = FileUtil.readFile(f); + Map> sections = SectionUtil.parseSections(deckLines); + deck = DeckIO.readDeck(deckLines); + + String filenameProxy = null; + String setProxy = "n/a"; + List 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; + } +} diff --git a/src/main/java/forge/properties/NewConstants.java b/src/main/java/forge/properties/NewConstants.java index 18fdca9b3de..a03fe37d299 100644 --- a/src/main/java/forge/properties/NewConstants.java +++ b/src/main/java/forge/properties/NewConstants.java @@ -49,6 +49,7 @@ public final class NewConstants { public static final String BOOSTER_DECKS = "booster-decks"; /** Constant NEW_DECKS="decks-dir". */ public static final String NEW_DECKS = "decks-dir"; + /** Constant TOKENS="tokens". */ public static final String TOKENS = "tokens"; @@ -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"; } /** diff --git a/src/main/java/forge/quest/data/ReadPriceList.java b/src/main/java/forge/quest/ReadPriceList.java similarity index 99% rename from src/main/java/forge/quest/data/ReadPriceList.java rename to src/main/java/forge/quest/ReadPriceList.java index b489c46afd7..f944bde852e 100644 --- a/src/main/java/forge/quest/data/ReadPriceList.java +++ b/src/main/java/forge/quest/ReadPriceList.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.quest.data; +package forge.quest; import java.io.BufferedReader; import java.io.File; diff --git a/src/main/java/forge/quest/SellRules.java b/src/main/java/forge/quest/SellRules.java new file mode 100644 index 00000000000..cefafb31238 --- /dev/null +++ b/src/main/java/forge/quest/SellRules.java @@ -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 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; + } + + + + +} diff --git a/src/main/java/forge/quest/gui/main/QuestChallenge.java b/src/main/java/forge/quest/data/QuestChallenge.java similarity index 99% rename from src/main/java/forge/quest/gui/main/QuestChallenge.java rename to src/main/java/forge/quest/data/QuestChallenge.java index 7402ee71cc8..17b4166577e 100644 --- a/src/main/java/forge/quest/gui/main/QuestChallenge.java +++ b/src/main/java/forge/quest/data/QuestChallenge.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.quest.gui.main; +package forge.quest.data; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/forge/quest/data/QuestData.java b/src/main/java/forge/quest/data/QuestData.java index b3649ae0752..35b6d6d9219 100644 --- a/src/main/java/forge/quest/data/QuestData.java +++ b/src/main/java/forge/quest/data/QuestData.java @@ -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. * diff --git a/src/main/java/forge/quest/data/QuestDataIO.java b/src/main/java/forge/quest/data/QuestDataIO.java index 4f7b038ac7f..3dbdd03e231 100644 --- a/src/main/java/forge/quest/data/QuestDataIO.java +++ b/src/main/java/forge/quest/data/QuestDataIO.java @@ -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); diff --git a/src/main/java/forge/quest/gui/main/QuestDuel.java b/src/main/java/forge/quest/data/QuestDuel.java similarity index 97% rename from src/main/java/forge/quest/gui/main/QuestDuel.java rename to src/main/java/forge/quest/data/QuestDuel.java index 0ba9f2f89ba..048433f8a1d 100644 --- a/src/main/java/forge/quest/gui/main/QuestDuel.java +++ b/src/main/java/forge/quest/data/QuestDuel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.quest.gui.main; +package forge.quest.data; /** *

diff --git a/src/main/java/forge/quest/gui/main/QuestEvent.java b/src/main/java/forge/quest/data/QuestEvent.java similarity index 94% rename from src/main/java/forge/quest/gui/main/QuestEvent.java rename to src/main/java/forge/quest/data/QuestEvent.java index 7d2a8ad3b95..752a4e65109 100644 --- a/src/main/java/forge/quest/gui/main/QuestEvent.java +++ b/src/main/java/forge/quest/data/QuestEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.quest.gui.main; +package forge.quest.data; import forge.deck.Deck; diff --git a/src/main/java/forge/quest/gui/main/QuestEventManager.java b/src/main/java/forge/quest/data/QuestEventManager.java similarity index 97% rename from src/main/java/forge/quest/gui/main/QuestEventManager.java rename to src/main/java/forge/quest/data/QuestEventManager.java index c0f9050c4b4..748d25bf684 100644 --- a/src/main/java/forge/quest/gui/main/QuestEventManager.java +++ b/src/main/java/forge/quest/data/QuestEventManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 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(); diff --git a/src/main/java/forge/quest/data/QuestPreconManager.java b/src/main/java/forge/quest/data/QuestPreconManager.java new file mode 100644 index 00000000000..6e6a163a03c --- /dev/null +++ b/src/main/java/forge/quest/data/QuestPreconManager.java @@ -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 decks = new ArrayList(); + + + public QuestPreconManager(File deckDir) { + final List decksThatFailedToLoad = new ArrayList(); + 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 getDecksForCurrent(QuestData q) { + + return decks; + } + + + public final List getDecks() { + return decks; + } + +} diff --git a/src/main/java/forge/quest/data/QuestUtil.java b/src/main/java/forge/quest/data/QuestUtil.java index 2abdc2928d3..1f8fa088bbf 100644 --- a/src/main/java/forge/quest/data/QuestUtil.java +++ b/src/main/java/forge/quest/data/QuestUtil.java @@ -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; /** *

@@ -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) { diff --git a/src/main/java/forge/quest/data/QuestUtilCards.java b/src/main/java/forge/quest/data/QuestUtilCards.java index 6a3843046ef..0cda96119ee 100644 --- a/src/main/java/forge/quest/data/QuestUtilCards.java +++ b/src/main/java/forge/quest/data/QuestUtilCards.java @@ -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 filterExt = CardSet.Predicates.Presets.SETS_IN_EXT; + final Predicate filterT2booster = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER, + CardSet.Predicates.Presets.SETS_IN_STANDARD); + final Predicate filterExtButT2 = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER, + Predicate.and(filterExt, Predicate.not(CardSet.Predicates.Presets.SETS_IN_STANDARD))); + final Predicate 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 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 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,24 +334,14 @@ public final class QuestUtilCards { final int winPacks = this.q.getWin() / 10; final int totalPacks = Math.min(levelPacks + winPacks, 6); - final Predicate filterExt = CardSet.Predicates.Presets.SETS_IN_EXT; - final Predicate filterT2booster = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER, - CardSet.Predicates.Presets.SETS_IN_STANDARD); - final Predicate filterExtButT2 = Predicate.and(CardSet.Predicates.CAN_MAKE_BOOSTER, - Predicate.and(filterExt, Predicate.not(CardSet.Predicates.Presets.SETS_IN_STANDARD))); - final Predicate 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 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); } diff --git a/src/main/java/forge/quest/gui/QuestMainPanel.java b/src/main/java/forge/quest/gui/QuestMainPanel.java index d7a5986142c..493f79bc873 100644 --- a/src/main/java/forge/quest/gui/QuestMainPanel.java +++ b/src/main/java/forge/quest/gui/QuestMainPanel.java @@ -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(); diff --git a/src/main/java/forge/quest/gui/QuestWinLoseHandler.java b/src/main/java/forge/quest/gui/QuestWinLoseHandler.java index 11bff2b985f..ee97b42f40c 100644 --- a/src/main/java/forge/quest/gui/QuestWinLoseHandler.java +++ b/src/main/java/forge/quest/gui/QuestWinLoseHandler.java @@ -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; diff --git a/src/main/java/forge/quest/gui/main/QuestChallengePanel.java b/src/main/java/forge/quest/gui/main/QuestChallengePanel.java index a4ba9931f14..26478faff07 100644 --- a/src/main/java/forge/quest/gui/main/QuestChallengePanel.java +++ b/src/main/java/forge/quest/gui/main/QuestChallengePanel.java @@ -20,6 +20,7 @@ package forge.quest.gui.main; import javax.swing.JLabel; import forge.gui.GuiUtils; +import forge.quest.data.QuestChallenge; /** *

diff --git a/src/main/java/forge/quest/gui/main/QuestDuelPanel.java b/src/main/java/forge/quest/gui/main/QuestDuelPanel.java index 66b66796856..725d8bf92ba 100644 --- a/src/main/java/forge/quest/gui/main/QuestDuelPanel.java +++ b/src/main/java/forge/quest/gui/main/QuestDuelPanel.java @@ -17,6 +17,8 @@ */ package forge.quest.gui.main; +import forge.quest.data.QuestDuel; + /** *

* QuestDuelPanel. diff --git a/src/main/java/forge/quest/gui/main/QuestSelectablePanel.java b/src/main/java/forge/quest/gui/main/QuestSelectablePanel.java index 6be13e88a7c..8b5984a5148 100644 --- a/src/main/java/forge/quest/gui/main/QuestSelectablePanel.java +++ b/src/main/java/forge/quest/gui/main/QuestSelectablePanel.java @@ -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; /** *

diff --git a/src/main/java/forge/view/home/ViewQuest.java b/src/main/java/forge/view/home/ViewQuest.java index c51a44a0f26..aa9c636ec16 100644 --- a/src/main/java/forge/view/home/ViewQuest.java +++ b/src/main/java/forge/view/home/ViewQuest.java @@ -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;