mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Fix so match can start with selected decks
This commit is contained in:
@@ -15,10 +15,8 @@ import forge.assets.FSkinColor;
|
|||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckProxy;
|
|
||||||
import forge.deck.DeckSection;
|
import forge.deck.DeckSection;
|
||||||
import forge.deck.DeckType;
|
import forge.deck.DeckType;
|
||||||
import forge.deck.FDeckChooser;
|
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.interfaces.ILobbyView;
|
import forge.interfaces.ILobbyView;
|
||||||
import forge.interfaces.IPlayerChangeListener;
|
import forge.interfaces.IPlayerChangeListener;
|
||||||
@@ -41,7 +39,6 @@ import forge.toolbox.FList;
|
|||||||
import forge.toolbox.FEvent.FEventHandler;
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FScrollPane;
|
import forge.toolbox.FScrollPane;
|
||||||
import forge.util.Lang;
|
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
import forge.util.gui.SOptionPane;
|
import forge.util.gui.SOptionPane;
|
||||||
|
|
||||||
@@ -233,10 +230,6 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
|||||||
playersScroll.setBounds(0, y, width, height - y);
|
playersScroll.setBounds(0, y, width, height - y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final FDeckChooser getDeckChooser(int playernum) {
|
|
||||||
return playerPanels.get(playernum).getDeckChooser();
|
|
||||||
}
|
|
||||||
|
|
||||||
GameType getCurrentGameMode() {
|
GameType getCurrentGameMode() {
|
||||||
return lobby.getGameType();
|
return lobby.getGameType();
|
||||||
}
|
}
|
||||||
@@ -254,6 +247,9 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void startMatch() {
|
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
|
FThreads.invokeInBackgroundThread(new Runnable() { //must call startGame in background thread in case there are alerts
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -447,7 +443,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
|||||||
panel.setMayRemove(lobby.mayRemove(i));
|
panel.setMayRemove(lobby.mayRemove(i));
|
||||||
|
|
||||||
if (fullUpdate && (type == LobbySlotType.LOCAL || type == LobbySlotType.AI)) {
|
if (fullUpdate && (type == LobbySlotType.LOCAL || type == LobbySlotType.AI)) {
|
||||||
selectDeck(i);
|
updateDeck(i);
|
||||||
}
|
}
|
||||||
if (isNewPanel) {
|
if (isNewPanel) {
|
||||||
panel.setVisible(true);
|
panel.setVisible(true);
|
||||||
@@ -463,74 +459,47 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
|||||||
public void setPlayerChangeListener(IPlayerChangeListener playerChangeListener0) {
|
public void setPlayerChangeListener(IPlayerChangeListener playerChangeListener0) {
|
||||||
playerChangeListener = playerChangeListener0;
|
playerChangeListener = playerChangeListener0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectDeck(final int playerIndex) {
|
|
||||||
// Full deck selection
|
|
||||||
selectMainDeck(playerIndex);
|
|
||||||
selectCommanderDeck(playerIndex);
|
|
||||||
|
|
||||||
// Deck section selection
|
private void updateDeck(final int playerIndex) {
|
||||||
selectSchemeDeck(playerIndex);
|
if (playerIndex >= getNumPlayers()) { return; }
|
||||||
selectPlanarDeck(playerIndex);
|
|
||||||
selectVanguardAvatar(playerIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void selectMainDeck(final int playerIndex) {
|
PlayerPanel playerPanel = playerPanels.get(playerIndex);
|
||||||
|
|
||||||
|
Deck deck;
|
||||||
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders)) {
|
if (hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders)) {
|
||||||
// These game types use specific deck panel
|
deck = playerPanel.getCommanderDeck();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
final FDeckChooser mainChooser = getDeckChooser(playerIndex);
|
else {
|
||||||
onDeckClicked(playerIndex, mainChooser.getSelectedDeckType(), mainChooser.getDeck(), mainChooser.getLstDecks().getSelectedItems());
|
deck = playerPanel.getDeck();
|
||||||
getDeckChooser(playerIndex).saveState();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void selectSchemeDeck(final int playerIndex) {
|
|
||||||
if (playerIndex >= getNumPlayers() || !(hasVariant(GameType.Archenemy) || hasVariant(GameType.ArchenemyRumble))) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CardPool schemePool = playerPanels.get(playerIndex).getSchemeDeck().get(DeckSection.Schemes);
|
Deck playerDeck = deck;
|
||||||
fireDeckSectionChangeListener(playerIndex, DeckSection.Schemes, schemePool);
|
if (hasVariant(GameType.Archenemy) || hasVariant(GameType.ArchenemyRumble)) {
|
||||||
getDeckChooser(playerIndex).saveState();
|
if (playerDeck == deck) {
|
||||||
}
|
playerDeck = new Deck(deck); //create copy that can be modified
|
||||||
|
}
|
||||||
private void selectCommanderDeck(final int playerIndex) {
|
playerDeck.putSection(DeckSection.Schemes, playerPanel.getSchemeDeck().get(DeckSection.Schemes));
|
||||||
if (playerIndex >= getNumPlayers() || !(hasVariant(GameType.Commander) || hasVariant(GameType.TinyLeaders))) {
|
}
|
||||||
return;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
Deck deck = playerPanels.get(playerIndex).getCommanderDeck();
|
playerPanel.getDeckChooser().saveState();
|
||||||
fireDeckChangeListener(playerIndex, deck);
|
|
||||||
getDeckChooser(playerIndex).saveState();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void selectPlanarDeck(final int playerIndex) {
|
decks[playerIndex] = playerDeck;
|
||||||
if (playerIndex >= getNumPlayers() || !hasVariant(GameType.Planechase)) {
|
if (playerChangeListener != null) {
|
||||||
return;
|
playerChangeListener.update(playerIndex, UpdateLobbyPlayerEvent.deckUpdate(playerDeck));
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,21 +517,6 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
|||||||
playerChangeListener.update(index, getSlot(index));
|
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) {
|
public void removePlayer(final int index) {
|
||||||
lobby.removeSlot(index);
|
lobby.removeSlot(index);
|
||||||
|
|||||||
Reference in New Issue
Block a user