protected void BuildStairsOffRoom(int buildDirection, int originX, int originY) { map.BulkEditBegin(); var depth = Rand.Range(12, 20); var y = 0; for (int i = 0; i < depth; i++) { // while coordinates are within the map's bounds if (TileInBounds(originX, originY + y)) { for (int x = 0; x < y; x++) { switch (buildDirection) { case RIGHT: { if (TileInBounds(originX + x, originY + y)) { // build stairs if (map.GetTileInfo(originX, originY + y) != null) { stoneBrush.PaintTile(map, originX + x, originY + y); } // erase walls to the right of stairs map.ClearTile(originX + x + 1, originY + y); map.ClearTile(originX + x + 2, originY + y); map.ClearTile(originX + x + 3, originY + y); map.ClearTile(originX + x + 4, originY + y); } break; } case LEFT: { if (TileInBounds(originX - x, originY + y)) { // build stairs if (map.GetTileInfo(originX, originY + y) != null) { stoneBrush.PaintTile(map, originX - x, originY + y); } // erase walls to the left of stairs map.ClearTile(originX - x - 1, originY + y); map.ClearTile(originX - x - 2, originY + y); map.ClearTile(originX - x - 3, originY + y); map.ClearTile(originX - x - 4, originY + y); } break; } } } y++; } } map.BulkEditEnd(); }
void CarveHalls() { map.BulkEditBegin(); int originX; int originY; int x; foreach (ProcRoom room in rooms) { var hall = new ProcHall(); // get random direction int rand = Rand.Range(0, 1); direction = (rand == 0 ? RIGHT : LEFT); // set origin point if (direction == RIGHT) { originX = room.BottomRightX(); originY = room.BottomRightY(); x = 1; } else { originX = room.BottomLeftX(); originY = room.BottomLeftY(); x = -1; } // get random height to make halls either two or four tiles tall int rand2 = Rand.Range(0, 10); int i = (rand2 == 0 ? 2 : 4); while (map.GetTileInfo(originX + x, originY) != null && TileInBounds(originX + x, originY)) { if (i == 2) { map.ClearTile(originX + x, originY); map.ClearTile(originX + x, originY - 1); } else { map.ClearTile(originX + x, originY); map.ClearTile(originX + x, originY - 1); map.ClearTile(originX + x, originY - 2); map.ClearTile(originX + x, originY - 3); } x = (direction == RIGHT ? x + 1 : x - 1); } // with hall succesfully placed, set its origin, width, and height, then add to List hall.width = Math.Abs(x) - 1; hall.height = i; hall.originY = originY - (i - 1); hall.originX = (direction == RIGHT ? originX + 1 : originX - hall.width); halls.Add(hall); } map.BulkEditEnd(); }