mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Merge branch 'BrawlFormat' into 'master'
Brawl format See merge request core-developers/forge!324
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -178,8 +180,9 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
}
|
||||
|
||||
private void updateRandomCommander() {
|
||||
if((!lstDecks.getGameType().getDeckFormat().equals(DeckFormat.Commander)&&
|
||||
!(lstDecks.getGameType().getDeckFormat().equals(DeckFormat.TinyLeaders)))){
|
||||
if((!lstDecks.getGameType().getDeckFormat().equals(DeckFormat.Commander))&&
|
||||
!(lstDecks.getGameType().getDeckFormat().equals(DeckFormat.TinyLeaders))&&
|
||||
!(lstDecks.getGameType().getDeckFormat().equals(DeckFormat.Brawl))){
|
||||
return;
|
||||
}
|
||||
lstDecks.setAllowMultipleSelections(false);
|
||||
@@ -200,8 +203,9 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
}
|
||||
|
||||
private void updateRandomCardGenCommander() {
|
||||
if((!lstDecks.getGameType().getDeckFormat().equals(DeckFormat.Commander)&&
|
||||
!(lstDecks.getGameType().getDeckFormat().equals(DeckFormat.TinyLeaders)))){
|
||||
if((!lstDecks.getGameType().getDeckFormat().equals(DeckFormat.Commander))&&
|
||||
!(lstDecks.getGameType().getDeckFormat().equals(DeckFormat.TinyLeaders))&&
|
||||
!(lstDecks.getGameType().getDeckFormat().equals(DeckFormat.Brawl))){
|
||||
return;
|
||||
}
|
||||
lstDecks.setAllowMultipleSelections(false);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
*/
|
||||
package forge.screens.deckeditor.controllers;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Supplier;
|
||||
import forge.UiCommand;
|
||||
import forge.card.CardRules;
|
||||
import forge.card.CardRulesPredicates;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
@@ -65,14 +67,27 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
|
||||
* all cards are available.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public CEditorCommander(final CDetailPicture cDetailPicture, boolean tinyLeaders) {
|
||||
super(tinyLeaders ? FScreen.DECK_EDITOR_TINY_LEADERS : FScreen.DECK_EDITOR_COMMANDER, cDetailPicture);
|
||||
public CEditorCommander(final CDetailPicture cDetailPicture, boolean tinyLeaders, boolean brawl) {
|
||||
super(tinyLeaders ? FScreen.DECK_EDITOR_TINY_LEADERS : brawl ? FScreen.DECK_EDITOR_BRAWL : FScreen.DECK_EDITOR_COMMANDER, cDetailPicture);
|
||||
allSections.add(DeckSection.Main);
|
||||
allSections.add(DeckSection.Sideboard);
|
||||
allSections.add(DeckSection.Commander);
|
||||
|
||||
commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.CAN_BE_COMMANDER, PaperCard.FN_GET_RULES)),PaperCard.class);
|
||||
normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class);
|
||||
if(brawl){
|
||||
Predicate<CardRules> commanderFilter = CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER;
|
||||
commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.and(
|
||||
FModel.getFormats().getStandard().getFilterPrinted(),Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES))),PaperCard.class);
|
||||
}else{
|
||||
Predicate<CardRules> commanderFilter = CardRulesPredicates.Presets.CAN_BE_COMMANDER ;
|
||||
commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.compose(commanderFilter, PaperCard.FN_GET_RULES)),PaperCard.class);
|
||||
}
|
||||
|
||||
|
||||
if(brawl){
|
||||
normalPool = ItemPool.createFrom(FModel.getFormats().getStandard().getAllCards(), PaperCard.class);
|
||||
}else {
|
||||
normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class);
|
||||
}
|
||||
|
||||
CardManager catalogManager = new CardManager(getCDetailPicture(), true, false);
|
||||
CardManager deckManager = new CardManager(getCDetailPicture(), true, false);
|
||||
@@ -88,7 +103,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
|
||||
return new Deck();
|
||||
}
|
||||
};
|
||||
this.controller = new DeckController<Deck>(tinyLeaders ? FModel.getDecks().getTinyLeaders() :FModel.getDecks().getCommander(), this, newCreator);
|
||||
this.controller = new DeckController<Deck>(tinyLeaders ? FModel.getDecks().getTinyLeaders() :brawl ? FModel.getDecks().getBrawl(): FModel.getDecks().getCommander(), this, newCreator);
|
||||
|
||||
getBtnAddBasicLands().setCommand(new UiCommand() {
|
||||
@Override
|
||||
|
||||
@@ -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);
|
||||
@@ -346,7 +347,7 @@ public class PlayerPanel extends FPanel {
|
||||
deckLabel.setVisible(isDeckBuildingAllowed);
|
||||
deckBtn.setVisible(isDeckBuildingAllowed);
|
||||
cmdDeckSelectorBtn.setVisible(isCommanderApplied);
|
||||
cmdDeckEditor.setText(isTinyLeaders ? "TL Deck Editor" : "Commander Deck Editor");
|
||||
cmdDeckEditor.setText(isTinyLeaders ? "TL Deck Editor" : isBrawl ? "Brawl Editor" : "Commander Deck Editor");
|
||||
cmdDeckEditor.setVisible(isCommanderApplied);
|
||||
cmdLabel.setVisible(isCommanderApplied);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -520,11 +521,15 @@ public class PlayerPanel extends FPanel {
|
||||
if (lobby.hasVariant(GameType.TinyLeaders)) {
|
||||
lobby.setCurrentGameMode(GameType.TinyLeaders);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_TINY_LEADERS);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(), true));
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(), true, false));
|
||||
} 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(), false, true));
|
||||
} else {
|
||||
lobby.setCurrentGameMode(GameType.Commander);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(), false));
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(), false, false));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user