Merge pull request #1094 from kevlahnota/master

use single assetmanager
This commit is contained in:
Anthony Calosa
2022-07-10 17:00:47 +08:00
committed by GitHub
24 changed files with 876 additions and 1434 deletions

View File

@@ -8,6 +8,7 @@ import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Cursor; import com.badlogic.gdx.graphics.Cursor;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.TextureData; import com.badlogic.gdx.graphics.TextureData;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.SpriteBatch;
@@ -78,6 +79,7 @@ public class Forge implements ApplicationListener {
protected static TransitionScreen transitionScreen; protected static TransitionScreen transitionScreen;
public static KeyInputAdapter keyInputAdapter; public static KeyInputAdapter keyInputAdapter;
private static boolean exited; private static boolean exited;
private boolean needsUpdate = false;
public static boolean safeToClose = true; public static boolean safeToClose = true;
public static boolean magnify = false; public static boolean magnify = false;
public static boolean magnifyToggle = true; public static boolean magnifyToggle = true;
@@ -784,6 +786,10 @@ public class Forge implements ApplicationListener {
try { try {
ImageCache.allowSingleLoad(); ImageCache.allowSingleLoad();
ForgeAnimation.advanceAll(); ForgeAnimation.advanceAll();
if (needsUpdate) {
if (getAssets().manager.update())
needsUpdate = false;
}
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // Clear the screen. Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // Clear the screen.
@@ -920,6 +926,8 @@ public class Forge implements ApplicationListener {
@Override @Override
public void resume() { public void resume() {
Texture.setAssetManager(getAssets().manager);
needsUpdate = true;
if (MatchController.getHostedMatch() != null) { if (MatchController.getHostedMatch() != null) {
MatchController.getHostedMatch().resume(); MatchController.getHostedMatch().resume();
} }

View File

@@ -120,11 +120,11 @@ public class Config {
public TextureAtlas getAtlas(String spriteAtlas) { public TextureAtlas getAtlas(String spriteAtlas) {
String fileName = getFile(spriteAtlas).path(); String fileName = getFile(spriteAtlas).path();
if (!Forge.getAssets().others.contains(fileName, TextureAtlas.class)) { if (!Forge.getAssets().manager.contains(fileName, TextureAtlas.class)) {
Forge.getAssets().others.load(fileName, TextureAtlas.class); Forge.getAssets().manager.load(fileName, TextureAtlas.class);
Forge.getAssets().others.finishLoadingAsset(fileName); Forge.getAssets().manager.finishLoadingAsset(fileName);
} }
return Forge.getAssets().others.get(fileName); return Forge.getAssets().manager.get(fileName);
} }
public SettingData getSettingData() public SettingData getSettingData()
{ {

View File

@@ -13,8 +13,7 @@ import forge.gui.GuiBase;
import java.util.HashMap; import java.util.HashMap;
public class Assets implements Disposable { public class Assets implements Disposable {
public AssetManager cards = new AssetManager(new AbsoluteFileHandleResolver()); public AssetManager manager = new AssetManager(new AbsoluteFileHandleResolver());
public AssetManager others = new AssetManager(new AbsoluteFileHandleResolver());
public HashMap<Integer, FSkinFont> fonts = new HashMap<>(); public HashMap<Integer, FSkinFont> fonts = new HashMap<>();
public ObjectMap<Integer, BitmapFont> counterFonts = new ObjectMap<>(); public ObjectMap<Integer, BitmapFont> counterFonts = new ObjectMap<>();
public ObjectMap<String, Texture> generatedCards = new ObjectMap<>(512); public ObjectMap<String, Texture> generatedCards = new ObjectMap<>(512);
@@ -34,8 +33,7 @@ public class Assets implements Disposable {
} }
@Override @Override
public void dispose() { public void dispose() {
cards.dispose(); manager.dispose();
others.dispose();
for (BitmapFont bitmapFont : counterFonts.values()) for (BitmapFont bitmapFont : counterFonts.values())
bitmapFont.dispose(); bitmapFont.dispose();
for (Texture texture : generatedCards.values()) for (Texture texture : generatedCards.values())

View File

@@ -88,7 +88,7 @@ public class FSkin {
* the skin name * the skin name
*/ */
public static void loadLight(String skinName, final SplashScreen splashScreen) { public static void loadLight(String skinName, final SplashScreen splashScreen) {
AssetManager manager = Forge.getAssets().others; AssetManager manager = Forge.getAssets().manager;
preferredName = skinName.toLowerCase().replace(' ', '_'); preferredName = skinName.toLowerCase().replace(' ', '_');
//reset hd buttons/icons //reset hd buttons/icons
@@ -236,7 +236,7 @@ public class FSkin {
parameter.magFilter = Texture.TextureFilter.Linear; parameter.magFilter = Texture.TextureFilter.Linear;
} }
AssetManager manager = Forge.getAssets().others; AssetManager manager = Forge.getAssets().manager;
// Grab and test various sprite files. // Grab and test various sprite files.
final FileHandle f1 = getDefaultSkinFile(SourceFile.ICONS.getFilename()); final FileHandle f1 = getDefaultSkinFile(SourceFile.ICONS.getFilename());

View File

@@ -131,9 +131,9 @@ public enum FSkinTexture implements FImage {
if (preferredFile.path().contains("fallback_skin")) { if (preferredFile.path().contains("fallback_skin")) {
texture = new Texture(preferredFile); texture = new Texture(preferredFile);
} else { } else {
Forge.getAssets().others.load(preferredFile.path(), Texture.class); Forge.getAssets().manager.load(preferredFile.path(), Texture.class);
Forge.getAssets().others.finishLoadingAsset(preferredFile.path()); Forge.getAssets().manager.finishLoadingAsset(preferredFile.path());
texture = Forge.getAssets().others.get(preferredFile.path(), Texture.class); texture = Forge.getAssets().manager.get(preferredFile.path(), Texture.class);
} }
} }
catch (final Exception e) { catch (final Exception e) {
@@ -155,9 +155,9 @@ public enum FSkinTexture implements FImage {
if (defaultFile.path().contains("fallback_skin")) { if (defaultFile.path().contains("fallback_skin")) {
texture = new Texture(defaultFile); texture = new Texture(defaultFile);
} else { } else {
Forge.getAssets().others.load(defaultFile.path(), Texture.class); Forge.getAssets().manager.load(defaultFile.path(), Texture.class);
Forge.getAssets().others.finishLoadingAsset(defaultFile.path()); Forge.getAssets().manager.finishLoadingAsset(defaultFile.path());
texture = Forge.getAssets().others.get(defaultFile.path(), Texture.class); texture = Forge.getAssets().manager.get(defaultFile.path(), Texture.class);
} }
} }
catch (final Exception e) { catch (final Exception e) {

View File

@@ -18,6 +18,7 @@
package forge.assets; package forge.assets;
import java.io.File; import java.io.File;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Queue; import java.util.Queue;
import java.util.Set; import java.util.Set;
@@ -78,6 +79,7 @@ public class ImageCache {
private static List<String> borderlessCardlistKey = FileUtil.readFile(ForgeConstants.BORDERLESS_CARD_LIST_FILE); private static List<String> borderlessCardlistKey = FileUtil.readFile(ForgeConstants.BORDERLESS_CARD_LIST_FILE);
static int maxCardCapacity = 400; //default card capacity static int maxCardCapacity = 400; //default card capacity
static EvictingQueue<String> q; static EvictingQueue<String> q;
static Set<String> cardsLoaded = new HashSet<>(800);
static Queue<String> syncQ; static Queue<String> syncQ;
static TextureParameter defaultParameter = new TextureParameter(); static TextureParameter defaultParameter = new TextureParameter();
static TextureParameter filtered = new TextureParameter(); static TextureParameter filtered = new TextureParameter();
@@ -124,7 +126,12 @@ public class ImageCache {
} }
public static void disposeTextures(){ public static void disposeTextures(){
CardRenderer.clearcardArtCache(); CardRenderer.clearcardArtCache();
Forge.getAssets().cards.clear(); //unload all cardsLoaded
for (String fileName : cardsLoaded) {
if (Forge.getAssets().manager.contains(fileName))
Forge.getAssets().manager.unload(fileName);
}
cardsLoaded.clear();
} }
public static Texture getImage(InventoryItem ii) { public static Texture getImage(InventoryItem ii) {
@@ -200,7 +207,7 @@ public class ImageCache {
public static Texture getImage(String imageKey, boolean useDefaultIfNotFound) { public static Texture getImage(String imageKey, boolean useDefaultIfNotFound) {
return getImage(imageKey, useDefaultIfNotFound, false); return getImage(imageKey, useDefaultIfNotFound, false);
} }
public static Texture getImage(String imageKey, boolean useDefaultIfNotFound, boolean useOtherCache) { public static Texture getImage(String imageKey, boolean useDefaultIfNotFound, boolean others) {
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES)) if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES))
return null; return null;
@@ -225,7 +232,7 @@ public class ImageCache {
File imageFile = ImageKeys.getImageFile(imageKey); File imageFile = ImageKeys.getImageFile(imageKey);
if (useDefaultIfNotFound) { if (useDefaultIfNotFound) {
// Load from file and add to cache if not found in cache initially. // Load from file and add to cache if not found in cache initially.
image = getAsset(imageKey, imageFile, useOtherCache); image = getAsset(imageKey, imageFile, others);
if (image != null) { return image; } if (image != null) { return image; }
@@ -241,7 +248,7 @@ public class ImageCache {
} }
try { try {
image = loadAsset(imageKey, imageFile, useOtherCache); image = loadAsset(imageKey, imageFile, others);
} catch (final Exception ex) { } catch (final Exception ex) {
image = null; image = null;
} }
@@ -260,37 +267,34 @@ public class ImageCache {
} }
return image; return image;
} }
static Texture getAsset(String imageKey, File file, boolean otherCache) { static Texture getAsset(String imageKey, File file, boolean others) {
if (file == null) if (file == null)
return null; return null;
if (!otherCache && Forge.enableUIMask.equals("Full") && isBorderless(imageKey)) if (!others && Forge.enableUIMask.equals("Full") && isBorderless(imageKey))
return Forge.getAssets().generatedCards.get(imageKey); return Forge.getAssets().generatedCards.get(imageKey);
if (otherCache) return Forge.getAssets().manager.get(file.getPath(), Texture.class, false);
return Forge.getAssets().others.get(file.getPath(), Texture.class, false);
return Forge.getAssets().cards.get(file.getPath(), Texture.class, false);
} }
static Texture loadAsset(String imageKey, File file, boolean otherCache) { static Texture loadAsset(String imageKey, File file, boolean others) {
if (file == null) if (file == null)
return null; return null;
if (!others) {
syncQ.add(file.getPath()); syncQ.add(file.getPath());
if (!otherCache && Forge.getAssets().cards.getLoadedAssets() > maxCardCapacity) { cardsLoaded.add(file.getPath());
unloadCardTextures(Forge.getAssets().cards); }
if (!others && cardsLoaded.size() > maxCardCapacity) {
unloadCardTextures(Forge.getAssets().manager);
return null; return null;
} }
String fileName = file.getPath(); String fileName = file.getPath();
//load to assetmanager //load to assetmanager
if (otherCache) { Forge.getAssets().manager.load(fileName, Texture.class, Forge.isTextureFilteringEnabled() ? filtered : defaultParameter);
Forge.getAssets().others.load(fileName, Texture.class, Forge.isTextureFilteringEnabled() ? filtered : defaultParameter); Forge.getAssets().manager.finishLoadingAsset(fileName);
Forge.getAssets().others.finishLoadingAsset(fileName);
} else {
Forge.getAssets().cards.load(fileName, Texture.class, Forge.isTextureFilteringEnabled() ? filtered : defaultParameter);
Forge.getAssets().cards.finishLoadingAsset(fileName);
}
//return loaded assets //return loaded assets
if (otherCache) { if (others) {
return Forge.getAssets().others.get(fileName, Texture.class, false); return Forge.getAssets().manager.get(fileName, Texture.class, false);
} else { } else {
Texture t = Forge.getAssets().cards.get(fileName, Texture.class, false); Texture t = Forge.getAssets().manager.get(fileName, Texture.class, false);
//if full bordermasking is enabled, update the border color //if full bordermasking is enabled, update the border color
if (Forge.enableUIMask.equals("Full")) { if (Forge.enableUIMask.equals("Full")) {
boolean borderless = isBorderless(imageKey); boolean borderless = isBorderless(imageKey);
@@ -306,16 +310,18 @@ public class ImageCache {
static void unloadCardTextures(AssetManager manager) { static void unloadCardTextures(AssetManager manager) {
//get latest images from syncQ //get latest images from syncQ
Set<String> newQ = Sets.newHashSet(syncQ); Set<String> newQ = Sets.newHashSet(syncQ);
//get loaded images from assetmanager //get all images not in newQ (cardLists to unload)
Set<String> old = Sets.newHashSet(manager.getAssetNames()); Set<String> toUnload = Sets.difference(cardsLoaded, newQ);
//get all images not in newQ (old images to unload)
Set<String> toUnload = Sets.difference(old, newQ);
//unload from assetmanager to save RAM //unload from assetmanager to save RAM
for (String asset : toUnload) { for (String asset : toUnload) {
if(manager.contains(asset))
manager.unload(asset); manager.unload(asset);
} }
//clear cachedArt since this is dependant to the loaded texture //clear cachedArt since this is dependant to the loaded texture
CardRenderer.clearcardArtCache(); CardRenderer.clearcardArtCache();
cardsLoaded.clear();
//update with recent
cardsLoaded.addAll(newQ);
} }
public static void preloadCache(Iterable<String> keys) { public static void preloadCache(Iterable<String> keys) {
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES)) if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES))

View File

@@ -131,32 +131,17 @@ public class FDeckChooser extends FScreen {
lstDecks = new DeckManager(gameType0); lstDecks = new DeckManager(gameType0);
isAi = isAi0; isAi = isAi0;
lstDecks.setItemActivateHandler(new FEventHandler() { lstDecks.setItemActivateHandler(event -> {
@Override
public void handleEvent(FEvent e) {
if (lstDecks.getGameType() == GameType.DeckManager) { if (lstDecks.getGameType() == GameType.DeckManager) {
//for Deck Editor, edit deck instead of accepting //for Deck Editor, edit deck instead of accepting
editSelectedDeck(); editSelectedDeck();
return; return;
} }
accept(); accept();
}
}); });
btnNewDeck.setCommand(new FEventHandler() { btnNewDeck.setCommand(event -> createNewDeck());
@Override btnEditDeck.setCommand(event -> editSelectedDeck());
public void handleEvent(FEvent e) { btnViewDeck.setCommand(event -> {
createNewDeck();
}
});
btnEditDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
editSelectedDeck();
}
});
btnViewDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (selectedDeckType != DeckType.STANDARD_COLOR_DECK && selectedDeckType != DeckType.STANDARD_CARDGEN_DECK if (selectedDeckType != DeckType.STANDARD_COLOR_DECK && selectedDeckType != DeckType.STANDARD_CARDGEN_DECK
&& selectedDeckType != DeckType.PIONEER_CARDGEN_DECK && selectedDeckType != DeckType.HISTORIC_CARDGEN_DECK && selectedDeckType != DeckType.PIONEER_CARDGEN_DECK && selectedDeckType != DeckType.HISTORIC_CARDGEN_DECK
&& selectedDeckType != DeckType.MODERN_CARDGEN_DECK && selectedDeckType != DeckType.LEGACY_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_CARDGEN_DECK && selectedDeckType != DeckType.LEGACY_CARDGEN_DECK
@@ -165,11 +150,8 @@ public class FDeckChooser extends FScreen {
&& selectedDeckType != DeckType.RANDOM_COMMANDER_DECK && selectedDeckType != DeckType.RANDOM_CARDGEN_COMMANDER_DECK) { && selectedDeckType != DeckType.RANDOM_COMMANDER_DECK && selectedDeckType != DeckType.RANDOM_CARDGEN_COMMANDER_DECK) {
FDeckViewer.show(getDeck(), false, DeckType.DRAFT_DECK.equals(selectedDeckType)); FDeckViewer.show(getDeck(), false, DeckType.DRAFT_DECK.equals(selectedDeckType));
} }
}
}); });
btnRandom.setCommand(new FEventHandler() { btnRandom.setCommand(event -> {
@Override
public void handleEvent(FEvent e) {
if (lstDecks.getGameType() == GameType.DeckManager) { if (lstDecks.getGameType() == GameType.DeckManager) {
//for Deck Editor, test deck instead of randomly selecting deck //for Deck Editor, test deck instead of randomly selecting deck
testSelectedDeck(); testSelectedDeck();
@@ -199,7 +181,9 @@ public class FDeckChooser extends FScreen {
} }
else { else {
int size = 0; int size = 0;
try {
if (isAi && !isGeneratedDeck(selectedDeckType) && Forge.autoAIDeckSelection) { if (isAi && !isGeneratedDeck(selectedDeckType) && Forge.autoAIDeckSelection) {
btnRandom.setEnabled(false);
AIDecks = lstDecks.getPool().toFlatList().parallelStream().filter(deckProxy -> deckProxy.getAI().inMainDeck == 0).collect(Collectors.toList()); AIDecks = lstDecks.getPool().toFlatList().parallelStream().filter(deckProxy -> deckProxy.getAI().inMainDeck == 0).collect(Collectors.toList());
size = AIDecks.size(); size = AIDecks.size();
} }
@@ -207,9 +191,12 @@ public class FDeckChooser extends FScreen {
lstDecks.setSelectedItem(AIDecks.get(MyRandom.getRandom().nextInt(size))); lstDecks.setSelectedItem(AIDecks.get(MyRandom.getRandom().nextInt(size)));
else else
DeckgenUtil.randomSelect(lstDecks); DeckgenUtil.randomSelect(lstDecks);
} catch (Exception ee) {
DeckgenUtil.randomSelect(lstDecks);
} }
}
btnRandom.setEnabled(true);
accept(); accept();
}
}); });
switch (lstDecks.getGameType()) { switch (lstDecks.getGameType()) {
case Constructed: case Constructed:
@@ -371,9 +358,7 @@ public class FDeckChooser extends FScreen {
} else { } else {
editor = new FDeckEditor(getEditorType(), "", false); editor = new FDeckEditor(getEditorType(), "", false);
} }
editor.setSaveHandler(new FEventHandler() { editor.setSaveHandler(event -> {
@Override
public void handleEvent(FEvent e) {
//ensure user returns to proper deck type and that list is refreshed if new deck is saved //ensure user returns to proper deck type and that list is refreshed if new deck is saved
if (!needRefreshOnActivate) { if (!needRefreshOnActivate) {
needRefreshOnActivate = true; needRefreshOnActivate = true;
@@ -397,7 +382,6 @@ public class FDeckChooser extends FScreen {
setSelectedDeckType(DeckType.CUSTOM_DECK); setSelectedDeckType(DeckType.CUSTOM_DECK);
} }
} }
}
}); });
Forge.openScreen(editor); Forge.openScreen(editor);
} }
@@ -624,25 +608,19 @@ public class FDeckChooser extends FScreen {
cmbDeckTypes.setAlignment(Align.center); cmbDeckTypes.setAlignment(Align.center);
restoreSavedState(); restoreSavedState();
cmbDeckTypes.setChangedHandler(new FEventHandler() { cmbDeckTypes.setChangedHandler(event -> {
@Override
public void handleEvent(final FEvent e) {
final DeckType deckType = cmbDeckTypes.getSelectedItem(); final DeckType deckType = cmbDeckTypes.getSelectedItem();
if (!refreshingDeckType&&(deckType == DeckType.NET_DECK || deckType == DeckType.NET_COMMANDER_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_DECK || deckType == DeckType.NET_COMMANDER_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = deckType == DeckType.NET_COMMANDER_DECK ? GameType.Commander : GameType.Constructed; gameType = deckType == DeckType.NET_COMMANDER_DECK ? GameType.Commander : GameType.Constructed;
} }
final NetDeckCategory category = NetDeckCategory.selectAndLoad(gameType); final NetDeckCategory category = NetDeckCategory.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && netDeckCategory != null) { if (selectedDeckType == deckType && netDeckCategory != null) {
@@ -652,26 +630,21 @@ public class FDeckChooser extends FScreen {
} }
netDeckCategory = category; netDeckCategory = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_STANDARD_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_STANDARD_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchiveStandard category = NetDeckArchiveStandard.selectAndLoad(gameType); final NetDeckArchiveStandard category = NetDeckArchiveStandard.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchiveStandard != null) { if (selectedDeckType == deckType && NetDeckArchiveStandard != null) {
@@ -681,26 +654,21 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchiveStandard = category; NetDeckArchiveStandard = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_PIONEER_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_PIONEER_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchivePioneer category = NetDeckArchivePioneer.selectAndLoad(gameType); final NetDeckArchivePioneer category = NetDeckArchivePioneer.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchivePioneer != null) { if (selectedDeckType == deckType && NetDeckArchivePioneer != null) {
@@ -710,26 +678,21 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchivePioneer = category; NetDeckArchivePioneer = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_MODERN_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_MODERN_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchiveModern category = NetDeckArchiveModern.selectAndLoad(gameType); final NetDeckArchiveModern category = NetDeckArchiveModern.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchiveModern != null) { if (selectedDeckType == deckType && NetDeckArchiveModern != null) {
@@ -739,26 +702,21 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchiveModern = category; NetDeckArchiveModern = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_PAUPER_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_PAUPER_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchivePauper category = NetDeckArchivePauper.selectAndLoad(gameType); final NetDeckArchivePauper category = NetDeckArchivePauper.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchivePauper != null) { if (selectedDeckType == deckType && NetDeckArchivePauper != null) {
@@ -768,26 +726,21 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchivePauper = category; NetDeckArchivePauper = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_LEGACY_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_LEGACY_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchiveLegacy category = NetDeckArchiveLegacy.selectAndLoad(gameType); final NetDeckArchiveLegacy category = NetDeckArchiveLegacy.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchiveLegacy != null) { if (selectedDeckType == deckType && NetDeckArchiveLegacy != null) {
@@ -797,26 +750,21 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchiveLegacy = category; NetDeckArchiveLegacy = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_VINTAGE_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_VINTAGE_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchiveVintage category = NetDeckArchiveVintage.selectAndLoad(gameType); final NetDeckArchiveVintage category = NetDeckArchiveVintage.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchiveVintage != null) { if (selectedDeckType == deckType && NetDeckArchiveVintage != null) {
@@ -826,26 +774,21 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchiveVintage = category; NetDeckArchiveVintage = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_BLOCK_DECK)) { if (!refreshingDeckType&&(deckType == DeckType.NET_ARCHIVE_BLOCK_DECK)) {
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
GameType gameType = lstDecks.getGameType(); GameType gameType = lstDecks.getGameType();
if (gameType == GameType.DeckManager) { if (gameType == GameType.DeckManager) {
gameType = GameType.Constructed; gameType = GameType.Constructed;
} }
final NetDeckArchiveBlock category = NetDeckArchiveBlock.selectAndLoad(gameType); final NetDeckArchiveBlock category = NetDeckArchiveBlock.selectAndLoad(gameType);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (category == null) { if (category == null) {
cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels cmbDeckTypes.setSelectedItem(selectedDeckType); //restore old selection if user cancels
if (selectedDeckType == deckType && NetDeckArchiveBlock != null) { if (selectedDeckType == deckType && NetDeckArchiveBlock != null) {
@@ -855,18 +798,15 @@ public class FDeckChooser extends FScreen {
} }
NetDeckArchiveBlock = category; NetDeckArchiveBlock = category;
refreshDecksList(deckType, true, e); refreshDecksList(deckType, true, event);
}
}); });
}
}); });
return; return;
} }
refreshDecksList(deckType, false, e); refreshDecksList(deckType, false, event);
}
}); });
add(cmbDeckTypes); add(cmbDeckTypes);
add(lstDecks); add(lstDecks);
@@ -888,11 +828,11 @@ public class FDeckChooser extends FScreen {
saveState(); saveState();
} }
private void refreshDecksList(DeckType deckType, boolean forceRefresh, FEvent e) { private void refreshDecksList(DeckType deckType, boolean forceRefresh, FEvent event) {
if (selectedDeckType == deckType && !forceRefresh) { return; } if (selectedDeckType == deckType && !forceRefresh) { return; }
selectedDeckType = deckType; selectedDeckType = deckType;
if (e == null) { if (event == null) {
refreshingDeckType = true; refreshingDeckType = true;
cmbDeckTypes.setSelectedItem(deckType); cmbDeckTypes.setSelectedItem(deckType);
refreshingDeckType = false; refreshingDeckType = false;
@@ -1186,7 +1126,7 @@ public class FDeckChooser extends FScreen {
btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth()); btnRandom.setLeft(getWidth() - PADDING - btnRandom.getWidth());
if (e != null) { //set default list selection if from combo box change event if (event != null) { //set default list selection if from combo box change event
if (deckType == DeckType.COLOR_DECK) { if (deckType == DeckType.COLOR_DECK) {
// default selection = basic two color deck // default selection = basic two color deck
lstDecks.setSelectedIndices(new Integer[]{0, 1}); lstDecks.setSelectedIndices(new Integer[]{0, 1});
@@ -1510,9 +1450,8 @@ public class FDeckChooser extends FScreen {
return; return;
} }
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks //needed for loading net decks
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
final NetDeckCategory netCat; final NetDeckCategory netCat;
if (allowedDeckTypes.contains(DeckType.NET_DECK)) { if (allowedDeckTypes.contains(DeckType.NET_DECK)) {
netCat = NetDeckCategory.selectAndLoad(GameType.Constructed); netCat = NetDeckCategory.selectAndLoad(GameType.Constructed);
@@ -1520,12 +1459,7 @@ public class FDeckChooser extends FScreen {
netCat = null; netCat = null;
} }
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() {
@Override
public void run() {
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, netCat); GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, netCat);
FModel.setGauntletData(gauntlet); FModel.setGauntletData(gauntlet);
@@ -1535,11 +1469,7 @@ public class FDeckChooser extends FScreen {
players.add(new RegisteredPlayer(gauntlet.getDecks().get(gauntlet.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer())); players.add(new RegisteredPlayer(gauntlet.getDecks().get(gauntlet.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer()));
gauntlet.startRound(players, humanPlayer); gauntlet.startRound(players, humanPlayer);
} }));
});
}
});
}
}); });
} }
}); });
@@ -1554,9 +1484,7 @@ public class FDeckChooser extends FScreen {
public void run(final Deck aiDeck) { public void run(final Deck aiDeck) {
if (aiDeck == null) { return; } if (aiDeck == null) { return; }
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override
public void run() {
Set<GameType> appliedVariants = new HashSet<>(); Set<GameType> appliedVariants = new HashSet<>();
appliedVariants.add(variant); appliedVariants.add(variant);
@@ -1573,7 +1501,6 @@ public class FDeckChooser extends FScreen {
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
hostedMatch.startMatch(GameType.Constructed, appliedVariants, players, guiMap); hostedMatch.startMatch(GameType.Constructed, appliedVariants, players, guiMap);
}
}); });
} }
}); });

