// begin setting up and constructing the gameobjects for the the board
    public void SetupBoard(int level)
    {
        corridorFactory = GetComponent <CorridorFactory>();
        corridorFactory.InitializeScripts();
        roomFactory = GetComponent <RoomFactory>();
        roomFactory.InitializeScripts();

        Vector3 startPos = new Vector3(1, 0f, 1);

        rooms    = new Room[((mapSizeX * mapSizeY) / (maxRoomSize * maxRoomSize * 3))];
        rooms[0] = new Room();
        rooms[0].SetupRoom(maxRoomSize, maxRoomSize, startPos);

        for (int i = 1; i < rooms.Length; i++)
        {
            rooms[i] = CreateRoom();
            bool iter = true;
            while (iter)
            {
                for (int n = 0; n < i; n++)
                {
                    if (RoomsOverlapping(rooms[i], rooms[n]))
                    {
                        rooms[i] = CreateRoom();
                        break;
                    }
                    else if (n == i - 1)
                    {
                        iter = false;
                    }
                }
            }
        }

        // Sort by distance closest to rooms[0]
        rooms = rooms.OrderBy(room => Vector3.Distance(rooms[0].vectorOffset, room.vectorOffset)).ToArray <Room>();

        // connect each room with the nearest unconnected room
        for (int i = 0; i < rooms.Length - 1; i++)
        {
            int bestIndex = i + 1;
            for (int n = i + 1; n < rooms.Length; n++)
            {
                if (Vector3.Distance(rooms[i].vectorOffset, rooms[n].vectorOffset) <
                    Vector3.Distance(rooms[i].vectorOffset, rooms[bestIndex].vectorOffset))
                {
                    bestIndex = n;
                }
            }
            corridors.Add(new Corridor());
            corridorFactory.ChooseCorridorType(i, bestIndex, corridors[i], rooms, true);
        }

        // connect each room with the one nearest it
        for (int i = 0; i < rooms.Length - 1; i++)
        {
            int bestIndex = i + 1;
            for (int n = 0; n < rooms.Length - 1; n++)
            {
                if (n != i && Vector3.Distance(rooms[i].vectorOffset, rooms[n].vectorOffset) <
                    Vector3.Distance(rooms[i].vectorOffset, rooms[bestIndex].vectorOffset))
                {
                    bestIndex = n;
                }
            }
            moreCorridors.Add(new Corridor());
            corridorFactory.ChooseCorridorType(i, bestIndex, moreCorridors[i], rooms, false);
        }

        // assign a room's type from the factory script
        for (int i = 0; i < rooms.Length; i++)
        {
            roomFactory.ChooseRoomType(i, rooms);
        }

        // add the key to a random spot
        PlaceKey();

        for (int i = 0; i < corridors.Count; i++)
        {
            corridorFactory.MakeCorridorWalls(corridors[i]);
        }

        for (int i = 0; i < moreCorridors.Count; i++)
        {
            corridorFactory.MakeCorridorWalls(moreCorridors[i]);
        }
    }