Support laying out tournament screen when preparing deck

This commit is contained in:
drdev
2016-07-17 19:57:36 +00:00
parent 4ecb5e17fa
commit 0cfa184d62
5 changed files with 107 additions and 53 deletions

View File

@@ -79,8 +79,6 @@ public enum VSubmenuQuestDraft implements IVSubmenu<CSubmenuQuestDraft>, IQuestT
.fontSize(15).build(); .fontSize(15).build();
private final FLabel lblFourth = new FLabel.Builder() private final FLabel lblFourth = new FLabel.Builder()
.fontSize(15).build(); .fontSize(15).build();
private final FLabel lblTokens = new FLabel.Builder()
.fontSize(15).build();
private final StartButton btnStartDraft = new StartButton(); private final StartButton btnStartDraft = new StartButton();
private final StartButton btnStartTournament = new StartButton(); private final StartButton btnStartTournament = new StartButton();
@@ -144,7 +142,6 @@ public enum VSubmenuQuestDraft implements IVSubmenu<CSubmenuQuestDraft>, IQuestT
pnlStats.add(lblSecond, constraints); pnlStats.add(lblSecond, constraints);
pnlStats.add(lblThird, constraints); pnlStats.add(lblThird, constraints);
pnlStats.add(lblFourth, 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.add(btnSpendToken, "w 150px!, h 40px!, ax center");
pnlStats.setOpaque(false); pnlStats.setOpaque(false);
@@ -208,10 +205,6 @@ public enum VSubmenuQuestDraft implements IVSubmenu<CSubmenuQuestDraft>, IQuestT
return lblFourth; return lblFourth;
} }
public FLabel getLblTokens() {
return lblTokens;
}
public FLabel getBtnSpendToken() { public FLabel getBtnSpendToken() {
return btnSpendToken; return btnSpendToken;
} }

View File

