mirror of
https://github.com/magefree/mage.git
synced 2025-12-27 22:12:03 -08:00
Renamed and improved ActivateOncePerTurnActivatedAbility to LimitedTimesPerTurnActivatedAbility-
This commit is contained in:
parent
9b10da0551
commit
48efe70625
30 changed files with 96 additions and 78 deletions
|
|
@ -40,26 +40,29 @@ import mage.util.CardUtil;
|
|||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class ActivateOncePerTurnActivatedAbility extends ActivatedAbilityImpl<ActivateOncePerTurnActivatedAbility> {
|
||||
public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl<LimitedTimesPerTurnActivatedAbility> {
|
||||
|
||||
public ActivateOncePerTurnActivatedAbility(Zone zone, Effect effect, Cost cost) {
|
||||
super(zone, effect, cost);
|
||||
private int maxActivationsPerTurn;
|
||||
|
||||
public LimitedTimesPerTurnActivatedAbility(Zone zone, Effect effect, Cost cost) {
|
||||
this(zone, effect, cost, 1);
|
||||
}
|
||||
|
||||
public ActivateOncePerTurnActivatedAbility(ActivateOncePerTurnActivatedAbility ability) {
|
||||
public LimitedTimesPerTurnActivatedAbility(Zone zone, Effect effect, Cost cost, int maxActivationsPerTurn) {
|
||||
super(zone, effect, cost);
|
||||
this.maxActivationsPerTurn = maxActivationsPerTurn;
|
||||
}
|
||||
|
||||
public LimitedTimesPerTurnActivatedAbility(LimitedTimesPerTurnActivatedAbility ability) {
|
||||
super(ability);
|
||||
this.maxActivationsPerTurn = ability.maxActivationsPerTurn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canActivate(UUID playerId, Game game) {
|
||||
if (super.canActivate(playerId, game)) {
|
||||
Boolean activated = (Boolean)game.getState().getValue(CardUtil.getCardZoneString("activated", sourceId, game));
|
||||
if (activated == null) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return !activated;
|
||||
}
|
||||
Integer activations = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activations", sourceId, game));
|
||||
return activations == null || activations < maxActivationsPerTurn;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -68,7 +71,13 @@ public class ActivateOncePerTurnActivatedAbility extends ActivatedAbilityImpl<Ac
|
|||
public boolean activate(Game game, boolean noMana) {
|
||||
if (canActivate(this.controllerId, game)) {
|
||||
if (super.activate(game, noMana)) {
|
||||
game.getState().setValue(CardUtil.getCardZoneString("activated", sourceId, game), Boolean.TRUE);
|
||||
Integer activations = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activations", sourceId, game));
|
||||
if (activations == null) {
|
||||
activations = new Integer(1);
|
||||
} else {
|
||||
activations++;
|
||||
}
|
||||
game.getState().setValue(CardUtil.getCardZoneString("activations", sourceId, game), activations);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -77,25 +86,34 @@ public class ActivateOncePerTurnActivatedAbility extends ActivatedAbilityImpl<Ac
|
|||
|
||||
@Override
|
||||
public void reset(Game game) {
|
||||
game.getState().setValue(CardUtil.getCardZoneString("activated", sourceId, game), Boolean.FALSE);
|
||||
game.getState().setValue(CardUtil.getCardZoneString("activations", sourceId, game), new Integer(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resolve(Game game) {
|
||||
if (super.resolve(game)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return super.resolve(game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return super.getRule() + " Activate this ability only once each turn.";
|
||||
StringBuilder sb = new StringBuilder(super.getRule()).append("Activate this ability ");
|
||||
switch(maxActivationsPerTurn) {
|
||||
case 1:
|
||||
sb.append("only once");
|
||||
break;
|
||||
case 2:
|
||||
sb.append("no more than twice");
|
||||
break;
|
||||
default:
|
||||
sb.append("no more than ").append(CardUtil.numberToText(maxActivationsPerTurn)).append(" times");
|
||||
}
|
||||
sb.append(" each turn");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActivateOncePerTurnActivatedAbility copy() {
|
||||
return new ActivateOncePerTurnActivatedAbility(this);
|
||||
public LimitedTimesPerTurnActivatedAbility copy() {
|
||||
return new LimitedTimesPerTurnActivatedAbility(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.ActivateOncePerTurnActivatedAbility;
|
||||
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.common.RevealSourceFromYourHandCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
|
|
@ -51,7 +51,7 @@ import mage.game.Game;
|
|||
* @author LevelX2
|
||||
*
|
||||
*/
|
||||
public class ForecastAbility extends ActivateOncePerTurnActivatedAbility {
|
||||
public class ForecastAbility extends LimitedTimesPerTurnActivatedAbility {
|
||||
|
||||
public ForecastAbility(Effect effect, Cost cost) {
|
||||
super(Zone.HAND, effect, cost);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue