private void MapDiscoverWindowPrepare(MapDiscoverWindow targetWnd) { ForgetMapDiscoverWindow(); currentMapWnd = targetWnd; OnKeyPressed += currentMapWnd.KeyPressedHandler; currentMapWnd.OnCursorChanged += CurrentMapWndCursorChanged; currentMapWnd.OnMazeItemDiscovered += CurrentMapWndItemDiscovered; }
private void ForgetMapDiscoverWindow() { if (currentMapWnd != null) { OnKeyPressed -= currentMapWnd.KeyPressedHandler; currentMapWnd.OnCursorChanged -= CurrentMapWndCursorChanged; currentMapWnd.OnMazeItemDiscovered -= CurrentMapWndItemDiscovered; currentMapWnd = null; } }
private void OpenMenuItemClick(object sender, EventArgs e) { var dialogWnd = new OpenFileWindow { TargetFolder = targetMapFolder }; if (dialogWnd.ShowDialog() == DialogResult.OK) { coins = 0; keyCount = 0; steps = 0; string[] mazeString; try { var fileName = Path.GetFileNameWithoutExtension(dialogWnd.FileName); if (fileName?.StartsWith('<') == true) { var assembly = Assembly.GetExecutingAssembly(); var resourceName = assembly.GetManifestResourceNames() .Single(str => str.EndsWith($"{fileName.Substring(2, fileName.Length - 4)}.mmf")); using var stream = assembly.GetManifestResourceStream(resourceName); using var reader = new StreamReader(stream); var resourceAllText = reader.ReadToEnd(); mazeString = Regex.Split(resourceAllText, "\r\n|\r|\n"); } else { mazeString = File.ReadAllLines(dialogWnd.FileName); } } catch (Exception exception) { MessageBox.ShowError(exception.Message); return; } rowCount = mazeString.Length; colCount = mazeString[0].Length; var mazeCells = new int[rowCount, colCount]; for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) { for (var colIndex = 0; colIndex < colCount; colIndex++) { var mazeCellValue = Convert.ToInt32(mazeString[rowIndex][colIndex].ToString()); mazeCells[rowIndex, colIndex] = mazeCellValue; if (mazeCellValue == (int)MapItem.StartPoint) { startPoint = new Point(colIndex, rowIndex); } } } var mapWnd = new MapDiscoverWindow(mazeCells, startPoint) { panel1 = { Parent = panel1 } }; MapDiscoverWindowPrepare(mapWnd); PrepareStatusBar(new Size(colCount, rowCount)); currentFileName = Path.GetFileNameWithoutExtension(dialogWnd.FileName); SetWindowTitle(currentFileName); } }