package com.hearthsim.card.minion.heroes; import com.hearthsim.card.CharacterIndex; import com.hearthsim.card.basic.minion.HealingTotem; import com.hearthsim.card.basic.minion.SearingTotem; import com.hearthsim.card.basic.minion.StoneclawTotem; import com.hearthsim.card.basic.minion.WrathOfAirTotem; import com.hearthsim.card.minion.Hero; import com.hearthsim.card.minion.Minion; import com.hearthsim.model.BoardModel; import com.hearthsim.model.PlayerModel; import com.hearthsim.model.PlayerSide; import com.hearthsim.util.HearthAction; import com.hearthsim.util.tree.HearthTreeNode; import com.hearthsim.util.tree.RandomEffectNode; public class Shaman extends Hero { @Override public boolean canBeUsedOn(PlayerSide playerSide, Minion minion, BoardModel boardModel) { if (!super.canBeUsedOn(playerSide, minion, boardModel)) { return false; } if (playerSide != PlayerSide.CURRENT_PLAYER) { return false; } if (boardModel.modelForSide(playerSide).isBoardFull()) { return false; } return true; } /** * Use the hero ability on a given target * * Warlock: place random totem on the board * * * * @param targetPlayerSide * @param targetMinion The target minion * @param boardState * * @return */ @Override public HearthTreeNode useHeroAbility_core( PlayerSide targetPlayerSide, Minion targetMinion, HearthTreeNode boardState) { PlayerModel player = boardState.data_.modelForSide(targetPlayerSide); HearthTreeNode toRet = new RandomEffectNode(boardState, new HearthAction(HearthAction.Verb.HERO_ABILITY, PlayerSide.CURRENT_PLAYER, 0, targetPlayerSide, CharacterIndex.HERO)); Minion[] totems = {new SearingTotem(), new StoneclawTotem(), new HealingTotem(), new WrathOfAirTotem()}; boolean allTotemsNotSummonable = true; for (Minion totemToSummon : totems) { boolean totemAlreadySummoned = false; for (Minion minion : player.getMinions()) { if (minion.getClass().equals(totemToSummon.getClass())) { totemAlreadySummoned = true; break; } } if (!totemAlreadySummoned) { allTotemsNotSummonable = false; HearthTreeNode newState = toRet.addChild(new HearthTreeNode(toRet.data_.deepCopy())); PlayerModel newCurrentPlayer = newState.data_.getCurrentPlayer(); newCurrentPlayer.subtractMana(HERO_ABILITY_COST); newCurrentPlayer.getHero().hasBeenUsed(true); totemToSummon.summonMinionAtEnd(targetPlayerSide, newState, false); } } if (allTotemsNotSummonable) return null; return toRet; } }