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; } } } } }