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