add ability to give triggers in AF_Animate

This commit is contained in:
jendave
2011-08-06 19:58:35 +00:00
parent 3b194a3063
commit f268dc9709
2 changed files with 35 additions and 7 deletions

View File

@@ -272,6 +272,10 @@ public class AbilityFactory_Animate {
ArrayList<String> abilities = new ArrayList<String>();
if(params.containsKey("Abilities")) abilities.addAll(Arrays.asList(params.get("Abilities").split(",")));
//triggers to add to the animated being
ArrayList<String> triggers = new ArrayList<String>();
if(params.containsKey("Triggers")) triggers.addAll(Arrays.asList(params.get("Triggers").split(",")));
Target tgt = af.getAbTgt();
ArrayList<Card> tgts;
if (tgt != null)
@@ -284,9 +288,12 @@ public class AbilityFactory_Animate {
final ArrayList<String> originalTypes = c.getType();
final long timestamp = doAnimate(c, power, toughness, types, finalDesc, keywords);
//give abilities
final ArrayList<SpellAbility> actualAbilities= new ArrayList<SpellAbility>();
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);
@@ -294,17 +301,28 @@ public class AbilityFactory_Animate {
}
}
final Command unactivate = new Command() {
//Grant triggers
final ArrayList<Trigger> actualTriggers = new ArrayList<Trigger>();
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 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<String> originalTypes, String colorDesc, ArrayList<String> originalKeywords, ArrayList<SpellAbility> actualAbilities, long timestamp) {
private static void doUnanimate(Card c, ArrayList<String> originalTypes, String colorDesc, ArrayList<String> originalKeywords, ArrayList<SpellAbility> actualAbilities, ArrayList<Trigger> actualTriggers, long timestamp) {
c.setBaseAttack(0);
c.setBaseDefense(0);
@@ -358,6 +376,11 @@ public class AbilityFactory_Animate {
c.removeSpellAbility(sa);
}
for(Trigger t : actualTriggers) {
AllZone.TriggerHandler.removeRegisteredTrigger(t);
c.removeTrigger(t);
}
//any other unanimate cleanup
c.unEquipAllCards();
}

View File

@@ -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<Trigger> getTriggers()