Tokens are given image prefix on creation through TokenEffect

This commit is contained in:
Maxmtg
2013-03-17 21:02:48 +00:00
parent 296fdd85d7
commit 0c37c77373
4 changed files with 61 additions and 86 deletions

View File

@@ -25,10 +25,11 @@ import forge.Singletons;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cardfactory.CardFactory;
import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
import forge.game.event.TokenCreatedEvent;
import forge.game.player.Player;
import forge.item.CardToken;
@@ -200,9 +201,13 @@ public class TokenEffect extends SpellAbilityEffect {
final String remember = sa.getParam("RememberTokens");
for (final Player controller : AbilityUtils.getDefinedPlayers(host, this.tokenOwner, sa)) {
for (int i = 0; i < finalAmount; i++) {
final List<Card> tokens = CardFactoryUtil.makeToken(substitutedName, imageName, controller, cost,
final List<Card> tokens = CardFactory.makeToken(substitutedName, imageName, controller, cost,
substitutedTypes, finalPower, finalToughness, this.tokenKeywords);
for(Card tok : tokens) {
Singletons.getModel().getGame().getAction().moveToPlay(tok);
}
Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent());
// Grant rule changes
if (this.tokenHiddenKeywords != null) {
for (final String s : this.tokenHiddenKeywords) {

View File

@@ -28,6 +28,7 @@ import forge.CardColor;
import forge.CardUtil;
import forge.Color;
import forge.ImageCache;
import forge.Singletons;
import forge.card.CardCharacteristics;
import forge.card.CardRules;
import forge.card.CardSplitType;
@@ -41,6 +42,7 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
import forge.card.trigger.TriggerHandler;
import forge.game.event.TokenCreatedEvent;
import forge.game.player.Player;
import forge.item.CardDb;
import forge.item.CardPrinted;
@@ -510,4 +512,40 @@ public class CardFactory {
}
}
public static List<Card> makeToken(final String name, final String imageName, final Player controller,
final String manaCost, final String[] types, final int baseAttack, final int baseDefense,
final String[] intrinsicKeywords) {
final List<Card> list = new ArrayList<Card>();
final Card c = new Card();
c.setName(name);
c.setImageKey(ImageCache.TOKEN_PREFIX + imageName);
// TODO - most tokens mana cost is 0, this needs to be fixed
// c.setManaCost(manaCost);
c.addColor(manaCost);
c.setToken(true);
for (final String t : types) {
c.addType(t);
}
c.setBaseAttack(baseAttack);
c.setBaseDefense(baseDefense);
final int multiplier = controller.getTokenDoublersMagnitude();
for (int i = 0; i < multiplier; i++) {
Card temp = copyStats(c);
for (final String kw : intrinsicKeywords) {
temp.addIntrinsicKeyword(kw);
}
temp.setOwner(controller);
temp.setToken(true);
CardFactoryUtil.parseKeywords(temp, temp.getName());
CardFactoryUtil.setupKeywordedAbilities(temp);
list.add(temp);
}
return list;
}
} // end class AbstractCardFactory

View File

@@ -52,6 +52,7 @@ import forge.control.input.Input;
import forge.control.input.InputSelectManyCards;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.event.TokenCreatedEvent;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
@@ -74,11 +75,15 @@ public class CardFactoryCreatures {
final Ability ability = new Ability(card, ManaCost.ZERO) {
@Override
public void resolve() {
final List<Card> cl = CardFactoryUtil.makeToken("Stangg Twin",
final List<Card> cl = CardFactory.makeToken("Stangg Twin",
CardToken.makeTokenFileName("RG", 3, 4, "Stangg Twin"),
card.getController(), "R G", new String[] { "Legendary", "Creature", "Human", "Warrior" },
3, 4, new String[] { "" });
for(Card tok : cl) {
Singletons.getModel().getGame().getAction().moveToPlay(tok);
}
Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent());
cl.get(0).addLeavesPlayCommand(new Command() {
private static final long serialVersionUID = 3367390368512271319L;
@@ -369,13 +374,18 @@ public class CardFactoryCreatures {
final SpellAbility ability2 = new Ability(card, ManaCost.ZERO) {
@Override
public void resolve() {
int n = card.sumAllCounters();
for (int i = 0; i < card.sumAllCounters(); i++) {
this.makeToken();
for(Card tok : this.makeToken()) {
Singletons.getModel().getGame().getAction().moveToPlay(tok);
}
}
if (n > 0)
Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent());
} // resolve()
public void makeToken() {
CardFactoryUtil.makeToken("Kithkin Soldier", CardToken.makeTokenFileName("W", 1, 1, "Kithkin Soldier"),
public List<Card> makeToken() {
return CardFactory.makeToken("Kithkin Soldier", CardToken.makeTokenFileName("W", 1, 1, "Kithkin Soldier"),
card.getController(), "W", new String[] { "Creature", "Kithkin", "Soldier" }, 1, 1, new String[] { "" });
}
};

View File

@@ -68,7 +68,6 @@ import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCost;
import forge.game.event.TokenCreatedEvent;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.AIPlayer;
@@ -2436,83 +2435,6 @@ public class CardFactoryUtil {
return true;
}
public static List<Card> makeToken(final String name, final String imageName, final Player controller,
final String manaCost, final String[] types, final int baseAttack, final int baseDefense,
final String[] intrinsicKeywords) {
final List<Card> list = new ArrayList<Card>();
final Card c = new Card();
c.setName(name);
c.setImageKey(imageName);
// TODO - most tokens mana cost is 0, this needs to be fixed
// c.setManaCost(manaCost);
c.addColor(manaCost);
c.setToken(true);
for (final String t : types) {
c.addType(t);
}
c.setBaseAttack(baseAttack);
c.setBaseDefense(baseDefense);
final int multiplier = controller.getTokenDoublersMagnitude();
for (int i = 0; i < multiplier; i++) {
Card temp = CardFactory.copyStats(c);
for (final String kw : intrinsicKeywords) {
temp.addIntrinsicKeyword(kw);
}
temp.setOwner(controller);
temp.setToken(true);
CardFactoryUtil.parseKeywords(temp, temp.getName());
CardFactoryUtil.setupKeywordedAbilities(temp);
Singletons.getModel().getGame().getAction().moveToPlay(temp);
list.add(temp);
}
Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent());
return list;
}
/**
* <p>
* copyTokens.
* </p>
*
* @param tokenList
* a {@link forge.CardList} object.
* @return a {@link forge.CardList} object.
*/
public static List<Card> copyTokens(final List<Card> tokenList) {
final List<Card> list = new ArrayList<Card>();
for (Card thisToken : tokenList) {
list.addAll(copySingleToken(thisToken));
}
return list;
}
public static List<Card> copySingleToken(Card thisToken) {
final ArrayList<String> tal = thisToken.getType();
final String[] tokenTypes = new String[tal.size()];
tal.toArray(tokenTypes);
final List<String> kal = thisToken.getIntrinsicKeyword();
final String[] tokenKeywords = new String[kal.size()];
kal.toArray(tokenKeywords);
final List<Card> tokens = CardFactoryUtil.makeToken(thisToken.getName(), thisToken.getImageKey(),
thisToken.getController(), thisToken.getManaCost().toString(), tokenTypes, thisToken.getBaseAttack(),
thisToken.getBaseDefense(), tokenKeywords);
for (final Card token : tokens) {
token.setColor(thisToken.getColor());
}
return tokens;
}
/**
* <p>
* getBushidoEffects.