private void GenerateMap() { FillWithWalls(); int roomIterations = 0; while (rooms.Count < roomsToGenerate && roomIterations < maxRoomIterations) { roomIterations++; MapRoom room = new MapRoom(mapSize, maxRoomSize, minRoomSize); if (ScanRoom(room)) { //Fill with the room PlaceRoom(room); rooms.Add(room); } //Place a corridor if (rooms.Count > 1) { MapRoom from = rooms[rooms.Count - 2]; MapRoom to = rooms[rooms.Count - 1]; try { MapCorridor corridor = new MapCorridor(from, to, mapSize); PlaceCorridor(corridor); } catch (ImpossibleCorridorError) { } } } }
private void RasterizeCorridor(MapCorridor corridor, Edge edge) { Point srcPos, dstPos; CreateCorridor(edge.RoomA, edge.RoomB, out srcPos, out dstPos); corridor.Rasterize(edge.RoomA, edge.RoomB, srcPos, dstPos); }
private void PlaceCorridor(MapCorridor mc) { Vector2Int cursor = new Vector2Int(mc.start.x, mc.start.y); EditTile(cursor, true, false); if (mc.horizontal_priority) { while (cursor.x != mc.end.x) { if (cursor.x > mc.end.x) { cursor.x--; } else { cursor.x++; } EditTile(cursor, true, false); } while (cursor.y != mc.end.y) { if (cursor.y > mc.end.y) { cursor.y--; } else { cursor.y++; } EditTile(cursor, true, false); } } else { while (cursor.y != mc.end.y) { if (cursor.y > mc.end.y) { cursor.y--; } else { cursor.y++; } EditTile(cursor, true, false); } while (cursor.x != mc.end.x) { if (cursor.x > mc.end.x) { cursor.x--; } else { cursor.x++; } EditTile(cursor, true, false); } } }