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.
 
 
 
mapbox-sdk/Unity/SourceLayers/ImageryLayer.cs

236 lines
6.0 KiB

using Mapbox.Unity.MeshGeneration.Data;
namespace Mapbox.Unity.Map
{
using System;
using UnityEngine;
using Mapbox.Unity.MeshGeneration.Factories;
using Mapbox.Unity.Utilities;
[Serializable]
public class ImageryLayer : AbstractLayer, IImageryLayer
{
[SerializeField]
ImageryLayerProperties _layerProperty = new ImageryLayerProperties();
[NodeEditorElement("Image Layer")]
public ImageryLayerProperties LayerProperty
{
get
{
return _layerProperty;
}
set
{
_layerProperty = value;
}
}
public MapLayerType LayerType
{
get
{
return MapLayerType.Imagery;
}
}
public bool IsLayerActive
{
get
{
return (_layerProperty.sourceType != ImagerySourceType.None);
}
}
public string LayerSourceId
{
get
{
return _layerProperty.sourceOptions.Id;
}
internal set
{
if (value != _layerProperty.sourceOptions.Id)
{
_layerProperty.sourceOptions.Id = value;
_layerProperty.HasChanged = true;
}
}
}
public ImagerySourceType LayerSource
{
get
{
return _layerProperty.sourceType;
}
}
public ImageryLayer()
{
}
public ImageryLayer(ImageryLayerProperties properties)
{
_layerProperty = properties;
}
public void SetLayerSource(string imageSource)
{
if (!string.IsNullOrEmpty(imageSource))
{
_layerProperty.sourceType = ImagerySourceType.Custom;
_layerProperty.sourceOptions.Id = imageSource;
}
else
{
_layerProperty.sourceType = ImagerySourceType.None;
Debug.LogWarning("Empty source - turning off imagery. ");
}
_layerProperty.HasChanged = true;
}
public void SetRasterOptions(ImageryRasterOptions rasterOptions)
{
_layerProperty.rasterOptions = rasterOptions;
_layerProperty.HasChanged = true;
}
public void Initialize(LayerProperties properties)
{
_layerProperty = (ImageryLayerProperties)properties;
Initialize();
}
public void Initialize()
{
if (_layerProperty.sourceType != ImagerySourceType.Custom && _layerProperty.sourceType != ImagerySourceType.None)
{
_layerProperty.sourceOptions.layerSource = MapboxDefaultImagery.GetParameters(_layerProperty.sourceType);
}
_imageFactory = ScriptableObject.CreateInstance<MapImageFactory>();
_imageFactory.SetOptions(_layerProperty);
_layerProperty.PropertyHasChanged += RedrawLayer;
_layerProperty.rasterOptions.PropertyHasChanged += (property, e) =>
{
NotifyUpdateLayer(_imageFactory, property as MapboxDataProperty, false);
};
}
public void RedrawLayer(object sender, System.EventArgs e)
{
Factory.SetOptions(_layerProperty);
NotifyUpdateLayer(_imageFactory, sender as MapboxDataProperty, false);
}
public void Remove()
{
_layerProperty = new ImageryLayerProperties
{
sourceType = ImagerySourceType.None
};
}
public void Update(LayerProperties properties)
{
Initialize(properties);
}
private MapImageFactory _imageFactory;
public MapImageFactory Factory
{
get
{
return _imageFactory;
}
}
#region API Methods
/// <summary>
/// Sets the data source for the image factory.
/// </summary>
/// <param name="imageSource"></param>
public virtual void SetLayerSource(ImagerySourceType imageSource)
{
if (imageSource != ImagerySourceType.Custom && imageSource != ImagerySourceType.None)
{
_layerProperty.sourceType = imageSource;
_layerProperty.sourceOptions.layerSource = MapboxDefaultImagery.GetParameters(imageSource);
_layerProperty.HasChanged = true;
}
else
{
Debug.LogWarning("Invalid style - trying to set " + imageSource.ToString() + " as default style!");
}
}
/// <summary>
/// Enables high quality images for selected image factory source.
/// </summary>
/// <param name="useRetina"></param>
public virtual void UseRetina(bool useRetina)
{
if (_layerProperty.rasterOptions.useRetina != useRetina)
{
_layerProperty.rasterOptions.useRetina = useRetina;
_layerProperty.rasterOptions.HasChanged = true;
}
}
/// <summary>
/// Enable Texture2D compression for image factory outputs.
/// </summary>
/// <param name="useCompression"></param>
public virtual void UseCompression(bool useCompression)
{
if (_layerProperty.rasterOptions.useCompression != useCompression)
{
_layerProperty.rasterOptions.useCompression = useCompression;
_layerProperty.rasterOptions.HasChanged = true;
}
}
/// <summary>
/// Enable Texture2D MipMap option for image factory outputs.
/// </summary>
/// <param name="useMipMap"></param>
public virtual void UseMipMap(bool useMipMap)
{
if (_layerProperty.rasterOptions.useMipMap != useMipMap)
{
_layerProperty.rasterOptions.useMipMap = useMipMap;
_layerProperty.rasterOptions.HasChanged = true;
}
}
/// <summary>
/// Change image layer settings.
/// </summary>
/// <param name="imageSource">Data source for the image provider.</param>
/// <param name="useRetina">Enable/Disable high quality imagery.</param>
/// <param name="useCompression">Enable/Disable Unity3d Texture2d image compression.</param>
/// <param name="useMipMap">Enable/Disable Unity3d Texture2d image mipmapping.</param>
public virtual void SetProperties(ImagerySourceType imageSource, bool useRetina, bool useCompression, bool useMipMap)
{
if (imageSource != ImagerySourceType.Custom && imageSource != ImagerySourceType.None)
{
_layerProperty.sourceType = imageSource;
_layerProperty.sourceOptions.layerSource = MapboxDefaultImagery.GetParameters(imageSource);
_layerProperty.HasChanged = true;
}
if (_layerProperty.rasterOptions.useRetina != useRetina ||
_layerProperty.rasterOptions.useCompression != useCompression ||
_layerProperty.rasterOptions.useMipMap != useMipMap)
{
_layerProperty.rasterOptions.useRetina = useRetina;
_layerProperty.rasterOptions.useCompression = useCompression;
_layerProperty.rasterOptions.useMipMap = useMipMap;
_layerProperty.rasterOptions.HasChanged = true;
}
}
#endregion
}
}