Support playing against Net Decks through the Test Deck function

on mobile Forge.
This commit is contained in:
Alexei Svitkine
2018-03-21 00:04:14 -04:00
parent fa66720fc7
commit f436fa895b
4 changed files with 54 additions and 39 deletions

View File

@@ -79,7 +79,7 @@ public enum CSubmenuGauntletQuick implements ICDoc {
if (view.getBoxQuestDecks().isSelected()) { allowedDeckTypes.add(DeckType.QUEST_OPPONENT_DECK); } if (view.getBoxQuestDecks().isSelected()) { allowedDeckTypes.add(DeckType.QUEST_OPPONENT_DECK); }
if (view.getBoxPreconDecks().isSelected()) { allowedDeckTypes.add(DeckType.PRECONSTRUCTED_DECK); } if (view.getBoxPreconDecks().isSelected()) { allowedDeckTypes.add(DeckType.PRECONSTRUCTED_DECK); }
final GauntletData gd = GauntletUtil.createQuickGauntlet(view.getLstDecks().getPlayer().getDeck(), view.getSliOpponents().getValue(), allowedDeckTypes); final GauntletData gd = GauntletUtil.createQuickGauntlet(view.getLstDecks().getPlayer().getDeck(), view.getSliOpponents().getValue(), allowedDeckTypes, null);
final List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); final List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
final RegisteredPlayer human = new RegisteredPlayer(gd.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer()); final RegisteredPlayer human = new RegisteredPlayer(gd.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer());

View File

@@ -971,9 +971,7 @@ public class FDeckChooser extends FScreen {
@Override @Override
public void run(final Integer numOpponents) { public void run(final Integer numOpponents) {
if (numOpponents == null) { return; } if (numOpponents == null) { return; }
List<DeckType> deckTypes=null; List<DeckType> deckTypes = Arrays.asList(
if(FModel.isdeckGenMatrixLoaded()) {
deckTypes=Arrays.asList(new DeckType[] {
DeckType.CUSTOM_DECK, DeckType.CUSTOM_DECK,
DeckType.PRECONSTRUCTED_DECK, DeckType.PRECONSTRUCTED_DECK,
DeckType.QUEST_OPPONENT_DECK, DeckType.QUEST_OPPONENT_DECK,
@@ -982,29 +980,37 @@ public class FDeckChooser extends FScreen {
DeckType.STANDARD_CARDGEN_DECK, DeckType.STANDARD_CARDGEN_DECK,
DeckType.MODERN_COLOR_DECK, DeckType.MODERN_COLOR_DECK,
DeckType.MODERN_CARDGEN_DECK, DeckType.MODERN_CARDGEN_DECK,
DeckType.THEME_DECK DeckType.THEME_DECK,
}); DeckType.NET_DECK
}else{ );
deckTypes=Arrays.asList(new DeckType[] { if (!FModel.isdeckGenMatrixLoaded()) {
DeckType.CUSTOM_DECK, deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK);
DeckType.PRECONSTRUCTED_DECK, deckTypes.remove(DeckType.MODERN_CARDGEN_DECK);
DeckType.QUEST_OPPONENT_DECK,
DeckType.COLOR_DECK,
DeckType.STANDARD_COLOR_DECK,
DeckType.MODERN_COLOR_DECK,
DeckType.THEME_DECK
});
} }
ListChooser<DeckType> chooser = new ListChooser<DeckType>( ListChooser<DeckType> chooser = new ListChooser<DeckType>(
"Choose allowed deck types for opponents", 0, 7, deckTypes, null, new Callback<List<DeckType>>() { "Choose allowed deck types for opponents", 0, deckTypes.size(), deckTypes, null, new Callback<List<DeckType>>() {
@Override @Override
public void run(final List<DeckType> allowedDeckTypes) { public void run(final List<DeckType> allowedDeckTypes) {
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) { return; } if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) { return; }
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks
@Override
public void run() {
final NetDeckCategory netCat;
if (allowedDeckTypes.contains(DeckType.NET_DECK)) {
netCat = NetDeckCategory.selectAndLoad(GameType.Constructed);
} else {
netCat = null;
}
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
LoadingOverlay.show("Loading new game...", new Runnable() { LoadingOverlay.show("Loading new game...", new Runnable() {
@Override @Override
public void run() { public void run() {
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes); GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, netCat);
FModel.setGauntletData(gauntlet); FModel.setGauntletData(gauntlet);
List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>();
@@ -1017,6 +1023,10 @@ public class FDeckChooser extends FScreen {
}); });
} }
}); });
}
});
}
});
chooser.show(null, true); chooser.show(null, true);
} }
}); });

View File

@@ -102,7 +102,7 @@ public class NewGauntletScreen extends LaunchScreen {
public void run(Deck userDeck) { public void run(Deck userDeck) {
if (userDeck == null) { return; } if (userDeck == null) { return; }
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes); GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
launchGauntlet(gauntlet); launchGauntlet(gauntlet);
} }
}); });

View File

@@ -1,18 +1,16 @@
package forge.gauntlet; package forge.gauntlet;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckType; import forge.deck.DeckType;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
import forge.deck.NetDeckCategory;
import forge.model.FModel; import forge.model.FModel;
public class GauntletUtil { public class GauntletUtil {
public static GauntletData createQuickGauntlet(final Deck userDeck, final int numOpponents, final List<DeckType> allowedDeckTypes) { public static GauntletData createQuickGauntlet(final Deck userDeck, final int numOpponents, final List<DeckType> allowedDeckTypes, NetDeckCategory netDecks) {
GauntletData gauntlet = new GauntletData(); GauntletData gauntlet = new GauntletData();
setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_QUICK); setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_QUICK);
FModel.setGauntletData(gauntlet); FModel.setGauntletData(gauntlet);
@@ -22,6 +20,8 @@ public class GauntletUtil {
final List<String> eventNames = new ArrayList<String>(); final List<String> eventNames = new ArrayList<String>();
final List<Deck> decks = new ArrayList<Deck>(); final List<Deck> decks = new ArrayList<Deck>();
final Object[] netDeckNames = netDecks != null ? netDecks.getItemNames().toArray() : null;
for (int i = 0; i < numOpponents; i++) { for (int i = 0; i < numOpponents; i++) {
int randType = (int)Math.floor(Math.random() * allowedDeckTypes.size()); int randType = (int)Math.floor(Math.random() * allowedDeckTypes.size());
switch (allowedDeckTypes.get(randType)) { switch (allowedDeckTypes.get(randType)) {
@@ -57,6 +57,11 @@ public class GauntletUtil {
deck = DeckgenUtil.getRandomThemeDeck(); deck = DeckgenUtil.getRandomThemeDeck();
eventNames.add(deck.getName()); eventNames.add(deck.getName());
break; break;
case NET_DECK:
int deckIndex = (int)Math.floor(Math.random() * netDeckNames.length);
deck = netDecks.get((String) netDeckNames[deckIndex]);
eventNames.add(deck.getName());
break;
default: default:
continue; continue;
} }