mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Support laying out tournament screen when preparing deck
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -148,15 +169,20 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
|
|||||||
public void startDraft(BoosterDraft draft) {
|
public void startDraft(BoosterDraft draft) {
|
||||||
Forge.openScreen(new DraftingProcessScreen(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
|
@Override
|
||||||
public void editDeck(boolean isExistingDeck) {
|
public void editDeck(boolean isExistingDeck) {
|
||||||
DeckGroup deckGroup = FModel.getQuest().getDraftDecks().get(QuestEventDraft.DECK_NAME);
|
Deck deck = getDeck();
|
||||||
if (deckGroup != null) {
|
if (deck != null) {
|
||||||
Deck deck = deckGroup.getHumanDeck();
|
Forge.openScreen(new FDeckEditor(EditorType.QuestDraft, deck, isExistingDeck));
|
||||||
if (deck != null) {
|
|
||||||
Forge.openScreen(new FDeckEditor(EditorType.QuestDraft, deck, isExistingDeck));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user