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:
Maxmtg
2013-04-03 18:16:18 +00:00
parent 7d3ee5635a
commit a787b9a075
5 changed files with 46 additions and 94 deletions

View File

@@ -294,8 +294,6 @@ public class AbilityUtils {
if (StringUtils.isBlank(amount)) return 0; if (StringUtils.isBlank(amount)) return 0;
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) == '-';
@@ -303,6 +301,9 @@ public class AbilityUtils {
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

View File

@@ -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;
@@ -186,9 +146,18 @@ 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) /* (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;
}
} }

View File

@@ -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

View File

@@ -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) {

View File

@@ -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;