package forge.gui.input;
import forge.*;
import forge.card.mana.ManaCost;
import forge.card.spellability.SpellAbility;
//if cost is paid, Command.execute() is called
/**
* <p>Input_PayManaCost_Ability class.</p>
*
* @author Forge
* @version $Id: $
*/
public class Input_PayManaCost_Ability extends Input {
/**
* Constant <code>serialVersionUID=3836655722696348713L</code>
*/
private static final long serialVersionUID = 3836655722696348713L;
private String originalManaCost;
private String message = "";
private ManaCost manaCost;
private SpellAbility fakeAbility;
private Command paidCommand;
private Command unpaidCommand;
//only used for X costs:
private boolean showOnlyOKButton = false;
/**
* <p>Constructor for Input_PayManaCost_Ability.</p>
*
* @param manaCost a {@link java.lang.String} object.
* @param paid a {@link forge.Command} object.
*/
public Input_PayManaCost_Ability(String manaCost, Command paid) {
this(manaCost, paid, Command.Blank);
}
/**
* <p>Constructor for Input_PayManaCost_Ability.</p>
*
* @param manaCost_2 a {@link java.lang.String} object.
* @param paidCommand_2 a {@link forge.Command} object.
* @param unpaidCommand_2 a {@link forge.Command} object.
*/
public Input_PayManaCost_Ability(String manaCost_2, Command paidCommand_2, Command unpaidCommand_2) {
this("", manaCost_2, paidCommand_2, unpaidCommand_2);
}
/**
* <p>Constructor for Input_PayManaCost_Ability.</p>
*
* @param m a {@link java.lang.String} object.
* @param manaCost_2 a {@link java.lang.String} object.
* @param paidCommand_2 a {@link forge.Command} object.
* @param unpaidCommand_2 a {@link forge.Command} object.
*/
public Input_PayManaCost_Ability(String m, String manaCost_2, Command paidCommand_2, Command unpaidCommand_2) {
this(m, manaCost_2, paidCommand_2, unpaidCommand_2, false);
}
/**
* <p>Constructor for Input_PayManaCost_Ability.</p>
*
* @param m a {@link java.lang.String} object.
* @param manaCost_2 a {@link java.lang.String} object.
* @param paidCommand_2 a {@link forge.Command} object.
* @param unpaidCommand_2 a {@link forge.Command} object.
* @param showOKButton a boolean.
*/
public Input_PayManaCost_Ability(String m, String manaCost_2, Command paidCommand_2, Command unpaidCommand_2, boolean showOKButton) {
fakeAbility = new SpellAbility(SpellAbility.Ability, null) {
@Override
public void resolve() {
}
@Override
public boolean canPlay() {
return false;
}
};
originalManaCost = manaCost_2;
message = m;
manaCost = new ManaCost(originalManaCost);
paidCommand = paidCommand_2;
unpaidCommand = unpaidCommand_2;
showOnlyOKButton = showOKButton;
}
/**
* <p>resetManaCost.</p>
*/
public void resetManaCost() {
manaCost = new ManaCost(originalManaCost);
}
/** {@inheritDoc} */
@Override
public void selectCard(Card card, PlayerZone zone) {
//only tap card if the mana is needed
manaCost = Input_PayManaCostUtil.activateManaAbility(fakeAbility, card, manaCost);
showMessage();
if (manaCost.isPaid()) {
resetManaCost();
AllZone.getManaPool().clearPay(fakeAbility, false);
paidCommand.execute();
AllZone.getInputControl().resetInput();
}
}
/** {@inheritDoc} */
@Override
public void selectButtonCancel() {
resetManaCost();
AllZone.getManaPool().unpaid(fakeAbility, true);
unpaidCommand.execute();
AllZone.getInputControl().resetInput();
}
/** {@inheritDoc} */
@Override
public void selectButtonOK() {
if (showOnlyOKButton) {
unpaidCommand.execute();
AllZone.getInputControl().resetInput();
}
}
/** {@inheritDoc} */
@Override
public void showMessage() {
ButtonUtil.enableOnlyCancel();
if (showOnlyOKButton)
ButtonUtil.enableOnlyOK();
AllZone.getDisplay().showMessage(message + "Pay Mana Cost: \r\n" + manaCost.toString());
}
}