Example #1
0
    private void Remove(QuadtreeNode <T> node, T value)
    {
        if (node == null)
        {
            return;
        }

        if (!node.Intersects(value.Collider))
        {
            return;
        }

        if (!node.IsLeaf())
        {
            foreach (QuadtreeNode <T> child in node.children)
            {
                Remove(child, value);
            }
        }
        else
        {
            if (node.Remove(value))
            {
                if (node.IsEmpty())
                {
                    Collapse(node);
                }
            }
        }
    }
Example #2
0
 private void Collapse(QuadtreeNode <T> node)
 {
     if (node.IsLeaf())
     {
         if (node.parent != null && node.IsEmpty())
         {
             Collapse(node.parent);
         }
     }
     else
     {
         bool empty = true;
         for (int i = 0; i < 4 && empty; i++)
         {
             if (!node.children[i].IsLeaf() || !node.children[i].IsEmpty())
             {
                 empty = false;
             }
         }
         if (empty)
         {
             node.children = new QuadtreeNode <T> [4];
             if (node.parent != null)
             {
                 Collapse(node.parent);
             }
         }
     }
 }