Show Undo in prompt if last action is undoable

Clean up unnecessary items from Game menu
This commit is contained in:
drdev
2014-07-01 04:46:24 +00:00
parent e32f335010
commit b51b67e6f0
9 changed files with 59 additions and 42 deletions

1
.gitattributes vendored
View File

@@ -16484,6 +16484,7 @@ forge-gui/src/main/java/forge/limited/WinstonDraft.java -text
forge-gui/src/main/java/forge/limited/WinstonDraftAI.java -text forge-gui/src/main/java/forge/limited/WinstonDraftAI.java -text
forge-gui/src/main/java/forge/limited/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/limited/package-info.java svneol=native#text/plain
forge-gui/src/main/java/forge/match/MatchConstants.java -text forge-gui/src/main/java/forge/match/MatchConstants.java -text
forge-gui/src/main/java/forge/match/MatchUtil.java -text
forge-gui/src/main/java/forge/match/input/ButtonUtil.java -text forge-gui/src/main/java/forge/match/input/ButtonUtil.java -text
forge-gui/src/main/java/forge/match/input/Input.java -text forge-gui/src/main/java/forge/match/input/Input.java -text
forge-gui/src/main/java/forge/match/input/InputAttack.java -text forge-gui/src/main/java/forge/match/input/InputAttack.java -text

View File

@@ -229,6 +229,17 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
return this.bResolving; return this.bResolving;
} }
/**
* <p>
* undo.
* </p>
*
* @return a boolean.
*/
public final boolean canUndo() {
return !undoStack.isEmpty();
}
/** /**
* <p> * <p>
* undo. * undo.

View File

@@ -21,7 +21,6 @@ import com.google.common.collect.Lists;
import com.google.common.eventbus.EventBus; import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import forge.GuiBase;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.UiCommand; import forge.UiCommand;
import forge.FThreads; import forge.FThreads;
@@ -31,7 +30,6 @@ import forge.events.IUiEventVisitor;
import forge.events.UiEvent; import forge.events.UiEvent;
import forge.events.UiEventAttackerDeclared; import forge.events.UiEventAttackerDeclared;
import forge.events.UiEventBlockerAssigned; import forge.events.UiEventBlockerAssigned;
import forge.game.Game;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.combat.Combat; import forge.game.combat.Combat;
@@ -478,15 +476,6 @@ public enum CMatchUI implements ICDoc, IMenuProvider {
return panels; 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. */ /** Concede game, bring up WinLose UI. */
public void concede() { public void concede() {
if (FOverlay.SINGLETON_INSTANCE.getPanel().isShowing() || QuestDraftUtils.aiMatchInProgress) { if (FOverlay.SINGLETON_INSTANCE.getPanel().isShowing() || QuestDraftUtils.aiMatchInProgress) {

View File

@@ -1,6 +1,7 @@
package forge.screens.match.menus; package forge.screens.match.menus;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.match.MatchUtil;
import forge.menus.MenuUtil; import forge.menus.MenuUtil;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
@@ -75,7 +76,7 @@ public final class GameMenu {
return new ActionListener() { return new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
CMatchUI.SINGLETON_INSTANCE.undo(); MatchUtil.undoLastAction();
} }
}; };
} }

View File

@@ -507,13 +507,6 @@ public class FControl {
getPlayerPanel(zone.getPlayer()).getField().updateCard(c); 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. */ /** Concede game, bring up WinLose UI. */
public static void concede() { public static void concede() {

View File

@@ -12,6 +12,7 @@ import com.badlogic.gdx.Input.Keys;
import forge.Forge; import forge.Forge;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.match.MatchUtil;
import forge.menu.FMenuBar; import forge.menu.FMenuBar;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
@@ -202,7 +203,7 @@ public class MatchScreen extends FScreen {
break; break;
case Keys.Z: //undo on Ctrl+Z case Keys.Z: //undo on Ctrl+Z
if (KeyInputAdapter.isCtrlKeyDown()) { if (KeyInputAdapter.isCtrlKeyDown()) {
FControl.undoLastAction(); MatchUtil.undoLastAction();
return true; return true;
} }
break; break;

View File

@@ -14,30 +14,12 @@ import forge.toolbox.FEvent.FEventHandler;
public class VGameMenu extends FDropDownMenu { public class VGameMenu extends FDropDownMenu {
@Override @Override
protected void buildMenu() { 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() { addItem(new FMenuItem("Concede", FSkinImage.CONCEDE, new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
FControl.concede(); 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() { addItem(new FMenuItem("Deck List", FSkinImage.DECKLIST, new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {

View File

@@ -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;
}
}

View File

@@ -21,6 +21,7 @@ import forge.game.card.Card;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.match.MatchUtil;
import forge.util.ITriggerEvent; import forge.util.ITriggerEvent;
import java.util.List; import java.util.List;
@@ -49,8 +50,13 @@ public class InputPassPriority extends InputSyncronizedBase {
public final void showMessage() { public final void showMessage() {
showMessage(getTurnPhasePriorityMessage(player.getGame())); showMessage(getTurnPhasePriorityMessage(player.getGame()));
chosenSa = null; chosenSa = null;
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); ButtonUtil.update("OK", "End Turn", true, true, true);
} }
}
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
@@ -61,10 +67,12 @@ public class InputPassPriority extends InputSyncronizedBase {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
protected final void onCancel() { protected final void onCancel() {
//end turn if (!MatchUtil.undoLastAction()) { //undo if possible
//otherwise end turn
player.getController().autoPassUntil(PhaseType.CLEANUP); player.getController().autoPassUntil(PhaseType.CLEANUP);
stop(); stop();
} }
}
public SpellAbility getChosenSa() { return chosenSa; } public SpellAbility getChosenSa() { return chosenSa; }