mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +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 com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
|
import forge.card.abilityfactory.ApiType;
|
||||||
import forge.card.abilityfactory.effects.AttachEffect;
|
import forge.card.abilityfactory.effects.AttachEffect;
|
||||||
|
import forge.card.abilityfactory.effects.CharmEffect;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.cost.CostPayment;
|
import forge.card.cost.CostPayment;
|
||||||
@@ -1954,6 +1956,11 @@ public class GameAction {
|
|||||||
public final void playSpellAbility(SpellAbility sa) {
|
public final void playSpellAbility(SpellAbility sa) {
|
||||||
sa.setActivatingPlayer(Singletons.getControl().getPlayer());
|
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);
|
sa = GameAction.chooseOptionalAdditionalCosts(sa);
|
||||||
|
|
||||||
if (sa == null) {
|
if (sa == null) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public enum ApiType {
|
|||||||
Bond ( BondEffect.class, BondAi.class ),
|
Bond ( BondEffect.class, BondAi.class ),
|
||||||
ChangeZone(null, null), // not converted
|
ChangeZone(null, null), // not converted
|
||||||
ChangeZoneAll(ChangeZoneAllEffect.class, ChangeZoneAllAi.class), // classes extracted but 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),
|
Charm(CharmEffect.class, CharmAi.class),
|
||||||
ChooseCard ( ChooseCardEffect.class, ChooseCardAi.class ),
|
ChooseCard ( ChooseCardEffect.class, ChooseCardAi.class ),
|
||||||
ChooseColor ( ChooseColorEffect.class, ChooseColorAi.class ),
|
ChooseColor ( ChooseColorEffect.class, ChooseColorAi.class ),
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import forge.card.abilityfactory.ApiType;
|
|||||||
import forge.card.abilityfactory.SpellAiLogic;
|
import forge.card.abilityfactory.SpellAiLogic;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.spellability.AbilitySub;
|
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.card.staticability.StaticAbility;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,24 @@ public class CharmEffect extends SpellEffect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
|
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 num = Integer.parseInt(params.containsKey("CharmNum") ? params.get("CharmNum") : "1");
|
||||||
final int min = params.containsKey("MinCharmNum") ? Integer.parseInt(params.get("MinCharmNum")) : num;
|
final int min = params.containsKey("MinCharmNum") ? Integer.parseInt(params.get("MinCharmNum")) : num;
|
||||||
@@ -59,21 +77,24 @@ public class CharmEffect extends SpellEffect {
|
|||||||
else
|
else
|
||||||
chosen = CharmAi.chooseOptionsAi(activator, true, choices, num, min);
|
chosen = CharmAi.chooseOptionsAi(activator, true, choices, num, min);
|
||||||
|
|
||||||
// if ( null == chosen) throw Exception! // only AI might return no list at all
|
chainAbilities(sa, chosen);
|
||||||
for(AbilitySub as : chosen)
|
}
|
||||||
{
|
|
||||||
as.setActivatingPlayer(sa.getActivatingPlayer());
|
private static void chainAbilities(SpellAbility sa, List<AbilitySub> chosen) {
|
||||||
AbilityFactory.resolve(as, false);
|
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.Singletons;
|
||||||
import forge.card.abilityfactory.SpellEffect;
|
import forge.card.abilityfactory.SpellEffect;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.Target;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ import forge.Command;
|
|||||||
import forge.GameActionUtil;
|
import forge.GameActionUtil;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
|
import forge.card.abilityfactory.ApiType;
|
||||||
|
import forge.card.abilityfactory.effects.CharmEffect;
|
||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.spellability.Ability;
|
import forge.card.spellability.Ability;
|
||||||
import forge.card.spellability.AbilitySub;
|
import forge.card.spellability.AbilitySub;
|
||||||
@@ -486,7 +488,13 @@ public class TriggerHandler {
|
|||||||
sa[0].setActivatingPlayer(p);
|
sa[0].setActivatingPlayer(p);
|
||||||
}
|
}
|
||||||
sa[0].setStackDescription(sa[0].toString());
|
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;
|
boolean mand = false;
|
||||||
if (params.containsKey("OptionalDecider")) {
|
if (params.containsKey("OptionalDecider")) {
|
||||||
sa[0].setOptionalTrigger(true);
|
sa[0].setOptionalTrigger(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user