From e69ecb7abc592bcb2ffaa322cdd8712a04b400ad Mon Sep 17 00:00:00 2001 From: Doublestrike Date: Sat, 13 Oct 2012 07:01:29 +0000 Subject: [PATCH] Match UI multiplayer go for takeoff. - Up to 8 fields can be used - Up to 4 hands can be used - Multiplayer submenu added in home screen Please delete your old match_preferred.xml layout; old match layouts are invalid. --- .gitattributes | 4 + res/layouts/home_default.xml | 1 + res/layouts/match_default.xml | 6 +- src/main/java/forge/control/FControl.java | 3 +- src/main/java/forge/game/GameNew.java | 7 +- src/main/java/forge/game/phase/PhaseUtil.java | 5 +- .../java/forge/game/player/ComputerUtil.java | 1 - .../java/forge/gui/framework/DragCell.java | 1 + src/main/java/forge/gui/framework/EDocID.java | 12 +- .../java/forge/gui/framework/VEmptyDoc.java | 71 +++++++ src/main/java/forge/gui/home/EMenuGroup.java | 1 + src/main/java/forge/gui/home/VMainMenu.java | 3 + .../home/multiplayer/CSubmenuMultiTest.java | 112 +++++++++++ .../home/multiplayer/VSubmenuMultiTest.java | 180 ++++++++++++++++++ src/main/java/forge/gui/match/CMatchUI.java | 73 +++++-- .../java/forge/gui/match/ControlWinLose.java | 33 ++-- src/main/java/forge/gui/match/VMatchUI.java | 73 +++++-- .../gui/match/nonsingleton/CEmptyDoc.java | 34 ++++ .../forge/gui/match/nonsingleton/CHand.java | 2 +- .../forge/gui/match/nonsingleton/VHand.java | 8 +- .../forge/properties/ForgePreferences.java | 113 +++++------ 21 files changed, 626 insertions(+), 117 deletions(-) create mode 100644 src/main/java/forge/gui/framework/VEmptyDoc.java create mode 100644 src/main/java/forge/gui/home/multiplayer/CSubmenuMultiTest.java create mode 100644 src/main/java/forge/gui/home/multiplayer/VSubmenuMultiTest.java create mode 100644 src/main/java/forge/gui/match/nonsingleton/CEmptyDoc.java diff --git a/.gitattributes b/.gitattributes index 1637a9d18f9..3cb0c604c21 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12744,6 +12744,7 @@ src/main/java/forge/gui/framework/SLayoutIO.java -text src/main/java/forge/gui/framework/SOverflowUtil.java -text src/main/java/forge/gui/framework/SRearrangingUtil.java -text src/main/java/forge/gui/framework/SResizingUtil.java -text +src/main/java/forge/gui/framework/VEmptyDoc.java -text src/main/java/forge/gui/framework/package-info.java svneol=native#text/plain src/main/java/forge/gui/home/CMainMenu.java -text src/main/java/forge/gui/home/EMenuGroup.java -text @@ -12762,6 +12763,8 @@ src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java -text src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletContests.java -text src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletLoad.java -text src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java -text +src/main/java/forge/gui/home/multiplayer/CSubmenuMultiTest.java -text +src/main/java/forge/gui/home/multiplayer/VSubmenuMultiTest.java -text src/main/java/forge/gui/home/package-info.java svneol=native#text/plain src/main/java/forge/gui/home/quest/CSubmenuChallenges.java -text src/main/java/forge/gui/home/quest/CSubmenuDuels.java -text @@ -12818,6 +12821,7 @@ src/main/java/forge/gui/match/controllers/CPicture.java -text src/main/java/forge/gui/match/controllers/CPlayers.java -text src/main/java/forge/gui/match/controllers/CStack.java -text src/main/java/forge/gui/match/controllers/package-info.java svneol=native#text/plain +src/main/java/forge/gui/match/nonsingleton/CEmptyDoc.java -text src/main/java/forge/gui/match/nonsingleton/CField.java -text src/main/java/forge/gui/match/nonsingleton/CHand.java -text src/main/java/forge/gui/match/nonsingleton/VField.java -text diff --git a/res/layouts/home_default.xml b/res/layouts/home_default.xml index 86576748184..2a661eed3dd 100644 --- a/res/layouts/home_default.xml +++ b/res/layouts/home_default.xml @@ -17,6 +17,7 @@ HOME_GAUNTLETLOAD HOME_GAUNTLETQUICK HOME_GAUNTLETCONTESTS + HOME_MULTITEST HOME_CONSTRUCTED HOME_DRAFT HOME_SEALED diff --git a/res/layouts/match_default.xml b/res/layouts/match_default.xml index d35f7bbd47d..95a9086682e 100644 --- a/res/layouts/match_default.xml +++ b/res/layouts/match_default.xml @@ -13,16 +13,16 @@ BUTTON_DOCK - FIELD_0 + FIELD_1 - HAND_1 + HAND_0 CARD_DETAIL - FIELD_1 + FIELD_0 CARD_PICTURE diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 4df71907c3b..75e4e4472d7 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -270,7 +270,8 @@ public enum FControl { children = display.getComponentsInLayer(JLayeredPane.MODAL_LAYER); if (children.length != 0) { children[0].setSize(display.getSize()); } } - + + /** @return {@link forge.game.player.Player} */ public Player getPlayer() { return AllZone.getHumanPlayer(); } diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 43e626957f1..17bde73e024 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -62,7 +62,8 @@ public class GameNew { newGameCleanup(); newMatchCleanup(); - + + Singletons.getModel().getPreferences().actuateMatchPreferences(); Card.resetUniqueNumber(); for( PlayerStartsGame p : players ) { @@ -284,9 +285,9 @@ public class GameNew { private static void newMatchCleanup() { if (Singletons.getModel().getMatchState().getGamesPlayedCount() != 0) { return; } - // TODO restore this functionality!!! //VMatchUI.SINGLETON_INSTANCE.getViewDevMode().getDocument().setVisible(Preferences.DEV_MODE); + final List allFields = VMatchUI.SINGLETON_INSTANCE.getFieldViews(); for (final VField field : allFields) { @@ -297,8 +298,6 @@ public class GameNew { VAntes.SINGLETON_INSTANCE.clearAnteCards(); AllZone.getInputControl().resetInput(); Singletons.getModel().getMatchState().reset(); - - Singletons.getModel().getPreferences().actuateMatchPreferences(); } // this is where the computer cheats diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index 2ba259d76c1..eff33e64888 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -26,7 +26,6 @@ import com.google.common.base.Predicate; import forge.AllZone; import forge.AllZoneUtil; import forge.Card; - import forge.CardLists; import forge.CardPredicates.Presets; import forge.Singletons; @@ -426,8 +425,8 @@ public class PhaseUtil { final Player p = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn(); final CMatchUI t = CMatchUI.SINGLETON_INSTANCE; - // Index of field; computer is 0, human is 1 - int i = p.isComputer() ? 0 : 1; + // Index of field; computer is 1, human is 0 + int i = p.isComputer() ? 1 : 0; switch(s) { case UPKEEP: diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index 98e92c010bc..17892cb68f3 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -30,7 +30,6 @@ import com.google.common.collect.Iterables; import forge.AllZone; import forge.AllZoneUtil; import forge.Card; - import forge.CardLists; import forge.CardPredicates; import forge.CardPredicates.Presets; diff --git a/src/main/java/forge/gui/framework/DragCell.java b/src/main/java/forge/gui/framework/DragCell.java index 1300f8ced75..c090d2e47c4 100644 --- a/src/main/java/forge/gui/framework/DragCell.java +++ b/src/main/java/forge/gui/framework/DragCell.java @@ -271,6 +271,7 @@ public final class DragCell extends JPanel implements ILocalRepaint { /** Adds a document to the tabs. * @param doc0   {@link forge.gui.framework.IVDoc} */ public void addDoc(final IVDoc doc0) { + if (doc0 instanceof VEmptyDoc) { return; } allDocs.add(doc0); doc0.setParentCell(this); pnlHead.add(doc0.getTabLabel(), "h 100%!, gap " + tabPaddingPx + "px " + tabPaddingPx + "px 0 0", allDocs.size() - 1); diff --git a/src/main/java/forge/gui/framework/EDocID.java b/src/main/java/forge/gui/framework/EDocID.java index 58de37e3b9b..4a3f78a237c 100644 --- a/src/main/java/forge/gui/framework/EDocID.java +++ b/src/main/java/forge/gui/framework/EDocID.java @@ -16,6 +16,7 @@ import forge.gui.home.gauntlet.VSubmenuGauntletBuild; import forge.gui.home.gauntlet.VSubmenuGauntletContests; import forge.gui.home.gauntlet.VSubmenuGauntletLoad; import forge.gui.home.gauntlet.VSubmenuGauntletQuick; +import forge.gui.home.multiplayer.VSubmenuMultiTest; import forge.gui.home.quest.VSubmenuChallenges; import forge.gui.home.quest.VSubmenuDuels; import forge.gui.home.quest.VSubmenuQuestData; @@ -69,6 +70,7 @@ public enum EDocID { /** */ HOME_GAUNTLETLOAD (VSubmenuGauntletLoad.SINGLETON_INSTANCE), /** */ HOME_GAUNTLETQUICK (VSubmenuGauntletQuick.SINGLETON_INSTANCE), /** */ HOME_GAUNTLETCONTESTS (VSubmenuGauntletContests.SINGLETON_INSTANCE), /** */ + HOME_MULTITEST (VSubmenuMultiTest.SINGLETON_INSTANCE), /** */ HOME_PREFERENCES (VSubmenuPreferences.SINGLETON_INSTANCE), /** */ HOME_AVATARS (VSubmenuAvatars.SINGLETON_INSTANCE), /** */ HOME_DECKEDITOR (VSubmenuDeckEditor.SINGLETON_INSTANCE), /** */ @@ -91,10 +93,18 @@ public enum EDocID { /** */ // Non-user battlefields (AI or teammate), use setDoc to register. FIELD_0 (null), /** */ FIELD_1 (null), /** */ + FIELD_2 (null), /** */ + FIELD_3 (null), /** */ + FIELD_4 (null), /** */ + FIELD_5 (null), /** */ + FIELD_6 (null), /** */ + FIELD_7 (null), /** */ // Non-user hands (AI or teammate), use setDoc to register. HAND_0 (null), /** */ - HAND_1 (null); + HAND_1 (null), /** */ + HAND_2 (null), /** */ + HAND_3 (null); // End enum declarations, start enum methods. private IVDoc vDoc; diff --git a/src/main/java/forge/gui/framework/VEmptyDoc.java b/src/main/java/forge/gui/framework/VEmptyDoc.java new file mode 100644 index 00000000000..c91a0cc25c0 --- /dev/null +++ b/src/main/java/forge/gui/framework/VEmptyDoc.java @@ -0,0 +1,71 @@ +package forge.gui.framework; + +import forge.gui.match.nonsingleton.CEmptyDoc; + +/** + * An intentionally empty IVDoc to fill field slots unused + * by the current layout of a match UI. + */ +public class VEmptyDoc implements IVDoc { + // Fields used with interface IVDoc + private final CEmptyDoc control; + private final EDocID docID; + + /** + * An intentionally empty IVDoc to fill field slots unused + * by the current layout of a match UI. + * + * @param id0 EDocID + */ + public VEmptyDoc(final EDocID id0) { + id0.setDoc(this); + docID = id0; + control = new CEmptyDoc(); + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getDocumentID() + */ + @Override + public EDocID getDocumentID() { + return docID; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getTabLabel() + */ + @Override + public DragTab getTabLabel() { + return null; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getLayoutControl() + */ + @Override + public ICDoc getLayoutControl() { + return control; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#setParentCell(forge.gui.framework.DragCell) + */ + @Override + public void setParentCell(DragCell cell0) { + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getParentCell() + */ + @Override + public DragCell getParentCell() { + return null; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#populate() + */ + @Override + public void populate() { + } +} diff --git a/src/main/java/forge/gui/home/EMenuGroup.java b/src/main/java/forge/gui/home/EMenuGroup.java index e4c975478bd..fbadccc873a 100644 --- a/src/main/java/forge/gui/home/EMenuGroup.java +++ b/src/main/java/forge/gui/home/EMenuGroup.java @@ -11,6 +11,7 @@ public enum EMenuGroup { /** */ SANCTIONED ("Sanctioned Game Formats"), /** */ QUEST ("Quest Mode"), /** */ GAUNTLET ("Gauntlets"), /** */ + MULTIPLAYER ("Multiplayer"), /** */ SETTINGS ("Game Settings"), /** */ UTILITIES ("Tools"); diff --git a/src/main/java/forge/gui/home/VMainMenu.java b/src/main/java/forge/gui/home/VMainMenu.java index e114a4fbd0b..76f52ae006a 100644 --- a/src/main/java/forge/gui/home/VMainMenu.java +++ b/src/main/java/forge/gui/home/VMainMenu.java @@ -46,6 +46,7 @@ import forge.gui.home.gauntlet.VSubmenuGauntletBuild; import forge.gui.home.gauntlet.VSubmenuGauntletContests; import forge.gui.home.gauntlet.VSubmenuGauntletLoad; import forge.gui.home.gauntlet.VSubmenuGauntletQuick; +import forge.gui.home.multiplayer.VSubmenuMultiTest; import forge.gui.home.quest.VSubmenuChallenges; import forge.gui.home.quest.VSubmenuDuels; import forge.gui.home.quest.VSubmenuQuestData; @@ -109,6 +110,8 @@ public enum VMainMenu implements IVDoc { allSubmenus.add(VSubmenuGauntletLoad.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuGauntletContests.SINGLETON_INSTANCE); + allSubmenus.add(VSubmenuMultiTest.SINGLETON_INSTANCE); + allSubmenus.add(VSubmenuPreferences.SINGLETON_INSTANCE); allSubmenus.add(VSubmenuAvatars.SINGLETON_INSTANCE); diff --git a/src/main/java/forge/gui/home/multiplayer/CSubmenuMultiTest.java b/src/main/java/forge/gui/home/multiplayer/CSubmenuMultiTest.java new file mode 100644 index 00000000000..905b339f0bd --- /dev/null +++ b/src/main/java/forge/gui/home/multiplayer/CSubmenuMultiTest.java @@ -0,0 +1,112 @@ +package forge.gui.home.multiplayer; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JRadioButton; +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; + +import forge.AllZone; +import forge.Command; +import forge.Singletons; +import forge.deck.Deck; +import forge.deck.DeckgenUtil; +import forge.game.GameNew; +import forge.game.GameType; +import forge.game.PlayerStartsGame; +import forge.game.player.PlayerType; +import forge.gui.SOverlayUtils; +import forge.gui.framework.ICDoc; +import forge.gui.match.CMatchUI; + +/** + * Controls the deck editor submenu option in the home UI. + * + *

