Example #1
0
            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);
                        }
                    }
                }
            }
Example #2
0
        private IEnumerable <PotentialDiagonal> GetPotentialDiagonals(GroundEdge edge)
        {
            List <PotentialDiagonal> ret = new List <PotentialDiagonal>();

            ret.AddRange(GetPotentialDiagonals(edge.PointA));
            ret.AddRange(GetPotentialDiagonals(edge.PointB));
            return(ret);
        }
Example #3
0
            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)
 {
 }
Example #5
0
 internal IEnumerable <GroundQuad> GetConnectedQuads(GroundEdge gridEdge)
 {
     return(bordersTable[gridEdge]);
 }
Example #6
0
 internal bool GetIsBorder(GroundEdge gridEdge)
 {
     return(bordersTable[gridEdge].Count < 2);
 }
Example #7
0
        private float GetSignedAngle(GroundEdge item, GroundPoint point)
        {
            GroundPoint otherPoint = item.GetOtherPoint(point);

            return(Vector2.SignedAngle(Vector2.up, otherPoint.Position - point.Position));
        }