Removed the quest draft logic from the UI controller to make porting to other platforms much easier.

This commit is contained in:
Krazy
2014-07-12 19:41:18 +00:00
parent d12c606b2e
commit cbcd527dd5
6 changed files with 273 additions and 214 deletions

1
.gitignore vendored
View File

@@ -44,6 +44,7 @@ forge-gui-android/res/values/bin
forge-gui-android/res/values/gen forge-gui-android/res/values/gen
forge-gui-android/res/values/target forge-gui-android/res/values/target
forge-gui-android/target forge-gui-android/target
forge-gui-desktop/*.iml
forge-gui-desktop/target forge-gui-desktop/target
forge-gui-mobile-dev/bin forge-gui-mobile-dev/bin
forge-gui-mobile-dev/res forge-gui-mobile-dev/res

View File

@@ -201,21 +201,19 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
*/ */
private void saveDraft() { private void saveDraft() {
String s = "Tournament Deck";
saved = true; saved = true;
// Construct computer's decks and save draft // Construct computer's decks and save draft
final Deck[] computer = this.boosterDraft.getDecks(); final Deck[] computer = this.boosterDraft.getDecks();
final DeckGroup finishedDraft = new DeckGroup(s); final DeckGroup finishedDraft = new DeckGroup(QuestEventDraft.DECK_NAME);
finishedDraft.setHumanDeck((Deck) this.getPlayersDeck().copyTo(s)); finishedDraft.setHumanDeck((Deck) this.getPlayersDeck().copyTo(QuestEventDraft.DECK_NAME));
finishedDraft.addAiDecks(computer); finishedDraft.addAiDecks(computer);
CSubmenuQuestDraft.SINGLETON_INSTANCE.update(); CSubmenuQuestDraft.SINGLETON_INSTANCE.update();
FScreen.DRAFTING_PROCESS.close(); FScreen.DRAFTING_PROCESS.close();
draftQuest.setCompletedDraft(finishedDraft, s); draftQuest.setCompletedDraft(finishedDraft);
} }

View File

