From cbcd527dd54eda4ed2811c57f18ecca013f9cfaa Mon Sep 17 00:00:00 2001 From: Krazy Date: Sat, 12 Jul 2014 19:41:18 +0000 Subject: [PATCH] Removed the quest draft logic from the UI controller to make porting to other platforms much easier. --- .gitignore | 1 + .../CEditorQuestDraftingProcess.java | 8 +- .../home/quest/CSubmenuQuestDraft.java | 243 ++++++------------ .../java/forge/quest/QuestDraftUtils.java | 38 ++- .../java/forge/quest/QuestEventDraft.java | 190 +++++++++++--- .../forge/quest/data/QuestAchievements.java | 7 +- 6 files changed, 273 insertions(+), 214 deletions(-) diff --git a/.gitignore b/.gitignore index 9d2b3fd7022..9cecc88a579 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ forge-gui-android/res/values/bin forge-gui-android/res/values/gen forge-gui-android/res/values/target forge-gui-android/target +forge-gui-desktop/*.iml forge-gui-desktop/target forge-gui-mobile-dev/bin forge-gui-mobile-dev/res diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java index 06f59d46b3e..d2733167cea 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java @@ -200,22 +200,20 @@ public class CEditorQuestDraftingProcess extends ACEditorBase */ private void saveDraft() { - - String s = "Tournament Deck"; saved = true; // Construct computer's decks and save draft final Deck[] computer = this.boosterDraft.getDecks(); - final DeckGroup finishedDraft = new DeckGroup(s); - finishedDraft.setHumanDeck((Deck) this.getPlayersDeck().copyTo(s)); + final DeckGroup finishedDraft = new DeckGroup(QuestEventDraft.DECK_NAME); + finishedDraft.setHumanDeck((Deck) this.getPlayersDeck().copyTo(QuestEventDraft.DECK_NAME)); finishedDraft.addAiDecks(computer); CSubmenuQuestDraft.SINGLETON_INSTANCE.update(); FScreen.DRAFTING_PROCESS.close(); - draftQuest.setCompletedDraft(finishedDraft, s); + draftQuest.setCompletedDraft(finishedDraft); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java index e57c38cdd94..2ae7715f505 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java @@ -1,28 +1,10 @@ package forge.screens.home.quest; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.text.DecimalFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import javax.swing.JRadioButton; -import javax.swing.SwingUtilities; - import forge.GuiBase; import forge.Singletons; import forge.UiCommand; import forge.assets.FSkinProp; -import forge.deck.CardPool; -import forge.deck.Deck; import forge.deck.DeckGroup; -import forge.deck.DeckSection; import forge.game.GameType; import forge.gui.BoxedProductCardListViewer; import forge.gui.CardListViewer; @@ -33,7 +15,6 @@ import forge.item.BoosterPack; import forge.item.PaperCard; import forge.itemmanager.DeckManager; import forge.limited.BoosterDraft; -import forge.limited.LimitedPoolType; import forge.model.FModel; import forge.properties.ForgePreferences.FPref; import forge.quest.QuestController; @@ -52,7 +33,12 @@ import forge.toolbox.FOptionPane; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinImage; import forge.toolbox.JXButtonPanel; -import forge.util.storage.IStorage; + +import javax.swing.*; +import java.awt.event.*; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; /** * Controls the quest draft submenu in the home UI. @@ -143,85 +129,68 @@ public enum CSubmenuQuestDraft implements ICDoc { String placement = QuestEventDraft.getPlacementString(draft.getPlayerPlacement()); - Object[] prizes = draft.getPrizes(); + QuestEventDraft.QuestDraftPrizes prizes = draft.collectPrizes(); - if (prizes[0] != null && (int) prizes[0] > 0) { - FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + (int) prizes[0] + " credits!", "Credits Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_GOLD)); - FModel.getQuest().getAssets().addCredits((int) prizes[0]); + if (prizes.hasCredits()) { + FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + prizes.credits + " credits!", "Credits Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_GOLD)); } - if (prizes[2] != null) { - - List individualCards = (ArrayList) prizes[2]; - - if (!individualCards.isEmpty()) { - final CardListViewer c = new CardListViewer("Tournament Reward", "For participating in the tournament, you have been awarded the following promotional card:", individualCards); - c.setVisible(true); - c.dispose(); - FModel.getQuest().getCards().addAllCards(individualCards); - } - + if (prizes.hasIndividualCards()) { + final CardListViewer c = new CardListViewer("Tournament Reward", "For participating in the tournament, you have been awarded the following promotional card:", prizes.individualCards); + c.setVisible(true); + c.dispose(); } - if (prizes[1] != null) { + if (prizes.hasBoosterPacks()) { - List boosterPacks = (ArrayList) prizes[1]; - - if (!boosterPacks.isEmpty()) { - - String packPlural = (boosterPacks.size() == 1) ? "" : "s"; - - FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + boosterPacks.size() + " booster pack" + packPlural + "!", "Booster Pack" + packPlural + " Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_BOX)); - - if (FModel.getPreferences().getPrefBoolean(FPref.UI_OPEN_PACKS_INDIV) && boosterPacks.size() > 1) { - - boolean skipTheRest = false; - List remainingCards = new ArrayList(); - int totalPacks = boosterPacks.size(); - int currentPack = 0; - - while (boosterPacks.size() > 0) { - - BoosterPack pack = boosterPacks.remove(0); - currentPack++; - - if (skipTheRest) { - remainingCards.addAll(pack.getCards()); - continue; - } - - final BoxedProductCardListViewer c = new BoxedProductCardListViewer(pack.getName(), "You have found the following cards inside (Booster Pack " + currentPack + " of " + totalPacks + "):", pack.getCards()); - c.setVisible(true); - c.dispose(); - skipTheRest = c.skipTheRest(); - FModel.getQuest().getCards().addAllCards(pack.getCards()); - - } - - if (skipTheRest && !remainingCards.isEmpty()) { - final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", remainingCards); - c.setVisible(true); - c.dispose(); - FModel.getQuest().getCards().addAllCards(remainingCards); - } - - } else { - - List cards = new ArrayList(); - - while (boosterPacks.size() > 0) { - BoosterPack pack = boosterPacks.remove(0); - cards.addAll(pack.getCards()); - continue; - } - - final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", cards); - c.setVisible(true); - c.dispose(); - FModel.getQuest().getCards().addAllCards(cards); - - } - } + String packPlural = (prizes.boosterPacks.size() == 1) ? "" : "s"; + + FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + prizes.boosterPacks.size() + " booster pack" + packPlural + "!", "Booster Pack" + packPlural + " Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_BOX)); + + if (FModel.getPreferences().getPrefBoolean(FPref.UI_OPEN_PACKS_INDIV) && prizes.boosterPacks.size() > 1) { + + boolean skipTheRest = false; + List remainingCards = new ArrayList<>(); + int totalPacks = prizes.boosterPacks.size(); + int currentPack = 0; + + while (prizes.boosterPacks.size() > 0) { + + BoosterPack pack = prizes.boosterPacks.remove(0); + currentPack++; + + if (skipTheRest) { + remainingCards.addAll(pack.getCards()); + continue; + } + + final BoxedProductCardListViewer c = new BoxedProductCardListViewer(pack.getName(), "You have found the following cards inside (Booster Pack " + currentPack + " of " + totalPacks + "):", pack.getCards()); + c.setVisible(true); + c.dispose(); + skipTheRest = c.skipTheRest(); + + } + + if (skipTheRest && !remainingCards.isEmpty()) { + final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", remainingCards); + c.setVisible(true); + c.dispose(); + } + + } else { + + List cards = new ArrayList(); + + while (prizes.boosterPacks.size() > 0) { + BoosterPack pack = prizes.boosterPacks.remove(0); + cards.addAll(pack.getCards()); + } + + final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", cards); + c.setVisible(true); + c.dispose(); + + } } @@ -235,35 +204,11 @@ public enum CSubmenuQuestDraft implements ICDoc { boolean saveDraft = FOptionPane.showOptionDialog("Would you like to save this draft to the regular draft mode?", "Save Draft?", FSkin.getImage(FSkinProp.ICO_QUESTION).scale(2.0), new String[] { "Yes", "No" }, 0) == 0; if (saveDraft) { - - String tournamentName = FModel.getQuest().getName() + " Tournament Deck " + new SimpleDateFormat("EEE d MMM yyyy HH-mm-ss").format(new Date()); - - DeckGroup original = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME); - DeckGroup output = new DeckGroup(tournamentName); - for (Deck aiDeck : original.getAiDecks()) { - output.addAiDeck(copyDeck(aiDeck)); - } - output.setHumanDeck(copyDeck(original.getHumanDeck(), tournamentName)); - FModel.getDecks().getDraft().add(output); + draft.saveToRegularDraft(); CSubmenuDraft.SINGLETON_INSTANCE.update(); - } - String deckName = "Tournament Deck " + new SimpleDateFormat("EEE d MMM yyyy HH-mm-ss").format(new Date()); - - Deck tournamentDeck = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME).getHumanDeck(); - Deck deck = new Deck(deckName); - - FModel.getQuest().getCards().addAllCards(tournamentDeck.getAllCardsInASinglePool().toFlatList()); - - if (tournamentDeck.get(DeckSection.Main).countAll() > 0) { - deck.getOrCreate(DeckSection.Main).addAll(tournamentDeck.get(DeckSection.Main)); - FModel.getQuest().getMyDecks().add(deck); - } - - FModel.getQuest().getDraftDecks().delete(QuestEventDraft.DECK_NAME); - FModel.getQuest().getAchievements().endCurrentTournament(FModel.getQuest().getAchievements().getCurrentDraft().getPlayerPlacement()); - FModel.getQuest().save(); + draft.addToQuestDecks(); VSubmenuQuestDraft view = VSubmenuQuestDraft.SINGLETON_INSTANCE; CSubmenuQuestDraft.SINGLETON_INSTANCE.update(); @@ -317,7 +262,6 @@ public enum CSubmenuQuestDraft implements ICDoc { if (achievements != null) { achievements.spendDraftToken(); - FModel.getQuest().save(); update(); VSubmenuQuestDraft.SINGLETON_INSTANCE.populate(); @@ -492,27 +436,13 @@ public enum CSubmenuQuestDraft implements ICDoc { } - public void setCompletedDraft(DeckGroup finishedDraft, String s) { - - List aiDecks = new ArrayList(finishedDraft.getAiDecks()); - finishedDraft.getAiDecks().clear(); - - for (int i = 0; i < aiDecks.size(); i++) { - Deck oldDeck = aiDecks.get(i); - Deck namedDeck = new Deck("AI Deck " + i); - namedDeck.putSection(DeckSection.Main, oldDeck.get(DeckSection.Main)); - namedDeck.putSection(DeckSection.Sideboard, oldDeck.get(DeckSection.Sideboard)); - finishedDraft.getAiDecks().add(namedDeck); - } - - IStorage draft = FModel.getQuest().getDraftDecks(); - draft.add(finishedDraft); + public void setCompletedDraft(DeckGroup finishedDraft) { + + QuestDraftUtils.completeDraft(finishedDraft); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST_TOURNAMENT); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest())); - FModel.getQuest().save(); - drafting = false; VSubmenuQuestDraft.SINGLETON_INSTANCE.setMode(Mode.PREPARE_DECK); @@ -536,7 +466,7 @@ public enum CSubmenuQuestDraft implements ICDoc { QuestEventDraft draftEvent = QuestUtil.getDraftEvent(); long creditsAvailable = FModel.getQuest().getAssets().getCredits(); - if (creditsAvailable < draftEvent.getEntryFee()) { + if (draftEvent.canEnter()) { FOptionPane.showMessageDialog("You need " + NUMBER_FORMATTER.format(draftEvent.getEntryFee() - creditsAvailable) + " more credits to enter this tournament.", "Not Enough Credits", FSkin.getImage(FSkinProp.ICO_WARNING).scale(2.0)); return; } @@ -548,13 +478,9 @@ public enum CSubmenuQuestDraft implements ICDoc { } drafting = true; - - FModel.getQuest().getAchievements().setCurrentDraft(draftEvent); - - FModel.getQuest().getAssets().subtractCredits(draftEvent.getEntryFee()); - - BoosterDraft draft = BoosterDraft.createDraft(LimitedPoolType.Block, FModel.getBlocks().get(draftEvent.getBlock()), draftEvent.getBoosterConfiguration()); + BoosterDraft draft = draftEvent.enter(); + final CEditorQuestDraftingProcess draftController = new CEditorQuestDraftingProcess(); draftController.showGui(draft); @@ -585,9 +511,10 @@ public enum CSubmenuQuestDraft implements ICDoc { } private void startNextMatch() { - - String message = GameType.QuestDraft.getDecksFormat().getDeckConformanceProblem(FModel.getQuest().getAssets().getDraftDeckStorage().get(QuestEventDraft.DECK_NAME).getHumanDeck()); - if (message != null && FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) { + + String message = QuestDraftUtils.getDeckLegality(); + + if (message != null) { FOptionPane.showMessageDialog(message, "Deck Invalid"); return; } @@ -595,28 +522,6 @@ public enum CSubmenuQuestDraft implements ICDoc { QuestDraftUtils.startNextMatch(); } - - private Deck copyDeck(final Deck deck) { - - Deck outputDeck = new Deck(deck.getName()); - - outputDeck.putSection(DeckSection.Main, new CardPool(deck.get(DeckSection.Main))); - outputDeck.putSection(DeckSection.Sideboard, new CardPool(deck.get(DeckSection.Sideboard))); - - return outputDeck; - - } - - private Deck copyDeck(final Deck deck, final String deckName) { - - Deck outputDeck = new Deck(deckName); - - outputDeck.putSection(DeckSection.Main, new CardPool(deck.get(DeckSection.Main))); - outputDeck.putSection(DeckSection.Sideboard, new CardPool(deck.get(DeckSection.Sideboard))); - - return outputDeck; - - } @Override public UiCommand getCommandOnSelect() { diff --git a/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java b/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java index 0b95499f359..768f0e964cc 100644 --- a/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java +++ b/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java @@ -1,11 +1,10 @@ package forge.quest; -import java.util.ArrayList; -import java.util.List; - import forge.FThreads; import forge.GuiBase; +import forge.deck.Deck; import forge.deck.DeckGroup; +import forge.deck.DeckSection; import forge.game.Game; import forge.game.GameRules; import forge.game.GameType; @@ -13,7 +12,10 @@ import forge.game.Match; import forge.game.player.RegisteredPlayer; import forge.model.FModel; import forge.properties.ForgePreferences.FPref; -import forge.quest.QuestEventDraft; +import forge.util.storage.IStorage; + +import java.util.ArrayList; +import java.util.List; public class QuestDraftUtils { private static List matchups = new ArrayList(); @@ -28,6 +30,34 @@ public class QuestDraftUtils { } GuiBase.getInterface().continueMatch(matchInProgress ? lastGame.getMatch() : null); } + + public static void completeDraft(DeckGroup finishedDraft) { + + List aiDecks = new ArrayList(finishedDraft.getAiDecks()); + finishedDraft.getAiDecks().clear(); + + for (int i = 0; i < aiDecks.size(); i++) { + Deck oldDeck = aiDecks.get(i); + Deck namedDeck = new Deck("AI Deck " + i); + namedDeck.putSection(DeckSection.Main, oldDeck.get(DeckSection.Main)); + namedDeck.putSection(DeckSection.Sideboard, oldDeck.get(DeckSection.Sideboard)); + finishedDraft.getAiDecks().add(namedDeck); + } + + IStorage draft = FModel.getQuest().getDraftDecks(); + draft.add(finishedDraft); + + FModel.getQuest().save(); + + } + + public static String getDeckLegality() { + String message = GameType.QuestDraft.getDecksFormat().getDeckConformanceProblem(FModel.getQuest().getAssets().getDraftDeckStorage().get(QuestEventDraft.DECK_NAME).getHumanDeck()); + if (message != null && FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) { + return message; + } + return null; + } public static void startNextMatch() { diff --git a/forge-gui/src/main/java/forge/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/quest/QuestEventDraft.java index 5ed90d324a2..54d32196bdb 100644 --- a/forge-gui/src/main/java/forge/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/quest/QuestEventDraft.java @@ -17,21 +17,18 @@ */ package forge.quest; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map; - import com.google.common.base.Function; - import forge.GuiBase; import forge.card.CardEdition; import forge.card.CardEdition.CardInSet; import forge.card.CardRarity; +import forge.deck.CardPool; +import forge.deck.Deck; +import forge.deck.DeckGroup; +import forge.deck.DeckSection; import forge.item.BoosterPack; import forge.item.PaperCard; +import forge.limited.BoosterDraft; import forge.limited.LimitedPoolType; import forge.model.CardBlock; import forge.model.FModel; @@ -39,6 +36,9 @@ import forge.quest.io.ReadPriceList; import forge.util.NameGenerator; import forge.util.storage.IStorage; +import java.text.SimpleDateFormat; +import java.util.*; + /** *

* QuestEvent. @@ -48,7 +48,27 @@ import forge.util.storage.IStorage; * unique event types: battles, quests, and others. */ public class QuestEventDraft { - + + public static class QuestDraftPrizes { + + public int credits; + public List boosterPacks; + public List individualCards; + + public boolean hasCredits() { + return credits > 0; + } + + public boolean hasBoosterPacks() { + return boosterPacks != null && boosterPacks.size() > 0; + } + + public boolean hasIndividualCards() { + return individualCards != null && individualCards.size() > 0; + } + + } + public static final String UNDETERMINED = "quest_draft_undetermined_place"; public static final String HUMAN = "quest_draft_human_place"; public static final String DECK_NAME = "Tournament Deck"; @@ -149,7 +169,58 @@ public class QuestEventDraft { public void addWin() { age--; } - + + public void saveToRegularDraft() { + String tournamentName = FModel.getQuest().getName() + " Tournament Deck " + new SimpleDateFormat("EEE d MMM yyyy HH-mm-ss").format(new Date()); + DeckGroup original = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME); + DeckGroup output = new DeckGroup(tournamentName); + for (Deck aiDeck : original.getAiDecks()) { + output.addAiDeck(copyDeck(aiDeck)); + } + output.setHumanDeck(copyDeck(original.getHumanDeck(), tournamentName)); + FModel.getDecks().getDraft().add(output); + } + + public void addToQuestDecks() { + String deckName = "Tournament Deck " + new SimpleDateFormat("EEE d MMM yyyy HH-mm-ss").format(new Date()); + + Deck tournamentDeck = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME).getHumanDeck(); + Deck deck = new Deck(deckName); + + FModel.getQuest().getCards().addAllCards(tournamentDeck.getAllCardsInASinglePool().toFlatList()); + + if (tournamentDeck.get(DeckSection.Main).countAll() > 0) { + deck.getOrCreate(DeckSection.Main).addAll(tournamentDeck.get(DeckSection.Main)); + FModel.getQuest().getMyDecks().add(deck); + } + + FModel.getQuest().getDraftDecks().delete(QuestEventDraft.DECK_NAME); + FModel.getQuest().getAchievements().endCurrentTournament(FModel.getQuest().getAchievements().getCurrentDraft().getPlayerPlacement()); + FModel.getQuest().save(); + } + + private Deck copyDeck(final Deck deck) { + + Deck outputDeck = new Deck(deck.getName()); + + outputDeck.putSection(DeckSection.Main, new CardPool(deck.get(DeckSection.Main))); + outputDeck.putSection(DeckSection.Sideboard, new CardPool(deck.get(DeckSection.Sideboard))); + + return outputDeck; + + } + + private Deck copyDeck(final Deck deck, final String deckName) { + + Deck outputDeck = new Deck(deckName); + + outputDeck.putSection(DeckSection.Main, new CardPool(deck.get(DeckSection.Main))); + outputDeck.putSection(DeckSection.Sideboard, new CardPool(deck.get(DeckSection.Sideboard))); + + return outputDeck; + + } + public int getHumanLatestStanding() { int humanIndex = 0; for (int i = getStandings().length - 1; i >= 0; i--) { @@ -242,12 +313,9 @@ public class QuestEventDraft { } /** - * Generates the prizes for the player in an Object array. - * Index 0: int - credits - * Index 1: - * Index 2: ArrayList - single cards + * Generates the prizes for the player and saves them to the current quest. */ - public Object[] getPrizes() { + public QuestDraftPrizes collectPrizes() { int place = getPlayerPlacement(); int prizePool = entryFee * 9; @@ -270,23 +338,49 @@ public class QuestEventDraft { } prizePool -= boosterPrices * 8; + + QuestDraftPrizes prizes = null; switch (place) { case 1: - return generateFirstPlacePrizes(prizePool); + prizes = generateFirstPlacePrizes(prizePool); + break; case 2: - return generateSecondPlacePrizes(prizePool); + prizes = generateSecondPlacePrizes(prizePool); + break; case 3: - return generateThirdPlacePrizes(prizePool); + prizes = generateThirdPlacePrizes(prizePool); + break; case 4: - return generateFourthPlacePrizes(prizePool); + prizes = generateFourthPlacePrizes(prizePool); + break; } + + if (prizes != null) { + + if (prizes.hasCredits()) { + FModel.getQuest().getAssets().addCredits(prizes.credits); + } + + if (prizes.hasBoosterPacks()) { + for (BoosterPack boosterPack : prizes.boosterPacks) { + FModel.getQuest().getCards().addAllCards(boosterPack.getCards()); + } + } + + if (prizes.hasIndividualCards()) { + FModel.getQuest().getCards().addAllCards(prizes.individualCards); + } + + return prizes; + + } return null; } - private Object[] generateFirstPlacePrizes(final int prizePool) { + private QuestDraftPrizes generateFirstPlacePrizes(final int prizePool) { int credits = 2 * (prizePool / 3); //First place gets 2/3 the total prize pool List cards = new ArrayList(); @@ -307,12 +401,17 @@ public class QuestEventDraft { } credits = (credits / 2) + creditsForPacks; //Add the leftover credits + 50% - - return new Object[] { credits, boosters, cards }; + + QuestDraftPrizes prizes = new QuestDraftPrizes(); + prizes.credits = credits; + prizes.boosterPacks = boosters; + prizes.individualCards = cards; + + return prizes; } - private Object[] generateSecondPlacePrizes(final int prizePool) { + private QuestDraftPrizes generateSecondPlacePrizes(final int prizePool) { int credits = prizePool / 3; //Second place gets 1/3 the total prize pool List cards = new ArrayList(); @@ -333,12 +432,17 @@ public class QuestEventDraft { } credits = (credits / 4) + creditsForPacks; //Add the leftover credits + 25% - - return new Object[] { credits, boosters, cards }; + + QuestDraftPrizes prizes = new QuestDraftPrizes(); + prizes.credits = credits; + prizes.boosterPacks = boosters; + prizes.individualCards = cards; + + return prizes; } - private Object[] generateThirdPlacePrizes(final int prizePool) { + private QuestDraftPrizes generateThirdPlacePrizes(final int prizePool) { int credits = 0; List cards = new ArrayList(); @@ -347,19 +451,28 @@ public class QuestEventDraft { List boosters = new ArrayList(); boosters.add(getBoosterPack()); - - return new Object[] { credits, boosters, cards }; + + QuestDraftPrizes prizes = new QuestDraftPrizes(); + prizes.credits = credits; + prizes.boosterPacks = boosters; + prizes.individualCards = cards; + + return prizes; } - private Object[] generateFourthPlacePrizes(final int prizePool) { + private QuestDraftPrizes generateFourthPlacePrizes(final int prizePool) { int credits = 0; List cards = new ArrayList(); cards.add(getPromoCard()); - - return new Object[] { credits, null, cards }; + + QuestDraftPrizes prizes = new QuestDraftPrizes(); + prizes.credits = credits; + prizes.individualCards = cards; + + return prizes; } @@ -379,7 +492,7 @@ public class QuestEventDraft { } - CardInSet randomCard = cardsInEdition.get((int) (Math.random() * cardsInEdition.size())); + CardInSet randomCard; PaperCard promo = null; int attempts = 25; @@ -411,7 +524,7 @@ public class QuestEventDraft { private int getBoosterPrice(BoosterPack booster) { - int value = 0; + int value; String boosterName = booster.getName() + " Booster Pack"; if (MAP_PRICES.containsKey(boosterName)) { @@ -516,6 +629,17 @@ public class QuestEventDraft { } + public boolean canEnter() { + long creditsAvailable = FModel.getQuest().getAssets().getCredits(); + return creditsAvailable < getEntryFee(); + } + + public BoosterDraft enter() { + FModel.getQuest().getAchievements().setCurrentDraft(this); + FModel.getQuest().getAssets().subtractCredits(getEntryFee()); + return BoosterDraft.createDraft(LimitedPoolType.Block, FModel.getBlocks().get(getBlock()), getBoosterConfiguration()); + } + public boolean isStarted() { return started; } diff --git a/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java b/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java index 509d7efd499..55f67f9d63f 100644 --- a/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java +++ b/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java @@ -1,12 +1,12 @@ package forge.quest.data; -import java.util.ArrayList; -import java.util.List; - import forge.model.FModel; import forge.quest.QuestEventDraft; import forge.quest.data.QuestPreferences.DifficultyPrefs; +import java.util.ArrayList; +import java.util.List; + /** * TODO: Write javadoc for this type. * @@ -316,6 +316,7 @@ public class QuestAchievements { if (draftTokens > 0) { draftTokens--; draftsToGenerate++; + FModel.getQuest().save(); } }