package com.hearthsim.card.minion;
import com.hearthsim.card.Card;
import com.hearthsim.card.CharacterIndex;
import com.hearthsim.event.effect.EffectCharacter;
import com.hearthsim.event.filter.FilterCharacterInterface;
import com.hearthsim.model.BoardModel;
import com.hearthsim.model.PlayerSide;
import com.hearthsim.util.tree.HearthTreeNode;
import java.util.ArrayList;
/**
* Created by oyachai on 8/15/15.
*/
public abstract class MinionWithInspire<T extends Card> extends Minion implements HeroAbilityUsedInterface<T> {
public HearthTreeNode heroAbilityUsedEvent(PlayerSide thisMinionPlayerSide, PlayerSide heroAbilityUsedSide,
Minion heroAbilityTargetCharacter, HearthTreeNode boardState) {
EffectCharacter<T> effect = this.getInspireEffect();
FilterCharacterInterface filter = this.getInspireFilter();
HearthTreeNode toRet = boardState;
ArrayList<BoardModel.MinionPlayerPair> minions = new ArrayList<>();
for (BoardModel.MinionPlayerPair mp : toRet.data_.getAllMinionsFIFOList()) {
minions.add(mp);
}
for (BoardModel.MinionPlayerPair mp : minions) {
if (mp.getPlayerSide() == PlayerSide.CURRENT_PLAYER &&
filter.targetMatches(thisMinionPlayerSide, this, mp.getPlayerSide(), mp.getMinion(), boardState.data_)) {
HearthTreeNode tempNode = effect.applyEffect(mp.getPlayerSide(), mp.getMinion(), toRet);
if (tempNode != null)
toRet = tempNode;
}
}
if (filter.targetMatches(thisMinionPlayerSide, this, PlayerSide.CURRENT_PLAYER, toRet.data_.getCharacter(PlayerSide.CURRENT_PLAYER, CharacterIndex.HERO), boardState.data_)) {
toRet = effect.applyEffect(PlayerSide.CURRENT_PLAYER, toRet.data_.getCharacter(PlayerSide.CURRENT_PLAYER, CharacterIndex.HERO), toRet);
}
return toRet;
}
}