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

@@ -271,6 +271,10 @@ public class AbilityFactory_Animate {
//abilities to add to the animated being //abilities to add to the animated being
ArrayList<String> abilities = new ArrayList<String>(); ArrayList<String> abilities = new ArrayList<String>();
if(params.containsKey("Abilities")) abilities.addAll(Arrays.asList(params.get("Abilities").split(","))); 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(); Target tgt = af.getAbTgt();
ArrayList<Card> tgts; ArrayList<Card> tgts;
@@ -284,27 +288,41 @@ public class AbilityFactory_Animate {
final ArrayList<String> originalTypes = c.getType(); final ArrayList<String> originalTypes = c.getType();
final long timestamp = doAnimate(c, power, toughness, types, finalDesc, keywords); final long timestamp = doAnimate(c, power, toughness, types, finalDesc, keywords);
//give abilities
final ArrayList<SpellAbility> actualAbilities= new ArrayList<SpellAbility>(); final ArrayList<SpellAbility> actualAbilities= new ArrayList<SpellAbility>();
if(abilities.size() > 0){ if(abilities.size() > 0){
for(String s : abilities) { for(String s : abilities) {
System.out.println("Adding ab "+s+" to: "+c);
String actualAbility = host.getSVar(s); String actualAbility = host.getSVar(s);
SpellAbility grantedAbility = af.getAbility(actualAbility, c); SpellAbility grantedAbility = af.getAbility(actualAbility, c);
actualAbilities.add(grantedAbility); actualAbilities.add(grantedAbility);
c.addSpellAbility(grantedAbility); c.addSpellAbility(grantedAbility);
} }
} }
//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 unactivate = new Command() { final Command unanimate = new Command() {
private static final long serialVersionUID = -5861759814760561373L; private static final long serialVersionUID = -5861759814760561373L;
public void execute() { public void execute() {
doUnanimate(c, originalTypes, finalDesc, keywords, actualAbilities, timestamp); doUnanimate(c, originalTypes, finalDesc, keywords, actualAbilities, actualTriggers, timestamp);
} }
}; };
if(!permanent) { if(!permanent) {
if(params.containsKey("UntilEndOfCombat")) AllZone.EndOfCombat.addUntil(unactivate); if(params.containsKey("UntilEndOfCombat")) AllZone.EndOfCombat.addUntil(unanimate);
else AllZone.EndOfTurn.addUntil(unactivate); else AllZone.EndOfTurn.addUntil(unanimate);
} }
} }
@@ -338,7 +356,7 @@ public class AbilityFactory_Animate {
return timestamp; 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.setBaseAttack(0);
c.setBaseDefense(0); c.setBaseDefense(0);
@@ -357,6 +375,11 @@ public class AbilityFactory_Animate {
for(SpellAbility sa : actualAbilities) { for(SpellAbility sa : actualAbilities) {
c.removeSpellAbility(sa); c.removeSpellAbility(sa);
} }
for(Trigger t : actualTriggers) {
AllZone.TriggerHandler.removeRegisteredTrigger(t);
c.removeTrigger(t);
}
//any other unanimate cleanup //any other unanimate cleanup
c.unEquipAllCards(); c.unEquipAllCards();

View File

@@ -195,11 +195,16 @@ public class Card extends MyObservable {
rememberedCards.clear(); rememberedCards.clear();
} }
public void addTrigger(Trigger t) public Trigger addTrigger(Trigger t)
{ {
Trigger newtrig = t.getCopy(); Trigger newtrig = t.getCopy();
newtrig.setHostCard(this); newtrig.setHostCard(this);
triggers.add(newtrig); triggers.add(newtrig);
return newtrig;
}
public void removeTrigger(Trigger t) {
triggers.remove(t);
} }
public ArrayList<Trigger> getTriggers() public ArrayList<Trigger> getTriggers()
@@ -1014,7 +1019,7 @@ public class Card extends MyObservable {
// Add Keywords // Add Keywords
ArrayList<String> kw = getKeyword(); ArrayList<String> kw = getKeyword();
// Triggered abilities // Triggered abilities
for(Trigger trig : triggers) for(Trigger trig : triggers)
{ {
if(!trig.isSecondary()) if(!trig.isSecondary())