View File

@@ -22,39 +22,25 @@ public class LoadingOverlay extends FOverlay {
private static final FSkinFont FONT = FSkinFont.get(22); private static final FSkinFont FONT = FSkinFont.get(22);
private static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_ACTIVE).alphaColor(0.75f); private static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_ACTIVE).alphaColor(0.75f);
private static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT); private static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT);
public static void show(String caption0, final Runnable runnable) { public static void show(String caption0, final Runnable runnable) {
final LoadingOverlay loader = new LoadingOverlay(caption0); show(caption0, false, runnable);
}
public static void show(String caption0, boolean textMode, final Runnable runnable) {
final LoadingOverlay loader = new LoadingOverlay(caption0, textMode);
loader.show(); //show loading overlay then delay running remaining logic so UI can respond loader.show(); //show loading overlay then delay running remaining logic so UI can respond
ThreadUtil.invokeInGameThread(new Runnable() { ThreadUtil.invokeInGameThread(() -> FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
runnable.run(); runnable.run();
loader.hide(); loader.hide();
loader.finishedloading(); //setLoadingaMatch to false loader.finishedloading(); //setLoadingaMatch to false
} }));
});
}
});
} }
public static void runBackgroundTask(String caption0, final Runnable task) { public static void runBackgroundTask(String caption0, final Runnable task) {
final LoadingOverlay loader = new LoadingOverlay(caption0); final LoadingOverlay loader = new LoadingOverlay(caption0, true);
loader.show(); loader.show();
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
task.run(); task.run();
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> loader.hide());
@Override
public void run() {
loader.hide();
}
});
}
}); });
} }
@@ -63,6 +49,7 @@ public class LoadingOverlay extends FOverlay {
public LoadingOverlay(String caption0) { public LoadingOverlay(String caption0) {
caption = caption0; caption = caption0;
textMode = false;
} }
public LoadingOverlay(String caption0, boolean textOnly) { public LoadingOverlay(String caption0, boolean textOnly) {

View File

@@ -44,8 +44,6 @@ import forge.screens.LoadingOverlay;
import forge.screens.settings.SettingsScreen; import forge.screens.settings.SettingsScreen;
import forge.toolbox.FCheckBox; import forge.toolbox.FCheckBox;
import forge.toolbox.FComboBox; import forge.toolbox.FComboBox;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FList; import forge.toolbox.FList;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
@@ -111,9 +109,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
cbPlayerCount.addItem(i); cbPlayerCount.addItem(i);
} }
cbPlayerCount.setSelectedItem(2); cbPlayerCount.setSelectedItem(2);
cbPlayerCount.setChangedHandler(new FEventHandler() { cbPlayerCount.setChangedHandler(event -> {
@Override
public void handleEvent(FEvent e) {
int numPlayers = getNumPlayers(); int numPlayers = getNumPlayers();
while(lobby.getNumberOfSlots() < getNumPlayers()){ while(lobby.getNumberOfSlots() < getNumPlayers()){
lobby.addSlot(); lobby.addSlot();
@@ -127,7 +123,6 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
} }
} }
playersScroll.revalidate(); playersScroll.revalidate();
}
}); });
initLobby(lobby0); initLobby(lobby0);
@@ -139,12 +134,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
cbGamesInMatch.addItem("3"); cbGamesInMatch.addItem("3");
cbGamesInMatch.addItem("5"); cbGamesInMatch.addItem("5");
cbGamesInMatch.setSelectedItem(FModel.getPreferences().getPref((FPref.UI_MATCHES_PER_GAME))); cbGamesInMatch.setSelectedItem(FModel.getPreferences().getPref((FPref.UI_MATCHES_PER_GAME)));
cbGamesInMatch.setChangedHandler(new FEventHandler() { cbGamesInMatch.setChangedHandler(event -> FModel.getPreferences().setPref(FPref.UI_MATCHES_PER_GAME, cbGamesInMatch.getSelectedItem()));
@Override
public void handleEvent(FEvent e) {
FModel.getPreferences().setPref(FPref.UI_MATCHES_PER_GAME, cbGamesInMatch.getSelectedItem());
}
});
add(lblVariants); add(lblVariants);
add(cbVariants); add(cbVariants);
@@ -161,9 +151,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
cbVariants.addItem(GameType.Archenemy); cbVariants.addItem(GameType.Archenemy);
cbVariants.addItem(GameType.ArchenemyRumble); cbVariants.addItem(GameType.ArchenemyRumble);
cbVariants.addItem(Forge.getLocalizer().getMessage("lblMore")); cbVariants.addItem(Forge.getLocalizer().getMessage("lblMore"));
cbVariants.setChangedHandler(new FEventHandler() { cbVariants.setChangedHandler(event -> {
@Override
public void handleEvent(FEvent e) {
if (cbVariants.getSelectedIndex() <= 0) { if (cbVariants.getSelectedIndex() <= 0) {
lobby.clearVariants(); lobby.clearVariants();
updateLayoutForVariants(); updateLayoutForVariants();
@@ -186,7 +174,6 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
FModel.getPreferences().setGameType(FPref.UI_APPLIED_VARIANTS, gameTypes); FModel.getPreferences().setGameType(FPref.UI_APPLIED_VARIANTS, gameTypes);
FModel.getPreferences().save(); FModel.getPreferences().save();
} }
}
}); });
update(false); update(false);
@@ -195,9 +182,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
updatePlayersFromPrefs(); updatePlayersFromPrefs();
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
playerPanels.get(0).initialize(FPref.CONSTRUCTED_P1_DECK_STATE, FPref.COMMANDER_P1_DECK_STATE, FPref.OATHBREAKER_P1_DECK_STATE, FPref.TINY_LEADER_P1_DECK_STATE, FPref.BRAWL_P1_DECK_STATE, DeckType.PRECONSTRUCTED_DECK); playerPanels.get(0).initialize(FPref.CONSTRUCTED_P1_DECK_STATE, FPref.COMMANDER_P1_DECK_STATE, FPref.OATHBREAKER_P1_DECK_STATE, FPref.TINY_LEADER_P1_DECK_STATE, FPref.BRAWL_P1_DECK_STATE, DeckType.PRECONSTRUCTED_DECK);
playerPanels.get(1).initialize(FPref.CONSTRUCTED_P2_DECK_STATE, FPref.COMMANDER_P2_DECK_STATE, FPref.OATHBREAKER_P2_DECK_STATE, FPref.TINY_LEADER_P2_DECK_STATE, FPref.BRAWL_P2_DECK_STATE, DeckType.COLOR_DECK); playerPanels.get(1).initialize(FPref.CONSTRUCTED_P2_DECK_STATE, FPref.COMMANDER_P2_DECK_STATE, FPref.OATHBREAKER_P2_DECK_STATE, FPref.TINY_LEADER_P2_DECK_STATE, FPref.BRAWL_P2_DECK_STATE, DeckType.COLOR_DECK);
try { try {
@@ -213,9 +198,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
playerPanels.get(6).initialize(FPref.CONSTRUCTED_P7_DECK_STATE, DeckType.COLOR_DECK); playerPanels.get(6).initialize(FPref.CONSTRUCTED_P7_DECK_STATE, DeckType.COLOR_DECK);
playerPanels.get(7).initialize(FPref.CONSTRUCTED_P8_DECK_STATE, DeckType.COLOR_DECK);*/ //TODO: Improve performance of loading this screen by using background thread playerPanels.get(7).initialize(FPref.CONSTRUCTED_P8_DECK_STATE, DeckType.COLOR_DECK);*/ //TODO: Improve performance of loading this screen by using background thread
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
btnStart.setEnabled(lobby.hasControl()); btnStart.setEnabled(lobby.hasControl());
Set<GameType> gameTypes = FModel.getPreferences().getGameType(FPref.UI_APPLIED_VARIANTS); Set<GameType> gameTypes = FModel.getPreferences().getGameType(FPref.UI_APPLIED_VARIANTS);
@@ -226,9 +209,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
updateVariantSelection(); updateVariantSelection();
updateLayoutForVariants(); updateLayoutForVariants();
} }
}
}); });
}
}); });
lblPlayers.setEnabled(true); lblPlayers.setEnabled(true);
@@ -351,20 +332,13 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
updateName(0, GamePlayerUtil.getGuiPlayer().getName()); updateName(0, GamePlayerUtil.getGuiPlayer().getName());
} }
} }
FThreads.invokeInBackgroundThread(new Runnable() { //must call startGame in background thread in case there are alerts //must call startGame in background thread in case there are alerts
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
final Runnable startGame = lobby.startGame(); final Runnable startGame = lobby.startGame();
if (startGame != null) { if (startGame != null) {
//set this so we cant get any multi/rapid tap on start button //set this so we cant get any multi/rapid tap on start button
Forge.setLoadingaMatch(true); Forge.setLoadingaMatch(true);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, startGame));
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), startGame);
}
});
}
} }
}); });
} }

