mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Tokens are given image prefix on creation through TokenEffect
This commit is contained in:
@@ -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,8 +201,12 @@ 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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,10 +75,14 @@ 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[] { "" });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user