public T CreateMap() { var cave = CellularAutomata.GenerateCaves(_width, _height, _density); var regionMap = MapFeatureDetector.GetRegions(cave); // Pick a random room to start and dig a tunnel to a random other room. // Go from there to another random room until all are connected. var roomCenters = GetRoomCenters(regionMap).ToList(); var startPoint = roomCenters[random.Next(roomCenters.Count)]; roomCenters.Remove(startPoint); while (roomCenters.Count > 0) { var nextPoint = roomCenters[random.Next(roomCenters.Count)]; roomCenters.Remove(nextPoint); cave = CreatePath(cave, startPoint.X, startPoint.Y, nextPoint.X, nextPoint.Y); startPoint = nextPoint; } var map = new RogueSharp.Map(_width, _height); foreach (var cell in map.GetAllCells()) { var open = cave[cell.X, cell.Y] == 0; map.SetCellProperties(cell.X, cell.Y, isTransparent: open, isWalkable: open, false); } return((T)(object)map); }