View File

@@ -4,7 +4,6 @@ import java.io.File;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
@@ -31,8 +30,6 @@ import forge.screens.home.LoadGameMenu;
import forge.screens.home.NewGameMenu.NewGameScreen; import forge.screens.home.NewGameMenu.NewGameScreen;
import forge.screens.settings.SettingsScreen; import forge.screens.settings.SettingsScreen;
import forge.toolbox.FButton; import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList; import forge.toolbox.FList;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.util.Callback; import forge.util.Callback;
@@ -53,26 +50,11 @@ public class LoadGauntletScreen extends LaunchScreen {
super(null, LoadGameMenu.getMenu()); super(null, LoadGameMenu.getMenu());
btnNewGauntlet.setFont(FSkinFont.get(16)); btnNewGauntlet.setFont(FSkinFont.get(16));
btnNewGauntlet.setCommand(new FEventHandler() { btnNewGauntlet.setCommand(event -> NewGameScreen.Gauntlet.open());
@Override
public void handleEvent(FEvent e) {
NewGameScreen.Gauntlet.open();
}
});
btnRenameGauntlet.setFont(btnNewGauntlet.getFont()); btnRenameGauntlet.setFont(btnNewGauntlet.getFont());
btnRenameGauntlet.setCommand(new FEventHandler() { btnRenameGauntlet.setCommand(event -> renameGauntlet(lstGauntlets.getSelectedGauntlet()));
@Override
public void handleEvent(FEvent e) {
renameGauntlet(lstGauntlets.getSelectedGauntlet());
}
});
btnDeleteGauntlet.setFont(btnNewGauntlet.getFont()); btnDeleteGauntlet.setFont(btnNewGauntlet.getFont());
btnDeleteGauntlet.setCommand(new FEventHandler() { btnDeleteGauntlet.setCommand(event -> deleteGauntlet(lstGauntlets.getSelectedGauntlet()));
@Override
public void handleEvent(FEvent e) {
deleteGauntlet(lstGauntlets.getSelectedGauntlet());
}
});
} }
public void onActivate() { public void onActivate() {
@@ -136,25 +118,20 @@ public class LoadGauntletScreen extends LaunchScreen {
return; return;
} }
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override final GauntletData gauntlet1 = FModel.getGauntletData();
public void run() {
final GauntletData gauntlet = FModel.getGauntletData();
List<RegisteredPlayer> players = new ArrayList<>(); List<RegisteredPlayer> players = new ArrayList<>();
RegisteredPlayer humanPlayer = new RegisteredPlayer(gauntlet.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer()); RegisteredPlayer humanPlayer = new RegisteredPlayer(gauntlet1.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer());
players.add(humanPlayer); players.add(humanPlayer);
players.add(new RegisteredPlayer(gauntlet.getDecks().get(gauntlet.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer())); players.add(new RegisteredPlayer(gauntlet1.getDecks().get(gauntlet1.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer()));
gauntlet.startRound(players, humanPlayer); gauntlet1.startRound(players, humanPlayer);
}
}); });
} }
private void renameGauntlet(final GauntletData gauntlet) { private void renameGauntlet(final GauntletData gauntlet) {
if (gauntlet == null) { return; } if (gauntlet == null) { return; }
ThreadUtil.invokeInGameThread(new Runnable() { ThreadUtil.invokeInGameThread(() -> {
@Override
public void run() {
String gauntletName; String gauntletName;
String oldGauntletName = gauntlet.getName(); String oldGauntletName = gauntlet.getName();
while (true) { while (true) {
@@ -183,24 +160,18 @@ public class LoadGauntletScreen extends LaunchScreen {
break; break;
} }
final String newGauntletName = gauntletName; final String newGauntletName = gauntletName;
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
gauntlet.rename(newGauntletName); gauntlet.rename(newGauntletName);
lstGauntlets.refresh(); lstGauntlets.refresh();
lstGauntlets.setSelectedGauntlet(gauntlet); lstGauntlets.setSelectedGauntlet(gauntlet);
}
}); });
}
}); });
} }
private void deleteGauntlet(final GauntletData gauntlet) { private void deleteGauntlet(final GauntletData gauntlet) {
if (gauntlet == null) { return; } if (gauntlet == null) { return; }
ThreadUtil.invokeInGameThread(new Runnable() { ThreadUtil.invokeInGameThread(() -> {
@Override
public void run() {
if (!SOptionPane.showConfirmDialog( if (!SOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblAreYouSuerDeleteGauntlet", gauntlet.getName()), Forge.getLocalizer().getMessage("lblAreYouSuerDeleteGauntlet", gauntlet.getName()),
Forge.getLocalizer().getMessage("lblDeleteGauntlet"), Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"))) { Forge.getLocalizer().getMessage("lblDeleteGauntlet"), Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"))) {
@@ -210,7 +181,6 @@ public class LoadGauntletScreen extends LaunchScreen {
GauntletIO.getGauntletFile(gauntlet).delete(); GauntletIO.getGauntletFile(gauntlet).delete();
lstGauntlets.removeGauntlet(gauntlet); lstGauntlets.removeGauntlet(gauntlet);
}
}); });
} }
@@ -299,12 +269,7 @@ public class LoadGauntletScreen extends LaunchScreen {
public void refresh() { public void refresh() {
List<GauntletData> sorted = new ArrayList<>(); List<GauntletData> sorted = new ArrayList<>();
sorted.addAll(gauntlets); sorted.addAll(gauntlets);
Collections.sort(sorted, new Comparator<GauntletData>() { Collections.sort(sorted, (x, y) -> x.getName().toLowerCase().compareTo(y.getName().toLowerCase()));
@Override
public int compare(final GauntletData x, final GauntletData y) {
return x.getName().toLowerCase().compareTo(y.getName().toLowerCase());
}
});
setListData(sorted); setListData(sorted);
} }

View File

@@ -60,24 +60,12 @@ public class PuzzleScreen extends LaunchScreen {
@Override @Override
public void run(final Puzzle chosen) { public void run(final Puzzle chosen) {
if (chosen != null) { if (chosen != null) {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> {
@Override
public void run() {
// Load selected puzzle // Load selected puzzle
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
hostedMatch.setStartGameHook(new Runnable() { hostedMatch.setStartGameHook(() -> chosen.applyToGame(hostedMatch.getGame()));
@Override
public final void run() {
chosen.applyToGame(hostedMatch.getGame());
}
});
hostedMatch.setEndGameHook((new Runnable() { hostedMatch.setEndGameHook((() -> chosen.savePuzzleSolve(hostedMatch.getGame().getOutcome().isWinner(GamePlayerUtil.getGuiPlayer()))));
@Override
public void run() {
chosen.savePuzzleSolve(hostedMatch.getGame().getOutcome().isWinner(GamePlayerUtil.getGuiPlayer()));
}
}));
final List<RegisteredPlayer> players = new ArrayList<>(); final List<RegisteredPlayer> players = new ArrayList<>();
final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer()); final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer());
@@ -92,7 +80,6 @@ public class PuzzleScreen extends LaunchScreen {
rules.setGamesPerMatch(1); rules.setGamesPerMatch(1);
hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame()); hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame());
FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName()); FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName());
}
}); });
} }
} }

