Fix so match can start with selected decks

This commit is contained in:
drdev
2015-05-31 20:53:05 +00:00
parent 5f8b8db129
commit 68ce4f939a

View File

@@ -15,10 +15,8 @@ import forge.assets.FSkinColor;
import forge.assets.FSkinFont;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckProxy;
import forge.deck.DeckSection;
import forge.deck.DeckType;
import forge.deck.FDeckChooser;
import forge.game.GameType;
import forge.interfaces.ILobbyView;
import forge.interfaces.IPlayerChangeListener;
@@ -41,7 +39,6 @@ import forge.toolbox.FList;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.util.Lang;
import forge.util.Utils;
import forge.util.gui.SOptionPane;
@@ -233,10 +230,6 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
playersScroll.setBounds(0, y, width, height - y);
}
public final FDeckChooser getDeckChooser(int playernum) {
return playerPanels.get(playernum).getDeckChooser();
}
GameType getCurrentGameMode() {
return lobby.getGameType();
}
@@ -254,6 +247,9 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
@Override
protected void startMatch() {
for (int i = 0; i < getNumPlayers(); i++) {
updateDeck(i);
}
FThreads.invokeInBackgroundThread(new Runnable() { //must call startGame in background thread in case there are alerts
@Override
public void run() {
@@ -447,7 +443,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
panel.setMayRemove(lobby.mayRemove(i));
if (fullUpdate && (type == LobbySlotType.LOCAL || type == LobbySlotType.AI)) {
selectDeck(i);
updateDeck(i);
}
if (isNewPanel) {
panel.setVisible(true);
@@ -464,73 +460,46 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
playerChangeListener = playerChangeListener0;
}
private void selectDeck(final int playerIndex) {
// Full deck selection
selectMainDeck(playerIndex);
selectCommanderDeck(playerIndex);
private void updateDeck(final int playerIndex) {
if (playerIndex >= getNumPlayers()) { return; }
// Deck section selection
selectSchemeDeck(playerIndex);
selectPlanarDeck(playerIndex);
selectVanguardAvatar(playerIndex);
}
PlayerPanel playerPanel = playerPanels.get(playerIndex);
private void selectMainDeck(final int playerIndex) {
Deck deck;
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders)) {
// These game types use specific deck panel
return;
deck = playerPanel.getCommanderDeck();
}
final FDeckChooser mainChooser = getDeckChooser(playerIndex);
onDeckClicked(playerIndex, mainChooser.getSelectedDeckType(), mainChooser.getDeck(), mainChooser.getLstDecks().getSelectedItems());
getDeckChooser(playerIndex).saveState();
else {
deck = playerPanel.getDeck();
}
private void selectSchemeDeck(final int playerIndex) {
if (playerIndex >= getNumPlayers() || !(hasVariant(GameType.Archenemy) || hasVariant(GameType.ArchenemyRumble))) {
return;
Deck playerDeck = deck;
if (hasVariant(GameType.Archenemy) || hasVariant(GameType.ArchenemyRumble)) {
if (playerDeck == deck) {
playerDeck = new Deck(deck); //create copy that can be modified
}
playerDeck.putSection(DeckSection.Schemes, playerPanel.getSchemeDeck().get(DeckSection.Schemes));
}
if (hasVariant(GameType.Planechase)) {
if (playerDeck == deck) {
playerDeck = new Deck(deck); //create copy that can be modified
}
playerDeck.putSection(DeckSection.Planes, playerPanel.getPlanarDeck().get(DeckSection.Planes));
}
if (hasVariant(GameType.Vanguard)) {
if (playerDeck == deck) {
playerDeck = new Deck(deck); //create copy that can be modified
}
CardPool avatarPool = new CardPool();
avatarPool.add(playerPanel.getVanguardAvatar());
playerDeck.putSection(DeckSection.Avatar, avatarPool);
}
CardPool schemePool = playerPanels.get(playerIndex).getSchemeDeck().get(DeckSection.Schemes);
fireDeckSectionChangeListener(playerIndex, DeckSection.Schemes, schemePool);
getDeckChooser(playerIndex).saveState();
}
playerPanel.getDeckChooser().saveState();
private void selectCommanderDeck(final int playerIndex) {
if (playerIndex >= getNumPlayers() || !(hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders))) {
return;
}
Deck deck = playerPanels.get(playerIndex).getCommanderDeck();
fireDeckChangeListener(playerIndex, deck);
getDeckChooser(playerIndex).saveState();
}
private void selectPlanarDeck(final int playerIndex) {
if (playerIndex >= getNumPlayers() || !hasVariant(GameType.Planechase)) {
return;
}
CardPool planePool = playerPanels.get(playerIndex).getPlanarDeck().get(DeckSection.Planes);
fireDeckSectionChangeListener(playerIndex, DeckSection.Planes, planePool);
getDeckChooser(playerIndex).saveState();
}
private void selectVanguardAvatar(final int playerIndex) {
if (playerIndex >= getNumPlayers() || !hasVariant(GameType.Vanguard)) {
return;
}
final CardPool avatarOnce = new CardPool();
avatarOnce.add(playerPanels.get(playerIndex).getVanguardAvatar());
fireDeckSectionChangeListener(playerIndex, DeckSection.Avatar, avatarOnce);
getDeckChooser(playerIndex).saveState();
}
protected void onDeckClicked(final int iPlayer, final DeckType type, final Deck deck, final Collection<DeckProxy> selectedDecks) {
if (iPlayer < getNumPlayers() && lobby.mayEdit(iPlayer)) {
final String text = type.toString() + ": " + Lang.joinHomogenous(selectedDecks, DeckProxy.FN_GET_NAME);
playerPanels.get(iPlayer).setDeckSelectorButtonText(text);
fireDeckChangeListener(iPlayer, deck);
decks[playerIndex] = playerDeck;
if (playerChangeListener != null) {
playerChangeListener.update(playerIndex, UpdateLobbyPlayerEvent.deckUpdate(playerDeck));
}
}
@@ -548,21 +517,6 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
playerChangeListener.update(index, getSlot(index));
}
}
private void fireDeckChangeListener(final int index, final Deck deck) {
decks[index] = deck;
if (playerChangeListener != null) {
playerChangeListener.update(index, UpdateLobbyPlayerEvent.deckUpdate(deck));
}
}
private void fireDeckSectionChangeListener(final int index, final DeckSection section, final CardPool cards) {
final Deck deck = decks[index];
final Deck copy = deck == null ? new Deck() : new Deck(decks[index]);
copy.putSection(section, cards);
decks[index] = copy;
if (playerChangeListener != null) {
playerChangeListener.update(index, UpdateLobbyPlayerEvent.deckUpdate(section, cards));
}
}
public void removePlayer(final int index) {
lobby.removeSlot(index);