From 143f0f76e799d28dfc9642d459aeb96b86250a47 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Mon, 1 Apr 2013 14:24:56 +0400 Subject: [PATCH] Fixed #180 : Paying additional cost of Mana Leak or Spell Rupture isn't handled correct --- .../src/main/java/mage/client/game/GamePanel.java | 12 ++++++------ Mage.Common/src/mage/view/GameView.java | 11 ----------- Mage.Common/src/mage/view/PlayerView.java | 7 +++++++ 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index bdaa97a9298..ada9254559b 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -491,12 +491,7 @@ public final class GamePanel extends javax.swing.JPanel { CombatManager.getInstance().hideCombat(gameId); } - System.out.println("Size: " + game.getStatesSavedSize()); - if (game.getStatesSavedSize() > 0) { - feedbackPanel.allowUndo(game.getStatesSavedSize()); - } else { - feedbackPanel.disableUndo(); - } + feedbackPanel.disableUndo(); this.revalidate(); this.repaint(); @@ -608,6 +603,11 @@ public final class GamePanel extends javax.swing.JPanel { options.put("your_turn", true); messageToDisplay = message + "
Your turn
"; } + // magenoxx: because of uncaught bug with saving state, rolling back and stack + // undo is allowed only for empty stack + if (playerView.getStatesSavedSize() > 0 && gameView.getStack().size() == 0) { + feedbackPanel.allowUndo(playerView.getStatesSavedSize()); + } break; } } diff --git a/Mage.Common/src/mage/view/GameView.java b/Mage.Common/src/mage/view/GameView.java index a3b641dce86..dd396ed263f 100644 --- a/Mage.Common/src/mage/view/GameView.java +++ b/Mage.Common/src/mage/view/GameView.java @@ -74,17 +74,10 @@ public class GameView implements Serializable { private String priorityPlayerName = ""; private int turn; private boolean special = false; - private int statesSavedSize; public GameView(GameState state, Game game) { for (Player player: state.getPlayers().values()) { players.add(new PlayerView(player, state, game)); - if (player.getStoredBookmark() > 0) { - if (this.statesSavedSize > 0) { - throw new IllegalStateException("This shouldn't happen"); - } - this.statesSavedSize = player.getStoredBookmark(); - } } for (StackObject stackObject: state.getStack()) { if (stackObject instanceof StackAbility) { @@ -260,8 +253,4 @@ public class GameView implements Serializable { public boolean getSpecial() { return special; } - - public int getStatesSavedSize() { - return statesSavedSize; - } } diff --git a/Mage.Common/src/mage/view/PlayerView.java b/Mage.Common/src/mage/view/PlayerView.java index 83c77d3fd04..a7cad2dfda0 100644 --- a/Mage.Common/src/mage/view/PlayerView.java +++ b/Mage.Common/src/mage/view/PlayerView.java @@ -62,6 +62,7 @@ public class PlayerView implements Serializable { private UserDataView userDataView; private List emblemList = new ArrayList(); private List attachments = new ArrayList(); + private int statesSavedSize; public PlayerView(Player player, GameState state, Game game) { this.playerId = player.getId(); @@ -105,6 +106,8 @@ public class PlayerView implements Serializable { if (player.getAttachments() != null) { attachments.addAll(player.getAttachments()); } + + this.statesSavedSize = player.getStoredBookmark(); } private boolean showInBattlefield(Permanent permanent, GameState state) { @@ -184,4 +187,8 @@ public class PlayerView implements Serializable { public boolean hasAttachments() { return attachments != null && attachments.size() > 0; } + + public int getStatesSavedSize() { + return statesSavedSize; + } }