mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
fixed Curtain of Light targeting, updated how being unblocked is checked
This commit is contained in:
parent
3b0b923b7c
commit
2733d736d5
5 changed files with 19 additions and 22 deletions
|
@ -41,7 +41,7 @@ import mage.constants.TurnPhase;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.Predicates;
|
||||||
import mage.filter.predicate.permanent.AttackingPredicate;
|
import mage.filter.predicate.permanent.AttackingPredicate;
|
||||||
import mage.filter.predicate.permanent.BlockingPredicate;
|
import mage.filter.predicate.permanent.BlockedPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.combat.CombatGroup;
|
import mage.game.combat.CombatGroup;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
@ -58,11 +58,11 @@ public class CurtainOfLight extends CardImpl {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new AttackingPredicate());
|
filter.add(new AttackingPredicate());
|
||||||
filter.add(Predicates.not(new BlockingPredicate()));
|
filter.add(Predicates.not(new BlockedPredicate()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CurtainOfLight(UUID ownerId, CardSetInfo setInfo) {
|
public CurtainOfLight(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}");
|
||||||
|
|
||||||
// Cast Curtain of Light only during combat after blockers are declared.
|
// Cast Curtain of Light only during combat after blockers are declared.
|
||||||
this.addAbility(new CastOnlyDuringPhaseStepSourceAbility(TurnPhase.COMBAT, AfterBlockersAreDeclaredCondition.instance));
|
this.addAbility(new CastOnlyDuringPhaseStepSourceAbility(TurnPhase.COMBAT, AfterBlockersAreDeclaredCondition.instance));
|
||||||
|
|
|
@ -42,7 +42,6 @@ import mage.constants.Duration;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.combat.CombatGroup;
|
|
||||||
import mage.game.events.DamagePlayerEvent;
|
import mage.game.events.DamagePlayerEvent;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
@ -95,17 +94,8 @@ class WeatheredBodyguardsEffect extends ReplacementEffectImpl {
|
||||||
DamagePlayerEvent damageEvent = (DamagePlayerEvent) event;
|
DamagePlayerEvent damageEvent = (DamagePlayerEvent) event;
|
||||||
Permanent damager = game.getPermanentOrLKIBattlefield(damageEvent.getSourceId());
|
Permanent damager = game.getPermanentOrLKIBattlefield(damageEvent.getSourceId());
|
||||||
Permanent p = game.getPermanent(source.getSourceId());
|
Permanent p = game.getPermanent(source.getSourceId());
|
||||||
boolean applyIt = false;
|
if (p != null && !p.isTapped() && damageEvent.isCombatDamage() && damager != null && damager.isAttacking() && !damager.isBlocked(game)) {
|
||||||
if (p != null && !p.isTapped() && damageEvent.isCombatDamage() && damager != null && damager.isAttacking()) {
|
p.damage(damageEvent.getAmount(), event.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable());
|
||||||
for (CombatGroup cg : game.getCombat().getGroups()) {
|
|
||||||
if (cg.getAttackers().contains(damager.getId()) && !cg.getBlocked()) {
|
|
||||||
applyIt = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (applyIt) {
|
|
||||||
p.damage(damageEvent.getAmount(), event.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable());
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -29,7 +29,6 @@ package mage.filter.predicate.permanent;
|
||||||
|
|
||||||
import mage.filter.predicate.Predicate;
|
import mage.filter.predicate.Predicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.combat.CombatGroup;
|
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,12 +39,7 @@ public class BlockedPredicate implements Predicate<Permanent> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Permanent input, Game game) {
|
public boolean apply(Permanent input, Game game) {
|
||||||
for (CombatGroup combatGroup : game.getCombat().getGroups()) {
|
return input.isBlocked(game);
|
||||||
if (!combatGroup.getBlockers().isEmpty() && combatGroup.getAttackers().contains(input.getId())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -193,6 +193,8 @@ public interface Permanent extends Card, Controllable {
|
||||||
|
|
||||||
boolean isAttacking();
|
boolean isAttacking();
|
||||||
|
|
||||||
|
boolean isBlocked(Game game);
|
||||||
|
|
||||||
int getBlocking();
|
int getBlocking();
|
||||||
|
|
||||||
void setAttacking(boolean attacking);
|
void setAttacking(boolean attacking);
|
||||||
|
|
|
@ -48,6 +48,7 @@ import mage.game.Game;
|
||||||
import mage.game.GameState;
|
import mage.game.GameState;
|
||||||
import mage.game.ZoneChangeInfo;
|
import mage.game.ZoneChangeInfo;
|
||||||
import mage.game.ZonesHandler;
|
import mage.game.ZonesHandler;
|
||||||
|
import mage.game.combat.CombatGroup;
|
||||||
import mage.game.command.CommandObject;
|
import mage.game.command.CommandObject;
|
||||||
import mage.game.events.*;
|
import mage.game.events.*;
|
||||||
import mage.game.events.GameEvent.EventType;
|
import mage.game.events.GameEvent.EventType;
|
||||||
|
@ -509,6 +510,16 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
||||||
return attacking;
|
return attacking;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBlocked(Game game) {
|
||||||
|
for (CombatGroup combatGroup : game.getCombat().getGroups()) {
|
||||||
|
if (combatGroup.getBlocked() && combatGroup.getAttackers().contains(this.getId())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBlocking() {
|
public int getBlocking() {
|
||||||
return blocking;
|
return blocking;
|
||||||
|
|
Loading…
Reference in a new issue