@@ -1,28 +1,10 @@
package forge.screens.home.quest; 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.GuiBase;
import forge.Singletons; import forge.Singletons;
import forge.UiCommand; import forge.UiCommand;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
import forge.deck.DeckSection;
import forge.game.GameType; import forge.game.GameType;
import forge.gui.BoxedProductCardListViewer; import forge.gui.BoxedProductCardListViewer;
import forge.gui.CardListViewer; import forge.gui.CardListViewer;
@@ -33,7 +15,6 @@ import forge.item.BoosterPack;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.itemmanager.DeckManager; import forge.itemmanager.DeckManager;
import forge.limited.BoosterDraft; import forge.limited.BoosterDraft;
import forge.limited.LimitedPoolType;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.quest.QuestController; import forge.quest.QuestController;
@@ -52,7 +33,12 @@ import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin; import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinImage; import forge.toolbox.FSkin.SkinImage;
import forge.toolbox.JXButtonPanel; 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. * Controls the quest draft submenu in the home UI.
@@ -143,46 +129,34 @@ public enum CSubmenuQuestDraft implements ICDoc {
String placement = QuestEventDraft.getPlacementString(draft.getPlayerPlacement()); String placement = QuestEventDraft.getPlacementString(draft.getPlayerPlacement());
Object[] prizes = draft.getPrizes(); QuestEventDraft.QuestDraftPrizes prizes = draft.collectPrizes();
if (prizes[0] != null && (int) prizes[0] > 0) { if (prizes.hasCredits()) {
FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + (int) prizes[0] + " credits!", "Credits Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_GOLD)); FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + prizes.credits + " credits!", "Credits Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_GOLD));
FModel.getQuest().getAssets().addCredits((int) prizes[0]);
} }
if (prizes[2] != null) { 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);
List<PaperCard> individualCards = (ArrayList<PaperCard>) 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.setVisible(true);
c.dispose(); c.dispose();
FModel.getQuest().getCards().addAllCards(individualCards);
} }
} if (prizes.hasBoosterPacks()) {
if (prizes[1] != null) { String packPlural = (prizes.boosterPacks.size() == 1) ? "" : "s";
List<BoosterPack> boosterPacks = (ArrayList<BoosterPack>) prizes[1]; 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 (!boosterPacks.isEmpty()) { if (FModel.getPreferences().getPrefBoolean(FPref.UI_OPEN_PACKS_INDIV) && prizes.boosterPacks.size() > 1) {
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; boolean skipTheRest = false;
List<PaperCard> remainingCards = new ArrayList<PaperCard>(); List<PaperCard> remainingCards = new ArrayList<>();
int totalPacks = boosterPacks.size(); int totalPacks = prizes.boosterPacks.size();
int currentPack = 0; int currentPack = 0;
while (boosterPacks.size() > 0) { while (prizes.boosterPacks.size() > 0) {
BoosterPack pack = boosterPacks.remove(0); BoosterPack pack = prizes.boosterPacks.remove(0);
currentPack++; currentPack++;
if (skipTheRest) { if (skipTheRest) {
@@ -194,7 +168,6 @@ public enum CSubmenuQuestDraft implements ICDoc {
c.setVisible(true); c.setVisible(true);
c.dispose(); c.dispose();
skipTheRest = c.skipTheRest(); skipTheRest = c.skipTheRest();
FModel.getQuest().getCards().addAllCards(pack.getCards());
} }
@@ -202,26 +175,22 @@ public enum CSubmenuQuestDraft implements ICDoc {
final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", remainingCards); final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", remainingCards);
c.setVisible(true); c.setVisible(true);
c.dispose(); c.dispose();
FModel.getQuest().getCards().addAllCards(remainingCards);
} }
} else { } else {
List<PaperCard> cards = new ArrayList<PaperCard>(); List<PaperCard> cards = new ArrayList<PaperCard>();
while (boosterPacks.size() > 0) { while (prizes.boosterPacks.size() > 0) {
BoosterPack pack = boosterPacks.remove(0); BoosterPack pack = prizes.boosterPacks.remove(0);
cards.addAll(pack.getCards()); cards.addAll(pack.getCards());
continue;
} }
final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", cards); final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", cards);
c.setVisible(true); c.setVisible(true);
c.dispose(); c.dispose();
FModel.getQuest().getCards().addAllCards(cards);
} }
}
} }
@@ -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; 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) { if (saveDraft) {
draft.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);
CSubmenuDraft.SINGLETON_INSTANCE.update(); CSubmenuDraft.SINGLETON_INSTANCE.update();
} }
String deckName = "Tournament Deck " + new SimpleDateFormat("EEE d MMM yyyy HH-mm-ss").format(new Date()); draft.addToQuestDecks();
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();
VSubmenuQuestDraft view = VSubmenuQuestDraft.SINGLETON_INSTANCE; VSubmenuQuestDraft view = VSubmenuQuestDraft.SINGLETON_INSTANCE;
CSubmenuQuestDraft.SINGLETON_INSTANCE.update(); CSubmenuQuestDraft.SINGLETON_INSTANCE.update();
@@ -317,7 +262,6 @@ public enum CSubmenuQuestDraft implements ICDoc {
if (achievements != null) { if (achievements != null) {
achievements.spendDraftToken(); achievements.spendDraftToken();
FModel.getQuest().save();
update(); update();
VSubmenuQuestDraft.SINGLETON_INSTANCE.populate(); VSubmenuQuestDraft.SINGLETON_INSTANCE.populate();
@@ -492,27 +436,13 @@ public enum CSubmenuQuestDraft implements ICDoc {
} }
public void setCompletedDraft(DeckGroup finishedDraft, String s) { public void setCompletedDraft(DeckGroup finishedDraft) {
List<Deck> aiDecks = new ArrayList<Deck>(finishedDraft.getAiDecks()); QuestDraftUtils.completeDraft(finishedDraft);
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<DeckGroup> draft = FModel.getQuest().getDraftDecks();
draft.add(finishedDraft);
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST_TOURNAMENT); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST_TOURNAMENT);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest())); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest()));
FModel.getQuest().save();
drafting = false; drafting = false;
VSubmenuQuestDraft.SINGLETON_INSTANCE.setMode(Mode.PREPARE_DECK); VSubmenuQuestDraft.SINGLETON_INSTANCE.setMode(Mode.PREPARE_DECK);
@@ -536,7 +466,7 @@ public enum CSubmenuQuestDraft implements ICDoc {
QuestEventDraft draftEvent = QuestUtil.getDraftEvent(); QuestEventDraft draftEvent = QuestUtil.getDraftEvent();
long creditsAvailable = FModel.getQuest().getAssets().getCredits(); 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)); 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; return;
} }
@@ -549,11 +479,7 @@ public enum CSubmenuQuestDraft implements ICDoc {
drafting = true; drafting = true;
FModel.getQuest().getAchievements().setCurrentDraft(draftEvent); BoosterDraft draft = draftEvent.enter();
FModel.getQuest().getAssets().subtractCredits(draftEvent.getEntryFee());
BoosterDraft draft = BoosterDraft.createDraft(LimitedPoolType.Block, FModel.getBlocks().get(draftEvent.getBlock()), draftEvent.getBoosterConfiguration());
final CEditorQuestDraftingProcess draftController = new CEditorQuestDraftingProcess(); final CEditorQuestDraftingProcess draftController = new CEditorQuestDraftingProcess();
draftController.showGui(draft); draftController.showGui(draft);
@@ -586,8 +512,9 @@ public enum CSubmenuQuestDraft implements ICDoc {
private void startNextMatch() { private void startNextMatch() {
String message = GameType.QuestDraft.getDecksFormat().getDeckConformanceProblem(FModel.getQuest().getAssets().getDraftDeckStorage().get(QuestEventDraft.DECK_NAME).getHumanDeck()); String message = QuestDraftUtils.getDeckLegality();
if (message != null && FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
if (message != null) {
FOptionPane.showMessageDialog(message, "Deck Invalid"); FOptionPane.showMessageDialog(message, "Deck Invalid");
return; return;
} }
@@ -596,28 +523,6 @@ public enum CSubmenuQuestDraft implements ICDoc {
} }
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 @Override
public UiCommand getCommandOnSelect() { public UiCommand getCommandOnSelect() {
final QuestController qc = FModel.getQuest(); final QuestController qc = FModel.getQuest();

View File

@@ -1,11 +1,10 @@
package forge.quest; package forge.quest;
import java.util.ArrayList;
import java.util.List;
import forge.FThreads; import forge.FThreads;
import forge.GuiBase; import forge.GuiBase;
import forge.deck.Deck;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
import forge.deck.DeckSection;
import forge.game.Game; import forge.game.Game;
import forge.game.GameRules; import forge.game.GameRules;
import forge.game.GameType; import forge.game.GameType;
@@ -13,7 +12,10 @@ import forge.game.Match;
import forge.game.player.RegisteredPlayer; import forge.game.player.RegisteredPlayer;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences.FPref; 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 { public class QuestDraftUtils {
private static List<DraftMatchup> matchups = new ArrayList<DraftMatchup>(); private static List<DraftMatchup> matchups = new ArrayList<DraftMatchup>();
@@ -29,6 +31,34 @@ public class QuestDraftUtils {
GuiBase.getInterface().continueMatch(matchInProgress ? lastGame.getMatch() : null); GuiBase.getInterface().continueMatch(matchInProgress ? lastGame.getMatch() : null);
} }
public static void completeDraft(DeckGroup finishedDraft) {
List<Deck> aiDecks = new ArrayList<Deck>(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<DeckGroup> 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() { public static void startNextMatch() {
if (matchups.size() > 0) { if (matchups.size() > 0) {

View File

@@ -17,21 +17,18 @@
*/ */
package forge.quest; 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 com.google.common.base.Function;
import forge.GuiBase; import forge.GuiBase;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.card.CardEdition.CardInSet; import forge.card.CardEdition.CardInSet;
import forge.card.CardRarity; 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.BoosterPack;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.limited.BoosterDraft;
import forge.limited.LimitedPoolType; import forge.limited.LimitedPoolType;
import forge.model.CardBlock; import forge.model.CardBlock;
import forge.model.FModel; import forge.model.FModel;
@@ -39,6 +36,9 @@ import forge.quest.io.ReadPriceList;
import forge.util.NameGenerator; import forge.util.NameGenerator;
import forge.util.storage.IStorage; import forge.util.storage.IStorage;
import java.text.SimpleDateFormat;
import java.util.*;
/** /**
* <p> * <p>
* QuestEvent. * QuestEvent.
@@ -49,6 +49,26 @@ import forge.util.storage.IStorage;
*/ */
public class QuestEventDraft { public class QuestEventDraft {
public static class QuestDraftPrizes {
public int credits;
public List<BoosterPack> boosterPacks;
public List<PaperCard> 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 UNDETERMINED = "quest_draft_undetermined_place";
public static final String HUMAN = "quest_draft_human_place"; public static final String HUMAN = "quest_draft_human_place";
public static final String DECK_NAME = "Tournament Deck"; public static final String DECK_NAME = "Tournament Deck";
@@ -150,6 +170,57 @@ public class QuestEventDraft {
age--; 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() { public int getHumanLatestStanding() {
int humanIndex = 0; int humanIndex = 0;
for (int i = getStandings().length - 1; i >= 0; i--) { 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. * Generates the prizes for the player and saves them to the current quest.
* Index 0: int - credits
* Index 1:
* Index 2: ArrayList<PaperCard> - single cards
*/ */
public Object[] getPrizes() { public QuestDraftPrizes collectPrizes() {
int place = getPlayerPlacement(); int place = getPlayerPlacement();
int prizePool = entryFee * 9; int prizePool = entryFee * 9;
@@ -271,22 +339,48 @@ public class QuestEventDraft {
prizePool -= boosterPrices * 8; prizePool -= boosterPrices * 8;
QuestDraftPrizes prizes = null;
switch (place) { switch (place) {
case 1: case 1:
return generateFirstPlacePrizes(prizePool); prizes = generateFirstPlacePrizes(prizePool);
break;
case 2: case 2:
return generateSecondPlacePrizes(prizePool); prizes = generateSecondPlacePrizes(prizePool);
break;
case 3: case 3:
return generateThirdPlacePrizes(prizePool); prizes = generateThirdPlacePrizes(prizePool);
break;
case 4: 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; 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 int credits = 2 * (prizePool / 3); //First place gets 2/3 the total prize pool
List<PaperCard> cards = new ArrayList<PaperCard>(); List<PaperCard> cards = new ArrayList<PaperCard>();
@@ -308,11 +402,16 @@ public class QuestEventDraft {
credits = (credits / 2) + creditsForPacks; //Add the leftover credits + 50% 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 int credits = prizePool / 3; //Second place gets 1/3 the total prize pool
List<PaperCard> cards = new ArrayList<PaperCard>(); List<PaperCard> cards = new ArrayList<PaperCard>();
@@ -334,11 +433,16 @@ public class QuestEventDraft {
credits = (credits / 4) + creditsForPacks; //Add the leftover credits + 25% 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; int credits = 0;
List<PaperCard> cards = new ArrayList<PaperCard>(); List<PaperCard> cards = new ArrayList<PaperCard>();
@@ -348,18 +452,27 @@ public class QuestEventDraft {
List<BoosterPack> boosters = new ArrayList<BoosterPack>(); List<BoosterPack> boosters = new ArrayList<BoosterPack>();
boosters.add(getBoosterPack()); 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; int credits = 0;
List<PaperCard> cards = new ArrayList<PaperCard>(); List<PaperCard> cards = new ArrayList<PaperCard>();
cards.add(getPromoCard()); 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; PaperCard promo = null;
int attempts = 25; int attempts = 25;
@@ -411,7 +524,7 @@ public class QuestEventDraft {
private int getBoosterPrice(BoosterPack booster) { private int getBoosterPrice(BoosterPack booster) {
int value = 0; int value;
String boosterName = booster.getName() + " Booster Pack"; String boosterName = booster.getName() + " Booster Pack";
if (MAP_PRICES.containsKey(boosterName)) { 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() { public boolean isStarted() {
return started; return started;
} }

View File

@@ -1,12 +1,12 @@
package forge.quest.data; package forge.quest.data;
import java.util.ArrayList;
import java.util.List;
import forge.model.FModel; import forge.model.FModel;
import forge.quest.QuestEventDraft; import forge.quest.QuestEventDraft;
import forge.quest.data.QuestPreferences.DifficultyPrefs; import forge.quest.data.QuestPreferences.DifficultyPrefs;
import java.util.ArrayList;
import java.util.List;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
* *
@@ -316,6 +316,7 @@ public class QuestAchievements {
if (draftTokens > 0) { if (draftTokens > 0) {
draftTokens--; draftTokens--;
draftsToGenerate++; draftsToGenerate++;
FModel.getQuest().save();
} }
} }