예제 #1
0
파일: CrispyEmu.cs 프로젝트: Monczak/Crispy
        private void HandleFunctionKeys()
        {
            InputHandler.HandleKeypress(loadRomKey, () =>
            {
                if (!fileDialogVisible && !helpMenuVisible)
                {
                    fileDialog = new FileDialog(FileDialogMode.OpenFile)
                    {
                        Filter = "*.ch8"
                    };

                    fileDialog.Closed += (s, a) =>
                    {
                        isPaused          = false;
                        fileDialogVisible = false;
                        if (!fileDialog.Result)
                        {
                            return;
                        }

                        currentRomPath = fileDialog.FilePath;

                        cpu.Reset();

                        currentRom               = File.ReadAllBytes(currentRomPath);
                        currentRomName           = Path.GetFileNameWithoutExtension(currentRomPath);
                        SavestateManager.romName = currentRomName;
                        cpu.LoadProgram(currentRom);
                        RewindManager.Initialize(rewindBufferSize);

                        isRunning = true;
                        RemoveAllMessages();
                    };
                    isPaused = true;

                    fileDialog.ShowModal();
                    fileDialogVisible = true;
                }
                else if (fileDialogVisible)
                {
                    fileDialog.Close();
                    fileDialogVisible = false;
                }
            });

            InputHandler.HandleKeypress(resetKey, () =>
            {
                if (isRunning && !helpMenuVisible && !fileDialogVisible)
                {
                    cpu.Reset();
                    cpu.LoadProgram(currentRom);
                    ShowMessage("Reset", 2.5f);
                }
            });

            InputHandler.HandleKeypress(nextSaveStateSlotKey, () =>
            {
                if (isRunning && !helpMenuVisible && !fileDialogVisible)
                {
                    SavestateManager.SelectNextSlot();
                    ShowMessage($"Selected slot {SavestateManager.selectedSlot} {(SavestateManager.IsSelectedSlotEmpty() ? "(empty)" : "")}", 2.5f);
                }
            });
            InputHandler.HandleKeypress(previousSaveStateSlotKey, () =>
            {
                if (isRunning && !helpMenuVisible && !fileDialogVisible)
                {
                    SavestateManager.SelectPreviousSlot();
                    ShowMessage($"Selected slot {SavestateManager.selectedSlot} {(SavestateManager.IsSelectedSlotEmpty() ? "(empty)" : "")}", 2.5f);
                }
            });

            InputHandler.HandleKeypress(helpKey, () =>
            {
                if (!helpMenuVisible && !fileDialogVisible)
                {
                    helpMenu = new Window
                    {
                        Title = "Welcome to Crispy!"
                    };
                    Label text = new Label
                    {
                        Text = readme,
                        VerticalAlignment = VerticalAlignment.Stretch,
                        Wrap = true
                    };
                    ScrollViewer scrollViewer = new ScrollViewer
                    {
                        Content = text
                    };

                    helpMenu.Content = scrollViewer;

                    helpMenu.Closed += (s, a) =>
                    {
                        helpMenuVisible = false;
                    };

                    helpMenu.ShowModal();
                    helpMenuVisible = true;
                }
                else if (helpMenuVisible)
                {
                    helpMenu.Close();
                    helpMenuVisible = false;
                }
            });

            InputHandler.HandleKeypress(screenshotKey, () =>
            {
                if (!helpMenuVisible && !fileDialogVisible)
                {
                    string screenshotPath = $"Screenshots/{DateTime.Now.ToString().Replace("/", "-").Replace(":", "-")}.jpg";

                    if (!File.Exists(screenshotPath))
                    {
                        try
                        {
                            File.Create(screenshotPath).Dispose();
                        }
                        catch (DirectoryNotFoundException)
                        {
                            Directory.CreateDirectory(Path.GetDirectoryName(screenshotPath));
                        }
                    }

                    using (Texture2D screenshot = TakeScreenshot())
                        SaveScreenshot(screenshot, File.OpenWrite(screenshotPath));

                    ShowMessage($"Saved screenshot as {Path.GetFileName(screenshotPath)}", 2.5f);
                }
            });
        }