mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
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:
@@ -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; }
|
||||
|
||||
@@ -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,48 @@ public class VLobby implements ILobbyView {
|
||||
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
|
||||
public void update(final boolean fullUpdate) {
|
||||
activePlayersNum = lobby.getNumberOfSlots();
|
||||
@@ -731,7 +774,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() {
|
||||
|
||||
@@ -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) {
|
||||
if (selectedDeckType == deckType && !forceRefresh) { return; }
|
||||
selectedDeckType = deckType;
|
||||
|
||||
@@ -2,6 +2,7 @@ package forge.screens.constructed;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import forge.deck.*;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
@@ -14,10 +15,6 @@ import forge.Graphics;
|
||||
import forge.ai.AIOption;
|
||||
import forge.assets.FSkinColor;
|
||||
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.interfaces.ILobbyView;
|
||||
import forge.interfaces.IPlayerChangeListener;
|
||||
@@ -410,6 +407,43 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
|
||||
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
|
||||
public void update(final boolean fullUpdate) {
|
||||
int playerCount = lobby.getNumberOfSlots();
|
||||
|
||||
@@ -339,6 +339,7 @@ public class PlayerPanel extends FContainer {
|
||||
|
||||
LobbySlot slot = screen.getLobby().getSlot(index);
|
||||
slot.setType(type);
|
||||
screen.update(index,type);
|
||||
|
||||
//update may edit in-case it changed as a result of the AI change
|
||||
setMayEdit(screen.getLobby().mayEdit(index));
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package forge.interfaces;
|
||||
|
||||
public interface IUpdateable {
|
||||
import forge.match.LobbySlotType;
|
||||
|
||||
public interface IUpdateable{
|
||||
void update(boolean fullUpdate);
|
||||
void update(int slot, LobbySlotType type);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user