package com.hearthsim.card.classic.spell.rare;
import com.hearthsim.card.Card;
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.BoardModel;
import com.hearthsim.model.PlayerModel;
import com.hearthsim.model.PlayerSide;
import com.hearthsim.util.tree.CardDrawNode;
public class DivineFavor extends SpellTargetableCard {
private final static EffectCharacter effect = (targetSide, targetCharacterIndex, boardState) -> {
PlayerModel currentPlayer = boardState.data_.modelForSide(PlayerSide.CURRENT_PLAYER);
PlayerModel waitingPlayer = boardState.data_.modelForSide(targetSide);
int numCardsToDraw = waitingPlayer.getHand().size() - currentPlayer.getHand().size() + 1;
if (numCardsToDraw < 1) {
return null;
}
if (boardState instanceof CardDrawNode) {
((CardDrawNode) boardState).addNumCardsToDraw(numCardsToDraw);
} else {
boardState = new CardDrawNode(boardState, numCardsToDraw);
}
return boardState;
};
private final static FilterCharacter filter = new FilterCharacterTargetedSpell() {
protected boolean includeOwnHero() {
return true;
}
@Override
public boolean targetMatches(PlayerSide originSide, Card origin, PlayerSide targetSide, Minion targetCharacter, BoardModel board) {
if (!super.targetMatches(originSide, origin, targetSide, targetCharacter, board)) {
return false;
}
int numCardsToDraw = board.modelForSide(targetSide).getHand().size() - board.modelForSide(originSide).getHand().size() + 1;
if (numCardsToDraw < 1) {
return false;
}
return true;
}
};
/**
* Constructor
*
* Defaults to hasBeenUsed = false
*/
public DivineFavor() {
super();
}
@Override
public FilterCharacter getTargetableFilter() {
return DivineFavor.filter;
}
/**
*
* Use the card on the given target
*
* Draw cards until you have as many in hand as your opponent
*
*
*
* @param side
* @param boardState The BoardState before this card has performed its action. It will be manipulated and returned.
*
* @return The boardState is manipulated and returned
*/
@Override
public EffectCharacter getTargetableEffect() {
return DivineFavor.effect;
}
}