static void AddLevelMap(RoomInstance room, TileBase[] tiles, TileBase wallTile, TileBase backgroundTile) { BoundsInt currentBounds = GameManager.GetBoundsFromRoom(room.RoomTemplateInstance.transform, true).ToBoundsInt(); currentBounds.min += (Vector3Int)Vector2Int.one; currentBounds.max -= (Vector3Int)Vector2Int.one; List <Vector3Int> wallTiles = MathUtils.GetOutlinePoints(currentBounds); Tilemap tilemap = CreateGameObject(room.RoomTemplateInstance.transform.GetChild(0).transform, "Level Map", "LevelMap", true, typeof(Tilemap), typeof(TilemapRenderer)).GetComponent <Tilemap>(); GameDebug.DrawBounds(currentBounds.ToBounds(), Color.cyan); foreach (DoorInstance door in room.Doors) { Vector3Int doorOrigin = room.Position - door.FacingDirection.ToVector3Int(); Vector3Int doorFrom = doorOrigin + door.DoorLine.From; Vector3Int doorTo = doorOrigin + door.DoorLine.To; bool successFrom = wallTiles.Remove(doorFrom); bool successTo = wallTiles.Remove(doorTo); GameDebug.DrawBoxMinMax(doorFrom.ToVector2Int(), doorTo.ToVector2Int(), Color.red); Debug.Assert(successFrom, doorFrom + " " + door.FacingDirection + " " + room.RoomTemplateInstance.name); Debug.Assert(successTo, doorTo + " " + door.FacingDirection + " " + room.RoomTemplateInstance.name); Debug.Assert((door.DoorLine.From.x <= door.DoorLine.To.x) && (door.DoorLine.From.y <= door.DoorLine.To.y), "From: " + door.DoorLine.From + " To: " + door.DoorLine.To); Vector3Int dir = door.DoorLine.To - door.DoorLine.From; wallTiles.Add(room.Position + door.DoorLine.From - dir); wallTiles.Add(room.Position + door.DoorLine.To + dir); } tilemap.SetTiles(wallTiles.ToArray(), tiles.Populate(wallTile)); currentBounds.min += (Vector3Int)Vector2Int.one; currentBounds.max -= (Vector3Int)Vector2Int.one; tilemap.SetTilesBlock(currentBounds, tiles.Populate(backgroundTile)); // NOTE: There will be some duplications with the previous room's doors, but I don't care. foreach (DoorInstance door in room.Doors) { foreach (var doorTilePos in door.DoorLine.GetPoints()) { tilemap.SetTile(room.Position + doorTilePos, backgroundTile); tilemap.SetTile(room.Position + doorTilePos - door.FacingDirection.ToVector3Int(), backgroundTile); } } tilemap.transform.position = Vector3.zero; tilemap.gameObject.SetActive(false); }