package com.hearthsim.card.classic.spell.common; import com.hearthsim.card.minion.Hero; import com.hearthsim.card.minion.Minion; import com.hearthsim.card.spellcard.SpellTargetableCard; import com.hearthsim.event.effect.EffectCharacter; import com.hearthsim.event.filter.FilterCharacter; import com.hearthsim.event.filter.FilterCharacterTargetedSpell; import com.hearthsim.model.PlayerModel; import com.hearthsim.util.tree.CardDrawNode; public class BattleRage extends SpellTargetableCard { private static final EffectCharacter effect = (targetSide, targetCharacterIndex, boardState) -> { PlayerModel playerModel = boardState.data_.modelForSide(targetSide); Hero hero = playerModel.getHero(); Iterable<Minion> minions = playerModel.getMinions(); int numCardsToDraw = hero.getTotalHealth() < hero.getTotalMaxHealth() ? 1 : 0; for (Minion minion : minions) { numCardsToDraw += minion.getTotalHealth() < minion.getTotalMaxHealth() ? 1 : 0; } if (boardState instanceof CardDrawNode) { ((CardDrawNode) boardState).addNumCardsToDraw(numCardsToDraw); } else { boardState = new CardDrawNode(boardState, numCardsToDraw); //draw two cards } return boardState; }; /** * Constructor * * @param hasBeenUsed Whether the card has already been used or not */ @Deprecated public BattleRage(boolean hasBeenUsed) { this(); this.hasBeenUsed = hasBeenUsed; } /** * Constructor * * Defaults to hasBeenUsed = false */ public BattleRage() { super(); } @Override public FilterCharacter getTargetableFilter() { return FilterCharacterTargetedSpell.SELF; } /** * * Use the card on the given target * * Draw a card for each damaged friendly character * @return The boardState is manipulated and returned */ @Override public EffectCharacter getTargetableEffect() { return BattleRage.effect; } }