Added Needle Drop.

This commit is contained in:
Quercitron 2016-02-07 16:51:33 +03:00
parent 0b8d6594e0
commit 741c20afd8
4 changed files with 220 additions and 7 deletions

View file

@ -25,7 +25,7 @@ public class SourceDealtDamageCondition implements Condition {
@Override
public boolean apply(Game game, Ability source) {
DamageDoneWatcher watcher = (DamageDoneWatcher) game.getState().getWatchers().get("DamageDone");
return watcher != null && watcher.damageDone(source.getSourceId(), source.getSourceObjectZoneChangeCounter(), game) >= value;
return watcher != null && watcher.damageDoneBy(source.getSourceId(), source.getSourceObjectZoneChangeCounter(), game) >= value;
}
@Override

View file

@ -21,15 +21,21 @@ import mage.watchers.Watcher;
public class DamageDoneWatcher extends Watcher {
// which object did how much damage during the turn
public Map<MageObjectReference, Integer> damagingObjects = new HashMap<>();
public final Map<MageObjectReference, Integer> damagingObjects;
// which object received how much damage during the turn
public final Map<MageObjectReference, Integer> damagedObjects;
public DamageDoneWatcher() {
super("DamageDone", WatcherScope.GAME);
this.damagingObjects = new HashMap<>();
this.damagedObjects = new HashMap<>();
}
public DamageDoneWatcher(final DamageDoneWatcher watcher) {
super(watcher);
this.damagingObjects.putAll(damagingObjects);
this.damagingObjects = new HashMap<>(watcher.damagingObjects);
this.damagedObjects = new HashMap<>(watcher.damagedObjects);
}
@Override
@ -43,9 +49,13 @@ public class DamageDoneWatcher extends Watcher {
case DAMAGED_CREATURE:
case DAMAGED_PLANESWALKER:
case DAMAGED_PLAYER: {
MageObjectReference mor = new MageObjectReference(event.getSourceId(), game);
int count = damagingObjects.containsKey(mor) ? damagingObjects.get(mor) : 0;
damagingObjects.put(mor, count + event.getAmount());
MageObjectReference damageSourceRef = new MageObjectReference(event.getSourceId(), game);
int damageDone = damagingObjects.containsKey(damageSourceRef) ? damagingObjects.get(damageSourceRef) : 0;
damagingObjects.put(damageSourceRef, damageDone + event.getAmount());
MageObjectReference damageTargetRef = new MageObjectReference(event.getTargetId(), game);
int damageReceived = damagedObjects.containsKey(damageTargetRef) ? damagedObjects.get(damageTargetRef) : 0;
damagedObjects.put(damageTargetRef, damageReceived + event.getAmount());
}
}
}
@ -54,11 +64,22 @@ public class DamageDoneWatcher extends Watcher {
public void reset() {
super.reset();
damagingObjects.clear();
damagedObjects.clear();
}
public int damageDone(UUID objectId, int zoneChangeCounter, Game game) {
public int damageDoneBy(UUID objectId, int zoneChangeCounter, Game game) {
MageObjectReference mor = new MageObjectReference(objectId, zoneChangeCounter, game);
return damagingObjects.containsKey(mor) ? damagingObjects.get(mor) : 0;
}
public int damageDoneTo(UUID objectId, int zoneChangeCounter, Game game) {
MageObjectReference mor = new MageObjectReference(objectId, zoneChangeCounter, game);
return damagedObjects.containsKey(mor) ? damagedObjects.get(mor) : 0;
}
public boolean isDamaged(UUID objectId, int zoneChangeCounter, Game game) {
MageObjectReference mor = new MageObjectReference(objectId, zoneChangeCounter, game);
return damagedObjects.containsKey(mor);
}
}