diff --git a/.gitattributes b/.gitattributes index 64f997d4f6d..b8e017080b2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -16119,14 +16119,18 @@ forge-m-base/src/forge/screens/match/input/InputSyncronizedBase.java -text forge-m-base/src/forge/screens/match/views/VAssignDamage.java -text forge-m-base/src/forge/screens/match/views/VAvatar.java -text forge-m-base/src/forge/screens/match/views/VCardDisplayArea.java -text +forge-m-base/src/forge/screens/match/views/VCombat.java -text +forge-m-base/src/forge/screens/match/views/VDev.java -text forge-m-base/src/forge/screens/match/views/VDisplayArea.java -text forge-m-base/src/forge/screens/match/views/VField.java -text forge-m-base/src/forge/screens/match/views/VFlashbackZone.java -text -forge-m-base/src/forge/screens/match/views/VGameDetails.java -text +forge-m-base/src/forge/screens/match/views/VHeader.java -text forge-m-base/src/forge/screens/match/views/VLog.java -text forge-m-base/src/forge/screens/match/views/VManaPool.java -text +forge-m-base/src/forge/screens/match/views/VMenu.java -text forge-m-base/src/forge/screens/match/views/VPhaseIndicator.java -text forge-m-base/src/forge/screens/match/views/VPlayerPanel.java -text +forge-m-base/src/forge/screens/match/views/VPlayers.java -text forge-m-base/src/forge/screens/match/views/VPrompt.java -text forge-m-base/src/forge/screens/match/views/VStack.java -text forge-m-base/src/forge/screens/match/views/VZoneDisplay.java -text diff --git a/forge-m-base/src/forge/screens/FScreen.java b/forge-m-base/src/forge/screens/FScreen.java index 00336683886..087a22d1b72 100644 --- a/forge-m-base/src/forge/screens/FScreen.java +++ b/forge-m-base/src/forge/screens/FScreen.java @@ -14,18 +14,18 @@ import forge.toolbox.FLabel; import forge.utils.Utils; public abstract class FScreen extends FContainer { - public static final float HEADER_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f); + public static final FSkinColor TEXTURE_OVERLAY_COLOR = FSkinColor.get(Colors.CLR_THEME); + public static final FSkinColor HEADER_BTN_PRESSED_COLOR = TEXTURE_OVERLAY_COLOR.stepColor(0); + public static final FSkinColor HEADER_LINE_COLOR = HEADER_BTN_PRESSED_COLOR.stepColor(-40); + public static final FSkinColor HEADER_BACK_COLOR = HEADER_BTN_PRESSED_COLOR.stepColor(-80); - private static final FSkinColor clrTheme = FSkinColor.get(Colors.CLR_THEME); - private static final FSkinColor clr = clrTheme.stepColor(0); - private static final FSkinColor d40 = clr.stepColor(-40); - private static final FSkinColor d80 = clr.stepColor(-80); + public static final float HEADER_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f); private final FLabel btnBack, lblHeader, btnMenu; protected FScreen(boolean showBackButton, String headerCaption, boolean showMenuButton) { if (showBackButton) { - btnBack = add(new FLabel.Builder().icon(new BackIcon()).pressedColor(clr).align(HAlignment.CENTER).command(new Runnable() { + btnBack = add(new FLabel.Builder().icon(new BackIcon()).pressedColor(HEADER_BTN_PRESSED_COLOR).align(HAlignment.CENTER).command(new Runnable() { @Override public void run() { Forge.back(); @@ -42,7 +42,7 @@ public abstract class FScreen extends FContainer { lblHeader = null; } if (showMenuButton) { - btnMenu = add(new FLabel.Builder().icon(FSkinImage.FAVICON).pressedColor(clr).align(HAlignment.CENTER).command(new Runnable() { + btnMenu = add(new FLabel.Builder().icon(FSkinImage.FAVICON).pressedColor(HEADER_BTN_PRESSED_COLOR).align(HAlignment.CENTER).command(new Runnable() { @Override public void run() { showMenu(); @@ -102,11 +102,11 @@ public abstract class FScreen extends FContainer { float w = getWidth(); float h = getHeight(); g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, w, h); - g.fillRect(clrTheme, 0, 0, w, h); + g.fillRect(TEXTURE_OVERLAY_COLOR, 0, 0, w, h); if (lblHeader != null) { //draw custom background behind header label - g.fillRect(d80, 0, 0, w, HEADER_HEIGHT); - g.drawLine(1, d40, 0, HEADER_HEIGHT, w, HEADER_HEIGHT); + g.fillRect(HEADER_BACK_COLOR, 0, 0, w, HEADER_HEIGHT); + g.drawLine(1, HEADER_LINE_COLOR, 0, HEADER_HEIGHT, w, HEADER_HEIGHT); } } diff --git a/forge-m-base/src/forge/screens/match/FControl.java b/forge-m-base/src/forge/screens/match/FControl.java index ee0ad77de01..4185d7224e6 100644 --- a/forge-m-base/src/forge/screens/match/FControl.java +++ b/forge-m-base/src/forge/screens/match/FControl.java @@ -172,8 +172,6 @@ public class FControl { super.onActivate(); } }; - - view.getGameDetails().init(players); } private static List shiftPlayersPlaceLocalFirst(final List players, LobbyPlayer localPlayer) { @@ -230,6 +228,10 @@ public class FControl { } } + public static Iterable getSortedPlayers() { + return sortedPlayers; + } + public static Player getCurrentPlayer() { // try current priority Player currentPriority = game.getPhaseHandler().getPriorityPlayer(); diff --git a/forge-m-base/src/forge/screens/match/FControlGameEventHandler.java b/forge-m-base/src/forge/screens/match/FControlGameEventHandler.java index f6245adc5f7..ad5d7a90992 100644 --- a/forge-m-base/src/forge/screens/match/FControlGameEventHandler.java +++ b/forge-m-base/src/forge/screens/match/FControlGameEventHandler.java @@ -148,7 +148,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { @Override public void run() { stackUpdPlanned.set(false); - FControl.getView().getStack().update(); + FControl.getView().updateStack(); } }; diff --git a/forge-m-base/src/forge/screens/match/MatchScreen.java b/forge-m-base/src/forge/screens/match/MatchScreen.java index f9fa715c793..5006ad3f27d 100644 --- a/forge-m-base/src/forge/screens/match/MatchScreen.java +++ b/forge-m-base/src/forge/screens/match/MatchScreen.java @@ -7,11 +7,9 @@ import java.util.Map; import forge.model.FModel; import forge.screens.FScreen; import forge.screens.match.views.VAvatar; -import forge.screens.match.views.VGameDetails; -import forge.screens.match.views.VLog; +import forge.screens.match.views.VHeader; import forge.screens.match.views.VPlayerPanel; import forge.screens.match.views.VPrompt; -import forge.screens.match.views.VStack; import forge.toolbox.VCardZoom; import forge.Forge.Graphics; import forge.assets.FSkinColor; @@ -24,16 +22,14 @@ public class MatchScreen extends FScreen { public static FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS); private final Map playerPanels = new HashMap(); - private final VLog log; - private final VStack stack; + private final VHeader header; private final VPrompt prompt; - private final VGameDetails gameDetails; private final VCardZoom cardZoom; private VPlayerPanel bottomPlayerPanel, topPlayerPanel; public MatchScreen(List playerPanels0) { - super(true, "Game", true); + super(false, null, false); //match screen has custom header for (VPlayerPanel playerPanel : playerPanels0) { playerPanels.put(playerPanel.getPlayer(), add(playerPanel)); @@ -43,6 +39,8 @@ public class MatchScreen extends FScreen { topPlayerPanel.setFlipped(true); bottomPlayerPanel.setSelectedZone(ZoneType.Hand); + header = add(new VHeader()); + prompt = add(new VPrompt("", "", new Runnable() { @Override @@ -57,13 +55,22 @@ public class MatchScreen extends FScreen { } })); cardZoom = add(new VCardZoom()); + } - log = add(new VLog()); - stack = add(new VStack()); - gameDetails = add(new VGameDetails()); - log.setVisible(false); - stack.setVisible(false); - gameDetails.setVisible(false); + public void updatePlayers() { + header.getTabPlayers().update(); + } + + public void updateLog() { + header.getTabLog().update(); + } + + public void updateCombat() { + header.getTabCombat().update(); + } + + public void updateStack() { + header.getTabStack().update(); } public VPrompt getPrompt() { @@ -74,18 +81,6 @@ public class MatchScreen extends FScreen { return cardZoom; } - public VStack getStack() { - return stack; - } - - public VLog getLog() { - return log; - } - - public VGameDetails getGameDetails() { - return gameDetails; - } - public VPlayerPanel getTopPlayerPanel() { return topPlayerPanel; } @@ -127,6 +122,9 @@ public class MatchScreen extends FScreen { @Override protected void doLayout(float startY, float width, float height) { + header.setBounds(0, 0, width, VHeader.HEIGHT); + startY = FScreen.HEADER_HEIGHT; + //determine player panel heights based on visibility of zone displays float topPlayerPanelHeight, bottomPlayerPanelHeight; float cardRowsHeight = height - startY - VPrompt.HEIGHT - 2 * VAvatar.HEIGHT; @@ -151,9 +149,7 @@ public class MatchScreen extends FScreen { topPlayerPanelHeight += VAvatar.HEIGHT; bottomPlayerPanelHeight += VAvatar.HEIGHT; - //log.setBounds(0, startY, width - FScreen.HEADER_HEIGHT, VLog.HEIGHT); topPlayerPanel.setBounds(0, startY, width, topPlayerPanelHeight); - stack.setBounds(0, startY + topPlayerPanelHeight - VStack.HEIGHT / 2, VStack.WIDTH, VStack.HEIGHT); bottomPlayerPanel.setBounds(0, height - VPrompt.HEIGHT - bottomPlayerPanelHeight, width, bottomPlayerPanelHeight); prompt.setBounds(0, height - VPrompt.HEIGHT, width, VPrompt.HEIGHT); cardZoom.setBounds(0, 0, width, height); diff --git a/forge-m-base/src/forge/screens/match/views/VCombat.java b/forge-m-base/src/forge/screens/match/views/VCombat.java new file mode 100644 index 00000000000..d8cdb17abda --- /dev/null +++ b/forge-m-base/src/forge/screens/match/views/VCombat.java @@ -0,0 +1,20 @@ +package forge.screens.match.views; + +public class VCombat extends VDisplayArea { + @Override + protected void doLayout(float width, float height) { + // TODO Auto-generated method stub + + } + + @Override + public int getCount() { + return -1; + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } +} diff --git a/forge-m-base/src/forge/screens/match/views/VDev.java b/forge-m-base/src/forge/screens/match/views/VDev.java new file mode 100644 index 00000000000..b80942d8e41 --- /dev/null +++ b/forge-m-base/src/forge/screens/match/views/VDev.java @@ -0,0 +1,20 @@ +package forge.screens.match.views; + +public class VDev extends VDisplayArea { + @Override + protected void doLayout(float width, float height) { + // TODO Auto-generated method stub + + } + + @Override + public int getCount() { + return -1; + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } +} diff --git a/forge-m-base/src/forge/screens/match/views/VDisplayArea.java b/forge-m-base/src/forge/screens/match/views/VDisplayArea.java index 8573d5faf8c..943c75ce495 100644 --- a/forge-m-base/src/forge/screens/match/views/VDisplayArea.java +++ b/forge-m-base/src/forge/screens/match/views/VDisplayArea.java @@ -3,6 +3,9 @@ package forge.screens.match.views; import forge.toolbox.FScrollPane; public abstract class VDisplayArea extends FScrollPane { + public VDisplayArea() { + setVisible(false); //hide by default + } public abstract int getCount(); public abstract void update(); } diff --git a/forge-m-base/src/forge/screens/match/views/VField.java b/forge-m-base/src/forge/screens/match/views/VField.java index 5b451e42674..aae53558dea 100644 --- a/forge-m-base/src/forge/screens/match/views/VField.java +++ b/forge-m-base/src/forge/screens/match/views/VField.java @@ -13,6 +13,7 @@ public class VField extends VZoneDisplay { public VField(Player player0) { super(player0, ZoneType.Battlefield); + setVisible(true); //unlike other display areas, show by default } public boolean isFlipped() { diff --git a/forge-m-base/src/forge/screens/match/views/VHeader.java b/forge-m-base/src/forge/screens/match/views/VHeader.java new file mode 100644 index 00000000000..b9b75cf8701 --- /dev/null +++ b/forge-m-base/src/forge/screens/match/views/VHeader.java @@ -0,0 +1,197 @@ +package forge.screens.match.views; + +import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; + +import forge.Forge.Graphics; +import forge.assets.FSkinColor; +import forge.assets.FSkinFont; +import forge.assets.FSkinImage; +import forge.assets.FSkinColor.Colors; +import forge.model.FModel; +import forge.screens.FScreen; +import forge.screens.match.FControl; +import forge.toolbox.FContainer; +import forge.toolbox.FDisplayObject; +import forge.toolbox.FLabel; +import forge.utils.ForgePreferences.FPref; + +public class VHeader extends FContainer { + public static final float HEIGHT = VAvatar.HEIGHT - VPhaseIndicator.HEIGHT; + + private static final FSkinFont TAB_FONT = FSkinFont.get(12); + private static final FSkinColor TAB_FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT); + private static final FSkinColor DISPLAY_AREA_BACK_COLOR = FSkinColor.get(Colors.CLR_INACTIVE).alphaColor(0.5f); + private static final float TAB_PADDING_X = 6f; + + private final HeaderTab tabPlayers; + private final HeaderTab tabLog; + private final HeaderTab tabCombat; + private final HeaderTab tabDev; + private final HeaderTab tabStack; + private final FLabel btnMenu; + private HeaderTab selectedTab; + + public VHeader() { + tabPlayers = add(new HeaderTab("Players", new VPlayers())); + tabLog = add(new HeaderTab("Log", new VLog())); + tabCombat = add(new HeaderTab("Combat", new VCombat())); + tabDev = add(new HeaderTab("Dev", new VDev())); + tabStack = add(new HeaderTab("Stack", new VStack())); + + btnMenu = add(new FLabel.Builder().icon(FSkinImage.FAVICON).pressedColor(FScreen.HEADER_BTN_PRESSED_COLOR).align(HAlignment.CENTER).command(new Runnable() { + @Override + public void run() { + FControl.getView().showMenu(); + } + }).build()); + } + + public HeaderTab getTabPlayers() { + return tabPlayers; + } + + public HeaderTab getTabLog() { + return tabLog; + } + + public HeaderTab getTabCombat() { + return tabCombat; + } + + public HeaderTab getTabDev() { + return tabDev; + } + + public HeaderTab getTabStack() { + return tabStack; + } + + public HeaderTab getSelectedTab() { + return selectedTab; + } + + private void setSelectedTab(HeaderTab selectedTab0) { + if (selectedTab == selectedTab0) { + return; + } + + if (selectedTab != null) { + selectedTab.displayArea.setVisible(false); + } + + selectedTab = selectedTab0; + + if (selectedTab != null) { + selectedTab.displayArea.setVisible(true); + } + } + + @Override + protected void doLayout(float width, float height) { + float x = 0; + x = tabPlayers.layout(x); + x = tabLog.layout(x); + x = tabCombat.layout(x); + if (FModel.getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) { + x = tabDev.layout(x); + tabDev.setVisible(true); + } + else { + tabDev.setVisible(false); + } + x = tabStack.layout(x); + + btnMenu.setBounds(width - height, 0, height, height); + } + + @Override + public void drawBackground(Graphics g) { + float w = getWidth(); + float h = getHeight(); + g.fillRect(FScreen.HEADER_BACK_COLOR, 0, 0, w, h); + + if (selectedTab == null) { + g.drawLine(1, FScreen.HEADER_LINE_COLOR, 0, h, w, h); + } + else { //draw background and border for selected zone if needed + VDisplayArea selectedDisplayArea = selectedTab.displayArea; + g.fillRect(DISPLAY_AREA_BACK_COLOR, 0, selectedDisplayArea.getTop(), w, selectedDisplayArea.getHeight()); + + //leave gap at selected zone tab + g.drawLine(1, FScreen.HEADER_LINE_COLOR, 0, h, selectedTab.getLeft(), h); + g.drawLine(1, FScreen.HEADER_LINE_COLOR, selectedTab.getRight(), h, w, h); + } + } + + public class HeaderTab extends FDisplayObject { + private String text; + private String caption; + private final VDisplayArea displayArea; + + private HeaderTab(String text0, VDisplayArea displayArea0) { + text = text0; + displayArea = displayArea0; + setHeight(HEIGHT); + update(); + } + + private float layout(float x) { + setLeft(x); + return x + getWidth(); + } + + @Override + public boolean tap(float x, float y, int count) { + if (selectedTab == this) { + setSelectedTab(null); + } + else { + setSelectedTab(this); + } + return true; + } + + public void update() { + displayArea.update(); + int count = displayArea.getCount(); + if (count >= 0) { + caption = text + " (" + String.valueOf(count) + ")"; + } + else { //if getCount() returns -1, don't include count in caption + caption = text; + } + setWidth(TAB_FONT.getFont().getBounds(caption).width + TAB_PADDING_X); + VHeader.this.revalidate(); + } + + @Override + public void draw(Graphics g) { + float x, y, w, h; + float paddingX = 2; + float paddingY = 2; + + if (selectedTab == this) { + y = 0; + w = getWidth(); + h = getHeight(); + float yAcross; + y += paddingY; + yAcross = y; + y--; + h++; + g.fillRect(DISPLAY_AREA_BACK_COLOR, 0, paddingY, w, getHeight() - paddingY); + g.startClip(-1, y, w + 2, h); //use clip to ensure all corners connect + g.drawLine(1, FScreen.HEADER_LINE_COLOR, 0, yAcross, w, yAcross); + g.drawLine(1, FScreen.HEADER_LINE_COLOR, 0, y, 0, h); + g.drawLine(1, FScreen.HEADER_LINE_COLOR, w, y, w, h); + g.endClip(); + } + + x = paddingX; + y = paddingY; + w = getWidth() - 2 * paddingX; + h = getHeight() - 2 * paddingY; + g.drawText(caption, TAB_FONT, TAB_FORE_COLOR, x, y, w, h, false, HAlignment.CENTER, true); + } + } +} diff --git a/forge-m-base/src/forge/screens/match/views/VLog.java b/forge-m-base/src/forge/screens/match/views/VLog.java index adb4771d928..e0661996f90 100644 --- a/forge-m-base/src/forge/screens/match/views/VLog.java +++ b/forge-m-base/src/forge/screens/match/views/VLog.java @@ -1,11 +1,20 @@ package forge.screens.match.views; -import forge.toolbox.FContainer; - -public class VLog extends FContainer { +public class VLog extends VDisplayArea { @Override protected void doLayout(float width, float height) { // TODO Auto-generated method stub } + + @Override + public int getCount() { + return -1; + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } } diff --git a/forge-m-base/src/forge/screens/match/views/VMenu.java b/forge-m-base/src/forge/screens/match/views/VMenu.java new file mode 100644 index 00000000000..f3277a4f441 --- /dev/null +++ b/forge-m-base/src/forge/screens/match/views/VMenu.java @@ -0,0 +1,21 @@ +package forge.screens.match.views; + +public class VMenu extends VDisplayArea { + @Override + protected void doLayout(float width, float height) { + // TODO Auto-generated method stub + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } +} diff --git a/forge-m-base/src/forge/screens/match/views/VPlayerPanel.java b/forge-m-base/src/forge/screens/match/views/VPlayerPanel.java index 0c9ab78c93d..94256e27178 100644 --- a/forge-m-base/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-m-base/src/forge/screens/match/views/VPlayerPanel.java @@ -23,7 +23,7 @@ public class VPlayerPanel extends FContainer { private static final FSkinFont LIFE_FONT = FSkinFont.get(18); private static final FSkinFont INFO_FONT = FSkinFont.get(12); private static final FSkinColor INFO_FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT); - private static final FSkinColor ZONE_BACK_COLOR = FSkinColor.get(Colors.CLR_INACTIVE).alphaColor(0.5f); + private static final FSkinColor DISPLAY_AREA_BACK_COLOR = FSkinColor.get(Colors.CLR_INACTIVE).alphaColor(0.5f); private final Player player; private final VPhaseIndicator phaseIndicator; @@ -47,12 +47,10 @@ public class VPlayerPanel extends FContainer { addZoneDisplay(ZoneType.Library, FSkinImage.LIBRARY); VFlashbackZone flashbackZone = add(new VFlashbackZone(player0)); - flashbackZone.setVisible(false); tabFlashbackZone = add(new InfoTab(FSkinImage.FLASHBACK, flashbackZone)); tabs.add(tabFlashbackZone); VManaPool manaPool = add(new VManaPool(player)); - manaPool.setVisible(false); tabManaPool = add(new InfoTab(FSkinImage.MANA_X, manaPool)); tabs.add(tabManaPool); @@ -66,7 +64,6 @@ public class VPlayerPanel extends FContainer { public void addZoneDisplay(ZoneType zoneType, FSkinImage tabIcon) { VZoneDisplay zoneDisplay = add(new VZoneDisplay(player, zoneType)); - zoneDisplay.setVisible(false); InfoTab zoneTab = add(new InfoTab(tabIcon, zoneDisplay)); zoneTabs.put(zoneType, zoneTab); tabs.add(zoneTab); @@ -180,7 +177,7 @@ public class VPlayerPanel extends FContainer { if (selectedTab != null) { //draw background and border for selected zone if needed float w = getWidth(); VDisplayArea selectedDisplayArea = selectedTab.displayArea; - g.fillRect(ZONE_BACK_COLOR, 0, selectedDisplayArea.getTop(), w, selectedDisplayArea.getHeight()); + g.fillRect(DISPLAY_AREA_BACK_COLOR, 0, selectedDisplayArea.getTop(), w, selectedDisplayArea.getHeight()); float y = isFlipped() ? selectedDisplayArea.getTop() + 1 : selectedDisplayArea.getBottom(); //leave gap at selected zone tab @@ -254,7 +251,7 @@ public class VPlayerPanel extends FContainer { y--; h += 2; } - g.fillRect(ZONE_BACK_COLOR, 0, isFlipped() ? paddingY : 0, w, getHeight() - paddingY); + g.fillRect(DISPLAY_AREA_BACK_COLOR, 0, isFlipped() ? paddingY : 0, w, getHeight() - paddingY); g.startClip(-1, y, w + 2, h); //use clip to ensure all corners connect g.drawLine(1, MatchScreen.BORDER_COLOR, 0, yAcross, w, yAcross); g.drawLine(1, MatchScreen.BORDER_COLOR, 0, y, 0, h); diff --git a/forge-m-base/src/forge/screens/match/views/VGameDetails.java b/forge-m-base/src/forge/screens/match/views/VPlayers.java similarity index 82% rename from forge-m-base/src/forge/screens/match/views/VGameDetails.java rename to forge-m-base/src/forge/screens/match/views/VPlayers.java index c20bc610658..97c381e80e6 100644 --- a/forge-m-base/src/forge/screens/match/views/VGameDetails.java +++ b/forge-m-base/src/forge/screens/match/views/VPlayers.java @@ -5,25 +5,23 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import forge.game.Game; import forge.game.GameType; import forge.game.card.Card; import forge.game.card.CardFactoryUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.model.FModel; -import forge.toolbox.FContainer; +import forge.screens.match.FControl; import forge.toolbox.FLabel; import forge.utils.ForgePreferences.FPref; -public class VGameDetails extends FContainer { +public class VPlayers extends VDisplayArea { private Map infoLabels; private InfoLabel stormLabel; - public void init(final Iterable players) { - clear(); + public VPlayers() { infoLabels = new HashMap(); - for (final Player p : players) { + for (final Player p : FControl.getSortedPlayers()) { // Create and store labels detailing various non-critical player info. final InfoLabel name = add(new InfoLabel()); final InfoLabel life = add(new InfoLabel()); @@ -41,9 +39,8 @@ public class VGameDetails extends FContainer { stormLabel = add(new InfoLabel()); } + @Override public void update() { - if (!isVisible()) { return; } //No need to update if this panel isn't showing - for (Entry rr : infoLabels.entrySet()) { Player p0 = rr.getKey(); final InfoLabel[] temp = rr.getValue(); @@ -74,14 +71,7 @@ public class VGameDetails extends FContainer { temp[7].setText(CardFactoryUtil.getCommanderInfo(p0)); } } - } - - /** - * @param game */ - public void updateStormLabel(Game game) { - if (!isVisible()) { return; } //No need to update if this panel isn't showing - - stormLabel.setText("Storm count: " + game.getStack().getCardsCastThisTurn().size()); + stormLabel.setText("Storm count: " + FControl.getGame().getStack().getCardsCastThisTurn().size()); } @Override @@ -95,4 +85,9 @@ public class VGameDetails extends FContainer { super(new FLabel.Builder()); } } + + @Override + public int getCount() { + return infoLabels.size(); + } } diff --git a/forge-m-base/src/forge/screens/match/views/VStack.java b/forge-m-base/src/forge/screens/match/views/VStack.java index 82cad252bee..9fee702ef2e 100644 --- a/forge-m-base/src/forge/screens/match/views/VStack.java +++ b/forge-m-base/src/forge/screens/match/views/VStack.java @@ -2,10 +2,9 @@ package forge.screens.match.views; import forge.Forge.Graphics; import forge.toolbox.FCardPanel; -import forge.toolbox.FContainer; import forge.utils.Utils; -public class VStack extends FContainer { +public class VStack extends VDisplayArea { public static final float WIDTH = Utils.AVG_FINGER_WIDTH; public static final float HEIGHT = WIDTH * FCardPanel.ASPECT_RATIO; @@ -13,8 +12,16 @@ public class VStack extends FContainer { setSize(WIDTH, HEIGHT); } + @Override + public int getCount() { + // TODO Auto-generated method stub + return 0; + } + + @Override public void update() { - //TODO + // TODO Auto-generated method stub + } @Override diff --git a/forge-m-base/src/forge/toolbox/FContainer.java b/forge-m-base/src/forge/toolbox/FContainer.java index 212b23e1234..4c0c213b734 100644 --- a/forge-m-base/src/forge/toolbox/FContainer.java +++ b/forge-m-base/src/forge/toolbox/FContainer.java @@ -59,7 +59,10 @@ public abstract class FContainer extends FDisplayObject { } public void revalidate() { - doLayout(getWidth(), getHeight()); + float w = getWidth(); + float h = getHeight(); + if (w == 0 || h == 0) { return; } //don't revalidate if size not set yet + doLayout(w, h); } protected abstract void doLayout(float width, float height);