void CreateLayout() { int roomCtr = 1; int attempCtr = 0; int currentX = FloorWidth / 2; int currentY = FloorHeight / 2; m_map.AddRoom(currentX, currentY, m_roomFactory.CreateRoom()); while (roomCtr < MaxRoomCount && attempCtr++ < MaxAttemptCount) { int lastX = currentX; int lastY = currentY; Direction dir = (Direction)Mathf.Round(Random.value * 4); switch (dir) { case Direction.NORTH: ++currentY; break; case Direction.SOUTH: --currentY; break; case Direction.EAST: ++currentX; break; case Direction.WEST: --currentX; break; } if (currentX < 0 || currentY < 0 || currentY >= FloorWidth || currentX >= FloorHeight) { currentX = lastX; currentY = lastY; continue; } if (m_map.GetRoom(currentX, currentY) == null) { m_map.AddRoom(currentX, currentY, m_roomFactory.CreateRoom(m_map.GetRoom(lastX, lastY), dir)); ++roomCtr; } else { switch (dir) { case Direction.NORTH: m_map.GetRoom(currentX, currentY).exits.South = true; m_map.GetRoom(lastX, lastY).exits.North = true; break; case Direction.SOUTH: m_map.GetRoom(currentX, currentY).exits.North = true; m_map.GetRoom(lastX, lastY).exits.South = true; break; case Direction.EAST: m_map.GetRoom(currentX, currentY).exits.West = true; m_map.GetRoom(lastX, lastY).exits.East = true; break; case Direction.WEST: m_map.GetRoom(currentX, currentY).exits.East = true; m_map.GetRoom(lastX, lastY).exits.West = true; break; } } } }