From da45bf8f8cdf06083684f7fed1531f6f765090b5 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Sun, 2 Oct 2011 21:23:40 -0400 Subject: [PATCH] allow abilities to be added to cards in other zones --- .../continious/GainAbilityTargetEffect.java | 2 +- Mage/src/mage/game/GameState.java | 30 +++++++++++++++++++ Mage/src/mage/players/PlayerImpl.java | 6 ++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java index 9ab1f65ad7d..410ae680c3c 100644 --- a/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java @@ -45,7 +45,7 @@ import mage.target.Target; * * @author BetaSteward_at_googlemail.com */ -public class GainAbilityTargetEffect extends ContinuousEffectImpl { +public class GainAbilityTargetEffect extends ContinuousEffectImpl { protected Ability ability; diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 4f71f40f2c9..3bfefbc6727 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -33,10 +33,14 @@ import mage.game.events.GameEvent; import mage.game.stack.SpellStack; import java.io.Serializable; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; import mage.Constants.Zone; +import mage.abilities.Abilities; +import mage.abilities.AbilitiesImpl; import mage.abilities.Ability; +import mage.abilities.ActivatedAbility; import mage.abilities.DelayedTriggeredAbilities; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.SpecialActions; @@ -89,6 +93,7 @@ public class GameState implements Serializable, Copyable { private TriggeredAbilities triggers; private DelayedTriggeredAbilities delayed; private SpecialActions specialActions; + private Map> otherAbilities = new HashMap>(); private Combat combat; private TurnMods turnMods; private Watchers watchers; @@ -144,6 +149,9 @@ public class GameState implements Serializable, Copyable { for (Map.Entry entry: state.zones.entrySet()) { zones.put(entry.getKey(), entry.getValue()); } + for (Map.Entry> entry: state.otherAbilities.entrySet()) { + otherAbilities.put(entry.getKey(), entry.getValue().copy()); + } } @Override @@ -274,6 +282,7 @@ public class GameState implements Serializable, Copyable { player.reset(); } battlefield.reset(game); + resetOtherAbilities(); effects.apply(game); battlefield.fireControlChangeEvents(game); } @@ -409,6 +418,26 @@ public class GameState implements Serializable, Copyable { values.put(valueId, value); } + public Abilities getOtherAbilities(UUID objectId, Zone zone) { + if (otherAbilities.containsKey(objectId)) { + return otherAbilities.get(objectId).getActivatedAbilities(zone); + } + return null; + } + + public void addOtherAbility(UUID objectId, ActivatedAbility ability) { + if (!otherAbilities.containsKey(objectId)) { + otherAbilities.put(objectId, new AbilitiesImpl()); + } + otherAbilities.get(objectId).add(ability); + } + + private void resetOtherAbilities() { + for (Abilities abilities: otherAbilities.values()) { + abilities.clear(); + } + } + public void clear() { battlefield.clear(); effects.clear(); @@ -422,6 +451,7 @@ public class GameState implements Serializable, Copyable { turnNum = 0; gameOver = false; specialActions.clear(); + otherAbilities.clear(); combat.clear(); turnMods.clear(); watchers.clear(); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 0c019b8dcca..c5a0d3dec72 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -689,6 +689,12 @@ public abstract class PlayerImpl> implements Player, Ser } } } + Abilities otherAbilities = game.getState().getOtherAbilities(object.getId(), zone); + if (otherAbilities != null) { + for (ActivatedAbility ability: otherAbilities) { + useable.put(ability.getId(), ability); + } + } return useable; }