private void BuildCorridors(SubRoom subRoom) //recursive function { if (subRoom == null) //check if subroom exists { return; } if (!subRoom.IsLeaf()) { BuildCorridors(subRoom.Left); BuildCorridors(subRoom.Right); subRoom.CreateCorridors(subRoom.Left, subRoom.Right, corridorsHeight, corridorsWidth); } foreach (Rect corridor in subRoom.Corridors) //get corridor from the room from parameters { for (int i = Mathf.RoundToInt(corridor.x); i < corridor.xMax; i++) { for (int j = Mathf.RoundToInt(corridor.y); j < corridor.yMax; j++) { if (boardFloorPositions[i, j] == null) { tilemap.SetTile(new Vector3Int(i, j, 0), c_Tile); } } } } }
private void CreateBSP(SubRoom subRoom) { if (subRoom.IsLeaf()) // if subroom too large { if (subRoom.Rectangle.width > sizeRoomMin && subRoom.Rectangle.height > sizeRoomMin) { subRoom.Split((int)sizeRoomMin, (int)sizeRoomMax); CreateBSP(subRoom.Left); CreateBSP(subRoom.Right); } } }
private void Start() { root = new SubRoom(new Rect(0, 0, boardRows, boardColumns)); CreateBSP(root); root.CreateRoom(); boardFloorPositions = new GameObject[boardRows, boardColumns]; DrawRooms(root); BuildCorridors(root); BuildWalls(root); TruckWays(); }
private void BuildWalls(SubRoom subRoom) { for (int i = -1; i < boardRows; i++) { for (int j = -1; j < boardColumns; j++) { if (!tilemap.HasTile(new Vector3Int(i, j, 0))) { tilemapWall.SetTile(new Vector3Int(i, j, 0), w_Tile); } } } }
private void DrawRooms(SubRoom subRoom) { if (subRoom == null) { return; } if (subRoom.IsLeaf()) { for (int i = Mathf.RoundToInt(subRoom.Room.x); i < subRoom.Room.xMax; i++) { for (int j = Mathf.RoundToInt(subRoom.Room.y); j < subRoom.Room.yMax; j++) { tilemap.SetTile(new Vector3Int(i, j, 0), g_Tile); } } } else { DrawRooms(subRoom.Left); DrawRooms(subRoom.Right); } }