From 0cfa184d625650d1acf075b174ef443be5bbf9c4 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 17 Jul 2016 19:57:36 +0000 Subject: [PATCH] Support laying out tournament screen when preparing deck --- .../home/quest/VSubmenuQuestDraft.java | 7 - .../screens/quest/QuestTournamentsScreen.java | 148 ++++++++++++------ .../forge/itemmanager/ItemManagerConfig.java | 2 + .../forge/quest/IQuestTournamentView.java | 1 - .../quest/QuestTournamentController.java | 2 +- 5 files changed, 107 insertions(+), 53 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java index c66f945f56e..0a41074e8eb 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java @@ -79,8 +79,6 @@ public enum VSubmenuQuestDraft implements IVSubmenu, IQuestT .fontSize(15).build(); private final FLabel lblFourth = new FLabel.Builder() .fontSize(15).build(); - private final FLabel lblTokens = new FLabel.Builder() - .fontSize(15).build(); private final StartButton btnStartDraft = new StartButton(); private final StartButton btnStartTournament = new StartButton(); @@ -144,7 +142,6 @@ public enum VSubmenuQuestDraft implements IVSubmenu, IQuestT pnlStats.add(lblSecond, constraints); pnlStats.add(lblThird, constraints); pnlStats.add(lblFourth, constraints); - pnlStats.add(lblTokens, "h 30px!, gap 0 0 50px 10px, ax center"); pnlStats.add(btnSpendToken, "w 150px!, h 40px!, ax center"); pnlStats.setOpaque(false); @@ -208,10 +205,6 @@ public enum VSubmenuQuestDraft implements IVSubmenu, IQuestT return lblFourth; } - public FLabel getLblTokens() { - return lblTokens; - } - public FLabel getBtnSpendToken() { return btnSpendToken; } diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java index 79c85f4b7ff..6a5cd91034f 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java @@ -1,17 +1,20 @@ package forge.screens.quest; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; -import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds; import com.badlogic.gdx.math.Vector2; import forge.FThreads; import forge.Forge; import forge.assets.FSkinFont; import forge.assets.FSkinImage; +import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckGroup; import forge.deck.FDeckEditor; import forge.deck.FDeckEditor.EditorType; +import forge.itemmanager.CardManager; +import forge.itemmanager.ItemManagerConfig; +import forge.itemmanager.filters.ItemFilter; import forge.limited.BoosterDraft; import forge.model.FModel; import forge.quest.IQuestTournamentView; @@ -20,30 +23,43 @@ import forge.quest.QuestTournamentController; import forge.quest.QuestDraftUtils.Mode; import forge.quest.data.QuestEventDraftContainer; import forge.screens.limited.DraftingProcessScreen; +import forge.toolbox.FButton; +import forge.toolbox.FContainer; import forge.toolbox.FEvent; +import forge.toolbox.FTextField; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; import forge.util.Utils; public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestTournamentView { - private final FLabel lblCredits = add(new FLabel.Builder().icon(FSkinImage.QUEST_COINSTACK) + //Select Tournament panel + private final SelectTournamentPanel pnlSelectTournament = add(new SelectTournamentPanel()); + + private final FLabel lblCredits = pnlSelectTournament.add(new FLabel.Builder().icon(FSkinImage.QUEST_COINSTACK) .iconScaleFactor(0.75f).font(FSkinFont.get(16)).build()); - private final FLabel lblTokens = add(new FLabel.Builder() - .align(HAlignment.RIGHT).font(FSkinFont.get(16)).build()); + private final FLabel btnSpendToken = pnlSelectTournament.add(new FLabel.ButtonBuilder().text("Spend Token (0)").build()); - private final FLabel lblInfo = add(new FLabel.Builder().text("Select a tournament to join:") + private final FLabel lblInfo = pnlSelectTournament.add(new FLabel.Builder().text("Select a tournament to join:") .align(HAlignment.CENTER).font(FSkinFont.get(16)).build()); - private final FLabel lblNoTournaments = add(new FLabel.Builder() + private final FLabel lblNoTournaments = pnlSelectTournament.add(new FLabel.Builder() .align(HAlignment.CENTER).text("There are no tournaments available at this time.").insets(Vector2.Zero) .font(FSkinFont.get(12)).build()); - private final QuestEventPanel.Container pnlTournaments = add(new QuestEventPanel.Container()); + private final QuestEventPanel.Container pnlTournaments = pnlSelectTournament.add(new QuestEventPanel.Container()); - private final FLabel btnLeaveTournament = add(new FLabel.ButtonBuilder().text("Leave Tournament").build()); - private final FLabel btnSpendToken = add(new FLabel.ButtonBuilder().text("Spend Token").build()); + //Prepare Deck panel + private final PrepareDeckPanel pnlPrepareDeck = add(new PrepareDeckPanel()); + private final FButton btnEditDeck = pnlPrepareDeck.add(new FButton("Edit Deck")); + private final FButton btnLeaveTournament = pnlPrepareDeck.add(new FButton("Leave Tournament")); + private final CardManager deckViewer = pnlPrepareDeck.add(new CardManager(false)); + + //Tournament Active panel + private final TournamentActivePanel pnlTournamentActive = add(new TournamentActivePanel()); + + //Results labels private static final FSkinFont RESULTS_FONT = FSkinFont.get(15); private static final Vector2 RESULTS_INSETS = new Vector2(2 * PADDING, 0); private final FLabel lblFirst = new FLabel.Builder().font(RESULTS_FONT).insets(RESULTS_INSETS).build(); @@ -51,8 +67,8 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT private final FLabel lblThird = new FLabel.Builder().font(RESULTS_FONT).insets(RESULTS_INSETS).build(); private final FLabel lblFourth = new FLabel.Builder().font(RESULTS_FONT).insets(RESULTS_INSETS).build(); + private Mode mode; private final QuestTournamentController controller; - private Mode mode = Mode.SELECT_TOURNAMENT; public QuestTournamentsScreen() { super(); @@ -63,38 +79,29 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT controller.spendToken(); } }); + btnEditDeck.setCommand(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + controller.editDeck(); + } + }); btnLeaveTournament.setCommand(new FEventHandler() { @Override public void handleEvent(FEvent e) { controller.endTournamentAndAwardPrizes(); } }); - btnLeaveTournament.setVisible(false); + deckViewer.setCaption("Main Deck"); + deckViewer.setup(ItemManagerConfig.QUEST_DRAFT_DECK_VIEWER); + setMode(Mode.SELECT_TOURNAMENT); } @Override protected void doLayoutAboveBtnStart(float startY, float width, float height) { - float gap = Utils.scale(2); - float y = startY + gap; //move credits label down a couple pixels so it looks better - - float halfWidth = width / 2; - lblCredits.setBounds(0, y, halfWidth, lblCredits.getAutoSizeBounds().height); - lblTokens.setBounds(halfWidth, y, halfWidth - gap, lblCredits.getHeight()); - y += lblCredits.getHeight() + gap; - - TextBounds buttonBounds = btnSpendToken.getAutoSizeBounds(); - float buttonWidth = buttonBounds.width + 2 * gap; - float x = width - gap - buttonWidth; - btnSpendToken.setBounds(x, y, buttonWidth, buttonBounds.height + 2 * gap); - btnLeaveTournament.setBounds(gap, y, x - 3 * gap, btnSpendToken.getHeight()); - y += btnSpendToken.getHeight() + gap; - - x = PADDING; - float w = width - 2 * PADDING; - lblInfo.setBounds(x, y, w, lblInfo.getAutoSizeBounds().height); - y += lblInfo.getHeight() + gap; - lblNoTournaments.setBounds(x, y, w, lblNoTournaments.getAutoSizeBounds().height); - pnlTournaments.setBounds(x, y, w, height - y); + height -= startY; + pnlSelectTournament.setBounds(0, startY, width, height); + pnlPrepareDeck.setBounds(0, startY, width, height); + pnlTournamentActive.setBounds(0, startY, width, height); } @Override @@ -105,6 +112,16 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT @Override public void onUpdate() { controller.update(); + if (mode == Mode.PREPARE_DECK) { + Deck deck = getDeck(); + if (deck != null) { + deckViewer.setPool(deck.getMain()); + } + else { + deckViewer.setPool(new CardPool()); + } + setHeaderCaption(FModel.getQuest().getName() + " - " + getGameType() + "\nDraft - " + FModel.getQuest().getAchievements().getCurrentDraft().getTitle()); + } } @Override @@ -114,7 +131,11 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT @Override public void setMode(Mode mode0) { + if (mode == mode0) { return; } mode = mode0; + pnlSelectTournament.setVisible(mode == Mode.SELECT_TOURNAMENT); + pnlPrepareDeck.setVisible(mode == Mode.PREPARE_DECK); + pnlTournamentActive.setVisible(mode == Mode.TOURNAMENT_ACTIVE); } @Override @@ -148,15 +169,20 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT public void startDraft(BoosterDraft draft) { Forge.openScreen(new DraftingProcessScreen(draft)); } + + private Deck getDeck() { + DeckGroup deckGroup = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME); + if (deckGroup != null) { + return deckGroup.getHumanDeck(); + } + return null; + } @Override public void editDeck(boolean isExistingDeck) { - DeckGroup deckGroup = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME); - if (deckGroup != null) { - Deck deck = deckGroup.getHumanDeck(); - if (deck != null) { - Forge.openScreen(new FDeckEditor(EditorType.QuestDraft, deck, isExistingDeck)); - } + Deck deck = getDeck(); + if (deck != null) { + Forge.openScreen(new FDeckEditor(EditorType.QuestDraft, deck, isExistingDeck)); } } @@ -207,18 +233,52 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT return lblFourth; } - @Override - public FLabel getLblTokens() { - return lblTokens; - } - @Override public FLabel getBtnSpendToken() { return btnSpendToken; } @Override - public FLabel getBtnLeaveTournament() { + public FButton getBtnLeaveTournament() { return btnLeaveTournament; } + + private class SelectTournamentPanel extends FContainer { + @Override + protected void doLayout(float width, float height) { + float gap = Utils.scale(2); + float y = gap; //move credits label down a couple pixels so it looks better + + float halfWidth = width / 2; + lblCredits.setBounds(0, y, halfWidth, lblCredits.getAutoSizeBounds().height); + btnSpendToken.setBounds(halfWidth, y, halfWidth - gap, lblCredits.getHeight()); + y += lblCredits.getHeight() + gap; + + float x = PADDING; + float w = width - 2 * PADDING; + lblInfo.setBounds(x, y, w, lblInfo.getAutoSizeBounds().height); + y += lblInfo.getHeight() + gap; + lblNoTournaments.setBounds(x, y, w, lblNoTournaments.getAutoSizeBounds().height); + pnlTournaments.setBounds(x, y, w, height - y); + } + } + + private class PrepareDeckPanel extends FContainer { + @Override + protected void doLayout(float width, float height) { + float y = PADDING; + float buttonWidth = (width - 3 * PADDING) / 2; + btnEditDeck.setBounds(PADDING, y, buttonWidth, FTextField.getDefaultHeight()); + btnLeaveTournament.setBounds(btnEditDeck.getRight() + PADDING, y, buttonWidth, btnEditDeck.getHeight()); + y += btnEditDeck.getHeight() + PADDING - ItemFilter.PADDING; + deckViewer.setBounds(0, y, width, height - y); + } + } + + private class TournamentActivePanel extends FContainer { + @Override + protected void doLayout(float width, float height) { + + } + } } diff --git a/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java b/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java index 6326ae4776f..785d5bdbf90 100644 --- a/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java +++ b/forge-gui/src/main/java/forge/itemmanager/ItemManagerConfig.java @@ -42,6 +42,8 @@ public enum ItemManagerConfig { null, null, 4, 0), QUEST_DECK_EDITOR(SColumnUtil.getQuestDeckEditorDefaultColumns(), false, false, false, GroupDef.DEFAULT, ColumnDef.CMC, 4, 1), + QUEST_DRAFT_DECK_VIEWER(SColumnUtil.getDeckViewerDefaultColumns(), false, false, true, + GroupDef.DEFAULT, ColumnDef.CMC, 4, 1), CONQUEST_AETHER(SColumnUtil.getConquestAEtherDefaultColumns(), false, false, false, null, null, 4, 0), CONQUEST_COMMANDERS(SColumnUtil.getConquestCommandersDefaultColumns(), false, false, false, diff --git a/forge-gui/src/main/java/forge/quest/IQuestTournamentView.java b/forge-gui/src/main/java/forge/quest/IQuestTournamentView.java index c4b6a5ac877..b241e814668 100644 --- a/forge-gui/src/main/java/forge/quest/IQuestTournamentView.java +++ b/forge-gui/src/main/java/forge/quest/IQuestTournamentView.java @@ -19,7 +19,6 @@ public interface IQuestTournamentView { IButton getLblSecond(); IButton getLblThird(); IButton getLblFourth(); - IButton getLblTokens(); IButton getBtnSpendToken(); IButton getBtnLeaveTournament(); } diff --git a/forge-gui/src/main/java/forge/quest/QuestTournamentController.java b/forge-gui/src/main/java/forge/quest/QuestTournamentController.java index 872b8554c58..51b4964d2f2 100644 --- a/forge-gui/src/main/java/forge/quest/QuestTournamentController.java +++ b/forge-gui/src/main/java/forge/quest/QuestTournamentController.java @@ -252,7 +252,7 @@ public class QuestTournamentController { view.getLblThird().setText("3rd Place: " + achievements.getWinsForPlace(3) + " time" + (achievements.getWinsForPlace(3) == 1 ? "" : "s")); view.getLblFourth().setText("4th Place: " + achievements.getWinsForPlace(4) + " time" + (achievements.getWinsForPlace(4) == 1 ? "" : "s")); - view.getLblTokens().setText("Tokens: " + achievements.getDraftTokens()); + view.getBtnSpendToken().setText("Spend Token (" + achievements.getDraftTokens() + ")"); view.getBtnSpendToken().setEnabled(achievements.getDraftTokens() > 0); }