Beispiel #1
0
    IEnumerator FindNewPath()
    {
        findingNewPath = true;
        List <GameObject> sidePath = new List <GameObject>();
        GameObject        CurrentGrid;
        RaycastHit        hit;

        if (Physics.Raycast(transform.position, Vector3.down, out hit, 2))
        {
            if (hit.collider.gameObject.tag == "GridSquare")
            {
                CurrentGrid = hit.collider.gameObject;
                Pathfinder.PopulateValidNodeList();
                Pathfinder.openList.Clear();
                Pathfinder.closedList.Clear();
                Pathfinder.proposedPath.Clear();
                Pathfinder.CalculateParent(CurrentGrid);
                GameObject nextNode = Pathfinder.CalculateNextNode();
                for (int i = 0; i < Pathfinder.validNodeList.Count; i++)
                {
                    if (!Pathfinder.openList.Contains(Pathfinder.end))
                    {
                        Pathfinder.CalculateParent(nextNode);
                        nextNode = Pathfinder.CalculateNextNode();
                    }
                    else
                    {
                        i = Pathfinder.validNodeList.Count + 1;
                    }
                }
                GameObject backtrack = Pathfinder.end;
                Pathfinder.proposedPath.Add(backtrack);
                List <GameObject> traversed = new List <GameObject>();
                while (backtrack.GetComponent <GridSquare>().parent != null)
                {
                    if (!traversed.Contains(backtrack.GetComponent <GridSquare>().parent))
                    {
                        backtrack = backtrack.GetComponent <GridSquare>().parent;
                        Pathfinder.proposedPath.Add(backtrack);
                    }
                    else
                    {
                        break;
                    }
                    traversed.Add(backtrack);
                }
                yield return(new WaitForSeconds(1));

                for (int i = Pathfinder.proposedPath.Count - 1; i >= 0; i--)
                {
                    sidePath.Add(Pathfinder.proposedPath[i]);
                }
                enemyPath = sidePath;
                pathIndex = 0;
            }
            else
            {
                transform.position = enemyPath[pathIndex].transform.position;
            }
        }
        findingNewPath = false;
        yield return(null);
    }