forked from External/mage
Refactor and test [AVR] Outwit & [OTJ] Ertha Jo, Frontier Mentor. (#12036)
This commit is contained in:
parent
875b69933a
commit
569d693177
7 changed files with 232 additions and 163 deletions
|
|
@ -0,0 +1,61 @@
|
|||
package mage.filter.predicate.mageobject;
|
||||
|
||||
import mage.abilities.Mode;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.FilterPlayer;
|
||||
import mage.filter.predicate.ObjectSourcePlayer;
|
||||
import mage.filter.predicate.ObjectSourcePlayerPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public class TargetsPermanentOrPlayerPredicate implements ObjectSourcePlayerPredicate<StackObject> {
|
||||
|
||||
private final FilterPermanent targetFilterPermanent;
|
||||
private final FilterPlayer targetFilterPlayer;
|
||||
|
||||
public TargetsPermanentOrPlayerPredicate(FilterPermanent targetFilterPermanent, FilterPlayer targetFilterPlayer) {
|
||||
this.targetFilterPermanent = targetFilterPermanent;
|
||||
this.targetFilterPlayer = targetFilterPlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(ObjectSourcePlayer<StackObject> input, Game game) {
|
||||
StackObject object = game.getStack().getStackObject(input.getObject().getId());
|
||||
if (object != null) {
|
||||
for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) {
|
||||
Mode mode = object.getStackAbility().getModes().get(modeId);
|
||||
for (Target target : mode.getTargets()) {
|
||||
if (target.isNotTarget()) {
|
||||
continue;
|
||||
}
|
||||
for (UUID targetId : target.getTargets()) {
|
||||
// Try for permanent
|
||||
Permanent permanent = game.getPermanent(targetId);
|
||||
if (targetFilterPermanent.match(permanent, input.getPlayerId(), input.getSource(), game)) {
|
||||
return true;
|
||||
}
|
||||
// Try for player
|
||||
Player player = game.getPlayer(targetId);
|
||||
if (targetFilterPlayer.match(player, input.getPlayerId(), input.getSource(), game)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "that targets a " + targetFilterPermanent.getMessage() + " or " + targetFilterPlayer.getMessage();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.filter.predicate.mageobject;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Mode;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.ObjectSourcePlayer;
|
||||
|
|
@ -15,7 +14,7 @@ import java.util.UUID;
|
|||
/**
|
||||
* @author LoneFox
|
||||
*/
|
||||
public class TargetsPermanentPredicate implements ObjectSourcePlayerPredicate<MageObject> {
|
||||
public class TargetsPermanentPredicate implements ObjectSourcePlayerPredicate<StackObject> {
|
||||
|
||||
private final FilterPermanent targetFilter;
|
||||
|
||||
|
|
@ -24,7 +23,7 @@ public class TargetsPermanentPredicate implements ObjectSourcePlayerPredicate<Ma
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(ObjectSourcePlayer<MageObject> input, Game game) {
|
||||
public boolean apply(ObjectSourcePlayer<StackObject> input, Game game) {
|
||||
StackObject object = game.getStack().getStackObject(input.getObject().getId());
|
||||
if (object != null) {
|
||||
for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
package mage.filter.predicate.mageobject;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Mode;
|
||||
import mage.filter.FilterPlayer;
|
||||
import mage.filter.predicate.ObjectSourcePlayer;
|
||||
import mage.filter.predicate.ObjectSourcePlayerPredicate;
|
||||
import mage.game.Game;
|
||||
|
|
@ -10,25 +9,34 @@ import mage.game.stack.StackObject;
|
|||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class TargetsPlayerPredicate implements ObjectSourcePlayerPredicate<MageObject> {
|
||||
import java.util.UUID;
|
||||
|
||||
public TargetsPlayerPredicate() {
|
||||
/**
|
||||
* @author jeffwadsworth, Susucr
|
||||
*/
|
||||
public class TargetsPlayerPredicate implements ObjectSourcePlayerPredicate<StackObject> {
|
||||
|
||||
private final FilterPlayer targetFilter;
|
||||
|
||||
public TargetsPlayerPredicate(FilterPlayer targetFilter) {
|
||||
this.targetFilter = targetFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(ObjectSourcePlayer<MageObject> input, Game game) {
|
||||
public boolean apply(ObjectSourcePlayer<StackObject> input, Game game) {
|
||||
StackObject object = game.getStack().getStackObject(input.getObject().getId());
|
||||
if (object != null) {
|
||||
for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) {
|
||||
Mode mode = object.getStackAbility().getModes().get(modeId);
|
||||
for (Target target : mode.getTargets()) {
|
||||
if (target.isNotTarget()) {
|
||||
continue;
|
||||
}
|
||||
for (UUID targetId : target.getTargets()) {
|
||||
Player player = game.getPlayer(targetId);
|
||||
return player != null;
|
||||
if (targetFilter.match(player, input.getPlayerId(), input.getSource(), game)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -38,6 +46,6 @@ public class TargetsPlayerPredicate implements ObjectSourcePlayerPredicate<MageO
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "that targets a player";
|
||||
return "that targets a " + targetFilter.getMessage();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue