private bool Engage() { _engaged = false; MainForm.PauseOnFrame = null; MainForm.PauseEmulator(); // Nag if inaccurate core, but not if auto-loading or movie is already loaded if (!CanAutoload && MovieSession.Movie.NotActive()) { // Nag but allow the user to continue anyway, so ignore the return value MainForm.EnsureCoreIsAccurate(); } // Start Scenario 1: A regular movie is active if (MovieSession.Movie.IsActive() && !(MovieSession.Movie is ITasMovie)) { var changesString = "Would you like to save the current movie before closing it?"; if (MovieSession.Movie.Changes) { changesString = "The current movie has unsaved changes. Would you like to save before closing it?"; } var result = MessageBox.Show( "TAStudio will create a new project file from the current movie.\n\n" + changesString, "Convert movie", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result.Equals(DialogResult.Yes)) { MovieSession.Movie.Save(); } else if (result.Equals(DialogResult.Cancel)) { return(false); } ConvertCurrentMovieToTasproj(); StartNewMovieWrapper(CurrentTasMovie); SetUpColumns(); } // Start Scenario 2: A tasproj is already active else if (MovieSession.Movie.IsActive() && MovieSession.Movie is ITasMovie) { bool result = LoadFile(new FileInfo(CurrentTasMovie.Filename), gotoFrame: Emulator.Frame); if (!result) { TasView.AllColumns.Clear(); StartNewTasMovie(); } } // Start Scenario 3: No movie, but user wants to autoload their last project else if (CanAutoload) { bool result = LoadFile(new FileInfo(Settings.RecentTas.MostRecent)); if (!result) { TasView.AllColumns.Clear(); StartNewTasMovie(); } } // Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project else { StartNewTasMovie(); } // Attempts to load failed, abort if (Emulator.IsNull()) { Disengage(); return(false); } MainForm.AddOnScreenMessage("TAStudio engaged"); SetTasMovieCallbacks(CurrentTasMovie); UpdateWindowTitle(); MainForm.RelinquishControl(this); _originalEndAction = Config.Movies.MovieEndAction; MainForm.DisableRewind(); Config.Movies.MovieEndAction = MovieEndAction.Record; MainForm.SetMainformMovieInfo(); MovieSession.ReadOnly = true; SetSplicer(); SetupBoolPatterns(); _engaged = true; return(true); }
private bool Engage() { _engaged = false; MainForm.PauseOnFrame = null; MainForm.PauseEmulator(); // Nag if inaccurate core, but not if auto-loading or movie is already loaded if (!CanAutoload && MovieSession.Movie.NotActive()) { // Nag but allow the user to continue anyway, so ignore the return value MainForm.EnsureCoreIsAccurate(); } // Start Scenario 1: A regular movie is active if (MovieSession.Movie.IsActive() && !(MovieSession.Movie is ITasMovie)) { var result = MessageBox.Show("In order to use Tastudio, a new project must be created from the current movie\nThe current movie will be saved and closed, and a new project file will be created\nProceed?", "Convert movie", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (result.IsOk()) { ConvertCurrentMovieToTasproj(); StartNewMovieWrapper(CurrentTasMovie); SetUpColumns(); } else { return(false); } } // Start Scenario 2: A tasproj is already active else if (MovieSession.Movie.IsActive() && MovieSession.Movie is ITasMovie) { bool result = LoadFile(new FileInfo(CurrentTasMovie.Filename), gotoFrame: Emulator.Frame); if (!result) { TasView.AllColumns.Clear(); StartNewTasMovie(); } } // Start Scenario 3: No movie, but user wants to autoload their last project else if (CanAutoload) { bool result = LoadFile(new FileInfo(Settings.RecentTas.MostRecent)); if (!result) { TasView.AllColumns.Clear(); StartNewTasMovie(); } } // Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project else { StartNewTasMovie(); } // Attempts to load failed, abort if (Emulator.IsNull()) { Disengage(); return(false); } MainForm.AddOnScreenMessage("TAStudio engaged"); SetTasMovieCallbacks(CurrentTasMovie); SetTextProperty(); MainForm.RelinquishControl(this); _originalEndAction = Config.Movies.MovieEndAction; MainForm.DisableRewind(); Config.Movies.MovieEndAction = MovieEndAction.Record; MainForm.SetMainformMovieInfo(); MovieSession.ReadOnly = true; SetSplicer(); SetupBoolPatterns(); _engaged = true; return(true); }