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;
-    }
 }