AbilityFactory & CharmEffect: do create the SpellDescription from its Choices

This commit is contained in:
Hanmac
2016-07-26 16:59:04 +00:00
parent 2f5102d01d
commit e8b78e65dd
2 changed files with 34 additions and 0 deletions

View File

@@ -18,6 +18,7 @@
package forge.game.ability; package forge.game.ability;
import forge.card.CardStateName; import forge.card.CardStateName;
import forge.game.ability.effects.CharmEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.spellability.*; import forge.game.spellability.*;
@@ -202,6 +203,8 @@ public final class AbilityFactory {
sb.append(mapParams.get("SpellDescription")); sb.append(mapParams.get("SpellDescription"));
spellAbility.setDescription(sb.toString()); spellAbility.setDescription(sb.toString());
} else if (api == ApiType.Charm) {
spellAbility.setDescription(CharmEffect.makeSpellDescription(spellAbility));
} else { } else {
spellAbility.setDescription(""); spellAbility.setDescription("");
} }

View File

@@ -7,6 +7,7 @@ import forge.game.card.Card;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.AbilitySub; import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.Lang;
import forge.util.collect.FCollection; import forge.util.collect.FCollection;
import java.util.ArrayList; import java.util.ArrayList;
@@ -50,6 +51,36 @@ public class CharmEffect extends SpellAbilityEffect {
return choices; return choices;
} }
public static String makeSpellDescription(SpellAbility sa) {
int num = Integer.parseInt(sa.getParamOrDefault("CharmNum", "1"));
int min = Integer.parseInt(sa.getParamOrDefault("MinCharmNum", String.valueOf(num)));
boolean repeat = sa.hasParam("CanRepeatModes");
List<AbilitySub> list = CharmEffect.makePossibleOptions(sa);
StringBuilder sb = new StringBuilder("Choose ");
if (num == min) {
sb.append(Lang.getNumeral(num));
} else {
sb.append(Lang.getNumeral(min)).append(" or ").append(list.size() == 2 ? "both" : "more");
}
if (repeat) {
sb.append(". You may choose the same mode more than once.");
}
sb.append(" - ");
int i = 0;
for (AbilitySub sub : list) {
if (i > 0) {
sb.append("; ");
}
sb.append(sub.getParam("SpellDescription"));
++i;
}
return sb.toString();
}
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
// all chosen modes have been chained as subabilities to this sa. // all chosen modes have been chained as subabilities to this sa.