Updated targetImpl message with multi targets. Updated PreventDamageFromTargetEffect to work with multi targets. Soul Parry works.

This commit is contained in:
magenoxx 2011-01-26 09:31:21 +03:00
parent 883d1b373f
commit b71a5ed9b4
3 changed files with 45 additions and 20 deletions

View file

@ -49,6 +49,7 @@ public class SoulParry extends CardImpl<SoulParry> {
this.expansionSetCode = "SOM";
this.color.setWhite(true);
Target target = new TargetCreaturePermanent(1,2);
target.setTargetName("one or two creatures");
this.getSpellAbility().addEffect(new PreventDamageFromTargetEffect(Duration.EndOfTurn, true));
this.getSpellAbility().addTarget(target);
}

View file

@ -33,9 +33,11 @@ import mage.abilities.Ability;
import mage.abilities.effects.PreventionEffectImpl;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.target.Target;
import java.util.UUID;
/**
*
* @author nantuko
*/
public class PreventDamageFromTargetEffect extends PreventionEffectImpl<PreventDamageFromTargetEffect> {
@ -72,34 +74,50 @@ public class PreventDamageFromTargetEffect extends PreventionEffectImpl<PreventD
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
GameEvent preventEvent = new GameEvent(GameEvent.EventType.PREVENT_DAMAGE, source.getFirstTarget(), source.getId(), source.getControllerId(), event.getAmount(), false);
if (!game.replaceEvent(preventEvent)) {
if (all) {
int damage = event.getAmount();
event.setAmount(0);
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, source.getFirstTarget(), source.getId(), source.getControllerId(), damage));
} else {
if (event.getAmount() >= this.amount) {
int damage = event.getAmount();
event.setAmount(event.getAmount() - amount);
this.used = true;
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, source.getFirstTarget(), source.getId(), source.getControllerId(), damage));
} else {
int damage = event.getAmount();
event.setAmount(0);
amount -= damage;
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, source.getFirstTarget(), source.getId(), source.getControllerId(), damage));
for (Target target : source.getTargets()) {
for (UUID chosen : target.getTargets()) {
if (event.getSourceId().equals(chosen)) {
preventDamage(event, source, chosen, game);
}
}
}
return false;
}
private void preventDamage(GameEvent event, Ability source, UUID target, Game game) {
GameEvent preventEvent = new GameEvent(GameEvent.EventType.PREVENT_DAMAGE, target, source.getId(), source.getControllerId(), event.getAmount(), false);
if (!game.replaceEvent(preventEvent)) {
if (all) {
int damage = event.getAmount();
event.setAmount(0);
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, target, source.getId(), source.getControllerId(), damage));
} else {
if (event.getAmount() >= this.amount) {
int damage = event.getAmount();
event.setAmount(event.getAmount() - amount);
this.used = true;
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, target, source.getId(), source.getControllerId(), damage));
} else {
int damage = event.getAmount();
event.setAmount(0);
amount -= damage;
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, target, source.getId(), source.getControllerId(), damage));
}
}
}
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (!this.used && super.applies(event, source, game) && event.getSourceId().equals(source.getFirstTarget())) {
if (!this.used && super.applies(event, source, game)) {
for (Target target : source.getTargets()) {
for (UUID chosen : target.getTargets()) {
if (event.getSourceId().equals(chosen)) {
return true;
}
}
}
}
return false;
}

View file

@ -92,6 +92,12 @@ public abstract class TargetImpl<T extends TargetImpl<T>> implements Target {
@Override
public String getMessage() {
if (maxNumberOfTargets > 1) {
StringBuilder sb = new StringBuilder();
sb.append("Select ").append(targetName);
sb.append(" (").append(targets.size()).append("/").append(maxNumberOfTargets).append(")");
return sb.toString();
}
return "Select a " + targetName;
}