protected override void OnRegistered(UnityTile tile)
        {
            if (Properties.sourceType == ElevationSourceType.None)
            {
                tile.SetHeightData(null);
                tile.MeshFilter.sharedMesh.Clear();
                tile.ElevationType   = TileTerrainType.None;
                tile.HeightDataState = TilePropertyState.None;
                return;
            }

            if (Strategy is IElevationBasedTerrainStrategy)
            {
                tile.HeightDataState = TilePropertyState.Loading;
                TerrainDataFetcherParameters parameters = new TerrainDataFetcherParameters()
                {
                    canonicalTileId = tile.CanonicalTileId,
                    mapid           = _elevationOptions.sourceOptions.Id,
                    tile            = tile
                };
                DataFetcher.FetchData(parameters);
            }
            else
            {
                //reseting height data
                tile.SetHeightData(null);
                Strategy.RegisterTile(tile);
                tile.HeightDataState = TilePropertyState.Loaded;
            }
        }
Exemple #2
0
        /// <summary>
        /// Creates the non-flat terrain using a height multiplier
        /// </summary>
        /// <param name="tile"></param>
        // <param name="heightMultiplier">Multiplier for queried height value</param>
        private void CreateTerrainHeight(UnityTile tile)
        {
            tile.HeightDataState = TilePropertyState.Loading;
            var pngRasterTile = new RawPngRasterTile();

            tile.AddTile(pngRasterTile);
            Progress++;

            pngRasterTile.Initialize(_fileSource, tile.CanonicalTileId, MapId, () =>
            {
                if (tile == null)
                {
                    return;
                }

                if (pngRasterTile.HasError)
                {
                    OnErrorOccurred(new TileErrorEventArgs(tile.CanonicalTileId, pngRasterTile.GetType(), tile, pngRasterTile.Exceptions));
                    tile.HeightDataState = TilePropertyState.Error;

                    // Handle missing elevation from server (404)!
                    // TODO: optimize this search!
                    if (pngRasterTile.ExceptionsAsString.Contains("404"))
                    {
                        ResetToFlatMesh(tile);
                    }
                    Progress--;
                    return;
                }

                tile.SetHeightData(pngRasterTile.Data, _elevationOptions.requiredOptions.exaggerationFactor);
                GenerateTerrainMesh(tile);
                Progress--;
            });
        }
        /// <summary>
        /// Creates the non-flat terrain using a height multiplier
        /// </summary>
        /// <param name="tile"></param>
        /// <param name="heightMultiplier">Multiplier for queried height value</param>
        private void CreateTerrainHeight(UnityTile tile)
        {
            tile.HeightDataState = TilePropertyState.Loading;
            var pngRasterTile = new RawPngRasterTile();

            tile.AddTile(pngRasterTile);
            Progress++;

            pngRasterTile.Initialize(_fileSource, tile.CanonicalTileId, _mapId, () =>
            {
                if (pngRasterTile.HasError)
                {
                    tile.HeightDataState = TilePropertyState.Error;

                    // Handle missing elevation from server (404)!
                    // TODO: optimize this search!
                    if (pngRasterTile.ExceptionsAsString.Contains("404"))
                    {
                        ResetToFlatMesh(tile);
                    }
                    Progress--;
                    return;
                }

                tile.SetHeightData(pngRasterTile.Data, _heightModifier, _useRelativeHeight);
                GenerateTerrainMesh(tile);
                Progress--;
            });
        }
Exemple #4
0
 private void OnTerrainRecieved(UnityTile tile, RawPngRasterTile pngRasterTile)
 {
     if (tile != null)
     {
         Progress--;
         tile.SetHeightData(pngRasterTile.Data, _elevationOptions.requiredOptions.exaggerationFactor, _elevationOptions.modificationOptions.useRelativeHeight);
         Strategy.RegisterTile(tile);
     }
 }
Exemple #5
0
        //public override void UpdateTileProperty(UnityTile tile, LayerUpdateArgs updateArgs)
        //{
        //	updateArgs.property.UpdateProperty(tile);

        //	if (updateArgs.property.NeedsForceUpdate())
        //	{
        //		Register(tile);
        //	}

        //	//if (updateArgs.property is TerrainColliderOptions)
        //	//{
        //	//	var existingCollider = tileBundleValue.Collider;
        //	//	if (Properties.colliderOptions.addCollider)
        //	//	{
        //	//		if (existingCollider == null)
        //	//		{
        //	//			tileBundleValue.gameObject.AddComponent<MeshCollider>();
        //	//		}
        //	//	}
        //	//	else
        //	//	{
        //	//		Destroy(tileBundleValue.Collider);
        //	//	}
        //	//}
        //}

        #endregion

        #region DataFetcherEvents
        private void OnTerrainRecieved(UnityTile tile, RawPngRasterTile pngRasterTile)
        {
            if (tile != null)
            {
                _tilesWaitingResponse.Remove(tile);
                if (tile.HeightDataState != TilePropertyState.Unregistered)
                {
                    tile.SetHeightData(pngRasterTile.Data, _elevationOptions.requiredOptions.exaggerationFactor, _elevationOptions.modificationOptions.useRelativeHeight, _elevationOptions.colliderOptions.addCollider, _elevationOptions.requiredOptions.displacement);
                    Strategy.RegisterTile(tile);
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// Creates the non-flat terrain using a height multiplier
        /// </summary>
        /// <param name="tile"></param>
        /// <param name="heightMultiplier">Multiplier for queried height value</param>
        private void CreateTerrainHeight(UnityTile tile)
        {
            tile.HeightDataState = TilePropertyState.Loading;
            var pngRasterTile = new RawPngRasterTile();

            tile.AddTile(pngRasterTile);
            Progress++;

            pngRasterTile.Initialize(_fileSource, tile.CanonicalTileId, _mapId, () =>
            {
                if (tile == null)
                {
                    return;
                }

                if (pngRasterTile.HasError)
                {
                    OnErrorOccurred(new TileErrorEventArgs(tile.CanonicalTileId, pngRasterTile.GetType(), tile, pngRasterTile.Exceptions));
                    tile.HeightDataState = TilePropertyState.Error;

                    // Handle missing elevation from server (404)!
                    // TODO: optimize this search!
                    if (pngRasterTile.ExceptionsAsString.Contains("404"))
                    {
                        ResetToFlatMesh(tile);
                    }
                    Progress--;
                    return;
                }

                tile.SetHeightData(pngRasterTile.Data, _heightModifier, _useRelativeHeight);
                GenerateTerrainMesh(tile);
                // Add a collider this may or may not be worse than the mesh collider that the terrain factory
                // can generate
                // tile.gameObject.AddComponent<BoxCollider>();
                // tile.gameObject.GetComponent<BoxCollider>().size = new Vector3( 99, .1f, 99 );
                // tile.gameObject.GetComponent<BoxCollider>().center = new Vector3( 0 , 0, 0 );
                // Add a tag for generating navmesh
                // tile.gameObject.AddComponent<NavMeshSourceTag>();
                Progress--;
            });
        }