View File

@@ -30,8 +30,6 @@ import forge.screens.LaunchScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.screens.home.LoadGameMenu; import forge.screens.home.LoadGameMenu;
import forge.toolbox.FComboBox; import forge.toolbox.FComboBox;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
@@ -54,12 +52,7 @@ public class LoadDraftScreen extends LaunchScreen {
cbMode.addItem(Forge.getLocalizer().getMessage("lblSingleMatch")); cbMode.addItem(Forge.getLocalizer().getMessage("lblSingleMatch"));
lstDecks.setup(ItemManagerConfig.DRAFT_DECKS); lstDecks.setup(ItemManagerConfig.DRAFT_DECKS);
lstDecks.setItemActivateHandler(new FEventHandler() { lstDecks.setItemActivateHandler(event -> editSelectedDeck());
@Override
public void handleEvent(FEvent e) {
editSelectedDeck();
}
});
} }
@Override @Override
@@ -96,9 +89,7 @@ public class LoadDraftScreen extends LaunchScreen {
@Override @Override
protected void startMatch() { protected void startMatch() {
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
final DeckProxy humanDeck = lstDecks.getSelectedItem(); final DeckProxy humanDeck = lstDecks.getSelectedItem();
if (humanDeck == null) { if (humanDeck == null) {
FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblYouMustSelectExistingDeck"), Forge.getLocalizer().getMessage("lblNoDeck")); FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblYouMustSelectExistingDeck"), Forge.getLocalizer().getMessage("lblNoDeck"));
@@ -115,21 +106,15 @@ public class LoadDraftScreen extends LaunchScreen {
return; return;
} }
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (!checkDeckLegality(humanDeck)) { if (!checkDeckLegality(humanDeck)) {
return; return;
} }
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override
public void run() {
FModel.getGauntletMini().resetGauntletDraft(); FModel.getGauntletMini().resetGauntletDraft();
FModel.getGauntletMini().launch(rounds, humanDeck.getDeck(), GameType.Draft); FModel.getGauntletMini().launch(rounds, humanDeck.getDeck(), GameType.Draft);
}
}); });
}
}); });
} else { } else {
final Integer aiIndex = SGuiChoose.getInteger(Forge.getLocalizer().getMessage("lblWhichOpponentWouldYouLikeToFace"), final Integer aiIndex = SGuiChoose.getInteger(Forge.getLocalizer().getMessage("lblWhichOpponentWouldYouLikeToFace"),
@@ -144,12 +129,7 @@ public class LoadDraftScreen extends LaunchScreen {
throw new IllegalStateException("Draft: Computer deck is null!"); throw new IllegalStateException("Draft: Computer deck is null!");
} }
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() {
@Override
public void run() {
if (!checkDeckLegality(humanDeck)) { if (!checkDeckLegality(humanDeck)) {
return; return;
} }
@@ -165,11 +145,7 @@ public class LoadDraftScreen extends LaunchScreen {
FModel.getGauntletMini().resetGauntletDraft(); FModel.getGauntletMini().resetGauntletDraft();
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
hostedMatch.startMatch(GameType.Draft, null, starter, human, GuiBase.getInterface().getNewGuiGame()); hostedMatch.startMatch(GameType.Draft, null, starter, human, GuiBase.getInterface().getNewGuiGame());
} }));
});
}
});
}
} }
}); });
} }

View File

@@ -30,8 +30,6 @@ import forge.screens.LaunchScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.screens.home.LoadGameMenu; import forge.screens.home.LoadGameMenu;
import forge.toolbox.FComboBox; import forge.toolbox.FComboBox;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
@@ -54,12 +52,7 @@ public class LoadSealedScreen extends LaunchScreen {
cbMode.addItem(Forge.getLocalizer().getMessage("lblSingleMatch")); cbMode.addItem(Forge.getLocalizer().getMessage("lblSingleMatch"));
lstDecks.setup(ItemManagerConfig.SEALED_DECKS); lstDecks.setup(ItemManagerConfig.SEALED_DECKS);
lstDecks.setItemActivateHandler(new FEventHandler() { lstDecks.setItemActivateHandler(event -> editSelectedDeck());
@Override
public void handleEvent(FEvent e) {
editSelectedDeck();
}
});
} }
@Override @Override
@@ -95,9 +88,7 @@ public class LoadSealedScreen extends LaunchScreen {
@Override @Override
protected void startMatch() { protected void startMatch() {
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
final DeckProxy humanDeck = lstDecks.getSelectedItem(); final DeckProxy humanDeck = lstDecks.getSelectedItem();
if (humanDeck == null) { if (humanDeck == null) {
FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblYouMustSelectExistingSealedPool"), Forge.getLocalizer().getMessage("lblNoDeck")); FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblYouMustSelectExistingSealedPool"), Forge.getLocalizer().getMessage("lblNoDeck"));
@@ -107,21 +98,15 @@ public class LoadSealedScreen extends LaunchScreen {
final boolean gauntlet = cbMode.getSelectedItem().equals(Forge.getLocalizer().getMessage("lblGauntlet")); final boolean gauntlet = cbMode.getSelectedItem().equals(Forge.getLocalizer().getMessage("lblGauntlet"));
if (gauntlet) { if (gauntlet) {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (!checkDeckLegality(humanDeck)) { if (!checkDeckLegality(humanDeck)) {
return; return;
} }
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override
public void run() {
final int matches = FModel.getDecks().getSealed().get(humanDeck.getName()).getAiDecks().size(); final int matches = FModel.getDecks().getSealed().get(humanDeck.getName()).getAiDecks().size();
FModel.getGauntletMini().launch(matches, humanDeck.getDeck(), GameType.Sealed); FModel.getGauntletMini().launch(matches, humanDeck.getDeck(), GameType.Sealed);
}
}); });
}
}); });
} else { } else {
@@ -137,16 +122,12 @@ public class LoadSealedScreen extends LaunchScreen {
throw new IllegalStateException("Draft: Computer deck is null!"); throw new IllegalStateException("Draft: Computer deck is null!");
} }
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (!checkDeckLegality(humanDeck)) { if (!checkDeckLegality(humanDeck)) {
return; return;
} }
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@Override
public void run() {
final List<RegisteredPlayer> starter = new ArrayList<>(); final List<RegisteredPlayer> starter = new ArrayList<>();
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);
@@ -158,12 +139,9 @@ public class LoadSealedScreen extends LaunchScreen {
FModel.getGauntletMini().resetGauntletDraft(); FModel.getGauntletMini().resetGauntletDraft();
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
hostedMatch.startMatch(GameType.Sealed, null, starter, human, GuiBase.getInterface().getNewGuiGame()); hostedMatch.startMatch(GameType.Sealed, null, starter, human, GuiBase.getInterface().getNewGuiGame());
}
}); });
}
}); });
} }
}
}); });
} }

View File

@@ -41,27 +41,15 @@ public class NewDraftScreen extends LaunchScreen {
@Override @Override
protected void startMatch() { protected void startMatch() {
ThreadUtil.invokeInGameThread(new Runnable() { //must run in game thread to prevent blocking UI thread //must run in game thread to prevent blocking UI thread
@Override ThreadUtil.invokeInGameThread(() -> {
public void run() {
final LimitedPoolType poolType = SGuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblChooseDraftFormat"), LimitedPoolType.values()); final LimitedPoolType poolType = SGuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblChooseDraftFormat"), LimitedPoolType.values());
if (poolType == null) { return; } if (poolType == null) { return; }
final BoosterDraft draft = BoosterDraft.createDraft(poolType); final BoosterDraft draft = BoosterDraft.createDraft(poolType);
if (draft == null) { return; } if (draft == null) { return; }
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewDraft"), true, () -> Forge.openScreen(new DraftingProcessScreen(draft, EditorType.Draft, null))));
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewDraft"), new Runnable() {
@Override
public void run() {
Forge.openScreen(new DraftingProcessScreen(draft, EditorType.Draft, null));
}
});
}
});
}
}); });
} }
} }

View File

@@ -56,9 +56,7 @@ public class OnlineLobbyScreen extends LobbyScreen implements IOnlineLobby {
clearGameLobby(); clearGameLobby();
Forge.back(); Forge.back();
if (msg.length() > 0) { if (msg.length() > 0) {
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
final boolean callBackAlwaysTrue = SOptionPane.showOptionDialog(msg, Forge.getLocalizer().getMessage("lblError"), FSkinProp.ICO_WARNING, ImmutableList.of(Forge.getLocalizer().getMessage("lblOk")), 1) == 0; final boolean callBackAlwaysTrue = SOptionPane.showOptionDialog(msg, Forge.getLocalizer().getMessage("lblError"), FSkinProp.ICO_WARNING, ImmutableList.of(Forge.getLocalizer().getMessage("lblOk")), 1) == 0;
if (callBackAlwaysTrue) { //to activate online menu popup when player press play online if (callBackAlwaysTrue) { //to activate online menu popup when player press play online
GuiBase.setInterrupted(false); GuiBase.setInterrupted(false);
@@ -68,7 +66,6 @@ public class OnlineLobbyScreen extends LobbyScreen implements IOnlineLobby {
if(getfGameClient() != null) if(getfGameClient() != null)
closeClient(); closeClient();
} }
}
}); });
} }
} }
@@ -93,13 +90,9 @@ public class OnlineLobbyScreen extends LobbyScreen implements IOnlineLobby {
if (getGameLobby() == null) { if (getGameLobby() == null) {
setGameLobby(getLobby()); setGameLobby(getLobby());
//prompt to connect to server when offline lobby activated //prompt to connect to server when offline lobby activated
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
final String url = NetConnectUtil.getServerUrl(); final String url = NetConnectUtil.getServerUrl();
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> {
@Override
public void run() {
if (url == null) { if (url == null) {
closeConn(""); //go back to previous screen if user cancels connection closeConn(""); //go back to previous screen if user cancels connection
return; return;
@@ -107,9 +100,7 @@ public class OnlineLobbyScreen extends LobbyScreen implements IOnlineLobby {
final boolean joinServer = url.length() > 0; final boolean joinServer = url.length() > 0;
final String caption = joinServer ? Forge.getLocalizer().getMessage("lblConnectingToServer") : Forge.getLocalizer().getMessage("lblStartingServer"); final String caption = joinServer ? Forge.getLocalizer().getMessage("lblConnectingToServer") : Forge.getLocalizer().getMessage("lblStartingServer");
LoadingOverlay.show(caption, new Runnable() { LoadingOverlay.show(caption, true, () -> {
@Override
public void run() {
final ChatMessage result; final ChatMessage result;
final IOnlineChatInterface chatInterface = (IOnlineChatInterface)OnlineScreen.Chat.getScreen(); final IOnlineChatInterface chatInterface = (IOnlineChatInterface)OnlineScreen.Chat.getScreen();
if (joinServer) { if (joinServer) {
@@ -124,20 +115,12 @@ public class OnlineLobbyScreen extends LobbyScreen implements IOnlineLobby {
} }
chatInterface.addMessage(result); chatInterface.addMessage(result);
if (!joinServer) { if (!joinServer) {
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> NetConnectUtil.copyHostedServerUrl());
@Override
public void run() {
NetConnectUtil.copyHostedServerUrl();
}
});
} }
//update menu buttons //update menu buttons
OnlineScreen.Lobby.update(); OnlineScreen.Lobby.update();
}
}); });
}
}); });
}
}); });
} }
} }

View File

@@ -12,8 +12,6 @@ import forge.screens.FScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.screens.home.HomeScreen; import forge.screens.home.HomeScreen;
import forge.screens.home.LoadGameMenu.LoadGameScreen; import forge.screens.home.LoadGameMenu.LoadGameScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public class ConquestMenu extends FPopupMenu { public class ConquestMenu extends FPopupMenu {
private static final ConquestMenu conquestMenu = new ConquestMenu(); private static final ConquestMenu conquestMenu = new ConquestMenu();
@@ -26,54 +24,14 @@ public class ConquestMenu extends FPopupMenu {
private static final ConquestStatsScreen statsScreen = new ConquestStatsScreen(); private static final ConquestStatsScreen statsScreen = new ConquestStatsScreen();
private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen(); private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen();
private static final FMenuItem multiverseItem = new FMenuItem(Forge.getLocalizer().getMessage("lblTheMultiverse"), FSkinImage.MULTIVERSE, new FEventHandler() { private static final FMenuItem multiverseItem = new FMenuItem(Forge.getLocalizer().getMessage("lblTheMultiverse"), FSkinImage.MULTIVERSE, event -> setCurrentScreen(multiverseScreen));
@Override private static final FMenuItem aetherItem = new FMenuItem(Forge.getLocalizer().getMessage("lblTheAether"), FSkinImage.AETHER_SHARD, event -> setCurrentScreen(aetherScreen));
public void handleEvent(FEvent e) { private static final FMenuItem commandersItem = new FMenuItem(Forge.getLocalizer().getMessage("lblCommanders"), FSkinImage.COMMANDER, event -> setCurrentScreen(commandersScreen));
setCurrentScreen(multiverseScreen); private static final FMenuItem planeswalkersItem = new FMenuItem(Forge.getLocalizer().getMessage("lblPlaneswalkers"), FSkinImage.PLANESWALKER, event -> setCurrentScreen(planeswalkersScreen));
} private static final FMenuItem collectionItem = new FMenuItem(Forge.getLocalizer().getMessage("lblCollection"), FSkinImage.SPELLBOOK, event -> setCurrentScreen(collectionScreen));
}); private static final FMenuItem statsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblStatistics"), FSkinImage.MENU_STATS, event -> setCurrentScreen(statsScreen));
private static final FMenuItem aetherItem = new FMenuItem(Forge.getLocalizer().getMessage("lblTheAether"), FSkinImage.AETHER_SHARD, new FEventHandler() { private static final FMenuItem planeswalkItem = new FMenuItem(Forge.getLocalizer().getMessage("lblPlaneswalk"), FSkinImage.PW_BADGE_COMMON, event -> setCurrentScreen(planeswalkScreen));
@Override private static final FMenuItem prefsItem = new FMenuItem(Forge.getLocalizer().getMessage("Preferences"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, event -> setCurrentScreen(prefsScreen));
public void handleEvent(FEvent e) {
setCurrentScreen(aetherScreen);
}
});
private static final FMenuItem commandersItem = new FMenuItem(Forge.getLocalizer().getMessage("lblCommanders"), FSkinImage.COMMANDER, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(commandersScreen);
}
});
private static final FMenuItem planeswalkersItem = new FMenuItem(Forge.getLocalizer().getMessage("lblPlaneswalkers"), FSkinImage.PLANESWALKER, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(planeswalkersScreen);
}
});
private static final FMenuItem collectionItem = new FMenuItem(Forge.getLocalizer().getMessage("lblCollection"), FSkinImage.SPELLBOOK, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(collectionScreen);
}
});
private static final FMenuItem statsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblStatistics"), FSkinImage.MENU_STATS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(statsScreen);
}
});
private static final FMenuItem planeswalkItem = new FMenuItem(Forge.getLocalizer().getMessage("lblPlaneswalk"), FSkinImage.PW_BADGE_COMMON, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(planeswalkScreen);
}
});
private static final FMenuItem prefsItem = new FMenuItem(Forge.getLocalizer().getMessage("Preferences"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(prefsScreen);
}
});
private static void setCurrentScreen(FScreen screen0) { private static void setCurrentScreen(FScreen screen0) {
//make it so pressing Back from any screen besides Multiverse screen always goes to Multiverse screen //make it so pressing Back from any screen besides Multiverse screen always goes to Multiverse screen
@@ -84,12 +42,7 @@ public class ConquestMenu extends FPopupMenu {
static { static {
//the first time planarconquest mode is launched, add button for it if in Landscape mode //the first time planarconquest mode is launched, add button for it if in Landscape mode
if (Forge.isLandscapeMode()) { if (Forge.isLandscapeMode()) {
HomeScreen.instance.addButtonForMode("-"+Forge.getLocalizer().getMessage("lblPlanarConquest"), new FEventHandler() { HomeScreen.instance.addButtonForMode("-"+Forge.getLocalizer().getMessage("lblPlanarConquest"), event -> launchPlanarConquest(LaunchReason.StartPlanarConquest));
@Override
public void handleEvent(FEvent e) {
launchPlanarConquest(LaunchReason.StartPlanarConquest);
}
});
} }
} }
@@ -108,10 +61,7 @@ public class ConquestMenu extends FPopupMenu {
public static void launchPlanarConquest(final LaunchReason reason) { public static void launchPlanarConquest(final LaunchReason reason) {
Forge.lastButtonIndex = 7; Forge.lastButtonIndex = 7;
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingCurrentConquest"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingCurrentConquest"), true, () -> {
@Override
@SuppressWarnings("unchecked")
public void run() {
((DeckController<Deck>)EditorType.PlanarConquest.getController()).setRootFolder(FModel.getConquest().getDecks()); ((DeckController<Deck>)EditorType.PlanarConquest.getController()).setRootFolder(FModel.getConquest().getDecks());
if (reason == LaunchReason.StartPlanarConquest) { if (reason == LaunchReason.StartPlanarConquest) {
Forge.openScreen(multiverseScreen); Forge.openScreen(multiverseScreen);
@@ -123,7 +73,6 @@ public class ConquestMenu extends FPopupMenu {
LoadGameScreen.PlanarConquest.setAsBackScreen(true); LoadGameScreen.PlanarConquest.setAsBackScreen(true);
} }
} }
}
}); });
} }

View File

@@ -47,8 +47,6 @@ import forge.screens.LoadingOverlay;
import forge.toolbox.FButton; import forge.toolbox.FButton;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList; import forge.toolbox.FList;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane; import forge.toolbox.FScrollPane;
@@ -260,29 +258,18 @@ public class ConquestMultiverseScreen extends FScreen {
} }
private void launchEvent() { private void launchEvent() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblStartingBattle"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblStartingBattle"), true, () -> {
@Override
public void run() {
ConquestLocation loc = model.getCurrentLocation(); ConquestLocation loc = model.getCurrentLocation();
activeBattle = loc.getEvent().createBattle(loc, 0); activeBattle = loc.getEvent().createBattle(loc, 0);
FModel.getConquest().startBattle(activeBattle); FModel.getConquest().startBattle(activeBattle);
}
}); });
} }
private void launchChaosBattle() { private void launchChaosBattle() {
FThreads.invokeInEdtNowOrLater(new Runnable() { FThreads.invokeInEdtNowOrLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblChaosApproaching"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblChaosApproaching"), new Runnable() {
@Override
public void run() {
activeBattle = new ConquestChaosBattle(); activeBattle = new ConquestChaosBattle();
FModel.getConquest().startBattle(activeBattle); FModel.getConquest().startBattle(activeBattle);
} }));
});
}
});
} }
@Override @Override
@@ -678,12 +665,7 @@ public class ConquestMultiverseScreen extends FScreen {
private BattleBar() { private BattleBar() {
playerAvatar = add(new AvatarDisplay(false)); playerAvatar = add(new AvatarDisplay(false));
opponentAvatar = add(new AvatarDisplay(true)); opponentAvatar = add(new AvatarDisplay(true));
btnBattle = add(new FButton(Forge.getLocalizer().getMessage("lblBattle"), new FEventHandler() { btnBattle = add(new FButton(Forge.getLocalizer().getMessage("lblBattle"), event -> launchEvent()));
@Override
public void handleEvent(FEvent e) {
launchEvent();
}
}));
btnBattle.setFont(FSkinFont.get(20)); btnBattle.setFont(FSkinFont.get(20));
} }

View File

@@ -37,12 +37,7 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
@Override @Override
protected void finish() { protected void finish() {
//create new quest in game thread so option panes can wait for input //create new quest in game thread so option panes can wait for input
ThreadUtil.invokeInGameThread(new Runnable() { ThreadUtil.invokeInGameThread(() -> newConquest());
@Override
public void run() {
newConquest();
}
});
} }
private void newConquest() { private void newConquest() {
@@ -52,12 +47,7 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
} }
private void startNewConquest(final String conquestName) { private void startNewConquest(final String conquestName) {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblStartingNewConquest"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblStartingNewConquest"), new Runnable() {
@Override
public void run() {
ConquestController qc = FModel.getConquest(); ConquestController qc = FModel.getConquest();
qc.setModel(new ConquestData(conquestName, model.startingPlane, model.startingPlaneswalker, model.startingCommander)); qc.setModel(new ConquestData(conquestName, model.startingPlane, model.startingPlaneswalker, model.startingCommander));
qc.getDecks().add(Iterables.getFirst(qc.getModel().getCommanders(), null).getDeck()); //ensure starting deck is saved qc.getDecks().add(Iterables.getFirst(qc.getModel().getCommanders(), null).getDeck()); //ensure starting deck is saved
@@ -68,10 +58,7 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
FModel.getConquestPreferences().save(); FModel.getConquestPreferences().save();
ConquestMenu.launchPlanarConquest(LaunchReason.NewConquest); ConquestMenu.launchPlanarConquest(LaunchReason.NewConquest);
} }));
});
}
});
} }
private static class SelectStartingPlaneStep extends WizardStep<NewConquestScreenModel> { private static class SelectStartingPlaneStep extends WizardStep<NewConquestScreenModel> {

View File

@@ -42,8 +42,6 @@ import forge.screens.quest.QuestMenu.LaunchReason;
import forge.toolbox.FCheckBox; import forge.toolbox.FCheckBox;
import forge.toolbox.FComboBox; import forge.toolbox.FComboBox;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FNumericTextField; import forge.toolbox.FNumericTextField;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
@@ -186,17 +184,9 @@ public class NewQuestScreen extends FScreen {
private final FCheckBox cbCommander = scroller.add(new FCheckBox(Forge.getLocalizer().getMessage("rbCommanderSubformat"))); private final FCheckBox cbCommander = scroller.add(new FCheckBox(Forge.getLocalizer().getMessage("rbCommanderSubformat")));
private final FLabel btnEmbark = add(new FLabel.ButtonBuilder() private final FLabel btnEmbark = add(new FLabel.ButtonBuilder()
.font(FSkinFont.get(22)).text(Forge.getLocalizer().getMessage("lblEmbark")).icon(FSkinImage.QUEST_ZEP).command(new FEventHandler() { .font(FSkinFont.get(22)).text(Forge.getLocalizer().getMessage("lblEmbark")).icon(FSkinImage.QUEST_ZEP).command(event -> {
@Override
public void handleEvent(FEvent e) {
//create new quest in game thread so option panes can wait for input //create new quest in game thread so option panes can wait for input
ThreadUtil.invokeInGameThread(new Runnable() { ThreadUtil.invokeInGameThread(() -> newQuest());
@Override
public void run() {
newQuest();
}
});
}
}).build()); }).build());
public NewQuestScreen() { public NewQuestScreen() {
@@ -209,24 +199,18 @@ public class NewQuestScreen extends FScreen {
cbxStartingPool.addItem(StartingPoolType.DraftDeck); cbxStartingPool.addItem(StartingPoolType.DraftDeck);
cbxStartingPool.addItem(StartingPoolType.SealedDeck); cbxStartingPool.addItem(StartingPoolType.SealedDeck);
cbxStartingPool.addItem(StartingPoolType.Cube); cbxStartingPool.addItem(StartingPoolType.Cube);
cbxStartingPool.setChangedHandler(new FEventHandler() { cbxStartingPool.setChangedHandler(event -> {
@Override
public void handleEvent(FEvent e) {
updateStartingPoolOptions(); updateStartingPoolOptions();
scroller.revalidate(); scroller.revalidate();
}
}); });
cbxPrizedCards.addItem(Forge.getLocalizer().getMessage("lblSameAsStartingPool")); cbxPrizedCards.addItem(Forge.getLocalizer().getMessage("lblSameAsStartingPool"));
cbxPrizedCards.addItem(StartingPoolType.Complete); cbxPrizedCards.addItem(StartingPoolType.Complete);
cbxPrizedCards.addItem(StartingPoolType.Sanctioned); cbxPrizedCards.addItem(StartingPoolType.Sanctioned);
cbxPrizedCards.addItem(StartingPoolType.Casual); cbxPrizedCards.addItem(StartingPoolType.Casual);
cbxPrizedCards.setChangedHandler(new FEventHandler() { cbxPrizedCards.setChangedHandler(event -> {
@Override
public void handleEvent(FEvent e) {
updatePrizeOptions(); updatePrizeOptions();
scroller.revalidate(); scroller.revalidate();
}
}); });
for (GameFormat gf : FModel.getFormats().getSanctionedList()) { for (GameFormat gf : FModel.getFormats().getSanctionedList()) {
@@ -243,9 +227,7 @@ public class NewQuestScreen extends FScreen {
numberOfBoostersField.setEnabled(false); numberOfBoostersField.setEnabled(false);
@SuppressWarnings("serial") @SuppressWarnings("serial")
UiCommand colorBoxEnabler = new UiCommand() { UiCommand colorBoxEnabler = () -> {
@Override
public void run() {
cbBlack.setEnabled(radBalanced.isSelected()); cbBlack.setEnabled(radBalanced.isSelected());
cbBlue.setEnabled(radBalanced.isSelected()); cbBlue.setEnabled(radBalanced.isSelected());
cbGreen.setEnabled(radBalanced.isSelected()); cbGreen.setEnabled(radBalanced.isSelected());
@@ -254,7 +236,6 @@ public class NewQuestScreen extends FScreen {
cbColorless.setEnabled(radBalanced.isSelected()); cbColorless.setEnabled(radBalanced.isSelected());
cbIncludeArtifacts.setEnabled(!radSurpriseMe.isSelected()); cbIncludeArtifacts.setEnabled(!radSurpriseMe.isSelected());
numberOfBoostersField.setEnabled(radBoosters.isSelected()); numberOfBoostersField.setEnabled(radBoosters.isSelected());
}
}; };
radBalanced.setCommand(colorBoxEnabler); radBalanced.setCommand(colorBoxEnabler);
@@ -268,12 +249,7 @@ public class NewQuestScreen extends FScreen {
// Default to 'Main world' // Default to 'Main world'
cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Main world")); cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Main world"));
cbxStartingWorld.setChangedHandler(new FEventHandler() { cbxStartingWorld.setChangedHandler(event -> updateEnabledFormats());
@Override
public void handleEvent(FEvent e) {
updateEnabledFormats();
}
});
updateStartingPoolOptions(); updateStartingPoolOptions();
updatePrizeOptions(); updatePrizeOptions();
@@ -298,13 +274,9 @@ public class NewQuestScreen extends FScreen {
unselectableSets.add("ARC"); unselectableSets.add("ARC");
unselectableSets.add("PC2"); unselectableSets.add("PC2");
btnSelectFormat.setCommand(new FEventHandler() { btnSelectFormat.setCommand(event -> {
@Override
public void handleEvent(FEvent e) {
ArchivedFormatSelect archivedFormatSelect = new ArchivedFormatSelect(); ArchivedFormatSelect archivedFormatSelect = new ArchivedFormatSelect();
archivedFormatSelect.setOnCloseCallBack(new Runnable() { archivedFormatSelect.setOnCloseCallBack(() -> {
@Override
public void run() {
customFormatCodes.clear(); customFormatCodes.clear();
btnSelectFormat.setText(archivedFormatSelect.getSelectedFormat().getName()); btnSelectFormat.setText(archivedFormatSelect.getSelectedFormat().getName());
List<String> setsToAdd = archivedFormatSelect.getSelectedFormat().getAllowedSetCodes(); List<String> setsToAdd = archivedFormatSelect.getSelectedFormat().getAllowedSetCodes();
@@ -313,19 +285,13 @@ public class NewQuestScreen extends FScreen {
customFormatCodes.add(setName); customFormatCodes.add(setName);
} }
} }
}
}); });
Forge.openScreen(archivedFormatSelect); Forge.openScreen(archivedFormatSelect);
}
}); });
btnPrizeSelectFormat.setCommand(new FEventHandler() { btnPrizeSelectFormat.setCommand(event -> {
@Override
public void handleEvent(FEvent e) {
ArchivedFormatSelect archivedFormatSelect = new ArchivedFormatSelect(); ArchivedFormatSelect archivedFormatSelect = new ArchivedFormatSelect();
archivedFormatSelect.setOnCloseCallBack(new Runnable() { archivedFormatSelect.setOnCloseCallBack(() -> {
@Override
public void run() {
customPrizeFormatCodes.clear(); customPrizeFormatCodes.clear();
btnPrizeSelectFormat.setText(archivedFormatSelect.getSelectedFormat().getName()); btnPrizeSelectFormat.setText(archivedFormatSelect.getSelectedFormat().getName());
List<String> setsToAdd = archivedFormatSelect.getSelectedFormat().getAllowedSetCodes(); List<String> setsToAdd = archivedFormatSelect.getSelectedFormat().getAllowedSetCodes();
@@ -334,23 +300,18 @@ public class NewQuestScreen extends FScreen {
customPrizeFormatCodes.add(setName); customPrizeFormatCodes.add(setName);
} }
} }
}
}); });
Forge.openScreen(archivedFormatSelect); Forge.openScreen(archivedFormatSelect);
}
}); });
// Fantasy box enabled by Default // Fantasy box enabled by Default
cbFantasy.setSelected(true); cbFantasy.setSelected(true);
cbFantasy.setEnabled(true); cbFantasy.setEnabled(true);
cbCommander.setSelected(false); cbCommander.setSelected(false);
cbCommander.setCommand(new FEventHandler() { cbCommander.setCommand(event -> {
@Override
public void handleEvent(FEvent e) {
if (!isCommander()) if (!isCommander())
return; return;
cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Random Commander")); cbxStartingWorld.setSelectedItem(FModel.getWorlds().get("Random Commander"));
}
}); });
} }
@@ -644,12 +605,7 @@ public class NewQuestScreen extends FScreen {
} }
private void startNewQuest(final String questName, final GameFormat fmtPrizes, final Deck dckStartPool, final GameFormat fmtStartPool) { private void startNewQuest(final String questName, final GameFormat fmtPrizes, final Deck dckStartPool, final GameFormat fmtStartPool) {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblCreatingNewQuest"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblCreatingNewQuest"), new Runnable() {
@Override
public void run() {
final QuestMode mode = isFantasy() ? QuestMode.Fantasy : QuestMode.Classic; final QuestMode mode = isFantasy() ? QuestMode.Fantasy : QuestMode.Classic;
final StartingPoolPreferences userPrefs = final StartingPoolPreferences userPrefs =
new StartingPoolPreferences(getPoolType(), getPreferredColors(), cbIncludeArtifacts.isSelected(), startWithCompleteSet(), allowDuplicateCards(), numberOfBoostersField.getValue()); new StartingPoolPreferences(getPoolType(), getPreferredColors(), cbIncludeArtifacts.isSelected(), startWithCompleteSet(), allowDuplicateCards(), numberOfBoostersField.getValue());
@@ -665,9 +621,6 @@ public class NewQuestScreen extends FScreen {
FModel.getQuestPreferences().save(); FModel.getQuestPreferences().save();
QuestMenu.launchQuestMode(LaunchReason.NewQuest, isCommander()); //launch quest mode for new quest QuestMenu.launchQuestMode(LaunchReason.NewQuest, isCommander()); //launch quest mode for new quest
} }));
});
}
});
} }
} }

