From 95918c781ed580e5ea0fce3ef4aeb12a2bcf60b3 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 13:03:57 +0000 Subject: [PATCH] - Some fixes related to SpellAbility_Requirements and copying spells onto the stack. --- src/forge/GameAction.java | 6 ++---- src/forge/SpellAbility_Requirements.java | 27 ++++++++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index cec14976fce..75664302480 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -2822,11 +2822,9 @@ public class GameAction { if (sa.getPayCosts() != null){ Target_Selection ts = new Target_Selection(sa.getTarget(), sa); Cost_Payment payment = new Cost_Payment(sa.getPayCosts(), sa); - - payment.getCost().setMana(sa.getAdditionalManaCost()); - payment.changeCost(); - + SpellAbility_Requirements req = new SpellAbility_Requirements(sa, ts, payment); + req.setFree(true); req.fillRequirements(); } else if(sa.getBeforePayMana() == null) { diff --git a/src/forge/SpellAbility_Requirements.java b/src/forge/SpellAbility_Requirements.java index 803904f98ee..ade5618486c 100644 --- a/src/forge/SpellAbility_Requirements.java +++ b/src/forge/SpellAbility_Requirements.java @@ -6,6 +6,8 @@ public class SpellAbility_Requirements { private SpellAbility ability = null; private Target_Selection select = null; private Cost_Payment payment = null; + private boolean isFree = false; + public void setFree(boolean bFree) { isFree = bFree; } private PlayerZone fromZone = null; private boolean bCasting = false; @@ -32,13 +34,13 @@ public class SpellAbility_Requirements { AllZone.Stack.freezeStack(); // Skip to paying if parent ability doesn't target and has no subAbilities. - if (!select.doesTarget() && ability.getSubAbility() == null) - startPaying(); - else{ + if (select.doesTarget() || ability.getSubAbility() != null){ select.setRequirements(this); select.resetTargets(); select.chooseTargets(); } + else + needPayment(); } public void finishedTargeting(){ @@ -53,7 +55,15 @@ public class SpellAbility_Requirements { AllZone.Stack.clearFrozen(); return; } - startPaying(); + else + needPayment(); + } + + public void needPayment(){ + if (!isFree) + startPaying(); + else + finishPaying(); } public void startPaying(){ @@ -62,13 +72,12 @@ public class SpellAbility_Requirements { } public void finishPaying(){ - if (payment.isAllPaid()) + if (isFree || payment.isAllPaid()) addAbilityToStack(); else if (payment.isCanceled()){ - if (bCasting){ // and not a copy - // add back to hand - fromZone.add(ability.getSourceCard()); - } + if (bCasting && !ability.getSourceCard().isCopiedSpell()) + fromZone.add(ability.getSourceCard()); // add back to hand + if (select != null) select.resetTargets();