示例#1
0
        public static bool AnyEnemyInTowerRange(Units tower, Units ruleOut = null)
        {
            TeamType      teamType = (tower.teamType != 0) ? TeamType.LM : TeamType.BL;
            IList <Units> mapUnits = MapManager.Instance.GetMapUnits(teamType, TargetTag.HeroAndMonster);

            if (mapUnits == null)
            {
                return(false);
            }
            foreach (Units current in mapUnits)
            {
                if (UnitFeature.DistanceToTarget(tower.mTransform, current.mTransform) <= tower.GetAttackRange(current))
                {
                    if (!(ruleOut != null) || !(current == ruleOut))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#2
0
        public static Units GetNearestTowerOfCustom(Units compareTarget, IList <Units> towers)
        {
            float num    = 999999f;
            Units result = null;

            if (towers != null)
            {
                foreach (Units current in towers)
                {
                    if (current.isLive)
                    {
                        float num2 = UnitFeature.DistanceToTarget(current.mTransform, compareTarget.mTransform);
                        if (num2 < num)
                        {
                            num    = num2;
                            result = current;
                        }
                    }
                }
            }
            return(result);
        }
示例#3
0
        public static int GetNearestTransOfTarget(Units target, Dictionary <string, Transform> points)
        {
            float num    = 999999f;
            int   result = -1;

            if (points != null)
            {
                int num2 = -1;
                foreach (string current in points.Keys)
                {
                    num2++;
                    Transform owner = points[current];
                    float     num3  = UnitFeature.DistanceToTarget(owner, target.mTransform);
                    if (num3 < num)
                    {
                        num    = num3;
                        result = num2;
                    }
                }
            }
            return(result);
        }
 private bool IfChoose(Units target)
 {
     return((!target.isMonster || target.teamType != 2) && (TeamManager.CanAttack(this.m_Owner, target) && target.CanBeSelected && !target.isItem && UnitFeature.DistanceToTarget(this.m_Owner.transform, target.transform) <= this.m_Owner.GetAttackRange(target)));
 }
 private bool IfChoose(Units target)
 {
     return(!(target == null) && (!target.isMonster || target.teamType != 2) && (target.isBuilding || UnitFeature.DistanceToTarget(this.m_Owner.transform, target.transform) <= this.m_Owner.warning_range) && (TeamManager.CanAttack(this.m_Owner, target) && target.CanBeSelected && target.isLive && !target.isItem));
 }
        public static bool IfChooseTarget(Units owner, Units target, bool isKillTarget = false, float range = 0f)
        {
            if (target == null || !target.isLive || !TeamManager.CanAttack(owner, target) || !target.CanBeSelected || target.isBuilding || target.isItem || (target.isMonster && target.teamType == 2) || !owner.CanBeSelected)
            {
                return(false);
            }
            if (!isKillTarget && target.isHero && UnitFeature.DistanceToTarget(owner.transform, target.transform) > owner.warning_range)
            {
                return(false);
            }
            Units home = MapManager.Instance.GetHome((TeamType)target.teamType);

            if (home == null)
            {
                return(true);
            }
            if (owner.MeiHuo.IsInState)
            {
                return(true);
            }
            if (range != 0f && !HeroTargetingSystem.IsInrange(owner.mTransform.position, target.mTransform.position, range))
            {
                return(false);
            }
            bool        arg_10E_0 = !StrategyManager.Instance.IsAuto() && owner.isPlayer;
            UtilCounter counter   = UtilManager.Instance.GetCounter(UtilType.Tower);

            if (counter != null)
            {
                TowerCounter towerCounter          = counter as TowerCounter;
                Units        towerOfLowestPriority = towerCounter.GetTowerOfLowestPriority(owner);
                if (towerOfLowestPriority != null)
                {
                    float num  = UnitFeature.DistanceToTargetSqr(owner.transform, towerOfLowestPriority.transform);
                    float num2 = UnitFeature.DistanceToTargetSqr(owner.transform, target.transform);
                    if (num2 > num)
                    {
                        return(false);
                    }
                }
            }
            bool flag = StrategyManager.Instance.IsHomeRecovery((TeamType)target.teamType);

            if (flag)
            {
                Vector3 recoveryPos = StrategyManager.Instance.GetRecoveryPos((TeamType)target.teamType);
                if (HeroTargetingSystem.IsInrange(target.transform.position, recoveryPos, 3f))
                {
                    return(false);
                }
            }
            Units nearestEnemyTowerOfTarget = TargetSelectHelper.GetNearestEnemyTowerOfTarget(target);

            if (nearestEnemyTowerOfTarget != null)
            {
                float attackRange = nearestEnemyTowerOfTarget.GetAttackRange(owner);
                if (HeroTargetingSystem.IsInrange(target.transform.position, nearestEnemyTowerOfTarget.transform.position, attackRange))
                {
                    float num3 = UnitFeature.DistanceToTarget(target, nearestEnemyTowerOfTarget);
                    if (owner.GetAttackRange(target) + num3 > attackRange && !HeroTargetingSystem.IsInrange(owner.transform.position, nearestEnemyTowerOfTarget.transform.position, attackRange))
                    {
                        return(true);
                    }
                    Units attackTarget = nearestEnemyTowerOfTarget.GetAttackTarget();
                    if (attackTarget != null && attackTarget == owner)
                    {
                        return(false);
                    }
                    List <Units> allians = TargetSelectHelper.GetAllians(nearestEnemyTowerOfTarget, attackRange, TargetTag.Monster, false);
                    return(allians != null && allians.Count > 1 && !target.isHero);
                }
            }
            return(true);
        }
示例#7
0
 public static bool TargetInDistance(Transform owner, Transform target, float distance)
 {
     return(UnitFeature.DistanceToTarget(owner, target) <= distance);
 }
示例#8
0
 public void MoveToTarget(Units target, float stopDistance)
 {
     if (target != null && this.self.CanMove)
     {
         bool flag = false;
         if (this.curMoveState == EMoveState.MoveState_MoveToTarget)
         {
             if (this.curMoveStateTargetId == target.unique_id)
             {
                 if (DateTime.Now.Ticks - this.lastSearchPath > 5000000L)
                 {
                     flag = true;
                 }
             }
             else
             {
                 flag = true;
             }
         }
         else
         {
             flag = true;
         }
         if (!flag)
         {
             return;
         }
         this.curMoveState         = EMoveState.MoveState_MoveToTarget;
         this.curMoveStateTargetId = target.unique_id;
         this.lastSearchPath       = DateTime.Now.Ticks;
         if (Singleton <PvpManager> .Instance.IsInPvp)
         {
             if (this.self.isPlayer || (this.self.MirrorState && this.self.ParentUnit.isPlayer))
             {
                 this.self.InterruptAction(SkillInterruptType.Initiative);
                 float num = UnitFeature.DistanceToTarget(this.self.mTransform, target.mTransform);
                 if (num < stopDistance + 3f)
                 {
                     this.m_DistanceToTargetType = DistanceToTargetType.NearByTarget;
                 }
                 else
                 {
                     this.m_DistanceToTargetType = DistanceToTargetType.FarFromTarget;
                 }
                 if (GlobalSettings.Instance.PvpSetting.isPlayerMoveBeforeServer && this.navAgent != null)
                 {
                     this.navAgent.MoveToTarget(target, stopDistance);
                 }
                 this.SendMoveToTarget(target.unique_id, target.transform.position, stopDistance);
             }
         }
         else
         {
             this.self.InterruptAction(SkillInterruptType.Initiative);
             float num2 = UnitFeature.DistanceToTarget(this.self.mTransform, target.mTransform);
             if (num2 < stopDistance + 3f)
             {
                 this.m_DistanceToTargetType = DistanceToTargetType.NearByTarget;
             }
             else
             {
                 this.m_DistanceToTargetType = DistanceToTargetType.FarFromTarget;
             }
             if (this.navAgent != null)
             {
                 this.navAgent.MoveToTarget(target, stopDistance);
             }
         }
     }
 }
        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);
        }