fix Outwit by adding choice for 'target spell that targets a player'
parent
a4d74bbfdb
commit
40a62b8be1
|
@ -4,26 +4,16 @@
|
|||
public MagicEvent getEvent(final MagicCardOnStack cardOnStack, final MagicPayedCost payedCost) {
|
||||
return new MagicEvent(
|
||||
cardOnStack,
|
||||
MagicTargetChoice.NEG_TARGET_SPELL,
|
||||
MagicTargetChoice.NEG_TARGET_SPELL_THAT_TARGETS_PLAYER,
|
||||
this,
|
||||
"Counter target spell\$ that targets a player."
|
||||
);
|
||||
}
|
||||
//FIXME: check if result contains a player NOT targets a player
|
||||
@Override
|
||||
public void executeEvent(final MagicGame game, final MagicEvent event) {
|
||||
event.processTargetCardOnStack(game,new MagicCardOnStackAction() {
|
||||
public void doAction(final MagicCardOnStack targetSpell) {
|
||||
if (targetSpell.getChoiceResults() != null) {
|
||||
for (final Object choiceResult : targetSpell.getChoiceResults()) {
|
||||
for (final MagicPlayer player : game.getPlayers()) {
|
||||
if (choiceResult == player) {
|
||||
game.doAction(new MagicCounterItemOnStackAction(targetSpell));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
game.doAction(new MagicCounterItemOnStackAction(targetSpell));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -39,6 +39,14 @@ public class MagicTargetChoice extends MagicChoice {
|
|||
public static final MagicTargetChoice NEG_TARGET_SPELL=
|
||||
new MagicTargetChoice(MagicTargetFilter.TARGET_SPELL,true,MagicTargetHint.Negative,
|
||||
"target spell");
|
||||
|
||||
public static final MagicTargetChoice NEG_TARGET_SPELL_THAT_TARGETS_PLAYER = new MagicTargetChoice(
|
||||
MagicTargetFilter.TARGET_SPELL_THAT_TARGETS_PLAYER,
|
||||
true,
|
||||
MagicTargetHint.Negative,
|
||||
"target spell that targets a player"
|
||||
);
|
||||
|
||||
public static final MagicTargetChoice NEG_TARGET_SPELL_WITH_X_COST=
|
||||
new MagicTargetChoice(MagicTargetFilter.TARGET_SPELL_WITH_X_COST,true,MagicTargetHint.Negative,
|
||||
"target spell with {X} in its mana cost");
|
||||
|
|
|
@ -101,10 +101,10 @@ public abstract class MagicItemOnStack implements MagicTarget {
|
|||
return choiceResults;
|
||||
}
|
||||
|
||||
public boolean containsInChoiceResults(final MagicPermanent permanent) {
|
||||
if (choiceResults!=null) {
|
||||
public boolean containsInChoiceResults(final MagicObject obj) {
|
||||
if (choiceResults != null) {
|
||||
for (final Object choiceResult : choiceResults) {
|
||||
if (choiceResult==permanent) {
|
||||
if (choiceResult == obj) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import magic.model.MagicSubType;
|
|||
import magic.model.MagicType;
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
import magic.model.stack.MagicItemOnStack;
|
||||
import magic.model.choice.MagicTargetChoice;
|
||||
|
||||
abstract class MagicTargetFilterImpl implements MagicTargetFilter<MagicTarget> {
|
||||
public List<MagicTarget> filter(final MagicGame game, final MagicPlayer player, final MagicTargetHint targetHint) {
|
||||
|
@ -192,6 +193,19 @@ public interface MagicTargetFilter<T extends MagicTarget> {
|
|||
}
|
||||
};
|
||||
|
||||
MagicStackFilterImpl TARGET_SPELL_THAT_TARGETS_PLAYER=new MagicStackFilterImpl() {
|
||||
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicItemOnStack target) {
|
||||
if (target.isSpell() == false) {
|
||||
return false;
|
||||
}
|
||||
final MagicTargetChoice tchoice = target.getEvent().getTargetChoice();
|
||||
return tchoice != null && tchoice.isTargeted() && tchoice.getTargetFilter().acceptType(MagicTargetType.Player);
|
||||
}
|
||||
public boolean acceptType(final MagicTargetType targetType) {
|
||||
return targetType==MagicTargetType.Stack;
|
||||
}
|
||||
};
|
||||
|
||||
MagicStackFilterImpl TARGET_SPELL_YOU_DONT_CONTROL=new MagicStackFilterImpl() {
|
||||
public boolean accept(final MagicGame game,final MagicPlayer player,final MagicItemOnStack target) {
|
||||
return target.isSpell() && target.getController() != player;
|
||||
|
|
Loading…
Reference in New Issue