Ballz.GameSession.World.Terrain.ExtractOutlineInternal C# (CSharp) Метод

ExtractOutlineInternal() приватный Метод

private ExtractOutlineInternal ( System.Edge edge ) : List
edge System.Edge
Результат List
        private List<Vector2> ExtractOutlineInternal(Edge edge)
        {
            if (edge == null)
                return null;

            var firstEdge = edge;

            var result = new List<Vector2>(100);

            while (edge != null)
            {
                // follow first border
                Border b = edge.B0 ?? edge.B1;
                if (b == null)
                    break;

                // null border in edge (and add result)
                if (edge.B0 == b)
                {
                    edge.B0 = null;
                    result.Add(edge.A);
                }
                else if (edge.B1 == b)
                {
                    edge.B1 = null;
                    result.Add(edge.B);
                }
                else
                    throw new InvalidOperationException("lolnope1");

                // null edge in border
                if (b.E0 == edge)
                {
                    b.E0 = null;
                }
                else if (b.E1 == edge)
                {
                    b.E1 = null;
                }
                else
                    throw new InvalidOperationException("lolnope2");

                // follow next edge
                edge = b.E0 ?? b.E1;
                if (edge == null)
                    break;

                // null border in edge
                if (edge.B0 == b)
                {
                    edge.B0 = null;
                    if (edge == firstEdge) // closed loop
                        result.Add(edge.B);
                }
                else if (edge.B1 == b)
                {
                    edge.B1 = null;
                    if (edge == firstEdge) // closed loop
                        result.Add(edge.A);
                }
                else
                    throw new InvalidOperationException("lolnope3");

                // null edge in border
                if (b.E0 == edge)
                {
                    b.E0 = null;
                }
                else if (b.E1 == edge)
                {
                    b.E1 = null;
                }
                else
                    throw new InvalidOperationException("lolnope4");
            }

            return result;
        }