Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            //}
        }