- Fixed a crash in mobile Forge when trying to display the deck conformance error message outside of the Edt thread.

This commit is contained in:
Agetian
2017-08-02 07:31:52 +00:00
parent 97a8029f74
commit a0b8c758b4
2 changed files with 40 additions and 16 deletions

View File

@@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.FThreads; import forge.FThreads;
import forge.Forge; import forge.Forge;
import forge.GuiBase; import forge.GuiBase;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.LaunchScreen; import forge.screens.LaunchScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
@@ -104,14 +105,6 @@ public class LoadDraftScreen extends LaunchScreen {
return; return;
} }
if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
String errorMessage = GameType.Draft.getDeckFormat().getDeckConformanceProblem(humanDeck.getDeck());
if (errorMessage != null) {
FOptionPane.showErrorDialog("Your deck " + errorMessage + "\nPlease edit or choose a different deck.", "Invalid Deck");
return;
}
}
// TODO: if booster draft tournaments are supported in the future, add the possibility to choose them here // TODO: if booster draft tournaments are supported in the future, add the possibility to choose them here
final boolean gauntlet = cbMode.getSelectedItem().equals("Gauntlet"); final boolean gauntlet = cbMode.getSelectedItem().equals("Gauntlet");
@@ -125,6 +118,10 @@ public class LoadDraftScreen extends LaunchScreen {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(new Runnable() {
@Override @Override
public void run() { public void run() {
if (!checkDeckLegality(humanDeck)) {
return;
}
LoadingOverlay.show("Loading new game...", new Runnable() { LoadingOverlay.show("Loading new game...", new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -150,6 +147,10 @@ public class LoadDraftScreen extends LaunchScreen {
LoadingOverlay.show("Loading new game...", new Runnable() { LoadingOverlay.show("Loading new game...", new Runnable() {
@Override @Override
public void run() { public void run() {
if (!checkDeckLegality(humanDeck)) {
return;
}
final List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); final List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
final RegisteredPlayer human = new RegisteredPlayer(humanDeck.getDeck()).setPlayer(GamePlayerUtil.getGuiPlayer()); final RegisteredPlayer human = new RegisteredPlayer(humanDeck.getDeck()).setPlayer(GamePlayerUtil.getGuiPlayer());
starter.add(human); starter.add(human);
@@ -169,4 +170,15 @@ public class LoadDraftScreen extends LaunchScreen {
} }
}); });
} }
private boolean checkDeckLegality(DeckProxy humanDeck) {
if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
String errorMessage = GameType.Draft.getDeckFormat().getDeckConformanceProblem(humanDeck.getDeck());
if (errorMessage != null) {
FOptionPane.showErrorDialog("Your deck " + errorMessage + "\nPlease edit or choose a different deck.", "Invalid Deck");
return false;
}
}
return true;
}
} }

View File

@@ -21,6 +21,7 @@ import forge.itemmanager.filters.ItemFilter;
import forge.match.HostedMatch; import forge.match.HostedMatch;
import forge.model.FModel; import forge.model.FModel;
import forge.player.GamePlayerUtil; import forge.player.GamePlayerUtil;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.LaunchScreen; import forge.screens.LaunchScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
@@ -103,20 +104,16 @@ public class LoadSealedScreen extends LaunchScreen {
return; return;
} }
if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
String errorMessage = GameType.Sealed.getDeckFormat().getDeckConformanceProblem(humanDeck.getDeck());
if (errorMessage != null) {
FOptionPane.showErrorDialog("Your deck " + errorMessage + "\nPlease edit or choose a different deck.", "Invalid Deck");
return;
}
}
final boolean gauntlet = cbMode.getSelectedItem().equals("Gauntlet"); final boolean gauntlet = cbMode.getSelectedItem().equals("Gauntlet");
if (gauntlet) { if (gauntlet) {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(new Runnable() {
@Override @Override
public void run() { public void run() {
if (!checkDeckLegality(humanDeck)) {
return;
}
LoadingOverlay.show("Loading new game...", new Runnable() { LoadingOverlay.show("Loading new game...", new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -140,6 +137,10 @@ public class LoadSealedScreen extends LaunchScreen {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(new Runnable() {
@Override @Override
public void run() { public void run() {
if (!checkDeckLegality(humanDeck)) {
return;
}
LoadingOverlay.show("Loading new game...", new Runnable() { LoadingOverlay.show("Loading new game...", new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -162,4 +163,15 @@ public class LoadSealedScreen extends LaunchScreen {
} }
}); });
} }
private boolean checkDeckLegality(DeckProxy humanDeck) {
if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
String errorMessage = GameType.Sealed.getDeckFormat().getDeckConformanceProblem(humanDeck.getDeck());
if (errorMessage != null) {
FOptionPane.showErrorDialog("Your deck " + errorMessage + "\nPlease edit or choose a different deck.", "Invalid Deck");
return false;
}
}
return true;
}
} }