private void ProcessEdge(GroundEdge edge) { IEnumerable <PotentialDiagonal> potentialDiagonals = grid.GetPotentialDiagonals(edge); foreach (PotentialDiagonal potentialDiagonal in potentialDiagonals) { if (!unavailableDiagonals.Contains(potentialDiagonal.Key)) { if (availableDiagonals.ContainsKey(potentialDiagonal.Key)) { PotentialDiagonal otherHalf = availableDiagonals[potentialDiagonal.Key]; if (potentialDiagonal.SharedPoint != otherHalf.SharedPoint) { GroundQuad newQuad = new GroundQuad(potentialDiagonal.EdgeA, potentialDiagonal.EdgeB, otherHalf.EdgeA, otherHalf.EdgeB); RegisterNewQuad(newQuad); quads.Add(newQuad); } } else { availableDiagonals.Add(potentialDiagonal.Key, potentialDiagonal); } } } }
private IEnumerable <PotentialDiagonal> GetPotentialDiagonals(GroundEdge edge) { List <PotentialDiagonal> ret = new List <PotentialDiagonal>(); ret.AddRange(GetPotentialDiagonals(edge.PointA)); ret.AddRange(GetPotentialDiagonals(edge.PointB)); return(ret); }
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 GroundEdgeBuilder(GroundEdge edge) : this(edge.PointA.Index, edge.PointB.Index) { }
internal IEnumerable <GroundQuad> GetConnectedQuads(GroundEdge gridEdge) { return(bordersTable[gridEdge]); }
internal bool GetIsBorder(GroundEdge gridEdge) { return(bordersTable[gridEdge].Count < 2); }
private float GetSignedAngle(GroundEdge item, GroundPoint point) { GroundPoint otherPoint = item.GetOtherPoint(point); return(Vector2.SignedAngle(Vector2.up, otherPoint.Position - point.Position)); }