mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Show Undo in prompt if last action is undoable
Clean up unnecessary items from Game menu
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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/package-info.java svneol=native#text/plain
|
||||
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/Input.java -text
|
||||
forge-gui/src/main/java/forge/match/input/InputAttack.java -text
|
||||
|
||||
@@ -229,6 +229,17 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
return this.bResolving;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* undo.
|
||||
* </p>
|
||||
*
|
||||
* @return a boolean.
|
||||
*/
|
||||
public final boolean canUndo() {
|
||||
return !undoStack.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* undo.
|
||||
|
||||
@@ -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;
|
||||
@@ -478,15 +476,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() {
|
||||
if (FOverlay.SINGLETON_INSTANCE.getPanel().isShowing() || QuestDraftUtils.aiMatchInProgress) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
31
forge-gui/src/main/java/forge/match/MatchUtil.java
Normal file
31
forge-gui/src/main/java/forge/match/MatchUtil.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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,8 +50,13 @@ public class InputPassPriority extends InputSyncronizedBase {
|
||||
public final void showMessage() {
|
||||
showMessage(getTurnPhasePriorityMessage(player.getGame()));
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
@@ -61,10 +67,12 @@ public class InputPassPriority extends InputSyncronizedBase {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
protected final void onCancel() {
|
||||
//end turn
|
||||
if (!MatchUtil.undoLastAction()) { //undo if possible
|
||||
//otherwise end turn
|
||||
player.getController().autoPassUntil(PhaseType.CLEANUP);
|
||||
stop();
|
||||
}
|
||||
}
|
||||
|
||||
public SpellAbility getChosenSa() { return chosenSa; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user