package com.hearthsim.card.classic.spell.common;
import com.hearthsim.card.CharacterIndex;
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.PlayerSide;
import com.hearthsim.util.tree.HearthTreeNode;
public class Betrayal extends SpellTargetableCard {
public Betrayal() {
super();
}
@Override
public FilterCharacter getTargetableFilter() {
return FilterCharacterTargetedSpell.ENEMY_MINIONS;
}
@Override
public EffectCharacter getTargetableEffect() {
if (this.effect == null) {
this.effect = (targetSide, targetCharacterIndex, boardState) -> {
if (boardState.data_.modelForSide(targetSide).getNumMinions() < 2)
return null;
HearthTreeNode toRet = boardState;
Minion targetCharacter = toRet.data_.getCharacter(targetSide, targetCharacterIndex);
byte damageToDeal = targetCharacter.getTotalAttack(toRet, targetSide);
CharacterIndex minionIndexToLeft = targetCharacterIndex.indexToLeft();
if (minionIndexToLeft != CharacterIndex.HERO && minionIndexToLeft != CharacterIndex.UNKNOWN) {
toRet = boardState.data_.getCharacter(targetSide, minionIndexToLeft)
.takeDamageAndNotify(damageToDeal, PlayerSide.CURRENT_PLAYER,
targetSide, toRet, true, false);
}
CharacterIndex minionIndexToRight = targetCharacterIndex.indexToRight();
if (minionIndexToRight != CharacterIndex.HERO && minionIndexToRight != CharacterIndex.UNKNOWN) {
Minion minionToRight = boardState.data_.getCharacter(targetSide, minionIndexToRight);
if (minionToRight != null) {
toRet = minionToRight.takeDamageAndNotify(damageToDeal, PlayerSide.CURRENT_PLAYER,
targetSide, toRet, true, false);
}
}
return toRet;
};
}
return this.effect;
}
}