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