diff --git a/.gitattributes b/.gitattributes index d72027c1f50..0a44b75ad0a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15126,7 +15126,6 @@ forge-gui/src/main/java/forge/game/spellability/SpellAbilityVariables.java svneo forge-gui/src/main/java/forge/game/spellability/SpellPermanent.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/TargetChoices.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/TargetRestrictions.java svneol=native#text/plain -forge-gui/src/main/java/forge/game/spellability/TargetSelection.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/game/staticability/StaticAbility.java svneol=native#text/plain forge-gui/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java -text @@ -15427,6 +15426,7 @@ forge-gui/src/main/java/forge/gui/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/gui/player/HumanPlay.java -text forge-gui/src/main/java/forge/gui/player/LobbyPlayerHuman.java -text forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java -text +forge-gui/src/main/java/forge/gui/player/TargetSelection.java svneol=native#text/plain forge-gui/src/main/java/forge/gui/player/package-info.java -text forge-gui/src/main/java/forge/gui/toolbox/CardFaceSymbols.java svneol=native#text/plain forge-gui/src/main/java/forge/gui/toolbox/FAbsolutePositioner.java -text diff --git a/forge-gui/src/main/java/forge/game/player/PlayerController.java b/forge-gui/src/main/java/forge/game/player/PlayerController.java index ce399dd3435..556bc1f2a90 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerController.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerController.java @@ -121,6 +121,7 @@ public abstract class PlayerController { public abstract List choosePermanentsToSacrifice(SpellAbility sa, int min, int max, List validTargets, String message); public abstract List choosePermanentsToDestroy(SpellAbility sa, int min, int max, List validTargets, String message); public abstract TargetChoices chooseNewTargetsFor(SpellAbility ability); + public abstract boolean chooseTargetsFor(SpellAbility currentAbility); // this is bad a function for it assigns targets to sa inside its body // Specify a target of a spell (Spellskite) public abstract Pair chooseTarget(SpellAbility sa, List> allTargets); diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java index 584f74a9550..58e281e3dc8 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java @@ -50,7 +50,6 @@ import forge.game.spellability.Spell; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; -import forge.game.spellability.TargetSelection; import forge.game.trigger.Trigger; import forge.game.trigger.WrappedAbility; import forge.game.zone.ZoneType; @@ -73,9 +72,6 @@ public class PlayerControllerAi extends PlayerController { brains = new AiController(p, game); } - /** - * Uses GUI to learn which spell the player (human in our case) would like to play - */ public SpellAbility getAbilityToPlay(List abilities, MouseEvent triggerEvent) { if (abilities.size() == 0) { return null; @@ -636,12 +632,7 @@ public class PlayerControllerAi extends PlayerController { private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){ if (sa.hasParam("TargetingPlayer")) { Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0); - if (targetingPlayer.isHuman()) { - final TargetSelection select = new TargetSelection(sa); - select.chooseTargets(null); - } else { //AI - sa.doTrigger(true, targetingPlayer); - } + targetingPlayer.getController().chooseTargetsFor(sa); } else { sa.doTrigger(isMandatory, player); } @@ -676,4 +667,9 @@ public class PlayerControllerAi extends PlayerController { return brains.chooseProliferation(); } + @Override + public boolean chooseTargetsFor(SpellAbility currentAbility) { + return currentAbility.doTrigger(true, player); + } + } diff --git a/forge-gui/src/main/java/forge/game/spellability/HumanPlaySpellAbility.java b/forge-gui/src/main/java/forge/game/spellability/HumanPlaySpellAbility.java index b8c8b8838d0..7d0fe9bc1b4 100644 --- a/forge-gui/src/main/java/forge/game/spellability/HumanPlaySpellAbility.java +++ b/forge-gui/src/main/java/forge/game/spellability/HumanPlaySpellAbility.java @@ -117,15 +117,9 @@ public class HumanPlaySpellAbility { clearTargets(currentAbility); Player targetingPlayer = ability.hasParam("TargetingPlayer") ? AbilityUtils.getDefinedPlayers(source, ability.getParam("TargetingPlayer"), currentAbility).get(0) : ability.getActivatingPlayer(); - if (targetingPlayer.isHuman()) { - final TargetSelection select = new TargetSelection(currentAbility); - if (!select.chooseTargets(null)) { - return false; - } - } - else { //AI - return currentAbility.doTrigger(true, targetingPlayer); - } + + if (!targetingPlayer.getController().chooseTargetsFor(currentAbility)) + return false; } final SpellAbility subAbility = currentAbility.getSubAbility(); if (subAbility != null) { diff --git a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java index c549f4a9866..42153f86816 100644 --- a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java @@ -53,7 +53,6 @@ import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; -import forge.game.spellability.TargetSelection; import forge.game.trigger.Trigger; import forge.game.trigger.WrappedAbility; import forge.game.zone.Zone; @@ -1019,4 +1018,11 @@ public class PlayerControllerHuman extends PlayerController { return null; return inp.getProliferationMap(); } + + @Override + public boolean chooseTargetsFor(SpellAbility currentAbility) { + final TargetSelection select = new TargetSelection(currentAbility); + return select.chooseTargets(null); + + } } diff --git a/forge-gui/src/main/java/forge/game/spellability/TargetSelection.java b/forge-gui/src/main/java/forge/gui/player/TargetSelection.java similarity index 98% rename from forge-gui/src/main/java/forge/game/spellability/TargetSelection.java rename to forge-gui/src/main/java/forge/gui/player/TargetSelection.java index 56cf60066d0..02fc67a948b 100644 --- a/forge-gui/src/main/java/forge/game/spellability/TargetSelection.java +++ b/forge-gui/src/main/java/forge/gui/player/TargetSelection.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.game.spellability; +package forge.gui.player; import java.util.ArrayList; import java.util.List; @@ -28,6 +28,9 @@ import forge.game.GameObject; import forge.game.card.Card; import forge.game.card.CardLists; import forge.game.player.Player; +import forge.game.spellability.SpellAbility; +import forge.game.spellability.SpellAbilityStackInstance; +import forge.game.spellability.TargetRestrictions; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index 9de2ff05760..b0b5081832d 100644 --- a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -44,7 +44,6 @@ import forge.game.spellability.Spell; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; -import forge.game.spellability.TargetSelection; import forge.game.trigger.Trigger; import forge.game.trigger.WrappedAbility; import forge.game.zone.ZoneType; @@ -496,12 +495,7 @@ public class PlayerControllerForTests extends PlayerController { private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){ if (sa.hasParam("TargetingPlayer")) { Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0); - if (targetingPlayer.isHuman()) { - final TargetSelection select = new TargetSelection(sa); - select.chooseTargets(null); - } else { //AI - sa.doTrigger(true, targetingPlayer); - } + targetingPlayer.getController().chooseTargetsFor(sa); } else { sa.doTrigger(isMandatory, player); } @@ -538,4 +532,9 @@ public class PlayerControllerForTests extends PlayerController { // TODO Auto-generated method stub return null; } + + @Override + public boolean chooseTargetsFor(SpellAbility currentAbility) { + return currentAbility.doTrigger(true, player); + } }