refactor: fixed dies events support in single cards (part 4);

This commit is contained in:
Oleg Agafonov 2024-11-09 19:10:00 +04:00
parent dc9f349828
commit 0689c56597
19 changed files with 159 additions and 37 deletions

View file

@ -1256,6 +1256,9 @@ public abstract class AbilityImpl implements Ability {
return allEvents.stream().anyMatch(e -> {
// TODO: add more events with zone change logic (or make it event's param)?
// need research: is it ability's or event's task?
// - ability's task: code like ability.setLookBackInTime
// - event's task: code like current switch
switch (e.getType()) {
case DESTROYED_PERMANENT:
case EXPLOITED_CREATURE:

View file

@ -1,5 +1,6 @@
package mage.abilities.common;
import mage.MageObject;
import mage.MageObjectReference;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
@ -35,6 +36,7 @@ public class DealtDamageAndDiedTriggeredAbility extends TriggeredAbilityImpl {
this.filter = filter;
this.setTargetPointer = setTargetPointer;
setTriggerPhrase(getWhen() + CardUtil.addArticle(filter.getMessage()) + " dealt damage by {this} this turn dies, ");
setLeavesTheBattlefieldTrigger(true);
}
protected DealtDamageAndDiedTriggeredAbility(final DealtDamageAndDiedTriggeredAbility ability) {
@ -55,6 +57,9 @@ public class DealtDamageAndDiedTriggeredAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
// If Axelrod Gunnarson and a creature it dealt damage to are both put into a graveyard at the same time,
// Axelrod Gunnarsons second ability will trigger.
// (2009-10-01)
if (((ZoneChangeEvent) event).isDiesEvent()) {
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
if (filter.match(zEvent.getTarget(), game)) {
@ -78,4 +83,9 @@ public class DealtDamageAndDiedTriggeredAbility extends TriggeredAbilityImpl {
}
return false;
}
@Override
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
}
}