View File

@@ -12,8 +12,6 @@ import forge.gui.FThreads;
import forge.gui.interfaces.IButton; import forge.gui.interfaces.IButton;
import forge.model.FModel; import forge.model.FModel;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
public class QuestDuelsScreen extends QuestLaunchScreen { public class QuestDuelsScreen extends QuestLaunchScreen {
@@ -33,12 +31,7 @@ public class QuestDuelsScreen extends QuestLaunchScreen {
public QuestDuelsScreen() { public QuestDuelsScreen() {
super(); super();
pnlDuels.setActivateHandler(new FEventHandler() { pnlDuels.setActivateHandler(event -> startMatch());
@Override
public void handleEvent(FEvent e) {
startMatch();
}
});
} }
@Override @Override
@@ -74,12 +67,7 @@ public class QuestDuelsScreen extends QuestLaunchScreen {
} }
private void generateDuels() { private void generateDuels() {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingCurrentQuest"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingCurrentQuest"), new Runnable() {
@Override
public void run() {
pnlDuels.clear(); pnlDuels.clear();
List<QuestEventDuel> duels = FModel.getQuest().getDuelsManager().generateDuels(); List<QuestEventDuel> duels = FModel.getQuest().getDuelsManager().generateDuels();
if (duels != null) { if (duels != null) {
@@ -88,9 +76,6 @@ public class QuestDuelsScreen extends QuestLaunchScreen {
} }
} }
pnlDuels.revalidate(); pnlDuels.revalidate();
} }));
});
}
});
} }
} }

View File

@@ -22,24 +22,11 @@ public abstract class QuestLaunchScreen extends LaunchScreen {
@Override @Override
protected void startMatch() { protected void startMatch() {
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
if (QuestUtil.canStartGame()) { if (QuestUtil.canStartGame()) {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> QuestUtil.finishStartingGame()));
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), new Runnable() {
@Override
public void run() {
QuestUtil.finishStartingGame();
}
});
}
});
return; return;
} }
}
}); });
} }

View File

@@ -26,8 +26,6 @@ import forge.screens.LoadingOverlay;
import forge.screens.home.HomeScreen; import forge.screens.home.HomeScreen;
import forge.screens.home.LoadGameMenu.LoadGameScreen; import forge.screens.home.LoadGameMenu.LoadGameScreen;
import forge.screens.home.NewGameMenu.NewGameScreen; import forge.screens.home.NewGameMenu.NewGameScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.ThreadUtil; import forge.util.ThreadUtil;
public class QuestMenu extends FPopupMenu implements IVQuestStats { public class QuestMenu extends FPopupMenu implements IVQuestStats {
@@ -42,88 +40,28 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats {
private static final QuestStatsScreen statsScreen = new QuestStatsScreen(); private static final QuestStatsScreen statsScreen = new QuestStatsScreen();
private static final QuestTournamentsScreen tournamentsScreen = new QuestTournamentsScreen(); private static final QuestTournamentsScreen tournamentsScreen = new QuestTournamentsScreen();
private static final FMenuItem duelsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblDuels"), FSkinImage.QUEST_BIG_SWORD, new FEventHandler() { private static final FMenuItem duelsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblDuels"), FSkinImage.QUEST_BIG_SWORD, event -> setCurrentScreen(duelsScreen));
@Override private static final FMenuItem challengesItem = new FMenuItem(Forge.getLocalizer().getMessage("lblChallenges"), FSkinImage.QUEST_HEART, event -> setCurrentScreen(challengesScreen));
public void handleEvent(FEvent e) { private static final FMenuItem tournamentsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblTournaments"), FSkinImage.QUEST_BIG_SHIELD, event -> setCurrentScreen(tournamentsScreen));
setCurrentScreen(duelsScreen); private static final FMenuItem decksItem = new FMenuItem(Forge.getLocalizer().getMessage("lblQuestDecks"), FSkinImage.QUEST_BIG_BAG, event -> setCurrentScreen(decksScreen));
} private static final FMenuItem spellShopItem = new FMenuItem(Forge.getLocalizer().getMessage("lblSpellShop"), FSkinImage.QUEST_BOOK, event -> setCurrentScreen(spellShopScreen));
}); private static final FMenuItem bazaarItem = new FMenuItem(Forge.getLocalizer().getMessage("lblBazaar"), FSkinImage.QUEST_BOTTLES, event -> setCurrentScreen(bazaarScreen));
private static final FMenuItem challengesItem = new FMenuItem(Forge.getLocalizer().getMessage("lblChallenges"), FSkinImage.QUEST_HEART, new FEventHandler() { private static final FMenuItem statsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblStatistics"), FSkinImage.MENU_STATS, event -> setCurrentScreen(statsScreen));
@Override private static final FMenuItem unlockSetsItem = new FMenuItem(Forge.getLocalizer().getMessage("btnUnlockSets"), FSkinImage.QUEST_MAP, event -> {
public void handleEvent(FEvent e) { //invoke in background thread so prompts can work
setCurrentScreen(challengesScreen); ThreadUtil.invokeInGameThread(() -> {
}
});
private static final FMenuItem tournamentsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblTournaments"), FSkinImage.QUEST_BIG_SHIELD, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(tournamentsScreen);
}
});
private static final FMenuItem decksItem = new FMenuItem(Forge.getLocalizer().getMessage("lblQuestDecks"), FSkinImage.QUEST_BIG_BAG, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(decksScreen);
}
});
private static final FMenuItem spellShopItem = new FMenuItem(Forge.getLocalizer().getMessage("lblSpellShop"), FSkinImage.QUEST_BOOK, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(spellShopScreen);
}
});
private static final FMenuItem bazaarItem = new FMenuItem(Forge.getLocalizer().getMessage("lblBazaar"), FSkinImage.QUEST_BOTTLES, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(bazaarScreen);
}
});
private static final FMenuItem statsItem = new FMenuItem(Forge.getLocalizer().getMessage("lblStatistics"), FSkinImage.MENU_STATS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(statsScreen);
}
});
private static final FMenuItem unlockSetsItem = new FMenuItem(Forge.getLocalizer().getMessage("btnUnlockSets"), FSkinImage.QUEST_MAP, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() { //invoke in background thread so prompts can work
@Override
public void run() {
QuestUtil.chooseAndUnlockEdition(); QuestUtil.chooseAndUnlockEdition();
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> updateCurrentQuestScreen());
@Override
public void run() {
updateCurrentQuestScreen();
}
}); });
}
}); });
} private static final FMenuItem travelItem = new FMenuItem(Forge.getLocalizer().getMessage("btnTravel"), FSkinImage.QUEST_MAP, event -> {
}); //invoke in background thread so prompts can work
private static final FMenuItem travelItem = new FMenuItem(Forge.getLocalizer().getMessage("btnTravel"), FSkinImage.QUEST_MAP, new FEventHandler() { ThreadUtil.invokeInGameThread(() -> {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() { //invoke in background thread so prompts can work
@Override
public void run() {
QuestUtil.travelWorld(); QuestUtil.travelWorld();
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> updateCurrentQuestScreen());
@Override
public void run() {
updateCurrentQuestScreen();
}
}); });
}
});
}
});
private static final FMenuItem prefsItem = new FMenuItem(Forge.getLocalizer().getMessage("Preferences"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setCurrentScreen(prefsScreen);
}
}); });
private static final FMenuItem prefsItem = new FMenuItem(Forge.getLocalizer().getMessage("Preferences"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, event -> setCurrentScreen(prefsScreen));
static { static {
statsScreen.addTournamentResultsLabels(tournamentsScreen); statsScreen.addTournamentResultsLabels(tournamentsScreen);
@@ -159,12 +97,7 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats {
static { static {
//the first time quest mode is launched, add button for it if in Landscape mode //the first time quest mode is launched, add button for it if in Landscape mode
if (Forge.isLandscapeMode()) { if (Forge.isLandscapeMode()) {
HomeScreen.instance.addButtonForMode("-"+Forge.getLocalizer().getMessage("lblQuestMode"), new FEventHandler() { HomeScreen.instance.addButtonForMode("-"+Forge.getLocalizer().getMessage("lblQuestMode"), event -> launchQuestMode(LaunchReason.StartQuestMode, HomeScreen.instance.getQuestCommanderMode()));
@Override
public void handleEvent(FEvent e) {
launchQuestMode(LaunchReason.StartQuestMode, HomeScreen.instance.getQuestCommanderMode());
}
});
} }
} }
@@ -190,10 +123,7 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats {
final String questname = FModel.getQuestPreferences().getPref(QPref.CURRENT_QUEST); final String questname = FModel.getQuestPreferences().getPref(QPref.CURRENT_QUEST);
final File data = new File(dirQuests.getPath(), questname); final File data = new File(dirQuests.getPath(), questname);
if (data.exists()) { if (data.exists()) {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingCurrentQuest"), new Runnable() { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingCurrentQuest"), true, () -> {
@Override
@SuppressWarnings("unchecked")
public void run() {
try { try {
FModel.getQuest().load(QuestDataIO.loadData(data)); FModel.getQuest().load(QuestDataIO.loadData(data));
} catch (IOException e) { } catch (IOException e) {
@@ -223,7 +153,6 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats {
} }
} }
HomeScreen.instance.updateQuestWorld(FModel.getQuest().getWorld() == null ? "" : FModel.getQuest().getWorld().toString()); HomeScreen.instance.updateQuestWorld(FModel.getQuest().getWorld() == null ? "" : FModel.getQuest().getWorld().toString());
}
}); });
return; return;
} }

