package com.hearthsim.card.spellcard; import com.hearthsim.card.Deck; import com.hearthsim.card.ImplementedCardList; import com.hearthsim.card.minion.Minion; import com.hearthsim.event.effect.EffectCharacterDamageSpell; import com.hearthsim.model.PlayerSide; import com.hearthsim.util.tree.HearthTreeNode; import org.json.JSONObject; public class SpellDamage extends SpellCard { protected byte damage_; protected EffectCharacterDamageSpell<SpellDamage> effect; public SpellDamage() { super(); } public EffectCharacterDamageSpell<SpellDamage> getSpellDamageEffect() { if (this.effect == null) { this.effect = new EffectCharacterDamageSpell<>(damage_); } return this.effect; } @Deprecated public SpellDamage(byte baseManaCost, byte damage, boolean hasBeenUsed) { super(baseManaCost, hasBeenUsed); damage_ = damage; } @Override public void initFromImplementedCard(ImplementedCardList.ImplementedCard implementedCard) { super.initFromImplementedCard(implementedCard); this.damage_ = (byte) implementedCard.spellEffect; } public byte getAttack() { return damage_; } @Override public boolean equals(Object other) { if (!super.equals(other)) { return false; } if (this.damage_ != ((SpellDamage)other).damage_) { return false; } return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + damage_; return result; } /** * Attack using this spell * * @param targetMinionPlayerSide * @param targetMinion The target minion * @param boardState The BoardState before this card has performed its action. It will be manipulated and returned. * @return The boardState is manipulated and returned */ @Deprecated protected final HearthTreeNode attack(PlayerSide targetMinionPlayerSide, Minion targetMinion, HearthTreeNode boardState) { EffectCharacterDamageSpell<SpellDamage> effect = new EffectCharacterDamageSpell<>(damage_); return effect.applyEffect(targetMinionPlayerSide, targetMinion, boardState); } @Deprecated public final HearthTreeNode attack(PlayerSide targetMinionPlayerSide, Minion targetMinion, HearthTreeNode boardState, Deck deckPlayer0, Deck deckPlayer1) { return this.attack(targetMinionPlayerSide, targetMinion, boardState); } @Override public JSONObject toJSON() { JSONObject json = super.toJSON(); json.put("type", "SpellDamage"); return json; } }