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;
     //        }
     //    }
     //}
 }
Exemple #2
0
        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;
        }
Exemple #3
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);
        }
Exemple #4
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);
            //}
        }
        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;
            }
        }