/// <summary>
    /// Runs the loop that spawns all the walls.
    /// </summary>
    /// <returns>Waits a frame between spawning</returns>
    private IEnumerator SpawnRooms()
    {
        // Controls how many spawn runs there are
        for (int i = 0; i < spawnRuns; ++i)
        {
            // Forces the function to wait a frame between each spawn run
            yield return(0);

            // Find all spawnpoings
            GameObject[] roomSpawnpoints =
                GameObject.FindGameObjectsWithTag("RoomSpawnpoint");
            //Debug.Log("Iteration " + i + ", " + (roomSpawnpoints.Length) + " spawnpoints");

            // Check if a room should be spawned on each spawnpoint
            foreach (var spawnpoint in roomSpawnpoints)
            {
                RoomSpawnSettings spawnSettings =
                    spawnpoint.GetComponent <RoomSpawnSettings>();

                Vector3 spawnLocation = spawnpoint.transform.position;


                //DestroyImmediate(spawnpoint.gameObject);

                // If the PRNG is not correct, do not spawn on this spawnpoint
                if (Random.Range(0, spawnThresholdMax) < spawnThreshold)
                {
                    continue;
                }

                // Check which door the room needs and spawn it
                foreach (EnumList.RoomDoors door in (EnumList.RoomDoors[])Enum.GetValues(typeof(EnumList.RoomDoors)))
                {
                    if (CheckDoorAttachSide(spawnSettings, door))
                    {
                        SpawnRoom(door, spawnLocation);
                        break;
                    }
                }
            }

            // Clear the array for next iteration
            Array.Clear(roomSpawnpoints, 0, roomSpawnpoints.Length);
            //Debug.Log("End of iteration, " + roomSpawnpoints.Length + " spawnpoints remain");
        }

        // Removes rooms that overlap
        RemoveOverlappingRooms();

        // Spawn walls once all the rooms have been spawned
        StartCoroutine("SpawnWalls");
    }
 /// <summary>
 /// Checks what side needs to be open for the doors to line up
 /// </summary>
 /// <param name="settings">The settings of the room to be checked</param>
 /// <param name="toCheck">The side to check if it is valid</param>
 /// <returns></returns>
 private bool CheckDoorAttachSide(RoomSpawnSettings settings, EnumList.RoomDoors toCheck)
 {
     return((settings.doorAttachSide & toCheck) != 0);
 }