mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
CostPartMana - rearrange and cleanup,
InputPayManaOfCost now takes ManaCostBeingPaid as parameter AbilityUtils - workaroud about StringUtils.isNumeric that returned false for negative numbers
This commit is contained in:
@@ -295,14 +295,15 @@ public class AbilityUtils {
|
|||||||
final boolean startsWithPlus = amount.charAt(0) == '+';
|
final boolean startsWithPlus = amount.charAt(0) == '+';
|
||||||
if(startsWithPlus) amount = amount.substring(1);
|
if(startsWithPlus) amount = amount.substring(1);
|
||||||
|
|
||||||
if (StringUtils.isNumeric(amount)) return Integer.parseInt(amount);
|
|
||||||
|
|
||||||
// Strip and save sign for calculations
|
// Strip and save sign for calculations
|
||||||
boolean startsWithMinus = amount.charAt(0) == '-';
|
boolean startsWithMinus = amount.charAt(0) == '-';
|
||||||
int multiplier = startsWithMinus ? -1 : 1;
|
int multiplier = startsWithMinus ? -1 : 1;
|
||||||
if(startsWithMinus)
|
if(startsWithMinus)
|
||||||
amount = amount.substring(1);
|
amount = amount.substring(1);
|
||||||
|
|
||||||
|
// return result soon for plain numbers
|
||||||
|
if (StringUtils.isNumeric(amount)) return Integer.parseInt(amount) * multiplier;
|
||||||
|
|
||||||
// These are some special cases - who is implementing them?
|
// These are some special cases - who is implementing them?
|
||||||
if (amount.equals("ChosenX") || amount.equals("ChosenY")) {
|
if (amount.equals("ChosenX") || amount.equals("ChosenY")) {
|
||||||
// isn't made yet
|
// isn't made yet
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import forge.Card;
|
|||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
import forge.card.ability.AbilityUtils;
|
import forge.card.ability.AbilityUtils;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
|
import forge.card.mana.ManaCostBeingPaid;
|
||||||
import forge.card.mana.ManaCostShard;
|
import forge.card.mana.ManaCostShard;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.InputPayManaOfCostPayment;
|
import forge.control.input.InputPayManaOfCostPayment;
|
||||||
@@ -39,6 +40,20 @@ public class CostPartMana extends CostPart {
|
|||||||
private ManaCost adjustedCost;
|
private ManaCost adjustedCost;
|
||||||
private boolean xCantBe0 = false;
|
private boolean xCantBe0 = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new cost mana.
|
||||||
|
*
|
||||||
|
* @param mana
|
||||||
|
* the mana
|
||||||
|
* @param amount
|
||||||
|
* the amount
|
||||||
|
* @param xCantBe0 TODO
|
||||||
|
*/
|
||||||
|
public CostPartMana(final ManaCost cost, boolean xCantBe0) {
|
||||||
|
this.cost = cost;
|
||||||
|
this.xCantBe0 = xCantBe0; // TODO: Add 0 to parameter's name.
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the mana.
|
* Gets the mana.
|
||||||
*
|
*
|
||||||
@@ -49,20 +64,6 @@ public class CostPartMana extends CostPart {
|
|||||||
return this.cost;
|
return this.cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for no x mana cost.
|
|
||||||
*
|
|
||||||
* @return true, if successful
|
|
||||||
*/
|
|
||||||
public final boolean hasNoXManaCost() {
|
|
||||||
return getAmountOfX() == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the x mana.
|
|
||||||
*
|
|
||||||
* @return the x mana
|
|
||||||
*/
|
|
||||||
public final int getAmountOfX() {
|
public final int getAmountOfX() {
|
||||||
return this.cost.getShardCount(ManaCostShard.X);
|
return this.cost.getShardCount(ManaCostShard.X);
|
||||||
}
|
}
|
||||||
@@ -75,10 +76,11 @@ public class CostPartMana extends CostPart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param xCantBe00 the xCantBe0 to set
|
* Used to set mana cost after applying static effects that change costs.
|
||||||
*/
|
*/
|
||||||
public void setxCantBe0(boolean xCantBe0) {
|
public void setAdjustedMana(ManaCost manaCost) {
|
||||||
this.xCantBe0 = xCantBe0; // TODO: Add 0 to parameter's name.
|
// this is set when static effects of LodeStone Golems or Thalias are applied
|
||||||
|
adjustedCost = manaCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,12 +89,7 @@ public class CostPartMana extends CostPart {
|
|||||||
* @return the mana to pay
|
* @return the mana to pay
|
||||||
*/
|
*/
|
||||||
public final ManaCost getManaToPay() {
|
public final ManaCost getManaToPay() {
|
||||||
// Only used for Human to pay for non-X cost first
|
return adjustedCost == null ? cost : adjustedCost;
|
||||||
if (this.adjustedCost != null ) {
|
|
||||||
return this.adjustedCost;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.cost;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -101,37 +98,13 @@ public class CostPartMana extends CostPart {
|
|||||||
@Override
|
@Override
|
||||||
public boolean isUndoable() { return true; }
|
public boolean isUndoable() { return true; }
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new cost mana.
|
|
||||||
*
|
|
||||||
* @param mana
|
|
||||||
* the mana
|
|
||||||
* @param amount
|
|
||||||
* the amount
|
|
||||||
* @param xCantBe0 TODO
|
|
||||||
*/
|
|
||||||
public CostPartMana(final ManaCost cost, boolean xCantBe0) {
|
|
||||||
this.cost = cost;
|
|
||||||
this.setxCantBe0(xCantBe0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see forge.card.cost.CostPart#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public final String toString() {
|
public final String toString() {
|
||||||
return cost.toString();
|
return cost.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* forge.card.cost.CostPart#canPay(forge.card.spellability.SpellAbility,
|
|
||||||
* forge.Card, forge.Player, forge.card.cost.Cost)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean canPay(final SpellAbility ability) {
|
public final boolean canPay(final SpellAbility ability) {
|
||||||
// For now, this will always return true. But this should probably be
|
// For now, this will always return true. But this should probably be
|
||||||
@@ -139,36 +112,23 @@ public class CostPartMana extends CostPart {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.card.cost.CostPart#payAI(forge.card.cost.PaymentDecision, forge.game.player.AIPlayer, forge.card.spellability.SpellAbility, forge.Card)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void payAI(PaymentDecision decision, AIPlayer ai, SpellAbility ability, Card source) {
|
|
||||||
ComputerUtilMana.payManaCost(ai, ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* forge.card.cost.CostPart#payHuman(forge.card.spellability.SpellAbility,
|
|
||||||
* forge.Card, forge.card.cost.Cost_Payment)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean payHuman(final SpellAbility ability, final GameState game) {
|
public final boolean payHuman(final SpellAbility ability, final GameState game) {
|
||||||
final Card source = ability.getSourceCard();
|
final Card source = ability.getSourceCard();
|
||||||
int manaToAdd = 0;
|
ManaCostBeingPaid toPay = new ManaCostBeingPaid(getManaToPay());
|
||||||
if (!this.hasNoXManaCost()) {
|
|
||||||
|
if (this.getAmountOfX() > 0) {
|
||||||
// if X cost is a defined value, other than xPaid
|
// if X cost is a defined value, other than xPaid
|
||||||
if (!ability.getSVar("X").equals("Count$xPaid")) {
|
if (!ability.getSVar("X").equals("Count$xPaid")) {
|
||||||
// this currently only works for things about Targeted object
|
// this currently only works for things about Targeted object
|
||||||
manaToAdd += AbilityUtils.calculateAmount(source, "X", ability) * this.getAmountOfX();
|
int xCost = AbilityUtils.calculateAmount(source, "X", ability) * this.getAmountOfX();
|
||||||
|
toPay.increaseColorlessMana(xCost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!"0".equals(this.getManaToPay()) || manaToAdd > 0) {
|
if (!toPay.isPaid()) {
|
||||||
InputPayment inpPayment = new InputPayManaOfCostPayment(game, this, ability, manaToAdd);
|
InputPayment inpPayment = new InputPayManaOfCostPayment(game, toPay, ability);
|
||||||
FThreads.setInputAndWait(inpPayment);
|
FThreads.setInputAndWait(inpPayment);
|
||||||
if(!inpPayment.isPaid())
|
if(!inpPayment.isPaid())
|
||||||
return false;
|
return false;
|
||||||
@@ -189,6 +149,15 @@ public class CostPartMana extends CostPart {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.card.cost.CostPart#payAI(forge.card.cost.PaymentDecision, forge.game.player.AIPlayer, forge.card.spellability.SpellAbility, forge.Card)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void payAI(PaymentDecision decision, AIPlayer ai, SpellAbility ability, Card source) {
|
||||||
|
ComputerUtilMana.payManaCost(ai, ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.card.cost.CostPart#decideAIPayment(forge.game.player.AIPlayer, forge.card.spellability.SpellAbility, forge.Card)
|
* @see forge.card.cost.CostPart#decideAIPayment(forge.game.player.AIPlayer, forge.card.spellability.SpellAbility, forge.Card)
|
||||||
*/
|
*/
|
||||||
@@ -196,13 +165,4 @@ public class CostPartMana extends CostPart {
|
|||||||
public PaymentDecision decideAIPayment(AIPlayer ai, SpellAbility ability, Card source) {
|
public PaymentDecision decideAIPayment(AIPlayer ai, SpellAbility ability, Card source) {
|
||||||
return new PaymentDecision(0);
|
return new PaymentDecision(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @param manaCost
|
|
||||||
*/
|
|
||||||
public void setAdjustedMana(ManaCost manaCost) {
|
|
||||||
// this is set when static effects of LodeStone Golems or Thalias are applied
|
|
||||||
adjustedCost = manaCost;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,8 +97,6 @@ public class ManaCostBeingPaid {
|
|||||||
private final ArrayList<String> manaNeededToAvoidNegativeEffect = new ArrayList<String>();
|
private final ArrayList<String> manaNeededToAvoidNegativeEffect = new ArrayList<String>();
|
||||||
private final ArrayList<String> manaPaidToAvoidNegativeEffect = new ArrayList<String>();
|
private final ArrayList<String> manaPaidToAvoidNegativeEffect = new ArrayList<String>();
|
||||||
|
|
||||||
private final ManaCost originalCost;
|
|
||||||
|
|
||||||
// manaCost can be like "0", "3", "G", "GW", "10", "3 GW", "10 GW"
|
// manaCost can be like "0", "3", "G", "GW", "10", "3 GW", "10 GW"
|
||||||
// or "split hybrid mana" like "2/G 2/G", "2/B 2/B 2/B"
|
// or "split hybrid mana" like "2/G 2/G", "2/B 2/B 2/B"
|
||||||
// "GW" can be paid with either G or W
|
// "GW" can be paid with either G or W
|
||||||
@@ -116,7 +114,6 @@ public class ManaCostBeingPaid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ManaCostBeingPaid(ManaCost manaCost) {
|
public ManaCostBeingPaid(ManaCost manaCost) {
|
||||||
originalCost = manaCost;
|
|
||||||
if ( null == manaCost )
|
if ( null == manaCost )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -703,10 +700,6 @@ public class ManaCostBeingPaid {
|
|||||||
return this.manaPaidToAvoidNegativeEffect;
|
return this.manaPaidToAvoidNegativeEffect;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ManaCost getStartingCost() {
|
|
||||||
return originalCost;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final void applySpellCostChange(final SpellAbility sa) {
|
public final void applySpellCostChange(final SpellAbility sa) {
|
||||||
final GameState game = sa.getActivatingPlayer().getGame();
|
final GameState game = sa.getActivatingPlayer().getGame();
|
||||||
// Beached
|
// Beached
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("PayManaBase %s (out of %s)", manaCost.toString(), manaCost.getStartingCost() );
|
return String.format("PayManaBase %s left", manaCost.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleConvokedCards(boolean isCancelled) {
|
protected void handleConvokedCards(boolean isCancelled) {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package forge.control.input;
|
|||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.cost.CostPartMana;
|
|
||||||
import forge.card.mana.ManaCostBeingPaid;
|
import forge.card.mana.ManaCostBeingPaid;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
@@ -11,10 +10,9 @@ import forge.view.ButtonUtil;
|
|||||||
|
|
||||||
public class InputPayManaOfCostPayment extends InputPayManaBase {
|
public class InputPayManaOfCostPayment extends InputPayManaBase {
|
||||||
|
|
||||||
public InputPayManaOfCostPayment(final GameState game, CostPartMana costMana, SpellAbility spellAbility, int toAdd) {
|
public InputPayManaOfCostPayment(final GameState game, ManaCostBeingPaid cost, SpellAbility spellAbility) {
|
||||||
super(spellAbility);
|
super(spellAbility);
|
||||||
manaCost = new ManaCostBeingPaid(costMana.getManaToPay());
|
manaCost = cost;
|
||||||
manaCost.increaseColorlessMana(toAdd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final long serialVersionUID = 3467312982164195091L;
|
private static final long serialVersionUID = 3467312982164195091L;
|
||||||
|
|||||||
Reference in New Issue
Block a user