public Vector2 GetClosestEvadePoint(Vector2 from)
        {
            var polygons = ClippedPolygons.Where(p => p.IsInside(from)).ToArray();

            var polPoints =
                polygons.Select(pol => pol.ToDetailedPolygon())
                .SelectMany(pol => pol.Points)
                .OrderByDescending(p => p.Distance(from, true));

            return(!polPoints.Any() ? Vector2.Zero : polPoints.Last());
        }
        public IOrderedEnumerable <Vector2> GetCloserEvadePoints(Vector2 closestNormalEvadePoint)
        {
            float closestNormalDistance = closestNormalEvadePoint.Distance(Player.Instance);
            var   polygons = ClippedPolygons.Where(p => p.IsInside(Player.Instance)).ToArray();

            var polPoints =
                polygons.Select(pol => pol.ToDetailedPolygon())
                .SelectMany(pol => pol.Points)
                .Where(p => p.Distance(Player.Instance) < closestNormalDistance)
                .OrderByDescending(p => p.Distance(Player.Instance));

            return(polPoints);
        }
 public bool IsPointSafe(Vector2 point)
 {
     return(!ClippedPolygons.Any(p => p.IsInside(point)));
 }