Exemple #1
0
    public override BaseEntity SetTarget()
    {
        if (_attackedTarget != null && _attackedTarget.CanBeTarget())
        {
            return(_attackedTarget);
        }
        else if (ActorProxy != null && ActorProxy.isTaunted)
        {
            ActorProxy.DisableBuffEffect(BuffType.Taunted);
        }

        if (ActorProxy == null)
        {
            return(null);
        }

        if (ActorProxy.isInAllyCamp)
        {
            var position = transform.position;

            var target = ActorProxy.GetEnemies().Where(e => e.ActorProxy.isInEnemyCamp)
                         .OrderBy(e => (e.transform.position - position).sqrMagnitude).FirstOrDefault();

            if (target != null)
            {
                return(target);
            }
        }

        var cols = Physics.OverlapSphere(transform.position, searchRange, targetLayer);

        Minion closestTarget = null;
        var    distance      = float.MaxValue;

        foreach (var col in cols)
        {
            var bs = col.GetComponentInParent <Minion>();
            if (bs == null || !bs.CanBeTarget())
            {
                continue;
            }

            var sqr = Vector3.SqrMagnitude(transform.position - col.transform.position);

            if (sqr < distance)
            {
                distance      = sqr;
                closestTarget = bs;
            }
        }

        if (closestTarget != null)
        {
            return(closestTarget);
        }

        return(null);
    }
Exemple #2
0
    private Minion GetLongDistanceTarget()
    {
        var minions            = ActorProxy.GetEnemies();
        List <BaseEntity> list = new List <BaseEntity>();
        float             min  = 0f;
        float             max  = 0f;

        var position = transform.position;

        foreach (var minion in minions)
        {
            if (minion == null)
            {
                continue;
            }

            float sqrDistance = Vector3.SqrMagnitude(minion.transform.position - position);

            if (list.Count == 0)
            {
                list.Add(minion);
                min = sqrDistance;
                max = sqrDistance;
                continue;
            }

            if (sqrDistance > max)
            {
                list.Add(minion);
                max = sqrDistance;
            }
            else if (sqrDistance < min)
            {
                list.Insert(0, minion);
                min = sqrDistance;
            }
        }

        if (list.Count > 0)
        {
            return(list[Random.Range(list.Count / 2, list.Count)] as Minion);
        }
        else
        {
            return(null);
        }
    }
Exemple #3
0
        public override IEnumerator Action(ActorProxy actorProxy)
        {
            var boss = (Boss5)actorProxy.baseEntity;

            boss.animator.SetTrigger(AnimationHash.Skill);

            yield return(new WaitForSeconds(1f));

            for (int i = 0; i < 20; i++)
            {
                float   x        = Random.Range(-3.5f, 3.5f);
                float   z        = Random.Range(-5.5f, 5.5f);
                Vector3 startPos = new Vector3(x, 20f, z);
                var     bullet   = PoolManager.Get().ActivateObject(boss.obj_Skill.name, startPos);
                if (bullet != null)
                {
                    bullet.DOMoveY(0, 0.5f).OnComplete(() =>
                    {
                        PoolManager.Get().ActivateObject(boss.obj_SkillHit.name, bullet.position);
                        bullet.GetComponent <PoolObjectAutoDeactivate>().Deactive();

                        if (actorProxy.isPlayingAI)
                        {
                            var enemies = actorProxy.GetEnemies();
                            foreach (var enemy in enemies)
                            {
                                enemy.ActorProxy.HitDamage(actorProxy.power * 0.1f);
                            }
                        }
                    });
                }

                yield return(new WaitForSeconds(0.1f));
            }

            yield return(new WaitForSeconds(0.4f));
        }