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; } }
/// <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--; }); }
private void OnTerrainRecieved(UnityTile tile, RawPngRasterTile pngRasterTile) { if (tile != null) { Progress--; tile.SetHeightData(pngRasterTile.Data, _elevationOptions.requiredOptions.exaggerationFactor, _elevationOptions.modificationOptions.useRelativeHeight); Strategy.RegisterTile(tile); } }
//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); } } }
/// <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--; }); }