示例#1
0
    private void Awake()
    {
        doorsToRoomMap = new Dictionary <Vector4, GameObject>();
        foreach (GameObject room in GameManager.SharedInstance.rooms.rooms)
        {
            doorsToRoomMap.Add(room.GetComponent <RoomProperties>().doors, room);
        }

        roomsCollections = GameManager.SharedInstance.rooms;
    }
示例#2
0
    private bool bfsMapCreation()
    {
        bool validMap = true;

        map      = new Dictionary <Vector2, RoomObject>();
        bfsQueue = new Queue <RoomObject>();
        RoomsCollections rooms = GameManager.SharedInstance.rooms;

        startRoom.room        = rooms.startRooms[Random.Range(0, rooms.startRooms.Count)];
        startRoom.coord       = new Vector2(0, 0);
        startRoom.isStartRoom = true;
        bfsQueue.Enqueue(startRoom);

        while (bfsQueue.Count != 0)
        {
            RoomObject currRoom = bfsQueue.Dequeue();

            if (!map.ContainsKey(currRoom.coord))
            {
                if (map.Count < 15)
                {
                    map.Add(currRoom.coord, currRoom);
                }
            }
            else
            {
                currRoom = map[currRoom.coord];
                for (int i = 0; i < 4; i++)
                {
                    if (currRoom.room.GetComponent <RoomProperties>().doors[i] == 0)
                    {
                        Vector2 tempCoord = currRoom.coord + direction[i];

                        if (map.ContainsKey(tempCoord))
                        {
                            RoomObject adjRoom = map[tempCoord];

                            map[tempCoord] = changeRoomDoor(adjRoom, altDoors[(i + 2) % 4], -1);
                        }
                    }
                }
                continue;
            }

            for (int i = 0; i < 4; i++)
            {
                if (currRoom.room.GetComponent <RoomProperties>().doors[i] == 1)
                {
                    Vector2 tempCoord = currRoom.coord + direction[i];
                    if (!map.ContainsKey(tempCoord))
                    {
                        if (map.Count < 15)
                        {
                            GameObject tempRoom = rooms.dirRooms[(i + 2) % 4][Random.Range(0, rooms.dirRooms[(i + 2) % 4].Count)];
                            bfsQueue.Enqueue(new RoomObject(tempRoom, tempCoord));
                        }
                    }
                    else
                    {
                        RoomObject adjRoom = map[tempCoord];
                        if (adjRoom.room.GetComponent <RoomProperties>().doors[(i + 2) % 4] == 0)
                        {
                            map[tempCoord] = changeRoomDoor(adjRoom, altDoors[(i + 2) % 4], 1);
                        }
                    }
                }
            }
        }

        if (map.Count < 13)
        {
            return(false);
        }

        List <Vector2> keys       = new List <Vector2>(map.Keys);
        List <Vector2> pBossRooms = new List <Vector2>();

        foreach (Vector2 coord in keys)
        {
            for (int i = 0; i < 4; ++i)
            {
                RoomObject     roomObj  = map[coord];
                GameObject     room     = roomObj.room;
                RoomProperties roomProp = room.GetComponent <RoomProperties>();

                if (roomProp.doors[i] == 1)
                {
                    Vector2 newCoord = coord + direction[i];

                    if (!map.ContainsKey(newCoord))
                    {
                        map[coord] = changeRoomDoor(map[coord], altDoors[i], -1);

                        if (validBossRoom(newCoord))
                        {
                            pBossRooms.Add(newCoord);
                        }
                    }
                }
            }
        }

        Vector2 bossCoord = pBossRooms[Random.Range(0, pBossRooms.Count)];

        addBossRoom(bossCoord);

        return(validMap);
    }