From 8618b45bc824558eef7201fd122186f77d0e320a Mon Sep 17 00:00:00 2001 From: North <robyter@gmail> Date: Thu, 24 May 2012 22:45:41 +0300 Subject: [PATCH] Added lockedIn parameter to BoostEffects. --- .../continious/BoostControlledEffect.java | 152 +++++++++--------- .../common/continious/BoostSourceEffect.java | 99 +++++++----- .../common/continious/BoostTargetEffect.java | 40 ++--- 3 files changed, 153 insertions(+), 138 deletions(-) diff --git a/Mage/src/mage/abilities/effects/common/continious/BoostControlledEffect.java b/Mage/src/mage/abilities/effects/common/continious/BoostControlledEffect.java index 7c63bb7b89..57342b4f30 100644 --- a/Mage/src/mage/abilities/effects/common/continious/BoostControlledEffect.java +++ b/Mage/src/mage/abilities/effects/common/continious/BoostControlledEffect.java @@ -48,89 +48,96 @@ public class BoostControlledEffect extends ContinuousEffectImpl<BoostControlledE private DynamicValue power; private DynamicValue toughness; - protected boolean excludeSource; - protected FilterCreaturePermanent filter; - // if true, all dynamic values should be calculated once - protected boolean isLockedIn = false; + protected FilterCreaturePermanent filter; + protected boolean excludeSource; + protected boolean lockedIn = false; - public BoostControlledEffect(int power, int toughness, Duration duration) { - this(power, toughness, duration, new FilterCreaturePermanent(), false); - } + public BoostControlledEffect(int power, int toughness, Duration duration) { + this(power, toughness, duration, new FilterCreaturePermanent(), false); + } public BoostControlledEffect(DynamicValue power, DynamicValue toughness, Duration duration) { - this(power, toughness, duration, new FilterCreaturePermanent(), false); - } + this(power, toughness, duration, new FilterCreaturePermanent(), false); + } - public BoostControlledEffect(int power, int toughness, Duration duration, boolean excludeSource) { - this(power, toughness, duration, new FilterCreaturePermanent(), excludeSource); - } + public BoostControlledEffect(int power, int toughness, Duration duration, boolean excludeSource) { + this(power, toughness, duration, new FilterCreaturePermanent(), excludeSource); + } - public BoostControlledEffect(int power, int toughness, Duration duration, FilterCreaturePermanent filter) { - this(new StaticValue(power), new StaticValue(toughness), duration, filter, false); - } + public BoostControlledEffect(int power, int toughness, Duration duration, FilterCreaturePermanent filter) { + this(new StaticValue(power), new StaticValue(toughness), duration, filter, false); + } - public BoostControlledEffect(int power, int toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource) { - this(new StaticValue(power), new StaticValue(toughness), duration, filter, excludeSource); - } + public BoostControlledEffect(int power, int toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource) { + this(new StaticValue(power), new StaticValue(toughness), duration, filter, excludeSource); + } public BoostControlledEffect(DynamicValue power, DynamicValue toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource) { - super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); - this.power = power; - this.toughness = toughness; - this.filter = filter; - this.excludeSource = excludeSource; - setText(); - } + this(power, toughness, duration, filter, excludeSource, false); + } - public BoostControlledEffect(final BoostControlledEffect effect) { - super(effect); - this.power = effect.power; - this.toughness = effect.toughness; - this.filter = effect.filter.copy(); - this.excludeSource = effect.excludeSource; - this.isLockedIn = effect.isLockedIn; - } + /** + * @param lockedIn if true, power and toughness will be calculated only once, when the ability resolves + */ + public BoostControlledEffect(DynamicValue power, DynamicValue toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource, boolean lockedIn) { + super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); + this.power = power; + this.toughness = toughness; + this.filter = filter; + this.excludeSource = excludeSource; + this.lockedIn = lockedIn; + setText(); + } - @Override - public BoostControlledEffect copy() { - return new BoostControlledEffect(this); - } + public BoostControlledEffect(final BoostControlledEffect effect) { + super(effect); + this.power = effect.power; + this.toughness = effect.toughness; + this.filter = effect.filter.copy(); + this.excludeSource = effect.excludeSource; + this.lockedIn = effect.lockedIn; + } - @Override - public void init(Ability source, Game game) { - super.init(source, game); - if (this.affectedObjectsSet) { - for (Permanent perm: game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { - if (!(excludeSource && perm.getId().equals(source.getSourceId()))) { - objects.add(perm.getId()); - } - } - } - if (this.isLockedIn) { + @Override + public BoostControlledEffect copy() { + return new BoostControlledEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (this.affectedObjectsSet) { + for (Permanent perm : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { + if (!(excludeSource && perm.getId().equals(source.getSourceId()))) { + objects.add(perm.getId()); + } + } + } + if (this.lockedIn) { power = new StaticValue(power.calculate(game, source)); toughness = new StaticValue(toughness.calculate(game, source)); } - } + } - @Override - public boolean apply(Game game, Ability source) { - for (Permanent perm: game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { - if (!this.affectedObjectsSet || objects.contains(perm.getId())) { - if (!(excludeSource && perm.getId().equals(source.getSourceId()))) { - perm.addPower(power.calculate(game, source)); - perm.addToughness(toughness.calculate(game, source)); - } - } - } - return true; - } + @Override + public boolean apply(Game game, Ability source) { + for (Permanent perm : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { + if (!this.affectedObjectsSet || objects.contains(perm.getId())) { + if (!(excludeSource && perm.getId().equals(source.getSourceId()))) { + perm.addPower(power.calculate(game, source)); + perm.addToughness(toughness.calculate(game, source)); + } + } + } + return true; + } - private void setText() { - StringBuilder sb = new StringBuilder(); - if (excludeSource) - sb.append("Other "); - sb.append(filter.getMessage()); - sb.append(" you control get "); + private void setText() { + StringBuilder sb = new StringBuilder(); + if (excludeSource) + sb.append("Other "); + sb.append(filter.getMessage()); + sb.append(" you control get "); String p = power.toString(); if(!p.startsWith("-")) { @@ -147,16 +154,15 @@ public class BoostControlledEffect extends ContinuousEffectImpl<BoostControlledE } sb.append(t); - sb.append((duration==Duration.EndOfTurn?" until end of turn":"")); - staticText = sb.toString(); - } + sb.append((duration==Duration.EndOfTurn?" until end of turn":"")); + staticText = sb.toString(); + } public void setRule(String rule) { staticText = rule; } - public void setLockedIn(boolean isLockedIn) { - this.isLockedIn =isLockedIn; + public void setLockedIn(boolean lockedIn) { + this.lockedIn = lockedIn; } - } diff --git a/Mage/src/mage/abilities/effects/common/continious/BoostSourceEffect.java b/Mage/src/mage/abilities/effects/common/continious/BoostSourceEffect.java index 1105e5b6ca..c8bd1c8271 100644 --- a/Mage/src/mage/abilities/effects/common/continious/BoostSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continious/BoostSourceEffect.java @@ -44,49 +44,68 @@ import mage.game.permanent.Permanent; * @author BetaSteward_at_googlemail.com */ public class BoostSourceEffect extends ContinuousEffectImpl<BoostSourceEffect> { - private DynamicValue power; - private DynamicValue toughness; + private DynamicValue power; + private DynamicValue toughness; + private boolean lockedIn; - public BoostSourceEffect(int power, int toughness, Duration duration) { - this(new StaticValue(power), new StaticValue(toughness), duration); - } - - public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration) { - super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); - this.power = power; - this.toughness = toughness; - setText(); + public BoostSourceEffect(int power, int toughness, Duration duration) { + this(new StaticValue(power), new StaticValue(toughness), duration, false); } - public BoostSourceEffect(final BoostSourceEffect effect) { - super(effect); - this.power = effect.power.clone(); - this.toughness = effect.toughness.clone(); - } + public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration) { + this(power, toughness, duration, false); + } - @Override - public BoostSourceEffect copy() { - return new BoostSourceEffect(this); - } + /** + * @param lockedIn if true, power and toughness will be calculated only once, when the ability resolves + */ + public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration, boolean lockedIn) { + super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); + this.power = power; + this.toughness = toughness; + this.lockedIn = lockedIn; + setText(); + } - @Override - public boolean apply(Game game, Ability source) { - Permanent target = game.getPermanent(source.getSourceId()); - if (target != null) { - target.addPower(power.calculate(game, source)); - target.addToughness(toughness.calculate(game, source)); - return true; - } - return false; - } + public BoostSourceEffect(final BoostSourceEffect effect) { + super(effect); + this.power = effect.power.clone(); + this.toughness = effect.toughness.clone(); + this.lockedIn = effect.lockedIn; + } - public void setRule(String value) { - staticText = value; - } + @Override + public BoostSourceEffect copy() { + return new BoostSourceEffect(this); + } - private void setText() { - StringBuilder sb = new StringBuilder(); - sb.append("{this} gets "); + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (lockedIn) { + power = new StaticValue(power.calculate(game, source)); + toughness = new StaticValue(toughness.calculate(game, source)); + } + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent target = game.getPermanent(source.getSourceId()); + if (target != null) { + target.addPower(power.calculate(game, source)); + target.addToughness(toughness.calculate(game, source)); + return true; + } + return false; + } + + public void setRule(String value) { + staticText = value; + } + + private void setText() { + StringBuilder sb = new StringBuilder(); + sb.append("{this} gets "); String p = power.toString(); if(!p.startsWith("-")) sb.append("+"); @@ -99,8 +118,8 @@ public class BoostSourceEffect extends ContinuousEffectImpl<BoostSourceEffect> { sb.append("+"); } sb.append(t); - if (duration != Duration.WhileOnBattlefield) - sb.append(" ").append(duration.toString()); + if (duration != Duration.WhileOnBattlefield) + sb.append(" ").append(duration.toString()); String message = power.getMessage(); if (message.length() == 0) message = toughness.getMessage(); @@ -108,7 +127,7 @@ public class BoostSourceEffect extends ContinuousEffectImpl<BoostSourceEffect> { sb.append(" for each "); } sb.append(message); - staticText = sb.toString(); - } + staticText = sb.toString(); + } } diff --git a/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java index 787c4f07e2..340da3b6a2 100644 --- a/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java @@ -49,37 +49,31 @@ public class BoostTargetEffect extends ContinuousEffectImpl<BoostTargetEffect> { private DynamicValue power; private DynamicValue toughness; - // if true, all dynamic values should be calculated once - protected boolean isLockedIn = false; - + private boolean lockedIn; + public BoostTargetEffect(int power, int toughness, Duration duration) { - this(new StaticValue(power), new StaticValue(toughness), duration); + this(new StaticValue(power), new StaticValue(toughness), duration, false); } public BoostTargetEffect(DynamicValue power, DynamicValue toughness, Duration duration) { - super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); - this.power = power; - this.toughness = toughness; + this(power, toughness, duration, false); } + /** - * @param power power value to boost - * @param toughness toughness value to boost - * @param duration how long does the effecct apply - * @param continuousCalculation true = power and toughness will be calculated continuously - * false = power and toughness will be calculated once during resolution + * @param lockedIn if true, power and toughness will be calculated only once, when the ability resolves */ - public BoostTargetEffect(DynamicValue power, DynamicValue toughness, Duration duration, boolean isLockedIn) { + public BoostTargetEffect(DynamicValue power, DynamicValue toughness, Duration duration, boolean lockedIn) { super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); this.power = power; this.toughness = toughness; - this.isLockedIn = isLockedIn; + this.lockedIn = lockedIn; } public BoostTargetEffect(final BoostTargetEffect effect) { super(effect); this.power = effect.power.clone(); this.toughness = effect.toughness.clone(); - this.isLockedIn = effect.isLockedIn; + this.lockedIn = effect.lockedIn; } @Override @@ -89,11 +83,11 @@ public class BoostTargetEffect extends ContinuousEffectImpl<BoostTargetEffect> { @Override public void init(Ability source, Game game) { - super.init(source, game); - if (isLockedIn) { - power = new StaticValue(power.calculate(game, source)); - toughness = new StaticValue(toughness.calculate(game, source)); - } + super.init(source, game); + if (lockedIn) { + power = new StaticValue(power.calculate(game, source)); + toughness = new StaticValue(toughness.calculate(game, source)); + } } @Override @@ -132,7 +126,7 @@ public class BoostTargetEffect extends ContinuousEffectImpl<BoostTargetEffect> { } sb.append(t); if (duration != Duration.WhileOnBattlefield) - sb.append(" ").append(duration.toString()); + sb.append(" ").append(duration.toString()); String message = power.getMessage(); if (message.length() > 0) { sb.append(" for each "); @@ -140,8 +134,4 @@ public class BoostTargetEffect extends ContinuousEffectImpl<BoostTargetEffect> { sb.append(message); return sb.toString(); } - - public void setLockedIn(boolean isLockedIn) { - this.isLockedIn =isLockedIn; - } }