From cb3b65351c918db48144ade19eb35f469d29b3a3 Mon Sep 17 00:00:00 2001 From: Sloth Date: Wed, 23 May 2012 10:00:00 +0000 Subject: [PATCH] - Added the static ability "CostChange". --- .gitattributes | 1 + src/main/java/forge/GameAction.java | 7 ++ .../card/staticability/StaticAbility.java | 30 ++++++++ .../StaticAbilityCostChange.java | 69 +++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 src/main/java/forge/card/staticability/StaticAbilityCostChange.java diff --git a/.gitattributes b/.gitattributes index d30867c961d..f21c2041836 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11766,6 +11766,7 @@ src/main/java/forge/card/staticability/StaticAbility.java svneol=native#text/pla src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java svneol=native#text/plain src/main/java/forge/card/staticability/StaticAbilityCantTarget.java -text src/main/java/forge/card/staticability/StaticAbilityContinuous.java svneol=native#text/plain +src/main/java/forge/card/staticability/StaticAbilityCostChange.java -text src/main/java/forge/card/staticability/StaticAbilityETBTapped.java -text src/main/java/forge/card/staticability/StaticAbilityPreventDamage.java svneol=native#text/plain src/main/java/forge/card/staticability/package-info.java svneol=native#text/plain diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 7f63ad078e3..82cfc191e92 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -2408,6 +2408,13 @@ public class GameAction { manaCost = new ManaCost(manaC); } } // Khalni Hydra + + for (Card c : cardsInPlay) { + final ArrayList staticAbilities = c.getStaticAbilities(); + for (final StaticAbility stAb : staticAbilities) { + manaCost = stAb.applyAbility("CostChange", spell, manaCost); + } + } return manaCost; } // GetSpellCostChange diff --git a/src/main/java/forge/card/staticability/StaticAbility.java b/src/main/java/forge/card/staticability/StaticAbility.java index 1f6c1f28c93..ff1b8261085 100644 --- a/src/main/java/forge/card/staticability/StaticAbility.java +++ b/src/main/java/forge/card/staticability/StaticAbility.java @@ -27,6 +27,7 @@ import forge.Card; import forge.GameEntity; import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; +import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; import forge.game.phase.PhaseType; import forge.game.player.Player; @@ -341,6 +342,35 @@ public class StaticAbility { return false; } + /** + * Apply ability. + * + * @param mode + * the mode + * @param sa + * the SpellAbility + * @param originalCost + * the originalCost + * @return the modified ManaCost + */ + public final ManaCost applyAbility(final String mode, final SpellAbility sa, final ManaCost originalCost) { + + // don't apply the ability if it hasn't got the right mode + if (!this.mapParams.get("Mode").equals(mode)) { + return originalCost; + } + + if (this.isSuppressed() || !this.checkConditions()) { + return originalCost; + } + + if (mode.equals("CostChange")) { + return StaticAbilityCostChange.applyCostChangeAbility(this, sa, originalCost); + } + + return originalCost; + } + /** * Apply ability. * diff --git a/src/main/java/forge/card/staticability/StaticAbilityCostChange.java b/src/main/java/forge/card/staticability/StaticAbilityCostChange.java new file mode 100644 index 00000000000..fbfd5d6f327 --- /dev/null +++ b/src/main/java/forge/card/staticability/StaticAbilityCostChange.java @@ -0,0 +1,69 @@ +/* + * Forge: Play Magic: the Gathering. + * Copyright (C) 2011 Forge Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package forge.card.staticability; + +import java.util.HashMap; + +import forge.Card; +import forge.card.mana.ManaCost; +import forge.card.spellability.SpellAbility; +import forge.game.player.Player; + +/** + * The Class StaticAbility_CantBeCast. + */ +public class StaticAbilityCostChange { + + /** + * Applies CostChange ability. + * + * @param staticAbility + * a StaticAbility + * @param sa + * the SpellAbility + * @param originalCost + * a ManaCost + */ + public static ManaCost applyCostChangeAbility(final StaticAbility staticAbility, final SpellAbility sa + , final ManaCost originalCost) { + final HashMap params = staticAbility.getMapParams(); + final Card hostCard = staticAbility.getHostCard(); + final Player activator = sa.getActivatingPlayer(); + final Card card = sa.getSourceCard(); + + if (params.containsKey("ValidCard") + && !card.isValid(params.get("ValidCard").split(","), hostCard.getController(), hostCard)) { + return originalCost; + } + + if (params.containsKey("Activator") && ((activator == null) + || !activator.isValid(params.get("Activator"), hostCard.getController(), hostCard))) { + return originalCost; + } + + if (params.containsKey("Type") && params.get("Type").equals("Spell") && !sa.isSpell()) { + return originalCost; + } + if (params.containsKey("Type") && params.get("Type").equals("Ability") && !sa.isAbility()) { + return originalCost; + } + + //modify the cost here + return originalCost; + } +}