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
|
|
}
|
|
}
|
|
|