public static Vector2 GetTileSizeInMeters(Tile tile) { Vector2 nw = GetMetersFromCoordinate(GeoPositioningHelper.GetNWCoordinateFromTile(tile)); Vector2 se = GetMetersFromCoordinate(GeoPositioningHelper.GetNWCoordinateFromTile(new Tile(tile.X + 1, tile.Y + 1, tile.Zoom))); return(new Vector2(Math.Abs(nw.x - se.x), Math.Abs(nw.y - se.y))); }
private void UpdateTerrainTransform(Tile centerTile) { Vector2 nw = GeoPositioningHelper.GetMetersFromCoordinate(GeoPositioningHelper.GetNWCoordinateFromTile(centerTile)); Vector2 se = GeoPositioningHelper.GetMetersFromCoordinate(GeoPositioningHelper.GetNWCoordinateFromTile(new Tile(centerTile.X + 1, centerTile.Y + 1, centerTile.Zoom))); tileSizeInMeters = new Vector2(Math.Abs(nw.x - se.x), Math.Abs(nw.y - se.y)); Vector2 position = (nw + se) / 2 - VisualizingManager.Instance.OriginInMeters; Terrain.terrainData.size = new Vector3(tileSizeInMeters.x * 3, Terrain.terrainData.size.y, tileSizeInMeters.y * 3); Terrain.gameObject.transform.position = new Vector3(position.x - Terrain.terrainData.size.x / 2, 0, position.y - Terrain.terrainData.size.z / 2); }
private void RetrieveRoads(Tile tile, List <Road> roads, List <Area> areas) { Vector2 tileOrigin = GeoPositioningHelper.GetMetersFromCoordinate( GeoPositioningHelper.GetNWCoordinateFromTile( new Tile(tile.X, tile.Y + 1, tile.Zoom))); roadsQueue = new PriorityQueue <Road>(); areasQueue = new PriorityQueue <Area>(); foreach (var road in roads) { roadsQueue.Enqueue(new Road(road.Lanes, road.Width, road.GetNodesRelatedToOrigin(tileOrigin), road.Type)); } foreach (var area in areas) { areasQueue.Enqueue(new Area( area.GetNodesRelatedToOrigin(tileOrigin), area.Type)); } }
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); } }