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.

This commit is contained in:
austinio7116
2018-03-10 20:23:34 +00:00
committed by maustin
parent ec1ad333cd
commit 4dd52e6f82
8 changed files with 108 additions and 6 deletions

View File

@@ -327,6 +327,10 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
refreshDecksList(ev.getDeckType(), false, ev); refreshDecksList(ev.getDeckType(), false, ev);
} }
public void refreshDeckListForAI(){
refreshDecksList(selectedDeckType,true,null);
}
private void refreshDecksList(final DeckType deckType, final boolean forceRefresh, final DecksComboBoxEvent ev) { private void refreshDecksList(final DeckType deckType, final boolean forceRefresh, final DecksComboBoxEvent ev) {
if (decksComboBox == null) { return; } // Not yet populated if (decksComboBox == null) { return; } // Not yet populated
if (selectedDeckType == deckType && !forceRefresh) { return; } if (selectedDeckType == deckType && !forceRefresh) { return; }

View File

@@ -19,6 +19,7 @@ import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionListener;
import forge.deckchooser.DecksComboBoxEvent;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@@ -233,6 +234,48 @@ public class VLobby implements ILobbyView {
getPlayerPanelWithFocus().focusOnAvatar(); getPlayerPanelWithFocus().focusOnAvatar();
} }
@Override
public void update(final int slot, final LobbySlotType type){
final FDeckChooser deckChooser = getDeckChooser(slot);
deckChooser.setIsAi(type==LobbySlotType.AI);
DeckType selectedDeckType = deckChooser.getSelectedDeckType();
switch (selectedDeckType){
case STANDARD_CARDGEN_DECK:
case MODERN_CARDGEN_DECK:
case COLOR_DECK:
case STANDARD_COLOR_DECK:
case MODERN_COLOR_DECK:
String selectedName = deckChooser.getLstDecks().getSelectedItem().getName();
deckChooser.refreshDeckListForAI();
deckChooser.restoreSavedState();
break;
default:
break;
}
final FDeckChooser commanderDeckChooser = getCommanderDeckChooser(slot);
commanderDeckChooser.setIsAi(type==LobbySlotType.AI);
selectedDeckType = commanderDeckChooser.getSelectedDeckType();
switch (selectedDeckType){
case RANDOM_CARDGEN_COMMANDER_DECK:
case RANDOM_COMMANDER_DECK:
commanderDeckChooser.refreshDeckListForAI();
break;
default:
break;
}
final FDeckChooser tinyLeaderDeckChooser = getTinyLeaderDeckChooser(slot);
tinyLeaderDeckChooser.setIsAi(type==LobbySlotType.AI);
selectedDeckType = tinyLeaderDeckChooser.getSelectedDeckType();
switch (selectedDeckType){
case RANDOM_CARDGEN_COMMANDER_DECK:
case RANDOM_COMMANDER_DECK:
tinyLeaderDeckChooser.refreshDeckListForAI();
break;
default:
break;
}
}
@Override @Override
public void update(final boolean fullUpdate) { public void update(final boolean fullUpdate) {
activePlayersNum = lobby.getNumberOfSlots(); activePlayersNum = lobby.getNumberOfSlots();
@@ -731,7 +774,10 @@ public class VLobby implements ILobbyView {
} }
private boolean isPlayerAI(final int playernum) { 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() { public int getNumPlayers() {

View File

@@ -530,6 +530,10 @@ public class FDeckChooser extends FScreen {
} }
} }
public void refreshDeckListForAI(){
refreshDecksList(selectedDeckType,true,null);
}
private void refreshDecksList(DeckType deckType, boolean forceRefresh, FEvent e) { private void refreshDecksList(DeckType deckType, boolean forceRefresh, FEvent e) {
if (selectedDeckType == deckType && !forceRefresh) { return; } if (selectedDeckType == deckType && !forceRefresh) { return; }
selectedDeckType = deckType; selectedDeckType = deckType;

View File

@@ -2,6 +2,7 @@ package forge.screens.constructed;
import java.util.*; import java.util.*;
import forge.deck.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
@@ -14,10 +15,6 @@ import forge.Graphics;
import forge.ai.AIOption; import forge.ai.AIOption;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.deck.DeckType;
import forge.game.GameType; import forge.game.GameType;
import forge.interfaces.ILobbyView; import forge.interfaces.ILobbyView;
import forge.interfaces.IPlayerChangeListener; import forge.interfaces.IPlayerChangeListener;
@@ -410,6 +407,43 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
return playerPanels.get(playernum).isArchenemy(); return playerPanels.get(playernum).isArchenemy();
} }
@Override
public final void update(final int slot, final LobbySlotType type) {
final FDeckChooser deckChooser = playerPanels.get(slot).getDeckChooser();
DeckType selectedDeckType = deckChooser.getSelectedDeckType();
switch (selectedDeckType){
case STANDARD_CARDGEN_DECK:
case MODERN_CARDGEN_DECK:
case COLOR_DECK:
case STANDARD_COLOR_DECK:
case MODERN_COLOR_DECK:
deckChooser.refreshDeckListForAI();
break;
default:
break;
}
final FDeckChooser commanderDeckChooser = playerPanels.get(slot).getCommanderDeckChooser();
selectedDeckType = commanderDeckChooser.getSelectedDeckType();
switch (selectedDeckType){
case RANDOM_CARDGEN_COMMANDER_DECK:
case RANDOM_COMMANDER_DECK:
commanderDeckChooser.refreshDeckListForAI();
break;
default:
break;
}
final FDeckChooser tinyLeaderDeckChooser = playerPanels.get(slot).getTinyLeadersDeckChooser();
selectedDeckType = tinyLeaderDeckChooser.getSelectedDeckType();
switch (selectedDeckType){
case RANDOM_CARDGEN_COMMANDER_DECK:
case RANDOM_COMMANDER_DECK:
tinyLeaderDeckChooser.refreshDeckListForAI();
break;
default:
break;
}
}
@Override @Override
public void update(final boolean fullUpdate) { public void update(final boolean fullUpdate) {
int playerCount = lobby.getNumberOfSlots(); int playerCount = lobby.getNumberOfSlots();

View File

@@ -339,6 +339,7 @@ public class PlayerPanel extends FContainer {
LobbySlot slot = screen.getLobby().getSlot(index); LobbySlot slot = screen.getLobby().getSlot(index);
slot.setType(type); slot.setType(type);
screen.update(index,type);
//update may edit in-case it changed as a result of the AI change //update may edit in-case it changed as a result of the AI change
setMayEdit(screen.getLobby().mayEdit(index)); setMayEdit(screen.getLobby().mayEdit(index));

View File

@@ -1,5 +1,8 @@
package forge.interfaces; package forge.interfaces;
public interface IUpdateable { import forge.match.LobbySlotType;
public interface IUpdateable{
void update(boolean fullUpdate); void update(boolean fullUpdate);
void update(int slot, LobbySlotType type);
} }

View File

@@ -111,6 +111,7 @@ public abstract class GameLobby implements IHasGameType {
final boolean archenemyRemoved = triesToChangeArchenemy && !event.getArchenemy().booleanValue(); final boolean archenemyRemoved = triesToChangeArchenemy && !event.getArchenemy().booleanValue();
final boolean hasArchenemyChanged = triesToChangeArchenemy && slot.isArchenemy() != event.getArchenemy().booleanValue(); final boolean hasArchenemyChanged = triesToChangeArchenemy && slot.isArchenemy() != event.getArchenemy().booleanValue();
final boolean changed = slot.apply(event) || hasArchenemyChanged; final boolean changed = slot.apply(event) || hasArchenemyChanged;
// Change archenemy teams // 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) { if (changed) {
updateView(false); updateView(false);
} }

View File

@@ -1,5 +1,6 @@
package forge.net; package forge.net;
import forge.match.LobbySlotType;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -54,6 +55,8 @@ public class NetConnectUtil {
view.update(fullUpdate); view.update(fullUpdate);
server.updateLobbyState(); server.updateLobbyState();
} }
@Override
public final void update(final int slot, final LobbySlotType type) {return;}
}); });
view.setPlayerChangeListener(new IPlayerChangeListener() { view.setPlayerChangeListener(new IPlayerChangeListener() {
@Override @Override