protected override void Prepare(ref ObstacleKDTreeJob job, float delta)
        {
            if (!TryGetFirstInGroup(out m_obstaclesProvider))
            {
                throw new System.Exception("No IObstacleSplitProvider or IObstacleProvider in chain !");
            }

            if (m_obstaclesProvider.recompute)
            {
                job.m_recompute = true;

                int obsCount = 2 * m_obstaclesProvider.referenceObstacles.Length;
                if (m_outputTree.Length != obsCount)
                {
                    m_outputTree.Dispose();
                    m_outputTree = new NativeArray <ObstacleTreeNode>(obsCount, Allocator.Persistent);
                }
            }
            else
            {
                job.m_recompute = false;
            }

            job.m_inputObstacleInfos = m_obstaclesProvider.outputObstacleInfos;
            job.m_referenceObstacles = m_obstaclesProvider.referenceObstacles;
            job.m_inputObstacles     = m_obstaclesProvider.outputObstacles;
            job.m_outputTree         = m_outputTree;
        }
 protected override void Apply(ref ObstacleKDTreeJob job)
 {
 }