mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
add AF_ChooseNumber with Min, Max and Random params accepted. Max is required.
This commit is contained in:
@@ -165,6 +165,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
private String chosenType = "";
|
private String chosenType = "";
|
||||||
private String chosenColor = "";
|
private String chosenColor = "";
|
||||||
private String namedCard = "";
|
private String namedCard = "";
|
||||||
|
private int chosenNumber;
|
||||||
|
|
||||||
private Card cloneOrigin = null;
|
private Card cloneOrigin = null;
|
||||||
private ArrayList<Card> clones = new ArrayList<Card>();
|
private ArrayList<Card> clones = new ArrayList<Card>();
|
||||||
@@ -1355,6 +1356,24 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
public final int getCMC() {
|
public final int getCMC() {
|
||||||
return CardUtil.getConvertedManaCost(manaCost);
|
return CardUtil.getConvertedManaCost(manaCost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Getter for the field <code>chosenNumber</code>.</p>
|
||||||
|
*
|
||||||
|
* @return an int
|
||||||
|
*/
|
||||||
|
public final int getChosenNumber() {
|
||||||
|
return chosenNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Setter for the field <code>chosenNumber</code>.</p>
|
||||||
|
*
|
||||||
|
* @param s an int
|
||||||
|
*/
|
||||||
|
public final void setChosenNumber(final int i) {
|
||||||
|
chosenNumber = i;
|
||||||
|
}
|
||||||
|
|
||||||
//used for cards like Belbe's Portal, Conspiracy, Cover of Darkness, etc.
|
//used for cards like Belbe's Portal, Conspiracy, Cover of Darkness, etc.
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -854,6 +854,16 @@ public class AbilityFactory {
|
|||||||
SA = AbilityFactory_Choose.createDrawbackChooseColor(this);
|
SA = AbilityFactory_Choose.createDrawbackChooseColor(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (API.equals("ChooseNumber")) {
|
||||||
|
if (isAb) {
|
||||||
|
SA = AbilityFactory_Choose.createAbilityChooseNumber(this);
|
||||||
|
} else if (isSp) {
|
||||||
|
SA = AbilityFactory_Choose.createSpellChooseNumber(this);
|
||||||
|
} else if (isDb) {
|
||||||
|
SA = AbilityFactory_Choose.createDrawbackChooseNumber(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if (API.equals("CopyPermanent")) {
|
else if (API.equals("CopyPermanent")) {
|
||||||
if (isAb) {
|
if (isAb) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import forge.card.spellability.Target;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
@@ -585,5 +586,233 @@ public class AbilityFactory_Choose {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// *************************************************************************
|
||||||
|
// ************************* ChooseNumber **********************************
|
||||||
|
// *************************************************************************
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>createAbilityChooseNumber.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @return a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
* @since 1.1.6
|
||||||
|
*/
|
||||||
|
public static SpellAbility createAbilityChooseNumber(final AbilityFactory af) {
|
||||||
|
|
||||||
|
final SpellAbility abChooseNumber = new Ability_Activated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
|
||||||
|
private static final long serialVersionUID = -8268155210011368749L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getStackDescription() {
|
||||||
|
return chooseNumberStackDescription(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
return chooseNumberCanPlayAI(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
chooseNumberResolve(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean doTrigger(final boolean mandatory) {
|
||||||
|
return chooseNumberTriggerAI(af, this, mandatory);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return abChooseNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>createSpellChooseNumber.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @return a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
* @since 1.1.6
|
||||||
|
*/
|
||||||
|
public static SpellAbility createSpellChooseNumber(final AbilityFactory af) {
|
||||||
|
final SpellAbility spChooseNumber = new Spell(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
|
||||||
|
private static final long serialVersionUID = 6397887501014311392L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getStackDescription() {
|
||||||
|
return chooseNumberStackDescription(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
return chooseNumberCanPlayAI(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
chooseNumberResolve(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return spChooseNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>createDrawbackChooseNumber.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @return a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
* @since 1.1.6
|
||||||
|
*/
|
||||||
|
public static SpellAbility createDrawbackChooseNumber(final AbilityFactory af) {
|
||||||
|
final SpellAbility dbChooseNumber = new Ability_Sub(af.getHostCard(), af.getAbTgt()) {
|
||||||
|
private static final long serialVersionUID = -1339609900364066904L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getStackDescription() {
|
||||||
|
return chooseNumberStackDescription(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
chooseNumberResolve(af, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean chkAI_Drawback() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean doTrigger(final boolean mandatory) {
|
||||||
|
return chooseNumberTriggerAI(af, this, mandatory);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return dbChooseNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>chooseNumberStackDescription.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @param sa a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
* @return a {@link java.lang.String} object.
|
||||||
|
*/
|
||||||
|
private static String chooseNumberStackDescription(final AbilityFactory af, final SpellAbility sa) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
if (sa instanceof Ability_Sub) {
|
||||||
|
sb.append(" ");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sb.append(sa.getSourceCard()).append(" - ");
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<Player> tgtPlayers;
|
||||||
|
|
||||||
|
Target tgt = af.getAbTgt();
|
||||||
|
if (tgt != null) {
|
||||||
|
tgtPlayers = tgt.getTargetPlayers();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), af.getMapParams().get("Defined"), sa);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player p : tgtPlayers) {
|
||||||
|
sb.append(p).append(" ");
|
||||||
|
}
|
||||||
|
sb.append("chooses a number.");
|
||||||
|
|
||||||
|
Ability_Sub abSub = sa.getSubAbility();
|
||||||
|
if (abSub != null) {
|
||||||
|
sb.append(abSub.getStackDescription());
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>chooseNumberCanPlayAI.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @param sa a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
private static boolean chooseNumberCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||||
|
return chooseNumberTriggerAI(af, sa, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>chooseNumberTriggerAI.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @param sa a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
* @param mandatory a boolean.
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
private static boolean chooseNumberTriggerAI(final AbilityFactory af, final SpellAbility sa,
|
||||||
|
final boolean mandatory)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>chooseNumberResolve.</p>
|
||||||
|
*
|
||||||
|
* @param af a {@link forge.card.abilityFactory.AbilityFactory} object.
|
||||||
|
* @param sa a {@link forge.card.spellability.SpellAbility} object.
|
||||||
|
*/
|
||||||
|
private static void chooseNumberResolve(final AbilityFactory af, final SpellAbility sa) {
|
||||||
|
HashMap<String, String> params = af.getMapParams();
|
||||||
|
Card card = af.getHostCard();
|
||||||
|
int min = params.containsKey("Min") ? Integer.parseInt(params.get("Min")) : 0;
|
||||||
|
int max = Integer.parseInt(params.get("Max"));
|
||||||
|
boolean random = params.containsKey("Random");
|
||||||
|
|
||||||
|
String[] choices = new String[max + 1];
|
||||||
|
if (!random) {
|
||||||
|
//initialize the array
|
||||||
|
for (int i = min; i <= max; i++) {
|
||||||
|
choices[i] = "" + i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<Player> tgtPlayers;
|
||||||
|
|
||||||
|
Target tgt = af.getAbTgt();
|
||||||
|
if (tgt != null) {
|
||||||
|
tgtPlayers = tgt.getTargetPlayers();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player p : tgtPlayers) {
|
||||||
|
if (tgt == null || p.canTarget(sa)) {
|
||||||
|
if (sa.getActivatingPlayer().isHuman()) {
|
||||||
|
int chosen;
|
||||||
|
if (random) {
|
||||||
|
//TODO - display the random number that was chosen
|
||||||
|
Random randomGen = new Random();
|
||||||
|
chosen = randomGen.nextInt(max - min) + min;
|
||||||
|
String message = "Randomly chosen number: " + chosen;
|
||||||
|
JOptionPane.showMessageDialog(null, message, "" + card, JOptionPane.PLAIN_MESSAGE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object o = GuiUtils.getChoice("Choose a number", choices);
|
||||||
|
if (null == o) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chosen = Integer.parseInt((String) o);
|
||||||
|
}
|
||||||
|
card.setChosenNumber(chosen);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//TODO - not implemented
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} //end class AbilityFactory_Choose
|
} //end class AbilityFactory_Choose
|
||||||
|
|||||||
Reference in New Issue
Block a user