Support showing variant buttons based on applied variants

This commit is contained in:
drdev
2014-04-12 00:07:58 +00:00
parent 5572e3fa64
commit 23f7bbac09

View File

@@ -5,8 +5,6 @@ import java.util.*;
import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import com.google.common.base.Predicate;
import forge.Forge;
import forge.Forge.Graphics;
import forge.assets.FSkin;
@@ -135,7 +133,7 @@ public class ConstructedScreen extends LaunchScreen {
public void handleEvent(FEvent e) {
if (cmbVariants.getSelectedIndex() <= 0) {
appliedVariants.clear();
playersScroll.revalidate();
updateLayoutForVariants();
}
else if (cmbVariants.getSelectedIndex() == cmbVariants.getItemCount() - 1) {
Forge.openScreen(new AdvancedVariants());
@@ -143,7 +141,7 @@ public class ConstructedScreen extends LaunchScreen {
else {
appliedVariants.clear();
appliedVariants.add((GameType)cmbVariants.getSelectedItem());
playersScroll.revalidate();
updateLayoutForVariants();
}
}
});
@@ -176,6 +174,13 @@ public class ConstructedScreen extends LaunchScreen {
updatePlayersFromPrefs();
}
private void updateLayoutForVariants() {
for (int i = 0; i < MAX_PLAYERS; i++) {
playerPanels.get(i).updateVariantControlsVisibility();
}
playersScroll.revalidate();
}
@Override
protected void doLayoutAboveBtnStart(float startY, float width, float height) {
float x = PADDING;
@@ -250,7 +255,7 @@ public class ConstructedScreen extends LaunchScreen {
Deck deck = null;
boolean isCommanderMatch = appliedVariants.contains(GameType.Commander);
if (isCommanderMatch) {
Object selected = playerPanel.commanderDeckList.getSelectedValue();
Object selected = playerPanel.lstCommanderDecks.getSelectedValue();
if (selected instanceof String) {
String sel = (String) selected;
IStorage<Deck> comDecks = FModel.getDecks().getCommander();
@@ -283,7 +288,7 @@ public class ConstructedScreen extends LaunchScreen {
//Archenemy
if (appliedVariants.contains(GameType.ArchenemyRumble)
|| (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy)) {
Object selected = playerPanel.schemeDeckList.getSelectedValue();
Object selected = playerPanel.lstSchemeDecks.getSelectedValue();
CardPool schemePool = null;
if (selected instanceof String) {
String sel = (String) selected;
@@ -318,7 +323,7 @@ public class ConstructedScreen extends LaunchScreen {
//Planechase
if (appliedVariants.contains(GameType.Planechase)) {
Object selected = playerPanel.planarDeckList.getSelectedValue();
Object selected = playerPanel.lstPlanarDecks.getSelectedValue();
CardPool planePool = null;
if (selected instanceof String) {
String sel = (String) selected;
@@ -352,7 +357,7 @@ public class ConstructedScreen extends LaunchScreen {
//Vanguard
if (appliedVariants.contains(GameType.Vanguard)) {
Object selected = playerPanel.vgdAvatarList.getSelectedValue();
Object selected = playerPanel.lstVanguardAvatars.getSelectedValue();
if (selected instanceof String) {
String sel = (String) selected;
if (sel.contains("Use deck's default avatar") && deck.has(DeckSection.Avatar)) {
@@ -397,30 +402,18 @@ public class ConstructedScreen extends LaunchScreen {
private final FTextField txtPlayerName = new FTextField("Player name");
private final FToggleSwitch humanAiSwitch = new FToggleSwitch("Human", "AI");
private boolean playerIsArchenemy = false;
private FComboBox<Object> teamComboBox = new FComboBox<Object>();
private FComboBox<Object> aeTeamComboBox = new FComboBox<Object>();
private final FLabel deckBtn = new FLabel.ButtonBuilder().text("Select a deck").build();
private final FLabel deckLabel = newLabel("Deck:");
private boolean playerIsArchenemy = false;
private final FLabel scmDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a scheme deck").build();
private final FLabel scmDeckEditor = new FLabel.ButtonBuilder().text("Scheme Deck Editor").build();
private final FLabel scmLabel = newLabel("Scheme deck:");
private final FLabel cmdDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a Commander deck").build();
private final FLabel cmdDeckEditor = new FLabel.ButtonBuilder().text("Commander Deck Editor").build();
private final FLabel cmdLabel = newLabel("Commander deck:");
private final FLabel pchDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a planar deck").build();
private final FLabel pchDeckEditor = new FLabel.ButtonBuilder().text("Planar Deck Editor").build();
private final FLabel pchLabel = newLabel("Planar deck:");
private final FLabel vgdSelectorBtn = new FLabel.ButtonBuilder().text("Select a Vanguard avatar").build();
private final FLabel vgdLabel = newLabel("Vanguard:");
private final FLabel btnDeck = new FLabel.ButtonBuilder().text("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 btnPlanarDeck = new FLabel.ButtonBuilder().text("Planar Deck: (None)").build();
private final FLabel btnVanguardAvatar = new FLabel.ButtonBuilder().text("Vanguard Avatar: (None)").build();
private final FDeckChooser deckChooser;
private final DeckList schemeDeckList, commanderDeckList, planarDeckList, vgdAvatarList;
private final DeckList lstSchemeDecks, lstCommanderDecks, lstPlanarDecks, lstVanguardAvatars;
public PlayerPanel(final int index0) {
super();
@@ -430,15 +423,15 @@ public class ConstructedScreen extends LaunchScreen {
deckChooser.getLstDecks().setSelectionChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckBtn.setText(deckChooser.getSelectedDeckType().toString() + ": " +
btnDeck.setText(deckChooser.getSelectedDeckType().toString() + ": " +
Lang.joinHomogenous(deckChooser.getLstDecks().getSelectedItems(), DeckProxy.FN_GET_NAME));
}
});
deckChooser.initialize();
schemeDeckList = new DeckList();
commanderDeckList = new DeckList();
planarDeckList = new DeckList();
vgdAvatarList = new DeckList();
lstSchemeDecks = new DeckList();
lstCommanderDecks = new DeckList();
lstPlanarDecks = new DeckList();
lstVanguardAvatars = new DeckList();
createAvatar();
add(avatarLabel);
@@ -461,64 +454,79 @@ public class ConstructedScreen extends LaunchScreen {
add(teamComboBox);
add(aeTeamComboBox);
add(deckLabel);
add(deckBtn);
deckBtn.setCommand(new FEventHandler() {
add(btnDeck);
btnDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckChooser.setHeaderCaption("Select Deck for " + txtPlayerName.getText());
Forge.openScreen(deckChooser);
}
});
add(btnCommanderDeck);
btnCommanderDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckChooser.setHeaderCaption("Select Commander Deck for " + txtPlayerName.getText());
Forge.openScreen(deckChooser);
}
});
add(btnSchemeDeck);
btnSchemeDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckChooser.setHeaderCaption("Select Scheme Deck for " + txtPlayerName.getText());
Forge.openScreen(deckChooser);
}
});
add(btnPlanarDeck);
btnPlanarDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckChooser.setHeaderCaption("Select Planar Deck for " + txtPlayerName.getText());
Forge.openScreen(deckChooser);
}
});
add(btnVanguardAvatar);
btnVanguardAvatar.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckChooser.setHeaderCaption("Select Vanguard Avatar for " + txtPlayerName.getText());
Forge.openScreen(deckChooser);
}
});
add(cmdLabel);
add(cmdDeckSelectorBtn);
add(cmdDeckEditor);
add(scmLabel);
add(scmDeckSelectorBtn);
add(scmDeckEditor);
add(pchLabel);
add(pchDeckSelectorBtn);
add(pchDeckEditor);
add(vgdLabel);
add(vgdSelectorBtn);
addHandlersToVariantsControls();
updateVariantControlsVisibility();
final CardCollections decks = FModel.getDecks();
commanderDeckList.list.addItem("Generate");
lstCommanderDecks.list.addItem("Generate");
if (decks.getCommander().size() > 0) {
commanderDeckList.list.addItem("Random");
lstCommanderDecks.list.addItem("Random");
for (Deck comDeck : decks.getCommander()) {
commanderDeckList.list.addItem(comDeck);
lstCommanderDecks.list.addItem(comDeck);
}
}
commanderDeckList.setSelectedIndex(0);
lstCommanderDecks.setSelectedIndex(0);
schemeDeckList.list.addItem("Use deck's scheme section (random if unavailable)");
schemeDeckList.list.addItem("Generate");
lstSchemeDecks.list.addItem("Use deck's scheme section (random if unavailable)");
lstSchemeDecks.list.addItem("Generate");
if (decks.getScheme().size() > 0) {
schemeDeckList.list.addItem("Random");
lstSchemeDecks.list.addItem("Random");
for (Deck schemeDeck : decks.getScheme()) {
schemeDeckList.list.addItem(schemeDeck);
lstSchemeDecks.list.addItem(schemeDeck);
}
}
schemeDeckList.setSelectedIndex(0);
lstSchemeDecks.setSelectedIndex(0);
planarDeckList.list.addItem("Use deck's planes section (random if unavailable)");
planarDeckList.list.addItem("Generate");
lstPlanarDecks.list.addItem("Use deck's planes section (random if unavailable)");
lstPlanarDecks.list.addItem("Generate");
if (decks.getPlane().size() > 0) {
planarDeckList.list.addItem("Random");
lstPlanarDecks.list.addItem("Random");
for (Deck planarDeck : decks.getPlane()) {
planarDeckList.list.addItem(planarDeck);
lstPlanarDecks.list.addItem(planarDeck);
}
}
planarDeckList.setSelectedIndex(0);
lstPlanarDecks.setSelectedIndex(0);
updateVanguardList();
}
@@ -529,6 +537,7 @@ public class ConstructedScreen extends LaunchScreen {
float y = PADDING;
float fieldHeight = txtPlayerName.getHeight();
float avatarSize = 2 * fieldHeight + PADDING;
float dy = fieldHeight + PADDING;
avatarLabel.setBounds(x, y, avatarSize, avatarSize);
x += avatarSize + PADDING;
@@ -537,36 +546,52 @@ public class ConstructedScreen extends LaunchScreen {
x += w + PADDING;
nameRandomiser.setBounds(x, y, fieldHeight, fieldHeight);
y += fieldHeight + PADDING;
y += dy;
humanAiSwitch.setSize(humanAiSwitch.getAutoSizeWidth(fieldHeight), fieldHeight);
x = width - humanAiSwitch.getWidth() - PADDING;
humanAiSwitch.setPosition(x, y);
w = x - avatarSize - 3 * PADDING;
x = avatarSize + 2 * PADDING;
teamComboBox.setBounds(x, y, w, fieldHeight);
aeTeamComboBox.setBounds(x, y, width, fieldHeight);
if (aeTeamComboBox.isVisible()) {
aeTeamComboBox.setBounds(x, y, w, fieldHeight);
}
else {
teamComboBox.setBounds(x, y, w, fieldHeight);
}
y += fieldHeight + PADDING;
y += dy;
x = PADDING;
deckLabel.setBounds(x, y, avatarSize, fieldHeight);
x += avatarSize + PADDING;
w = width - x - PADDING;
deckBtn.setBounds(x, y, w, fieldHeight);
w = width - 2 * PADDING;
if (btnCommanderDeck.isVisible()) {
btnCommanderDeck.setBounds(x, y, w, fieldHeight);
}
else {
btnDeck.setBounds(x, y, w, fieldHeight);
}
y += dy;
if (btnSchemeDeck.isVisible()) {
btnSchemeDeck.setBounds(x, y, w, fieldHeight);
y += dy;
}
if (btnPlanarDeck.isVisible()) {
btnPlanarDeck.setBounds(x, y, w, fieldHeight);
y += dy;
}
if (btnVanguardAvatar.isVisible()) {
btnVanguardAvatar.setBounds(x, y, w, fieldHeight);
}
}
private float getPreferredHeight() {
int rows = 3;
if (!appliedVariants.isEmpty()) {
if (appliedVariants.contains(GameType.Archenemy)) {
if (btnSchemeDeck.isVisible()) {
rows++;
}
else if (appliedVariants.contains(GameType.ArchenemyRumble)) {
if (btnPlanarDeck.isVisible()) {
rows++;
}
if (appliedVariants.contains(GameType.Planechase)) {
rows++;
}
if (appliedVariants.contains(GameType.Vanguard)) {
if (btnVanguardAvatar.isVisible()) {
rows++;
}
}
@@ -634,29 +659,21 @@ public class ConstructedScreen extends LaunchScreen {
};
public void updateVariantControlsVisibility() {
// Commander deck replaces basic deck, so hide that
deckLabel.setVisible(!appliedVariants.contains(GameType.Commander));
deckBtn.setVisible(!appliedVariants.contains(GameType.Commander));
cmdDeckSelectorBtn.setVisible(appliedVariants.contains(GameType.Commander));
cmdDeckEditor.setVisible(appliedVariants.contains(GameType.Commander));
cmdLabel.setVisible(appliedVariants.contains(GameType.Commander));
boolean isCommanderApplied = appliedVariants.contains(GameType.Commander);
btnDeck.setVisible(!isCommanderApplied); // Commander deck replaces basic deck, so hide that
btnCommanderDeck.setVisible(isCommanderApplied);
boolean isArchenemyApplied = appliedVariants.contains(GameType.Archenemy);
boolean archenemyVisiblity = appliedVariants.contains(GameType.ArchenemyRumble)
|| (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy);
scmDeckSelectorBtn.setVisible(archenemyVisiblity);
scmDeckEditor.setVisible(archenemyVisiblity);
scmLabel.setVisible(archenemyVisiblity);
|| (isArchenemyApplied && playerIsArchenemy);
btnSchemeDeck.setVisible(archenemyVisiblity);
teamComboBox.setVisible(!appliedVariants.contains(GameType.Archenemy));
aeTeamComboBox.setVisible(appliedVariants.contains(GameType.Archenemy));
aeTeamComboBox.setEnabled(!(appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy));
teamComboBox.setVisible(!isArchenemyApplied);
aeTeamComboBox.setVisible(isArchenemyApplied);
aeTeamComboBox.setEnabled(!(isArchenemyApplied && playerIsArchenemy));
pchDeckSelectorBtn.setVisible(appliedVariants.contains(GameType.Planechase));
pchDeckEditor.setVisible(appliedVariants.contains(GameType.Planechase));
pchLabel.setVisible(appliedVariants.contains(GameType.Planechase));
vgdSelectorBtn.setVisible(appliedVariants.contains(GameType.Vanguard));
vgdLabel.setVisible(appliedVariants.contains(GameType.Vanguard));
btnPlanarDeck.setVisible(appliedVariants.contains(GameType.Planechase));
btnVanguardAvatar.setVisible(appliedVariants.contains(GameType.Vanguard));
}
public boolean isPlayerAI() {
@@ -664,7 +681,7 @@ public class ConstructedScreen extends LaunchScreen {
}
public void setVanguardButtonText(String text) {
vgdSelectorBtn.setText(text);
btnVanguardAvatar.setText(text);
}
private void populateTeamsComboBoxes() {
@@ -713,76 +730,7 @@ public class ConstructedScreen extends LaunchScreen {
else {
playerIsArchenemy = appliedVariants.contains(GameType.ArchenemyRumble);
}
updateVariantControlsVisibility();
}
private void addHandlersToVariantsControls() {
// Archenemy buttons
scmDeckSelectorBtn.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
}
});
scmDeckEditor.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Predicate<PaperCard> predSchemes = new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard arg0) {
return arg0.getRules().getType().isScheme();
}
};
/*Forge.setCurrentScreen(FScreen.DECK_EDITOR_ARCHENEMY);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(
new CEditorVariant(FModel.getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_PLANECHASE));*/
}
});
// Commander buttons
cmdDeckSelectorBtn.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
}
});
cmdDeckEditor.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
//Forge.setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
}
});
// Planechase buttons
pchDeckSelectorBtn.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
}
});
pchDeckEditor.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
/*Predicate<PaperCard> predPlanes = new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard arg0) {
return arg0.getRules().getType().isPlane() || arg0.getRules().getType().isPhenomenon();
}
};
Forge.setCurrentScreen(FScreen.DECK_EDITOR_PLANECHASE);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(
new CEditorVariant(FModel.getDecks().getPlane(), predPlanes, DeckSection.Planes, FScreen.DECK_EDITOR_PLANECHASE));*/
}
});
// Vanguard buttons
vgdSelectorBtn.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
}
});
updateLayoutForVariants();
}
private FLabel createNameRandomizer() {
@@ -864,45 +812,16 @@ public class ConstructedScreen extends LaunchScreen {
return txtPlayerName.getText();
}
private void changeDeck(final GameType forGameType) {
switch (forGameType) {
case Constructed:
Forge.openScreen(deckChooser);
break;
case Archenemy:
case ArchenemyRumble:
if (playerIsArchenemy) {
Forge.openScreen(schemeDeckList);
}
else {
Forge.openScreen(deckChooser);
}
break;
case Commander:
Forge.openScreen(commanderDeckList);
break;
case Planechase:
Forge.openScreen(planarDeckList);
break;
case Vanguard:
updateVanguardList();
Forge.openScreen(vgdAvatarList);
break;
default:
break;
}
}
/** update vanguard list. */
public void updateVanguardList() {
Object lastSelection = vgdAvatarList.getSelectedValue();
vgdAvatarList.setSelectedIndex(-1);
vgdAvatarList.list.setListData(isPlayerAI() ? aiListData : humanListData);
Object lastSelection = lstVanguardAvatars.getSelectedValue();
lstVanguardAvatars.setSelectedIndex(-1);
lstVanguardAvatars.list.setListData(isPlayerAI() ? aiListData : humanListData);
if (lastSelection != null) {
vgdAvatarList.setSelectedValue(lastSelection);
lstVanguardAvatars.setSelectedValue(lastSelection);
}
if (vgdAvatarList.getSelectedIndex() == -1) {
vgdAvatarList.setSelectedIndex(0);
if (lstVanguardAvatars.getSelectedIndex() == -1) {
lstVanguardAvatars.setSelectedIndex(0);
}
}