diff --git a/.gitattributes b/.gitattributes index f7e0cb47468..0ce154bd015 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1205,6 +1205,7 @@ forge-gui-mobile/src/forge/screens/quest/QuestChallengesScreen.java -text forge-gui-mobile/src/forge/screens/quest/QuestDecksScreen.java -text forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java -text forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java -text +forge-gui-mobile/src/forge/screens/quest/QuestLaunchScreen.java -text forge-gui-mobile/src/forge/screens/quest/QuestMenu.java -text forge-gui-mobile/src/forge/screens/quest/QuestPrefsScreen.java -text forge-gui-mobile/src/forge/screens/quest/QuestSpellShopScreen.java -text diff --git a/forge-gui-mobile/src/forge/screens/LaunchScreen.java b/forge-gui-mobile/src/forge/screens/LaunchScreen.java index 6e1c4f34963..8ef5969d69c 100644 --- a/forge-gui-mobile/src/forge/screens/LaunchScreen.java +++ b/forge-gui-mobile/src/forge/screens/LaunchScreen.java @@ -23,7 +23,7 @@ public abstract class LaunchScreen extends FScreen { private static final float PADDING = IMAGE_HEIGHT * 0.025f; protected final StartButton btnStart = add(new StartButton()); - private boolean creatingMatch; + protected boolean creatingMatch; public LaunchScreen(String headerCaption) { super(headerCaption); @@ -47,7 +47,7 @@ public abstract class LaunchScreen extends FScreen { public final Set appliedVariants = new HashSet(); } - private void startMatch() { + protected void startMatch() { if (creatingMatch) { return; } creatingMatch = true; //ensure user doesn't create multiple matches by tapping multiple times diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestChallengesScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestChallengesScreen.java index 55dec7aa155..ca2a2743364 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestChallengesScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestChallengesScreen.java @@ -1,17 +1,8 @@ package forge.screens.quest; -import forge.model.FModel; -import forge.quest.QuestUtil; -import forge.screens.LaunchScreen; - -public class QuestChallengesScreen extends LaunchScreen { +public class QuestChallengesScreen extends QuestLaunchScreen { public QuestChallengesScreen() { - super("Quest Duels", QuestMenu.getMenu()); - } - - @Override - public void onActivate() { - update(); + super(); } @Override @@ -20,14 +11,12 @@ public class QuestChallengesScreen extends LaunchScreen { } - public void update() { - QuestUtil.updateQuestView(QuestMenu.getMenu()); - setHeaderCaption(FModel.getQuest().getName() + " - Challenges\n(" + FModel.getQuest().getRank() + ")"); + @Override + protected String getGameType() { + return "Challenges"; } @Override - protected boolean buildLaunchParams(LaunchParams launchParams) { - // TODO Auto-generated method stub - return false; + public void onUpdate() { } } diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java index c01ce86980c..6f0c9d92749 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java @@ -11,16 +11,11 @@ import forge.interfaces.ICheckBox; import forge.interfaces.IComboBox; import forge.model.FModel; import forge.quest.QuestEventDuel; -import forge.quest.QuestUtil; -import forge.screens.LaunchScreen; import forge.toolbox.FCheckBox; import forge.toolbox.FComboBox; import forge.toolbox.FLabel; -import forge.toolbox.FOptionPane; - -public class QuestDuelsScreen extends LaunchScreen { - private static final float PADDING = FOptionPane.PADDING; +public class QuestDuelsScreen extends QuestLaunchScreen { private final FComboBox cbxPet = add(new FComboBox()); private final FCheckBox cbCharm = add(new FCheckBox("Use Charm of Vigor")); private final FCheckBox cbPlant = add(new FCheckBox("Summon Plant")); @@ -42,12 +37,7 @@ public class QuestDuelsScreen extends LaunchScreen { private final FLabel btnRandomOpponent = add(new FLabel.ButtonBuilder().text("Random Duel").font(FSkinFont.get(16)).build()); public QuestDuelsScreen() { - super("Quest Duels", QuestMenu.getMenu()); - } - - @Override - public void onActivate() { - update(); + super(); } @Override @@ -64,11 +54,6 @@ public class QuestDuelsScreen extends LaunchScreen { pnlDuels.setBounds(x, y, w, height - y); } - @Override - protected boolean buildLaunchParams(LaunchParams launchParams) { - return false; - } - public IButton getBtnRandomOpponent() { return btnRandomOpponent; } @@ -97,10 +82,13 @@ public class QuestDuelsScreen extends LaunchScreen { return lblZep; } - public void update() { - QuestUtil.updateQuestView(QuestMenu.getMenu()); - setHeaderCaption(FModel.getQuest().getName() + " - Duels\n(" + FModel.getQuest().getRank() + ")"); + @Override + protected String getGameType() { + return "Duels"; + } + @Override + public void onUpdate() { pnlDuels.clear(); List duels = FModel.getQuest().getDuelsManager().generateDuels(); diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java b/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java index a52f08c37e6..7f62c2c493f 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestEventPanel.java @@ -42,7 +42,7 @@ class QuestEventPanel extends FDisplayObject { img = ImageCache.getIcon(e0); container = container0; if (container.selectedPanel == null) { - container.selectedPanel = this; //select first panel in container by default + setSelected(true); //select first panel in container by default } } diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestLaunchScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestLaunchScreen.java new file mode 100644 index 00000000000..013cbd290fa --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/quest/QuestLaunchScreen.java @@ -0,0 +1,62 @@ +package forge.screens.quest; + +import forge.FThreads; +import forge.model.FModel; +import forge.quest.QuestUtil; +import forge.screens.LaunchScreen; +import forge.screens.LoadingOverlay; +import forge.toolbox.FOptionPane; + +public abstract class QuestLaunchScreen extends LaunchScreen { + protected static final float PADDING = FOptionPane.PADDING; + + public QuestLaunchScreen() { + super("", QuestMenu.getMenu()); + } + + @Override + public final void onActivate() { + update(); + } + + @Override + protected void startMatch() { + if (creatingMatch) { return; } + creatingMatch = true; //ensure user doesn't create multiple matches by tapping multiple times + + FThreads.invokeInBackgroundThread(new Runnable() { + @Override + public void run() { + if (QuestUtil.canStartGame()) { + FThreads.invokeInEdtLater(new Runnable() { + @Override + public void run() { + LoadingOverlay.show("Loading new game...", new Runnable() { + @Override + public void run() { + QuestUtil.finishStartingGame(); + creatingMatch = false; + } + }); + } + }); + } + } + }); + } + + @Override + protected final boolean buildLaunchParams(LaunchParams launchParams) { + return false; //this override isn't needed + } + + public final void update() { + QuestUtil.updateQuestView(QuestMenu.getMenu()); + setHeaderCaption(FModel.getQuest().getName() + " - " + getGameType() + "\n(" + FModel.getQuest().getRank() + ")"); + + onUpdate(); + } + + protected abstract String getGameType(); + protected abstract void onUpdate(); +} diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java index 6760b1b008a..9709f640541 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestTournamentsScreen.java @@ -1,17 +1,8 @@ package forge.screens.quest; -import forge.model.FModel; -import forge.quest.QuestUtil; -import forge.screens.LaunchScreen; - -public class QuestTournamentsScreen extends LaunchScreen { +public class QuestTournamentsScreen extends QuestLaunchScreen { public QuestTournamentsScreen() { - super("Quest Duels", QuestMenu.getMenu()); - } - - @Override - public void onActivate() { - update(); + super(); } @Override @@ -20,14 +11,12 @@ public class QuestTournamentsScreen extends LaunchScreen { } - public void update() { - QuestUtil.updateQuestView(QuestMenu.getMenu()); - setHeaderCaption(FModel.getQuest().getName() + " - Tournaments\n(" + FModel.getQuest().getRank() + ")"); + @Override + protected String getGameType() { + return "Tournaments"; } @Override - protected boolean buildLaunchParams(LaunchParams launchParams) { - // TODO Auto-generated method stub - return false; + public void onUpdate() { } } diff --git a/forge-gui/src/main/java/forge/quest/QuestUtil.java b/forge-gui/src/main/java/forge/quest/QuestUtil.java index 01c84058611..a9afc06aebd 100644 --- a/forge-gui/src/main/java/forge/quest/QuestUtil.java +++ b/forge-gui/src/main/java/forge/quest/QuestUtil.java @@ -511,36 +511,14 @@ public class QuestUtil { QuestUtilUnlockSets.doUnlock(qData, unlocked); } - /** */ public static void startGame() { - if (!checkActiveQuest("Start a duel.") || null == event) { - return; + if (canStartGame()) { + finishStartingGame(); } - final QuestController qData = FModel.getQuest(); + } - Deck deck = null; - if (event instanceof QuestEventChallenge) { - // Predefined HumanDeck - deck = ((QuestEventChallenge) event).getHumanDeck(); - } - if (deck == null) { - // If no predefined Deck, use the Player's Deck - deck = getCurrentDeck(); - } - if (deck == null) { - String msg = "Please select a Quest Deck."; - SOptionPane.showErrorDialog(msg, "No Deck"); - System.out.println(msg); - return; - } - - if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) { - String errorMessage = GameType.Quest.getDecksFormat().getDeckConformanceProblem(deck); - if (null != errorMessage) { - SOptionPane.showErrorDialog("Your deck " + errorMessage + " Please edit or choose a different deck.", "Invalid Deck"); - return; - } - } + public static void finishStartingGame() { + final QuestController qData = FModel.getQuest(); FThreads.invokeInBackgroundThread(new Runnable() { @Override @@ -569,7 +547,7 @@ public class QuestUtil { forceAnte = qc.isForceAnte(); } - RegisteredPlayer humanStart = new RegisteredPlayer(deck); + RegisteredPlayer humanStart = new RegisteredPlayer(getDeckForNewGame()); RegisteredPlayer aiStart = new RegisteredPlayer(event.getEventDeck()); if (lifeHuman != null) { @@ -606,14 +584,27 @@ public class QuestUtil { rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN)); rules.canCloneUseTargetsImage = FModel.getPreferences().getPrefBoolean(FPref.UI_CLONE_MODE_SOURCE); final Match mc = new Match(rules, starter); - FThreads.invokeInEdtLater(new Runnable(){ + FThreads.invokeInEdtNowOrLater(new Runnable(){ @Override public void run() { GuiBase.getInterface().startGame(mc); } }); } - + + private static Deck getDeckForNewGame() { + Deck deck = null; + if (event instanceof QuestEventChallenge) { + // Predefined HumanDeck + deck = ((QuestEventChallenge) event).getHumanDeck(); + } + if (deck == null) { + // If no predefined Deck, use the Player's Deck + deck = getCurrentDeck(); + } + return deck; + } + /** * Checks to see if a game can be started and displays relevant dialogues. * @return @@ -622,25 +613,15 @@ public class QuestUtil { if (!checkActiveQuest("Start a duel.") || null == event) { return false; } - - Deck deck = null; - if (event instanceof QuestEventChallenge) { - // Predefined HumanDeck - deck = ((QuestEventChallenge) event).getHumanDeck(); - } - - if (deck == null) { - // If no predefined Deck, use the Player's Deck - deck = getCurrentDeck(); - } - + + Deck deck = getDeckForNewGame(); if (deck == null) { String msg = "Please select a Quest Deck."; SOptionPane.showErrorDialog(msg, "No Deck"); System.out.println(msg); return false; } - + if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) { String errorMessage = GameType.Quest.getDecksFormat().getDeckConformanceProblem(deck); if (null != errorMessage) {