From dff5c73e1c8b7e9b9a2390f6daf33001c0e2e74e Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 6 Jan 2020 21:00:57 -0500 Subject: [PATCH] pulled out DamagedPlayerThisTurnPredicate --- Mage.Sets/src/mage/cards/r/Retaliate.java | 3 +- Mage.Sets/src/mage/cards/s/SpearOfHeliod.java | 3 +- .../java/mage/constants/TargetController.java | 60 ---------------- .../DamagedPlayerThisTurnPredicate.java | 70 +++++++++++++++++++ 4 files changed, 74 insertions(+), 62 deletions(-) create mode 100644 Mage/src/main/java/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java diff --git a/Mage.Sets/src/mage/cards/r/Retaliate.java b/Mage.Sets/src/mage/cards/r/Retaliate.java index ac49c605a99..3c70272af39 100644 --- a/Mage.Sets/src/mage/cards/r/Retaliate.java +++ b/Mage.Sets/src/mage/cards/r/Retaliate.java @@ -7,6 +7,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.DamagedPlayerThisTurnPredicate; import java.util.UUID; @@ -19,7 +20,7 @@ public final class Retaliate extends CardImpl { = new FilterCreaturePermanent("creatures that dealt damage to you this turn"); static { - filter.add(TargetController.YOU.getDamagedPlayerThisTurnPredicate()); + filter.add(new DamagedPlayerThisTurnPredicate(TargetController.YOU)); } public Retaliate(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/s/SpearOfHeliod.java b/Mage.Sets/src/mage/cards/s/SpearOfHeliod.java index d131443bbf1..4ca2c72748c 100644 --- a/Mage.Sets/src/mage/cards/s/SpearOfHeliod.java +++ b/Mage.Sets/src/mage/cards/s/SpearOfHeliod.java @@ -15,6 +15,7 @@ import mage.constants.Duration; import mage.constants.SuperType; import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.DamagedPlayerThisTurnPredicate; import mage.target.Target; import mage.target.common.TargetCreaturePermanent; @@ -29,7 +30,7 @@ public final class SpearOfHeliod extends CardImpl { = new FilterCreaturePermanent("creature that dealt damage to you this turn"); static { - filter.add(TargetController.YOU.getDamagedPlayerThisTurnPredicate()); + filter.add(new DamagedPlayerThisTurnPredicate(TargetController.YOU)); } public SpearOfHeliod(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage/src/main/java/mage/constants/TargetController.java b/Mage/src/main/java/mage/constants/TargetController.java index 1c0220833ae..00870ba7ebc 100644 --- a/Mage/src/main/java/mage/constants/TargetController.java +++ b/Mage/src/main/java/mage/constants/TargetController.java @@ -8,7 +8,6 @@ import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.game.Controllable; import mage.game.Game; import mage.players.Player; -import mage.watchers.common.PlayerDamagedBySourceWatcher; import java.util.UUID; @@ -31,13 +30,11 @@ public enum TargetController { private final OwnerPredicate ownerPredicate; private final PlayerPredicate playerPredicate; private final ControllerPredicate controllerPredicate; - private final DamagedPlayerThisTurnPredicate damagedPlayerThisTurnPredicate; TargetController() { this.ownerPredicate = new OwnerPredicate(this); this.playerPredicate = new PlayerPredicate(this); this.controllerPredicate = new ControllerPredicate(this); - this.damagedPlayerThisTurnPredicate = new DamagedPlayerThisTurnPredicate(this); } public OwnerPredicate getOwnerPredicate() { @@ -198,61 +195,4 @@ public enum TargetController { return "TargetController(" + controller.toString() + ')'; } } - - public static class DamagedPlayerThisTurnPredicate implements ObjectPlayerPredicate> { - - private final TargetController controller; - - public DamagedPlayerThisTurnPredicate(TargetController controller) { - this.controller = controller; - } - - @Override - public boolean apply(ObjectPlayer input, Game game) { - Controllable object = input.getObject(); - UUID playerId = input.getPlayerId(); - - switch (controller) { - case YOU: - PlayerDamagedBySourceWatcher watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, playerId); - if (watcher != null) { - return watcher.hasSourceDoneDamage(object.getId(), game); - } - break; - case OPPONENT: - for (UUID opponentId : game.getOpponents(playerId)) { - watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, opponentId); - if (watcher != null) { - return watcher.hasSourceDoneDamage(object.getId(), game); - } - } - break; - case NOT_YOU: - for (UUID notYouId : game.getState().getPlayersInRange(playerId, game)) { - if (!notYouId.equals(playerId)) { - watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, notYouId); - if (watcher != null) { - return watcher.hasSourceDoneDamage(object.getId(), game); - } - } - } - break; - case ANY: - for (UUID anyId : game.getState().getPlayersInRange(playerId, game)) { - watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, anyId); - if (watcher != null) { - return watcher.hasSourceDoneDamage(object.getId(), game); - } - } - return true; - } - - return false; - } - - @Override - public String toString() { - return "Damaged player (" + controller.toString() + ')'; - } - } } diff --git a/Mage/src/main/java/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java b/Mage/src/main/java/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java new file mode 100644 index 00000000000..3fb4305a6b5 --- /dev/null +++ b/Mage/src/main/java/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java @@ -0,0 +1,70 @@ +package mage.filter.predicate.permanent; + +import mage.constants.TargetController; +import mage.filter.predicate.ObjectPlayer; +import mage.filter.predicate.ObjectPlayerPredicate; +import mage.game.Controllable; +import mage.game.Game; +import mage.watchers.common.PlayerDamagedBySourceWatcher; + +import java.util.UUID; + +/** + * @author LevelX2 + */ +public class DamagedPlayerThisTurnPredicate implements ObjectPlayerPredicate> { + + private final TargetController controller; + + public DamagedPlayerThisTurnPredicate(TargetController controller) { + this.controller = controller; + } + + @Override + public boolean apply(ObjectPlayer input, Game game) { + Controllable object = input.getObject(); + UUID playerId = input.getPlayerId(); + + switch (controller) { + case YOU: + PlayerDamagedBySourceWatcher watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, playerId); + if (watcher != null) { + return watcher.hasSourceDoneDamage(object.getId(), game); + } + break; + case OPPONENT: + for (UUID opponentId : game.getOpponents(playerId)) { + watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, opponentId); + if (watcher != null) { + return watcher.hasSourceDoneDamage(object.getId(), game); + } + } + break; + case NOT_YOU: + for (UUID notYouId : game.getState().getPlayersInRange(playerId, game)) { + if (!notYouId.equals(playerId)) { + watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, notYouId); + if (watcher != null) { + return watcher.hasSourceDoneDamage(object.getId(), game); + } + } + } + break; + case ANY: + for (UUID anyId : game.getState().getPlayersInRange(playerId, game)) { + watcher = game.getState().getWatcher(PlayerDamagedBySourceWatcher.class, anyId); + if (watcher != null) { + return watcher.hasSourceDoneDamage(object.getId(), game); + } + } + return true; + } + + return false; + } + + @Override + public String toString() { + return "Damaged player (" + controller.toString() + ')'; + } +}