mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +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);
|
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; }
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user