public MultithreadedSurfacePainter(int mapWidth, Tile tile, PriorityQueue <Road> roadsQueue, PriorityQueue <Area> areasQueue, Dictionary <string, int> nameToTerrainLayer) { Tile = tile; tileSizeInMeters = GeoPositioningHelper.GetTileSizeInMeters(tile); this.mapWidth = mapWidth; this.roadsQueue = roadsQueue; this.areasQueue = areasQueue; this.nameToTerrainLayer = nameToTerrainLayer; }
private void InstantiateTile(Tile tile, int[,] surfaceMap) { Vector2 tileSize = GeoPositioningHelper.GetTileSizeInMeters(tile); Vector2 position2D = GeoPositioningHelper.GetMetersFromCoordinate(GeoPositioningHelper.GetNWCoordinateFromTile(tile)) - VisualizingManager.Instance.OriginInMeters; Vector3 position = new Vector3(position2D.x + tileSize.x / 2, 0, position2D.y - tileSize.y / 2); Vector3 scale = new Vector3(tileSize.x, 0, tileSize.y) / 10; for (int l = 0; l < SurfaceLayers.Length; l++) { Texture2D mask = new Texture2D(surfaceMap.GetLength(0), surfaceMap.GetLength(1)); for (int i = 0; i < surfaceMap.GetLength(0); i++) { for (int j = 0; j < surfaceMap.GetLength(1); j++) { if (surfaceMap[surfaceMap.GetLength(0) - 1 - i, surfaceMap.GetLength(1) - 1 - j] == l) { mask.SetPixel(i, j, Color.white); } else { mask.SetPixel(i, j, Color.clear); } } } mask.Apply(); GameObject tileObject = Instantiate(SurfacePrefab); Material material = tileObject.GetComponent <MeshRenderer>().material; material.mainTextureScale = Vector2.one * SurfaceLayers[l].Tiling; material.SetTexture("_MainTex", SurfaceLayers[l].Texture); material.SetTexture("_Alpha", mask); tileObject.transform.position = position; tileObject.transform.localScale = scale; gameObjectTilemap.AttachObjectToTile(tile, tileObject); } }