From 13ad244be1c26a9878d008344a9a01c955d181c9 Mon Sep 17 00:00:00 2001 From: austinio7116 Date: Sat, 10 Mar 2018 20:23:34 +0000 Subject: [PATCH] Fixes to ensure deckchooser AI status is set correctly before decks are generated and that the list of card-based decks is updated to show only AI playable cards as required. --- .../java/forge/deckchooser/FDeckChooser.java | 4 ++++ .../main/java/forge/screens/home/VLobby.java | 23 ++++++++++++++++++- .../screens/constructed/LobbyScreen.java | 5 ++++ .../java/forge/interfaces/IUpdateable.java | 3 +++ .../src/main/java/forge/match/GameLobby.java | 7 ++++++ .../main/java/forge/net/NetConnectUtil.java | 3 +++ 6 files changed, 44 insertions(+), 1 deletion(-) diff --git a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java index e54f444b9bf..6e4340d13ac 100644 --- a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java +++ b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java @@ -327,6 +327,10 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { refreshDecksList(ev.getDeckType(), false, ev); } + public void refreshDeckListForAI(){ + refreshDecksList(selectedDeckType,true,null); + } + private void refreshDecksList(final DeckType deckType, final boolean forceRefresh, final DecksComboBoxEvent ev) { if (decksComboBox == null) { return; } // Not yet populated if (selectedDeckType == deckType && !forceRefresh) { return; } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java b/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java index 02732999231..eb63d7b1ad4 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java @@ -19,6 +19,7 @@ import javax.swing.SwingConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import forge.deckchooser.DecksComboBoxEvent; import net.miginfocom.swing.MigLayout; import com.google.common.collect.ImmutableList; @@ -233,6 +234,19 @@ public class VLobby implements ILobbyView { getPlayerPanelWithFocus().focusOnAvatar(); } + @Override + public void update(final int slot, final LobbySlotType type){ + final FDeckChooser deckChooser = getDeckChooser(slot); + final FDeckChooser commanderDeckChooser = getCommanderDeckChooser(slot); + final FDeckChooser tinyLeaderDeckChooser = getTinyLeaderDeckChooser(slot); + deckChooser.setIsAi(type==LobbySlotType.AI); + commanderDeckChooser.setIsAi(type==LobbySlotType.AI); + tinyLeaderDeckChooser.setIsAi(type==LobbySlotType.AI); + deckChooser.refreshDeckListForAI(); + commanderDeckChooser.refreshDeckListForAI(); + tinyLeaderDeckChooser.refreshDeckListForAI(); + } + @Override public void update(final boolean fullUpdate) { activePlayersNum = lobby.getNumberOfSlots(); @@ -301,6 +315,10 @@ public class VLobby implements ILobbyView { commanderDeckChooser.setIsAi(isSlotAI); tinyLeaderDeckChooser.setIsAi(isSlotAI); if (fullUpdate && (type == LobbySlotType.LOCAL || isSlotAI)) { + //refresh decklists for AI/Human + deckChooser.refreshDeckListForAI(); + commanderDeckChooser.refreshDeckListForAI(); + tinyLeaderDeckChooser.refreshDeckListForAI(); selectDeck(i); } if (isNewPanel) { @@ -731,7 +749,10 @@ public class VLobby implements ILobbyView { } private boolean isPlayerAI(final int playernum) { - return playernum < activePlayersNum ? playerPanels.get(playernum).isAi() : false; + if(playernum < activePlayersNum){ + return playerPanels.get(playernum).isAi(); + } + return true; } public int getNumPlayers() { diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index f8e05cafa2c..08258da5d22 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -410,6 +410,11 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { return playerPanels.get(playernum).isArchenemy(); } + @Override + public final void update(final int slot, final LobbySlotType type) { + return; + } + @Override public void update(final boolean fullUpdate) { int playerCount = lobby.getNumberOfSlots(); diff --git a/forge-gui/src/main/java/forge/interfaces/IUpdateable.java b/forge-gui/src/main/java/forge/interfaces/IUpdateable.java index 0685a64a988..08b20c34981 100644 --- a/forge-gui/src/main/java/forge/interfaces/IUpdateable.java +++ b/forge-gui/src/main/java/forge/interfaces/IUpdateable.java @@ -1,5 +1,8 @@ package forge.interfaces; +import forge.match.LobbySlotType; + public interface IUpdateable { void update(boolean fullUpdate); + void update(int slot, LobbySlotType type); } diff --git a/forge-gui/src/main/java/forge/match/GameLobby.java b/forge-gui/src/main/java/forge/match/GameLobby.java index 4599efce415..b6a2369cc90 100644 --- a/forge-gui/src/main/java/forge/match/GameLobby.java +++ b/forge-gui/src/main/java/forge/match/GameLobby.java @@ -111,6 +111,7 @@ public abstract class GameLobby implements IHasGameType { final boolean archenemyRemoved = triesToChangeArchenemy && !event.getArchenemy().booleanValue(); final boolean hasArchenemyChanged = triesToChangeArchenemy && slot.isArchenemy() != event.getArchenemy().booleanValue(); + final boolean changed = slot.apply(event) || hasArchenemyChanged; // Change archenemy teams @@ -129,6 +130,12 @@ public abstract class GameLobby implements IHasGameType { } } + if (event.getType() != null) { + //refresh decklist for slot + listener.update(index,event.getType()); + } + + if (changed) { updateView(false); } diff --git a/forge-gui/src/main/java/forge/net/NetConnectUtil.java b/forge-gui/src/main/java/forge/net/NetConnectUtil.java index a11b91b4c99..cf1e624a423 100644 --- a/forge-gui/src/main/java/forge/net/NetConnectUtil.java +++ b/forge-gui/src/main/java/forge/net/NetConnectUtil.java @@ -1,5 +1,6 @@ package forge.net; +import forge.match.LobbySlotType; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -54,6 +55,8 @@ public class NetConnectUtil { view.update(fullUpdate); server.updateLobbyState(); } + @Override + public final void update(final int slot, final LobbySlotType type) {return;} }); view.setPlayerChangeListener(new IPlayerChangeListener() { @Override