From 694875720b119a5a6676fea5324e1be4efa65c36 Mon Sep 17 00:00:00 2001 From: myk Date: Mon, 11 Feb 2013 18:22:33 +0000 Subject: [PATCH] add match result info to game log --- src/main/java/forge/game/GameState.java | 33 ++++++++-- .../java/forge/gui/match/ViewWinLose.java | 60 +++++++------------ 2 files changed, 52 insertions(+), 41 deletions(-) diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java index e469d22131c..dad21f67bc2 100644 --- a/src/main/java/forge/game/GameState.java +++ b/src/main/java/forge/game/GameState.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.TreeMap; import com.google.common.eventbus.EventBus; @@ -50,12 +51,15 @@ import forge.game.player.AIPlayer; import forge.game.player.HumanPlayer; import forge.game.player.LobbyPlayer; import forge.game.player.Player; +import forge.game.player.PlayerStatistics; import forge.game.player.PlayerType; -import forge.game.zone.PlayerZone; import forge.game.zone.MagicStack; +import forge.game.zone.PlayerZone; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.gui.match.ViewWinLose; +import forge.properties.ForgeProps; +import forge.properties.NewConstants.Lang.GuiWinLose.WinLoseText; /** * Represents the state of a single game and is @@ -316,12 +320,33 @@ public class GameState { } match.addGamePlayed(reason, this); - new ViewWinLose(match); + // add result entries to the game log + LobbyPlayer human = Singletons.getControl().getPlayer().getLobbyPlayer(); + String title = ForgeProps.getLocalized(match.getLastGameOutcome().isWinner(human) ? WinLoseText.WIN : WinLoseText.LOSE); + gameLog.add("Final", title, 0); + + List outcomes = new ArrayList(); + for (Entry p : match.getLastGameOutcome()) { + String outcome = String.format("%s %s", p.getKey().equals(human) ? "You have" : p.getKey().getName() + " has", + p.getValue().getOutcome().toString()); + outcomes.add(outcome); + gameLog.add("Final", outcome, 0); + } + + int humanWins = match.getGamesWonBy(human); + int humanLosses = match.getPlayedGames().size() - humanWins; + String statsSummary = ForgeProps.getLocalized(WinLoseText.WON) + humanWins + + ForgeProps.getLocalized(WinLoseText.LOST) + humanLosses; + gameLog.add("Final", statsSummary, 0); + + ViewWinLose v = new ViewWinLose(match); + v.setTitle(title); + v.setOutcomes(outcomes); + v.setStatsSummary(statsSummary); + // Play the win/lose sound boolean humanWon = match.getLastGameOutcome().isWinner(Singletons.getControl().getPlayer().getLobbyPlayer()); getEvents().post(new DuelOutcomeEvent(humanWon)); - - } diff --git a/src/main/java/forge/gui/match/ViewWinLose.java b/src/main/java/forge/gui/match/ViewWinLose.java index 608b8125784..81ff07f4922 100644 --- a/src/main/java/forge/gui/match/ViewWinLose.java +++ b/src/main/java/forge/gui/match/ViewWinLose.java @@ -5,9 +5,7 @@ import java.awt.Font; import java.awt.Point; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; -import java.util.ArrayList; import java.util.List; -import java.util.Map.Entry; import javax.swing.JLabel; import javax.swing.JPanel; @@ -19,8 +17,6 @@ import net.miginfocom.swing.MigLayout; import forge.Command; import forge.Singletons; import forge.game.MatchController; -import forge.game.player.LobbyPlayer; -import forge.game.player.PlayerStatistics; import forge.gui.SOverlayUtils; import forge.gui.toolbox.FButton; import forge.gui.toolbox.FLabel; @@ -39,6 +35,10 @@ public class ViewWinLose { private final FButton btnContinue, btnRestart, btnQuit; private final JPanel pnlCustom; + private final JLabel lblTitle = new JLabel("WinLoseFrame > lblTitle needs updating."); + private final JLabel lblStats = new JLabel("WinLoseFrame > lblStats needs updating."); + private final JPanel pnlOutcomes = new JPanel(new MigLayout("wrap, align center")); + /** * @param match */ @SuppressWarnings("serial") @@ -47,9 +47,6 @@ public class ViewWinLose { final JPanel pnlLeft = new JPanel(); final JPanel pnlRight = new JPanel(); - final List lblPlayerOutcomes= new ArrayList(); - final JLabel lblTitle = new JLabel("WinLoseFrame > lblTitle needs updating."); - final JLabel lblStats = new JLabel("WinLoseFrame > lblStats needs updating."); final JScrollPane scrCustom = new JScrollPane(); pnlCustom = new JPanel(); @@ -57,8 +54,6 @@ public class ViewWinLose { btnRestart = new FButton(); btnQuit = new FButton(); - final LobbyPlayer human = Singletons.getControl().getPlayer().getLobbyPlayer(); - // Control of the win/lose is handled differently for various game modes. ControlWinLose control = null; switch (match.getGameType()) { @@ -108,28 +103,6 @@ public class ViewWinLose { btnQuit.setFont(FSkin.getFont(22)); btnContinue.setEnabled(!match.isMatchOver()); - // Show Wins and Loses - final int humanWins = match.getGamesWonBy(human); - final int humanLosses = match.getPlayedGames().size() - humanWins; - - for( Entry p : match.getLastGameOutcome() ) { - String playerName = p.getKey().equals(human) ? "You have " : p.getKey().getName() + " has "; - JLabel lblOutcome = new JLabel(playerName + p.getValue().getOutcome().toString()); - lblOutcome.setForeground(Color.white); - lblOutcome.setHorizontalAlignment(SwingConstants.CENTER); - lblOutcome.setFont(FSkin.getFont().deriveFont(Font.PLAIN, 14)); - lblPlayerOutcomes.add(lblOutcome); - } - lblStats.setText(ForgeProps.getLocalized(WinLoseText.WON) + humanWins - + ForgeProps.getLocalized(WinLoseText.LOST) + humanLosses); - - // Show "You Won" or "You Lost" - if (match.getLastGameOutcome().isWinner(human)) { - lblTitle.setText(ForgeProps.getLocalized(WinLoseText.WIN)); - } else { - lblTitle.setText(ForgeProps.getLocalized(WinLoseText.LOSE)); - } - // Assemble game log scroller. final FTextArea txtLog = new FTextArea(); txtLog.setText(Singletons.getModel().getGame().getGameLog().getLogText()); @@ -165,11 +138,10 @@ public class ViewWinLose { overlay.add(pnlLeft, "w 100%!, h 100%!"); } - pnlLeft.add(lblTitle, "w 90%!, h 50px!, gap 5% 0 20px 0"); - for(JLabel lbl : lblPlayerOutcomes) { - pnlLeft.add(lbl, "w 90%!, h 20px!, gap 5% 0 0 0"); - } - pnlLeft.add(lblStats, "w 90%!, h 50px!, gap 5% 0 20px 0"); + pnlOutcomes.setOpaque(false); + pnlLeft.add(lblTitle, "h 60px!, center"); + pnlLeft.add(pnlOutcomes, "center"); + pnlLeft.add(lblStats, "h 60px!, center"); // A container must be made to ensure proper centering. final JPanel pnlButtons = new JPanel(new MigLayout("insets 0, wrap, ax center")); @@ -188,7 +160,7 @@ public class ViewWinLose { pnlLog.add(new FLabel.Builder().text("Game Log").fontAlign(SwingConstants.CENTER) .fontSize(18).fontStyle(Font.BOLD).build(), - "w 300px!, h 28px!, gap 0 0 20px 0"); + "w 300px!, h 28px!, gaptop 20px"); pnlLog.add(scrLog, "w 300px!, h 100px!, gap 0 0 10 10"); pnlLog.add(btnCopyLog, "center, w pref+16, h pref+8"); @@ -210,6 +182,20 @@ public class ViewWinLose { SOverlayUtils.showOverlay(); } + public void setTitle(String title) { + lblTitle.setText(title); + } + + public void setOutcomes(List outcomes) { + for (String o : outcomes) { + pnlOutcomes.add(new FLabel.Builder().text(o).fontSize(14).build(), "h 20!"); + } + } + + public void setStatsSummary(String statsSummary) { + lblStats.setText(statsSummary); + } + /** @return {@link forge.gui.toolbox.FButton} */ public FButton getBtnContinue() { return this.btnContinue;