mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
AF:Charm makes choices on being cast
remove unused imports
This commit is contained in:
@@ -30,7 +30,9 @@ import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.abilityfactory.AbilityFactory;
|
||||
import forge.card.abilityfactory.ApiType;
|
||||
import forge.card.abilityfactory.effects.AttachEffect;
|
||||
import forge.card.abilityfactory.effects.CharmEffect;
|
||||
import forge.card.cardfactory.CardFactoryUtil;
|
||||
import forge.card.cost.Cost;
|
||||
import forge.card.cost.CostPayment;
|
||||
@@ -1954,6 +1956,11 @@ public class GameAction {
|
||||
public final void playSpellAbility(SpellAbility sa) {
|
||||
sa.setActivatingPlayer(Singletons.getControl().getPlayer());
|
||||
|
||||
AbilityFactory af = sa.getAbilityFactory();
|
||||
if (af != null && af.getAPI() == ApiType.Charm && !sa.isWrapper()) {
|
||||
CharmEffect.makeChoices(sa);
|
||||
}
|
||||
|
||||
sa = GameAction.chooseOptionalAdditionalCosts(sa);
|
||||
|
||||
if (sa == null) {
|
||||
|
||||
@@ -17,6 +17,7 @@ public enum ApiType {
|
||||
Bond ( BondEffect.class, BondAi.class ),
|
||||
ChangeZone(null, null), // not converted
|
||||
ChangeZoneAll(ChangeZoneAllEffect.class, ChangeZoneAllAi.class), // classes extracted but not converted
|
||||
/** This is <b>Modal</b>, like 'choose one - ' or 'choose two - '. <br> Might be great to rename this api and update all scripts.*/
|
||||
Charm(CharmEffect.class, CharmAi.class),
|
||||
ChooseCard ( ChooseCardEffect.class, ChooseCardAi.class ),
|
||||
ChooseColor ( ChooseColorEffect.class, ChooseColorAi.class ),
|
||||
|
||||
@@ -21,7 +21,6 @@ import forge.card.abilityfactory.ApiType;
|
||||
import forge.card.abilityfactory.SpellAiLogic;
|
||||
import forge.card.cardfactory.CardFactoryUtil;
|
||||
import forge.card.cost.Cost;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.card.spellability.Target;
|
||||
import forge.card.staticability.StaticAbility;
|
||||
@@ -495,12 +494,6 @@ public class AttachAi extends SpellAiLogic {
|
||||
}
|
||||
}
|
||||
|
||||
// check SubAbilities DoTrigger?
|
||||
final AbilitySub abSub = sa.getSubAbility();
|
||||
if (abSub != null) {
|
||||
return abSub.doTrigger(mandatory);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,25 @@ public class CharmEffect extends SpellEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
|
||||
// all chosen modes have been chained as subabilities to this sa.
|
||||
// so nothing to do in this resolve
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
// nothing stack specific for Charm
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static void makeChoices(SpellAbility sa) {
|
||||
AbilityFactory af = sa.getAbilityFactory();
|
||||
final Map<String, String> params = af.getMapParams();
|
||||
//this resets all previous choices
|
||||
sa.setSubAbility(null);
|
||||
|
||||
final int num = Integer.parseInt(params.containsKey("CharmNum") ? params.get("CharmNum") : "1");
|
||||
final int min = params.containsKey("MinCharmNum") ? Integer.parseInt(params.get("MinCharmNum")) : num;
|
||||
final List<AbilitySub> choices = makePossibleOptions(sa, params);
|
||||
@@ -59,21 +77,24 @@ public class CharmEffect extends SpellEffect {
|
||||
else
|
||||
chosen = CharmAi.chooseOptionsAi(activator, true, choices, num, min);
|
||||
|
||||
// if ( null == chosen) throw Exception! // only AI might return no list at all
|
||||
for(AbilitySub as : chosen)
|
||||
{
|
||||
as.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
AbilityFactory.resolve(as, false);
|
||||
chainAbilities(sa, chosen);
|
||||
}
|
||||
|
||||
private static void chainAbilities(SpellAbility sa, List<AbilitySub> chosen) {
|
||||
SpellAbility saDeepest = sa;
|
||||
while( saDeepest.getSubAbility() != null)
|
||||
saDeepest = saDeepest.getSubAbility();
|
||||
|
||||
for(AbilitySub sub : chosen){
|
||||
saDeepest.setSubAbility(sub);
|
||||
sub.setActivatingPlayer(saDeepest.getActivatingPlayer());
|
||||
sub.setParent(saDeepest);
|
||||
|
||||
// to chain the next one
|
||||
saDeepest = sub;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
// nothing stack specific for Charm
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -11,7 +11,6 @@ import forge.GameEntity;
|
||||
import forge.Singletons;
|
||||
import forge.card.abilityfactory.SpellEffect;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.card.spellability.Target;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ import forge.Command;
|
||||
import forge.GameActionUtil;
|
||||
import forge.Singletons;
|
||||
import forge.card.abilityfactory.AbilityFactory;
|
||||
import forge.card.abilityfactory.ApiType;
|
||||
import forge.card.abilityfactory.effects.CharmEffect;
|
||||
import forge.card.cost.Cost;
|
||||
import forge.card.spellability.Ability;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
@@ -486,7 +488,13 @@ public class TriggerHandler {
|
||||
sa[0].setActivatingPlayer(p);
|
||||
}
|
||||
sa[0].setStackDescription(sa[0].toString());
|
||||
// TODO - for Charms to supports AI, this needs to be removed
|
||||
// ---TODO - for Charms to supports AI, this needs to be removed
|
||||
//if (sa[0].getActivatingPlayer().isHuman()) {
|
||||
final AbilityFactory af = sa[0].getAbilityFactory();
|
||||
if (af != null && af.getAPI() == ApiType.Charm && !sa[0].isWrapper()) {
|
||||
CharmEffect.makeChoices(sa[0]);
|
||||
}
|
||||
//}
|
||||
boolean mand = false;
|
||||
if (params.containsKey("OptionalDecider")) {
|
||||
sa[0].setOptionalTrigger(true);
|
||||
|
||||
Reference in New Issue
Block a user