mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Moved methods and attributes concerning counters from Permanent to Card (to support e.g. suspend in the future).
This commit is contained in:
parent
658cbff736
commit
452794bf1e
4 changed files with 73 additions and 37 deletions
|
@ -37,6 +37,8 @@ import mage.MageObject;
|
|||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.counters.Counter;
|
||||
import mage.counters.Counters;
|
||||
import mage.game.Game;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
|
@ -113,6 +115,15 @@ public interface Card extends MageObject {
|
|||
* @return true if there exists various art images for this card
|
||||
*/
|
||||
boolean getUsesVariousArt();
|
||||
Counters getCounters();
|
||||
|
||||
void addCounters(String name, int amount, Game game);
|
||||
void addCounters(String name, int amount, Game game, ArrayList<UUID> appliedEffects);
|
||||
void addCounters(Counter counter, Game game);
|
||||
void addCounters(Counter counter, Game game, ArrayList<UUID> appliedEffects);
|
||||
|
||||
void removeCounters(String name, int amount, Game game);
|
||||
void removeCounters(Counter counter, Game game);
|
||||
|
||||
@Override
|
||||
Card copy();
|
||||
|
|
|
@ -39,7 +39,10 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.PlayLandAbility;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.mana.ManaAbility;
|
||||
import mage.counters.Counter;
|
||||
import mage.counters.Counters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.permanent.PermanentCard;
|
||||
import mage.game.stack.Spell;
|
||||
|
@ -66,6 +69,7 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
|
|||
protected int zoneChangeCounter = 1;
|
||||
protected Map<String, String> info;
|
||||
protected boolean usesVariousArt = false;
|
||||
protected Counters counters;
|
||||
|
||||
public CardImpl(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
|
||||
this(ownerId, name);
|
||||
|
@ -80,17 +84,20 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
|
|||
addAbility(new SpellAbility(manaCost, name));
|
||||
}
|
||||
this.usesVariousArt = Character.isDigit(this.getClass().getName().charAt(this.getClass().getName().length()-1));
|
||||
this.counters = new Counters();
|
||||
}
|
||||
|
||||
protected CardImpl(UUID ownerId, String name) {
|
||||
this.ownerId = ownerId;
|
||||
this.name = name;
|
||||
this.counters = new Counters();
|
||||
}
|
||||
|
||||
protected CardImpl(UUID id, UUID ownerId, String name) {
|
||||
super(id);
|
||||
this.ownerId = ownerId;
|
||||
this.name = name;
|
||||
this.counters = new Counters();
|
||||
}
|
||||
|
||||
public CardImpl(final CardImpl card) {
|
||||
|
@ -115,6 +122,7 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
|
|||
info.putAll(card.info);
|
||||
}
|
||||
usesVariousArt = card.usesVariousArt;
|
||||
this.counters = card.counters.copy();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -511,4 +519,54 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
|
|||
public boolean getUsesVariousArt() {
|
||||
return usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Counters getCounters() {
|
||||
return counters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(String name, int amount, Game game) {
|
||||
addCounters(name, amount, game, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(String name, int amount, Game game, ArrayList<UUID> appliedEffects) {
|
||||
GameEvent event = GameEvent.getEvent(GameEvent.EventType.ADD_COUNTER, objectId, ownerId, name, amount);
|
||||
event.setAppliedEffects(appliedEffects);
|
||||
if (!game.replaceEvent(event)) {
|
||||
counters.addCounter(name, amount);
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER_ADDED, objectId, ownerId, name, amount));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(Counter counter, Game game) {
|
||||
addCounters(counter, game, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(Counter counter, Game game, ArrayList<UUID> appliedEffects) {
|
||||
GameEvent event = GameEvent.getEvent(GameEvent.EventType.ADD_COUNTER, objectId, ownerId, counter.getName(), counter.getCount());
|
||||
event.setAppliedEffects(appliedEffects);
|
||||
if (!game.replaceEvent(event)) {
|
||||
counters.addCounter(counter);
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER_ADDED, objectId, ownerId, counter.getName(), counter.getCount()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCounters(String name, int amount, Game game) {
|
||||
counters.removeCounter(name, amount);
|
||||
GameEvent event = GameEvent.getEvent(GameEvent.EventType.COUNTER_REMOVED, objectId, ownerId);
|
||||
event.setData(name);
|
||||
for (int i = 0; i < amount; i++) {
|
||||
game.fireEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCounters(Counter counter, Game game) {
|
||||
removeCounters(counter.getName(), counter.getCount(), game);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,15 +102,7 @@ public interface Permanent extends Card, Controllable {
|
|||
int applyDamage(Game game);
|
||||
|
||||
void removeAllDamage(Game game);
|
||||
Counters getCounters();
|
||||
|
||||
void addCounters(String name, int amount, Game game);
|
||||
void addCounters(String name, int amount, Game game, ArrayList<UUID> appliedEffects);
|
||||
void addCounters(Counter counter, Game game);
|
||||
void addCounters(Counter counter, Game game, ArrayList<UUID> appliedEffects);
|
||||
|
||||
void removeCounters(String name, int amount, Game game);
|
||||
void removeCounters(Counter counter, Game game);
|
||||
void reset(Game game);
|
||||
boolean destroy(UUID sourceId, Game game, boolean noRegen);
|
||||
boolean sacrifice(UUID sourceId, Game game);
|
||||
|
|
|
@ -90,7 +90,6 @@ public abstract class PermanentImpl<T extends PermanentImpl<T>> extends CardImpl
|
|||
protected int minBlockedBy = 1;
|
||||
protected boolean loyaltyUsed;
|
||||
protected boolean deathtouched;
|
||||
protected Counters counters;
|
||||
protected List<UUID> attachments = new ArrayList<UUID>();
|
||||
protected Map<String, List<UUID>> connectedCards = new HashMap<String, List<UUID>>();
|
||||
protected List<UUID> dealtDamageByThisTurn;
|
||||
|
@ -104,14 +103,12 @@ public abstract class PermanentImpl<T extends PermanentImpl<T>> extends CardImpl
|
|||
super(ownerId, name);
|
||||
this.originalControllerId = controllerId;
|
||||
this.controllerId = controllerId;
|
||||
this.counters = new Counters();
|
||||
}
|
||||
|
||||
public PermanentImpl(UUID id, UUID ownerId, UUID controllerId, String name) {
|
||||
super(id, ownerId, name);
|
||||
this.originalControllerId = controllerId;
|
||||
this.controllerId = controllerId;
|
||||
this.counters = new Counters();
|
||||
}
|
||||
|
||||
public PermanentImpl(final PermanentImpl<T> permanent) {
|
||||
|
@ -130,7 +127,6 @@ public abstract class PermanentImpl<T extends PermanentImpl<T>> extends CardImpl
|
|||
this.maxBlocks = permanent.maxBlocks;
|
||||
this.loyaltyUsed = permanent.loyaltyUsed;
|
||||
this.deathtouched = permanent.deathtouched;
|
||||
this.counters = permanent.counters.copy();
|
||||
this.attachments.addAll(permanent.attachments);
|
||||
for (Map.Entry<String, List<UUID>> entry: permanent.connectedCards.entrySet()) {
|
||||
this.connectedCards.put(entry.getKey(), entry.getValue());
|
||||
|
@ -182,7 +178,7 @@ public abstract class PermanentImpl<T extends PermanentImpl<T>> extends CardImpl
|
|||
sb.append(controllerId).append(name).append(tapped).append(damage);
|
||||
sb.append(subtype).append(supertype).append(power.getValue()).append(toughness.getValue());
|
||||
sb.append(abilities.getValue());
|
||||
for (Counter counter : counters.values()) {
|
||||
for (Counter counter : getCounters().values()) {
|
||||
sb.append(counter.getName()).append(counter.getCount());
|
||||
}
|
||||
return sb.toString();
|
||||
|
@ -223,56 +219,35 @@ public abstract class PermanentImpl<T extends PermanentImpl<T>> extends CardImpl
|
|||
game.resetForSourceId(this.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Counters getCounters() {
|
||||
return counters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(String name, int amount, Game game) {
|
||||
addCounters(name, amount, game, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(String name, int amount, Game game, ArrayList<UUID> appliedEffects) {
|
||||
GameEvent event = GameEvent.getEvent(GameEvent.EventType.ADD_COUNTER, objectId, controllerId, name, amount);
|
||||
event.setAppliedEffects(appliedEffects);
|
||||
if (!game.replaceEvent(event)) {
|
||||
counters.addCounter(name, amount);
|
||||
game.fireEvent(GameEvent.getEvent(EventType.COUNTER_ADDED, objectId, controllerId, name, amount));
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER_ADDED, objectId, controllerId, name, amount));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(Counter counter, Game game) {
|
||||
addCounters(counter, game, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCounters(Counter counter, Game game, ArrayList<UUID> appliedEffects) {
|
||||
GameEvent event = GameEvent.getEvent(GameEvent.EventType.ADD_COUNTER, objectId, controllerId, counter.getName(), counter.getCount());
|
||||
event.setAppliedEffects(appliedEffects);
|
||||
if (!game.replaceEvent(event)) {
|
||||
counters.addCounter(counter);
|
||||
game.fireEvent(GameEvent.getEvent(EventType.COUNTER_ADDED, objectId, controllerId, counter.getName(), counter.getCount()));
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER_ADDED, objectId, controllerId, counter.getName(), counter.getCount()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCounters(String name, int amount, Game game) {
|
||||
counters.removeCounter(name, amount);
|
||||
GameEvent event = GameEvent.getEvent(EventType.COUNTER_REMOVED, objectId, controllerId);
|
||||
GameEvent event = GameEvent.getEvent(GameEvent.EventType.COUNTER_REMOVED, objectId, controllerId);
|
||||
event.setData(name);
|
||||
for (int i = 0; i < amount; i++) {
|
||||
game.fireEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCounters(Counter counter, Game game) {
|
||||
removeCounters(counter.getName(), counter.getCount(), game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTurnsOnBattlefield() {
|
||||
return turnsOnBattlefield;
|
||||
|
|
Loading…
Reference in a new issue