Ballz.GameSession.World.Terrain.ExtractOutlineFromEdges C# (CSharp) Method

ExtractOutlineFromEdges() private method

private ExtractOutlineFromEdges ( ) : void
return void
        private void ExtractOutlineFromEdges()
        {
            // Clear old borders and outline
            Array.Clear(bordersH, 0, width * height);
            Array.Clear(bordersV, 0, width * height);
            WorkingShape.Outlines.Clear();

            foreach (var edge in allEdges)
            {
                IntVector2 edgeCoordsA = new IntVector2(edge.AX / 2, edge.AY / 2);
                IntVector2 edgeCoordsB = new IntVector2(edge.BX / 2, edge.BY / 2);
                if (edge.AX % 2 == 0)
                {
                    if (bordersV[edgeCoordsA.X, edgeCoordsA.Y] == null)
                        bordersV[edgeCoordsA.X, edgeCoordsA.Y] = new Border(edge);
                    else
                        bordersV[edgeCoordsA.X, edgeCoordsA.Y].E1 = edge;

                    edge.B0 = bordersV[edgeCoordsA.X, edgeCoordsA.Y];
                }
                else
                {
                    if (bordersH[edgeCoordsA.X, edgeCoordsA.Y] == null)
                        bordersH[edgeCoordsA.X, edgeCoordsA.Y] = new Border(edge);
                    else
                        bordersH[edgeCoordsA.X, edgeCoordsA.Y].E1 = edge;

                    edge.B0 = bordersH[edgeCoordsA.X, edgeCoordsA.Y];
                }

                if (edge.BX % 2 == 0)
                {
                    if (bordersV[edgeCoordsB.X, edgeCoordsB.Y] == null)
                        bordersV[edgeCoordsB.X, edgeCoordsB.Y] = new Border(edge);
                    else
                        bordersV[edgeCoordsB.X, edgeCoordsB.Y].E1 = edge;

                    edge.B1 = bordersV[edgeCoordsB.X, edgeCoordsB.Y];
                }
                else
                {
                    if (bordersH[edgeCoordsB.X, edgeCoordsB.Y] == null)
                        bordersH[edgeCoordsB.X, edgeCoordsB.Y] = new Border(edge);
                    else
                        bordersH[edgeCoordsB.X, edgeCoordsB.Y].E1 = edge;

                    edge.B1 = bordersH[edgeCoordsB.X, edgeCoordsB.Y];
                }
            }

            foreach (Border b in bordersH)
            {
                if (b == null)
                    continue;

                if (b.E0 != null)
                {
                    ExtractOutline(b.E0);
                }

                if (b.E1 != null)
                {
                    ExtractOutline(b.E1);
                }
            }

            foreach (Border b in bordersV)
            {
                ExtractOutline(b?.E0);
                ExtractOutline(b?.E1);
            }
        }