@@ -1,17 +1,20 @@
package forge.screens.quest; package forge.screens.quest;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import forge.FThreads; import forge.FThreads;
import forge.Forge; import forge.Forge;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
import forge.deck.FDeckEditor; import forge.deck.FDeckEditor;
import forge.deck.FDeckEditor.EditorType; import forge.deck.FDeckEditor.EditorType;
import forge.itemmanager.CardManager;
import forge.itemmanager.ItemManagerConfig;
import forge.itemmanager.filters.ItemFilter;
import forge.limited.BoosterDraft; import forge.limited.BoosterDraft;
import forge.model.FModel; import forge.model.FModel;
import forge.quest.IQuestTournamentView; import forge.quest.IQuestTournamentView;
@@ -20,30 +23,43 @@ import forge.quest.QuestTournamentController;
import forge.quest.QuestDraftUtils.Mode; import forge.quest.QuestDraftUtils.Mode;
import forge.quest.data.QuestEventDraftContainer; import forge.quest.data.QuestEventDraftContainer;
import forge.screens.limited.DraftingProcessScreen; import forge.screens.limited.DraftingProcessScreen;
import forge.toolbox.FButton;
import forge.toolbox.FContainer;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FTextField;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.util.Utils; import forge.util.Utils;
public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestTournamentView { 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()); .iconScaleFactor(0.75f).font(FSkinFont.get(16)).build());
private final FLabel lblTokens = add(new FLabel.Builder() private final FLabel btnSpendToken = pnlSelectTournament.add(new FLabel.ButtonBuilder().text("Spend Token (0)").build());
.align(HAlignment.RIGHT).font(FSkinFont.get(16)).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()); .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) .align(HAlignment.CENTER).text("There are no tournaments available at this time.").insets(Vector2.Zero)
.font(FSkinFont.get(12)).build()); .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()); //Prepare Deck panel
private final FLabel btnSpendToken = add(new FLabel.ButtonBuilder().text("Spend Token").build()); 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 FSkinFont RESULTS_FONT = FSkinFont.get(15);
private static final Vector2 RESULTS_INSETS = new Vector2(2 * PADDING, 0); 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(); 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 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 final FLabel lblFourth = new FLabel.Builder().font(RESULTS_FONT).insets(RESULTS_INSETS).build();
private Mode mode;
private final QuestTournamentController controller; private final QuestTournamentController controller;
private Mode mode = Mode.SELECT_TOURNAMENT;
public QuestTournamentsScreen() { public QuestTournamentsScreen() {
super(); super();
@@ -63,38 +79,29 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
controller.spendToken(); controller.spendToken();
} }
}); });
btnEditDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
controller.editDeck();
}
});
btnLeaveTournament.setCommand(new FEventHandler() { btnLeaveTournament.setCommand(new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
controller.endTournamentAndAwardPrizes(); controller.endTournamentAndAwardPrizes();
} }
}); });
btnLeaveTournament.setVisible(false); deckViewer.setCaption("Main Deck");
deckViewer.setup(ItemManagerConfig.QUEST_DRAFT_DECK_VIEWER);
setMode(Mode.SELECT_TOURNAMENT);
} }
@Override @Override
protected void doLayoutAboveBtnStart(float startY, float width, float height) { protected void doLayoutAboveBtnStart(float startY, float width, float height) {
float gap = Utils.scale(2); height -= startY;
float y = startY + gap; //move credits label down a couple pixels so it looks better pnlSelectTournament.setBounds(0, startY, width, height);
pnlPrepareDeck.setBounds(0, startY, width, height);
float halfWidth = width / 2; pnlTournamentActive.setBounds(0, startY, width, height);
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);
} }
@Override @Override
@@ -105,6 +112,16 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
@Override @Override
public void onUpdate() { public void onUpdate() {
controller.update(); 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 @Override
@@ -114,7 +131,11 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
@Override @Override
public void setMode(Mode mode0) { public void setMode(Mode mode0) {
if (mode == mode0) { return; }
mode = mode0; mode = mode0;
pnlSelectTournament.setVisible(mode == Mode.SELECT_TOURNAMENT);
pnlPrepareDeck.setVisible(mode == Mode.PREPARE_DECK);
pnlTournamentActive.setVisible(mode == Mode.TOURNAMENT_ACTIVE);
} }
@Override @Override
@@ -149,16 +170,21 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
Forge.openScreen(new DraftingProcessScreen(draft)); Forge.openScreen(new DraftingProcessScreen(draft));
} }
@Override private Deck getDeck() {
public void editDeck(boolean isExistingDeck) {
DeckGroup deckGroup = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME); DeckGroup deckGroup = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME);
if (deckGroup != null) { if (deckGroup != null) {
Deck deck = deckGroup.getHumanDeck(); return deckGroup.getHumanDeck();
}
return null;
}
@Override
public void editDeck(boolean isExistingDeck) {
Deck deck = getDeck();
if (deck != null) { if (deck != null) {
Forge.openScreen(new FDeckEditor(EditorType.QuestDraft, deck, isExistingDeck)); Forge.openScreen(new FDeckEditor(EditorType.QuestDraft, deck, isExistingDeck));
} }
} }
}
@Override @Override
protected void startMatch() { protected void startMatch() {
@@ -207,18 +233,52 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
return lblFourth; return lblFourth;
} }
@Override
public FLabel getLblTokens() {
return lblTokens;
}
@Override @Override
public FLabel getBtnSpendToken() { public FLabel getBtnSpendToken() {
return btnSpendToken; return btnSpendToken;
} }
@Override @Override
public FLabel getBtnLeaveTournament() { public FButton getBtnLeaveTournament() {
return btnLeaveTournament; 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) {
}
}
} }

View File

@@ -42,6 +42,8 @@ public enum ItemManagerConfig {
null, null, 4, 0), null, null, 4, 0),
QUEST_DECK_EDITOR(SColumnUtil.getQuestDeckEditorDefaultColumns(), false, false, false, QUEST_DECK_EDITOR(SColumnUtil.getQuestDeckEditorDefaultColumns(), false, false, false,
GroupDef.DEFAULT, ColumnDef.CMC, 4, 1), 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, CONQUEST_AETHER(SColumnUtil.getConquestAEtherDefaultColumns(), false, false, false,
null, null, 4, 0), null, null, 4, 0),
CONQUEST_COMMANDERS(SColumnUtil.getConquestCommandersDefaultColumns(), false, false, false, CONQUEST_COMMANDERS(SColumnUtil.getConquestCommandersDefaultColumns(), false, false, false,

View File

@@ -19,7 +19,6 @@ public interface IQuestTournamentView {
IButton getLblSecond(); IButton getLblSecond();
IButton getLblThird(); IButton getLblThird();
IButton getLblFourth(); IButton getLblFourth();
IButton getLblTokens();
IButton getBtnSpendToken(); IButton getBtnSpendToken();
IButton getBtnLeaveTournament(); IButton getBtnLeaveTournament();
} }

View File

@@ -252,7 +252,7 @@ public class QuestTournamentController {
view.getLblThird().setText("3rd Place: " + achievements.getWinsForPlace(3) + " time" + (achievements.getWinsForPlace(3) == 1 ? "" : "s")); 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.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); view.getBtnSpendToken().setEnabled(achievements.getDraftTokens() > 0);
} }