コード例 #1
0
        private static bool CanEvadeFromInterselectPointHead(ProjectilesInfo projectile)
        {
            var interselectPointRange = projectile.CurrentPoint.GetDistanceTo(projectile.EndPoint);

            var safeDistance = Tick.Self.Radius + projectile.Radius;
            var evadeVector  =
                new Vector(projectile.EndPoint) -
                new Vector(Tick.Self.GetPositionPoint());

            evadeVector.Negate();
            evadeVector.Normalize();
            evadeVector = safeDistance * evadeVector;
            var safePoint = projectile.EndPoint + evadeVector;

            //VisualClientHelper.Circle(safePoint.X,safePoint.Y, 5, 1,0,0);

            var distanceToEscape = Tick.Self.GetDistanceTo(safePoint.X, safePoint.Y);

            var wizardSpeed = 3 * UnitHelper.GetSpeedBonusFactorFromSkillsAndAuras();

            var projectilesToInterselectTicks = Math.Abs(interselectPointRange / projectile.Speed);
            var escapeTicks = Math.Abs(distanceToEscape / wizardSpeed);

            //DebugTrace.ConsoleWriteLite($"{projectilesToInterselectTicks.ToString("N3")} / {escapeTicks.ToString("N3")}");

            return(escapeTicks <= projectilesToInterselectTicks);
        }
コード例 #2
0
        //Есть ли нормаль к вектору
        private static bool IsInterselectByNormal(ProjectilesInfo projectileInfo, out Point2D normalInterselectionPoint)
        {
            var p1 = projectileInfo.StartPoint;
            var p2 = projectileInfo.EndPoint;

            var me  = new Vector(Tick.Self.X, Tick.Self.Y);
            var xy1 = new Vector(p1.X, p1.Y);
            var xy2 = new Vector(p2.X, p2.Y);

            var v0 = me - xy1;
            var v2 = xy2 - xy1;

            var scalar = (v0 * v2) / (v2 * v2);

            normalInterselectionPoint = p1 + scalar * v2;

            var isInterselect = scalar > 0 && scalar < 1;

            return(isInterselect);
        }
コード例 #3
0
        private static bool CanEvadeFromInterselectPoint(ProjectilesInfo projectile, Point2D interselectPoint)
        {
            var interselectPointRange = projectile.CurrentPoint.GetDistanceTo(interselectPoint);
            var interselectMyRange    = Tick.Self.GetDistanceTo(interselectPoint.X, interselectPoint.Y);

            var distanceToEscape = Tick.Self.Radius + projectile.Radius - interselectMyRange;

            if (distanceToEscape < 0)
            {
                return(true);
            }

            var wizardSpeed = 3 * UnitHelper.GetSpeedBonusFactorFromSkillsAndAuras();

            var projectilesToInterselectTicks = Math.Abs(/*(int)*/ (interselectPointRange / projectile.Speed));
            var escapeTicks = Math.Abs(/*(int)*/ (distanceToEscape / wizardSpeed));

            //DebugTrace.ConsoleWriteLite($"{projectilesToInterselectTicks.ToString("N3")} / {escapeTicks.ToString("N3")}");

            return(escapeTicks <= projectilesToInterselectTicks);
        }
コード例 #4
0
 //Есть ли пересечение по радиусу конца выстрела?
 //Считаем что есть если мы в зоне поражения радиуса конца выстрела  + буфер
 private static bool IsInterselectByHead(ProjectilesInfo projectileInfo, double additionalDangerZone)
 {
     return(Tick.Self.GetDistanceTo(projectileInfo.EndPoint.X, projectileInfo.EndPoint.Y) - Tick.Self.Radius -
            projectileInfo.Radius - additionalDangerZone <= 0);
 }