예제 #1
0
        /// <summary>
        /// Receive map style
        /// </summary>
        /// <param name="type"><see cref="MapStyleData.Type"/> of map style</param>
        /// <returns>Map style as <see cref="GameObjectOptions"/></returns>
        /// <exception cref="ArgumentNullException">Thrown when dataset does not contain <see cref="MapStyleData"/>
        /// of given <see cref="MapStyleData.Type"/></exception>
        public GameObjectOptions GetMapStyle(MapStyleData.Type type)
        {
            var styleData = mapStyleData.FirstOrDefault(element => element.StyleType == type);

            if (styleData == null)
            {
                throw new ArgumentNullException(nameof(styleData), $"Style of {type} type does not exist!");
            }

            var style = styleData.GenerateStyle();

            // Terrain style generation
            var terrainStyleBuilder = new TerrainStyle.Builder()
            {
                AlphaMapResolutionMetersPerPixel = alphaMapResolutionMetersPerPixel,
                BaseMapResolutionMetersPerPixel  = baseMapResolutionMetersPerPixel,
                BaseMapDistance = baseMapDistance,
                TerrainLayers   = new List <TerrainLayer>(terrainLayers)
            };

            style.TerrainStyle = terrainStyleBuilder.Build();

            // Segment style with adjustments to the terrain style
            var segmentStyleBuilder = new SegmentStyle.Builder(style.SegmentStyle)
            {
                GameObjectLayer = style.TerrainStyle.TerrainPaintingLayer
            };

            style.SegmentStyle = segmentStyleBuilder.Build();

            // Area water style with adjustments to the terrain style
            var areaWaterStyleBuilder = new AreaWaterStyle.Builder(style.AreaWaterStyle)
            {
                GameObjectLayer = style.TerrainStyle.TerrainPaintingLayer
            };

            style.AreaWaterStyle = areaWaterStyleBuilder.Build();

            // Region style with adjustments to the terrain style
            var regionStyleBuilder = new RegionStyle.Builder(style.RegionStyle)
            {
                GameObjectLayer = style.TerrainStyle.TerrainPaintingLayer
            };

            style.RegionStyle = regionStyleBuilder.Build();

            // Line water style with adjustments to the terrain style
            var lineWaterStyleBuilder = new LineWaterStyle.Builder(style.LineWaterStyle)
            {
                GameObjectLayer = style.TerrainStyle.TerrainPaintingLayer
            };

            style.LineWaterStyle = lineWaterStyleBuilder.Build();

            return(style);
        }
예제 #2
0
        /// <summary>
        /// Get building nine-slicing material
        /// </summary>
        /// <param name="index">Index number of available building style</param>
        /// <param name="styleType"><see cref="MapStyleData.Type"/> of map style</param>
        /// <returns>Nine-slicing building material</returns>
        public Material[] GetBuildingMaterials(int index, MapStyleData.Type styleType)
        {
            var styleData = mapStyleData.FirstOrDefault(element => element.StyleType == styleType);

            if (styleData == null)
            {
                return(new Material[0]);
            }

            var validIndex = index % styleData.WallsMaterials.Length;
            var materials  = new[] { styleData.WallsMaterials[validIndex], styleData.RoofMaterials[validIndex] };

            return(materials);
        }
예제 #3
0
        /// <summary>
        /// Get parapet material of selected style
        /// </summary>
        /// <param name="type"><see cref="MapStyleData.Type"/> of map style</param>
        /// <returns></returns>
        public Material GetBuildingParapetMaterial(MapStyleData.Type type)
        {
            var styleData = mapStyleData.FirstOrDefault(element => element.StyleType == type);

            return(styleData == null ? null : styleData.ParapetMaterial);
        }