Class ChooseOneSpell

java.lang.Object
net.demilich.metastone.game.spells.Spell
net.demilich.metastone.game.spells.ChooseOneSpell
All Implemented Interfaces:
Serializable, HasDesc<SpellDesc>
Direct Known Subclasses:
InvokeSpell

public class ChooseOneSpell extends Spell
Provides a choice between SpellArg.SPELL1 and SpellArg.SPELL2, using the SpellArg.NAME and SpellArg.DESCRIPTION in those spells to generate the choice cards.

The sub-spells should be ChooseOneOptionSpell spells.

The SpellArg.CONDITION, if specified, casts SpellArg.SPELL (if specified) instead of giving choices (or does nothing).

For example, this text gives the player two choices if their player has more than 1 imbue charge:

   
     {
       "class": "ChooseOneSpell",
       "condition": {
         "class": "AttributeCondition",
         "target": "FRIENDLY_PLAYER",
         "attribute": "IMBUE",
         "value": 1,
         "operation": "GREATER_OR_EQUAL"
       },
       "spell1": {
         "class": "ChooseOneOptionSpell",
         "name": "Normal",
         "description": "Don't Imbue."
       },
       "spell2": {
         "class": "ChooseOneOptionSpell",
         "name": "Imbue",
         "description": "Give this unit Spellpower +1.",
         "spells": [
           {
             "class": "ModifyAttributeSpell",
             "value": 1,
             "attribute": "SPELL_DAMAGE",
             "target": "SELF"
           },
           {
             "class": "ModifyAttributeSpell",
             "value": -1,
             "attribute": "IMBUE",
             "target": "FRIENDLY_PLAYER"
           }
         ]
       }
     }
   
 
See Also:
  • Constructor Details

    • ChooseOneSpell

      public ChooseOneSpell()
  • Method Details

    • onCast

      protected void onCast(GameContext context, Player player, SpellDesc desc, Entity source, Entity target)
      Description copied from class: Spell
      Implementations of onCast are the meat-and-bones of a spell's effects. This should actually call a variety of methods in GameLogic, generate cards using SpellUtils.getCards(GameContext, Player, Entity, Entity, SpellDesc), interpret SpellArg keys in the desc, etc.

      Observe that subclasses of Spell mostly just need to implement this function. Also, observe that instances of Spell are stateless: all the state is provided as arguments to this function.

      Specified by:
      onCast in class Spell
      Parameters:
      context - The game context
      player - The casting player
      desc - The collection of SpellArg keys and values that are interpreted by the implementation of this function to actually cause effects in a game
      source - 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:
    • shouldRemoveCard

      public boolean shouldRemoveCard(Card card, Player player, GameContext context)
    • getTempCard

      public Card getTempCard(GameContext context, SpellDesc spellDesc, Card sourceCard)
      Generates a temporary card. Used by ChooseOneOptionSpell to actually generate the card definitions for the choice cards.
      Parameters:
      context -
      spellDesc -
      sourceCard -
      Returns: