From 4ed58e2a4dff932e0a9e0b92d88423b19a40905e Mon Sep 17 00:00:00 2001 From: Sol Date: Sun, 12 May 2013 02:34:18 +0000 Subject: [PATCH] - Disable Express Mana choosing mode for paying with with cards like Vivid Crag for generic mana --- src/main/java/forge/card/cost/Cost.java | 17 +++++++++++++++++ src/main/java/forge/card/cost/CostPart.java | 9 +++++++++ src/main/java/forge/card/cost/CostReveal.java | 3 +++ src/main/java/forge/card/cost/CostTap.java | 2 ++ src/main/java/forge/card/cost/CostTapType.java | 4 +++- src/main/java/forge/card/cost/CostUntap.java | 3 +++ .../java/forge/card/cost/CostUntapType.java | 2 ++ .../forge/control/input/InputPayManaBase.java | 16 +++++++++------- 8 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/main/java/forge/card/cost/Cost.java b/src/main/java/forge/card/cost/Cost.java index 352ebcdae4e..fbb9d982752 100644 --- a/src/main/java/forge/card/cost/Cost.java +++ b/src/main/java/forge/card/cost/Cost.java @@ -416,6 +416,23 @@ public class Cost { return this.isAbility; } + + /** + *

+ * isRenewableResource. + *

+ * + * @return a boolean. + */ + public final boolean isRenewableResource() { + for (final CostPart part : this.costParts) { + if (!part.isRenewable()) { + return false; + } + } + + return this.isAbility; + } /** *

diff --git a/src/main/java/forge/card/cost/CostPart.java b/src/main/java/forge/card/cost/CostPart.java index a8c0db3ff8b..9b652642324 100644 --- a/src/main/java/forge/card/cost/CostPart.java +++ b/src/main/java/forge/card/cost/CostPart.java @@ -106,6 +106,15 @@ public abstract class CostPart { public boolean isReusable() { return false; } + + /** + * Checks if is renewable. + * + * @return true, if is renewable + */ + public boolean isRenewable() { + return false; + } /** * Checks if is undoable. diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java index b42c0a77370..602d96d13bd 100644 --- a/src/main/java/forge/card/cost/CostReveal.java +++ b/src/main/java/forge/card/cost/CostReveal.java @@ -58,6 +58,9 @@ public class CostReveal extends CostPartWithList { @Override public boolean isReusable() { return true; } + @Override + public boolean isRenewable() { return true; } + /* * (non-Javadoc) * diff --git a/src/main/java/forge/card/cost/CostTap.java b/src/main/java/forge/card/cost/CostTap.java index b3d743647e8..57c1a17bb90 100644 --- a/src/main/java/forge/card/cost/CostTap.java +++ b/src/main/java/forge/card/cost/CostTap.java @@ -40,6 +40,8 @@ public class CostTap extends CostPart { @Override public boolean isReusable() { return true; } + @Override + public boolean isRenewable() { return true; } /* * (non-Javadoc) diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java index 188a04c5f5e..d272877eade 100644 --- a/src/main/java/forge/card/cost/CostTapType.java +++ b/src/main/java/forge/card/cost/CostTapType.java @@ -61,7 +61,9 @@ public class CostTapType extends CostPartWithList { @Override public boolean isReusable() { return true; } - + @Override + public boolean isRenewable() { return true; } + /* * (non-Javadoc) * diff --git a/src/main/java/forge/card/cost/CostUntap.java b/src/main/java/forge/card/cost/CostUntap.java index c37e56f39e5..ecf06618e80 100644 --- a/src/main/java/forge/card/cost/CostUntap.java +++ b/src/main/java/forge/card/cost/CostUntap.java @@ -38,6 +38,9 @@ public class CostUntap extends CostPart { @Override public boolean isUndoable() { return true; } + + @Override + public boolean isRenewable() { return true; } /* diff --git a/src/main/java/forge/card/cost/CostUntapType.java b/src/main/java/forge/card/cost/CostUntapType.java index 91f431fd70a..566fd86d9a8 100644 --- a/src/main/java/forge/card/cost/CostUntapType.java +++ b/src/main/java/forge/card/cost/CostUntapType.java @@ -57,6 +57,8 @@ public class CostUntapType extends CostPartWithList { @Override public boolean isReusable() { return true; } + @Override + public boolean isRenewable() { return true; } /* * (non-Javadoc) diff --git a/src/main/java/forge/control/input/InputPayManaBase.java b/src/main/java/forge/control/input/InputPayManaBase.java index 51e3b5a8b69..59efe7978f9 100644 --- a/src/main/java/forge/control/input/InputPayManaBase.java +++ b/src/main/java/forge/control/input/InputPayManaBase.java @@ -170,12 +170,11 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I ma.setActivatingPlayer(player); AbilityManaPart m = null; SpellAbility tail = ma; - while(m == null && tail != null) - { + while (m == null && tail != null) { m = tail.getManaPart(); tail = tail.getSubAbility(); } - if(m == null) { + if (m == null) { continue; } else if (!ma.canPlay()) { continue; @@ -186,15 +185,18 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I } else if (!m.meetsManaRestrictions(saPaidFor)) { continue; } - + abilities.add(ma); - + if (!skipExpress) { - // skip express mana if the ability is not undoable + // skip express mana if the ability is not undoable or reusable if (!ma.isUndoable()) { skipExpress = true; continue; - } + } else if (!ma.getPayCosts().isRenewableResource()) { + skipExpress = true; + continue; + } } } if (abilities.isEmpty()) {