From 46ecbc9c42e6d2e9da56cea5792a48af9b616f83 Mon Sep 17 00:00:00 2001 From: Agetian Date: Mon, 21 Aug 2017 16:09:20 +0000 Subject: [PATCH] - Dev Mode: added a new function "Remove Card from Game", which allows to completely remove a card from the game in case it was added previously by mistake. --- .../home/puzzle/CSubmenuPuzzleCreate.java | 2 +- .../forge/screens/match/controllers/CDev.java | 11 ++++++ .../java/forge/screens/match/views/VDev.java | 11 ++++-- .../forge/screens/match/views/VDevMenu.java | 11 ++++++ .../java/forge/interfaces/IDevModeCheats.java | 5 +++ .../forge/player/PlayerControllerHuman.java | 36 +++++++++++++++++++ 6 files changed, 73 insertions(+), 3 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/puzzle/CSubmenuPuzzleCreate.java b/forge-gui-desktop/src/main/java/forge/screens/home/puzzle/CSubmenuPuzzleCreate.java index 8f6b7691e41..6145570175c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/puzzle/CSubmenuPuzzleCreate.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/puzzle/CSubmenuPuzzleCreate.java @@ -79,7 +79,7 @@ public enum CSubmenuPuzzleCreate implements ICDoc, IMenuProvider { private void startPuzzleCreate() { String firstPlayer = SGuiChoose.one("Who should be the first to take a turn?", - Arrays.asList(new String[] {"Human", "AI"})); + Arrays.asList("Human", "AI")); final Puzzle emptyPuzzle = new Puzzle(generateEmptyPuzzle(firstPlayer)); diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java index 61d7f8f330b..d71ad2342ec 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java @@ -46,6 +46,7 @@ public final class CDev implements ICDoc { view.getLblWinGame().addMouseListener(madWinGame); view.getLblCardToBattlefield().addMouseListener(madCardToBattlefield); view.getLblExileFromPlay().addMouseListener(madExileFromPlay); + view.getLblRemoveFromGame().addMouseListener(madRemoveFromGame); view.getLblRiggedRoll().addMouseListener(madRiggedRoll); view.getLblWalkTo().addMouseListener(madWalkToPlane); } @@ -246,6 +247,16 @@ public final class CDev implements ICDoc { getController().cheat().exileCardsFromBattlefield(); } + private final MouseListener madRemoveFromGame = new MouseAdapter() { + @Override + public void mousePressed(final MouseEvent e) { + removeCardsFromGame(); + } + }; + public void removeCardsFromGame() { + getController().cheat().removeCardsFromGame(); + } + private final MouseListener madRiggedRoll = new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java index 0c01902fe84..0ef37b6114b 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java @@ -72,6 +72,7 @@ public class VDev implements IVDoc, IDevListener { private final DevLabel lblCardToLibrary = new DevLabel("Add Card to Library"); private final DevLabel lblCardToGraveyard = new DevLabel("Add Card to Graveyard"); private final DevLabel lblCardToExile = new DevLabel("Add Card to Exile"); + private final DevLabel lblRemoveFromGame = new DevLabel("Remove Card from Game"); private final DevLabel lblRiggedRoll = new DevLabel("Rigged Planar Roll"); private final DevLabel lblWalkTo = new DevLabel("Planeswalk to"); @@ -97,8 +98,9 @@ public class VDev implements IVDoc, IDevListener { viewport.add(this.lblCardToLibrary, halfConstraintsLeft); viewport.add(this.lblCardToGraveyard, halfConstraints); viewport.add(this.lblCardToExile, halfConstraintsLeft); - viewport.add(this.lblSetLife, halfConstraints); - viewport.add(this.lblWinGame, constraints); + viewport.add(this.lblRemoveFromGame, halfConstraints); + viewport.add(this.lblSetLife, halfConstraintsLeft); + viewport.add(this.lblWinGame, halfConstraints); viewport.add(this.lblSetupGame, halfConstraintsLeft); viewport.add(this.lblDumpGame, halfConstraints); viewport.add(this.lblUnlimitedLands, constraints); @@ -223,6 +225,11 @@ public class VDev implements IVDoc, IDevListener { return this.lblExileFromPlay; } + /** @return {@link forge.screens.match.views.VDev.DevLabel} */ + public DevLabel getLblRemoveFromGame() { + return this.lblRemoveFromGame; + } + /** @return {@link forge.screens.match.views.VDev.DevLabel} */ public DevLabel getLblCounterPermanent() { return this.lblCounterPermanent; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java b/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java index d0a21223fa5..2d848a74d4c 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java @@ -110,6 +110,17 @@ public class VDevMenu extends FDropDownMenu { }); } })); + addItem(new FMenuItem("Remove Card from Game", new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + MatchController.instance.getGameController().cheat().removeCardsFromGame(); + } + }); + } + })); addItem(new FMenuItem("Set Player Life", new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java b/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java index 09500333c21..34fc4c42f6a 100644 --- a/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java +++ b/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java @@ -42,6 +42,8 @@ public interface IDevModeCheats { */ void exileCardsFromBattlefield(); + void removeCardsFromGame(); + void addCardToBattlefield(); void riggedPlanarRoll(); @@ -113,6 +115,9 @@ public interface IDevModeCheats { @Override public void addCardToExile() { } + @Override + public void removeCardsFromGame() { + } }; } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index d50d0110520..f81077d81e8 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -2199,6 +2199,42 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont } } + /* + * (non-Javadoc) + * + * @see forge.player.IDevModeCheats#exileCardsFromBattlefield() + */ + @Override + public void removeCardsFromGame() { + final Player p = game.getPlayer(getGui().oneOrNone("Remove card(s) belonging to which player?", + PlayerView.getCollection(game.getPlayers()))); + if (p == null) { + return; + } + + final String zone = getGui().one("Remove card(s) from which zone?", + Arrays.asList("Hand", "Battlefield", "Library", "Graveyard", "Exile")); + + final CardCollection selection; + + CardCollectionView cards = p.getCardsIn(ZoneType.smartValueOf(zone)); + selection = game.getCardList(getGui().many("Choose cards to remove from game", "Removed", 0, -1, + CardView.getCollection(cards), null)); + + if (selection != null && selection.size() > 0) { + for (Card c : selection) { + if (c == null) { + continue; + } + c.ceaseToExist(); + + StringBuilder sb = new StringBuilder(); + sb.append(p).append(" removes ").append(c).append(" from game due to Dev Cheats."); + game.getGameLog().add(GameLogEntryType.ZONE_CHANGE, sb.toString()); + } + } + } + /* * (non-Javadoc) *