View File

@@ -29,8 +29,6 @@ import forge.model.FModel;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.screens.TabPageScreen; import forge.screens.TabPageScreen;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FTextArea; import forge.toolbox.FTextArea;
import forge.toolbox.GuiChoose; import forge.toolbox.GuiChoose;
@@ -49,9 +47,7 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
inventoryPage = ((InventoryPage)tabPages[1]); inventoryPage = ((InventoryPage)tabPages[1]);
btnBuySellMultiple.setVisible(false); //hide unless in multi-select mode btnBuySellMultiple.setVisible(false); //hide unless in multi-select mode
btnBuySellMultiple.setCommand(new FEventHandler() { btnBuySellMultiple.setCommand(event -> {
@Override
public void handleEvent(FEvent e) {
final SpellShopManager itemManager = ((SpellShopBasePage)getSelectedPage()).itemManager; final SpellShopManager itemManager = ((SpellShopBasePage)getSelectedPage()).itemManager;
final ItemPool<InventoryItem> items = itemManager.getSelectedItemPool(); final ItemPool<InventoryItem> items = itemManager.getSelectedItemPool();
@@ -61,24 +57,15 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
return; return;
} }
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
if (getSelectedPage() == spellShopPage) { if (getSelectedPage() == spellShopPage) {
spellShopPage.activateItems(items); spellShopPage.activateItems(items);
} }
else { else {
inventoryPage.activateItems(items); inventoryPage.activateItems(items);
} }
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> updateCreditsLabel());
@Override
public void run() {
updateCreditsLabel();
}
}); });
}
});
}
}); });
} }
@@ -190,29 +177,18 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
parentScreen.tabHeader.setVisible(!multiSelectMode); parentScreen.tabHeader.setVisible(!multiSelectMode);
} }
}); });
itemManager.setItemActivateHandler(new FEventHandler() { itemManager.setItemActivateHandler(event -> {
@Override
public void handleEvent(FEvent e) {
}
}); });
itemManager.setContextMenuBuilder(new ContextMenuBuilder<InventoryItem>() { itemManager.setContextMenuBuilder(new ContextMenuBuilder<InventoryItem>() {
@Override @Override
public void buildMenu(final FDropDownMenu menu, final InventoryItem item) { public void buildMenu(final FDropDownMenu menu, final InventoryItem item) {
menu.addItem(new FMenuItem(getVerb(), getVerbIcon(), new FEventHandler() { menu.addItem(new FMenuItem(getVerb(), getVerbIcon(), event -> activateSelectedItem()));
@Override
public void handleEvent(FEvent e) {
activateSelectedItem();
}
}));
} }
}); });
itemManager.setSelectionChangedHandler(new FEventHandler() { itemManager.setSelectionChangedHandler(event -> {
@Override
public void handleEvent(FEvent e) {
if (itemManager.getMultiSelectMode()) { if (itemManager.getMultiSelectMode()) {
parentScreen.updateBuySellButtonCaption(); parentScreen.updateBuySellButtonCaption();
} }
}
}); });
add(lblCredits); add(lblCredits);
} }
@@ -235,19 +211,11 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
if (result == null || result <= 0) { return; } if (result == null || result <= 0) { return; }
//invoke in background thread so other dialogs can be shown properly //invoke in background thread so other dialogs can be shown properly
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
ItemPool<InventoryItem> items = new ItemPool<>(InventoryItem.class); ItemPool<InventoryItem> items = new ItemPool<>(InventoryItem.class);
items.add(item, result); items.add(item, result);
activateItems(items); activateItems(items);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel());
@Override
public void run() {
parentScreen.updateCreditsLabel();
}
});
}
}); });
} }
}; };
@@ -290,22 +258,14 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
@Override @Override
protected void refresh() { protected void refresh() {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Forge.getLocalizer().getInstance().getMessage("lblLoading"), true, () -> {
@Override
public void run() {
LoadingOverlay.show(Forge.getLocalizer().getInstance().getMessage("lblLoading"), new Runnable() {
@Override
public void run() {
Map<ColumnDef, ItemColumn> colOverrides = new HashMap<>(); Map<ColumnDef, ItemColumn> colOverrides = new HashMap<>();
ItemColumn.addColOverride(ItemManagerConfig.SPELL_SHOP, colOverrides, ColumnDef.PRICE, QuestSpellShop.fnPriceCompare, QuestSpellShop.fnPriceGet); ItemColumn.addColOverride(ItemManagerConfig.SPELL_SHOP, colOverrides, ColumnDef.PRICE, QuestSpellShop.fnPriceCompare, QuestSpellShop.fnPriceGet);
ItemColumn.addColOverride(ItemManagerConfig.SPELL_SHOP, colOverrides, ColumnDef.OWNED, FModel.getQuest().getCards().getFnOwnedCompare(), FModel.getQuest().getCards().getFnOwnedGet()); ItemColumn.addColOverride(ItemManagerConfig.SPELL_SHOP, colOverrides, ColumnDef.OWNED, FModel.getQuest().getCards().getFnOwnedCompare(), FModel.getQuest().getCards().getFnOwnedGet());
itemManager.setup(ItemManagerConfig.SPELL_SHOP, colOverrides); itemManager.setup(ItemManagerConfig.SPELL_SHOP, colOverrides);
itemManager.setPool(FModel.getQuest().getCards().getShopList()); itemManager.setPool(FModel.getQuest().getCards().getShopList());
} }));
});
}
});
} }
@Override @Override
@@ -337,47 +297,25 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
private static class InventoryPage extends SpellShopBasePage { private static class InventoryPage extends SpellShopBasePage {
protected FLabel lblSellExtras = add(new FLabel.Builder().text(Forge.getLocalizer().getMessage("lblSellAllExtras")) protected FLabel lblSellExtras = add(new FLabel.Builder().text(Forge.getLocalizer().getMessage("lblSellAllExtras"))
.icon(Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS).iconScaleFactor(1f).align(Align.right).font(FSkinFont.get(16)) .icon(Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS).iconScaleFactor(1f).align(Align.right).font(FSkinFont.get(16))
.command(new FEventHandler() { .command(event -> {
@Override
public void handleEvent(FEvent e) {
//invoke in background thread so other dialogs can be shown properly //invoke in background thread so other dialogs can be shown properly
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
QuestSpellShop.sellExtras(parentScreen.spellShopPage.itemManager, itemManager); QuestSpellShop.sellExtras(parentScreen.spellShopPage.itemManager, itemManager);
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel());
@Override
public void run() {
parentScreen.updateCreditsLabel();
}
}); });
}
});
}
}).build()); }).build());
protected FLabel lblSelectAll = add(new FLabel.Builder().text(Forge.getLocalizer().getMessage("lblSelectAllCards")) protected FLabel lblSelectAll = add(new FLabel.Builder().text(Forge.getLocalizer().getMessage("lblSelectAllCards"))
.icon(Forge.hdbuttons ? FSkinImage.HDSTAR_FILLED : FSkinImage.STAR_FILLED).iconScaleFactor(1f).align(Align.right).font(FSkinFont.get(16)) .icon(Forge.hdbuttons ? FSkinImage.HDSTAR_FILLED : FSkinImage.STAR_FILLED).iconScaleFactor(1f).align(Align.right).font(FSkinFont.get(16))
.command(new FEventHandler() { .command(event -> {
@Override
public void handleEvent(FEvent e) {
//invoke in background thread so other dialogs can be shown properly //invoke in background thread so other dialogs can be shown properly
FThreads.invokeInBackgroundThread(new Runnable() { FThreads.invokeInBackgroundThread(() -> {
@Override
public void run() {
if (!itemManager.getMultiSelectMode()) { if (!itemManager.getMultiSelectMode()) {
itemManager.toggleMultiSelectMode(0); itemManager.toggleMultiSelectMode(0);
} }
itemManager.selectAll(); itemManager.selectAll();
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel());
@Override
public void run() {
parentScreen.updateCreditsLabel();
}
}); });
}
});
}
}).build()); }).build());
private InventoryPage() { private InventoryPage() {

View File

@@ -34,8 +34,6 @@ import forge.screens.LoadingOverlay;
import forge.screens.limited.DraftingProcessScreen; import forge.screens.limited.DraftingProcessScreen;
import forge.toolbox.FButton; import forge.toolbox.FButton;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FTextField; import forge.toolbox.FTextField;
import forge.util.Utils; import forge.util.Utils;
@@ -84,52 +82,21 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
public QuestTournamentsScreen() { public QuestTournamentsScreen() {
super(); super();
controller = new QuestTournamentController(this); controller = new QuestTournamentController(this);
btnSpendToken.setCommand(new FEventHandler() { btnSpendToken.setCommand(event -> {
@Override //must run in background thread to handle alerts
public void handleEvent(FEvent e) { FThreads.invokeInBackgroundThread(() -> controller.spendToken());
FThreads.invokeInBackgroundThread(new Runnable() { //must run in background thread to handle alerts
@Override
public void run() {
controller.spendToken();
}
}); });
} btnEditDeck.setCommand(event -> editDeck(true));
}); btnLeaveTournament.setCommand(event -> {
btnEditDeck.setCommand(new FEventHandler() { //must run in background thread to handle alerts
@Override FThreads.invokeInBackgroundThread(() -> controller.endTournamentAndAwardPrizes());
public void handleEvent(FEvent e) {
editDeck(true);
}
});
btnLeaveTournament.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FThreads.invokeInBackgroundThread(new Runnable() { //must run in background thread to handle alerts
@Override
public void run() {
controller.endTournamentAndAwardPrizes();
}
});
}
}); });
// TODO: is it possible to somehow reuse the original btnEditDeck/btnLeaveTournament // TODO: is it possible to somehow reuse the original btnEditDeck/btnLeaveTournament
btnEditDeckInTourn.setCommand(new FEventHandler() { btnEditDeckInTourn.setCommand(event -> editDeck(true));
@Override btnLeaveTournamentInTourn.setCommand(event -> {
public void handleEvent(FEvent e) { //must run in background thread to handle alerts
editDeck(true); FThreads.invokeInBackgroundThread(() -> controller.endTournamentAndAwardPrizes());
}
});
btnLeaveTournamentInTourn.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FThreads.invokeInBackgroundThread(new Runnable() { //must run in background thread to handle alerts
@Override
public void run() {
controller.endTournamentAndAwardPrizes();
}
});
}
}); });
pnlPrepareDeck.add(btnEditDeck); pnlPrepareDeck.add(btnEditDeck);
@@ -231,17 +198,7 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
@Override @Override
public void startDraft(BoosterDraft draft) { public void startDraft(BoosterDraft draft) {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(() -> LoadingOverlay.show("Loading Quest Tournament", true, () -> Forge.openScreen(new DraftingProcessScreen(draft, EditorType.QuestDraft, controller))));
@Override
public void run() {
LoadingOverlay.show("Loading Quest Tournament", new Runnable() {
@Override
public void run() {
Forge.openScreen(new DraftingProcessScreen(draft, EditorType.QuestDraft, controller));
}
});
}
});
} }
private Deck getDeck() { private Deck getDeck() {
@@ -276,9 +233,8 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
return; return;
} }
FThreads.invokeInBackgroundThread(new Runnable() { //must run in background thread to handle alerts //must run in background thread to handle alerts
@Override FThreads.invokeInBackgroundThread(() -> {
public void run() {
switch (mode) { switch (mode) {
case SELECT_TOURNAMENT: case SELECT_TOURNAMENT:
controller.startDraft(); controller.startDraft();
@@ -292,7 +248,6 @@ public class QuestTournamentsScreen extends QuestLaunchScreen implements IQuestT
default: default:
break; break;
} }
}
}); });
} }