(C at beginning of class name denotes a control class.) + * + */ +public enum CSubmenuMultiTest implements ICDoc { + /** */ + SINGLETON_INSTANCE; + + private final VSubmenuMultiTest view = VSubmenuMultiTest.SINGLETON_INSTANCE; + + /* (non-Javadoc) + * @see forge.control.home.IControlSubmenu#update() + */ + @Override + public void initialize() { + // Checkbox event handling + view.getBtnStart().addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent arg0) { + start(); + } + }); + } + + /* (non-Javadoc) + * @see forge.control.home.IControlSubmenu#update() + */ + @Override + public void update() { } + + /* (non-Javadoc) + * @see forge.gui.framework.ICDoc#getCommandOnSelect() + */ + @Override + public Command getCommandOnSelect() { + return null; + } + + private void start() { + // Retrieve selections + JRadioButton radTemp = null; + final int numFields; + final int numHands; + + for (JRadioButton rad : view.getFieldRadios()) { + if (rad.isSelected()) { radTemp = rad; break; } } + + numFields = (radTemp == null ? 2 : Integer.valueOf(radTemp.getText())); + + radTemp = null; + for (JRadioButton rad : view.getHandRadios()) { + if (rad.isSelected()) { radTemp = rad; break; } } + + numHands = (radTemp == null ? 1 : Integer.valueOf(radTemp.getText())); + + // Boilerplate start game code + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + SOverlayUtils.startGameOverlay(); + SOverlayUtils.showOverlay(); + } + }); + + final SwingWorker worker = new SwingWorker() { + @Override + public Object doInBackground() { + Deck humanDeck = DeckgenUtil.getRandomColorDeck(PlayerType.HUMAN); + Deck aiDeck = DeckgenUtil.getRandomColorDeck(PlayerType.COMPUTER); + + CMatchUI.SINGLETON_INSTANCE.initMatch(numFields, numHands); + Singletons.getModel().getMatchState().setGameType(GameType.Constructed); + + if (humanDeck != null && aiDeck != null) { + GameNew.newGame(new PlayerStartsGame(AllZone.getHumanPlayer(), humanDeck), + new PlayerStartsGame(AllZone.getComputerPlayer(), aiDeck)); + } + return null; + } + + @Override + public void done() { + SOverlayUtils.hideOverlay(); + } + }; + worker.execute(); + } +} diff --git a/src/main/java/forge/gui/home/multiplayer/VSubmenuMultiTest.java b/src/main/java/forge/gui/home/multiplayer/VSubmenuMultiTest.java new file mode 100644 index 00000000000..e089d142271 --- /dev/null +++ b/src/main/java/forge/gui/home/multiplayer/VSubmenuMultiTest.java @@ -0,0 +1,180 @@ +package forge.gui.home.multiplayer; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JRadioButton; + +import net.miginfocom.swing.MigLayout; +import forge.gui.framework.DragCell; +import forge.gui.framework.DragTab; +import forge.gui.framework.EDocID; +import forge.gui.framework.ICDoc; +import forge.gui.home.EMenuGroup; +import forge.gui.home.IVSubmenu; +import forge.gui.home.StartButton; +import forge.gui.toolbox.FLabel; +import forge.gui.toolbox.FPanel; +import forge.gui.toolbox.FRadioButton; + +/** + * Assembles Swing components of deck editor submenu option singleton. + * + *

(V at beginning of class name denotes a view class.) + * + */ +public enum VSubmenuMultiTest implements IVSubmenu { + /** */ + SINGLETON_INSTANCE; + + // Fields used with interface IVDoc + private DragCell parentCell; + private final DragTab tab = new DragTab("Multiplayer Test"); + private final JPanel pnlFields, pnlHands; + + /** */ + private final List fieldRadios = new ArrayList(); + private final List handRadios = new ArrayList(); + private final StartButton btnStart = new StartButton(); + private final ButtonGroup grpFields = new ButtonGroup(); + private final ButtonGroup grpHands = new ButtonGroup(); + + private VSubmenuMultiTest() { + FRadioButton temp; + + for (int i = 1; i < 8; i++) { + temp = new FRadioButton(); + temp.setText(String.valueOf(i + 1)); + fieldRadios.add(temp); + grpFields.add(temp); + } + + for (int i = 0; i < 4; i++) { + temp = new FRadioButton(); + temp.setText(String.valueOf(i + 1)); + handRadios.add(temp); + grpHands.add(temp); + } + + pnlFields = new FPanel(); + pnlFields.setLayout(new MigLayout("insets 0, gap 0, wrap")); + pnlFields.add(new FLabel.Builder().text("Player panels:").build(), "w 100px!, h 30px!"); + + for (JRadioButton rad : fieldRadios) { + pnlFields.add(rad, "w 100px!, h 30px!, gap 30px 0 0 0"); + } + + pnlHands = new FPanel(); + pnlHands.setLayout(new MigLayout("insets 0, gap 0, wrap")); + pnlHands.add(new FLabel.Builder().text("Hand panels:").build(), "w 100px!, h 30px!"); + + for (JRadioButton rad : handRadios) { + pnlHands.add(rad, "w 100px!, h 30px!, gap 30px 0 0 0"); + } + + handRadios.get(0).setSelected(true); + fieldRadios.get(0).setSelected(true); + } + + /** @return {@link javax.swing.JButton} */ + public JButton getBtnStart() { + return btnStart; + } + + /** @return {@link java.util.List} */ + public List getFieldRadios() { + return fieldRadios; + } + + /** @return {@link java.util.List} */ + public List getHandRadios() { + return handRadios; + } + + /* (non-Javadoc) + * @see forge.view.home.IViewSubmenu#populate() + */ + @Override + public void populate() { + parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0, wrap 2")); + + parentCell.getBody().add(pnlFields, "w 41%!, gap 6% 6% 50px 0, growy, pushy"); + parentCell.getBody().add(pnlHands, "w 41%!, gap 0 0 50px 0, growy, pushy"); + parentCell.getBody().add(new FLabel.Builder() + .text("Starts a new game with preconstructed 2 color decks for each field.") + .build(), "gap 0 0 50px 5px, ax center, span 2"); + parentCell.getBody().add(new FLabel.Builder() + .text("Field 0 is Human, the rest are AI [AllZone.getComputerPlayer()].") + .build(), "gap 0 0 0 5px, ax center, span 2"); + parentCell.getBody().add(btnStart, "gap 0 0 50px 50px, ax center, span 2"); + } + + /* (non-Javadoc) + * @see forge.view.home.IViewSubmenu#getGroup() + */ + @Override + public EMenuGroup getGroupEnum() { + return EMenuGroup.MULTIPLAYER; + } + + /* (non-Javadoc) + * @see forge.gui.home.IVSubmenu#getMenuTitle() + */ + @Override + public String getMenuTitle() { + return "Testing (Temporary)"; + } + + /* (non-Javadoc) + * @see forge.gui.home.IVSubmenu#getItemEnum() + */ + @Override + public EDocID getItemEnum() { + return EDocID.HOME_MULTITEST; + } + + //========== Overridden from IVDoc + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getDocumentID() + */ + @Override + public EDocID getDocumentID() { + return EDocID.HOME_MULTITEST; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getTabLabel() + */ + @Override + public DragTab getTabLabel() { + return tab; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getLayoutControl() + */ + @Override + public ICDoc getLayoutControl() { + return CSubmenuMultiTest.SINGLETON_INSTANCE; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#setParentCell(forge.gui.framework.DragCell) + */ + @Override + public void setParentCell(DragCell cell0) { + this.parentCell = cell0; + } + + /* (non-Javadoc) + * @see forge.gui.framework.IVDoc#getParentCell() + */ + @Override + public DragCell getParentCell() { + return parentCell; + } +} diff --git a/src/main/java/forge/gui/match/CMatchUI.java b/src/main/java/forge/gui/match/CMatchUI.java index 6c4ca1929d8..566bea28a92 100644 --- a/src/main/java/forge/gui/match/CMatchUI.java +++ b/src/main/java/forge/gui/match/CMatchUI.java @@ -17,28 +17,21 @@ */ package forge.gui.match; -import java.awt.Image; -import java.io.File; import java.util.ArrayList; import java.util.List; -import javax.swing.ImageIcon; - +import forge.AllZone; import forge.Card; -import forge.Singletons; -import forge.game.GameType; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.gui.CardContainer; +import forge.gui.framework.EDocID; import forge.gui.match.controllers.CDetail; import forge.gui.match.controllers.CMessage; import forge.gui.match.controllers.CPicture; import forge.gui.match.nonsingleton.CField; import forge.gui.match.nonsingleton.VField; -import forge.gui.toolbox.FSkin; -import forge.properties.ForgePreferences.FPref; -import forge.properties.ForgeProps; -import forge.properties.NewConstants; +import forge.gui.match.nonsingleton.VHand; /** * Constructs instance of match UI controller, used as a single point of @@ -53,19 +46,31 @@ public enum CMatchUI implements CardContainer { SINGLETON_INSTANCE; /** - * Fires up controllers for each component of UI. + * Due to be deprecated with new multiplayer changes. Doublestrike 13-10-12. * * @param strAvatarIcon   Filename of non-default avatar icon, if desired. * */ public void initMatch(final String strAvatarIcon) { + this.initMatch(2, 1); + } + + /** + * Instantiates at a match with a specified number of players + * and hands. + * + * @param numFieldPanels int + * @param numHandPanels int + */ + public void initMatch(int numFieldPanels, int numHandPanels) { + // TODO fix for use with multiplayer // Update avatars - final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(","); + /*final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(","); int i = 0; for (VField view : VMatchUI.SINGLETON_INSTANCE.getFieldViews()) { final Image img; // Update AI quest icon - if (i != 1 && Singletons.getModel().getMatchState().getGameType() == GameType.Quest) { + if (i == 1 && Singletons.getModel().getMatchState().getGameType() == GameType.Quest) { String filename = ForgeProps.getFile(NewConstants.IMAGE_ICON) + File.separator; if (strAvatarIcon != null) { @@ -86,7 +91,45 @@ public enum CMatchUI implements CardContainer { view.getLblAvatar().setIcon(new ImageIcon(img)); view.getLblAvatar().getResizeTimer().start(); + }*/ + + // Instantiate all required field slots (user at 0) + final List fields = new ArrayList(); + for (int i = 0; i < numFieldPanels; i++) { + switch (i) { + case 0: + fields.add(0, new VField(EDocID.FIELD_0, AllZone.getHumanPlayer())); + fields.get(0).getLayoutControl().initialize(); + break; + case 1: + fields.add(1, new VField(EDocID.FIELD_1, AllZone.getComputerPlayer())); + fields.get(1).getLayoutControl().initialize(); + break; + default: + // A field must be initialized after it's instantiated, to update player info. + // No player, no init. + fields.add(i, new VField(EDocID.valueOf("FIELD_" + i), null)); + } } + + // Instantiate all required hand slots (user at 0) + final List hands = new ArrayList(); + for (int i = 0; i < numHandPanels; i++) { + switch (i) { + case 0: + // A hand must be initialized after it's instantiated, to update player info. + // No player, no init. + hands.add(0, new VHand(EDocID.HAND_0, AllZone.getHumanPlayer())); + hands.get(0).getLayoutControl().initialize(); + break; + default: + hands.add(i, new VHand(EDocID.valueOf("HAND_" + i), null)); + } + } + + // Replace old instances + VMatchUI.SINGLETON_INSTANCE.setFieldViews(fields); + VMatchUI.SINGLETON_INSTANCE.setHandViews(hands); } /** @@ -156,8 +199,8 @@ public enum CMatchUI implements CardContainer { public final boolean stopAtPhase(final Player turn, final PhaseType phase) { final List fieldControllers = CMatchUI.this.getFieldControls(); - // AI field is at index [0] - int index = turn.isComputer() ? 0 : 1; + // Index of field; computer is 1, human is 0 + int index = turn.isComputer() ? 1 : 0; VField vf = fieldControllers.get(index).getView(); switch (phase) { diff --git a/src/main/java/forge/gui/match/ControlWinLose.java b/src/main/java/forge/gui/match/ControlWinLose.java index b89d869f4b1..800ee3f1156 100644 --- a/src/main/java/forge/gui/match/ControlWinLose.java +++ b/src/main/java/forge/gui/match/ControlWinLose.java @@ -83,6 +83,7 @@ public class ControlWinLose { // Clear cards off of playing areas final List hands = VMatchUI.SINGLETON_INSTANCE.getHandViews(); for (VHand h : hands) { + if (h.getPlayer() == null) { continue; } h.getPlayer().getZone(ZoneType.Battlefield).reset(); h.getPlayer().getZone(ZoneType.Hand).reset(); } @@ -112,7 +113,7 @@ public class ControlWinLose { Singletons.getModel().getPreferences().save(); CMatchUI.SINGLETON_INSTANCE.initMatch(null); - GameNew.newGame( new PlayerStartsGame(AllZone.getHumanPlayer(), AllZone.getHumanPlayer().getDeck()), + GameNew.newGame(new PlayerStartsGame(AllZone.getHumanPlayer(), AllZone.getHumanPlayer().getDeck()), new PlayerStartsGame(AllZone.getComputerPlayer(), AllZone.getComputerPlayer().getDeck())); } @@ -124,27 +125,33 @@ public class ControlWinLose { */ private void executeAnte() { List games = Singletons.getModel().getMatchState().getGamesPlayed(); - if ( games.isEmpty() ) return; - GameSummary lastGame = games.get(games.size()-1); - for (Player p: Singletons.getModel().getGameState().getPlayers()) { - if (!p.getName().equals(lastGame.getWinner())) continue; // not a loser - + if (games.isEmpty()) { + return; + } + GameSummary lastGame = games.get(games.size() - 1); + for (Player p : Singletons.getModel().getGameState().getPlayers()) { + if (!p.getName().equals(lastGame.getWinner())) { + continue; // not a loser + } + // remove all the lost cards from owners' decks List losses = new ArrayList(); - for (Player loser: Singletons.getModel().getGameState().getPlayers()) { - if( loser.equals(p)) continue; // not a loser - + for (Player loser : Singletons.getModel().getGameState().getPlayers()) { + if (loser.equals(p)) { + continue; // not a loser + } + List compAntes = loser.getCardsIn(ZoneType.Ante); - Deck cDeck = loser.getDeck(); + Deck cDeck = loser.getDeck(); for (Card c : compAntes) { CardPrinted toRemove = CardDb.instance().getCard(c); cDeck.getMain().remove(toRemove); } } - + // offer to winner, if he is human - if( p.isHuman() ) { + if (p.isHuman()) { List o = GuiChoose.noneOrMany("Select cards to add to your deck", losses); if (null != o) { for (CardPrinted c : o) { @@ -152,7 +159,7 @@ public class ControlWinLose { } } } - + break; // expect no other winners } diff --git a/src/main/java/forge/gui/match/VMatchUI.java b/src/main/java/forge/gui/match/VMatchUI.java index 8a78f5e3020..62baffb0d3f 100644 --- a/src/main/java/forge/gui/match/VMatchUI.java +++ b/src/main/java/forge/gui/match/VMatchUI.java @@ -6,14 +6,13 @@ import java.util.List; import javax.swing.JButton; import javax.swing.SwingUtilities; -import forge.AllZone; import forge.Singletons; import forge.gui.framework.DragCell; import forge.gui.framework.EDocID; -import forge.gui.framework.IVDoc; import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.SLayoutIO; import forge.gui.framework.SRearrangingUtil; +import forge.gui.framework.VEmptyDoc; import forge.gui.match.nonsingleton.VField; import forge.gui.match.nonsingleton.VHand; import forge.gui.match.views.VDev; @@ -32,17 +31,26 @@ public enum VMatchUI implements IVTopLevelUI { /** */ SINGLETON_INSTANCE; - // Instantiate non-singleton tab instances - private final IVDoc field0 = new VField(EDocID.FIELD_0, AllZone.getComputerPlayer()); - private final IVDoc field1 = new VField(EDocID.FIELD_1, AllZone.getHumanPlayer()); - - private final IVDoc hand0 = new VHand(EDocID.HAND_0, AllZone.getComputerPlayer()); - private final IVDoc hand1 = new VHand(EDocID.HAND_1, AllZone.getHumanPlayer()); - + private List lstFields = new ArrayList(); + private List lstHands = new ArrayList(); // Other instantiations private final CMatchUI control = null; + private VMatchUI() { + // Create empty docs for all field slots + for (int i = 0; i < 8; i++) { + EDocID.valueOf("FIELD_" + i).setDoc( + new VEmptyDoc(EDocID.valueOf("FIELD_" + i))); + } + + // Create empty docs for all hand slots + for (int i = 0; i < 4; i++) { + EDocID.valueOf("HAND_" + i).setDoc( + new VEmptyDoc(EDocID.valueOf("HAND_" + i))); + } + } + /** */ @Override public void instantiate() { @@ -73,6 +81,31 @@ public enum VMatchUI implements IVTopLevelUI { } } + // Add extra players alternatively to existing user/AI field panels. + for (int i = 2; i < lstFields.size(); i++) { + // If already in layout, no need to add again. + if (lstFields.get(i).getParentCell() != null) { + continue; + } + + if (i % 2 == 0) { + lstFields.get(0).getParentCell().addDoc(lstFields.get(i)); + } + else { + lstFields.get(1).getParentCell().addDoc(lstFields.get(i)); + } + } + + // Add extra hands to existing hand panel. + for (int i = 0; i < lstHands.size(); i++) { + // If already in layout, no need to add again. + if (lstHands.get(i).getParentCell() != null) { + continue; + } + + lstHands.get(0).getParentCell().addDoc(lstHands.get(i)); + } + // Fill in gaps SwingUtilities.invokeLater(new Runnable() { @Override @@ -94,20 +127,24 @@ public enum VMatchUI implements IVTopLevelUI { return this.control; } - /** @return {@link java.util.List}<{@link forge.gui.match.nonsigleton.VField}> */ + /** @param lst0 List */ + public void setFieldViews(final List lst0) { + this.lstFields = lst0; + } + + /** @return {@link java.util.List}<{@link forge.gui.match.nonsigleton.VHand}> */ public List getFieldViews() { - final List lst = new ArrayList(); - lst.add((VField) field0); - lst.add((VField) field1); - return lst; + return lstFields; + } + + /** @param lst0 List */ + public void setHandViews(final List lst0) { + this.lstHands = lst0; } /** @return {@link java.util.List}<{@link forge.gui.match.nonsigleton.VHand}> */ public List getHandViews() { - final List lst = new ArrayList(); - lst.add((VHand) hand0); - lst.add((VHand) hand1); - return lst; + return lstHands; } /** @return {@link javax.swing.JButton} */ diff --git a/src/main/java/forge/gui/match/nonsingleton/CEmptyDoc.java b/src/main/java/forge/gui/match/nonsingleton/CEmptyDoc.java new file mode 100644 index 00000000000..4c378fa2aba --- /dev/null +++ b/src/main/java/forge/gui/match/nonsingleton/CEmptyDoc.java @@ -0,0 +1,34 @@ +package forge.gui.match.nonsingleton; + +import forge.Command; +import forge.gui.framework.ICDoc; + +/** + * An intentionally empty ICDoc to fill field slots unused + * by the current layout of a match UI. + */ +public class CEmptyDoc implements ICDoc { + + /* (non-Javadoc) + * @see forge.gui.framework.ICDoc#getCommandOnSelect() + */ + @Override + public Command getCommandOnSelect() { + return null; + } + + /* (non-Javadoc) + * @see forge.gui.framework.ICDoc#initialize() + */ + @Override + public void initialize() { + } + + /* (non-Javadoc) + * @see forge.gui.framework.ICDoc#update() + */ + @Override + public void update() { + } + +} diff --git a/src/main/java/forge/gui/match/nonsingleton/CHand.java b/src/main/java/forge/gui/match/nonsingleton/CHand.java index 4ffebb92c89..5aa06b19ad7 100644 --- a/src/main/java/forge/gui/match/nonsingleton/CHand.java +++ b/src/main/java/forge/gui/match/nonsingleton/CHand.java @@ -194,7 +194,7 @@ public class CHand implements ICDoc { final PlayerZone pZone = (PlayerZone) a; final HandArea p = view.getHandArea(); final Rectangle rctLibraryLabel = CMatchUI.SINGLETON_INSTANCE - .getFieldControls().get(1) + .getFieldControls().get(0) .getView().getLblLibrary().getBounds(); final List c = pZone.getCards(); diff --git a/src/main/java/forge/gui/match/nonsingleton/VHand.java b/src/main/java/forge/gui/match/nonsingleton/VHand.java index 3d8db262f39..460b01a8ce6 100644 --- a/src/main/java/forge/gui/match/nonsingleton/VHand.java +++ b/src/main/java/forge/gui/match/nonsingleton/VHand.java @@ -58,7 +58,13 @@ public class VHand implements IVDoc { public VHand(final EDocID id0, final Player player0) { docID = id0; id0.setDoc(this); - tab.setText(player0.getName() + " Hand"); + + if (player0 == null) { + tab.setText("NO PLAYER Hand"); + } + else { + tab.setText(player0.getName() + " Hand"); + } player = player0; diff --git a/src/main/java/forge/properties/ForgePreferences.java b/src/main/java/forge/properties/ForgePreferences.java index b1779ab2406..dba7d57b0fa 100644 --- a/src/main/java/forge/properties/ForgePreferences.java +++ b/src/main/java/forge/properties/ForgePreferences.java @@ -75,6 +75,7 @@ public class ForgePreferences { SUBMENU_CURRENTMENU (EMenuItem.CONSTRUCTED.toString()), /** */ SUBMENU_SANCTIONED ("false"), /** */ SUBMENU_GAUNTLET ("false"), /** */ + SUBMENU_MULTIPLAYER ("false"), /** */ SUBMENU_QUEST ("false"), /** */ SUBMENU_SETTINGS ("false"), /** */ SUBMENU_UTILITIES ("false"), /** */ @@ -162,7 +163,7 @@ public class ForgePreferences { // This code is here temporarily to facilitate this transfer. // After a while, this can be deleted. Doublestrike 21-5-12 final File oldFile = new File("forge.preferences"); - + if (oldFile.exists()) { final File newFile = new File(NewConstants.PREFS_GLOBAL_FILE); Files.copy(oldFile, newFile); @@ -170,8 +171,8 @@ public class ForgePreferences { } // END TEMPORARY CONSOLIDATION FACILITATION List lines = FileUtil.readFile(NewConstants.PREFS_GLOBAL_FILE); - for( String line :lines ) { - + for (String line : lines) { + if (line.startsWith("#") || (line.length() == 0)) { continue; } @@ -196,40 +197,40 @@ public class ForgePreferences { public void writeMatchPreferences() { final List fieldViews = VMatchUI.SINGLETON_INSTANCE.getFieldViews(); - // AI field is at index [0] - this.setPref(FPref.PHASE_AI_UPKEEP, String.valueOf(fieldViews.get(0).getLblUpkeep().getEnabled())); - this.setPref(FPref.PHASE_AI_DRAW, String.valueOf(fieldViews.get(0).getLblDraw().getEnabled())); - this.setPref(FPref.PHASE_AI_MAIN1, String.valueOf(fieldViews.get(0).getLblMain1().getEnabled())); - this.setPref(FPref.PHASE_AI_BEGINCOMBAT, String.valueOf(fieldViews.get(0).getLblBeginCombat().getEnabled())); + // AI field is at index [1] + this.setPref(FPref.PHASE_AI_UPKEEP, String.valueOf(fieldViews.get(1).getLblUpkeep().getEnabled())); + this.setPref(FPref.PHASE_AI_DRAW, String.valueOf(fieldViews.get(1).getLblDraw().getEnabled())); + this.setPref(FPref.PHASE_AI_MAIN1, String.valueOf(fieldViews.get(1).getLblMain1().getEnabled())); + this.setPref(FPref.PHASE_AI_BEGINCOMBAT, String.valueOf(fieldViews.get(1).getLblBeginCombat().getEnabled())); this.setPref(FPref.PHASE_AI_DECLAREATTACKERS, - String.valueOf(fieldViews.get(0).getLblDeclareAttackers().getEnabled())); - this.setPref(FPref.PHASE_AI_DECLAREBLOCKERS, - String.valueOf(fieldViews.get(0).getLblDeclareBlockers().getEnabled())); - this.setPref(FPref.PHASE_AI_FIRSTSTRIKE, String.valueOf(fieldViews.get(0).getLblFirstStrike().getEnabled())); - this.setPref(FPref.PHASE_AI_COMBATDAMAGE, String.valueOf(fieldViews.get(0).getLblCombatDamage().getEnabled())); - this.setPref(FPref.PHASE_AI_ENDCOMBAT, String.valueOf(fieldViews.get(0).getLblEndCombat().getEnabled())); - this.setPref(FPref.PHASE_AI_MAIN2, String.valueOf(fieldViews.get(0).getLblMain2().getEnabled())); - this.setPref(FPref.PHASE_AI_EOT, String.valueOf(fieldViews.get(0).getLblEndTurn().getEnabled())); - this.setPref(FPref.PHASE_AI_CLEANUP, String.valueOf(fieldViews.get(0).getLblCleanup().getEnabled())); - - // Human field is at index [1] - this.setPref(FPref.PHASE_HUMAN_UPKEEP, String.valueOf(fieldViews.get(1).getLblUpkeep().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_DRAW, String.valueOf(fieldViews.get(1).getLblDraw().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_MAIN1, String.valueOf(fieldViews.get(1).getLblMain1().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_BEGINCOMBAT, String.valueOf(fieldViews.get(1).getLblBeginCombat().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_DECLAREATTACKERS, String.valueOf(fieldViews.get(1).getLblDeclareAttackers().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_DECLAREBLOCKERS, + this.setPref(FPref.PHASE_AI_DECLAREBLOCKERS, String.valueOf(fieldViews.get(1).getLblDeclareBlockers().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_FIRSTSTRIKE, String.valueOf(fieldViews.get(1).getLblFirstStrike().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_COMBATDAMAGE, String.valueOf(fieldViews.get(1).getLblCombatDamage().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_ENDCOMBAT, String.valueOf(fieldViews.get(1).getLblEndCombat().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_MAIN2, String.valueOf(fieldViews.get(1).getLblMain2().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_EOT, fieldViews.get(1).getLblEndTurn().getEnabled()); - this.setPref(FPref.PHASE_HUMAN_CLEANUP, fieldViews.get(1).getLblCleanup().getEnabled()); + this.setPref(FPref.PHASE_AI_FIRSTSTRIKE, String.valueOf(fieldViews.get(1).getLblFirstStrike().getEnabled())); + this.setPref(FPref.PHASE_AI_COMBATDAMAGE, String.valueOf(fieldViews.get(1).getLblCombatDamage().getEnabled())); + this.setPref(FPref.PHASE_AI_ENDCOMBAT, String.valueOf(fieldViews.get(1).getLblEndCombat().getEnabled())); + this.setPref(FPref.PHASE_AI_MAIN2, String.valueOf(fieldViews.get(1).getLblMain2().getEnabled())); + this.setPref(FPref.PHASE_AI_EOT, String.valueOf(fieldViews.get(1).getLblEndTurn().getEnabled())); + this.setPref(FPref.PHASE_AI_CLEANUP, String.valueOf(fieldViews.get(1).getLblCleanup().getEnabled())); + + // Human field is at index [0] + this.setPref(FPref.PHASE_HUMAN_UPKEEP, String.valueOf(fieldViews.get(0).getLblUpkeep().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_DRAW, String.valueOf(fieldViews.get(0).getLblDraw().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_MAIN1, String.valueOf(fieldViews.get(0).getLblMain1().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_BEGINCOMBAT, String.valueOf(fieldViews.get(0).getLblBeginCombat().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_DECLAREATTACKERS, + String.valueOf(fieldViews.get(0).getLblDeclareAttackers().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_DECLAREBLOCKERS, + String.valueOf(fieldViews.get(0).getLblDeclareBlockers().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_FIRSTSTRIKE, String.valueOf(fieldViews.get(0).getLblFirstStrike().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_COMBATDAMAGE, String.valueOf(fieldViews.get(0).getLblCombatDamage().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_ENDCOMBAT, String.valueOf(fieldViews.get(0).getLblEndCombat().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_MAIN2, String.valueOf(fieldViews.get(0).getLblMain2().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_EOT, fieldViews.get(0).getLblEndTurn().getEnabled()); + this.setPref(FPref.PHASE_HUMAN_CLEANUP, fieldViews.get(0).getLblCleanup().getEnabled()); final VDev v = VDev.SINGLETON_INSTANCE; - + this.setPref(FPref.DEV_MILLING_LOSS, v.getLblMilling().getEnabled()); this.setPref(FPref.DEV_UNLIMITED_LAND, v.getLblUnlimitedLands().getEnabled()); } @@ -245,32 +246,32 @@ public class ForgePreferences { Preferences.UPLOAD_DRAFT = Constant.Runtime.NET_CONN && this.getPrefBoolean(FPref.UI_UPLOAD_DRAFT); // AI field is at index [0] - fieldViews.get(0).getLblUpkeep().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_UPKEEP)); - fieldViews.get(0).getLblDraw().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DRAW)); - fieldViews.get(0).getLblMain1().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_MAIN1)); - fieldViews.get(0).getLblBeginCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_BEGINCOMBAT)); - fieldViews.get(0).getLblDeclareAttackers().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DECLAREATTACKERS)); - fieldViews.get(0).getLblDeclareBlockers().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DECLAREBLOCKERS)); - fieldViews.get(0).getLblFirstStrike().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_FIRSTSTRIKE)); - fieldViews.get(0).getLblCombatDamage().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_COMBATDAMAGE)); - fieldViews.get(0).getLblEndCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_ENDCOMBAT)); - fieldViews.get(0).getLblMain2().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_MAIN2)); - fieldViews.get(0).getLblEndTurn().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_EOT)); - fieldViews.get(0).getLblCleanup().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_CLEANUP)); + fieldViews.get(1).getLblUpkeep().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_UPKEEP)); + fieldViews.get(1).getLblDraw().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DRAW)); + fieldViews.get(1).getLblMain1().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_MAIN1)); + fieldViews.get(1).getLblBeginCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_BEGINCOMBAT)); + fieldViews.get(1).getLblDeclareAttackers().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DECLAREATTACKERS)); + fieldViews.get(1).getLblDeclareBlockers().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DECLAREBLOCKERS)); + fieldViews.get(1).getLblFirstStrike().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_FIRSTSTRIKE)); + fieldViews.get(1).getLblCombatDamage().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_COMBATDAMAGE)); + fieldViews.get(1).getLblEndCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_ENDCOMBAT)); + fieldViews.get(1).getLblMain2().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_MAIN2)); + fieldViews.get(1).getLblEndTurn().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_EOT)); + fieldViews.get(1).getLblCleanup().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_CLEANUP)); // Human field is at index [1] - fieldViews.get(1).getLblUpkeep().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_UPKEEP)); - fieldViews.get(1).getLblDraw().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DRAW)); - fieldViews.get(1).getLblMain1().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_MAIN1)); - fieldViews.get(1).getLblBeginCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_BEGINCOMBAT)); - fieldViews.get(1).getLblDeclareAttackers().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DECLAREATTACKERS)); - fieldViews.get(1).getLblDeclareBlockers().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DECLAREBLOCKERS)); - fieldViews.get(1).getLblFirstStrike().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_FIRSTSTRIKE)); - fieldViews.get(1).getLblCombatDamage().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_COMBATDAMAGE)); - fieldViews.get(1).getLblEndCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_ENDCOMBAT)); - fieldViews.get(1).getLblMain2().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_MAIN2)); - fieldViews.get(1).getLblEndTurn().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_EOT)); - fieldViews.get(1).getLblCleanup().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_CLEANUP)); + fieldViews.get(0).getLblUpkeep().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_UPKEEP)); + fieldViews.get(0).getLblDraw().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DRAW)); + fieldViews.get(0).getLblMain1().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_MAIN1)); + fieldViews.get(0).getLblBeginCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_BEGINCOMBAT)); + fieldViews.get(0).getLblDeclareAttackers().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DECLAREATTACKERS)); + fieldViews.get(0).getLblDeclareBlockers().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DECLAREBLOCKERS)); + fieldViews.get(0).getLblFirstStrike().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_FIRSTSTRIKE)); + fieldViews.get(0).getLblCombatDamage().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_COMBATDAMAGE)); + fieldViews.get(0).getLblEndCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_ENDCOMBAT)); + fieldViews.get(0).getLblMain2().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_MAIN2)); + fieldViews.get(0).getLblEndTurn().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_EOT)); + fieldViews.get(0).getLblCleanup().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_CLEANUP)); //Singletons.getView().getViewMatch().setLayoutParams(this.getPref(FPref.UI_LAYOUT_PARAMS)); }