示例#1
0
 // Use this for initialization
 void Start()
 {
     nextToMeLocations = new List <string>();
     FillNextoMeLocations();
     BFSVisited   = false;
     previousRoom = null;
 }
示例#2
0
    private List <string> BuildPath(string current, LocationDiscovery e)
    {
        List <string>     path      = new List <string>();
        LocationDiscovery routeRoom = e;

        do
        {
            path.Add(routeRoom.gameObject.name);
            routeRoom = routeRoom.previousRoom;
        } while (routeRoom.gameObject.name != current);

        path.Reverse();
        return(path);
    }
示例#3
0
    private List <string> BFSPathfinding(string current, string destination, List <string> discoveredRooms)
    {
        foreach (string r in discoveredRooms)
        {
            LocationDiscovery room = GameObject.Find(r).GetComponent <LocationDiscovery>();
            room.visited           = false;
            room.previousRoom      = null;
            room.distanceToDestiny = -1;
        }

        LocationDiscovery currentRoom = GameObject.Find(current).GetComponent <LocationDiscovery>();

        currentRoom.visited           = true;
        currentRoom.distanceToDestiny = 0;
        currentRoom.previousRoom      = null;

        Queue <LocationDiscovery> queueOfRooms = new Queue <LocationDiscovery>();

        queueOfRooms.Enqueue(currentRoom);

        while (queueOfRooms.Count != 0)
        {
            LocationDiscovery E = queueOfRooms.Dequeue();

            if (E.gameObject.name == destination)
            {
                return(BuildPath(current, E));
            }

            foreach (string neighbour in E.nextToMeLocations)
            {
                LocationDiscovery neighbourLocation = GameObject.Find(neighbour).GetComponent <LocationDiscovery>();
                neighbourLocation.visited           = true;
                neighbourLocation.distanceToDestiny = E.distanceToDestiny + 1;
                neighbourLocation.previousRoom      = E;
                queueOfRooms.Enqueue(neighbourLocation);
            }
        }
        return(null);
    }