示例#1
0
 public void Stop()
 {
     willAtkAround = false;
     isTargetting  = false;
     if (AtkCoroutine != null)
     {
         myChampionAnimation.AttackAnimation(false);
         StopCoroutine(AtkCoroutine);
     }
     AtkTargetObj = null;
     isWarding    = false;
     myChampionData.playerSkill.TheSplatManager.Cancel();
     myChampionData.playerSkill.CancelSkill();
     StopOnlyMove();
 }
示例#2
0
    private void Update()
    {
        //딜레이 타임 확인
        CheckAtkDelayTime();

        //와드 설치 명령이 있다면 와드를 설치한다
        if (isWarding)
        {
            InstallWard();
        }

        //논 타겟팅 어택 명령이 있다면 적 리스트에 있는 이 중 가장 가까운 이를 찾는다.
        if (isWillAtkAround)
        {
            float      dist = 1000000, nowDist;
            GameObject tempObj = null;

            for (int i = 0; i < enemiesList.Count; ++i)
            {
                if (enemiesList[i].tag.Equals("Tower"))
                {
                    TowerBehaviour towerBehav = enemiesList[i].GetComponent <TowerBehaviour>();

                    if (!towerBehav.isCanAtkMe)
                    {
                        continue;
                    }

                    if (towerBehav.team == myChampBehav.team)
                    {
                        continue;
                    }
                }
                else if (enemiesList[i].tag.Equals("Suppressor") || enemiesList[i].tag.Equals("Nexus"))
                {
                    SuppressorBehaviour supBehav = enemiesList[i].GetComponent <SuppressorBehaviour>();

                    if (!supBehav.isCanAtkMe)
                    {
                        continue;
                    }

                    if (supBehav.team == myChampBehav.team)
                    {
                        continue;
                    }
                }
                else if (enemiesList[i].layer.Equals(LayerMask.NameToLayer("Monster")))
                {
                    MonsterBehaviour monBehav = enemiesList[i].GetComponent <MonsterBehaviour>();

                    if (!monBehav.TheFogEntity.isCanTargeting)
                    {
                        continue;
                    }

                    if (!monBehav.monAtk.isAtking)
                    {
                        continue;
                    }
                }
                else if (enemiesList[i].layer.Equals(LayerMask.NameToLayer("Champion")))
                {
                    ChampionBehavior champBehav = enemiesList[i].GetComponent <ChampionBehavior>();

                    if (champBehav.team == myChampBehav.team)
                    {
                        continue;
                    }
                }

                nowDist = (enemiesList[i].transform.position - myChamp.transform.position).sqrMagnitude;

                if (dist > nowDist)
                {
                    dist    = nowDist;
                    tempObj = enemiesList[i];
                }

                // 만약 타겟팅할 적을 찾았다면 타겟팅한다
                if (tempObj != null)
                {
                    atkTargetObj    = tempObj;
                    isTargetting    = true;
                    isWillAtkAround = false;
                    fxpool.GetPool("Force", tempObj.transform.position, tempObj.transform.gameObject);
                }
            }
        }

        // 공격할 적이 있는 경우
        if (atkTargetObj != null)
        {
            if (isTargetting && atkTargetObj.activeInHierarchy)
            {
                if (TheAIDest.target != atkTargetObj.transform)
                {
                    TheAIDest.target = atkTargetObj.transform;
                }

                atkTargetPos   = atkTargetObj.transform.position;
                myChampPos     = myChamp.transform.position;
                atkTargetPos.y = 0;
                myChampPos.y   = 0;
                float atkRevision = 0;

                // 건물의 반지름에 따라 거리 보정을 넣어준다
                if (atkTargetObj.tag.Equals("Tower") && atkRange < 5)
                {
                    atkRevision = 1f;
                }
                else if (atkTargetObj.tag.Equals("Suppressor") && atkRange < 5)
                {
                    atkRevision = 2.5f;
                }
                else if (atkTargetObj.tag.Equals("Nexus") && atkRange < 5)
                {
                    atkRevision = 7f;
                }

                // 공격 반경 밖에 타겟이 있다면 다가간다
                if (Vector3.Distance(atkTargetPos, myChampPos) > atkRange + atkRevision)
                {
                    if (!TheAIPath.canMove)
                    {
                        ToggleMove(true);
                        myChampionAnimation.AttackAnimation(false);
                    }

                    if (atkCoroutine != null)
                    {
                        myChampionAnimation.AttackAnimation(false);
                        StopCoroutine(atkCoroutine);
                        atkCoroutine = null;
                    }
                }
                else
                {// 공격 반경 안에 타겟이 있다면 공격한다
                    if (!isAtkDelayTime)
                    {
                        if (TheAIPath.canMove)
                        {
                            ToggleMove(false);
                            myChampionAnimation.AttackAnimation(true);
                        }

                        if (atkCoroutine == null)
                        {
                            atkCoroutine = StartCoroutine(Attack());
                        }
                    }
                }
            }
            else
            {
                ResetTarget();
            }
        }
        else
        {
            ResetTarget();
        }

        // 시간이 지난 만큼 와드의 쿨타임을 감소시킨다
        CheckMadeWardCooldown();
    }