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)));
    }
Пример #2
0
    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);
        }
    }