public void SetProperties(VectorSubLayerProperties properties, LayerPerformanceOptions performanceOptions) { base.SetProperties(properties, performanceOptions); ////TODO stop hard coding it //if (properties.coreOptions.layerName == "MyTileSet") //{ // foreach(var modifier in properties.GoModifiers) // { // if(typeof(CustomFeatureBehaviourModifier) == modifier.GetType()) // { // featureModifier = (CustomFeatureBehaviourModifier)modifier; // } // } //} }
public override void SetProperties(VectorSubLayerProperties properties) { _coreModifiers = new HashSet <ModifierBase>(); if (_layerProperties == null && properties != null) { _layerProperties = properties; if (_performanceOptions == null && properties.performanceOptions != null) { _performanceOptions = properties.performanceOptions; } } if (_layerProperties.coreOptions.combineMeshes) { if (_defaultStack == null) { _defaultStack = ScriptableObject.CreateInstance <MergedModifierStack>(); } else if (!(_defaultStack is MergedModifierStack)) { _defaultStack.Clear(); DestroyImmediate(_defaultStack); _defaultStack = ScriptableObject.CreateInstance <MergedModifierStack>(); } else { // HACK - to clean out the Modifiers. // Will this trigger GC that we could avoid ?? _defaultStack.MeshModifiers.Clear(); _defaultStack.GoModifiers.Clear(); } } else { if (_defaultStack == null) { _defaultStack = ScriptableObject.CreateInstance <ModifierStack>(); ((ModifierStack)_defaultStack).moveFeaturePositionTo = _layerProperties.moveFeaturePositionTo; } if (!(_defaultStack is ModifierStack)) { _defaultStack.Clear(); DestroyImmediate(_defaultStack); _defaultStack = ScriptableObject.CreateInstance <ModifierStack>(); ((ModifierStack)_defaultStack).moveFeaturePositionTo = _layerProperties.moveFeaturePositionTo; } else { // HACK - to clean out the Modifiers. // Will this trigger GC that we could avoid ?? _defaultStack.MeshModifiers.Clear(); _defaultStack.GoModifiers.Clear(); } } //Add any additional modifiers that were added. if (_defaultStack.MeshModifiers == null) { _defaultStack.MeshModifiers = new List <MeshModifier>(); } if (_defaultStack.GoModifiers == null) { _defaultStack.GoModifiers = new List <GameObjectModifier>(); } // Setup material options. _layerProperties.materialOptions.SetDefaultMaterialOptions(); switch (_layerProperties.coreOptions.geometryType) { case VectorPrimitiveType.Point: case VectorPrimitiveType.Custom: { // Let the user add anything that they want if (_layerProperties.coreOptions.snapToTerrain == true) { AddOrCreateMeshModifier <SnapTerrainModifier>(); } break; } case VectorPrimitiveType.Line: { if (_layerProperties.coreOptions.snapToTerrain == true) { AddOrCreateMeshModifier <SnapTerrainModifier>(); } var lineMeshMod = AddOrCreateMeshModifier <LineMeshModifier>(); lineMeshMod.SetProperties(_layerProperties.lineGeometryOptions); lineMeshMod.ModifierHasChanged += UpdateVector; if (_layerProperties.extrusionOptions.extrusionType != Map.ExtrusionType.None) { var heightMod = AddOrCreateMeshModifier <HeightModifier>(); heightMod.SetProperties(_layerProperties.extrusionOptions); heightMod.ModifierHasChanged += UpdateVector; } else { _layerProperties.extrusionOptions.PropertyHasChanged += UpdateVector; } //collider modifier options var lineColliderMod = AddOrCreateGameObjectModifier <ColliderModifier>(); lineColliderMod.SetProperties(_layerProperties.colliderOptions); lineColliderMod.ModifierHasChanged += UpdateVector; var lineStyleMod = AddOrCreateGameObjectModifier <MaterialModifier>(); lineStyleMod.SetProperties(_layerProperties.materialOptions); lineStyleMod.ModifierHasChanged += UpdateVector; break; } case VectorPrimitiveType.Polygon: { if (_layerProperties.coreOptions.snapToTerrain == true) { AddOrCreateMeshModifier <SnapTerrainModifier>(); } var poly = AddOrCreateMeshModifier <PolygonMeshModifier>(); UVModifierOptions uvModOptions = new UVModifierOptions(); uvModOptions.texturingType = (_layerProperties.materialOptions.style == StyleTypes.Custom) ? _layerProperties.materialOptions.customStyleOptions.texturingType : _layerProperties.materialOptions.texturingType; uvModOptions.atlasInfo = (_layerProperties.materialOptions.style == StyleTypes.Custom) ? _layerProperties.materialOptions.customStyleOptions.atlasInfo : _layerProperties.materialOptions.atlasInfo; uvModOptions.style = _layerProperties.materialOptions.style; poly.SetProperties(uvModOptions); if (_layerProperties.extrusionOptions.extrusionType != Map.ExtrusionType.None) { //replace materialOptions with styleOptions bool useTextureSideWallModifier = (_layerProperties.materialOptions.style == StyleTypes.Custom) ? (_layerProperties.materialOptions.customStyleOptions.texturingType == UvMapType.Atlas || _layerProperties.materialOptions.customStyleOptions.texturingType == UvMapType.AtlasWithColorPalette) : (_layerProperties.materialOptions.texturingType == UvMapType.Atlas || _layerProperties.materialOptions.texturingType == UvMapType.AtlasWithColorPalette); if (useTextureSideWallModifier) { var atlasMod = AddOrCreateMeshModifier <TextureSideWallModifier>(); GeometryExtrusionWithAtlasOptions atlasOptions = new GeometryExtrusionWithAtlasOptions(_layerProperties.extrusionOptions, uvModOptions); atlasMod.SetProperties(atlasOptions); _layerProperties.extrusionOptions.PropertyHasChanged += UpdateVector; } else { var heightMod = AddOrCreateMeshModifier <HeightModifier>(); heightMod.SetProperties(_layerProperties.extrusionOptions); heightMod.ModifierHasChanged += UpdateVector; } } else { _layerProperties.extrusionOptions.PropertyHasChanged += UpdateVector; } //collider modifier options var polyColliderMod = AddOrCreateGameObjectModifier <ColliderModifier>(); polyColliderMod.SetProperties(_layerProperties.colliderOptions); polyColliderMod.ModifierHasChanged += UpdateVector; var styleMod = AddOrCreateGameObjectModifier <MaterialModifier>(); styleMod.SetProperties(_layerProperties.materialOptions); styleMod.ModifierHasChanged += UpdateVector; bool isCustomStyle = (_layerProperties.materialOptions.style == StyleTypes.Custom); if ((isCustomStyle) ? (_layerProperties.materialOptions.customStyleOptions.texturingType == UvMapType.AtlasWithColorPalette) : (_layerProperties.materialOptions.texturingType == UvMapType.AtlasWithColorPalette)) { var colorPaletteMod = AddOrCreateGameObjectModifier <MapboxStylesColorModifier>(); colorPaletteMod.m_scriptablePalette = (isCustomStyle) ? _layerProperties.materialOptions.customStyleOptions.colorPalette : _layerProperties.materialOptions.colorPalette; _layerProperties.materialOptions.PropertyHasChanged += UpdateVector; //TODO: Add SetProperties Method to MapboxStylesColorModifier } break; } default: break; } _layerProperties.coreOptions.PropertyHasChanged += UpdateVector; _layerProperties.filterOptions.PropertyHasChanged += UpdateVector; _layerProperties.filterOptions.RegisterFilters(); if (_layerProperties.MeshModifiers != null) { _defaultStack.MeshModifiers.AddRange(_layerProperties.MeshModifiers); } if (_layerProperties.GoModifiers != null) { _defaultStack.GoModifiers.AddRange(_layerProperties.GoModifiers); } _layerProperties.PropertyHasChanged += UpdateVector; }
public void SetProperties(VectorSubLayerProperties properties, LayerPerformanceOptions performanceOptions) { List <MeshModifier> defaultMeshModifierStack = new List <MeshModifier>(); List <GameObjectModifier> defaultGOModifierStack = new List <GameObjectModifier>(); _layerProperties = properties; _performanceOptions = performanceOptions; Active = _layerProperties.coreOptions.isActive; if (properties.coreOptions.groupFeatures) { _defaultStack = ScriptableObject.CreateInstance <MergedModifierStack>(); } else { _defaultStack = ScriptableObject.CreateInstance <ModifierStack>(); ((ModifierStack)_defaultStack).moveFeaturePositionTo = _layerProperties.moveFeaturePositionTo; } _defaultStack.MeshModifiers = new List <MeshModifier>(); _defaultStack.GoModifiers = new List <GameObjectModifier>(); switch (properties.coreOptions.geometryType) { case VectorPrimitiveType.Point: case VectorPrimitiveType.Custom: // Let the user add anything that they want if (_layerProperties.coreOptions.snapToTerrain == true) { defaultMeshModifierStack.Add(CreateInstance <SnapTerrainModifier>()); } break; case VectorPrimitiveType.Line: var lineMeshMod = CreateInstance <LineMeshModifier>(); lineMeshMod.Width = _layerProperties.coreOptions.lineWidth; defaultMeshModifierStack.Add(lineMeshMod); if (_layerProperties.extrusionOptions.extrusionType != Map.ExtrusionType.None) { var heightMod = CreateInstance <HeightModifier>(); heightMod.SetProperties(_layerProperties.extrusionOptions); defaultMeshModifierStack.Add(heightMod); } if (_layerProperties.coreOptions.snapToTerrain == true) { defaultMeshModifierStack.Add(CreateInstance <SnapTerrainModifier>()); } //collider modifier options if (_layerProperties.colliderOptions.colliderType != ColliderType.None) { var lineColliderMod = CreateInstance <ColliderModifier>(); lineColliderMod.SetProperties(_layerProperties.colliderOptions); defaultGOModifierStack.Add(lineColliderMod); } var lineStyleMod = CreateInstance <MaterialModifier>(); lineStyleMod.SetProperties(MapboxDefaultStyles.GetGeometryMaterialOptions(_layerProperties.materialOptions)); defaultGOModifierStack.Add(lineStyleMod); break; case VectorPrimitiveType.Polygon: if (_layerProperties.coreOptions.snapToTerrain == true) { defaultMeshModifierStack.Add(CreateInstance <SnapTerrainModifier>()); } defaultMeshModifierStack.Add(CreateInstance <PolygonMeshModifier>()); GeometryMaterialOptions geometryMaterialOptions = MapboxDefaultStyles.GetGeometryMaterialOptions(_layerProperties.materialOptions); UVModifierOptions uvModOptions = new UVModifierOptions(); uvModOptions.texturingType = geometryMaterialOptions.texturingType; uvModOptions.atlasInfo = geometryMaterialOptions.atlasInfo; uvModOptions.style = geometryMaterialOptions.style; var uvMod = CreateInstance <UvModifier>(); uvMod.SetProperties(uvModOptions); defaultMeshModifierStack.Add(uvMod); if (_layerProperties.extrusionOptions.extrusionType != Map.ExtrusionType.None) { //replace materialOptions with styleOptions if (geometryMaterialOptions.texturingType == UvMapType.Atlas || geometryMaterialOptions.texturingType == UvMapType.AtlasWithColorPalette) { var atlasMod = CreateInstance <TextureSideWallModifier>(); GeometryExtrusionWithAtlasOptions atlasOptions = new GeometryExtrusionWithAtlasOptions(_layerProperties.extrusionOptions, uvModOptions); atlasMod.SetProperties(atlasOptions); defaultMeshModifierStack.Add(atlasMod); } else { var heightMod = CreateInstance <HeightModifier>(); heightMod.SetProperties(_layerProperties.extrusionOptions); defaultMeshModifierStack.Add(heightMod); } } //collider modifier options if (_layerProperties.colliderOptions.colliderType != ColliderType.None) { var polyColliderMod = CreateInstance <ColliderModifier>(); polyColliderMod.SetProperties(_layerProperties.colliderOptions); defaultGOModifierStack.Add(polyColliderMod); } var styleMod = CreateInstance <MaterialModifier>(); styleMod.SetProperties(geometryMaterialOptions); defaultGOModifierStack.Add(styleMod); if (geometryMaterialOptions.texturingType == UvMapType.AtlasWithColorPalette) { var colorPaletteMod = CreateInstance <MapboxStylesColorModifier>(); colorPaletteMod.m_scriptablePalette = geometryMaterialOptions.colorPalette; defaultGOModifierStack.Add(colorPaletteMod); } break; default: break; } _defaultStack.MeshModifiers.AddRange(defaultMeshModifierStack); _defaultStack.GoModifiers.AddRange(defaultGOModifierStack); //Add any additional modifiers that were added. _defaultStack.MeshModifiers.AddRange(_layerProperties.MeshModifiers); _defaultStack.GoModifiers.AddRange(_layerProperties.GoModifiers); }
public void SetProperties(VectorSubLayerProperties properties) { List <MeshModifier> defaultMeshModifierStack = new List <MeshModifier>(); List <GameObjectModifier> defaultGOModifierStack = new List <GameObjectModifier>(); _layerProperties = properties; _performanceOptions = properties.performanceOptions; Active = _layerProperties.coreOptions.isActive; if (properties.coreOptions.combineMeshes) { _defaultStack = ScriptableObject.CreateInstance <MergedModifierStack>(); } else { _defaultStack = ScriptableObject.CreateInstance <ModifierStack>(); ((ModifierStack)_defaultStack).moveFeaturePositionTo = _layerProperties.moveFeaturePositionTo; } _defaultStack.MeshModifiers = new List <MeshModifier>(); _defaultStack.GoModifiers = new List <GameObjectModifier>(); switch (properties.coreOptions.geometryType) { case VectorPrimitiveType.Point: case VectorPrimitiveType.Custom: // Let the user add anything that they want if (_layerProperties.coreOptions.snapToTerrain == true) { defaultMeshModifierStack.Add(CreateInstance <SnapTerrainModifier>()); } break; case VectorPrimitiveType.Line: var lineMeshMod = CreateInstance <LineMeshModifier>(); lineMeshMod.Width = _layerProperties.coreOptions.lineWidth; defaultMeshModifierStack.Add(lineMeshMod); if (_layerProperties.extrusionOptions.extrusionType != Map.ExtrusionType.None) { var heightMod = CreateInstance <HeightModifier>(); heightMod.SetProperties(_layerProperties.extrusionOptions); defaultMeshModifierStack.Add(heightMod); } if (_layerProperties.coreOptions.snapToTerrain == true) { defaultMeshModifierStack.Add(CreateInstance <SnapTerrainModifier>()); } //collider modifier options if (_layerProperties.colliderOptions.colliderType != ColliderType.None) { var lineColliderMod = CreateInstance <ColliderModifier>(); lineColliderMod.SetProperties(_layerProperties.colliderOptions); defaultGOModifierStack.Add(lineColliderMod); } var lineStyleMod = CreateInstance <MaterialModifier>(); lineStyleMod.SetProperties(MapboxDefaultStyles.GetGeometryMaterialOptions(_layerProperties.materialOptions)); defaultGOModifierStack.Add(lineStyleMod); break; case VectorPrimitiveType.Polygon: if (_layerProperties.coreOptions.snapToTerrain == true) { defaultMeshModifierStack.Add(CreateInstance <SnapTerrainModifier>()); } defaultMeshModifierStack.Add(CreateInstance <PolygonMeshModifier>()); GeometryMaterialOptions geometryMaterialOptions = MapboxDefaultStyles.GetGeometryMaterialOptions(_layerProperties.materialOptions); UVModifierOptions uvModOptions = new UVModifierOptions(); uvModOptions.texturingType = geometryMaterialOptions.texturingType; uvModOptions.atlasInfo = geometryMaterialOptions.atlasInfo; uvModOptions.style = geometryMaterialOptions.style; var uvMod = CreateInstance <UvModifier>(); uvMod.SetProperties(uvModOptions); defaultMeshModifierStack.Add(uvMod); if (_layerProperties.extrusionOptions.extrusionType != Map.ExtrusionType.None) { //replace materialOptions with styleOptions if (geometryMaterialOptions.texturingType == UvMapType.Atlas || geometryMaterialOptions.texturingType == UvMapType.AtlasWithColorPalette) { var atlasMod = CreateInstance <TextureSideWallModifier>(); GeometryExtrusionWithAtlasOptions atlasOptions = new GeometryExtrusionWithAtlasOptions(_layerProperties.extrusionOptions, uvModOptions); atlasMod.SetProperties(atlasOptions); defaultMeshModifierStack.Add(atlasMod); } else { var heightMod = CreateInstance <HeightModifier>(); heightMod.SetProperties(_layerProperties.extrusionOptions); defaultMeshModifierStack.Add(heightMod); } } //collider modifier options if (_layerProperties.colliderOptions.colliderType != ColliderType.None) { var polyColliderMod = CreateInstance <ColliderModifier>(); polyColliderMod.SetProperties(_layerProperties.colliderOptions); defaultGOModifierStack.Add(polyColliderMod); } var styleMod = CreateInstance <MaterialModifier>(); styleMod.SetProperties(geometryMaterialOptions); defaultGOModifierStack.Add(styleMod); if (geometryMaterialOptions.texturingType == UvMapType.AtlasWithColorPalette) { var colorPaletteMod = CreateInstance <MapboxStylesColorModifier>(); colorPaletteMod.m_scriptablePalette = geometryMaterialOptions.colorPalette; defaultGOModifierStack.Add(colorPaletteMod); } break; default: break; } _defaultStack.MeshModifiers.AddRange(defaultMeshModifierStack); _defaultStack.GoModifiers.AddRange(defaultGOModifierStack); //Add any additional modifiers that were added. _defaultStack.MeshModifiers.AddRange(_layerProperties.MeshModifiers); _defaultStack.GoModifiers.AddRange(_layerProperties.GoModifiers); //Adding filters from the types dropdown //if ((MapboxSpecialLayerParameters.LayerNameTypeProperty.ContainsKey(properties.coreOptions.layerName)) && !string.IsNullOrEmpty(properties.selectedTypes)) //{ // LayerFilter filter = new LayerFilter(LayerFilterOperationType.Contains); // filter.Key = MapboxSpecialLayerParameters.LayerNameTypeProperty[properties.coreOptions.layerName]; // filter.PropertyValue = properties.selectedTypes; // //if (properties.coreOptions.layerName == properties.roadLayer) // //{ // // filter.Key = properties.roadLayer_TypeProperty; // // filter.PropertyValue = properties.selectedTypes; // //} // //else if (properties.coreOptions.layerName == "landuse") // //{ // // filter.Key = properties.landuseLayer_TypeProperty; // // filter.PropertyValue = properties.selectedTypes; // //} // properties.filterOptions.filters.Add(filter); //} }
private int maxDensity = 30; //This value is same as the density's max range value in PrefabItemOptions public void SetProperties(PrefabItemOptions item, LayerPerformanceOptions performanceOptions) { SubLayerProperties = item; Active = item.isActive; _performanceOptions = performanceOptions; //Check to make sure that when Categories selection is none, the location prefab is disabled if (item.findByType == LocationPrefabFindBy.MapboxCategory && item.categories == LocationPrefabCategories.None) { return; } if (item.spawnPrefabOptions.prefab == null) { Debug.LogError("No prefab found. Please assign a prefab to spawn it on the map"); } //These are fixed properties item.coreOptions.geometryType = item.primitiveType; item.extrusionOptions = new GeometryExtrusionOptions { extrusionType = item.extrusionType }; item.coreOptions.groupFeatures = item.groupFeatures; item.moveFeaturePositionTo = item._movePrefabFeaturePositionTo; string layerName = ""; if (item.layerNameFromFindByTypeDictionary.TryGetValue(item.findByType, out layerName)) { item.coreOptions.layerName = layerName; base.Key = layerName; } //These properties are dependent on user choices if (item.findByType != LocationPrefabFindBy.AddressOrLatLon) { if (item.findByType == LocationPrefabFindBy.MapboxCategory) { SetCategoryFilterOptions(item); } if (item.findByType == LocationPrefabFindBy.POIName) { SetNameFilters(item); } SetDensityFilters(item); } switch (item.coreOptions.geometryType) { case VectorPrimitiveType.Point: if (typeof(PrefabItemOptions).IsAssignableFrom(item.GetType())) //to check that the instance is of type PrefabItemOptions { var itemProperties = (PrefabItemOptions)item; var prefabModifier = ScriptableObject.CreateInstance <PrefabModifier>(); prefabModifier.SetProperties(itemProperties.spawnPrefabOptions); _defaultStack = ScriptableObject.CreateInstance <ModifierStack>(); if (_defaultStack.GoModifiers == null) { _defaultStack.GoModifiers = new List <GameObjectModifier>(); } _defaultStack.GoModifiers.Add(prefabModifier); if (itemProperties.snapToTerrain == true) { _defaultStack.MeshModifiers.Add(ScriptableObject.CreateInstance <SnapTerrainModifier>()); } } break; default: break; } }