*Variants:Fixed the UI side of the new Vanguard home screen. (Now to make the match actually start!)

*Variants:Added some apparently unadded scripts from trunk.
This commit is contained in:
Hellfish
2012-11-24 11:41:51 +00:00
parent 7ec3ff9354
commit 15e5376d13
22 changed files with 372 additions and 134 deletions

View File

@@ -2,6 +2,8 @@ package forge.gui.home.variant;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.SwingUtilities;
@@ -21,6 +23,8 @@ import forge.game.player.LobbyPlayer;
import forge.game.player.PlayerType;
import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FDeckChooser;
import forge.gui.toolbox.FList;
import forge.item.CardPrinted;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref;
@@ -51,8 +55,10 @@ public enum CSubmenuVanguard implements ICDoc {
@Override
public void initialize() {
final ForgePreferences prefs = Singletons.getModel().getPreferences();
view.getDcAi().initialize();
view.getDcHuman().initialize();
for(FDeckChooser fdc : view.getDeckChoosers())
{
fdc.initialize();
}
// Checkbox event handling
view.getBtnStart().addActionListener(new ActionListener() {
@@ -111,47 +117,47 @@ public enum CSubmenuVanguard implements ICDoc {
final SwingWorker<Object, Void> worker = new SwingWorker<Object, Void>() {
@Override
public Object doInBackground() {
Deck humanDeck = VSubmenuVanguard.SINGLETON_INSTANCE.getDcHuman().getDeck();
Deck aiDeck = VSubmenuVanguard.SINGLETON_INSTANCE.getDcAi().getDeck();
Object selAiAv = VSubmenuVanguard.SINGLETON_INSTANCE.getAvAi().getSelectedValue();
Object selHumanAv = VSubmenuVanguard.SINGLETON_INSTANCE.getAvHuman().getSelectedValue();
Lobby lobby = Singletons.getControl().getLobby();
LobbyPlayer humanPlayer = lobby.findLocalPlayer(PlayerType.HUMAN);
LobbyPlayer aiPlayer = lobby.findLocalPlayer(PlayerType.COMPUTER);
MatchStartHelper helper = new MatchStartHelper();
final CardPrinted aiVanguard,humanVanguard;
Iterable<CardPrinted> all = VSubmenuVanguard.SINGLETON_INSTANCE.getAllAvatars();
Iterable<CardPrinted> aiAll = VSubmenuVanguard.SINGLETON_INSTANCE.getAllAiAvatars();
if(selAiAv instanceof String)
List<Deck> playerDecks = new ArrayList<Deck>();
for(FDeckChooser fdc : view.getDeckChoosers())
{
//Random is the only string in the list so grab a random avatar.
Random r = new Random();
aiVanguard = Iterables.get(aiAll,r.nextInt(Iterables.size(all)));
playerDecks.add(fdc.getDeck());
}
else
{
aiVanguard = (CardPrinted)selAiAv;
}
if(selHumanAv instanceof String)
{
//Random is the only string in the list so grab a random avatar.
Random r = new Random();
humanVanguard = Iterables.get(all,r.nextInt(Iterables.size(all)));
}
else
{
humanVanguard = (CardPrinted)selHumanAv;
}
helper.addVanguardPlayer(humanPlayer, humanDeck, humanVanguard);
helper.addVanguardPlayer(aiPlayer, aiDeck, aiVanguard);
List<Object> playerAvatars = new ArrayList<Object>();
for(FList fl : view.getAvatarLists())
{
playerAvatars.add(fl.getSelectedValue());
}
Lobby lobby = Singletons.getControl().getLobby();
MatchStartHelper helper = new MatchStartHelper();
Random rnd = new Random();
for(int i=0;i<view.getNumPlayers();i++)
{
LobbyPlayer player = lobby.findLocalPlayer(i == 0 ? PlayerType.HUMAN : PlayerType.COMPUTER);
CardPrinted avatar = null;
if(playerAvatars.get(i) instanceof String)
{
//Random is the only string in the list so grab a random avatar.
if(i == 0)
{
//HUMAN
avatar = Iterables.get(view.getAllAvatars(),rnd.nextInt(Iterables.size(view.getAllAvatars())));
}
else
{
//AI
avatar = Iterables.get(view.getAllAiAvatars(),rnd.nextInt(Iterables.size(view.getAllAiAvatars())));
}
}
helper.addVanguardPlayer(player, playerDecks.get(i), avatar);
}
MatchController mc = Singletons.getModel().getMatch();
mc.initMatch(GameType.Vanguard, helper.getPlayerMap());
mc.startRound();
return null;
}

View File

@@ -1,5 +1,7 @@
package forge.gui.home.variant;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
@@ -73,26 +75,9 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts");
private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures");
private final FDeckChooser dcHuman = new FDeckChooser("Select your deck:", PlayerType.HUMAN);
private final FDeckChooser dcAi = new FDeckChooser("Select AI deck:", PlayerType.COMPUTER);
private final FList avHuman = new FList();
private final FList avAi = new FList();
private final JScrollPane scrHuman = new JScrollPane(avHuman, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
private final JScrollPane scrAi = new JScrollPane(avAi, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
private final Predicate<CardPrinted> avatarTypePred = CardPrinted.Predicates.type("Vanguard");
private final Iterable<CardPrinted> allAvatars = Iterables.filter(CardDb.instance().getAllCards(), avatarTypePred);
private final List<CardPrinted> allAiAvatars = new ArrayList<CardPrinted>();
private final FLabel lblAvatarHuman = new FLabel.Builder()
.text("Human avatar:")
.fontAlign(SwingConstants.CENTER)
.build();
private final FLabel lblAvatarAi = new FLabel.Builder()
.text("AI Avatar:")
.fontAlign(SwingConstants.CENTER)
.build();
//////////////////////////////
@@ -103,7 +88,7 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
private final List<JRadioButton> fieldRadios = new ArrayList<JRadioButton>();
private final ButtonGroup grpFields = new ButtonGroup();
private int currentNumTabsShown = 7;
private int currentNumTabsShown = 8;
//////////////////////////////
@@ -125,62 +110,28 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
}
}
avHuman.setListData(humanListData);
avAi.setListData(aiListData);
avHuman.setSelectedIndex(0);
avAi.setSelectedIndex(0);
//This listener will look for any of the radio buttons being selected
//and call the method that shows/hides tabs appropriately.
ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent changEvent) {
FRadioButton aButton = (FRadioButton)changEvent.getSource();
System.out.println("radio change fired: " + aButton.getText());
ItemListener iListener = new ItemListener() {
if(aButton.isSelected())
{
changeTabs(Integer.parseInt(aButton.getText()));
}
}
};
class SelectedListener implements PropertyChangeListener
{
/* (non-Javadoc)
* @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
*/
@Override
public void propertyChange(PropertyChangeEvent arg0) {
public void itemStateChanged(ItemEvent arg0) {
FRadioButton aButton = (FRadioButton)arg0.getSource();
System.out.println("radio change fired(bean): " + aButton.getText());
if(aButton.isSelected())
if(arg0.getStateChange() == ItemEvent.SELECTED)
{
changeTabs(Integer.parseInt(aButton.getText()));
}
}
}
};
//Create all 8 player settings panel
FRadioButton tempRadio;
FRadioButton tempRadio = null;
FPanel tempPanel;
FDeckChooser tempChooser;
FList tempList;
for (int i = 1; i < 7; i++) {
tempRadio = new FRadioButton();
tempRadio.setText(String.valueOf(i));
tempRadio.setSelected(true);
fieldRadios.add(tempRadio);
grpFields.add(tempRadio);
tempRadio.addChangeListener(changeListener);
tempRadio.addPropertyChangeListener(new SelectedListener());
}
//Settings panel
FPanel settingsPanel = new FPanel();
FPanel radioPane = new FPanel();
@@ -191,6 +142,8 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
tempRadio.setText(String.valueOf(i));
fieldRadios.add(tempRadio);
grpFields.add(tempRadio);
tempRadio.setSelected(true);
tempRadio.addItemListener(iListener);
radioPane.add(tempRadio,"wrap");
}
settingsPanel.add(radioPane);
@@ -236,19 +189,19 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
{
if(toShow < currentNumTabsShown)
{
for(int i=currentNumTabsShown;i>toShow;i--)
for(int i=currentNumTabsShown;i>toShow+1;i--)
{
tabPane.remove(i+1);
tabPane.remove(i);
}
currentNumTabsShown = toShow;
currentNumTabsShown = tabPane.getComponentCount()-1;
}
else
{
for(int i=toShow+1;i<=8;i++)
for(int i=currentNumTabsShown;i<=toShow;i++)
{
tabPane.add(playerPanels.get(i));
tabPane.add("Player " + (i+1),playerPanels.get(i));
}
currentNumTabsShown = toShow;
currentNumTabsShown = tabPane.getComponentCount()-1;
}
}
@@ -258,16 +211,7 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
@Override
public EMenuGroup getGroupEnum() {
return EMenuGroup.VARIANT;
}
public final FDeckChooser getDcHuman() {
return dcHuman;
}
public final FDeckChooser getDcAi() {
return dcAi;
}
}
/* (non-Javadoc)
* @see forge.gui.home.IVSubmenu#getMenuTitle()
@@ -298,22 +242,10 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
for(FDeckChooser fdc : deckChoosers)
{
fdc.populate();
}
}
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(tabPane, "gap 0 0 50px 50px, growx, growy");
/*
dcAi.populate();
dcHuman.populate();
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(dcAi, "w 44%!, gap 0 0 20px 20px, growy, pushy");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(dcHuman, "w 44%!, gap 4% 4% 20px 20px, growy, pushy");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblAvatarAi, "w 44%!, gap 0 0 0px 0px");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblAvatarHuman, "w 44%!, gap 4% 4% 0px 0px");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrAi, "w 44%!, gap 0 0 20px 20px, growy, pushy");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrHuman, "w 44%!, gap 4% 4% 20px 20px, growy, pushy");
*/
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStart, "span 1, ax center");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
@@ -384,19 +316,24 @@ public enum VSubmenuVanguard implements IVSubmenu<CSubmenuVanguard> {
public DragCell getParentCell() {
return parentCell;
}
/**
* @return the avHuman
*
* @return a deckchooser for every player
*/
public FList getAvHuman() {
return avHuman;
public List<FDeckChooser> getDeckChoosers()
{
return deckChoosers;
}
/**
* @return the avAi
*/
public FList getAvAi() {
return avAi;
public List<FList> getAvatarLists()
{
return avatarLists;
}
public int getNumPlayers()
{
return currentNumTabsShown-1;
}
/**