- Cleanup in GameAction and GameActionUtil.

This commit is contained in:
Sloth
2012-07-16 20:02:26 +00:00
parent 63239da00e
commit 8eb19fa64c
4 changed files with 117 additions and 239 deletions

View File

@@ -7907,9 +7907,6 @@ public class Card extends GameEntity implements Comparable<Card> {
damageToAdd = this.replaceDamage(damageToAdd, source, true);
damageToAdd = this.preventDamage(damageToAdd, source, true);
if ((damageToAdd > 0) && this.isCreature()) {
GameActionUtil.executeCombatDamageToCreatureEffects(source, this, damageToAdd);
}
map.put(source, damageToAdd);
}

View File

@@ -30,8 +30,6 @@ import forge.card.abilityfactory.AbilityFactoryAttach;
import forge.card.abilityfactory.AbilityFactoryCharm;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostMana;
import forge.card.cost.CostPart;
import forge.card.cost.CostPayment;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostShard;
@@ -41,7 +39,6 @@ import forge.card.spellability.AbilityStatic;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityRequirements;
import forge.card.spellability.SpellAbilityRestriction;
import forge.card.spellability.Target;
import forge.card.spellability.TargetSelection;
import forge.card.staticability.StaticAbility;
@@ -365,37 +362,6 @@ public class GameAction {
return c;
}
/*
* public void changeController(CardList list, Player oldController, Player
* newController) { if (oldController.equals(newController)) return;
*
* // Consolidating this code for now. In the future I want moveTo to handle
* this garbage PlayerZone oldBattlefield =
* oldController.getZone(Constant.Zone.Battlefield); PlayerZone
* newBattlefield = newController.getZone(Constant.Zone.Battlefield);
*
* AllZone.getTriggerHandler().suppressMode("ChangesZone");
* ((PlayerZone_ComesIntoPlay)
* AllZone.getHumanPlayer().getZone(Zone.Battlefield)).setTriggers(false);
* ((PlayerZone_ComesIntoPlay)
* AllZone.getComputerPlayer().getZone(Zone.Battlefield
* )).setTriggers(false); //so "enters the battlefield" abilities don't
* trigger
*
* for (Card c : list) { int turnInZone = c.getTurnInZone();
* oldBattlefield.remove(c); c.setController(newController);
* newBattlefield.add(c); //set summoning sickness c.setSickness(true);
* c.setTurnInZone(turnInZone); // The number of turns in the zone should
* not change if (c.isCreature()) AllZone.getCombat().removeFromCombat(c); }
*
* AllZone.getTriggerHandler().clearSuppression("ChangesZone");
* ((PlayerZone_ComesIntoPlay)
* AllZone.getHumanPlayer().getZone(Zone.Battlefield)).setTriggers(true);
* ((PlayerZone_ComesIntoPlay)
* AllZone.getComputerPlayer().getZone(Zone.Battlefield)).setTriggers(true);
* }
*/
/**
* Controller change zone correction.
*
@@ -1540,118 +1506,7 @@ public class GameAction {
private boolean startCut = false;
/**
* <p>
* getAlternativeCosts.
* </p>
*
* @param sa
* a SpellAbility.
* @return an ArrayList<SpellAbility>.
* get alternative costs as additional spell abilities
*/
public static final ArrayList<SpellAbility> getAlternativeCosts(SpellAbility sa) {
ArrayList<SpellAbility> alternatives = new ArrayList<SpellAbility>();
Card source = sa.getSourceCard();
if (!sa.isBasicSpell()) {
return alternatives;
}
for (final String keyword : source.getKeyword()) {
if (sa.isSpell() && keyword.startsWith("Flashback")) {
final SpellAbility flashback = sa.copy();
flashback.setFlashBackAbility(true);
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setZone(ZoneType.Graveyard);
flashback.setRestrictions(sar);
// there is a flashback cost (and not the cards cost)
if (!keyword.equals("Flashback")) {
final Cost fbCost = new Cost(source, keyword.substring(10), false);
flashback.setPayCosts(fbCost);
}
alternatives.add(flashback);
}
if (sa.isSpell() && keyword.equals("May be played without paying its mana cost")) {
final SpellAbility newSA = sa.copy();
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setZone(null);
newSA.setRestrictions(sar);
final Cost cost = new Cost(source, "", false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (without paying its mana cost)");
alternatives.add(newSA);
}
if (sa.isSpell() && keyword.equals("May be played by your opponent without paying its mana cost")) {
final SpellAbility newSA = sa.copy();
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setZone(null);
sar.setOpponentOnly(true);
newSA.setRestrictions(sar);
final Cost cost = new Cost(source, "", false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (without paying its mana cost)");
alternatives.add(newSA);
}
if (sa.isSpell() && keyword.startsWith("May be played without paying its mana cost and as though it has flash")) {
final SpellAbility newSA = sa.copy();
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setInstantSpeed(true);
newSA.setRestrictions(sar);
final Cost cost = new Cost(source, "", false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (without paying its mana cost and as though it has flash)");
alternatives.add(newSA);
}
if (sa.isSpell() && keyword.startsWith("Alternative Cost")) {
final SpellAbility newSA = sa.copy();
final Cost cost = new Cost(source, keyword.substring(17), false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (by paying " + keyword.substring(17) + " instead of its mana cost)");
alternatives.add(newSA);
}
}
return alternatives;
}
/**
* <p>
@@ -1678,7 +1533,7 @@ public class GameAction {
}
for (SpellAbility sa : basicAbilities) {
//add alternative costs as additional spell abilities
abilities.addAll(getAlternativeCosts(sa));
abilities.addAll(GameActionUtil.getAlternativeCosts(sa));
}
for (final SpellAbility sa : abilities) {
sa.setActivatingPlayer(human);
@@ -2295,31 +2150,6 @@ public class GameAction {
}
}
/**
* <p>
* canPlaySpellAbility.
* </p>
*
* @param sa
* an array of {@link forge.card.spellability.SpellAbility}
* objects.
* @return an array of {@link forge.card.spellability.SpellAbility} objects.
*/
public final SpellAbility[] canPlaySpellAbility(final SpellAbility[] sa) {
final ArrayList<SpellAbility> list = new ArrayList<SpellAbility>();
for (final SpellAbility element : sa) {
element.setActivatingPlayer(AllZone.getHumanPlayer());
if (element.canPlay()) {
list.add(element);
}
}
final SpellAbility[] array = new SpellAbility[list.size()];
list.toArray(array);
return array;
} // canPlaySpellAbility()
/**
* <p>
* setComputerCut.

View File

@@ -30,11 +30,10 @@ import forge.card.cost.CostPayLife;
import forge.card.cost.CostMana;
import forge.card.cost.CostSacrifice;
import forge.card.spellability.Ability;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilityMana;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.card.spellability.SpellAbilityRestriction;
import forge.control.input.InputPayManaCostAbility;
import forge.control.input.InputPayManaCostUtil;
import forge.control.input.InputPaySacCost;
@@ -46,7 +45,6 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiUtils;
import forge.gui.match.CMatchUI;
import forge.util.MyRandom;
import forge.view.ButtonUtil;
/**
* <p>
@@ -649,29 +647,6 @@ public final class GameActionUtil {
}
// restricted to combat damage and dealing damage to creatures
/**
* <p>
* executeCombatDamageToCreatureEffects.
* </p>
*
* @param source
* a {@link forge.Card} object.
* @param affected
* a {@link forge.Card} object.
* @param damage
* a int.
*/
public static void executeCombatDamageToCreatureEffects(final Card source, final Card affected, final int damage) {
if (damage <= 0) {
return;
}
// placeholder for any future needs (everything that was here is
// converted to script)
}
// not restricted to combat damage, restricted to dealing damage to
// creatures
/**
@@ -915,12 +890,6 @@ public final class GameActionUtil {
}
}
/*if ((CardFactoryUtil.hasNumberEquipments(c, "Quietus Spike") > 0) && (c.getNetAttack() > 0)) {
for (int k = 0; k < CardFactoryUtil.hasNumberEquipments(c, "Quietus Spike"); k++) {
GameActionUtil.playerCombatDamageLoseHalfLifeUp(c);
}
}*/
if (c.getName().equals("Scalpelexis")) {
GameActionUtil.playerCombatDamageScalpelexis(c);
} else if (c.getName().equals("Spawnwrithe")) {
@@ -935,7 +904,6 @@ public final class GameActionUtil {
if (player.isPlayer(AllZone.getComputerPlayer())) {
c.getDamageHistory().setDealtCombatDmgToComputerThisTurn(true);
}
} // executeCombatDamageToPlayerEffects
/**
@@ -1004,35 +972,6 @@ public final class GameActionUtil {
} // if
}
/**
* <p>
* playerCombatDamageLoseHalfLifeUp.
* </p>
*
* @param c
* a {@link forge.Card} object.
*/
private static void playerCombatDamageLoseHalfLifeUp(final Card c) {
final Player player = c.getController().getOpponent();
if (c.getNetAttack() > 0) {
final Ability ability2 = new Ability(c, "0") {
@Override
public void resolve() {
int x = (int) Math.ceil(player.getLife() / 2.0);
player.loseLife(x, c);
}
}; // ability2
final StringBuilder sb = new StringBuilder();
sb.append(c.getName()).append(" - ").append(player);
sb.append(" loses half his or her life, rounded up.");
ability2.setStackDescription(sb.toString());
AllZone.getStack().addSimultaneousStackEntry(ability2);
}
}
/**
* <p>
* playerCombatDamageScalpelexis.
@@ -1835,4 +1774,116 @@ public final class GameActionUtil {
GameActionUtil.stLandManaAbilities = stLandManaAbilitiesIn;
}
/**
* <p>
* getAlternativeCosts.
* </p>
*
* @param sa
* a SpellAbility.
* @return an ArrayList<SpellAbility>.
* get alternative costs as additional spell abilities
*/
public static final ArrayList<SpellAbility> getAlternativeCosts(SpellAbility sa) {
ArrayList<SpellAbility> alternatives = new ArrayList<SpellAbility>();
Card source = sa.getSourceCard();
if (!sa.isBasicSpell()) {
return alternatives;
}
for (final String keyword : source.getKeyword()) {
if (sa.isSpell() && keyword.startsWith("Flashback")) {
final SpellAbility flashback = sa.copy();
flashback.setFlashBackAbility(true);
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setZone(ZoneType.Graveyard);
flashback.setRestrictions(sar);
// there is a flashback cost (and not the cards cost)
if (!keyword.equals("Flashback")) {
final Cost fbCost = new Cost(source, keyword.substring(10), false);
flashback.setPayCosts(fbCost);
}
alternatives.add(flashback);
}
if (sa.isSpell() && keyword.equals("May be played without paying its mana cost")) {
final SpellAbility newSA = sa.copy();
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setZone(null);
newSA.setRestrictions(sar);
final Cost cost = new Cost(source, "", false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (without paying its mana cost)");
alternatives.add(newSA);
}
if (sa.isSpell() && keyword.equals("May be played by your opponent without paying its mana cost")) {
final SpellAbility newSA = sa.copy();
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setZone(null);
sar.setOpponentOnly(true);
newSA.setRestrictions(sar);
final Cost cost = new Cost(source, "", false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (without paying its mana cost)");
alternatives.add(newSA);
}
if (sa.isSpell() && keyword.startsWith("May be played without paying its mana cost and as though it has flash")) {
final SpellAbility newSA = sa.copy();
SpellAbilityRestriction sar = new SpellAbilityRestriction();
sar.setVariables(sa.getRestrictions());
sar.setInstantSpeed(true);
newSA.setRestrictions(sar);
final Cost cost = new Cost(source, "", false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (without paying its mana cost and as though it has flash)");
alternatives.add(newSA);
}
if (sa.isSpell() && keyword.startsWith("Alternative Cost")) {
final SpellAbility newSA = sa.copy();
final Cost cost = new Cost(source, keyword.substring(17), false);
if (newSA.getPayCosts() != null) {
for (final CostPart part : newSA.getPayCosts().getCostParts()) {
if (!(part instanceof CostMana)) {
cost.getCostParts().add(part);
}
}
}
newSA.setBasicSpell(false);
newSA.setPayCosts(cost);
newSA.setManaCost("");
newSA.setDescription(sa.getDescription() + " (by paying " + keyword.substring(17) + " instead of its mana cost)");
alternatives.add(newSA);
}
}
return alternatives;
}
} // end class GameActionUtil

View File

@@ -29,7 +29,7 @@ import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.GameAction;
import forge.GameActionUtil;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.cardfactory.CardFactoryUtil;
@@ -77,7 +77,7 @@ public class ComputerUtil {
final ArrayList<SpellAbility> abilities = new ArrayList<SpellAbility>();
for (SpellAbility sa : all) {
//add alternative costs as additional spell abilities
abilities.addAll(GameAction.getAlternativeCosts(sa));
abilities.addAll(GameActionUtil.getAlternativeCosts(sa));
abilities.add(sa);
}
for (final SpellAbility sa : abilities) {
@@ -256,7 +256,7 @@ public class ComputerUtil {
final ArrayList<SpellAbility> abilities = new ArrayList<SpellAbility>();
for (SpellAbility sa : possibleCounters) {
//add alternative costs as additional spell abilities
abilities.addAll(GameAction.getAlternativeCosts(sa));
abilities.addAll(GameActionUtil.getAlternativeCosts(sa));
abilities.add(sa);
}
for (final SpellAbility sa : abilities) {