mirror of
https://github.com/magefree/mage.git
synced 2026-01-10 04:42:07 -08:00
improve DontUntapInControllersUntapStepAllEffect
This commit is contained in:
parent
b3b2713ddf
commit
0081279d15
29 changed files with 67 additions and 141 deletions
|
|
@ -1,9 +1,6 @@
|
|||
|
||||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
|
|
@ -13,7 +10,6 @@ import mage.filter.FilterPermanent;
|
|||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
* @author LevelX2
|
||||
|
|
@ -21,13 +17,25 @@ import mage.players.Player;
|
|||
|
||||
public class DontUntapInControllersUntapStepAllEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
||||
TargetController targetController;
|
||||
FilterPermanent filter;
|
||||
private final TargetController targetController;
|
||||
private final FilterPermanent filter;
|
||||
|
||||
public DontUntapInControllersUntapStepAllEffect(Duration duration, TargetController targetController, FilterPermanent filter) {
|
||||
super(duration, Outcome.Detriment, false, false);
|
||||
this.targetController = targetController;
|
||||
this.filter = filter;
|
||||
String text = filter.getMessage() + " don't untap during ";
|
||||
switch (targetController) {
|
||||
case ANY:
|
||||
text += "their controllers'";
|
||||
break;
|
||||
case YOU:
|
||||
text += "your";
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("TargetController not supported in DontUntapInControllersNextUntapStepAllEffect");
|
||||
}
|
||||
staticText = text + (duration == Duration.UntilYourNextTurn ? " next untap step" : " untap steps");
|
||||
}
|
||||
|
||||
protected DontUntapInControllersUntapStepAllEffect(final DontUntapInControllersUntapStepAllEffect effect) {
|
||||
|
|
@ -48,50 +56,23 @@ public class DontUntapInControllersUntapStepAllEffect extends ContinuousRuleModi
|
|||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
if (game.getTurnStepType() == PhaseStep.UNTAP) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (permanent != null) {
|
||||
switch (targetController) {
|
||||
case YOU:
|
||||
if (!permanent.isControlledBy(source.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case OPPONENT:
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null && !game.isOpponent(controller, permanent.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case ANY:
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Type of TargetController not supported!");
|
||||
}
|
||||
if (game.isActivePlayer(permanent.getControllerId()) && // controller's untap step
|
||||
filter.match(permanent, source.getControllerId(), source, game)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (game.getTurnStepType() != PhaseStep.UNTAP || permanent == null) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (!staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder(filter.getMessage()).append(" don't untap during ");
|
||||
switch (targetController) {
|
||||
case YOU:
|
||||
if (!permanent.isControlledBy(source.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case ANY:
|
||||
sb.append("their controllers' ");
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Type of TargetController not supported yet!");
|
||||
throw new IllegalArgumentException("TargetController not supported in DontUntapInControllersNextUntapStepAllEffect");
|
||||
}
|
||||
sb.append("untap steps");
|
||||
return sb.toString();
|
||||
return game.isActivePlayer(permanent.getControllerId()) && // controller's untap step
|
||||
filter.match(permanent, source.getControllerId(), source, game);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue