public override bool SelectVisiableTarget()
        {
            bool flag = !StrategyManager.Instance.IsAuto() && this.m_Owner.isPlayer;

            if (flag)
            {
                List <Units> list = FindTargetHelper.findTargets(this.m_Owner, this.m_Owner.trans.position, SkillTargetCamp.AttackTarget, TargetTag.HeroAndMonster, (this.m_Owner.atk_type != 1) ? (this.m_Owner.attack_range + 2f) : 6.5f);
                FindTargetHelper.SortTargets(this.m_Owner, GlobalSettings.Instance.AttackSortType, ref list);
                if (list != null && list.Count > 0)
                {
                    GoalTarget inputTarget = base.GetInputTarget(InputTargetType.AttackTarget);
                    if (inputTarget == null || (inputTarget != null && inputTarget.m_Unit.isBuilding))
                    {
                        base.SetInputTarget(InputTargetType.AttackTarget, list[0]);
                        base.SetSelectTarget(list[0]);
                        return(true);
                    }
                }
                return(false);
            }
            if (!this.IfNeedChangeTarget())
            {
                return(true);
            }
            Units nextTarget = this.GetNextTarget();

            if (nextTarget == null)
            {
                base.SetInputTarget(InputTargetType.AttackTarget, null);
                return(false);
            }
            base.SetInputTarget(InputTargetType.AttackTarget, nextTarget);
            return(true);
        }
        private void SetKillTarget()
        {
            List <Units> list        = new List <Units>();
            GoalTarget   inputTarget = base.GetInputTarget(InputTargetType.KillTarget);

            if (inputTarget != null && inputTarget.m_Unit != null && HeroTargetingSystem.IfChooseTarget(this.m_Owner, inputTarget.m_Unit, true, 0f) && inputTarget.m_Unit.isHero)
            {
                return;
            }
            List <Units> allians = TargetSelectHelper.GetAllians(this.m_Owner, this.m_Owner.warning_range + 3f, TargetTag.HeroAndMonster, false);

            foreach (Units current in allians)
            {
                if (current.hp / current.hp_max <= 0.3f)
                {
                    list.Add(current);
                }
            }
            foreach (Units current2 in list)
            {
                if (current2.isLive && HeroTargetingSystem.IfChooseTarget(this.m_Owner, current2, true, 0f))
                {
                    base.SetInputTarget(InputTargetType.KillTarget, current2);
                    return;
                }
            }
            base.SetInputTarget(InputTargetType.KillTarget, null);
        }
        public bool CheckInputTarget(InputTargetType targetType, GoalTarget goal)
        {
            if (goal != null)
            {
                Units unit = goal.m_Unit;
                if (targetType == InputTargetType.MoveTarget)
                {
                    return(unit != null && unit.isLive);
                }
                if (unit == null || !unit.isLive || !unit.CanBeSelected || !TeamManager.CanAttack(this.m_Owner, goal.m_Unit) || UnitFeature.DistanceToTarget(this.m_Owner.transform, unit.transform) > this.m_Owner.fog_range)
                {
                    return(false);
                }
                switch (targetType)
                {
                case InputTargetType.AttackTarget:
                case InputTargetType.KillTarget:
                case InputTargetType.BuffTarget:
                case InputTargetType.FixedTarget:
                case InputTargetType.AttackYouTarget:
                case InputTargetType.TauntTarget:
                case InputTargetType.GuardTarget:
                    return(true);

                case InputTargetType.SelectTarget:
                    return(this.m_Owner.isPlayer);
                }
            }
            return(false);
        }
        private void SetMoveTarget()
        {
            GoalTarget inputTarget = base.GetInputTarget(InputTargetType.MoveTarget);

            if (inputTarget == null || inputTarget.m_Unit == null)
            {
                base.SetInputTarget(InputTargetType.MoveTarget, this.m_FollowTarget);
            }
        }
        private void DespawnBuffTarget()
        {
            Units      triggerUnit = TriggerManager.GetTriggerUnit();
            GoalTarget inputTarget = base.GetInputTarget(InputTargetType.BuffTarget);

            if (inputTarget != null && inputTarget.m_Unit != null && triggerUnit.unique_id == inputTarget.m_Unit.unique_id)
            {
                base.SetInputTarget(InputTargetType.BuffTarget, null);
            }
        }
        public Units GetGuardTarget()
        {
            GoalTarget inputTarget = this.GetInputTarget(InputTargetType.GuardTarget);

            if (inputTarget != null)
            {
                return(inputTarget.m_Unit);
            }
            return(null);
        }
        public Units GetAttackYouTarget()
        {
            GoalTarget inputTarget = this.GetInputTarget(InputTargetType.AttackYouTarget);

            if (inputTarget != null)
            {
                return(inputTarget.m_Unit);
            }
            return(null);
        }
        public override void DefendTower(Units attacker, Units tower)
        {
            GoalTarget inputTarget = base.GetInputTarget(InputTargetType.GuardTarget);

            if (inputTarget == null || inputTarget.m_Unit == null || !inputTarget.m_Unit.isLive)
            {
                base.SetInputTarget(InputTargetType.GuardTarget, attacker);
                if (this.delayClear == null)
                {
                    this.delayClear = new Task(this.DelayClearGuardTarget(attacker, tower), true);
                }
            }
        }
 public override void UpdateTargetState()
 {
     for (int i = 0; i < this.m_Goals.Length; i++)
     {
         GoalTarget goalTarget = this.m_Goals[i];
         if (!base.CheckInputTarget((InputTargetType)i, goalTarget))
         {
             if (goalTarget != null && goalTarget.m_Unit != null)
             {
                 goalTarget.m_Unit.MarkAsTarget(false);
             }
             base.SetInputTarget((InputTargetType)i, null);
         }
     }
 }
 protected void SetInputTarget(InputTargetType targetType, Units target)
 {
     if (target != null)
     {
         if (this.m_Goals[(int)targetType] != null)
         {
             bool flag = this.m_Goals[(int)targetType].m_Unit == target;
             this.m_Goals[(int)targetType].Set(targetType, target);
         }
         else
         {
             GoalTarget goalTarget = new GoalTarget();
             goalTarget.Set(targetType, target);
             this.m_Goals[(int)targetType] = goalTarget;
         }
     }
     else
     {
         this.m_Goals[(int)targetType] = null;
     }
 }