From c22f0cf503208dee30ba2ea9859550ad46469692 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Tue, 12 Jun 2012 16:27:28 +0400 Subject: [PATCH] Reworked emblems --- .../base/impl/CardTestPlayerAPIImpl.java | 18 ++++++++++++++++++ .../effects/common/GetEmblemEffect.java | 8 +------- Mage/src/mage/game/Game.java | 2 ++ Mage/src/mage/game/GameImpl.java | 11 +++++++++++ Mage/src/mage/game/GameState.java | 10 +++++++++- Mage/src/mage/game/command/Command.java | 12 ++++++------ Mage/src/mage/game/command/CommandObject.java | 4 +++- Mage/src/mage/game/command/Emblem.java | 7 ++++++- 8 files changed, 56 insertions(+), 16 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index be65f582705..3e7fa791c5c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -8,6 +8,7 @@ import mage.cards.Card; import mage.counters.CounterType; import mage.filter.Filter; import mage.game.ExileZone; +import mage.game.command.CommandObject; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentCard; import mage.players.Player; @@ -388,6 +389,23 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement Assert.assertEquals("(Battlefield) Card counts are not equal (" + cardName + ")", count, actualCount); } + /** + * Assert emblem count under player's control + * + * @param player + * @param count + * @throws AssertionError + */ + public void assertEmblemCount(Player player, int count) throws AssertionError { + int actualCount = 0; + for (CommandObject commandObject : currentGame.getState().getCommand()) { + if (commandObject.getControllerId().equals(player.getId())) { + actualCount++; + } + } + Assert.assertEquals("Emblem counts are not equal", count, actualCount); + } + /** * Assert counter count on a permanent * diff --git a/Mage/src/mage/abilities/effects/common/GetEmblemEffect.java b/Mage/src/mage/abilities/effects/common/GetEmblemEffect.java index 3b731ce2e88..4f659a3ac4f 100644 --- a/Mage/src/mage/abilities/effects/common/GetEmblemEffect.java +++ b/Mage/src/mage/abilities/effects/common/GetEmblemEffect.java @@ -60,13 +60,7 @@ public class GetEmblemEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Emblem newEmblem = this.emblem.copy(); - newEmblem.setSourceId(source.getSourceId()); - newEmblem.setControllerId(source.getControllerId()); - game.getState().getCommand().add(newEmblem); - for (Ability ability: newEmblem.getAbilities()) { - ability.resolve(game); - } + game.addEmblem(emblem, source); return true; } diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 704f6c43b3e..0ea8a267482 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -45,6 +45,7 @@ import mage.cards.Cards; import mage.cards.decks.Deck; import mage.choices.Choice; import mage.game.combat.Combat; +import mage.game.command.Emblem; import mage.game.events.GameEvent; import mage.game.events.Listener; import mage.game.events.PlayerQueryEvent; @@ -162,6 +163,7 @@ public interface Game extends MageItem, Serializable { public void concede(UUID playerId); public void emptyManaPools(); public void addEffect(ContinuousEffect continuousEffect, Ability source); + public void addEmblem(Emblem emblem, Ability source); /** * This version supports copying of copies of any depth. diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index c433c96c984..cfddf3bfcf2 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -53,6 +53,7 @@ import mage.filter.Filter; import mage.filter.Filter.ComparisonScope; import mage.filter.common.*; import mage.game.combat.Combat; +import mage.game.command.Emblem; import mage.game.events.*; import mage.game.events.TableEvent.EventType; import mage.game.permanent.Battlefield; @@ -740,6 +741,16 @@ public abstract class GameImpl> implements Game, Serializa state.addEffect(newEffect, newAbility); } + @Override + public void addEmblem(Emblem emblem, Ability source) { + Emblem newEmblem = emblem.copy(); + newEmblem.setSourceId(source.getSourceId()); + newEmblem.setControllerId(source.getControllerId()); + newEmblem.assignNewId(); + newEmblem.getAbilities().newId(); + state.addEmblem(newEmblem); + } + @Override public void copyPermanent(Permanent copyFromPermanent, Permanent copyToPermanent, Ability source, ApplyToPermanent applier) { Permanent permanent = copyFromPermanent.copy(); diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 00a7e48e031..e97c36f1cc9 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -38,6 +38,7 @@ import mage.choices.Choice; import mage.game.combat.Combat; import mage.game.combat.CombatGroup; import mage.game.command.Command; +import mage.game.command.Emblem; import mage.game.events.GameEvent; import mage.game.permanent.Battlefield; import mage.game.permanent.Permanent; @@ -448,10 +449,17 @@ public class GameState implements Serializable, Copyable { } } else if (ability instanceof TriggeredAbility) { - triggers.add((TriggeredAbility)ability); + addTriggeredAbility((TriggeredAbility)ability); } } + public void addEmblem(Emblem emblem) { + getCommand().add(emblem); + for (Ability ability: emblem.getAbilities()) { + addAbility(ability); + } + } + public void addTriggeredAbility(TriggeredAbility ability) { this.triggered.add(ability); } diff --git a/Mage/src/mage/game/command/Command.java b/Mage/src/mage/game/command/Command.java index 5496c52b957..48be8f02861 100644 --- a/Mage/src/mage/game/command/Command.java +++ b/Mage/src/mage/game/command/Command.java @@ -39,14 +39,14 @@ public class Command extends ArrayList { public Command () {} public Command(final Command command) { - // + addAll(command); } -// public void checkTriggers(GameEvent event, Game game) { -// for (CommandObject commandObject: this) { -// commandObject.checkTriggers(event, game); -// } -// } + /*public void checkTriggers(GameEvent event, Game game) { + for (CommandObject commandObject: this) { + commandObject.checkTriggers(event, game); + } + }*/ public Command copy() { return new Command(this); diff --git a/Mage/src/mage/game/command/CommandObject.java b/Mage/src/mage/game/command/CommandObject.java index ae9674b908b..9464dfe5710 100644 --- a/Mage/src/mage/game/command/CommandObject.java +++ b/Mage/src/mage/game/command/CommandObject.java @@ -28,9 +28,10 @@ package mage.game.command; -import java.util.UUID; import mage.MageObject; +import java.util.UUID; + /** * * @author Viserion, nantuko @@ -39,6 +40,7 @@ public interface CommandObject extends MageObject { public UUID getSourceId(); public UUID getControllerId(); + public void assignNewId(); // public void checkTriggers(GameEvent event, Game game); @Override diff --git a/Mage/src/mage/game/command/Emblem.java b/Mage/src/mage/game/command/Emblem.java index a8cde633cd2..0831d392b60 100644 --- a/Mage/src/mage/game/command/Emblem.java +++ b/Mage/src/mage/game/command/Emblem.java @@ -68,6 +68,11 @@ public class Emblem implements CommandObject { this.abilites = emblem.abilites.copy(); } + @Override + public void assignNewId() { + this.id = UUID.randomUUID(); + } + @Override public UUID getSourceId() { return this.sourceId; @@ -78,7 +83,7 @@ public class Emblem implements CommandObject { return this.controllerId; } - public void setControllerId(UUID controllerId) { + public void setControllerId(UUID controllerId) { this.controllerId = controllerId; this.abilites.setControllerId(controllerId); }