Exemple #1
0
    public void Execute()
    {
        List <Node> path = null;

        switch (m_searchType)
        {
        case eSearchType.DFS:
            SearchDFS.Build(m_source, m_destination, out path);
            break;

        case eSearchType.BFS:
            SearchBFS.Build(m_source, m_destination, out path);
            break;

        case eSearchType.DIJKSTRA:
            //SearchDIJKSTRA.Build(m_source, m_destination, out path);
            break;

        case eSearchType.A_STAR:
            SearchAStar.Build(m_source, m_destination, out path);
            break;

        default:
            break;
        }
        if (path != null)
        {
            m_agent.waypoint = path[0].GetComponentInChildren <Waypoint>();
            if (m_warpAgentToSource)
            {
                m_agent.transform.position = m_agent.waypoint.transform.position;
            }
            for (int i = 0; i < path.Count - 1; i++)
            {
                Waypoint waypoint = path[i].GetComponentInChildren <Waypoint>();
                waypoint.nextWaypoint = path[i + 1].GetComponentInChildren <Waypoint>();
            }

            foreach (Node pathNode in path)
            {
                if (pathNode.type == Node.eType.STANDARD)
                {
                    pathNode.type = Node.eType.PATH;
                }
            }

            GameObject[] gameObjects = GameObject.FindGameObjectsWithTag("Node");
            foreach (GameObject go in gameObjects)
            {
                Node node = go.GetComponent <Node>();
                if (node)
                {
                    if (node.visited && node.type == Node.eType.STANDARD)
                    {
                        node.type = Node.eType.VISITED;
                    }
                }
            }
        }
    }