mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Removed the quest draft logic from the UI controller to make porting to other platforms much easier.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -201,21 +201,19 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
|
||||
*/
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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<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.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<BoosterPack> boosterPacks = (ArrayList<BoosterPack>) prizes[1];
|
||||
String packPlural = (prizes.boosterPacks.size() == 1) ? "" : "s";
|
||||
|
||||
if (!boosterPacks.isEmpty()) {
|
||||
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));
|
||||
|
||||
String packPlural = (boosterPacks.size() == 1) ? "" : "s";
|
||||
if (FModel.getPreferences().getPrefBoolean(FPref.UI_OPEN_PACKS_INDIV) && prizes.boosterPacks.size() > 1) {
|
||||
|
||||
FOptionPane.showMessageDialog("For placing " + placement + ", you have been awarded " + boosterPacks.size() + " booster pack" + packPlural + "!", "Booster Pack" + packPlural + " Awarded", FSkin.getImage(FSkinProp.ICO_QUEST_BOX));
|
||||
boolean skipTheRest = false;
|
||||
List<PaperCard> remainingCards = new ArrayList<>();
|
||||
int totalPacks = prizes.boosterPacks.size();
|
||||
int currentPack = 0;
|
||||
|
||||
if (FModel.getPreferences().getPrefBoolean(FPref.UI_OPEN_PACKS_INDIV) && boosterPacks.size() > 1) {
|
||||
while (prizes.boosterPacks.size() > 0) {
|
||||
|
||||
boolean skipTheRest = false;
|
||||
List<PaperCard> remainingCards = new ArrayList<PaperCard>();
|
||||
int totalPacks = boosterPacks.size();
|
||||
int currentPack = 0;
|
||||
BoosterPack pack = prizes.boosterPacks.remove(0);
|
||||
currentPack++;
|
||||
|
||||
while (boosterPacks.size() > 0) {
|
||||
if (skipTheRest) {
|
||||
remainingCards.addAll(pack.getCards());
|
||||
continue;
|
||||
}
|
||||
|
||||
BoosterPack pack = boosterPacks.remove(0);
|
||||
currentPack++;
|
||||
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.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();
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
|
||||
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);
|
||||
}
|
||||
List<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
|
||||
} else {
|
||||
while (prizes.boosterPacks.size() > 0) {
|
||||
BoosterPack pack = prizes.boosterPacks.remove(0);
|
||||
cards.addAll(pack.getCards());
|
||||
}
|
||||
|
||||
List<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
final CardListViewer c = new CardListViewer("Tournament Reward", "You have found the following cards inside:", cards);
|
||||
c.setVisible(true);
|
||||
c.dispose();
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
public void setCompletedDraft(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);
|
||||
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;
|
||||
}
|
||||
@@ -549,11 +479,7 @@ 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);
|
||||
@@ -586,8 +512,9 @@ 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;
|
||||
}
|
||||
@@ -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
|
||||
public UiCommand getCommandOnSelect() {
|
||||
final QuestController qc = FModel.getQuest();
|
||||
|
||||
@@ -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<DraftMatchup> matchups = new ArrayList<DraftMatchup>();
|
||||
@@ -29,6 +31,34 @@ public class QuestDraftUtils {
|
||||
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() {
|
||||
|
||||
if (matchups.size() > 0) {
|
||||
|
||||
@@ -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.*;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* QuestEvent.
|
||||
@@ -49,6 +49,26 @@ import forge.util.storage.IStorage;
|
||||
*/
|
||||
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 HUMAN = "quest_draft_human_place";
|
||||
public static final String DECK_NAME = "Tournament Deck";
|
||||
@@ -150,6 +170,57 @@ public class QuestEventDraft {
|
||||
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<PaperCard> - 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;
|
||||
@@ -271,22 +339,48 @@ 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<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
@@ -308,11 +402,16 @@ 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<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
@@ -334,11 +433,16 @@ 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<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
@@ -348,18 +452,27 @@ public class QuestEventDraft {
|
||||
List<BoosterPack> boosters = new ArrayList<BoosterPack>();
|
||||
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<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user