Support starting quest duels

This commit is contained in:
drdev
2014-07-12 04:44:28 +00:00
parent 0ac7971d7d
commit a3fea9df01
8 changed files with 110 additions and 100 deletions

1
.gitattributes vendored
View File

@@ -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

View File

@@ -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<GameType> appliedVariants = new HashSet<GameType>();
}
private void startMatch() {
protected void startMatch() {
if (creatingMatch) { return; }
creatingMatch = true; //ensure user doesn't create multiple matches by tapping multiple times

View File

@@ -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() {
}
}

View File

@@ -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<String> cbxPet = add(new FComboBox<String>());
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<QuestEventDuel> duels = FModel.getQuest().getDuelsManager().generateDuels();

View File

@@ -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
}
}

View File

@@ -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();
}

View File

@@ -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() {
}
}

View File

@@ -511,37 +511,15 @@ public class QuestUtil {
QuestUtilUnlockSets.doUnlock(qData, unlocked);
}
/** */
public static void startGame() {
if (!checkActiveQuest("Start a duel.") || null == event) {
return;
if (canStartGame()) {
finishStartingGame();
}
}
public static void 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;
}
}
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
@@ -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,7 +584,7 @@ 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);
@@ -614,6 +592,19 @@ public class QuestUtil {
});
}
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
@@ -623,17 +614,7 @@ public class QuestUtil {
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");