[AER] Fixed Daredevil Dragster.

This commit is contained in:
LevelX2 2017-01-07 23:29:27 +01:00
parent 9353c5aa9c
commit 491ab5fbb0
6 changed files with 147 additions and 145 deletions

View file

@ -0,0 +1,52 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mage.abilities.condition.common;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.condition.Condition;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.watchers.common.AttackedOrBlockedThisCombatWatcher;
/**
*
* @author LevelX2
*/
public class AttackedOrBlockedThisCombatSourceCondition implements Condition {
private static final AttackedOrBlockedThisCombatSourceCondition fInstance = new AttackedOrBlockedThisCombatSourceCondition();
public static Condition getInstance() {
return fInstance;
}
@Override
public boolean apply(Game game, Ability source) {
Permanent sourceObject = game.getPermanentOrLKIBattlefield(source.getSourceId());
if (sourceObject != null) {
AttackedOrBlockedThisCombatWatcher watcher = (AttackedOrBlockedThisCombatWatcher) game.getState().getWatchers().get(AttackedOrBlockedThisCombatWatcher.class.getName());
if (watcher != null) {
for (MageObjectReference mor : watcher.getAttackedThisTurnCreatures()) {
if (mor.refersTo(sourceObject, game)) {
return true;
}
}
for (MageObjectReference mor : watcher.getBlockedThisTurnCreatures()) {
if (mor.refersTo(sourceObject, game)) {
return true;
}
}
}
}
return false;
}
@Override
public String toString() {
return "{this} attacked or blocked this combat";
}
}

View file

@ -17,37 +17,45 @@ import mage.watchers.Watcher;
*
* @author LevelX2
*/
public class AttackedThisCombatWatcher extends Watcher {
public class AttackedOrBlockedThisCombatWatcher extends Watcher {
public final Set<MageObjectReference> attackedThisTurnCreatures = new HashSet<>();
public final Set<MageObjectReference> blockedThisTurnCreatures = new HashSet<>();
public AttackedThisCombatWatcher() {
super("AttackedThisCombat", WatcherScope.GAME);
public AttackedOrBlockedThisCombatWatcher() {
super(AttackedOrBlockedThisCombatWatcher.class.getName(), WatcherScope.GAME);
}
public AttackedThisCombatWatcher(final AttackedThisCombatWatcher watcher) {
public AttackedOrBlockedThisCombatWatcher(final AttackedOrBlockedThisCombatWatcher watcher) {
super(watcher);
this.attackedThisTurnCreatures.addAll(watcher.attackedThisTurnCreatures);
this.blockedThisTurnCreatures.addAll(watcher.blockedThisTurnCreatures);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.BEGIN_COMBAT_STEP_PRE) {
this.attackedThisTurnCreatures.clear();
}
}
if (event.getType() == GameEvent.EventType.ATTACKER_DECLARED) {
this.attackedThisTurnCreatures.add(new MageObjectReference(event.getSourceId(),game));
this.attackedThisTurnCreatures.add(new MageObjectReference(event.getSourceId(), game));
}
if (event.getType() == GameEvent.EventType.BLOCKER_DECLARED) {
this.blockedThisTurnCreatures.add(new MageObjectReference(event.getSourceId(), game));
}
}
public Set<MageObjectReference> getAttackedThisTurnCreatures() {
public Set<MageObjectReference> getAttackedThisTurnCreatures() {
return this.attackedThisTurnCreatures;
}
public Set<MageObjectReference> getBlockedThisTurnCreatures() {
return this.blockedThisTurnCreatures;
}
@Override
public AttackedThisCombatWatcher copy() {
return new AttackedThisCombatWatcher(this);
public AttackedOrBlockedThisCombatWatcher copy() {
return new AttackedOrBlockedThisCombatWatcher(this);
}
}