public PotentialDiagonal(GroundEdge edgeA, GroundEdge edgeB, GroundPoint sharedPoint) { EdgeA = edgeA; EdgeB = edgeB; SharedPoint = sharedPoint; GroundPoint otherPointA = edgeA.GetOtherPoint(sharedPoint); GroundPoint otherPointB = edgeB.GetOtherPoint(sharedPoint); Key = GetKey(otherPointA.Index, otherPointB.Index); }
public GroundEdge(MainGrid grid, GroundPoint pointA, GroundPoint pointB) { this.grid = grid; if (pointA.Index == pointB.Index) { throw new ArgumentException("Can't make an edge out of two points with the same ID"); } PointA = pointA.Index < pointB.Index ? pointA : pointB; PointB = pointA.Index < pointB.Index ? pointB : pointA; }
private IEnumerable <PotentialDiagonal> GetPotentialDiagonals(GroundPoint point) { List <GroundEdge> edgeList = edgesTable[point]; for (int i = 0; i < edgeList.Count; i++) { int nextIndex = (i + 1) % edgeList.Count; yield return(new PotentialDiagonal(edgeList[i], edgeList[nextIndex], point)); } }
private void DoEasePoint(GroundPoint point, float targetCellLength) { Vector2 normalAverage = Vector2.zero; GroundPoint[] allConnections = point.DirectConnections.Concat(point.DiagonalConnections).ToArray(); foreach (GroundPoint connection in allConnections) { Vector2 diff = point.Position - connection.Position; Vector2 diffNormal = diff.normalized * targetCellLength; Vector2 targetPos = connection.Position + diffNormal; normalAverage += targetPos; } normalAverage /= allConnections.Length; point.Position = normalAverage; }
public GroundPoint GetDiagonalPoint(GroundPoint point) { return(diagonalsTable[point]); }
public GroundEdge GetEdge(GroundPoint pointA, GroundPoint pointB) { return(Edges.First(edge => (edge.PointA == pointA && edge.PointB == pointB) || (edge.PointA == pointB && edge.PointB == pointA))); }
public GroundPointBuilder(GroundPoint point) : this(point.Index, point.Position) { }
public GroundPoint GetOtherPoint(GroundPoint point) { return(PointA == point ? PointB : PointA); }
internal IEnumerable <GroundQuad> GetConnectedQuads(GroundPoint gridPoint) { return(polyTable[gridPoint]); }
internal IEnumerable <GroundEdge> GetEdges(GroundPoint gridPoint) { return(edgesTable[gridPoint]); }
private float GetSignedAngle(GroundEdge item, GroundPoint point) { GroundPoint otherPoint = item.GetOtherPoint(point); return(Vector2.SignedAngle(Vector2.up, otherPoint.Position - point.Position)); }