From dde5bd53b9ffdd8c0cfee53189f849e3f7c9b36f Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 20:29:33 +0000 Subject: [PATCH] *Triggers are now tracked by an integer ID so that the correct trigger object can be removed even after copying it, if need be. Fixes Raging Ravine. *Fixed LandPlayed triggers not copying any OverridingAbility info. (not that we used any hardcoded LandPlayed triggers but still) --- src/forge/GameAction.java | 1 + src/forge/card/trigger/Trigger.java | 25 ++++++++++++++++++- src/forge/card/trigger/TriggerHandler.java | 7 +++++- .../card/trigger/Trigger_AttackerBlocked.java | 1 + .../trigger/Trigger_AttackerUnblocked.java | 1 + src/forge/card/trigger/Trigger_Attacks.java | 1 + src/forge/card/trigger/Trigger_Blocks.java | 1 + .../card/trigger/Trigger_ChangesZone.java | 1 + .../card/trigger/Trigger_CounterAdded.java | 1 + src/forge/card/trigger/Trigger_Cycled.java | 1 + .../card/trigger/Trigger_DamageDone.java | 1 + src/forge/card/trigger/Trigger_Discarded.java | 1 + src/forge/card/trigger/Trigger_Drawn.java | 1 + .../card/trigger/Trigger_LandPlayed.java | 10 +++++++- .../card/trigger/Trigger_LifeGained.java | 1 + src/forge/card/trigger/Trigger_LifeLost.java | 1 + src/forge/card/trigger/Trigger_Phase.java | 1 + .../card/trigger/Trigger_Sacrificed.java | 1 + src/forge/card/trigger/Trigger_Shuffled.java | 1 + .../trigger/Trigger_SpellAbilityCast.java | 1 + src/forge/card/trigger/Trigger_Taps.java | 1 + .../card/trigger/Trigger_TurnFaceUp.java | 1 + src/forge/card/trigger/Trigger_Unequip.java | 1 + src/forge/card/trigger/Trigger_Untaps.java | 1 + 24 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index dd88e7c263e..e0b7889a421 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -2286,6 +2286,7 @@ public class GameAction { AllZone.ComputerPlayer.clearHandSizeOperations(); AllZone.TriggerHandler.clearRegistered(); + forge.card.trigger.Trigger.resetIDs(); {//re-number cards just so their unique numbers are low, just for user friendliness diff --git a/src/forge/card/trigger/Trigger.java b/src/forge/card/trigger/Trigger.java index d4ed640711f..44927bbe256 100644 --- a/src/forge/card/trigger/Trigger.java +++ b/src/forge/card/trigger/Trigger.java @@ -12,6 +12,15 @@ import forge.card.cardFactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; public abstract class Trigger { + + private static int nextID = 0; + + public static void resetIDs() + { + nextID = 0; + } + + protected int ID = nextID++; protected String name; public String getName() @@ -22,7 +31,12 @@ public abstract class Trigger { { name = n; } - + + public void setID(int id) + { + ID = id; + } + protected HashMap mapParams = new HashMap(); public HashMap getMapParams() { @@ -275,6 +289,15 @@ public abstract class Trigger { } return false; } + + @Override + public boolean equals(Object o) + { + if(!(o instanceof Trigger)) + return false; + + return this.ID == ((Trigger)o).ID; + } public abstract boolean performTest(HashMap runParams); diff --git a/src/forge/card/trigger/TriggerHandler.java b/src/forge/card/trigger/TriggerHandler.java index 1766c182b43..ed32b7fdcbd 100644 --- a/src/forge/card/trigger/TriggerHandler.java +++ b/src/forge/card/trigger/TriggerHandler.java @@ -193,7 +193,12 @@ public class TriggerHandler { public void removeRegisteredTrigger(Trigger trig) { - registeredTriggers.remove(trig); + + for(int i=0;i< registeredTriggers.size();i++) + { + if(registeredTriggers.get(i).equals(trig)) + registeredTriggers.remove(i); + } } public ArrayList getRegisteredTriggers() { diff --git a/src/forge/card/trigger/Trigger_AttackerBlocked.java b/src/forge/card/trigger/Trigger_AttackerBlocked.java index 781ca2c9542..011dc0114be 100644 --- a/src/forge/card/trigger/Trigger_AttackerBlocked.java +++ b/src/forge/card/trigger/Trigger_AttackerBlocked.java @@ -38,6 +38,7 @@ public class Trigger_AttackerBlocked extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_AttackerUnblocked.java b/src/forge/card/trigger/Trigger_AttackerUnblocked.java index 2c0c0e3923c..bfa56566f08 100644 --- a/src/forge/card/trigger/Trigger_AttackerUnblocked.java +++ b/src/forge/card/trigger/Trigger_AttackerUnblocked.java @@ -31,6 +31,7 @@ public class Trigger_AttackerUnblocked extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Attacks.java b/src/forge/card/trigger/Trigger_Attacks.java index ae0d9f9ca07..b8b66dbe52f 100644 --- a/src/forge/card/trigger/Trigger_Attacks.java +++ b/src/forge/card/trigger/Trigger_Attacks.java @@ -56,6 +56,7 @@ public class Trigger_Attacks extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Blocks.java b/src/forge/card/trigger/Trigger_Blocks.java index c18848f2e73..eff660717f3 100644 --- a/src/forge/card/trigger/Trigger_Blocks.java +++ b/src/forge/card/trigger/Trigger_Blocks.java @@ -39,6 +39,7 @@ public class Trigger_Blocks extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_ChangesZone.java b/src/forge/card/trigger/Trigger_ChangesZone.java index 970b9953eec..985bb12b3bc 100644 --- a/src/forge/card/trigger/Trigger_ChangesZone.java +++ b/src/forge/card/trigger/Trigger_ChangesZone.java @@ -55,6 +55,7 @@ public class Trigger_ChangesZone extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_CounterAdded.java b/src/forge/card/trigger/Trigger_CounterAdded.java index a5268c8c970..8277d727dd2 100644 --- a/src/forge/card/trigger/Trigger_CounterAdded.java +++ b/src/forge/card/trigger/Trigger_CounterAdded.java @@ -39,6 +39,7 @@ public class Trigger_CounterAdded extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Cycled.java b/src/forge/card/trigger/Trigger_Cycled.java index 3bb8f7a1179..d88cdadacdf 100644 --- a/src/forge/card/trigger/Trigger_Cycled.java +++ b/src/forge/card/trigger/Trigger_Cycled.java @@ -18,6 +18,7 @@ public class Trigger_Cycled extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_DamageDone.java b/src/forge/card/trigger/Trigger_DamageDone.java index 625e468da18..6d201274659 100644 --- a/src/forge/card/trigger/Trigger_DamageDone.java +++ b/src/forge/card/trigger/Trigger_DamageDone.java @@ -57,6 +57,7 @@ public class Trigger_DamageDone extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Discarded.java b/src/forge/card/trigger/Trigger_Discarded.java index 646611c14fb..6f9934a9cbf 100644 --- a/src/forge/card/trigger/Trigger_Discarded.java +++ b/src/forge/card/trigger/Trigger_Discarded.java @@ -50,6 +50,7 @@ public class Trigger_Discarded extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Drawn.java b/src/forge/card/trigger/Trigger_Drawn.java index c6ebfbd55b0..adb2077c6e6 100644 --- a/src/forge/card/trigger/Trigger_Drawn.java +++ b/src/forge/card/trigger/Trigger_Drawn.java @@ -32,6 +32,7 @@ public class Trigger_Drawn extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_LandPlayed.java b/src/forge/card/trigger/Trigger_LandPlayed.java index a86370dda70..233ded633a9 100644 --- a/src/forge/card/trigger/Trigger_LandPlayed.java +++ b/src/forge/card/trigger/Trigger_LandPlayed.java @@ -16,7 +16,15 @@ public class Trigger_LandPlayed extends Trigger { @Override public Trigger getCopy() { - return new Trigger_LandPlayed(this.name, this.mapParams, this.hostCard); + Trigger copy = new Trigger_LandPlayed(name,mapParams,hostCard); + copy.setID(ID); + + if(this.overridingAbility != null) + { + copy.setOverridingAbility(overridingAbility); + } + + return copy; } @Override diff --git a/src/forge/card/trigger/Trigger_LifeGained.java b/src/forge/card/trigger/Trigger_LifeGained.java index ed02b70b669..5af82ada0a7 100644 --- a/src/forge/card/trigger/Trigger_LifeGained.java +++ b/src/forge/card/trigger/Trigger_LifeGained.java @@ -32,6 +32,7 @@ public class Trigger_LifeGained extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_LifeLost.java b/src/forge/card/trigger/Trigger_LifeLost.java index 9138986b9ce..3e078a5241f 100644 --- a/src/forge/card/trigger/Trigger_LifeLost.java +++ b/src/forge/card/trigger/Trigger_LifeLost.java @@ -32,6 +32,7 @@ public class Trigger_LifeLost extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Phase.java b/src/forge/card/trigger/Trigger_Phase.java index edb02bd2d36..1666909184e 100644 --- a/src/forge/card/trigger/Trigger_Phase.java +++ b/src/forge/card/trigger/Trigger_Phase.java @@ -37,6 +37,7 @@ public class Trigger_Phase extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Sacrificed.java b/src/forge/card/trigger/Trigger_Sacrificed.java index cd8436715f6..17ec3add46c 100644 --- a/src/forge/card/trigger/Trigger_Sacrificed.java +++ b/src/forge/card/trigger/Trigger_Sacrificed.java @@ -38,6 +38,7 @@ public class Trigger_Sacrificed extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Shuffled.java b/src/forge/card/trigger/Trigger_Shuffled.java index 9b40b47aa74..f42ced3c308 100644 --- a/src/forge/card/trigger/Trigger_Shuffled.java +++ b/src/forge/card/trigger/Trigger_Shuffled.java @@ -32,6 +32,7 @@ public class Trigger_Shuffled extends Trigger{ copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_SpellAbilityCast.java b/src/forge/card/trigger/Trigger_SpellAbilityCast.java index 1d7dc466ab3..f7b6ba264d6 100644 --- a/src/forge/card/trigger/Trigger_SpellAbilityCast.java +++ b/src/forge/card/trigger/Trigger_SpellAbilityCast.java @@ -153,6 +153,7 @@ public class Trigger_SpellAbilityCast extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Taps.java b/src/forge/card/trigger/Trigger_Taps.java index d6f4bdeb226..b35e568b8c1 100644 --- a/src/forge/card/trigger/Trigger_Taps.java +++ b/src/forge/card/trigger/Trigger_Taps.java @@ -34,6 +34,7 @@ public class Trigger_Taps extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_TurnFaceUp.java b/src/forge/card/trigger/Trigger_TurnFaceUp.java index 299be657e01..6d965cef6ec 100644 --- a/src/forge/card/trigger/Trigger_TurnFaceUp.java +++ b/src/forge/card/trigger/Trigger_TurnFaceUp.java @@ -31,6 +31,7 @@ public class Trigger_TurnFaceUp extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Unequip.java b/src/forge/card/trigger/Trigger_Unequip.java index 22c686d9a6a..48ece406e07 100644 --- a/src/forge/card/trigger/Trigger_Unequip.java +++ b/src/forge/card/trigger/Trigger_Unequip.java @@ -37,6 +37,7 @@ public class Trigger_Unequip extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; } diff --git a/src/forge/card/trigger/Trigger_Untaps.java b/src/forge/card/trigger/Trigger_Untaps.java index aedf45ad995..6378eeaa115 100644 --- a/src/forge/card/trigger/Trigger_Untaps.java +++ b/src/forge/card/trigger/Trigger_Untaps.java @@ -34,6 +34,7 @@ public class Trigger_Untaps extends Trigger { copy.setOverridingAbility(overridingAbility); } copy.setName(name); + copy.setID(ID); return copy; }