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