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