forked from External/mage
refactor: fixed dies events support in single cards (part 3);
This commit is contained in:
parent
c3343110f3
commit
dc9f349828
14 changed files with 84 additions and 2 deletions
|
|
@ -1255,13 +1255,13 @@ public abstract class AbilityImpl implements Ability {
|
|||
}
|
||||
|
||||
return allEvents.stream().anyMatch(e -> {
|
||||
// TODO: add more events with zone change logic (or make it even't param)?
|
||||
// TODO: add more events with zone change logic (or make it event's param)?
|
||||
switch (e.getType()) {
|
||||
case DESTROYED_PERMANENT:
|
||||
case EXPLOITED_CREATURE:
|
||||
return true;
|
||||
case ZONE_CHANGE:
|
||||
return ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD;
|
||||
return ((ZoneChangeEvent) e).getFromZone() == Zone.BATTLEFIELD;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
|
|
@ -32,6 +33,7 @@ public class DealtDamageAttachedAndDiedTriggeredAbility extends TriggeredAbility
|
|||
setTriggerPhrase(getWhen() + CardUtil.addArticle(filter.getMessage()) + " dealt damage by "
|
||||
+ CardUtil.getTextWithFirstCharLowerCase(attachmentType.verb()) +
|
||||
" creature this turn dies, ");
|
||||
setLeavesTheBattlefieldTrigger(true);
|
||||
}
|
||||
|
||||
protected DealtDamageAttachedAndDiedTriggeredAbility(final DealtDamageAttachedAndDiedTriggeredAbility ability) {
|
||||
|
|
@ -75,4 +77,9 @@ public class DealtDamageAttachedAndDiedTriggeredAbility extends TriggeredAbility
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
|
||||
return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.cards.Card;
|
||||
|
|
@ -48,6 +49,7 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl {
|
|||
this.setTargetPointer = setTargetPointer;
|
||||
this.rememberSource = rememberSource;
|
||||
setTriggerPhrase(generateTriggerPhrase());
|
||||
setLeavesTheBattlefieldTrigger(true);
|
||||
}
|
||||
|
||||
protected DiesAttachedTriggeredAbility(final DiesAttachedTriggeredAbility ability) {
|
||||
|
|
@ -157,4 +159,9 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl {
|
|||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
|
||||
return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
|
||||
package mage.abilities.common.delayed;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.Modes;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.Effects;
|
||||
import mage.constants.Duration;
|
||||
|
|
@ -103,4 +105,14 @@ public class UntilYourNextTurnDelayedTriggeredAbility extends DelayedTriggeredAb
|
|||
public int getSourceObjectZoneChangeCounter() {
|
||||
return ability.getSourceObjectZoneChangeCounter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
|
||||
if (isLeavesTheBattlefieldTrigger()) {
|
||||
// TODO: leaves battlefield and die are not same! Is it possible make a diff logic?
|
||||
return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
|
||||
} else {
|
||||
return super.isInUseableZone(game, source, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package mage.abilities.decorator;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Modes;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
|
|
@ -41,6 +42,9 @@ public class ConditionalTriggeredAbility extends TriggeredAbilityImpl {
|
|||
this.ability = ability;
|
||||
this.condition = condition;
|
||||
this.abilityText = text;
|
||||
if (ability.isLeavesTheBattlefieldTrigger()) {
|
||||
this.setLeavesTheBattlefieldTrigger(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected ConditionalTriggeredAbility(final ConditionalTriggeredAbility triggered) {
|
||||
|
|
@ -118,4 +122,13 @@ public class ConditionalTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
|
||||
if (isLeavesTheBattlefieldTrigger()) {
|
||||
// TODO: leaves battlefield and die are not same! Is it possible make a diff logic?
|
||||
return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
|
||||
} else {
|
||||
return super.isInUseableZone(game, source, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue