DeclareCombatantsEffect - added until param

This commit is contained in:
Maxmtg
2013-06-02 18:26:28 +00:00
parent d44a379e8f
commit eed6f21adb
2 changed files with 25 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.List; import java.util.List;
import forge.Command;
import forge.card.ability.SpellAbilityEffect; import forge.card.ability.SpellAbilityEffect;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
@@ -21,22 +22,43 @@ public class DeclareCombatantsEffect extends SpellAbilityEffect {
final String defDesc = "which creatures block this turn and how those creatures block"; final String defDesc = "which creatures block this turn and how those creatures block";
String what = Lang.joinHomogenous(attackers ? attDesc : null, blockers ? defDesc : null); String what = Lang.joinHomogenous(attackers ? attDesc : null, blockers ? defDesc : null);
String until = sa.getParam("Until");
String duration = "EndOfTurn".equals(until) ? "turn" : "combat";
// TODO Auto-generated method stub // TODO Auto-generated method stub
return Lang.joinHomogenous(tgtPlayers) + " " + Lang.joinVerb(tgtPlayers, "choose") + " " + what + " this turn."; return Lang.joinHomogenous(tgtPlayers) + " " + Lang.joinVerb(tgtPlayers, "choose") + " " + what + " this " + duration +".";
} }
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
List<Player> tgtPlayers = getDefinedPlayersBeforeTargetOnes(sa); List<Player> tgtPlayers = getDefinedPlayersBeforeTargetOnes(sa);
boolean attackers = sa.hasParam("DeclareAttackers"); final boolean attackers = sa.hasParam("DeclareAttackers");
boolean blockers = sa.hasParam("DeclareBlockers"); final boolean blockers = sa.hasParam("DeclareBlockers");
String until = sa.getParam("Until");
boolean untilEoT = "EndOfTurn".equals(until);
for(Player p : tgtPlayers) { // Obviuosly the last player will be applied for(Player p : tgtPlayers) { // Obviuosly the last player will be applied
final PhaseHandler ph = p.getGame().getPhaseHandler(); final PhaseHandler ph = p.getGame().getPhaseHandler();
if( attackers ) ph.setPlayerDeclaresAttackers(p); if( attackers ) ph.setPlayerDeclaresAttackers(p);
if( blockers ) ph.setPlayerDeclaresBlockers(p); if( blockers ) ph.setPlayerDeclaresBlockers(p);
Command removeOverrides = new Command() {
private static final long serialVersionUID = -8064627517852651016L;
@Override
public void run() {
if( attackers ) ph.setPlayerDeclaresAttackers(null);
if( blockers ) ph.setPlayerDeclaresBlockers(null);
}
};
if ( untilEoT )
p.getGame().getEndOfTurn().addUntil(removeOverrides);
else
p.getGame().getEndOfCombat().addUntil(removeOverrides);
} }
} }

View File

@@ -231,10 +231,6 @@ public class PhaseHandler implements java.io.Serializable {
final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED); final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED);
playerTurn.setNumPowerSurgeLands(lands.size()); playerTurn.setNumPowerSurgeLands(lands.size());
// reset players controlling attack or defense
playerDeclaresAttackers = null;
playerDeclaresBlockers = null;
} }
game.fireEvent(new GameEventTurnPhase(this.getPlayerTurn(), this.getPhase(), phaseType)); game.fireEvent(new GameEventTurnPhase(this.getPlayerTurn(), this.getPhase(), phaseType));