//---------------------------------------------------------------------------------------------------------------- // - Attach Two Nodes In Order //---------------------------------------------------------------------------------------------------------------- public void Attach(IsometricBufferNode node) { // Child nodes are drawn below (before) parent nodes if (Compare(Target, node.Target)) { Children.Add(node); } else { node.Children.Add(this); } }
//-------------------------------------------------------------------------------------------------------------------- // - 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); }
//-------------------------------------------------------------------------------------------------------------------- // - Remove Object From Buffer //-------------------------------------------------------------------------------------------------------------------- public void Remove(IsometricObject obj) { IsometricBufferNode node = Nodes.FirstOrDefault(n => n.Target == obj); node?.Dispose(); }