fix Outwit by adding choice for 'target spell that targets a player'

master
melvin 2013-06-22 14:59:41 +08:00
parent a4d74bbfdb
commit 40a62b8be1
4 changed files with 27 additions and 15 deletions

View File

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

View File

@ -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");

View File

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

View File

@ -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;