replace direct access to choiceResults with MagicEvent method

master
melvin 2013-03-23 11:28:20 +08:00
parent b5a444f073
commit 8faba795dc
32 changed files with 87 additions and 29 deletions

View File

@ -20,7 +20,7 @@ public class MagicCopyCardOnStackAction extends MagicAction {
final MagicCardOnStack copyCardOnStack=cardOnStack.copyCardOnStack(player);
game.getStack().addToTop(copyCardOnStack);
if (copyCardOnStack.getEvent().getTargetChoice().isValid()) {
copyCardOnStack.getChoiceResults()[0]=null;
copyCardOnStack.getEvent().clearTargetChoice(cardOnStack.getChoiceResults());
game.addEvent(new MagicStackChangeTargetsEvent(copyCardOnStack));
}
}

View File

@ -40,6 +40,11 @@ public class MagicBuybackChoice extends MagicChoice {
MagicTargetChoice.NONE;
}
@Override
public int getTargetChoiceResultIndex() {
return (otherChoice instanceof MagicTargetChoice) ? 0 : -1;
}
@Override
public int getManaChoiceResultIndex() {
return 2;

View File

@ -61,6 +61,10 @@ public abstract class MagicChoice {
return MagicTargetChoice.NONE;
}
public int getTargetChoiceResultIndex() {
return -1;
}
public int getManaChoiceResultIndex() {
return -1;
}

View File

@ -51,6 +51,11 @@ public class MagicKickerChoice extends MagicChoice {
return (otherChoice instanceof MagicTargetChoice) ? (MagicTargetChoice)otherChoice : MagicTargetChoice.NONE;
}
@Override
public int getTargetChoiceResultIndex() {
return (otherChoice instanceof MagicTargetChoice) ? 0 : -1;
}
@Override
public int getManaChoiceResultIndex() {
return 2;

View File

@ -26,6 +26,7 @@ public class MagicMayChoice extends MagicChoice {
private final MagicChoice[] choices;
private final MagicTargetChoice targetChoice;
private final int manaChoiceResultIndex;
private final int targetChoiceResultIndex;
public MagicMayChoice(final String description,final MagicChoice... choices) {
super(description);
@ -33,16 +34,19 @@ public class MagicMayChoice extends MagicChoice {
MagicTargetChoice localTargetChoice = MagicTargetChoice.NONE;
int localManaChoiceResultIndex = -1;
int localTargetChoiceResultIndex = -1;
for (int index=0;index<choices.length;index++) {
final MagicChoice choice=choices[index];
if (choice instanceof MagicTargetChoice) {
localTargetChoice=(MagicTargetChoice)choice;
localTargetChoiceResultIndex=index+1;
} else if (choice instanceof MagicPayManaCostChoice) {
localManaChoiceResultIndex=index+1;
}
}
targetChoice = localTargetChoice;
targetChoiceResultIndex = localTargetChoiceResultIndex;
manaChoiceResultIndex = localManaChoiceResultIndex;
}
@ -58,6 +62,11 @@ public class MagicMayChoice extends MagicChoice {
public MagicTargetChoice getTargetChoice() {
return targetChoice;
}
@Override
public int getTargetChoiceResultIndex() {
return targetChoiceResultIndex;
}
@Override
public int getManaChoiceResultIndex() {

View File

@ -516,6 +516,11 @@ public class MagicTargetChoice extends MagicChoice {
public final MagicTargetChoice getTargetChoice() {
return this;
}
@Override
public final int getTargetChoiceResultIndex() {
return 0;
}
@Override
final boolean hasOptions(

View File

@ -31,7 +31,7 @@ public class MagicCounterUnlessEvent extends MagicEvent {
final MagicEvent event,
final Object[] choiceResults) {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.payManaCost(game,itemOnStack.getController(),choiceResults);
} else {
game.doAction(new MagicCounterItemOnStackAction(itemOnStack));

View File

@ -25,7 +25,7 @@ public class MagicDeclareAttackersEvent extends MagicEvent {
final MagicEvent event,
final Object[] choiceResults) {
final MagicPlayer player = event.getPlayer();
final MagicDeclareAttackersResult result = (MagicDeclareAttackersResult)choiceResults[0];
final MagicDeclareAttackersResult result = event.getAttackers();
game.doAction(new MagicDeclareAttackersAction(player,result));
game.logAttackers(player,result);
}

View File

@ -21,8 +21,8 @@ public class MagicDeclareBlockersEvent extends MagicEvent {
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game,final MagicEvent event,final Object[] choiceResults) {
final MagicPlayer player=event.getPlayer();
final MagicDeclareBlockersResult result=(MagicDeclareBlockersResult)choiceResults[0];
final MagicPlayer player = event.getPlayer();
final MagicDeclareBlockersResult result = event.getBlockers();
game.doAction(new MagicDeclareBlockersAction(player,result));
game.logBlockers(player,result);
}

View File

@ -22,6 +22,10 @@ import magic.model.action.MagicTargetAction;
import magic.model.choice.MagicChoice;
import magic.model.choice.MagicPayManaCostResult;
import magic.model.choice.MagicTargetChoice;
import magic.model.choice.MagicDeclareAttackersResult;
import magic.model.choice.MagicDeclareBlockersResult;
import magic.model.choice.MagicExcludeResult;
import magic.model.choice.MagicPlayChoiceResult;
import magic.model.stack.MagicCardOnStack;
import magic.model.stack.MagicItemOnStack;
import magic.model.target.MagicDefaultTargetPicker;
@ -367,6 +371,18 @@ public class MagicEvent implements MagicCopyable {
public MagicTargetChoice getTargetChoice() {
return choice.getTargetChoice();
}
public void clearTargetChoice(Object[] choiceResults) {
choiceResults[getTargetChoiceResultIndex()] = null;
}
public void setTargetChoice(Object[] choiceResults) {
choiceResults[getTargetChoiceResultIndex()] = getTarget();
}
private final int getTargetChoiceResultIndex() {
return choice.getTargetChoiceResultIndex();
}
private final int getManaChoiceResultIndex() {
return choice.getManaChoiceResultIndex();
@ -412,6 +428,22 @@ public class MagicEvent implements MagicCopyable {
public boolean isKicked() {
return getKickerCount() > 0;
}
public MagicDeclareBlockersResult getBlockers() {
return (MagicDeclareBlockersResult)chosen[0];
}
public MagicDeclareAttackersResult getAttackers() {
return (MagicDeclareAttackersResult)chosen[0];
}
public MagicExcludeResult getExclude() {
return (MagicExcludeResult)chosen[0];
}
public MagicPlayChoiceResult getPlayChoice() {
return (MagicPlayChoiceResult)chosen[0];
}
public MagicColor getChosenColor() {
for (Object obj : chosen) {

View File

@ -23,8 +23,7 @@ public class MagicExcludeEvent extends MagicEvent {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
final MagicExcludeResult result=(MagicExcludeResult)choiceResults[0];
result.exclude(game);
event.getExclude().exclude(game);
}
};
}

View File

@ -29,7 +29,7 @@ public class MagicMulliganEvent extends MagicEvent {
final MagicEvent event,
final Object[] choiceResults) {
final MagicPlayer player = event.getPlayer();
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
final MagicCardList hand = new MagicCardList(player.getHand());
final int size = hand.size();
for (final MagicCard card : hand) {

View File

@ -49,8 +49,7 @@ public class MagicPlayCardEvent {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
final int kicker = (Integer)choiceResults[1];
game.doAction(new MagicPlayCardFromStackAction(event.getCardOnStack(), kicker));
game.doAction(new MagicPlayCardFromStackAction(event.getCardOnStack(), event.getKickerCount()));
}
};
}

View File

@ -37,7 +37,7 @@ public class MagicPlayMulticounterEvent extends MagicSpellCardEvent {
final MagicPlayCardFromStackAction action = new MagicPlayCardFromStackAction(cardOnStack);
game.doAction(action);
final int kickerCount = (Integer)choiceResults[1];
final int kickerCount = event.getKickerCount();
if (kickerCount > 0) {
final MagicPermanent permanent = action.getPermanent();
game.doAction(new MagicChangeCountersAction(

View File

@ -27,7 +27,7 @@ public class MagicPlayOgreUnlessEvent extends MagicEvent {
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game,final MagicEvent event,final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.payManaCost(game,event.getPlayer(),choiceResults);
} else {
game.doAction(new MagicPlayTokenAction(event.getRefPlayer(),TokenCardDefinitions.get("Ogre")));

View File

@ -17,7 +17,7 @@ public class MagicPriorityEvent extends MagicEvent {
final MagicEvent event,
final Object[] choiceResults) {
final MagicPlayChoiceResult playChoiceResult=(MagicPlayChoiceResult)choiceResults[0];
final MagicPlayChoiceResult playChoiceResult = event.getPlayChoice();
if (playChoiceResult==MagicPlayChoiceResult.PASS ||
playChoiceResult==MagicPlayChoiceResult.SKIP) {
game.incrementPriorityPassedCount();

View File

@ -31,7 +31,7 @@ public class MagicRedirectDamageEvent extends MagicEvent {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent planeswalker) {
final MagicDamage damage = isCombat ?

View File

@ -40,7 +40,7 @@ public class MagicSoulbondEvent extends MagicEvent {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new MagicSoulbondAction(

View File

@ -21,7 +21,7 @@ public class MagicStackChangeTargetsEvent extends MagicEvent {
@Override
public void executeEvent(final MagicGame game,final MagicEvent event,final Object[] choiceResults) {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
itemOnStack.getChoiceResults()[0]=choiceResults[0];
event.setTargetChoice(itemOnStack.getChoiceResults());
}
};
}

View File

@ -44,7 +44,7 @@ public class MagicAllyGrowTrigger extends MagicWhenOtherComesIntoPlayTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
game.doAction(new MagicChangeCountersAction(
event.getPermanent(),
MagicCounterType.PlusOne,

View File

@ -42,7 +42,7 @@ public abstract class MagicAtUpkeepTrigger extends MagicTrigger<MagicPlayer> {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
game.doAction(new MagicChangeCountersAction(event.getPermanent(),MagicCounterType.Charge,1,true));
}
}

View File

@ -60,7 +60,7 @@ public class MagicCumulativeUpkeepTrigger extends MagicAtUpkeepTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isNoChoice(choiceResults[0])) {
if (event.isNo()) {
game.doAction(new MagicSacrificeAction(event.getPermanent()));
}
}

View File

@ -62,7 +62,7 @@ public class MagicDevourTrigger extends MagicWhenComesIntoPlayTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
final MagicPermanent permanent = event.getPermanent();

View File

@ -49,7 +49,7 @@ public class MagicDieDrawCardTrigger extends MagicWhenPutIntoGraveyardTrigger {
final Object[] choiceResults) {
if (mustDraw) {
game.doAction(new MagicDrawAction(event.getPlayer(),1));
} else if (MagicMayChoice.isYesChoice(choiceResults[0])) {
} else if (event.isYes()) {
game.doAction(new MagicDrawAction(event.getPlayer(),1));
}
}

View File

@ -43,7 +43,7 @@ public class MagicEchoTrigger extends MagicAtUpkeepTrigger {
final MagicEvent event,
final Object[] choiceResults) {
final MagicPermanent permanent = event.getPermanent();
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
game.doAction(new MagicChangeStateAction(
permanent,
MagicPermanentState.MustPayEchoCost,false

View File

@ -78,7 +78,7 @@ public class MagicEntersExileCreatureOrSacrificeTrigger extends MagicWhenComesIn
final MagicEvent event,
final Object[] choiceResults) {
final MagicPermanent permanent = event.getPermanent();
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new MagicExileUntilThisLeavesPlayAction(permanent,creature));

View File

@ -41,7 +41,7 @@ public class MagicExtortTrigger extends MagicWhenOtherSpellIsCastTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
game.doAction(new MagicChangeLifeAction(event.getPlayer().getOpponent(),-1));
game.doAction(new MagicChangeLifeAction(event.getPlayer(),1));
}

View File

@ -36,7 +36,7 @@ public class MagicMiracleTrigger extends MagicWhenDrawnTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
final MagicCard card = event.getCard();
// without this, card.getCardDefinition() will return UNKNOWN in simulated game

View File

@ -47,7 +47,7 @@ public class MagicModularTrigger extends MagicWhenPutIntoGraveyardTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new MagicChangeCountersAction(

View File

@ -56,7 +56,7 @@ public class MagicSoulshiftTrigger extends MagicWhenPutIntoGraveyardTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new MagicRemoveCardAction(

View File

@ -73,7 +73,7 @@ public class MagicThiefTrigger extends MagicWhenDamageIsDealtTrigger {
final Object[] choiceResults) {
if (choice == choice.Must) {
game.doAction(new MagicDrawAction(event.getPlayer(),amount));
} else if (MagicMayChoice.isYesChoice(choiceResults[0])) {
} else if (event.isYes()) {
game.doAction(new MagicDrawAction(event.getPlayer(),amount));
}
}

View File

@ -35,7 +35,7 @@ public class MagicUnleashTrigger extends MagicWhenComesIntoPlayTrigger {
final MagicGame game,
final MagicEvent event,
final Object[] choiceResults) {
if (MagicMayChoice.isYesChoice(choiceResults[0])) {
if (event.isYes()) {
game.doAction(new MagicChangeCountersAction(
event.getPermanent(),
MagicCounterType.PlusOne,