Пример #1
0
        public override BaseEntity SetTarget()
        {
            var cols = Physics.OverlapSphere(transform.position, searchRange, targetLayer);

            if (cols.Length == 0)
            {
                if (targetMoveType == DICE_MOVE_TYPE.GROUND || targetMoveType == DICE_MOVE_TYPE.ALL)
                {
                    return(ActorProxy.GetEnemyTowerOrBossEgg());
                }
                else
                {
                    return(null);
                }
            }

            Collider firstTarget = null;
            var      distance    = float.MaxValue;

            foreach (var col in cols)
            {
                var bs = col.GetComponentInParent <BaseEntity>();
                var m  = bs as Minion;

                if (bs == null || bs.isAlive == false || (m != null && m.isCloacking) || (bs.CompareTag("Minion_Ground") && Vector3.Distance(bs.transform.position, transform.position) > 1.5f))
                {
                    continue;
                }

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

                if (sqr < distance)
                {
                    distance    = sqr;
                    firstTarget = col;
                }
            }

            if (firstTarget == null && animator != null)
            {
                animator.SetTrigger(AnimationHash.Idle);
            }

            if (firstTarget)
            {
                return(firstTarget.GetComponentInParent <BaseEntity>());
            }
            else
            {
                return(ActorProxy.GetEnemyTowerOrBossEgg());
            }
        }
Пример #2
0
        protected override IEnumerator Cast()
        {
            target = ActorProxy.GetEnemyTowerOrBossEgg();
            if (target == null)
            {
                ActorProxy.Destroy();
                yield break;
            }

            var rocketAction = new RocketAction();

            RunningAction = rocketAction;
            yield return(rocketAction.ActionWithSync(ActorProxy, target.ActorProxy));

            RunningAction = null;
        }
Пример #3
0
        public override BaseEntity SetTarget()
        {
            var      cols            = Physics.OverlapSphere(transform.position, searchRange, friendlyLayer);
            Collider firstTarget     = null;
            Collider closeToTarget   = null;
            var      closeToDistance = 0f;
            var      distance        = float.MaxValue;
            var      oldHp           = 1f;

            foreach (var col in cols)
            {
                if (col != null && col.CompareTag($"Minion_Ground") && col.gameObject != gameObject)
                {
                    var m   = col.GetComponentInParent <Minion>();
                    var dis = Vector3.Distance(transform.position, col.transform.position);

                    if (dis > closeToDistance && m != null && m.GetType() != typeof(Minion_Healer) && m.GetType() != typeof(Minion_Saint))
                    {
                        closeToDistance = dis;
                        closeToTarget   = col;
                    }

                    //KZSee:
                    // if (hp < 1f && dis < distance)
                    // {
                    //     oldHp = hp;
                    //     firstTarget = col;
                    //     distance = dis;
                    // }
                }
            }

            if (firstTarget != null)
            {
                return(firstTarget.GetComponentInParent <BaseEntity>());
            }

            if (closeToTarget != null)
            {
                return(closeToTarget.GetComponentInParent <BaseEntity>());
            }
            else
            {
                return(ActorProxy.GetEnemyTowerOrBossEgg());
            }
        }
Пример #4
0
        public override BaseEntity SetTarget()
        {
            target = ActorProxy.GetEnemyTowerOrBossEgg();
            if (target == null)
            {
                return(null);
            }

            if (isAlive)
            {
                if (Vector3.Distance(transform.position, target.transform.position) < 2f)
                {
                    Bomb();
                }
            }

            return(target);
        }
Пример #5
0
 public override BaseEntity SetTarget()
 {
     return(ActorProxy.GetEnemyTowerOrBossEgg());
 }
Пример #6
0
        public virtual 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);
            }

            if (targetMoveType == DICE_MOVE_TYPE.GROUND || targetMoveType == DICE_MOVE_TYPE.ALL)
            {
                return(ActorProxy.GetEnemyTowerOrBossEgg());
            }

            return(null);
        }