public MapLayer(LevelMap map, MiMapLevelLayerConfig config) { Map = map; LayerId = config.LayerId ?? "base"; Directory = Path.Combine(map.TilesDirectory, LayerId); Renderer = RendererFactory.CreateLayerRenderer(config.Renderer); var postProcessors = new List <IPostProcessor>(); foreach (var pp in config.Renderer.PostProcessors) { var p = PostProcessorFactory.CreatePostProcessor(pp); if (p != null) { postProcessors.Add(p); } } PostProcessors = postProcessors.ToArray(); Scaler = new TileScaler(Directory, Renderer.RenderScale, map.Meta.TileSize, map.Meta.MinZoom, map.Meta.MaxZoom, map.Config.LevelId, LayerId); Scaler.OnTileUpdated += (s, e) => OnTileUpdated?.Invoke(s, e); //CleanupTimer = new Timer(CleanupCallback, null, 5000, 5000); }
public LevelMap(MiMapManager miMapManager, MiMapLevelConfig config) { MiMapManager = miMapManager; Config = config; Meta = new LevelMeta() { Id = config.LevelId, Name = string.IsNullOrEmpty(config.Label) ? config.LevelId : config.Label, MinZoom = config.MinZoom, MaxZoom = config.MaxZoom, TileSize = new Size(config.TileSize, config.TileSize), Size = new Size(), Bounds = new BlockBounds(new BlockPosition(0, 0), new BlockPosition(0, 0)), LastUpdate = DateTime.MinValue }; BlockBounds = new BlockBounds(new BlockPosition(0, 0), new BlockPosition(0, 0)); TilesDirectory = Path.Combine(MiMapManager.Config.TilesDirectory, config.LevelId); _metaPath = Path.Combine(TilesDirectory, "meta.json"); #if DEBUG if (Directory.Exists(TilesDirectory)) { try { Directory.Delete(TilesDirectory, true); } catch { } } #endif Directory.CreateDirectory(TilesDirectory); _layers = new MapLayer[config.Layers.Length + 1]; var baseLayer = new MapLayer(this, new MiMapLevelLayerConfig() { LayerId = "base", BlendMode = BlendMode.Normal, Default = config.Enabled, Enabled = config.Enabled, Label = config.Label, Renderer = config.Renderer }); baseLayer.OnTileUpdated += (s, e) => OnTileUpdated?.Invoke(s, e); var i = 0; _layers[i] = baseLayer; i++; foreach (var layer in config.Layers) { //Log.InfoFormat("Loading Overlay layer {0} {1}/{2}", layer, i, _layers.Length); var overlayerLayer = new MapLayer(this, layer); overlayerLayer.OnTileUpdated += (s, e) => OnTileUpdated?.Invoke(s, e); _layers[i] = overlayerLayer; i++; } _timer = new Timer(SaveLayers); }