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); }