AkaCore.Manager.EvadeManager.EvadeSkillshot.GetEvadePoints C# (CSharp) Method

GetEvadePoints() public static method

public static GetEvadePoints ( int speed = -1, int delay, bool isBlink = false, bool onlyGood = false ) : List
speed int
delay int
isBlink bool
onlyGood bool
return List
            public static List<Vector2> GetEvadePoints(int speed = -1,
    int delay = 0,
    bool isBlink = false,
    bool onlyGood = false)
            {
                speed = speed == -1 ? (int)ObjectManager.Player.MoveSpeed : speed;

                var goodCandidates = new List<Vector2>();
                var badCandidates = new List<Vector2>();

                var polygonList = new List<Geometry.Polygon>();

                foreach (var skillshot in SkillshotDetector.DetectedSkillshots)
                {
                    if (skillshot.Evade)
                    {
                        polygonList.Add(skillshot.Polygon);
                    }
                }

                //Create the danger polygon:
                var dangerPolygons = Geometry.ClipPolygons(polygonList).ToPolygons();
                var myPosition = ObjectManager.Player.Position.To2D();

                //Scan the sides of each polygon to find the safe point.
                foreach (var poly in dangerPolygons)
                {
                    for (var i = 0; i <= poly.Points.Count - 1; i++)
                    {
                        var sideStart = poly.Points[i];
                        var sideEnd = poly.Points[(i == poly.Points.Count - 1) ? 0 : i + 1];

                        var originalCandidate = myPosition.ProjectOn(sideStart, sideEnd).SegmentPoint;
                        var distanceToEvadePoint = Vector2.DistanceSquared(originalCandidate, myPosition);

                        if (distanceToEvadePoint < 600 * 600)
                        {
                            var sideDistance = Vector2.DistanceSquared(sideEnd, sideStart);
                            var direction = (sideEnd - sideStart).Normalized();

                            var s = (distanceToEvadePoint < 200 * 200 && sideDistance > 90 * 90)
                                ? Configs.DiagonalEvadePointsCount
                                : 0;
                            for (var j = -s; j <= s; j++)
                            {
                                var candidate = originalCandidate + j * Configs.DiagonalEvadePointsStep * direction;
                                var pathToPoint = ObjectManager.Player.GetPath(candidate.To3D()).ToList();

                                if (IsSafePath(pathToPoint.To2D(), Configs.EvadingFirstTimeOffset, speed, delay).IsSafe)
                                {
                                    goodCandidates.Add(candidate);
                                }

                                if (
                                    IsSafePath(pathToPoint.To2D(), Configs.EvadingSecondTimeOffset, speed, delay).IsSafe &&
                                    j == 0)
                                {
                                    badCandidates.Add(candidate);
                                }
                            }
                        }
                    }
                }
                return (goodCandidates.Count > 0) ? goodCandidates : (onlyGood ? new List<Vector2>() : badCandidates);
            }