From 39c85da7f8aefd5f38b0a157392f241d8c917a8b Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 27 May 2013 10:00:18 +0000 Subject: [PATCH] keep player list in CMatchUI, extracted method to setup hand views. --- src/main/java/forge/gui/match/CMatchUI.java | 69 ++++++++++++------- src/main/java/forge/gui/match/VMatchUI.java | 12 ---- .../forge/gui/match/nonsingleton/VField.java | 13 ++-- 3 files changed, 50 insertions(+), 44 deletions(-) diff --git a/src/main/java/forge/gui/match/CMatchUI.java b/src/main/java/forge/gui/match/CMatchUI.java index c56e99586c1..4a3a579b69c 100644 --- a/src/main/java/forge/gui/match/CMatchUI.java +++ b/src/main/java/forge/gui/match/CMatchUI.java @@ -57,6 +57,8 @@ import forge.properties.ForgePreferences.FPref; public enum CMatchUI { SINGLETON_INSTANCE; + private List sortedPlayers; + private ImageIcon getPlayerAvatar(final Player p, final int defaultIndex) { LobbyPlayer lp = p.getLobbyPlayer(); if (null != lp.getIconImageKey()) { @@ -85,25 +87,13 @@ public enum CMatchUI { final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(","); - // Instantiate all required field slots (user at 0) <-- that's not guaranteed + // Instantiate all required field slots (user at 0) + sortedPlayers = shiftPlayersPlaceLocalFirst(players, localPlayer); + + final List fields = new ArrayList(); final List commands = new ArrayList(); - final List hands = new ArrayList(); - // get an arranged list so that the first local player is at index 0 - List sortedPlayers = Lists.newArrayList(players); - int ixFirstHuman = -1; - for(int i = 0; i < players.size(); i++) { - if( sortedPlayers.get(i).getLobbyPlayer() == localPlayer ) { - ixFirstHuman = i; - break; - } - } - if( ixFirstHuman > 0 ) { - sortedPlayers.add(0, sortedPlayers.remove(ixFirstHuman)); - } - - int i = 0; for (Player p : sortedPlayers) { // A field must be initialized after it's instantiated, to update player info. @@ -117,7 +107,23 @@ public enum CMatchUI { setAvatar(f, getPlayerAvatar(p, Integer.parseInt(indices[i > 2 ? 1 : 0]))); f.getLayoutControl().initialize(); c.getLayoutControl().initialize(); - + i++; + } + + // Replace old instances + VMatchUI.SINGLETON_INSTANCE.setCommandViews(commands); + VMatchUI.SINGLETON_INSTANCE.setFieldViews(fields); + + VPlayers.SINGLETON_INSTANCE.init(players); + + initHandViews(localPlayer); + } + + public void initHandViews(LobbyPlayer localPlayer) { + final List hands = new ArrayList(); + + int i = 0; + for (Player p : sortedPlayers) { if (p.getLobbyPlayer() == localPlayer) { VHand newHand = new VHand(EDocID.Hands[i], p); newHand.getLayoutControl().initialize(); @@ -131,14 +137,23 @@ public enum CMatchUI { newHand.getLayoutControl().initialize(); hands.add(newHand); } - - // Replace old instances - VMatchUI.SINGLETON_INSTANCE.setCommandViews(commands); - VMatchUI.SINGLETON_INSTANCE.setFieldViews(fields); VMatchUI.SINGLETON_INSTANCE.setHandViews(hands); - VMatchUI.SINGLETON_INSTANCE.setPlayers(sortedPlayers); - - VPlayers.SINGLETON_INSTANCE.init(players); + } + + private List shiftPlayersPlaceLocalFirst(final List players, LobbyPlayer localPlayer) { + // get an arranged list so that the first local player is at index 0 + List sortedPlayers = Lists.newArrayList(players); + int ixFirstHuman = -1; + for(int i = 0; i < players.size(); i++) { + if( sortedPlayers.get(i).getLobbyPlayer() == localPlayer ) { + ixFirstHuman = i; + break; + } + } + if( ixFirstHuman > 0 ) { + sortedPlayers.add(0, sortedPlayers.remove(ixFirstHuman)); + } + return sortedPlayers; } /** @@ -159,7 +174,7 @@ public enum CMatchUI { } public VField getFieldViewFor(Player p) { - int idx = VMatchUI.SINGLETON_INSTANCE.getPlayerIndex(p); + int idx = getPlayerIndex(p); return idx < 0 ? null : VMatchUI.SINGLETON_INSTANCE.getFieldViews().get(idx); } @@ -240,4 +255,8 @@ public enum CMatchUI { CDetail.SINGLETON_INSTANCE.showCard(c); CPicture.SINGLETON_INSTANCE.showCard(c); } + + private int getPlayerIndex(Player player) { + return sortedPlayers.indexOf(player); + } } diff --git a/src/main/java/forge/gui/match/VMatchUI.java b/src/main/java/forge/gui/match/VMatchUI.java index 0a6bca275c2..d223ef83563 100644 --- a/src/main/java/forge/gui/match/VMatchUI.java +++ b/src/main/java/forge/gui/match/VMatchUI.java @@ -7,7 +7,6 @@ import javax.swing.JButton; import javax.swing.SwingUtilities; import forge.Singletons; -import forge.game.player.Player; import forge.gui.framework.DragCell; import forge.gui.framework.EDocID; import forge.gui.framework.IVTopLevelUI; @@ -36,7 +35,6 @@ public enum VMatchUI implements IVTopLevelUI { private List lstCommands = new ArrayList(); private List lstFields = new ArrayList(); private List lstHands = new ArrayList(); - private List lstPlayers = new ArrayList(); // Other instantiations private final CMatchUI control = null; @@ -130,11 +128,6 @@ public enum VMatchUI implements IVTopLevelUI { public void setFieldViews(final List lst0) { this.lstFields = lst0; } - - /** @param lst0 List */ - public void setPlayers(final List lst0) { - this.lstPlayers = lst0; - } /** @return {@link java.util.List}<{@link forge.gui.match.nonsigleton.VHand}> */ public List getFieldViews() { @@ -169,9 +162,4 @@ public enum VMatchUI implements IVTopLevelUI { public void setCommandViews(List lstCommands0) { this.lstCommands = lstCommands0; } - - - public int getPlayerIndex(Player player) { - return lstPlayers.indexOf(player); - } } diff --git a/src/main/java/forge/gui/match/nonsingleton/VField.java b/src/main/java/forge/gui/match/nonsingleton/VField.java index a27c721ad97..325a632e01d 100644 --- a/src/main/java/forge/gui/match/nonsingleton/VField.java +++ b/src/main/java/forge/gui/match/nonsingleton/VField.java @@ -34,7 +34,6 @@ import javax.swing.border.Border; import javax.swing.border.LineBorder; import javax.swing.border.MatteBorder; -import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import net.miginfocom.swing.MigLayout; @@ -126,12 +125,12 @@ public class VField implements IVDoc { if (playerOnwer != null) { tab.setText(playerOnwer.getName() + " Field"); } else { tab.setText("NO PLAYER FOR " + docID.toString()); } - manaLabels.add(ImmutablePair.of(getBuiltFLabel(FSkin.ManaImages.IMG_BLACK, "99", "Black mana"), MagicColor.BLACK)); - manaLabels.add(ImmutablePair.of(getBuiltFLabel(FSkin.ManaImages.IMG_BLUE, "99", "Blue mana"), MagicColor.BLUE)); - manaLabels.add(ImmutablePair.of(getBuiltFLabel(FSkin.ManaImages.IMG_GREEN, "99", "Green mana"), MagicColor.GREEN)); - manaLabels.add(ImmutablePair.of(getBuiltFLabel(FSkin.ManaImages.IMG_RED, "99", "Red mana"), MagicColor.RED)); - manaLabels.add(ImmutablePair.of(getBuiltFLabel(FSkin.ManaImages.IMG_WHITE, "99", "White mana"), MagicColor.WHITE)); - manaLabels.add(ImmutablePair.of(getBuiltFLabel(FSkin.ManaImages.IMG_COLORLESS, "99", "Colorless mana"), (byte)0)); + manaLabels.add(Pair.of(getBuiltFLabel(FSkin.ManaImages.IMG_BLACK, "99", "Black mana"), MagicColor.BLACK)); + manaLabels.add(Pair.of(getBuiltFLabel(FSkin.ManaImages.IMG_BLUE, "99", "Blue mana"), MagicColor.BLUE)); + manaLabels.add(Pair.of(getBuiltFLabel(FSkin.ManaImages.IMG_GREEN, "99", "Green mana"), MagicColor.GREEN)); + manaLabels.add(Pair.of(getBuiltFLabel(FSkin.ManaImages.IMG_RED, "99", "Red mana"), MagicColor.RED)); + manaLabels.add(Pair.of(getBuiltFLabel(FSkin.ManaImages.IMG_WHITE, "99", "White mana"), MagicColor.WHITE)); + manaLabels.add(Pair.of(getBuiltFLabel(FSkin.ManaImages.IMG_COLORLESS, "99", "Colorless mana"), (byte)0)); // TODO player is hard-coded into tabletop...should be dynamic // (haven't looked into it too deeply). Doublestrike 12-04-12