コード例 #1
0
 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;
 }
コード例 #2
0
    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);
        }
    }