From b51b67e6f0abb8beafee7005e32740a3819108b8 Mon Sep 17 00:00:00 2001
From: drdev
* undo. diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index fbdf6f41079..b7892752d01 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -21,7 +21,6 @@ import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; -import forge.GuiBase; import forge.LobbyPlayer; import forge.UiCommand; import forge.FThreads; @@ -31,7 +30,6 @@ import forge.events.IUiEventVisitor; import forge.events.UiEvent; import forge.events.UiEventAttackerDeclared; import forge.events.UiEventBlockerAssigned; -import forge.game.Game; import forge.game.GameEntity; import forge.game.card.Card; import forge.game.combat.Combat; @@ -477,15 +475,6 @@ public enum CMatchUI implements ICDoc, IMenuProvider { } return panels; } - - /** Undo last game action if possible. */ - public void undo() { - Game game = Singletons.getControl().getObservedGame(); - Player player = game.getPhaseHandler().getPriorityPlayer(); - if (player != null && player.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer()) { - game.stack.undo(); - } - } /** Concede game, bring up WinLose UI. */ public void concede() { diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/menus/GameMenu.java b/forge-gui-desktop/src/main/java/forge/screens/match/menus/GameMenu.java index ed6a98fd9fd..ec4ef260ff7 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/menus/GameMenu.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/menus/GameMenu.java @@ -1,6 +1,7 @@ package forge.screens.match.menus; import forge.assets.FSkinProp; +import forge.match.MatchUtil; import forge.menus.MenuUtil; import forge.model.FModel; import forge.properties.ForgePreferences; @@ -75,7 +76,7 @@ public final class GameMenu { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - CMatchUI.SINGLETON_INSTANCE.undo(); + MatchUtil.undoLastAction(); } }; } diff --git a/forge-gui-mobile/src/forge/screens/match/FControl.java b/forge-gui-mobile/src/forge/screens/match/FControl.java index 59a9228c509..531de0dce36 100644 --- a/forge-gui-mobile/src/forge/screens/match/FControl.java +++ b/forge-gui-mobile/src/forge/screens/match/FControl.java @@ -507,13 +507,6 @@ public class FControl { getPlayerPanel(zone.getPlayer()).getField().updateCard(c); } } - public static void undoLastAction() { - Game game = getGame(); - Player player = game.getPhaseHandler().getPriorityPlayer(); - if (player != null && player.getLobbyPlayer() == getGuiPlayer()) { - game.stack.undo(); - } - } /** Concede game, bring up WinLose UI. */ public static void concede() { diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index bd2afb35311..579a9e0ee08 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -12,6 +12,7 @@ import com.badlogic.gdx.Input.Keys; import forge.Forge; import forge.LobbyPlayer; +import forge.match.MatchUtil; import forge.menu.FMenuBar; import forge.model.FModel; import forge.properties.ForgePreferences; @@ -202,7 +203,7 @@ public class MatchScreen extends FScreen { break; case Keys.Z: //undo on Ctrl+Z if (KeyInputAdapter.isCtrlKeyDown()) { - FControl.undoLastAction(); + MatchUtil.undoLastAction(); return true; } break; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java b/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java index 7b0dfd4bfe2..6b5c55fc14a 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java @@ -14,30 +14,12 @@ import forge.toolbox.FEvent.FEventHandler; public class VGameMenu extends FDropDownMenu { @Override protected void buildMenu() { - addItem(new FMenuItem("Undo", new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - FControl.undoLastAction(); - } - })); addItem(new FMenuItem("Concede", FSkinImage.CONCEDE, new FEventHandler() { @Override public void handleEvent(FEvent e) { FControl.concede(); } })); - addItem(new FMenuItem("End Turn", FSkinImage.ENDTURN, new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - FControl.endCurrentTurn(); - } - })); - addItem(new FMenuItem("Alpha Strike", FSkinImage.ALPHASTRIKE, new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - FControl.alphaStrike(); - } - })); addItem(new FMenuItem("Deck List", FSkinImage.DECKLIST, new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui/src/main/java/forge/match/MatchUtil.java b/forge-gui/src/main/java/forge/match/MatchUtil.java new file mode 100644 index 00000000000..c305ddcf191 --- /dev/null +++ b/forge-gui/src/main/java/forge/match/MatchUtil.java @@ -0,0 +1,31 @@ +package forge.match; + +import forge.GuiBase; +import forge.game.Game; +import forge.game.player.Player; +import forge.match.input.Input; +import forge.match.input.InputPassPriority; + +public class MatchUtil { + public static boolean undoLastAction() { + if (canUndoLastAction() && GuiBase.getInterface().getGame().stack.undo()) { + Input currentInput = GuiBase.getInterface().getInputQueue().getInput(); + if (currentInput instanceof InputPassPriority) { + currentInput.showMessageInitial(); //ensure prompt updated if needed + } + return true; + } + return false; + } + + public static boolean canUndoLastAction() { + Game game = GuiBase.getInterface().getGame(); + if (game.stack.canUndo()) { + Player player = game.getPhaseHandler().getPriorityPlayer(); + if (player != null && player.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer()) { + return true; + } + } + return false; + } +} diff --git a/forge-gui/src/main/java/forge/match/input/InputPassPriority.java b/forge-gui/src/main/java/forge/match/input/InputPassPriority.java index 2dd429b4004..b7d360c178c 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPassPriority.java +++ b/forge-gui/src/main/java/forge/match/input/InputPassPriority.java @@ -21,6 +21,7 @@ import forge.game.card.Card; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; +import forge.match.MatchUtil; import forge.util.ITriggerEvent; import java.util.List; @@ -49,7 +50,12 @@ public class InputPassPriority extends InputSyncronizedBase { public final void showMessage() { showMessage(getTurnPhasePriorityMessage(player.getGame())); chosenSa = null; - ButtonUtil.update("OK", "End Turn", true, true, true); + if (MatchUtil.canUndoLastAction()) { //allow undoing with cancel button if can undo last action + ButtonUtil.update("OK", "Undo", true, true, true); + } + else { //otherwise allow ending turn with cancel button + ButtonUtil.update("OK", "End Turn", true, true, true); + } } /** {@inheritDoc} */ @@ -61,9 +67,11 @@ public class InputPassPriority extends InputSyncronizedBase { /** {@inheritDoc} */ @Override protected final void onCancel() { - //end turn - player.getController().autoPassUntil(PhaseType.CLEANUP); - stop(); + if (!MatchUtil.undoLastAction()) { //undo if possible + //otherwise end turn + player.getController().autoPassUntil(PhaseType.CLEANUP); + stop(); + } } public SpellAbility getChosenSa() { return chosenSa; }