diff --git a/src/forge/AbilityFactory_Animate.java b/src/forge/AbilityFactory_Animate.java index bb9874ed41a..c54c26e64f0 100644 --- a/src/forge/AbilityFactory_Animate.java +++ b/src/forge/AbilityFactory_Animate.java @@ -271,6 +271,10 @@ public class AbilityFactory_Animate { //abilities to add to the animated being ArrayList abilities = new ArrayList(); if(params.containsKey("Abilities")) abilities.addAll(Arrays.asList(params.get("Abilities").split(","))); + + //triggers to add to the animated being + ArrayList triggers = new ArrayList(); + if(params.containsKey("Triggers")) triggers.addAll(Arrays.asList(params.get("Triggers").split(","))); Target tgt = af.getAbTgt(); ArrayList tgts; @@ -284,27 +288,41 @@ public class AbilityFactory_Animate { final ArrayList originalTypes = c.getType(); final long timestamp = doAnimate(c, power, toughness, types, finalDesc, keywords); + + //give abilities final ArrayList actualAbilities= new ArrayList(); if(abilities.size() > 0){ for(String s : abilities) { + System.out.println("Adding ab "+s+" to: "+c); String actualAbility = host.getSVar(s); SpellAbility grantedAbility = af.getAbility(actualAbility, c); actualAbilities.add(grantedAbility); c.addSpellAbility(grantedAbility); } } + + //Grant triggers + final ArrayList actualTriggers = new ArrayList(); + if(triggers.size() > 0) { + for(String s : triggers) { + String actualTrigger = host.getSVar(s); + Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, c); + actualTriggers.add(c.addTrigger(parsedTrigger)); + AllZone.TriggerHandler.registerTrigger(parsedTrigger); + } + } - final Command unactivate = new Command() { + final Command unanimate = new Command() { private static final long serialVersionUID = -5861759814760561373L; public void execute() { - doUnanimate(c, originalTypes, finalDesc, keywords, actualAbilities, timestamp); + doUnanimate(c, originalTypes, finalDesc, keywords, actualAbilities, actualTriggers, timestamp); } }; if(!permanent) { - if(params.containsKey("UntilEndOfCombat")) AllZone.EndOfCombat.addUntil(unactivate); - else AllZone.EndOfTurn.addUntil(unactivate); + if(params.containsKey("UntilEndOfCombat")) AllZone.EndOfCombat.addUntil(unanimate); + else AllZone.EndOfTurn.addUntil(unanimate); } } @@ -338,7 +356,7 @@ public class AbilityFactory_Animate { return timestamp; } - private static void doUnanimate(Card c, ArrayList originalTypes, String colorDesc, ArrayList originalKeywords, ArrayList actualAbilities, long timestamp) { + private static void doUnanimate(Card c, ArrayList originalTypes, String colorDesc, ArrayList originalKeywords, ArrayList actualAbilities, ArrayList actualTriggers, long timestamp) { c.setBaseAttack(0); c.setBaseDefense(0); @@ -357,6 +375,11 @@ public class AbilityFactory_Animate { for(SpellAbility sa : actualAbilities) { c.removeSpellAbility(sa); } + + for(Trigger t : actualTriggers) { + AllZone.TriggerHandler.removeRegisteredTrigger(t); + c.removeTrigger(t); + } //any other unanimate cleanup c.unEquipAllCards(); diff --git a/src/forge/Card.java b/src/forge/Card.java index f88f90c2600..a1a55df6988 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -195,11 +195,16 @@ public class Card extends MyObservable { rememberedCards.clear(); } - public void addTrigger(Trigger t) + public Trigger addTrigger(Trigger t) { Trigger newtrig = t.getCopy(); newtrig.setHostCard(this); triggers.add(newtrig); + return newtrig; + } + + public void removeTrigger(Trigger t) { + triggers.remove(t); } public ArrayList getTriggers() @@ -1014,7 +1019,7 @@ public class Card extends MyObservable { // Add Keywords ArrayList kw = getKeyword(); - // Triggered abilities + // Triggered abilities for(Trigger trig : triggers) { if(!trig.isSecondary())