mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Support starting quest duels
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user