Example #1
0
        //---------------------------------------------------------------------
        public bool Search(EbAstarStep src, EbAstarStep dest)
        {
            src.G   = 0;
            src.H   = EbAstarStep.Distance(src, dest);
            src.Key = src.G + src.H;

            mStepStart = src;
            mStepBest  = src;
            mStepStart.Clear();
            mStepDest = dest;

            mStepCnt = 0;

            _AddToOpen(src);

            while (mOpenHeap.Size > 0)
            {
                mStepCurrent = mOpenHeap.Pop();
                if (DestChecker.isDest(mStepCurrent))
                {
                    mStepBest = mStepCurrent;
                    return(true);
                }
                if (mStepCnt > mStepCntMax)
                {
                    return(false);
                }
                if (mStepCurrent.H < mStepBest.H)
                {
                    mStepBest = mStepCurrent;
                }
                ++mStepCnt;

                _NewStep(mStepCurrent);
                mStepCurrent.AttachNode.Detach();
                _AddToClose(mStepCurrent);
            }
            return(false);
        }