public virtual void SelectedTargetAction(bool callInputEndBefore = false) { if (callInputEndBefore) { PermanentInputEndEvent?.Invoke(); return; } if (TargetUnit != null) { AffectObjectType = Enumerators.AffectObjectType.CHARACTER; } else if (TargetPlayer != null) { AffectObjectType = Enumerators.AffectObjectType.PLAYER; } else { AffectObjectType = Enumerators.AffectObjectType.NONE; } if (AffectObjectType != Enumerators.AffectObjectType.NONE) { IsAbilityResolved = true; OnObjectSelectedByTargettingArrowCallback?.Invoke(); OnObjectSelectedByTargettingArrowCallback = null; } else { OnObjectSelectFailedByTargettingArrowCallback?.Invoke(); OnObjectSelectFailedByTargettingArrowCallback = null; } }
private void DoBoardSkill(BoardSkill skill) { object target = null; Enumerators.AffectObjectType selectedObjectType = Enumerators.AffectObjectType.NONE; switch (skill.Skill.OverlordSkill) { case Enumerators.OverlordSkill.HARDEN: case Enumerators.OverlordSkill.STONE_SKIN: case Enumerators.OverlordSkill.DRAW: { selectedObjectType = Enumerators.AffectObjectType.PLAYER; target = _gameplayManager.OpponentPlayer; } break; case Enumerators.OverlordSkill.HEALING_TOUCH: case Enumerators.OverlordSkill.MEND: { target = _gameplayManager.OpponentPlayer; selectedObjectType = Enumerators.AffectObjectType.PLAYER; if (_gameplayManager.OpponentPlayer.Health > 13) { if (skill.Skill.ElementTargetTypes.Count > 0) { _unitsToIgnoreThisTurn = _gameplayManager.OpponentPlayer.BoardCards.FindAll(x => !skill.Skill.ElementTargetTypes.Contains(x.Card.LibraryCard.CardSetType)); } List <BoardUnit> units = GetUnitsWithLowHp(_unitsToIgnoreThisTurn); if (units.Count > 0) { target = units[0]; selectedObjectType = Enumerators.AffectObjectType.CHARACTER; } } } break; case Enumerators.OverlordSkill.RABIES: { _unitsToIgnoreThisTurn = _gameplayManager.OpponentPlayer.BoardCards.FindAll(x => skill.Skill.ElementTargetTypes.Count > 0 && !skill.Skill.ElementTargetTypes.Contains(x.Card.LibraryCard.CardSetType) || x.NumTurnsOnBoard > 0 || x.HasFeral); BoardUnit unit = GetRandomUnit(false, _unitsToIgnoreThisTurn); if (unit != null) { target = unit; selectedObjectType = Enumerators.AffectObjectType.CHARACTER; } } break; case Enumerators.OverlordSkill.POISON_DART: case Enumerators.OverlordSkill.TOXIC_POWER: case Enumerators.OverlordSkill.ICE_BOLT: case Enumerators.OverlordSkill.FREEZE: case Enumerators.OverlordSkill.FIRE_BOLT: { target = _gameplayManager.CurrentPlayer; selectedObjectType = Enumerators.AffectObjectType.PLAYER; BoardUnit unit = GetRandomOpponentUnit(); if (unit != null) { target = unit; selectedObjectType = Enumerators.AffectObjectType.CHARACTER; } } break; case Enumerators.OverlordSkill.PUSH: { if (skill.Skill.ElementTargetTypes.Count > 0) { _unitsToIgnoreThisTurn = _gameplayManager.OpponentPlayer.BoardCards.FindAll(x => !skill.Skill.ElementTargetTypes.Contains(x.Card.LibraryCard.CardSetType)); } List <BoardUnit> units = GetUnitsWithLowHp(_unitsToIgnoreThisTurn); if (units.Count > 0) { target = units[0]; _unitsToIgnoreThisTurn.Add(target as BoardUnit); selectedObjectType = Enumerators.AffectObjectType.CHARACTER; } else { BoardUnit unit = GetRandomOpponentUnit(_unitsToIgnoreThisTurn); if (unit != null) { target = unit; _unitsToIgnoreThisTurn.Add(target as BoardUnit); selectedObjectType = Enumerators.AffectObjectType.CHARACTER; } else { return; } } } break; default: return; } skill.StartDoSkill(); if (selectedObjectType == Enumerators.AffectObjectType.PLAYER) { skill.FightTargetingArrow = CreateOpponentTarget( true, skill.IsPrimary, skill.SelfObject, target as Player, () => { skill.FightTargetingArrow.SelectedPlayer = target as Player; skill.EndDoSkill(); }); } else { if (target != null) { BoardUnit unit = target as BoardUnit; skill.FightTargetingArrow = CreateOpponentTarget( true, skill.IsPrimary, skill.SelfObject, unit, () => { skill.FightTargetingArrow.SelectedCard = unit; skill.EndDoSkill(); }); } } }