コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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();
                    });
                }
            }
        }