public float[] Extract(PlayerBehaviourScript player)
    {
        float[] data = new float[10];

        data[0] = player.transform.position.x;
        data[1] = player.transform.position.y;

        foreach (var p in game.Teams[player.Team])
        {
            if (p != player)
            {
                data[2] = p.transform.position.x - player.transform.position.x;
                data[3] = p.transform.position.y - player.transform.position.y;
            }
        }

        var sortedByDistanceOpponents = DistanceSorter.CloneAndSortByDistance(game.Teams[player.OpponentTeam], player.PivotPoint);

        for (int i = 4; i < 8; i += 2)
        {
            data[i]     = sortedByDistanceOpponents[i - 8].transform.position.x - player.transform.position.x;
            data[i + 1] = sortedByDistanceOpponents[i - 8].transform.position.y - player.transform.position.y;
        }

        if (player.Team == Team.Away)
        {
            for (int i = 0; i < data.Length; i++)
            {
                data[i] *= -1;
            }
        }

        return(data);
    }
        private static Point?EscapeProcessI(CoverSet coverSet, Point Z, ConnectorSegment escapeLine, Orientation orientation, Size margin)
        {
            List <DistanceFromPoint> extremitiesList = new List <DistanceFromPoint>(4);
            ConnectorSegment         cover           = coverSet.GetCover(Z, (orientation == Orientation.Horizontal) ? DesignerEdges.Left : DesignerEdges.Bottom);

            if (cover != null)
            {
                AddBoundPoint(ref extremitiesList, cover.A, cover, Z);
                AddBoundPoint(ref extremitiesList, cover.B, cover, Z);
            }
            ConnectorSegment segment = coverSet.GetCover(Z, (orientation == Orientation.Horizontal) ? DesignerEdges.Right : DesignerEdges.Top);

            if (segment != null)
            {
                AddBoundPoint(ref extremitiesList, segment.A, segment, Z);
                AddBoundPoint(ref extremitiesList, segment.B, segment, Z);
            }
            if (extremitiesList.Count != 0)
            {
                DistanceSorter.Sort(ref extremitiesList);
                for (int i = 0; i < extremitiesList.Count; i++)
                {
                    DesignerEdges edges;
                    Point         point3;
                    Point         p      = extremitiesList[i].P;
                    int           x      = Math.Sign((int)(p.X - Z.X));
                    Point         point2 = new Point(x, Math.Sign((int)(p.Y - Z.Y)));
                    if (((orientation == Orientation.Vertical) ? point2.X : point2.Y) == 0)
                    {
                        p = extremitiesList[i].ConnectorSegment.ExtendPointOutwards(p);
                        int introduced13 = Math.Sign((int)(p.X - Z.X));
                        point2 = new Point(introduced13, Math.Sign((int)(p.Y - Z.Y)));
                        p      = extremitiesList[i].P;
                    }
                    if (orientation == Orientation.Vertical)
                    {
                        edges = (point2.Y < 0) ? DesignerEdges.Bottom : DesignerEdges.Top;
                    }
                    else
                    {
                        edges = (point2.X < 0) ? DesignerEdges.Left : DesignerEdges.Right;
                    }
                    if (orientation == Orientation.Vertical)
                    {
                        point3 = new Point(p.X + (point2.X * margin.Width), Z.Y);
                    }
                    else
                    {
                        point3 = new Point(Z.X, p.Y + (point2.Y * margin.Height));
                    }
                    ConnectorSegment segment4 = new ConnectorSegment(Z, point3);
                    if (((!coverSet.EscapeLineHasBeenUsed(segment4, point3) && escapeLine.IsPointOnSegment(point3)) && ((escapeLine.A != point3) && (escapeLine.B != point3))) && coverSet.IsEscapePoint(Z, point3, edges))
                    {
                        coverSet.AddUsedEscapeLine(segment4);
                        return(new Point?(point3));
                    }
                }
            }
            return(null);
        }