();
+
/**
*
* Getter for the field numTargeted.
@@ -45,11 +50,6 @@ public class TargetChoices {
return this.numTargeted;
}
- // Card or Player are legal targets.
- private final List targetCards = new ArrayList();
- private final List targetPlayers = new ArrayList();
- private final List targetSAs = new ArrayList();
-
/**
*
* addTarget.
diff --git a/src/main/java/forge/game/player/PlayerController.java b/src/main/java/forge/game/player/PlayerController.java
index 993699bda94..a6fa341be04 100644
--- a/src/main/java/forge/game/player/PlayerController.java
+++ b/src/main/java/forge/game/player/PlayerController.java
@@ -9,6 +9,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import forge.Card;
import forge.GameEntity;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.deck.Deck;
import forge.game.GameState;
@@ -96,6 +97,7 @@ public abstract class PlayerController {
public abstract Integer announceRequirements(SpellAbility ability, String announce, boolean allowZero);
public abstract List choosePermanentsToSacrifice(List validTargets, String validMessage, int amount, SpellAbility sa, boolean destroy, boolean isOptional);
+ public abstract Target chooseTargets(SpellAbility ability);
public Card chooseSingleCardForEffect(List sourceList, SpellAbility sa, String title) { return chooseSingleCardForEffect(sourceList, sa, title, false); }
public abstract Card chooseSingleCardForEffect(List sourceList, SpellAbility sa, String title, boolean isOptional);
diff --git a/src/main/java/forge/game/player/PlayerControllerAi.java b/src/main/java/forge/game/player/PlayerControllerAi.java
index 47806016f05..e1866e3a45b 100644
--- a/src/main/java/forge/game/player/PlayerControllerAi.java
+++ b/src/main/java/forge/game/player/PlayerControllerAi.java
@@ -12,6 +12,7 @@ import forge.Card;
import forge.GameEntity;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.control.input.InputAutoPassPriority;
import forge.deck.Deck;
@@ -252,4 +253,13 @@ public class PlayerControllerAi extends PlayerController {
return getAi().chooseCardsToDelve(colorlessCost, grave);
}
+ /* (non-Javadoc)
+ * @see forge.game.player.PlayerController#chooseTargets(forge.card.spellability.SpellAbility, forge.card.spellability.SpellAbilityStackInstance)
+ */
+ @Override
+ public Target chooseTargets(SpellAbility ability) {
+ // AI currently can't do this. But when it can it will need to be based on Ability API
+ return null;
+ }
+
}
diff --git a/src/main/java/forge/game/player/PlayerControllerHuman.java b/src/main/java/forge/game/player/PlayerControllerHuman.java
index 39081958b49..62bb4a4c0b0 100644
--- a/src/main/java/forge/game/player/PlayerControllerHuman.java
+++ b/src/main/java/forge/game/player/PlayerControllerHuman.java
@@ -15,6 +15,9 @@ import forge.Card;
import forge.FThreads;
import forge.GameEntity;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
+import forge.card.spellability.TargetChoices;
+import forge.card.spellability.TargetSelection;
import forge.control.input.Input;
import forge.control.input.InputAutoPassPriority;
import forge.control.input.InputBlock;
@@ -401,4 +404,20 @@ public class PlayerControllerHuman extends PlayerController {
}
return toExile;
}
+
+ /* (non-Javadoc)
+ * @see forge.game.player.PlayerController#chooseTargets(forge.card.spellability.SpellAbility, forge.card.spellability.SpellAbilityStackInstance)
+ */
+ @Override
+ public Target chooseTargets(SpellAbility ability) {
+ Target oldTarget = new Target(ability.getTarget());
+ TargetSelection select = new TargetSelection(ability);
+ ability.getTarget().resetTargets();
+ if (select.chooseTargets()) {
+ return ability.getTarget();
+ } else {
+ // Return old target, since we had to reset them above
+ return oldTarget;
+ }
+ }
}