Fixed choosing new targets for spell.

This commit is contained in:
magenoxx 2011-08-14 17:59:10 +04:00
parent dc14945d80
commit bc8d8b4c2f
3 changed files with 35 additions and 25 deletions

View file

@ -53,7 +53,7 @@ public class ChooseNewTargetsTargetEffect extends OneShotEffect<ChooseNewTargets
public boolean apply(Game game, Ability source) {
Spell spell = game.getStack().getSpell(source.getFirstTarget());
if (spell != null) {
return spell.chooseNewTargets(game);
return spell.chooseNewTargets(game, source.getControllerId());
}
return false;
}

View file

@ -58,7 +58,7 @@ public class CopyTargetSpellEffect extends OneShotEffect<CopyTargetSpellEffect>
copy.setControllerId(source.getControllerId());
copy.setCopiedSpell(true);
game.getStack().push(copy);
copy.chooseNewTargets(game);
copy.chooseNewTargets(game, source.getControllerId());
return true;
}
return false;

View file

@ -135,34 +135,44 @@ public class Spell<T extends Spell<T>> implements StackObject, Card {
return replaced;
}
public boolean chooseNewTargets(Game game) {
Player player = game.getPlayer(controllerId);
for (Target target: ability.getTargets()) {
Target newTarget = target.copy();
newTarget.clearChosen();
for (UUID targetId: target.getTargets()) {
MageObject object = game.getObject(targetId);
String name = null;
if (object == null) {
Player targetPlayer = game.getPlayer(targetId);
if (player != null) name = targetPlayer.getName();
} else {
name = object.getName();
}
if (name != null && player.chooseUse(ability.getEffects().get(0).getOutcome(), "Change target from " + name + "?", game)) {
if (!player.chooseTarget(ability.getEffects().get(0).getOutcome(), newTarget, ability, game))
/**
* Choose new targets for the spell
*
* @param game
* @param playerId Player UUID who changes the targets.
* @return
*/
public boolean chooseNewTargets(Game game, UUID playerId) {
Player player = game.getPlayer(playerId);
if (player != null) {
for (Target target: ability.getTargets()) {
Target newTarget = target.copy();
newTarget.clearChosen();
for (UUID targetId: target.getTargets()) {
MageObject object = game.getObject(targetId);
String name = null;
if (object == null) {
Player targetPlayer = game.getPlayer(targetId);
if (player != null) name = targetPlayer.getName();
} else {
name = object.getName();
}
if (name != null && player.chooseUse(ability.getEffects().get(0).getOutcome(), "Change target from " + name + "?", game)) {
if (!player.chooseTarget(ability.getEffects().get(0).getOutcome(), newTarget, ability, game))
newTarget.addTarget(targetId, ability, game);
}
else {
newTarget.addTarget(targetId, ability, game);
}
}
else {
newTarget.addTarget(targetId, ability, game);
target.clearChosen();
for (UUID newTargetId: newTarget.getTargets()) {
target.addTarget(newTargetId, ability, game);
}
}
target.clearChosen();
for (UUID newTargetId: newTarget.getTargets()) {
target.addTarget(newTargetId, ability, game);
}
return true;
}
return true;
return false;
}
@Override