From 05f3ef372dda52b5c000a48b727b7861340b251a Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 31 Mar 2013 21:31:46 +0000 Subject: [PATCH] fixed UI for announce. Announced cost for cards with XX like entreat the angels are paid correctly --- .../java/forge/card/cost/CostPartMana.java | 16 +++++++++++----- .../card/spellability/AbilityActivated.java | 1 - .../SpellAbilityRequirements.java | 14 +++++--------- .../card/spellability/TargetSelection.java | 19 +++++++++---------- src/main/java/forge/game/player/Player.java | 2 +- .../forge/game/player/PlayerController.java | 2 +- .../forge/game/player/PlayerControllerAi.java | 4 ++-- .../game/player/PlayerControllerHuman.java | 11 +++++------ 8 files changed, 34 insertions(+), 35 deletions(-) diff --git a/src/main/java/forge/card/cost/CostPartMana.java b/src/main/java/forge/card/cost/CostPartMana.java index 98aef47f04e..30314241d91 100644 --- a/src/main/java/forge/card/cost/CostPartMana.java +++ b/src/main/java/forge/card/cost/CostPartMana.java @@ -221,11 +221,17 @@ public class CostPartMana extends CostPart { return false; } if (this.getAmountOfX() > 0) { - source.setXManaCostPaid(0); - InputPayment inpPayment = new InputPayManaX(ability, this.getAmountOfX(), this.canXbe0()); - FThreads.setInputAndWait(inpPayment); - if(!inpPayment.isPaid()) - return false; + if( !"X".equals(ability.getParam("Announce")) ) { + source.setXManaCostPaid(0); + InputPayment inpPayment = new InputPayManaX(ability, this.getAmountOfX(), this.canXbe0()); + FThreads.setInputAndWait(inpPayment); + if(!inpPayment.isPaid()) + return false; + } else { + String xVar = ability.getSVar("X"); + String xVal = xVar.split("\\$")[1]; + source.setXManaCostPaid(Integer.parseInt(xVal)); + } } return true; diff --git a/src/main/java/forge/card/spellability/AbilityActivated.java b/src/main/java/forge/card/spellability/AbilityActivated.java index c9c15d21a4a..b196661574d 100644 --- a/src/main/java/forge/card/spellability/AbilityActivated.java +++ b/src/main/java/forge/card/spellability/AbilityActivated.java @@ -20,7 +20,6 @@ package forge.card.spellability; import java.util.ArrayList; import forge.Card; -import forge.Singletons; import forge.card.cost.Cost; import forge.card.cost.CostPayment; import forge.card.staticability.StaticAbility; diff --git a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java index 3513267975a..731d81a1f8a 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java +++ b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java @@ -165,15 +165,11 @@ public class SpellAbilityRequirements { String announce = ability.getParam("Announce"); if (announce != null) { for(String aVar : announce.split(",")) { - String value = ability.getActivatingPlayer().getController().announceRequirements(ability, aVar); - if (value == null || !StringUtils.isNumeric(value)) { - return false; - } else if (ability.getPayCosts().getCostMana() != null && !ability.getPayCosts().getCostMana().canXbe0() - && Integer.parseInt(value) == 0) { - return false; - } - ability.setSVar(aVar, "Number$" + value); - ability.getSourceCard().setSVar(aVar, "Number$" + value); + Integer value = ability.getActivatingPlayer().getController().announceRequirements(ability, aVar, ability.getPayCosts().getCostMana().canXbe0()); + if ( null == value ) + return false; + ability.setSVar(aVar, "Number$" + value); + ability.getSourceCard().setSVar(aVar, "Number$" + value); } } return true; diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index b1952e2b120..4ef190d8fa2 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -214,9 +214,9 @@ public class TargetSelection { } } - private Target target = null; - private SpellAbility ability = null; - private Card card = null; + private final Target target; + private final SpellAbility ability; + private TargetSelection subSelection = null; /** @@ -249,7 +249,7 @@ public class TargetSelection { * @return a {@link forge.Card} object. */ public final Card getCard() { - return this.card; + return this.ability.getSourceCard(); } private SpellAbilityRequirements req = null; @@ -314,7 +314,6 @@ public class TargetSelection { public TargetSelection(final Target tgt, final SpellAbility sa) { this.target = tgt; this.ability = sa; - this.card = sa.getSourceCard(); } /** @@ -352,14 +351,14 @@ public class TargetSelection { */ public final boolean chooseTargets() { // if not enough targets chosen, reset and cancel Ability - if (this.bCancel || (this.bTargetingDone && !this.target.isMinTargetsChosen(this.card, this.ability))) { + if (this.bCancel || (this.bTargetingDone && !this.target.isMinTargetsChosen(this.getCard(), this.ability))) { this.bCancel = true; return false; } if (!this.doesTarget() - || this.bTargetingDone && this.target.isMinTargetsChosen(this.card, this.ability) - || this.target.isMaxTargetsChosen(this.card, this.ability) + || this.bTargetingDone && this.target.isMinTargetsChosen(this.getCard(), this.ability) + || this.target.isMaxTargetsChosen(this.getCard(), this.ability) || this.target.isDividedAsYouChoose() && this.target.getStillToDivide() == 0) { final AbilitySub abSub = this.ability.getSubAbility(); @@ -375,7 +374,7 @@ public class TargetSelection { } } - if (!this.target.hasCandidates(this.ability, true) && !this.target.isMinTargetsChosen(this.card, this.ability)) { + if (!this.target.hasCandidates(this.ability, true) && !this.target.isMinTargetsChosen(this.getCard(), this.ability)) { // Cancel ability if there aren't any valid Candidates this.bCancel = true; return false; @@ -505,7 +504,7 @@ public class TargetSelection { } // If the cards must have a specific controller if (tgt.getDefinedController() != null) { - List pl = AbilityUtils.getDefinedPlayers(card, tgt.getDefinedController(), this.ability); + List pl = AbilityUtils.getDefinedPlayers(getCard(), tgt.getDefinedController(), this.ability); if (pl != null && !pl.isEmpty()) { Player controller = pl.get(0); choices = CardLists.filterControlledBy(choices, controller); diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index d1a9de973bb..a382ed932c1 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -1384,7 +1384,7 @@ public abstract class Player extends GameEntity implements Comparable { this.numDrawnThisDrawStep++; // Miracle draws - if (this.numDrawnThisTurn == 1 && game.getPhaseHandler().getTurn() != 0) { + if (this.numDrawnThisTurn == 1 && game.getPhaseHandler().getTurn() != 1) { drawMiracle(c); } diff --git a/src/main/java/forge/game/player/PlayerController.java b/src/main/java/forge/game/player/PlayerController.java index 34b605fb24b..223969c1676 100644 --- a/src/main/java/forge/game/player/PlayerController.java +++ b/src/main/java/forge/game/player/PlayerController.java @@ -94,7 +94,7 @@ public abstract class PlayerController { public abstract Map assignCombatDamage(Card attacker, List blockers, int damageDealt, GameEntity defender); - public abstract String announceRequirements(SpellAbility ability, String announce); + public abstract Integer announceRequirements(SpellAbility ability, String announce, boolean allowZero); public abstract List choosePermanentsToSacrifice(List validTargets, int amount, SpellAbility sa, boolean destroy, boolean isOptional); diff --git a/src/main/java/forge/game/player/PlayerControllerAi.java b/src/main/java/forge/game/player/PlayerControllerAi.java index dc1c246c42d..9b7e0f7c909 100644 --- a/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/src/main/java/forge/game/player/PlayerControllerAi.java @@ -149,9 +149,9 @@ public class PlayerControllerAi extends PlayerController { } @Override - public String announceRequirements(SpellAbility ability, String announce) { + public Integer announceRequirements(SpellAbility ability, String announce, boolean allowZero) { // For now, these "announcements" are made within the AI classes of the appropriate SA effects - return null; + return null; // return incorrect value to indicate that } @Override diff --git a/src/main/java/forge/game/player/PlayerControllerHuman.java b/src/main/java/forge/game/player/PlayerControllerHuman.java index 32fc4b4da69..b69a70b6790 100644 --- a/src/main/java/forge/game/player/PlayerControllerHuman.java +++ b/src/main/java/forge/game/player/PlayerControllerHuman.java @@ -211,12 +211,11 @@ public class PlayerControllerHuman extends PlayerController { * @see forge.game.player.PlayerController#announceRequirements(java.lang.String) */ @Override - public String announceRequirements(SpellAbility ability, String announce) { - StringBuilder sb = new StringBuilder(ability.getSourceCard().getName()); - sb.append(" - How much will you announce for "); - sb.append(announce); - sb.append("?"); - return JOptionPane.showInputDialog(sb.toString()); + public Integer announceRequirements(SpellAbility ability, String announce, boolean canChooseZero) { + List options = new ArrayList(); + for(int i = canChooseZero ? 0 : 1; i < 100; i++) + options.add(Integer.valueOf(i)); + return GuiChoose.oneOrNone(String.format("%s - How much will you announce for %s?", ability.getSourceCard().getName(), announce), options); } /* (non-Javadoc)