GameFramework.KdObjectTree.VisitTreeImpl C# (CSharp) Method

VisitTreeImpl() private method

private VisitTreeImpl ( MyFunc visitor ) : void
visitor MyFunc
return void
        private void VisitTreeImpl(MyFunc<float, float, float, float, int, int, KdTreeObject[], bool> visitor)
        {
            m_QueryStack.Push(0);
            while (m_QueryStack.Count > 0) {
                int node = m_QueryStack.Pop();

                int begin = m_KdTree[node].m_Begin;
                int end = m_KdTree[node].m_End;
                int left = m_KdTree[node].m_Left;
                int right = m_KdTree[node].m_Right;

                float minX = m_KdTree[node].m_MinX;
                float minZ = m_KdTree[node].m_MinZ;
                float maxX = m_KdTree[node].m_MaxX;
                float maxZ = m_KdTree[node].m_MaxZ;

                bool isVertical = (maxX - minX > maxZ - minZ);
                if (isVertical) {
                    float splitValue = 0.5f * (maxX + minX);
                    if (!visitor(splitValue, minZ, splitValue, maxZ, begin, end, m_Objects)) {
                        m_QueryStack.Clear();
                        return;
                    }
                } else {
                    float splitValue = 0.5f * (maxZ + minZ);
                    if (!visitor(minX, splitValue, maxX, splitValue, begin, end, m_Objects)) {
                        m_QueryStack.Clear();
                        return;
                    }
                }

                if (left > 0)
                    m_QueryStack.Push(left);
                if (right > 0)
                    m_QueryStack.Push(right);
            }
        }