Auto_Carry_Vayne.Logic.Tumble.AkaQPosition C# (CSharp) Method

AkaQPosition() public static method

public static AkaQPosition ( ) : System.Vector3
return System.Vector3
        public static Vector3 AkaQPosition()
        {
            #region Variables
            var positions = GetRotatedQPositions();
            var enemyPositions = GetEnemyPoints();
            var safePositions = positions.Where(pos => !enemyPositions.Contains(pos.To2D()));
            var BestPosition = Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f);
            var AverageDistanceWeight = .60f;
            var ClosestDistanceWeight = .40f;

            var bestWeightedAvg = 0f;

            var enemiesNear =
            EntityManager.Heroes.Enemies.Where(
            m => m.IsValidTarget(Variables._Player.GetAutoAttackRange(m) + 300f + 65f));
            var highHealthEnemiesNear =
            EntityManager.Heroes.Enemies.Where(m => !m.IsMelee && m.IsValidTarget(1300f) && m.HealthPercent > 7)
            ;
            var closeNonMeleeEnemy = GetClosestEnemy((Vector3)Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f));
            #endregion

            if (Variables._Player.CountEnemiesInRange(1500f) <= 1)
            {
                //Logic for 1 enemy near
                var position = (Vector3)Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f);
                return position.IsSafeCheck() ? position : Vector3.Zero;
            }

            if (
            enemiesNear.Any(
            t =>
                t.Health + 15 <
                ObjectManager.Player.GetAutoAttackDamage(t) * 2 + Variables._Player.GetSpellDamage(t, SpellSlot.Q)
                && t.Distance(ObjectManager.Player) < Variables._Player.GetAutoAttackRange(t) + 80f))
            {
                var QPosition =
                    ObjectManager.Player.ServerPosition.Extend(
                        enemiesNear.OrderBy(t => t.Health).First().ServerPosition, 300f);

                if (!Variables.UnderEnemyTower(QPosition))
                {
                    return (Vector3)QPosition;
                }
            }

            if (enemiesNear.Count() <= 2)
            {
                if (
                    enemiesNear.Any(
                        t =>
                            t.Health + 15 <
                            Variables._Player.GetAutoAttackDamage(t) +
                            Variables._Player.GetSpellDamage(t, SpellSlot.Q)
                            && t.Distance(Variables._Player) < Variables._Player.GetAutoAttackRange(t) + 80f))
                {
                    var QPosition =
                        Variables._Player.ServerPosition.Extend(
                            highHealthEnemiesNear.OrderBy(t => t.Health).FirstOrDefault().ServerPosition, 300f);

                    if (!Variables.UnderEnemyTower(QPosition))
                    {
                        return (Vector3)QPosition;
                    }
                }
            }

            if (closeNonMeleeEnemy != null
                && Variables._Player.Distance(closeNonMeleeEnemy) <= closeNonMeleeEnemy.AttackRange - 85
                && !closeNonMeleeEnemy.IsMelee)
            {
                return ((Vector3)Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f)).IsSafeCheck()
                    ? Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f).To3D()
                    : Vector3.Zero;
            }

            foreach (var position in safePositions)
            {
                var enemy = GetClosestEnemy(position);
                if (!enemy.IsValidTarget())
                {
                    continue;
                }

                var avgDist = GetAvgDistance(position);

                if (avgDist > -1)
                {
                    var closestDist = Variables._Player.ServerPosition.Distance(enemy.ServerPosition);
                    var weightedAvg = closestDist * ClosestDistanceWeight + avgDist * AverageDistanceWeight;
                    if (weightedAvg > bestWeightedAvg && position.IsSafeCheck())
                    {
                        bestWeightedAvg = weightedAvg;
                        BestPosition = position.To2D();
                    }
                }
            }
            var endPosition = (BestPosition.To3D().IsSafeCheck()) ? BestPosition.To3D() : Vector3.Zero;

            if (endPosition == Vector3.Zero)
            {
                //Try to find another suitable position. This usually means we are already near too much enemies turrets so just gtfo and tumble
                //to the closest ally ordered by most health.
                var alliesClose =
                    EntityManager.Heroes.Allies.Where(ally => !ally.IsMe && ally.IsValidTarget(1500, false));
                if (alliesClose.Any() && enemiesNear.Any())
                {
                    var closestMostHealth =
                        alliesClose.OrderBy(m => m.Distance(Variables._Player))
                            .ThenByDescending(m => m.Health)
                            .FirstOrDefault();

                    if (closestMostHealth != null
                        &&
                        closestMostHealth.Distance(
                            enemiesNear.OrderBy(m => m.Distance(Variables._Player)).FirstOrDefault())
                        >
                        Variables._Player.Distance(
                            enemiesNear.OrderBy(m => m.Distance(Variables._Player)).FirstOrDefault()))
                    {
                        var tempPosition = (Vector3)Variables._Player.ServerPosition.Extend(closestMostHealth.ServerPosition,
                            300f);
                        if (tempPosition.IsSafeCheck())
                        {
                            endPosition = tempPosition;
                        }
                    }

                }

            }

            if (endPosition == Vector3.Zero)
            {
                var mousePosition = Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f);
                if (mousePosition.To3D().IsSafeCheck())
                {
                    endPosition = mousePosition.To3D();
                }
            }

            return endPosition;
        }