Esempio n. 1
0
        //--------------------------------------------------------------------------------------------------------------------
        // - Depth-first Topological Traversal (Recursive)
        //--------------------------------------------------------------------------------------------------------------------
        private void TopologicalTraverse(IsometricBufferNode current)
        {
            // Mark the current node as visited
            current.Visited = true;

            // Traverse each non-visited child
            foreach (IsometricBufferNode child in current.Children)
            {
                if (!child.Visited)
                {
                    TopologicalTraverse(child);
                }
            }

            // Push current node's target object onto the back of the sorted drawing queue
            SortedObjects.AddLast(current.Target);
        }
Esempio n. 2
0
        //--------------------------------------------------------------------------------------------------------------------
        // - Topological Sort
        //--------------------------------------------------------------------------------------------------------------------
        // Executes a depth-first search to topologically sort nodes according a Painter's ordering
        //--------------------------------------------------------------------------------------------------------------------
        private void TopologicalSort()
        {
            // Clear any previous sorting
            SortedObjects.Clear();

            // Clear all 'Visited' flags from any previous sorting
            foreach (IsometricBufferNode node in Nodes)
            {
                node.Visited = false;
            }

            // Initiate a traversal at every non-visited node
            foreach (IsometricBufferNode node in Nodes)
            {
                if (!node.Visited)
                {
                    TopologicalTraverse(node);
                }
            }

            // Clear signal to sort
            Dirty = false;
        }