Пример #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);
                }
            }
        }
    }
Пример #2
0
    private void Insert(QuadtreeNode <T> node, T value)
    {
        if (node == null || !node.Intersects(value.Collider))
        {
            return;
        }

        if (node.Size <= minSize)
        {
            node.AddObject(value);
        }
        else
        {
            if (node.IsLeaf())
            {
                Split(node);
            }

            for (int i = 0; i < 4; i++)
            {
                Insert(node.children[i], value);
            }
        }
    }