diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index bdac16c8b78..e2e891346a2 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -717,7 +717,7 @@ public class PlayerControllerAi extends PlayerController { } @Override - public boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa) { + public boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa, String prompt /* ai needs hints as well */ ) { // TODO Auto-generated method stub return ComputerUtilMana.payManaCost(new ManaCostBeingPaid(toPay), sa, player); } diff --git a/forge-game/src/main/java/forge/game/cost/CostPartMana.java b/forge-game/src/main/java/forge/game/cost/CostPartMana.java index 665535c3419..1c5427b1d1c 100644 --- a/forge-game/src/main/java/forge/game/cost/CostPartMana.java +++ b/forge-game/src/main/java/forge/game/cost/CostPartMana.java @@ -128,7 +128,7 @@ public class CostPartMana extends CostPart { sa.clearManaPaid(); // decision not used here, the whole payment is interactive! - return payer.getController().payManaCost(this, sa); + return payer.getController().payManaCost(this, sa, null); } } diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index c21999f6569..d58c32c0af1 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -222,10 +222,10 @@ public abstract class PlayerController { public List cheatShuffle(List list) { return list; } public Collection complainCardsCantPlayWell(Deck myDeck) { return null; } - public final boolean payManaCost(CostPartMana costPartMana, SpellAbility sa) { - return payManaCost(costPartMana.getManaCostFor(sa), costPartMana, sa); + public final boolean payManaCost(CostPartMana costPartMana, SpellAbility sa, String prompt) { + return payManaCost(costPartMana.getManaCostFor(sa), costPartMana, sa, prompt); } - public abstract boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa); + public abstract boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa, String prompt); public abstract Map chooseCardsForConvoke(SpellAbility sa, ManaCost manaCost, List untappedCreats); diff --git a/forge-gui/src/main/java/forge/gui/input/InputPayMana.java b/forge-gui/src/main/java/forge/gui/input/InputPayMana.java index 9ae71c98242..fb11b9c3f63 100644 --- a/forge-gui/src/main/java/forge/gui/input/InputPayMana.java +++ b/forge-gui/src/main/java/forge/gui/input/InputPayMana.java @@ -372,4 +372,10 @@ public abstract class InputPayMana extends InputSyncronizedBase { } public boolean isPaid() { return bPaid; } + + protected String messagePrefix; + public void setMessagePrefix(String prompt) { + // TODO Auto-generated method stub + messagePrefix = prompt; + } } diff --git a/forge-gui/src/main/java/forge/gui/input/InputPayManaOfCostPayment.java b/forge-gui/src/main/java/forge/gui/input/InputPayManaOfCostPayment.java index 52edb35771e..04f92a6916e 100644 --- a/forge-gui/src/main/java/forge/gui/input/InputPayManaOfCostPayment.java +++ b/forge-gui/src/main/java/forge/gui/input/InputPayManaOfCostPayment.java @@ -44,7 +44,10 @@ public class InputPayManaOfCostPayment extends InputPayMana { protected String getMessage() { final String displayMana = manaCost.toString(false); - final StringBuilder msg = new StringBuilder("Pay Mana Cost: " + displayMana); + final StringBuilder msg = new StringBuilder(); + if( messagePrefix != null ) + msg.append(messagePrefix).append("\n"); + msg.append("Pay Mana Cost: ").append(displayMana); if (this.phyLifeToLose > 0) { msg.append(" ("); msg.append(this.phyLifeToLose); diff --git a/forge-gui/src/main/java/forge/gui/player/HumanPlay.java b/forge-gui/src/main/java/forge/gui/player/HumanPlay.java index 231d2c93d91..f7ed8c3bf01 100644 --- a/forge-gui/src/main/java/forge/gui/player/HumanPlay.java +++ b/forge-gui/src/main/java/forge/gui/player/HumanPlay.java @@ -628,7 +628,7 @@ public class HumanPlay { } sourceAbility.clearManaPaid(); - boolean paid = p.getController().payManaCost(cost.getCostMana(), sourceAbility); + boolean paid = p.getController().payManaCost(cost.getCostMana(), sourceAbility, prompt); if (!paid) { p.getManaPool().refundManaPaid(sourceAbility); } @@ -679,7 +679,7 @@ public class HumanPlay { return done; } - public static boolean payManaCost(final ManaCost realCost, final CostPartMana mc, final SpellAbility ability, final Player activator) { + public static boolean payManaCost(final ManaCost realCost, final CostPartMana mc, final SpellAbility ability, final Player activator, String prompt) { final Card source = ability.getHostCard(); ManaCostBeingPaid toPay = new ManaCostBeingPaid(realCost, mc.getRestiction()); @@ -699,16 +699,17 @@ public class HumanPlay { toPay.addManaCost(mkCost); } - InputPayMana inpPayment; + toPay.applySpellCostChange(ability, false); - + InputPayMana inpPayment; if (ability.isOffering() && ability.getSacrificedAsOffering() == null) { System.out.println("Sacrifice input for Offering cancelled"); return false; } if (!toPay.isPaid()) { inpPayment = new InputPayManaOfCostPayment(toPay, ability, activator); + inpPayment.setMessagePrefix(prompt); inpPayment.showAndWait(); if (!inpPayment.isPaid()) { return handleOfferingAndConvoke(ability, true, false); diff --git a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java index c4460cebacc..f1aa75624ea 100644 --- a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java @@ -1062,8 +1062,8 @@ public class PlayerControllerHuman extends PlayerController { } @Override - public boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa) { - return HumanPlay.payManaCost(toPay, costPartMana, sa, player); + public boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa, String prompt /* ai needs hints as well */ ) { + return HumanPlay.payManaCost(toPay, costPartMana, sa, player, prompt); } @Override diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index 731148a909d..2055ca683a7 100644 --- a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -566,7 +566,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa) { + public boolean payManaCost(ManaCost toPay, CostPartMana costPartMana, SpellAbility sa, String prompt /* ai needs hints as well */ ) { // TODO Auto-generated method stub return ComputerUtilMana.payManaCost(new ManaCostBeingPaid(toPay), sa, player); }