using System;
using System.Collections.Generic;
using Mapbox.Unity.MeshGeneration.Modifiers;
namespace Mapbox.Unity.Map
{
public class SubLayerBehaviorModifiers : ISubLayerBehaviorModifiers
{
// TODO: Remove if not required.
VectorSubLayerProperties _subLayerProperties;
public SubLayerBehaviorModifiers(VectorSubLayerProperties subLayerProperties)
{
_subLayerProperties = subLayerProperties;
}
///
/// Certain layers ("Mapbox Streets with Building Ids") contains unique identifiers
/// to help mesh generation and feature management. This settings should be
/// set to "true" while using these tilesets.
///
/// Is layer using unique building ids
public virtual void IsBuildingIdsUnique(bool isUniqueIds)
{
if (_subLayerProperties.buildingsWithUniqueIds != isUniqueIds)
{
_subLayerProperties.buildingsWithUniqueIds = isUniqueIds;
_subLayerProperties.HasChanged = true;
}
}
///
/// Set the strategy for pivot placement for features.
///
/// Strategy for feature pivot point
public virtual void SetFeaturePivotStrategy(PositionTargetType positionTargetType)
{
if (_subLayerProperties.moveFeaturePositionTo != positionTargetType)
{
_subLayerProperties.moveFeaturePositionTo = positionTargetType;
_subLayerProperties.HasChanged = true;
}
}
///
/// Add game object modifier to the modifiers list.
///
/// Game object modifier to add to style
public virtual void AddGameObjectModifier(GameObjectModifier modifier)
{
if (_subLayerProperties.GoModifiers == null)
{
_subLayerProperties.GoModifiers = new List();
}
_subLayerProperties.GoModifiers.Add(modifier);
_subLayerProperties.HasChanged = true;
}
///
/// List of game object modifiers to the modifiers list.
///
/// List of game object modifiers to add to style
public virtual void AddGameObjectModifier(List modifiers)
{
if (_subLayerProperties.GoModifiers == null)
{
_subLayerProperties.GoModifiers = new List();
}
_subLayerProperties.GoModifiers.AddRange(modifiers);
_subLayerProperties.HasChanged = true;
}
///
/// Return game object modifiers from the modifiers list by query
///
/// Query function to test mesh modifiers
public virtual List GetGameObjectModifier(Func function)
{
var finalList = new List();
if (_subLayerProperties.GoModifiers != null)
{
foreach (var goModifier in _subLayerProperties.GoModifiers)
{
if (function(goModifier))
{
finalList.Add(goModifier);
}
}
}
return finalList;
}
///
/// Remove game object modifier from the modifiers list
///
/// Game object modifier to be removed from style
public virtual void RemoveGameObjectModifier(GameObjectModifier modifier)
{
if (_subLayerProperties.GoModifiers != null)
{
_subLayerProperties.GoModifiers.Remove(modifier);
_subLayerProperties.HasChanged = true;
}
}
///
/// Add mesh modifier to the modifiers list.
///
/// Mesh modifier to add to style
public virtual void AddMeshModifier(MeshModifier modifier)
{
if (_subLayerProperties.MeshModifiers == null)
{
_subLayerProperties.MeshModifiers = new List();
}
_subLayerProperties.MeshModifiers.Add(modifier);
_subLayerProperties.HasChanged = true;
}
///
/// List of mesh modifiers to the modifiers list.
///
/// List of mesh modifiers to add to style
public virtual void AddMeshModifier(List modifiers)
{
if (_subLayerProperties.MeshModifiers == null)
{
_subLayerProperties.MeshModifiers = new List();
}
_subLayerProperties.MeshModifiers.AddRange(modifiers);
_subLayerProperties.HasChanged = true;
}
///
/// Return mesh modifiers from the modifiers list by query
///
/// Query function to test mesh modifiers
public virtual List GetMeshModifier(Func function)
{
var finalList = new List();
if (_subLayerProperties.MeshModifiers != null)
{
foreach (var meshModifier in _subLayerProperties.MeshModifiers)
{
if (function(meshModifier))
{
finalList.Add(meshModifier);
}
}
}
return finalList;
}
///
/// Remove mesh modifier from the modifiers list
///
/// Mesh modifier to be removed from style
public virtual void RemoveMeshModifier(MeshModifier modifier)
{
if (_subLayerProperties.MeshModifiers != null)
{
_subLayerProperties.MeshModifiers.Remove(modifier);
_subLayerProperties.HasChanged = true;
}
}
}
}