IEnumerator GetTargetPathNode()
    {
        isTargetFinding = true;
        yield return(new WaitForSeconds(0.0f));

        System.Collections.Generic.List <PathNodeClass> pathNodeList = new System.Collections.Generic.List <PathNodeClass> ();
        int           pi, pj;
        PathNodeClass pn;

        if (targetRange < 0)
        {
            targetRange = 90;
        }
        pj = (int)targetPos.y + targetRange;
        for (int i = -targetRange; i < targetRange; i++)
        {
            pi = (int)targetPos.x + i;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2));
                        pathNodeList.Add(pn);
                    }
                }
            }
        }
        pi = (int)targetPos.x + targetRange;
        for (int j = -targetRange; j < targetRange; j++)
        {
            pj = (int)targetPos.y + j;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2));
                        pathNodeList.Add(pn);
                    }
                }
            }
        }
        pj = (int)targetPos.y - targetRange;
        for (int i = -targetRange; i < targetRange; i++)
        {
            pi = (int)targetPos.x + i;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2));
                        pathNodeList.Add(pn);
                    }
                }
            }
        }
        pi = (int)targetPos.x - targetRange;

        for (int j = -targetRange; j < targetRange; j++)
        {
            pj = (int)targetPos.y + j;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2));
                        pathNodeList.Add(pn);
                    }
                }
            }
        }
        if (pathNodeList.Count > 0)
        {
            pn = new PathNodeClass();
            float min = 10000.0f;
            foreach (PathNodeClass a in pathNodeList)
            {
                if (a.distance < min)
                {
                    min = a.distance;
                    pn  = a;
                }
            }
            targetPathNode = new Vector2(pn.i, pn.j);
            targetFound    = true;
        }
        else
        {
            targetFound = false;
        }
        isTargetFinding = false;
    }
    IEnumerator GetNextPathNode()
    {
        isFinding = true;
        yield return(new WaitForSeconds(0.0f));

        System.Collections.Generic.List <PathNodeClass> pathNodeList = new System.Collections.Generic.List <PathNodeClass> ();
        int           pi, pj;
        PathNodeClass pn;

        targetPos = new Vector2(target.position.x - basePoint.position.x, basePoint.position.z - target.position.z);
        if (aiRange < 0)
        {
            aiRange = 35;
            this.gameObject.SendMessage("OnStopMove", SendMessageOptions.DontRequireReceiver);
//			SendMessage("OnMoveBackWard",SendMessageOptions.DontRequireReceiver);
        }
        float curDist = Mathf.Sqrt(Mathf.Pow(targetPos.x - curPathNode.i, 2) + Mathf.Pow(targetPos.y - curPathNode.j, 2));

        pj = curPathNode.j + aiRange;
        for (int i = -aiRange; i < aiRange; i++)
        {
            pi = curPathNode.i + i;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2));
//						if(pn.distance <= curDist){
                        pathNodeList.Add(pn);
//						}
                    }
                }
            }
        }
        pi = curPathNode.i + aiRange;
        for (int j = -aiRange; j < aiRange; j++)
        {
            pj = curPathNode.j + j;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2));
//						if(pn.distance <= curDist){
                        pathNodeList.Add(pn);
//						}
                    }
                }
            }
        }
        pj = curPathNode.j - aiRange;
        for (int i = -aiRange; i < aiRange; i++)
        {
            pi = curPathNode.i + i;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2));
//						if(pn.distance <= curDist){
                        pathNodeList.Add(pn);
//						}
                    }
                }
            }
        }
        pi = curPathNode.i - aiRange;

        for (int j = -aiRange; j < aiRange; j++)
        {
            pj = curPathNode.j + j;
            if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight)
            {
                if (GlobalInfo.aiMapData[pi, pj])
                {
                    if (IsLinked(pi, pj, curPathNode.i, curPathNode.j))
                    {
                        pn          = new PathNodeClass();
                        pn.i        = pi;
                        pn.j        = pj;
                        pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2));
//						if(pn.distance <= curDist){
                        pathNodeList.Add(pn);
//						}
                    }
                }
            }
        }


        if (pathNodeList.Count > 0)
        {
            float min = 10000.0f;
            pn = new PathNodeClass();
            foreach (PathNodeClass a in pathNodeList)
            {
                if (min > a.distance)
                {
                    min = a.distance;
                    pn  = a;
                }
            }
            nextPathNode = pn;
            pathFound    = true;
        }
        else
        {
            pathFound = false;
        }
        isFinding = false;
    }