From 69502dd97b8bcc4c7c3bed50136965b7208ca7cd Mon Sep 17 00:00:00 2001 From: "Peter F. Patel-Schneider" Date: Sun, 6 Jan 2019 12:07:19 -0500 Subject: [PATCH] Pass min/max through choice code so that user can't choose too many cards --- .../src/main/java/forge/ai/PlayerControllerAi.java | 4 ++-- .../forge/game/ability/effects/ChangeZoneEffect.java | 2 +- .../main/java/forge/game/player/PlayerController.java | 4 ++-- .../src/main/java/forge/screens/match/CMatchUI.java | 4 ++-- .../util/PlayerControllerForTests.java | 4 ++-- .../src/forge/screens/match/MatchController.java | 4 ++-- forge-gui/src/main/java/forge/interfaces/IGuiGame.java | 2 +- forge-gui/src/main/java/forge/net/ProtocolMethod.java | 2 +- .../src/main/java/forge/net/server/NetGuiGame.java | 4 ++-- .../main/java/forge/player/PlayerControllerHuman.java | 10 +++++----- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 83ebcbdae44..bc002769539 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -162,7 +162,7 @@ public class PlayerControllerAi extends PlayerController { @Override public List chooseEntitiesForEffect( - FCollectionView optionList, DelayedReveal delayedReveal, SpellAbility sa, String title, + FCollectionView optionList, int min, int max, DelayedReveal delayedReveal, SpellAbility sa, String title, Player targetedPlayer) { // this isn't used return null; @@ -1090,7 +1090,7 @@ public class PlayerControllerAi extends PlayerController { @Override public List chooseCardsForZoneChange( - ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, + ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, int min, int max, DelayedReveal delayedReveal, String selectPrompt, Player decider) { // this isn't used return null; diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index b0ef097496b..dbf654df439 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -852,7 +852,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } // ensure that selection is within maximum allowed changeNum do { - selectedCards = decider.getController().chooseCardsForZoneChange(destination, origin, sa, fetchList, delayedReveal, selectPrompt, decider); + selectedCards = decider.getController().chooseCardsForZoneChange(destination, origin, sa, fetchList, 0, changeNum, delayedReveal, selectPrompt, decider); } while (selectedCards != null && selectedCards.size() > changeNum); if (selectedCards != null) { for (Card card : selectedCards) { diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index f603e7656e4..3e09e7c3f1c 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -111,7 +111,7 @@ public abstract class PlayerController { public abstract SpellAbility chooseSingleSpellForEffect(List spells, SpellAbility sa, String title, Map params); - public abstract List chooseEntitiesForEffect(FCollectionView optionList, DelayedReveal delayedReveal, SpellAbility sa, String title, Player relatedPlayer); + public abstract List chooseEntitiesForEffect(FCollectionView optionList, int min, int max, DelayedReveal delayedReveal, SpellAbility sa, String title, Player relatedPlayer); public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message); public abstract boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner); @@ -239,7 +239,7 @@ public abstract class PlayerController { // better to have this odd method than those if playerType comparison in ChangeZone public abstract Card chooseSingleCardForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, DelayedReveal delayedReveal, String selectPrompt, boolean isOptional, Player decider); - public abstract List chooseCardsForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, DelayedReveal delayedReveal, String selectPrompt, Player decider); + public abstract List chooseCardsForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, int min, int max, DelayedReveal delayedReveal, String selectPrompt, Player decider); public abstract void autoPassCancel(); 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 1cb0220a907..5da67c046f3 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 @@ -996,11 +996,11 @@ public final class CMatchUI } @Override - public List chooseEntitiesForEffect(final String title, final List optionList, final DelayedReveal delayedReveal) { + public List chooseEntitiesForEffect(final String title, final List optionList, final int min, final int max, final DelayedReveal delayedReveal) { if (delayedReveal != null) { reveal(delayedReveal.getMessagePrefix(), delayedReveal.getCards()); //TODO: Merge this into search dialog } - return (List) order(title,"Selected", 0, optionList.size(), optionList, null, null, false); + return (List) order(title,"Selected", min, max, optionList, null, null, false); } @Override diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index 80e3e033579..4a2c07f63c6 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -174,7 +174,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public List chooseEntitiesForEffect(FCollectionView optionList, DelayedReveal delayedReveal, SpellAbility sa, String title, Player relatedPlayer) { + public List chooseEntitiesForEffect(FCollectionView optionList, int min, int max, DelayedReveal delayedReveal, SpellAbility sa, String title, Player relatedPlayer) { // this isn't used return null; } @@ -624,7 +624,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public List chooseCardsForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, DelayedReveal delayedReveal, String selectPrompt, Player decider) { + public List chooseCardsForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, int min, int max, DelayedReveal delayedReveal, String selectPrompt, Player decider) { // this isn't used return null; } diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 8ded7b6ff33..f0ab65ff144 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -516,8 +516,8 @@ public class MatchController extends AbstractGuiGame { } @Override - public List chooseEntitiesForEffect(String title, List optionList, DelayedReveal delayedReveal) { - return SGuiChoose.order(title, "Selected", 0, -1, (List) optionList, null); + public List chooseEntitiesForEffect(String title, List optionList, int min, int max, DelayedReveal delayedReveal) { + return SGuiChoose.order(title, "Selected", min, max, (List) optionList, null); } @Override diff --git a/forge-gui/src/main/java/forge/interfaces/IGuiGame.java b/forge-gui/src/main/java/forge/interfaces/IGuiGame.java index 039b132e988..de67ed2ef38 100644 --- a/forge-gui/src/main/java/forge/interfaces/IGuiGame.java +++ b/forge-gui/src/main/java/forge/interfaces/IGuiGame.java @@ -146,7 +146,7 @@ public interface IGuiGame { List sideboard(CardPool sideboard, CardPool main); GameEntityView chooseSingleEntityForEffect(String title, List optionList, DelayedReveal delayedReveal, boolean isOptional); - List chooseEntitiesForEffect(String title, List optionList, DelayedReveal delayedReveal); + List chooseEntitiesForEffect(String title, List optionList, int min, int max, DelayedReveal delayedReveal); void setCard(CardView card); void setPlayerAvatar(LobbyPlayer player, IHasIcon ihi); boolean openZones(Collection zones, Map players); diff --git a/forge-gui/src/main/java/forge/net/ProtocolMethod.java b/forge-gui/src/main/java/forge/net/ProtocolMethod.java index 85101da9108..a5c3851c1cc 100644 --- a/forge-gui/src/main/java/forge/net/ProtocolMethod.java +++ b/forge-gui/src/main/java/forge/net/ProtocolMethod.java @@ -67,7 +67,7 @@ public enum ProtocolMethod { order (Mode.SERVER, List.class, String.class, String.class, Integer.TYPE, Integer.TYPE, List.class, List.class, CardView.class, Boolean.TYPE), sideboard (Mode.SERVER, List.class, CardPool.class, CardPool.class), chooseSingleEntityForEffect(Mode.SERVER, GameEntityView.class, String.class, List.class, DelayedReveal.class, Boolean.TYPE), - chooseEntitiesForEffect(Mode.SERVER, GameEntityView.class, String.class, List.class, DelayedReveal.class), + chooseEntitiesForEffect(Mode.SERVER, GameEntityView.class, String.class, List.class, Integer.TYPE, Integer.TYPE, DelayedReveal.class), setCard (Mode.SERVER, Void.TYPE, CardView.class), // TODO case "setPlayerAvatar": openZones (Mode.SERVER, Boolean.TYPE, Collection/*ZoneType*/.class, Map/*PlayerView,Object*/.class), diff --git a/forge-gui/src/main/java/forge/net/server/NetGuiGame.java b/forge-gui/src/main/java/forge/net/server/NetGuiGame.java index 5635608fbd0..7578bb067f5 100644 --- a/forge-gui/src/main/java/forge/net/server/NetGuiGame.java +++ b/forge-gui/src/main/java/forge/net/server/NetGuiGame.java @@ -244,8 +244,8 @@ public class NetGuiGame extends AbstractGuiGame { } @Override - public List chooseEntitiesForEffect(final String title, final List optionList, final DelayedReveal delayedReveal) { - return sendAndWait(ProtocolMethod.chooseEntitiesForEffect, title, optionList, delayedReveal); + public List chooseEntitiesForEffect(final String title, final List optionList, final int min, final int max, final DelayedReveal delayedReveal) { + return sendAndWait(ProtocolMethod.chooseEntitiesForEffect, title, optionList, min, max, delayedReveal); } @Override diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index a745f973e6d..bad4aa8d8e0 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -460,7 +460,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @SuppressWarnings("unchecked") @Override - public List chooseEntitiesForEffect(final FCollectionView optionList, + public List chooseEntitiesForEffect(final FCollectionView optionList, final int min, final int max, final DelayedReveal delayedReveal, final SpellAbility sa, final String title, final Player targetedPlayer) { // useful details for debugging problems with the mass select logic @@ -483,7 +483,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont delayedReveal.getMessagePrefix()); } tempShow(optionList); - final InputSelectEntitiesFromList input = new InputSelectEntitiesFromList(this, 0, optionList.size(), + final InputSelectEntitiesFromList input = new InputSelectEntitiesFromList(this, min, max, optionList, sa); input.setCancelAllowed(true); input.setMessage(MessageUtil.formatMessage(title, player, targetedPlayer)); @@ -497,7 +497,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont tempShow(delayedReveal.getCards()); } final List chosen = getGui().chooseEntitiesForEffect(title, - GameEntityView.getEntityCollection(optionList), delayedReveal); + GameEntityView.getEntityCollection(optionList), min, max, delayedReveal); endTempShowCards(); List results = new ArrayList<>(); @@ -1780,9 +1780,9 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont } public List chooseCardsForZoneChange(final ZoneType destination, final List origin, - final SpellAbility sa, final CardCollection fetchList, final DelayedReveal delayedReveal, + final SpellAbility sa, final CardCollection fetchList, final int min, final int max, final DelayedReveal delayedReveal, final String selectPrompt, final Player decider) { - return chooseEntitiesForEffect(fetchList, delayedReveal, sa, selectPrompt, decider); + return chooseEntitiesForEffect(fetchList, min, max, delayedReveal, sa, selectPrompt, decider); } @Override