mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Added UI elements required for Brawl variant
This commit is contained in:
@@ -162,7 +162,7 @@ public enum DeckFormat {
|
||||
}
|
||||
|
||||
private boolean hasCommander() {
|
||||
return this == Commander || this == TinyLeaders;
|
||||
return this == Commander || this == TinyLeaders || this == Brawl;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -78,7 +78,8 @@ public class GameRules {
|
||||
}
|
||||
|
||||
public boolean hasCommander() {
|
||||
return appliedVariants.contains(GameType.Commander) || appliedVariants.contains(GameType.TinyLeaders);
|
||||
return appliedVariants.contains(GameType.Commander) || appliedVariants.contains(GameType.TinyLeaders)
|
||||
|| appliedVariants.contains(GameType.Brawl);
|
||||
}
|
||||
|
||||
public boolean canCloneUseTargetsImage() {
|
||||
|
||||
@@ -124,6 +124,10 @@ public class RegisteredPlayer {
|
||||
start.commanders = deck.getCommanders();
|
||||
start.setStartingLife(start.getStartingLife() + 5);
|
||||
}
|
||||
if (appliedVariants.contains(GameType.Brawl)) {
|
||||
start.commanders = deck.getCommanders();
|
||||
start.setStartingLife(start.getStartingLife() + 10);
|
||||
}
|
||||
if (appliedVariants.contains(GameType.Planechase)) {
|
||||
start.planes = planes;
|
||||
}
|
||||
|
||||
@@ -136,6 +136,8 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
updateDecks(DeckProxy.getAllCommanderDecks(), ItemManagerConfig.COMMANDER_DECKS);
|
||||
}else if(deckFormat.equals(DeckFormat.TinyLeaders)){
|
||||
updateDecks(DeckProxy.getAllTinyLeadersDecks(), ItemManagerConfig.COMMANDER_DECKS);
|
||||
}else if(deckFormat.equals(DeckFormat.Brawl)){
|
||||
updateDecks(DeckProxy.getAllBrawlDecks(), ItemManagerConfig.COMMANDER_DECKS);
|
||||
}else {
|
||||
updateDecks(DeckProxy.getAllConstructedDecks(), ItemManagerConfig.CONSTRUCTED_DECKS);
|
||||
}
|
||||
|
||||
@@ -79,6 +79,15 @@ public class FScreen {
|
||||
"Close Editor",
|
||||
ForgeConstants.EDITOR_LAYOUT_FILE,
|
||||
false);
|
||||
public static final FScreen DECK_EDITOR_BRAWL = new FScreen(
|
||||
VDeckEditorUI.SINGLETON_INSTANCE,
|
||||
CDeckEditorUI.SINGLETON_INSTANCE,
|
||||
"Brawl Deck Editor",
|
||||
FSkin.getImage(FSkinProp.IMG_PACK),
|
||||
true,
|
||||
"Close Editor",
|
||||
ForgeConstants.EDITOR_LAYOUT_FILE,
|
||||
false);
|
||||
public static final FScreen DECK_EDITOR_PLANECHASE = new FScreen(
|
||||
VDeckEditorUI.SINGLETON_INSTANCE,
|
||||
CDeckEditorUI.SINGLETON_INSTANCE,
|
||||
|
||||
@@ -95,6 +95,14 @@ public class CLobby {
|
||||
view.focusOnAvatar();
|
||||
}
|
||||
});
|
||||
final FDeckChooser fdbcom = view.getBrawlDeckChooser(iSlot);
|
||||
fdbcom.initialize(FPref.BRAWL_DECK_STATES[iSlot], defaultDeckTypeForBrawlSlot(iSlot));
|
||||
fdbcom.populate();
|
||||
fdbcom.getDecksComboBox().addListener(new IDecksComboBoxListener() {
|
||||
@Override public final void deckTypeSelected(final DecksComboBoxEvent ev) {
|
||||
view.focusOnAvatar();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
final ForgePreferences prefs = FModel.getPreferences();
|
||||
@@ -131,4 +139,8 @@ public class CLobby {
|
||||
private static DeckType defaultDeckTypeForTinyLeaderSlot(final int iSlot) {
|
||||
return iSlot == 0 ? DeckType.TINY_LEADERS_DECKS : DeckType.RANDOM_CARDGEN_COMMANDER_DECK;
|
||||
}
|
||||
|
||||
private static DeckType defaultDeckTypeForBrawlSlot(final int iSlot) {
|
||||
return iSlot == 0 ? DeckType.BRAWL_DECKS : DeckType.CUSTOM_DECK;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -335,7 +335,8 @@ public class PlayerPanel extends FPanel {
|
||||
|
||||
private void updateVariantControlsVisibility() {
|
||||
final boolean isTinyLeaders = lobby.hasVariant(GameType.TinyLeaders);
|
||||
final boolean isCommanderApplied = mayEdit && (lobby.hasVariant(GameType.Commander) || isTinyLeaders);
|
||||
final boolean isBrawl = lobby.hasVariant(GameType.Brawl);
|
||||
final boolean isCommanderApplied = mayEdit && (lobby.hasVariant(GameType.Commander) || isTinyLeaders || isBrawl);
|
||||
final boolean isPlanechaseApplied = mayEdit && lobby.hasVariant(GameType.Planechase);
|
||||
final boolean isVanguardApplied = mayEdit && lobby.hasVariant(GameType.Vanguard);
|
||||
final boolean isArchenemyApplied = mayEdit && lobby.hasVariant(GameType.Archenemy);
|
||||
@@ -508,7 +509,7 @@ public class PlayerPanel extends FPanel {
|
||||
cmdDeckSelectorBtn.setCommand(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
lobby.setCurrentGameMode(lobby.hasVariant(GameType.TinyLeaders) ? GameType.TinyLeaders : GameType.Commander);
|
||||
lobby.setCurrentGameMode(lobby.hasVariant(GameType.TinyLeaders) ? GameType.TinyLeaders : lobby.hasVariant(GameType.Brawl) ? GameType.Brawl : GameType.Commander);
|
||||
cmdDeckSelectorBtn.requestFocusInWindow();
|
||||
lobby.changePlayerFocus(index);
|
||||
}
|
||||
@@ -521,6 +522,10 @@ public class PlayerPanel extends FPanel {
|
||||
lobby.setCurrentGameMode(GameType.TinyLeaders);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_TINY_LEADERS);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(), true));
|
||||
} else if (lobby.hasVariant(GameType.Brawl)) {
|
||||
lobby.setCurrentGameMode(GameType.Brawl);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_BRAWL);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(), true));
|
||||
} else {
|
||||
lobby.setCurrentGameMode(GameType.Commander);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
|
||||
|
||||
@@ -91,13 +91,14 @@ public class VLobby implements ILobbyView {
|
||||
private final VariantCheckBox vntMomirBasic = new VariantCheckBox(GameType.MomirBasic);
|
||||
private final VariantCheckBox vntCommander = new VariantCheckBox(GameType.Commander);
|
||||
private final VariantCheckBox vntTinyLeaders = new VariantCheckBox(GameType.TinyLeaders);
|
||||
private final VariantCheckBox vntBrawl = new VariantCheckBox(GameType.Brawl);
|
||||
private final VariantCheckBox vntPlanechase = new VariantCheckBox(GameType.Planechase);
|
||||
private final VariantCheckBox vntArchenemy = new VariantCheckBox(GameType.Archenemy);
|
||||
private final VariantCheckBox vntArchenemyRumble = new VariantCheckBox(GameType.ArchenemyRumble);
|
||||
private final ImmutableList<VariantCheckBox> vntBoxesLocal =
|
||||
ImmutableList.of(vntVanguard, vntMomirBasic, vntCommander, vntTinyLeaders, vntPlanechase, vntArchenemy, vntArchenemyRumble);
|
||||
ImmutableList.of(vntVanguard, vntMomirBasic, vntCommander, vntTinyLeaders, vntBrawl, vntPlanechase, vntArchenemy, vntArchenemyRumble);
|
||||
private final ImmutableList<VariantCheckBox> vntBoxesNetwork =
|
||||
ImmutableList.of(vntVanguard, vntMomirBasic, vntCommander, vntTinyLeaders /*, vntPlanechase, vntArchenemy, vntArchenemyRumble */);
|
||||
ImmutableList.of(vntVanguard, vntMomirBasic, vntCommander, vntTinyLeaders, vntBrawl /*, vntPlanechase, vntArchenemy, vntArchenemyRumble */);
|
||||
|
||||
// Player frame elements
|
||||
private final JPanel playersFrame = new JPanel(new MigLayout("insets 0, gap 0 5, wrap, hidemode 3"));
|
||||
@@ -119,8 +120,13 @@ public class VLobby implements ILobbyView {
|
||||
|
||||
private final List<FList<Object>> tinyLeadersDeckLists = new ArrayList<FList<Object>>();
|
||||
private final List<FPanel> tinyLeadersDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
|
||||
|
||||
private final List<FList<Object>> brawlDeckLists = new ArrayList<FList<Object>>();
|
||||
private final List<FPanel> brawlDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
|
||||
|
||||
private final List<FDeckChooser> commanderDeckChoosers = Lists.newArrayListWithCapacity(MAX_PLAYERS);
|
||||
private final List<FDeckChooser> tinyLeadersDeckChoosers = Lists.newArrayListWithCapacity(MAX_PLAYERS);
|
||||
private final List<FDeckChooser> brawlDeckChoosers = Lists.newArrayListWithCapacity(MAX_PLAYERS);
|
||||
|
||||
private final List<FList<Object>> schemeDeckLists = new ArrayList<FList<Object>>();
|
||||
private final List<FPanel> schemeDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
|
||||
@@ -227,6 +233,8 @@ public class VLobby implements ILobbyView {
|
||||
fdcom.restoreSavedState();
|
||||
final FDeckChooser fdtl = getTinyLeaderDeckChooser(iPlayer);
|
||||
fdtl.restoreSavedState();
|
||||
final FDeckChooser fdbr = getBrawlDeckChooser(iPlayer);
|
||||
fdbr.restoreSavedState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,6 +280,17 @@ public class VLobby implements ILobbyView {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
final FDeckChooser brawlDeckChooser = getBrawlDeckChooser(slot);
|
||||
brawlDeckChooser.setIsAi(type==LobbySlotType.AI);
|
||||
selectedDeckType = brawlDeckChooser.getSelectedDeckType();
|
||||
switch (selectedDeckType){
|
||||
case RANDOM_CARDGEN_COMMANDER_DECK:
|
||||
case RANDOM_COMMANDER_DECK:
|
||||
brawlDeckChooser.refreshDeckListForAI();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -299,6 +318,7 @@ public class VLobby implements ILobbyView {
|
||||
final FDeckChooser deckChooser = getDeckChooser(i);
|
||||
final FDeckChooser commanderDeckChooser = getCommanderDeckChooser(i);
|
||||
final FDeckChooser tinyLeaderDeckChooser = getTinyLeaderDeckChooser(i);
|
||||
final FDeckChooser brawlDeckChooser = getBrawlDeckChooser(i);
|
||||
final PlayerPanel panel;
|
||||
final boolean isNewPanel;
|
||||
if (hasPanel) {
|
||||
@@ -315,6 +335,7 @@ public class VLobby implements ILobbyView {
|
||||
deckChooser.restoreSavedState();
|
||||
commanderDeckChooser.restoreSavedState();
|
||||
tinyLeaderDeckChooser.restoreSavedState();
|
||||
brawlDeckChooser.restoreSavedState();
|
||||
if (i == 0) {
|
||||
slot.setIsDevMode(prefs.getPrefBoolean(FPref.DEV_MODE_ENABLED));
|
||||
changePlayerFocus(0);
|
||||
@@ -341,6 +362,7 @@ public class VLobby implements ILobbyView {
|
||||
deckChooser.setIsAi(isSlotAI);
|
||||
commanderDeckChooser.setIsAi(isSlotAI);
|
||||
tinyLeaderDeckChooser.setIsAi(isSlotAI);
|
||||
brawlDeckChooser.setIsAi(isSlotAI);
|
||||
if (fullUpdate && (type == LobbySlotType.LOCAL || isSlotAI)) {
|
||||
selectDeck(i);
|
||||
}
|
||||
@@ -461,6 +483,15 @@ public class VLobby implements ILobbyView {
|
||||
tinyLeaderChooser.initialize();
|
||||
tinyLeadersDeckChoosers.add(tinyLeaderChooser);
|
||||
|
||||
final FDeckChooser brawlChooser = new FDeckChooser(null, isPlayerAI(playerIndex), GameType.Brawl, true);
|
||||
brawlChooser.getLstDecks().setSelectCommand(new UiCommand() {
|
||||
@Override public final void run() {
|
||||
selectBrawlDeck(playerIndex);
|
||||
}
|
||||
});
|
||||
brawlChooser.initialize();
|
||||
brawlDeckChoosers.add(brawlChooser);
|
||||
|
||||
|
||||
/* // Tiny Leaders deck list
|
||||
buildDeckPanel("Tiny Leaders Deck", playerIndex, tinyLeadersDeckLists, tinyLeadersDeckPanels, new ListSelectionListener() {
|
||||
@@ -523,7 +554,7 @@ public class VLobby implements ILobbyView {
|
||||
}
|
||||
|
||||
private void selectMainDeck(final int playerIndex) {
|
||||
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders)) {
|
||||
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders) || hasVariant(GameType.Brawl)) {
|
||||
// These game types use specific deck panel
|
||||
return;
|
||||
}
|
||||
@@ -573,6 +604,23 @@ public class VLobby implements ILobbyView {
|
||||
mainChooser.saveState();
|
||||
}
|
||||
|
||||
private void selectBrawlDeck(final int playerIndex) {
|
||||
if (!hasVariant(GameType.Brawl)) {
|
||||
// Only these game types use this specific deck panel
|
||||
return;
|
||||
}
|
||||
final FDeckChooser mainChooser = getBrawlDeckChooser(playerIndex);
|
||||
final DeckType type = mainChooser.getSelectedDeckType();
|
||||
final Deck deck = mainChooser.getDeck();
|
||||
final Collection<DeckProxy> selectedDecks = mainChooser.getLstDecks().getSelectedItems();
|
||||
if (playerIndex < activePlayersNum && lobby.mayEdit(playerIndex)) {
|
||||
final String text = type.toString() + ": " + Lang.joinHomogenous(selectedDecks, DeckProxy.FN_GET_NAME);
|
||||
playerPanels.get(playerIndex).setCommanderDeckSelectorButtonText(text);
|
||||
fireDeckChangeListener(playerIndex, deck);
|
||||
}
|
||||
mainChooser.saveState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void selectSchemeDeck(final int playerIndex) {
|
||||
@@ -712,6 +760,9 @@ public class VLobby implements ILobbyView {
|
||||
case TinyLeaders:
|
||||
decksFrame.add(tinyLeadersDeckChoosers.get(playerWithFocus), "grow, push");
|
||||
break;
|
||||
case Brawl:
|
||||
decksFrame.add(brawlDeckChoosers.get(playerWithFocus), "grow, push");
|
||||
break;
|
||||
case Planechase:
|
||||
decksFrame.add(planarDeckPanels.get(playerWithFocus), "grow, push");
|
||||
break;
|
||||
@@ -763,6 +814,10 @@ public class VLobby implements ILobbyView {
|
||||
return tinyLeadersDeckChoosers.get(playernum);
|
||||
}
|
||||
|
||||
public final FDeckChooser getBrawlDeckChooser(final int playernum) {
|
||||
return brawlDeckChoosers.get(playernum);
|
||||
}
|
||||
|
||||
GameType getCurrentGameMode() {
|
||||
return lobby.getGameType();
|
||||
}
|
||||
@@ -921,6 +976,11 @@ public class VLobby implements ILobbyView {
|
||||
return tinyLeadersDeckLists;
|
||||
}
|
||||
|
||||
/** Gets the list of tiny leaders deck lists. */
|
||||
public List<FList<Object>> getBrawlDeckLists() {
|
||||
return brawlDeckLists;
|
||||
}
|
||||
|
||||
/** Gets the list of scheme deck lists. */
|
||||
public List<FList<Object>> getSchemeDeckLists() {
|
||||
return schemeDeckLists;
|
||||
|
||||
@@ -183,6 +183,7 @@ public class FDeckChooser extends FScreen {
|
||||
break; //delay initialize for constructed until saved decks can be reloaded
|
||||
case Commander:
|
||||
case TinyLeaders:
|
||||
case Brawl:
|
||||
case Gauntlet:
|
||||
initialize(null, DeckType.CUSTOM_DECK);
|
||||
break;
|
||||
@@ -220,6 +221,9 @@ public class FDeckChooser extends FScreen {
|
||||
case TinyLeaders:
|
||||
lstDecks.setSelectedString(DeckPreferences.getTinyLeadersDeck());
|
||||
break;
|
||||
case Brawl:
|
||||
lstDecks.setSelectedString(DeckPreferences.getBrawlDeck());
|
||||
break;
|
||||
case Archenemy:
|
||||
lstDecks.setSelectedString(DeckPreferences.getSchemeDeck());
|
||||
break;
|
||||
@@ -389,6 +393,8 @@ public class FDeckChooser extends FScreen {
|
||||
return EditorType.Commander;
|
||||
case TinyLeaders:
|
||||
return EditorType.TinyLeaders;
|
||||
case Brawl:
|
||||
return EditorType.Brawl;
|
||||
case Archenemy:
|
||||
return EditorType.Archenemy;
|
||||
case Planechase:
|
||||
@@ -454,6 +460,7 @@ public class FDeckChooser extends FScreen {
|
||||
break;
|
||||
case Commander:
|
||||
case TinyLeaders:
|
||||
case Brawl:
|
||||
cmbDeckTypes.addItem(DeckType.CUSTOM_DECK);
|
||||
cmbDeckTypes.addItem(DeckType.RANDOM_DECK);
|
||||
if(FModel.isdeckGenMatrixLoaded()) {
|
||||
@@ -564,6 +571,10 @@ public class FDeckChooser extends FScreen {
|
||||
pool = DeckProxy.getAllTinyLeadersDecks();
|
||||
config = ItemManagerConfig.COMMANDER_DECKS;
|
||||
break;
|
||||
case Brawl:
|
||||
pool = DeckProxy.getAllBrawlDecks();
|
||||
config = ItemManagerConfig.COMMANDER_DECKS;
|
||||
break;
|
||||
case Archenemy:
|
||||
pool = DeckProxy.getAllSchemeDecks();
|
||||
config = ItemManagerConfig.SCHEME_DECKS;
|
||||
@@ -971,6 +982,12 @@ public class FDeckChooser extends FScreen {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selectedDeckType == DeckType.BRAWL_DECKS) {
|
||||
//cannot create gauntlet for tiny leaders decks, so just start single match
|
||||
testVariantDeck(userDeck, GameType.Brawl);
|
||||
return;
|
||||
}
|
||||
|
||||
GuiChoose.getInteger("How many opponents are you willing to face?", 1, 50, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(final Integer numOpponents) {
|
||||
|
||||
@@ -89,6 +89,12 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
||||
return new Deck();
|
||||
}
|
||||
}), DeckFormat.TinyLeaders.isLegalCardPredicate()),
|
||||
Brawl(new DeckController<Deck>(FModel.getDecks().getCommander(), new Supplier<Deck>() {
|
||||
@Override
|
||||
public Deck get() {
|
||||
return new Deck();
|
||||
}
|
||||
}), Predicates.and(DeckFormat.Brawl.isLegalCardPredicate(),FModel.getFormats().getStandard().getFilterPrinted())),//include standard format requirement
|
||||
Archenemy(new DeckController<Deck>(FModel.getDecks().getScheme(), new Supplier<Deck>() {
|
||||
@Override
|
||||
public Deck get() {
|
||||
|
||||
@@ -122,6 +122,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
||||
cbVariants.addItem(GameType.MomirBasic);
|
||||
cbVariants.addItem(GameType.Commander);
|
||||
cbVariants.addItem(GameType.TinyLeaders);
|
||||
cbVariants.addItem(GameType.Brawl);
|
||||
cbVariants.addItem(GameType.Planechase);
|
||||
cbVariants.addItem(GameType.Archenemy);
|
||||
cbVariants.addItem(GameType.ArchenemyRumble);
|
||||
@@ -154,13 +155,13 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
||||
FThreads.invokeInBackgroundThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
playerPanels.get(0).initialize(FPref.CONSTRUCTED_P1_DECK_STATE, FPref.COMMANDER_P1_DECK_STATE, FPref.TINY_LEADER_P1_DECK_STATE, DeckType.PRECONSTRUCTED_DECK);
|
||||
playerPanels.get(1).initialize(FPref.CONSTRUCTED_P2_DECK_STATE, FPref.COMMANDER_P2_DECK_STATE, FPref.TINY_LEADER_P2_DECK_STATE, DeckType.COLOR_DECK);
|
||||
playerPanels.get(0).initialize(FPref.CONSTRUCTED_P1_DECK_STATE, FPref.COMMANDER_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.TINY_LEADER_P2_DECK_STATE, FPref.BRAWL_P2_DECK_STATE, DeckType.COLOR_DECK);
|
||||
if(getNumPlayers()>2) {
|
||||
playerPanels.get(2).initialize(FPref.CONSTRUCTED_P3_DECK_STATE, FPref.COMMANDER_P3_DECK_STATE, FPref.TINY_LEADER_P3_DECK_STATE, DeckType.COLOR_DECK);
|
||||
playerPanels.get(2).initialize(FPref.CONSTRUCTED_P3_DECK_STATE, FPref.COMMANDER_P3_DECK_STATE, FPref.TINY_LEADER_P3_DECK_STATE, FPref.BRAWL_P3_DECK_STATE, DeckType.COLOR_DECK);
|
||||
}
|
||||
if(getNumPlayers()>3) {
|
||||
playerPanels.get(3).initialize(FPref.CONSTRUCTED_P4_DECK_STATE, FPref.COMMANDER_P4_DECK_STATE, FPref.TINY_LEADER_P4_DECK_STATE, DeckType.COLOR_DECK);
|
||||
playerPanels.get(3).initialize(FPref.CONSTRUCTED_P4_DECK_STATE, FPref.COMMANDER_P4_DECK_STATE, FPref.TINY_LEADER_P4_DECK_STATE, FPref.BRAWL_P4_DECK_STATE, DeckType.COLOR_DECK);
|
||||
}
|
||||
/*playerPanels.get(4).initialize(FPref.CONSTRUCTED_P5_DECK_STATE, DeckType.COLOR_DECK);
|
||||
playerPanels.get(5).initialize(FPref.CONSTRUCTED_P6_DECK_STATE, DeckType.COLOR_DECK);
|
||||
@@ -346,6 +347,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
||||
lstVariants.addItem(new Variant(GameType.MomirBasic));
|
||||
lstVariants.addItem(new Variant(GameType.Commander));
|
||||
lstVariants.addItem(new Variant(GameType.TinyLeaders));
|
||||
lstVariants.addItem(new Variant(GameType.Brawl));
|
||||
lstVariants.addItem(new Variant(GameType.Planechase));
|
||||
lstVariants.addItem(new Variant(GameType.Archenemy));
|
||||
lstVariants.addItem(new Variant(GameType.ArchenemyRumble));
|
||||
@@ -479,10 +481,10 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
||||
else {
|
||||
panel = new PlayerPanel(this, allowNetworking, i, slot, lobby.mayEdit(i), lobby.hasControl());
|
||||
if(i==2) {
|
||||
panel.initialize(FPref.CONSTRUCTED_P3_DECK_STATE, FPref.COMMANDER_P3_DECK_STATE, FPref.TINY_LEADER_P3_DECK_STATE, DeckType.COLOR_DECK);
|
||||
panel.initialize(FPref.CONSTRUCTED_P3_DECK_STATE, FPref.COMMANDER_P3_DECK_STATE, FPref.TINY_LEADER_P3_DECK_STATE, FPref.BRAWL_P3_DECK_STATE, DeckType.COLOR_DECK);
|
||||
}
|
||||
if(i==3) {
|
||||
panel.initialize(FPref.CONSTRUCTED_P4_DECK_STATE, FPref.COMMANDER_P4_DECK_STATE, FPref.TINY_LEADER_P4_DECK_STATE, DeckType.COLOR_DECK);
|
||||
panel.initialize(FPref.CONSTRUCTED_P4_DECK_STATE, FPref.COMMANDER_P4_DECK_STATE, FPref.TINY_LEADER_P4_DECK_STATE, FPref.BRAWL_P4_DECK_STATE, DeckType.COLOR_DECK);
|
||||
}
|
||||
playerPanels.add(panel);
|
||||
playersScroll.add(panel);
|
||||
@@ -534,7 +536,10 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
||||
deck = playerPanel.getTinyLeadersDeck();
|
||||
playerPanel.getTinyLeadersDeckChooser().saveState();
|
||||
}
|
||||
else {
|
||||
else if (hasVariant(GameType.Brawl)) {
|
||||
deck = playerPanel.getBrawlDeck();
|
||||
playerPanel.getBrawlDeckChooser().saveState();
|
||||
}else {
|
||||
deck = playerPanel.getDeck();
|
||||
playerPanel.getDeckChooser().saveState();
|
||||
}
|
||||
|
||||
@@ -71,10 +71,11 @@ public class PlayerPanel extends FContainer {
|
||||
private final FLabel btnSchemeDeck = new FLabel.ButtonBuilder().text("Scheme Deck: Random Generated Deck").build();
|
||||
private final FLabel btnCommanderDeck = new FLabel.ButtonBuilder().text("Commander Deck: Random Generated Deck").build();
|
||||
private final FLabel btnTinyLeadersDeck = new FLabel.ButtonBuilder().text("Tiny Leaders Deck: Random Generated Deck").build();
|
||||
private final FLabel btnBrawlDeck = new FLabel.ButtonBuilder().text("Brawl Deck: Random Generated Deck").build();
|
||||
private final FLabel btnPlanarDeck = new FLabel.ButtonBuilder().text("Planar Deck: Random Generated Deck").build();
|
||||
private final FLabel btnVanguardAvatar = new FLabel.ButtonBuilder().text("Vanguard Avatar: Random").build();
|
||||
|
||||
private final FDeckChooser deckChooser, lstSchemeDecks, lstCommanderDecks, lstTinyLeadersDecks, lstPlanarDecks;
|
||||
private final FDeckChooser deckChooser, lstSchemeDecks, lstCommanderDecks, lstTinyLeadersDecks, lstBrawlDecks, lstPlanarDecks;
|
||||
private final FVanguardChooser lstVanguardAvatars;
|
||||
|
||||
public PlayerPanel(final LobbyScreen screen0, final boolean allowNetworking0, final int index0, final LobbySlot slot, final boolean mayEdit0, final boolean mayControl0) {
|
||||
@@ -128,6 +129,17 @@ public class PlayerPanel extends FContainer {
|
||||
}
|
||||
}
|
||||
});
|
||||
lstBrawlDecks = new FDeckChooser(GameType.Brawl, isAi, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if( ((DeckManager)e.getSource()).getSelectedItem() != null) {
|
||||
btnTinyLeadersDeck.setText("Brawl Deck: " + ((DeckManager) e.getSource()).getSelectedItem().getName());
|
||||
lstTinyLeadersDecks.saveState();
|
||||
}else{
|
||||
btnTinyLeadersDeck.setText("Brawl Deck");
|
||||
}
|
||||
}
|
||||
});
|
||||
lstSchemeDecks = new FDeckChooser(GameType.Archenemy, isAi, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
@@ -235,10 +247,11 @@ public class PlayerPanel extends FContainer {
|
||||
cbTeam.setEnabled(true);
|
||||
}
|
||||
|
||||
public void initialize(FPref savedStateSetting, FPref savedStateSettingCommander, FPref savedStateSettingTinyLeader, DeckType defaultDeckType) {
|
||||
public void initialize(FPref savedStateSetting, FPref savedStateSettingCommander, FPref savedStateSettingTinyLeader, FPref savedStateSettingBrawl, DeckType defaultDeckType) {
|
||||
deckChooser.initialize(savedStateSetting, defaultDeckType);
|
||||
lstCommanderDecks.initialize(savedStateSettingCommander, DeckType.COMMANDER_DECK);
|
||||
lstTinyLeadersDecks.initialize(savedStateSettingTinyLeader, DeckType.TINY_LEADERS_DECKS);
|
||||
lstBrawlDecks.initialize(savedStateSettingBrawl, DeckType.BRAWL_DECKS);
|
||||
lstPlanarDecks.initialize(null, DeckType.RANDOM_DECK);
|
||||
lstSchemeDecks.initialize(null, DeckType.RANDOM_DECK);
|
||||
}
|
||||
@@ -404,6 +417,7 @@ public class PlayerPanel extends FContainer {
|
||||
public void updateVariantControlsVisibility() {
|
||||
boolean isCommanderApplied = false;
|
||||
boolean isTinyLeadersApplied = false;
|
||||
boolean isBrawlApplied = false;
|
||||
boolean isPlanechaseApplied = false;
|
||||
boolean isVanguardApplied = false;
|
||||
boolean isArchenemyApplied = false;
|
||||
@@ -429,6 +443,10 @@ public class PlayerPanel extends FContainer {
|
||||
isTinyLeadersApplied = true;
|
||||
isDeckBuildingAllowed = false; //Tiny Leaders deck replaces basic deck, so hide that
|
||||
break;
|
||||
case Brawl:
|
||||
isBrawlApplied = true;
|
||||
isDeckBuildingAllowed = false; //Tiny Leaders deck replaces basic deck, so hide that
|
||||
break;
|
||||
case Planechase:
|
||||
isPlanechaseApplied = true;
|
||||
break;
|
||||
@@ -693,6 +711,10 @@ public class PlayerPanel extends FContainer {
|
||||
return lstTinyLeadersDecks;
|
||||
}
|
||||
|
||||
public FDeckChooser getBrawlDeckChooser() {
|
||||
return lstBrawlDecks;
|
||||
}
|
||||
|
||||
|
||||
public Deck getDeck() {
|
||||
return deckChooser.getDeck();
|
||||
@@ -706,6 +728,10 @@ public class PlayerPanel extends FContainer {
|
||||
return lstTinyLeadersDecks.getDeck();
|
||||
}
|
||||
|
||||
public Deck getBrawlDeck() {
|
||||
return lstBrawlDecks.getDeck();
|
||||
}
|
||||
|
||||
public Deck getSchemeDeck() {
|
||||
return lstSchemeDecks.getDeck();
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public class ConstructedAchievements extends AchievementCollection {
|
||||
add(new VariantWins(GameType.MomirBasic, 25, 50, 100));
|
||||
add(new VariantWins(GameType.Commander, 25, 50, 100));
|
||||
add(new VariantWins(GameType.TinyLeaders, 25, 50, 100));
|
||||
add(new VariantWins(GameType.Brawl, 25, 50, 100));
|
||||
add(new VariantWins(GameType.Planechase, 25, 50, 100));
|
||||
add(new VariantWins(GameType.Archenemy, 25, 50, 100));
|
||||
add(new Poisoned(15, 25, 40));
|
||||
|
||||
@@ -370,6 +370,27 @@ public class DeckProxy implements InventoryItem {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllBrawlDecks() {
|
||||
return getAllBrawlDecks(null);
|
||||
}
|
||||
public static Iterable<DeckProxy> getAllBrawlDecks(Predicate<Deck> filter) {
|
||||
final List<DeckProxy> result = new ArrayList<DeckProxy>();
|
||||
if (filter == null) {
|
||||
filter = DeckFormat.Brawl.hasLegalCardsPredicate();
|
||||
}
|
||||
else {
|
||||
filter = Predicates.and(DeckFormat.Brawl.hasLegalCardsPredicate(), filter);
|
||||
}
|
||||
filter = Predicates.and(new Predicate<Deck>() {
|
||||
@Override
|
||||
public boolean apply(Deck input) {
|
||||
return FModel.getFormats().getStandard().isDeckLegal(input);
|
||||
}
|
||||
}, filter);
|
||||
addDecksRecursivelly("Tiny Leaders", GameType.Brawl, result, "", FModel.getDecks().getBrawl(), filter);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Iterable<DeckProxy> getAllSchemeDecks() {
|
||||
return getAllSchemeDecks(null);
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ public enum DeckType {
|
||||
RANDOM_COMMANDER_DECK ("Random Commander Decks"),
|
||||
RANDOM_CARDGEN_COMMANDER_DECK ("Random Commander Card-based Decks"),
|
||||
TINY_LEADERS_DECKS ("Tiny Leaders Decks"),
|
||||
BRAWL_DECKS ("Brawl Decks"),
|
||||
SCHEME_DECKS ("Scheme Decks"),
|
||||
PLANAR_DECKS ("Planar Decks"),
|
||||
DRAFT_DECKS ("Draft Decks"),
|
||||
|
||||
@@ -135,6 +135,9 @@ public class RandomDeckGenerator extends DeckProxy implements Comparable<RandomD
|
||||
case TinyLeaders:
|
||||
decks = DeckProxy.getAllTinyLeadersDecks(DeckFormat.TinyLeaders.isLegalDeckPredicate());
|
||||
break;
|
||||
case Brawl:
|
||||
decks = DeckProxy.getAllBrawlDecks(DeckFormat.Brawl.isLegalDeckPredicate());
|
||||
break;
|
||||
case Archenemy:
|
||||
decks = DeckProxy.getAllSchemeDecks(DeckFormat.Archenemy.isLegalDeckPredicate());
|
||||
break;
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.w3c.dom.NodeList;
|
||||
*
|
||||
*/
|
||||
public class DeckPreferences {
|
||||
private static String currentDeck = "", draftDeck = "", sealedDeck = "", commanderDeck = "", tinyLeadersDeck = "", planarDeck = "", schemeDeck = "";
|
||||
private static String currentDeck = "", draftDeck = "", sealedDeck = "", commanderDeck = "", tinyLeadersDeck = "", brawlDeck = "", planarDeck = "", schemeDeck = "";
|
||||
private static Map<String, DeckPreferences> allPrefs = new HashMap<String, DeckPreferences>();
|
||||
|
||||
public static String getCurrentDeck() {
|
||||
@@ -69,6 +69,15 @@ public class DeckPreferences {
|
||||
save();
|
||||
}
|
||||
|
||||
public static String getBrawlDeck() {
|
||||
return brawlDeck;
|
||||
}
|
||||
public static void setBrawlDeck(String brawlDeck0) {
|
||||
if (brawlDeck.equals(brawlDeck0)) { return; }
|
||||
brawlDeck = brawlDeck0;
|
||||
save();
|
||||
}
|
||||
|
||||
public static String getPlanarDeck() {
|
||||
return planarDeck;
|
||||
}
|
||||
|
||||
@@ -232,10 +232,17 @@ public abstract class GameLobby implements IHasGameType {
|
||||
break;
|
||||
case Commander:
|
||||
data.appliedVariants.remove(GameType.TinyLeaders);
|
||||
data.appliedVariants.remove(GameType.Brawl);
|
||||
data.appliedVariants.remove(GameType.MomirBasic);
|
||||
break;
|
||||
case TinyLeaders:
|
||||
data.appliedVariants.remove(GameType.Commander);
|
||||
data.appliedVariants.remove(GameType.Brawl);
|
||||
data.appliedVariants.remove(GameType.MomirBasic);
|
||||
break;
|
||||
case Brawl:
|
||||
data.appliedVariants.remove(GameType.Commander);
|
||||
data.appliedVariants.remove(GameType.TinyLeaders);
|
||||
data.appliedVariants.remove(GameType.MomirBasic);
|
||||
break;
|
||||
case Vanguard:
|
||||
@@ -244,6 +251,7 @@ public abstract class GameLobby implements IHasGameType {
|
||||
case MomirBasic:
|
||||
data.appliedVariants.remove(GameType.Commander);
|
||||
data.appliedVariants.remove(GameType.TinyLeaders);
|
||||
data.appliedVariants.remove(GameType.Brawl);
|
||||
data.appliedVariants.remove(GameType.Vanguard);
|
||||
break;
|
||||
default:
|
||||
@@ -263,6 +271,8 @@ public abstract class GameLobby implements IHasGameType {
|
||||
currentGameType = GameType.Commander;
|
||||
} else if (hasVariant(GameType.TinyLeaders)) {
|
||||
currentGameType = GameType.TinyLeaders;
|
||||
} else if (hasVariant(GameType.Brawl)) {
|
||||
currentGameType = GameType.Brawl;
|
||||
} else {
|
||||
currentGameType = GameType.Constructed;
|
||||
}
|
||||
@@ -326,7 +336,7 @@ public abstract class GameLobby implements IHasGameType {
|
||||
SOptionPane.showMessageDialog(TextUtil.concatNoSpace("Please specify a deck for ", slot.getName()));
|
||||
return null;
|
||||
}
|
||||
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders)) {
|
||||
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders) || hasVariant(GameType.Brawl)) {
|
||||
if (!slot.getDeck().has(DeckSection.Commander)) {
|
||||
SOptionPane.showMessageDialog(TextUtil.concatNoSpace(slot.getName(), " doesn't have a commander"));
|
||||
return null;
|
||||
@@ -339,9 +349,11 @@ public abstract class GameLobby implements IHasGameType {
|
||||
GameType autoGenerateVariant = null;
|
||||
boolean isCommanderMatch = false;
|
||||
boolean isTinyLeadersMatch = false;
|
||||
boolean isBrawlMatch = false;
|
||||
if (!variantTypes.isEmpty()) {
|
||||
isTinyLeadersMatch = variantTypes.contains(GameType.TinyLeaders);
|
||||
isCommanderMatch = isTinyLeadersMatch || variantTypes.contains(GameType.Commander);
|
||||
isBrawlMatch = variantTypes.contains(GameType.Brawl);
|
||||
isCommanderMatch = isBrawlMatch || isTinyLeadersMatch || variantTypes.contains(GameType.Commander);
|
||||
if (!isCommanderMatch) {
|
||||
for (final GameType variant : variantTypes) {
|
||||
if (variant.isAutoGenerated()) {
|
||||
@@ -403,7 +415,7 @@ public abstract class GameLobby implements IHasGameType {
|
||||
else {
|
||||
PaperCard vanguardAvatar = null;
|
||||
if (isCommanderMatch) {
|
||||
final GameType commanderGameType = isTinyLeadersMatch ? GameType.TinyLeaders : GameType.Commander;
|
||||
final GameType commanderGameType = isTinyLeadersMatch ? GameType.TinyLeaders : isBrawlMatch ? GameType.Brawl : GameType.Commander;
|
||||
if (checkLegality) {
|
||||
final String errMsg = commanderGameType.getDeckFormat().getDeckConformanceProblem(deck);
|
||||
if (errMsg != null) {
|
||||
|
||||
@@ -28,6 +28,8 @@ import forge.model.FModel;
|
||||
import forge.player.GamePlayerUtil;
|
||||
import forge.player.PlayerControllerHuman;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.sound.SoundEffectType;
|
||||
import forge.sound.SoundSystem;
|
||||
import forge.util.ITriggerEvent;
|
||||
import forge.util.ThreadUtil;
|
||||
|
||||
@@ -62,6 +64,7 @@ public class InputPassPriority extends InputSyncronizedBase {
|
||||
}
|
||||
|
||||
getController().getGui().alertUser();
|
||||
SoundSystem.instance.play(SoundEffectType.WinDuel, false);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -42,6 +42,7 @@ public class CardCollections {
|
||||
private IStorage<Deck> plane;
|
||||
private IStorage<Deck> commander;
|
||||
private IStorage<Deck> tinyLeaders;
|
||||
private IStorage<Deck> brawl;
|
||||
|
||||
public CardCollections() {
|
||||
}
|
||||
@@ -118,4 +119,12 @@ public class CardCollections {
|
||||
}
|
||||
return tinyLeaders;
|
||||
}
|
||||
|
||||
public IStorage<Deck> getBrawl() {
|
||||
if (brawl == null) {
|
||||
brawl = new StorageImmediatelySerialized<Deck>("Brawl decks",
|
||||
new DeckStorage(new File(ForgeConstants.DECK_BRAWL_DIR), ForgeConstants.DECK_BASE_DIR));
|
||||
}
|
||||
return brawl;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,6 +219,7 @@ public final class ForgeConstants {
|
||||
public static final String QUEST_SAVE_DIR = USER_QUEST_DIR + "saves" + PATH_SEPARATOR;
|
||||
public static final String CONQUEST_SAVE_DIR = USER_CONQUEST_DIR + "saves" + PATH_SEPARATOR;
|
||||
public static final String DECK_TINY_LEADERS_DIR= DECK_BASE_DIR + "tiny_leaders" + PATH_SEPARATOR;
|
||||
public static final String DECK_BRAWL_DIR= DECK_BASE_DIR + "brawl" + PATH_SEPARATOR;
|
||||
public static final String MAIN_PREFS_FILE = USER_PREFS_DIR + "forge.preferences";
|
||||
public static final String CARD_PREFS_FILE = USER_PREFS_DIR + "card.preferences";
|
||||
public static final String DECK_PREFS_FILE = USER_PREFS_DIR + "deck.preferences";
|
||||
|
||||
@@ -50,6 +50,14 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
||||
TINY_LEADER_P6_DECK_STATE(""),
|
||||
TINY_LEADER_P7_DECK_STATE(""),
|
||||
TINY_LEADER_P8_DECK_STATE(""),
|
||||
BRAWL_P1_DECK_STATE(""),
|
||||
BRAWL_P2_DECK_STATE(""),
|
||||
BRAWL_P3_DECK_STATE(""),
|
||||
BRAWL_P4_DECK_STATE(""),
|
||||
BRAWL_P5_DECK_STATE(""),
|
||||
BRAWL_P6_DECK_STATE(""),
|
||||
BRAWL_P7_DECK_STATE(""),
|
||||
BRAWL_P8_DECK_STATE(""),
|
||||
UI_LANDSCAPE_MODE ("false"),
|
||||
UI_COMPACT_MAIN_MENU ("false"),
|
||||
UI_USE_OLD ("false"),
|
||||
@@ -240,6 +248,12 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
||||
TINY_LEADER_P5_DECK_STATE, TINY_LEADER_P6_DECK_STATE,
|
||||
TINY_LEADER_P7_DECK_STATE, TINY_LEADER_P8_DECK_STATE };
|
||||
|
||||
public static FPref[] BRAWL_DECK_STATES = {
|
||||
BRAWL_P1_DECK_STATE, BRAWL_P2_DECK_STATE,
|
||||
BRAWL_P3_DECK_STATE, BRAWL_P4_DECK_STATE,
|
||||
BRAWL_P5_DECK_STATE, BRAWL_P6_DECK_STATE,
|
||||
BRAWL_P7_DECK_STATE, BRAWL_P8_DECK_STATE };
|
||||
|
||||
}
|
||||
|
||||
/** Instantiates a ForgePreferences object. */
|
||||
|
||||
Reference in New Issue
Block a user