Improve responsiveness of opening ConstructedScreen by loading decks asynchronously

This commit is contained in:
drdev
2014-06-19 01:31:07 +00:00
parent c7894866cc
commit 3dc9735aec
2 changed files with 32 additions and 17 deletions

View File

@@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.FThreads;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.GuiBase; import forge.GuiBase;
@@ -26,7 +27,6 @@ import forge.deck.FDeckChooser;
import forge.game.GameType; import forge.game.GameType;
import forge.game.player.RegisteredPlayer; import forge.game.player.RegisteredPlayer;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.model.CardCollections;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
@@ -101,6 +101,8 @@ public class ConstructedScreen extends LaunchScreen {
public ConstructedScreen() { public ConstructedScreen() {
super("Constructed"); super("Constructed");
btnStart.setEnabled(false); //disable start button until decks loaded
add(lblPlayers); add(lblPlayers);
cbPlayerCount = add(new FComboBox<Integer>()); cbPlayerCount = add(new FComboBox<Integer>());
cbPlayerCount.setFont(VARIANTS_FONT); cbPlayerCount.setFont(VARIANTS_FONT);
@@ -164,17 +166,29 @@ public class ConstructedScreen extends LaunchScreen {
add(playersScroll); add(playersScroll);
getDeckChooser(0).initialize(FPref.CONSTRUCTED_P1_DECK_STATE, DeckType.PRECONSTRUCTED_DECK);
getDeckChooser(1).initialize(FPref.CONSTRUCTED_P2_DECK_STATE, DeckType.COLOR_DECK);
/*getDeckChooser(2).initialize(FPref.CONSTRUCTED_P3_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(3).initialize(FPref.CONSTRUCTED_P4_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(4).initialize(FPref.CONSTRUCTED_P5_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(5).initialize(FPref.CONSTRUCTED_P6_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(6).initialize(FPref.CONSTRUCTED_P7_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(7).initialize(FPref.CONSTRUCTED_P8_DECK_STATE, DeckType.COLOR_DECK);*/ //TODO: Support multiplayer and improve performance of loading this screen by using background thread
updatePlayersFromPrefs(); updatePlayersFromPrefs();
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
getDeckChooser(0).initialize(FPref.CONSTRUCTED_P1_DECK_STATE, DeckType.PRECONSTRUCTED_DECK);
getDeckChooser(1).initialize(FPref.CONSTRUCTED_P2_DECK_STATE, DeckType.COLOR_DECK);
/*getDeckChooser(2).initialize(FPref.CONSTRUCTED_P3_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(3).initialize(FPref.CONSTRUCTED_P4_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(4).initialize(FPref.CONSTRUCTED_P5_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(5).initialize(FPref.CONSTRUCTED_P6_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(6).initialize(FPref.CONSTRUCTED_P7_DECK_STATE, DeckType.COLOR_DECK);
getDeckChooser(7).initialize(FPref.CONSTRUCTED_P8_DECK_STATE, DeckType.COLOR_DECK);*/ //TODO: Support multiplayer and improve performance of loading this screen by using background thread
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
btnStart.setEnabled(true);
}
});
}
});
//disable player count and variants for now until they work properly //disable player count and variants for now until they work properly
lblPlayers.setEnabled(false); lblPlayers.setEnabled(false);
cbPlayerCount.setEnabled(false); cbPlayerCount.setEnabled(false);
@@ -432,7 +446,7 @@ public class ConstructedScreen extends LaunchScreen {
private FComboBox<Object> cbTeam = new FComboBox<Object>(); private FComboBox<Object> cbTeam = new FComboBox<Object>();
private FComboBox<Object> cbArchenemyTeam = new FComboBox<Object>(); private FComboBox<Object> cbArchenemyTeam = new FComboBox<Object>();
private final FLabel btnDeck = new FLabel.ButtonBuilder().text("Deck: (None)").build(); private final FLabel btnDeck = new FLabel.ButtonBuilder().text("Loading Deck...").build();
private final FLabel btnSchemeDeck = new FLabel.ButtonBuilder().text("Scheme Deck: (None)").build(); private final FLabel btnSchemeDeck = new FLabel.ButtonBuilder().text("Scheme Deck: (None)").build();
private final FLabel btnCommanderDeck = new FLabel.ButtonBuilder().text("Commander Deck: (None)").build(); private final FLabel btnCommanderDeck = new FLabel.ButtonBuilder().text("Commander Deck: (None)").build();
private final FLabel btnPlanarDeck = new FLabel.ButtonBuilder().text("Planar Deck: (None)").build(); private final FLabel btnPlanarDeck = new FLabel.ButtonBuilder().text("Planar Deck: (None)").build();
@@ -445,15 +459,16 @@ public class ConstructedScreen extends LaunchScreen {
super(); super();
index = index0; index = index0;
playerIsArchenemy = index == 0; playerIsArchenemy = index == 0;
btnDeck.setEnabled(false); //disable deck button until done loading decks
deckChooser = new FDeckChooser(isPlayerAI()); deckChooser = new FDeckChooser(isPlayerAI());
deckChooser.getLstDecks().setSelectionChangedHandler(new FEventHandler() { deckChooser.getLstDecks().setSelectionChangedHandler(new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
btnDeck.setEnabled(true);
btnDeck.setText(deckChooser.getSelectedDeckType().toString() + ": " + btnDeck.setText(deckChooser.getSelectedDeckType().toString() + ": " +
Lang.joinHomogenous(deckChooser.getLstDecks().getSelectedItems(), DeckProxy.FN_GET_NAME)); Lang.joinHomogenous(deckChooser.getLstDecks().getSelectedItems(), DeckProxy.FN_GET_NAME));
} }
}); });
deckChooser.initialize();
lstSchemeDecks = new DeckList(); lstSchemeDecks = new DeckList();
lstCommanderDecks = new DeckList(); lstCommanderDecks = new DeckList();
lstPlanarDecks = new DeckList(); lstPlanarDecks = new DeckList();
@@ -488,7 +503,7 @@ public class ConstructedScreen extends LaunchScreen {
Forge.openScreen(deckChooser); Forge.openScreen(deckChooser);
} }
}); });
add(btnCommanderDeck); /*add(btnCommanderDeck);
btnCommanderDeck.setCommand(new FEventHandler() { btnCommanderDeck.setCommand(new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
@@ -519,11 +534,11 @@ public class ConstructedScreen extends LaunchScreen {
deckChooser.setHeaderCaption("Select Vanguard Avatar for " + txtPlayerName.getText()); deckChooser.setHeaderCaption("Select Vanguard Avatar for " + txtPlayerName.getText());
Forge.openScreen(deckChooser); Forge.openScreen(deckChooser);
} }
}); });*/
updateVariantControlsVisibility(); updateVariantControlsVisibility();
final CardCollections decks = FModel.getDecks(); /*final CardCollections decks = FModel.getDecks();
lstCommanderDecks.list.addItem("Generate"); lstCommanderDecks.list.addItem("Generate");
if (decks.getCommander().size() > 0) { if (decks.getCommander().size() > 0) {
@@ -554,7 +569,7 @@ public class ConstructedScreen extends LaunchScreen {
} }
lstPlanarDecks.setSelectedIndex(0); lstPlanarDecks.setSelectedIndex(0);
updateVanguardList(); updateVanguardList();*/
//disable team combo boxes for now //disable team combo boxes for now
cbTeam.setEnabled(false); cbTeam.setEnabled(false);

View File

@@ -224,7 +224,7 @@ public class FLabel extends FDisplayObject implements IButton {
g.startClip(0, 0, w, h); //start clip to ensure nothing escapes bounds g.startClip(0, 0, w, h); //start clip to ensure nothing escapes bounds
boolean applyAlphaComposite = (opaque && !pressed); boolean applyAlphaComposite = (opaque && !pressed && isEnabled());
if (applyAlphaComposite) { if (applyAlphaComposite) {
g.setAlphaComposite(alphaComposite); g.setAlphaComposite(alphaComposite);
} }