package forge.card.mana; import forge.gui.input.Input_PayManaCostUtil; //handles mana costs like 2/R or 2/B //for cards like Flame Javelin (Shadowmoor) /** * <p>Mana_PartSplit class.</p> * * @author Forge * @version $Id: $ */ public class Mana_PartSplit extends Mana_Part { private Mana_Part manaPart = null; private String originalCost = ""; /** * <p>Constructor for Mana_PartSplit.</p> * * @param manaCost a {@link java.lang.String} object. */ public Mana_PartSplit(String manaCost) { //is mana cost like "2/R" if (manaCost.length() != 3) throw new RuntimeException( "Mana_PartSplit : constructor() error, bad mana cost parameter - " + manaCost); originalCost = manaCost; } /** * <p>isFirstTime.</p> * * @return a boolean. */ private boolean isFirstTime() { return manaPart == null; } /** * <p>setup.</p> * * @param manaToPay a {@link java.lang.String} object. */ private void setup(String manaToPay) { //get R out of "2/R" String color = originalCost.substring(2, 3); //is manaToPay the one color we want or do we //treat it like colorless? //if originalCost is 2/R and is color W (treated like colorless) //or R? if W use Mana_PartColorless, if R use Mana_PartColor //does manaToPay contain color? if (0 <= manaToPay.indexOf(color)) { manaPart = new Mana_PartColor(color); } else { //get 2 out of "2/R" manaPart = new Mana_PartColorless(originalCost.substring(0, 1)); } }//setup() /** {@inheritDoc} */ @Override public void reduce(String mana) { if (isFirstTime()) setup(mana); manaPart.reduce(mana); } /** {@inheritDoc} */ @Override public void reduce(Mana mana) { if (isFirstTime()) setup(Input_PayManaCostUtil.getShortColorString(mana.getColor())); manaPart.reduce(mana); } /** {@inheritDoc} */ @Override public boolean isNeeded(String mana) { if (isFirstTime()) { //always true because any mana can pay the colorless part of 2/G return true; } return manaPart.isNeeded(mana); }//isNeeded() /** {@inheritDoc} */ public boolean isNeeded(Mana mana) { if (isFirstTime()) { //always true because any mana can pay the colorless part of 2/G return true; } return manaPart.isNeeded(mana); } /** {@inheritDoc} */ @Override public boolean isColor(String mana) { //ManaPart method String mp = toString(); return mp.indexOf(mana) != -1; } /** {@inheritDoc} */ @Override public boolean isColor(Mana mana) { String color = Input_PayManaCostUtil.getShortColorString(mana.getColor()); String mp = toString(); return mp.indexOf(color) != -1; } /** {@inheritDoc} */ @Override public boolean isEasierToPay(Mana_Part mp) { if (mp instanceof Mana_PartColorless) return false; if (!isFirstTime()) return true; return toString().length() >= mp.toString().length(); } /** {@inheritDoc} */ @Override public String toString() { if (isFirstTime()) return originalCost; return manaPart.toString(); } /** {@inheritDoc} */ @Override public boolean isPaid() { if (isFirstTime()) return false; return manaPart.isPaid(); } /** {@inheritDoc} */ @Override public int getConvertedManaCost() { // grab the colorless portion of the split cost (usually 2, but possibly more later) return Integer.parseInt(originalCost.substring(0, 1)); } }