From 9629c3f0f503198947fba172cbd17f666bccaf93 Mon Sep 17 00:00:00 2001 From: Quercitron Date: Sun, 15 Jun 2014 19:23:30 +0400 Subject: [PATCH] Modify implementation of Target's required status --- .../src/mage/player/human/HumanPlayer.java | 2 +- Mage/src/mage/target/Target.java | 1 + Mage/src/mage/target/TargetImpl.java | 14 +++++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index b8effe54421..b9891f61db4 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -330,7 +330,7 @@ public class HumanPlayer extends PlayerImpl { public boolean choose(Outcome outcome, Cards cards, TargetCard target, Game game) { updateGameStatePriority("choose(4)", game); while (!abort) { - boolean required = true; + boolean required = target.isRequired(); // if there is no cards to select from, then add possibility to cancel choosing action if (cards == null) { required = false; diff --git a/Mage/src/mage/target/Target.java b/Mage/src/mage/target/Target.java index 1e4cb8247e6..5b10fab8c69 100644 --- a/Mage/src/mage/target/Target.java +++ b/Mage/src/mage/target/Target.java @@ -93,6 +93,7 @@ public interface Target extends Serializable { List getTargets(); Filter getFilter(); + boolean isRequired(); boolean isRequired(UUID sourceId, Game game); boolean isRequired(Ability ability); void setRequired(boolean required); diff --git a/Mage/src/mage/target/TargetImpl.java b/Mage/src/mage/target/TargetImpl.java index c115f6861ba..30c2fc1903e 100644 --- a/Mage/src/mage/target/TargetImpl.java +++ b/Mage/src/mage/target/TargetImpl.java @@ -54,7 +54,8 @@ public abstract class TargetImpl implements Target { protected Zone zone; protected int maxNumberOfTargets; protected int minNumberOfTargets; - protected boolean required = false; + protected boolean required = true; + protected boolean requiredExplicitlySet = false; protected boolean chosen = false; // is the target handled as targeted spell/ability (notTarget = true is used for not targeted effects like e.g. sacrifice) protected boolean notTarget = false; @@ -77,6 +78,7 @@ public abstract class TargetImpl implements Target { this.maxNumberOfTargets = target.maxNumberOfTargets; this.minNumberOfTargets = target.minNumberOfTargets; this.required = target.required; + this.requiredExplicitlySet = target.requiredExplicitlySet; this.chosen = target.chosen; this.targets.putAll(target.targets); this.zoneChangeCounters.putAll(target.zoneChangeCounters); @@ -148,13 +150,18 @@ public abstract class TargetImpl implements Target { @Override public boolean isRequired(UUID sourceId, Game game) { MageObject object = game.getObject(sourceId); - if (object != null && object instanceof Ability) { + if (!requiredExplicitlySet && object != null && object instanceof Ability) { return isRequired((Ability) object); } else { - return required; + return isRequired(); } } + @Override + public boolean isRequired() { + return required; + } + @Override public boolean isRequired(Ability ability) { return ability.isActivated() || !(ability.getAbilityType().equals(AbilityType.SPELL) || ability.getAbilityType().equals(AbilityType.ACTIVATED)); @@ -163,6 +170,7 @@ public abstract class TargetImpl implements Target { @Override public void setRequired(boolean required) { this.required = required; + this.requiredExplicitlySet = true; } @Override