Class MetaSpell
- All Implemented Interfaces:
Serializable
,HasDesc<SpellDesc>
- Direct Known Subclasses:
BothPlayersSpell
,ChooseOneOptionSpell
,HeroPowerSpell
,QuickDrawSpell
,SupremacySpell
,WhereverTheyAreSpell
SpellArg.SPELLS
argument.
If a SpellArg.VALUE
is provided, its value will be calculated before the sub spells are evaluated and that
value will be stored as the result of a GameValueProvider
set to provide the ValueProviderArg.GAME_VALUE
of
GameValue.SPELL_VALUE
. This is useful for calculating a value before effects occur.
For example, to implement the text, "Destroy all minions. Draw a card for each," it's important to destroy the
minions first and then draw cards, because a deathrattle may have shuffled cards into your deck. A naive
implementation would draw the card first based on how many minions are on the board. But by using the
GameValueProvider
, we can do things in the right order:
{ "class": "MetaSpell", "value": { "class": "EntityCountValueProvider", "target": "ALL_MINIONS", "filter": { "class": "AttributeFilter", "attribute": "IMMUNE", "invert": true } }, "spells": [ { "class": "DestroySpell", "target": "ALL_MINIONS" }, { "class": "DrawCardSpell", "value": { "class": "GameValueProvider", "gameValue": "SPELL_VALUE" } } ] }
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic SpellDesc
static SpellDesc
create
(EntityReference target, boolean randomTarget, SpellDesc... spells) protected void
Override to augment each effect.protected void
Implementations ofonCast
are the meat-and-bones of a spell's effects.Methods inherited from class net.demilich.metastone.game.spells.Spell
cast, castForPlayer, checkArguments, getDesc, isNativeStateful, setDesc, toString
-
Constructor Details
-
MetaSpell
public MetaSpell()
-
-
Method Details
-
create
-
create
-
onCast
protected void onCast(GameContext context, Player player, SpellDesc desc, Entity source, Entity target) Description copied from class:Spell
Implementations ofonCast
are the meat-and-bones of a spell's effects. This should actually call a variety of methods inGameLogic
, generate cards usingSpellUtils.getCards(GameContext, Player, Entity, Entity, SpellDesc)
, interpretSpellArg
keys in thedesc
, etc.Observe that subclasses of
Spell
mostly just need to implement this function. Also, observe that instances ofSpell
are stateless: all the state is provided as arguments to this function.- Specified by:
onCast
in classSpell
- Parameters:
context
- The game contextplayer
- The casting playerdesc
- The collection ofSpellArg
keys and values that are interpreted by the implementation of this function to actually cause effects in a gamesource
- The entity from which this effect is happening (typically a card or a minion if it's a battlecry).target
- The particular target of this invocation of the spell. When a spell hits multiple targets, like an AoE damage effect, this method is called once for each target in the list of targets.- See Also:
-
each
protected void each(GameContext context, Player player, Entity source, Entity target, SpellDesc spell) Override to augment each effect.- Parameters:
context
-player
-source
-target
-spell
-
-