예제 #1
0
        private void Start()
        {
            _nodeStreamingVisitor = TraverseAndStream;
//            _nodeGizmoVisitor = TraverseAndDrawGizmos;

            if (_initializeSelf)
            {
                Initialize();
            }
        }
예제 #2
0
        public static void Traverse <T, TData>(QuadTree <T> tree, int nodeIndex, QtNodeVisitor <T, TData> visitor, TData data)
        {
            var node = tree[nodeIndex];

            if (!visitor(node, data) || !node.HasChildren)
            {
                return;
            }

            for (int i = 0; i < 4; i++)
            {
                Traverse(tree, node.Children[i], visitor, data);
            }
        }
예제 #3
0
        public static void TraverseWithStack <T, TData>(this QuadTree <T> tree, QtNodeVisitor <T, TData> visitor, TData data)
        {
            Clear();
            Push(0);

            while (_stackPointer >= 0)
            {
                var nodeIndex = Pop();
                var node      = tree[nodeIndex];

                if (!visitor(node, data) || !node.HasChildren)
                {
                    continue;
                }

                for (int i = 0; i < 4; i++)
                {
                    Push(node.Children[i]);
                }
            }
        }
예제 #4
0
 public static void Traverse <T, TData>(this QuadTree <T> tree, QtNodeVisitor <T, TData> visitor, TData data)
 {
     Traverse(tree, 0, visitor, data);
 }