foul-magics/Mage/src/main/java/mage/abilities/keyword/BoastAbility.java
Evan Kranzler 572104b8fc
Reworking card types in preparation for implementing Grist, the Hunger Tide (#7899)
Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
2021-07-09 07:28:43 +04:00

94 lines
2.9 KiB
Java

package mage.abilities.keyword;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.BoastCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.hint.common.BoastHint;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.watchers.common.AttackedThisTurnWatcher;
import java.util.Collection;
/**
* @author weirddan455
*/
public class BoastAbility extends ActivatedAbilityImpl {
public BoastAbility(Effect effect, String manaString) {
this(effect, new ManaCostsImpl<>(manaString));
}
public BoastAbility(Effect effect, Cost cost) {
super(Zone.BATTLEFIELD, effect, cost);
this.maxActivationsPerTurn = 1;
this.addWatcher(new AttackedThisTurnWatcher());
this.condition = BoastCondition.instance;
this.addHint(BoastHint.instance);
}
private BoastAbility(BoastAbility ability) {
super(ability);
}
@Override
public BoastAbility copy() {
return new BoastAbility(this);
}
// Needed to make this public for BoastHint to work correctly (called by BoastCondition)
@Override
public boolean hasMoreActivationsThisTurn(Game game) {
return super.hasMoreActivationsThisTurn(game);
}
@Override
public int getMaxActivationsPerTurn(Game game) {
if (!game.isActivePlayer(getControllerId())) {
return 1;
}
Permanent permanent = game.getPermanent(getSourceId());
if (permanent != null && !permanent.isCreature(game)) {
return 1;
}
return game.getBattlefield()
.getActivePermanents(
StaticFilters.FILTER_CONTROLLED_PERMANENT,
getControllerId(), getSourceId(), game
).stream()
.map(p -> p.getAbilities(game))
.flatMap(Collection::stream)
.anyMatch(BoastTwiceAbility.class::isInstance) ? 2 : 1;
}
@Override
public String getRule() {
return "Boast &mdash; " + super.getRule() + " <i>(Activate only if this creature attacked this turn and only once each turn.)</i>";
}
private static final class BoastTwiceAbility extends SimpleStaticAbility {
private BoastTwiceAbility() {
super(new InfoEffect("Creatures you control can boast twice during each of your turns rather than once."));
}
private BoastTwiceAbility(final BoastTwiceAbility ability) {
super(ability);
}
@Override
public BoastTwiceAbility copy() {
return new BoastTwiceAbility(this);
}
}
public static BoastTwiceAbility makeBoastTwiceAbility() {
return new BoastTwiceAbility();
}
}