forked from External/mage
dies triggers improves:
* tests: added additional tests and verify/runtime checks for wrong die trigger settings; * refactor: removed some usage of short LKI ; * fixed dies events support in "or trigger" and "conditional trigger" (use cases like sacrifice cost); * fixed dies events support in shared triggered abilities (use cases like sacrifice cost);
This commit is contained in:
parent
a2ed52b8de
commit
66b338c6fc
18 changed files with 233 additions and 63 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package mage.abilities.meta;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
|
|
@ -10,10 +11,7 @@ import mage.game.events.GameEvent;
|
|||
import mage.util.CardUtil;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
|
@ -46,6 +44,10 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl {
|
|||
for(Watcher watcher : ability.getWatchers()) {
|
||||
super.addWatcher(watcher);
|
||||
}
|
||||
|
||||
if (ability.isLeavesTheBattlefieldTrigger()) {
|
||||
this.setLeavesTheBattlefieldTrigger(true);
|
||||
}
|
||||
}
|
||||
setTriggerPhrase(generateTriggerPhrase());
|
||||
}
|
||||
|
|
@ -123,4 +125,19 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl {
|
|||
ability.addWatcher(watcher);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
|
||||
boolean res = false;
|
||||
for (TriggeredAbility ability : triggeredAbilities) {
|
||||
// TODO: call full inner trigger instead like ability.isInUseableZone()?! Need research why it fails
|
||||
if (ability.isLeavesTheBattlefieldTrigger()) {
|
||||
// TODO: leaves battlefield and die are not same! Is it possible make a diff logic?
|
||||
res |= TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
|
||||
} else {
|
||||
res |= super.isInUseableZone(game, source, event);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue