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