Refactor and test [AVR] Outwit & [OTJ] Ertha Jo, Frontier Mentor. (#12036)

This commit is contained in:
Susucre 2024-04-01 14:55:01 +02:00 committed by GitHub
parent 875b69933a
commit 569d693177
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 232 additions and 163 deletions

View file

@ -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();
}
}

View file

@ -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()) {

View file

@ -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();
}
}