You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							172 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
	
	
							172 lines
						
					
					
						
							3.8 KiB
						
					
					
				| namespace Mapbox.Unity.MeshGeneration.Factories
 | |
| {
 | |
| 	using System;
 | |
| 	using Mapbox.Map;
 | |
| 	using UnityEngine;
 | |
| 	using Mapbox.Unity.MeshGeneration.Enums;
 | |
| 	using Mapbox.Unity.MeshGeneration.Data;
 | |
| 	using Mapbox.Unity.Utilities;
 | |
| 	using Mapbox.Unity.Map;
 | |
| 	using System.Collections.Generic;
 | |
| 
 | |
| 	public enum MapImageType
 | |
| 	{
 | |
| 		BasicMapboxStyle,
 | |
| 		Custom,
 | |
| 		None
 | |
| 	}
 | |
| 
 | |
| 	/// <summary>
 | |
| 	/// Uses raster image services to create materials & textures for terrain
 | |
| 	/// </summary>
 | |
| 	[CreateAssetMenu(menuName = "Mapbox/Factories/Image Factory")]
 | |
| 	public class MapImageFactory : AbstractTileFactory
 | |
| 	{
 | |
| 		[SerializeField]
 | |
| 		ImageryLayerProperties _properties;
 | |
| 		protected ImageDataFetcher DataFetcher;
 | |
| 
 | |
| 		public ImageryLayerProperties Properties
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				return _properties;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public string TilesetId
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				return _properties.sourceOptions.Id;
 | |
| 			}
 | |
| 
 | |
| 			set
 | |
| 			{
 | |
| 				_properties.sourceOptions.Id = value;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		#region UnityMethods
 | |
| 		protected virtual void OnDestroy()
 | |
| 		{
 | |
| 			//unregister events
 | |
| 			if (DataFetcher != null)
 | |
| 			{
 | |
| 				DataFetcher.DataRecieved -= OnImageRecieved;
 | |
| 				DataFetcher.FetchingError -= OnDataError;
 | |
| 			}
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region DataFetcherEvents
 | |
| 		private void OnImageRecieved(UnityTile tile, RasterTile rasterTile)
 | |
| 		{
 | |
| 			if (tile != null)
 | |
| 			{
 | |
| 				_tilesWaitingResponse.Remove(tile);
 | |
| 
 | |
| 				if (tile.RasterDataState != TilePropertyState.Unregistered)
 | |
| 				{
 | |
| 					tile.SetRasterData(rasterTile.Data, _properties.rasterOptions.useMipMap, _properties.rasterOptions.useCompression);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		//merge this with OnErrorOccurred?
 | |
| 		protected virtual void OnDataError(UnityTile tile, RasterTile rasterTile, TileErrorEventArgs e)
 | |
| 		{
 | |
| 			if (tile != null)
 | |
| 			{
 | |
| 				if (tile.RasterDataState != TilePropertyState.Unregistered)
 | |
| 				{
 | |
| 					tile.RasterDataState = TilePropertyState.Error;
 | |
| 					_tilesWaitingResponse.Remove(tile);
 | |
| 					OnErrorOccurred(e);
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region AbstractFactoryOverrides
 | |
| 		protected override void OnInitialized()
 | |
| 		{
 | |
| 			DataFetcher = ScriptableObject.CreateInstance<ImageDataFetcher>();
 | |
| 			DataFetcher.DataRecieved += OnImageRecieved;
 | |
| 			DataFetcher.FetchingError += OnDataError;
 | |
| 		}
 | |
| 
 | |
| 		public override void SetOptions(LayerProperties options)
 | |
| 		{
 | |
| 			_properties = (ImageryLayerProperties)options;
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnRegistered(UnityTile tile)
 | |
| 		{
 | |
| 			if (_properties.sourceType == ImagerySourceType.None)
 | |
| 			{
 | |
| 				tile.SetRasterData(null);
 | |
| 				tile.RasterDataState = TilePropertyState.None;
 | |
| 				return;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				tile.RasterDataState = TilePropertyState.Loading;
 | |
| 				if (_properties.sourceType != ImagerySourceType.Custom)
 | |
| 				{
 | |
| 					_properties.sourceOptions.layerSource = MapboxDefaultImagery.GetParameters(_properties.sourceType);
 | |
| 				}
 | |
| 				ImageDataFetcherParameters parameters = new ImageDataFetcherParameters()
 | |
| 				{
 | |
| 					canonicalTileId = tile.CanonicalTileId,
 | |
| 					tile = tile,
 | |
| 					tilesetId = TilesetId,
 | |
| 					useRetina = _properties.rasterOptions.useRetina
 | |
| 				};
 | |
| 				DataFetcher.FetchData(parameters);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Method to be called when a tile error has occurred.
 | |
| 		/// </summary>
 | |
| 		/// <param name="e"><see cref="T:Mapbox.Map.TileErrorEventArgs"/> instance/</param>
 | |
| 		protected override void OnErrorOccurred(UnityTile tile, TileErrorEventArgs e)
 | |
| 		{
 | |
| 			base.OnErrorOccurred(tile, e);
 | |
| 			if (tile != null)
 | |
| 			{
 | |
| 				tile.RasterDataState = TilePropertyState.Error;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnUnregistered(UnityTile tile)
 | |
| 		{
 | |
| 			if (_tilesWaitingResponse != null && _tilesWaitingResponse.Contains(tile))
 | |
| 			{
 | |
| 				_tilesWaitingResponse.Remove(tile);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public override void Clear()
 | |
| 		{
 | |
| 			DestroyImmediate(DataFetcher);
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnPostProcess(UnityTile tile)
 | |
| 		{
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		public override void UnbindEvents()
 | |
| 		{
 | |
| 			base.UnbindEvents();
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnUnbindEvents()
 | |
| 		{
 | |
| 		}
 | |
| 		#endregion
 | |
| 	}
 | |
| }
 | |
| 
 |