private void LoadMap() { if (MapListBox.SelectedValue == null) { return; } string _SelectedMapName = ((KeyValuePair <int, string>)MapListBox.SelectedValue).Value; WDTGrid.Children.Clear(); progressBar.Visibility = Visibility.Visible; progressLabel.Visibility = Visibility.Visible; progressBar.Value = 0; progressLabel.Content = "Loading minimap.."; var wdt = new WDTReader(); if (CASC.cascHandler.FileExists(System.IO.Path.Combine(@"world\maps\", _SelectedMapName, _SelectedMapName + ".wdt"))) { Stopwatch _SW = new Stopwatch(); BackgroundWorker _BackgroundWorker = new BackgroundWorker(); _BackgroundWorker.WorkerReportsProgress = true; _BackgroundWorker.DoWork += new DoWorkEventHandler( (object o, DoWorkEventArgs args) => { _SW.Start(); BackgroundWorker _Worker = o as BackgroundWorker; wdt.LoadWDT(System.IO.Path.Combine(@"world\maps\", _SelectedMapName, _SelectedMapName + ".wdt")); List <int[]> tiles = wdt.GetTiles(); for (int i = 0; i < tiles.Count; i++) { if (fCancelMapLoading) { break; } Action _LoadTileAction = delegate() { LoadTile(tiles[i]); }; this.Dispatcher.Invoke(_LoadTileAction); _Worker.ReportProgress((i * 100) / tiles.Count, "Loading minimap.."); } _Worker.ReportProgress(100, "Minimap loaded."); }); _BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler( (object o, ProgressChangedEventArgs args) => { progressBar.Value = args.ProgressPercentage; progressLabel.Content = (string)args.UserState; }); _BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler( (object sender, RunWorkerCompletedEventArgs args) => { fCancelMapLoading = false; _SW.Stop(); }); _BackgroundWorker.RunWorkerAsync(); } }
private void LoadMap(string map) { WDTGrid.Children.Clear(); var wdt = new WDTReader(); if (CASC.cascHandler.FileExists(System.IO.Path.Combine(@"world\maps\", map, map + ".wdt"))) { Stopwatch _SW = new Stopwatch(); BackgroundWorker _BackgroundWorker = new BackgroundWorker(); _BackgroundWorker.WorkerReportsProgress = true; _BackgroundWorker.DoWork += new DoWorkEventHandler( (object o, DoWorkEventArgs args) => { _SW.Start(); BackgroundWorker _Worker = o as BackgroundWorker; wdt.LoadWDT(System.IO.Path.Combine(@"world\maps\", map, map + ".wdt")); List <int[]> tiles = wdt.GetTiles(); if (tiles.Count == 0) { return; } for (int i = 0; i < tiles.Count; i++) { if (map == "Kalimdor") { if (tiles[i][0] < 5 && tiles[i][1] < 5) { // Filter out GM island continue; } } if (tiles[i][0] < min_x) { min_x = tiles[i][0]; } if (tiles[i][1] < min_y) { min_y = tiles[i][1]; } if (tiles[i][0] > max_x) { max_x = tiles[i][0]; } if (tiles[i][1] > max_y) { max_y = tiles[i][1]; } } for (int i = 0; i < tiles.Count; i++) { if (map == "Kalimdor") { // Filter out GM island if (tiles[i][0] < 5 && tiles[i][1] < 5) { continue; } } if (fCancelMapLoading) { break; } Action _LoadTileAction = delegate() { LoadTile(tiles[i]); }; this.Dispatcher.Invoke(_LoadTileAction); _Worker.ReportProgress((i * 100) / tiles.Count, "Loading map.."); } _Worker.ReportProgress(100, "Map loaded."); }); _BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler( (object o, ProgressChangedEventArgs args) => { progressBar.Value = args.ProgressPercentage; progressLabel.Content = (string)args.UserState; }); _BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler( (object sender, RunWorkerCompletedEventArgs args) => { fCancelMapLoading = false; if (max_x == 0 && min_x == 64) { Close(); return; } Width = (max_x - min_x) * (WDTGrid.Width / 64) + 64; Height = (max_y - min_y) * (WDTGrid.Height / 64) + 64; progressBar.Visibility = Visibility.Hidden; progressLabel.Visibility = Visibility.Hidden; WDTGrid.Visibility = Visibility.Visible; _SW.Stop(); }); _BackgroundWorker.RunWorkerAsync(); } }