diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs index 3bc63de629..a1d7167b4d 100644 --- a/BizHawk.Client.Common/movie/MovieSession.cs +++ b/BizHawk.Client.Common/movie/MovieSession.cs @@ -112,10 +112,10 @@ namespace BizHawk.Client.Common } } - public void MovieLoad() + public bool MovieLoad() { - Movie.Load(); MovieControllerAdapter = Movie.LogGeneratorInstance().MovieControllerAdapter; + return Movie.Load(); } public void StopMovie(bool saveChanges = true) diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs index 19558f7277..1be1f7e958 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs @@ -18,7 +18,6 @@ namespace BizHawk.Client.EmuHawk return; } - //If a movie is already loaded, save it before starting a new movie if (Global.MovieSession.Movie.IsActive && !string.IsNullOrEmpty(Global.MovieSession.Movie.Filename)) { diff --git a/BizHawk.Client.EmuHawk/movie/RecordMovie.cs b/BizHawk.Client.EmuHawk/movie/RecordMovie.cs index f0a99003be..dc012dfcec 100644 --- a/BizHawk.Client.EmuHawk/movie/RecordMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/RecordMovie.cs @@ -85,9 +85,7 @@ namespace BizHawk.Client.EmuHawk } } - // Header movieToRecord.PopulateWithDefaultHeaderValues(AuthorBox.Text); - movieToRecord.Save(); GlobalWin.MainForm.StartNewMovie(movieToRecord, true); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 0d9b6134ef..a08667987d 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -56,11 +56,8 @@ namespace BizHawk.Client.EmuHawk if (AskSave()) { SaveConfigSettings(); - GlobalWin.OSD.AddMessage("TAStudio Disengaged"); - if (Global.MovieSession.Movie is TasMovie) - { - GlobalWin.MainForm.StopMovie(saveChanges: false); - } + GlobalWin.MainForm.StopMovie(saveChanges: true); + DisengageTastudio(); } else { @@ -186,10 +183,7 @@ namespace BizHawk.Client.EmuHawk 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 == DialogResult.OK) { - Global.MovieSession.Movie.Save(); - var newMovie = Global.MovieSession.Movie.ToTasMovie(); - Global.MovieSession.Movie.Stop(); - EngageTasStudio(newMovie); + ConvertCurrentMovieToTasproj(); } else { @@ -201,42 +195,62 @@ namespace BizHawk.Client.EmuHawk // Start Scenario 2: A tasproj is already active else if (Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie is TasMovie) { - _tas = Global.MovieSession.Movie as TasMovie; + // Nothing to do } // Start Scenario 3: No movie, but user wants to autload their last project else if (Global.Config.AutoloadTAStudioProject) { - Global.MovieSession.Movie = new TasMovie(); - _tas = Global.MovieSession.Movie as TasMovie; - LoadFileFromRecent(Global.Config.RecentTas[0]); + LoadProject(Global.Config.RecentTas.MostRecent); } // Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project else { - EngageTasStudio(); + NewTasMovie(); + StartSessionFromTasMovie(); } + EngageTastudio(); SetUpColumns(); LoadConfigSettings(); } - private void EngageTasStudio(TasMovie newMovie = null) + private void ConvertCurrentMovieToTasproj() { - GlobalWin.OSD.AddMessage("TAStudio engaged"); - - Global.MovieSession.Movie = newMovie ?? new TasMovie(); - if (newMovie == null) - { - Global.MovieSession.Movie.PopulateWithDefaultHeaderValues(); - } - - _tas = Global.MovieSession.Movie as TasMovie; - StartNewSession(); + Global.MovieSession.Movie.Save(); + Global.MovieSession.Movie = Global.MovieSession.Movie.ToTasMovie(); + Global.MovieSession.Movie.Save(); } - private void StartNewSession() + private void EngageTastudio() + { + GlobalWin.OSD.AddMessage("TAStudio engaged"); + _tas = Global.MovieSession.Movie as TasMovie; + } + + private void DisengageTastudio() + { + GlobalWin.OSD.AddMessage("TAStudio disengaged"); + Global.MovieSession.Movie = MovieService.DefaultInstance; + } + + private void NewTasMovie() + { + Global.MovieSession.Movie = new TasMovie(); + _tas = Global.MovieSession.Movie as TasMovie; + _tas.Filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename + _tas.PopulateWithDefaultHeaderValues(); + } + + private static string DefaultTasProjName() + { + return Path.Combine( + PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPathFragment, null), + PathManager.FilesystemSafeName(Global.Game) + "." + TasMovie.Extension); + } + + private void StartSessionFromTasMovie() { if (AskSave()) { @@ -245,6 +259,31 @@ namespace BizHawk.Client.EmuHawk } } + public void LoadProject(string path) + { + if (AskSave()) + { + NewTasMovie(); + _tas.Filename = path; + + var loadResult = Global.MovieSession.MovieLoad(); + if (!loadResult) + { + ToolHelpers.HandleLoadError(Global.Config.RecentTas, path); + } + else + { + Global.Config.RecentTas.Add(path); + RefreshDialog(); + } + } + } + + private void RefreshDialog() + { + TasView.ItemCount = _tas.InputLogLength; + } + private void SetUpColumns() { TasView.Columns.Clear(); @@ -296,24 +335,6 @@ namespace BizHawk.Client.EmuHawk Global.Config.TAStudioSettings.Height = Bottom - Top; } - public void LoadFileFromRecent(string path) - { - if (AskSave()) - { - _tas.Filename = path; - var loadResult = _tas.Load(); // TODO: Global.MovieSession.MovieLoad() needs to be called in order to set up the Movie adapter properly - if (!loadResult) - { - ToolHelpers.HandleLoadError(Global.Config.RecentTas, path); - } - else - { - Global.Config.RecentTas.Add(path); - TasView.ItemCount = _tas.InputLogLength; - } - } - } - private void GoToFrame(int frame) { // If past greenzone, emulate and capture states @@ -377,14 +398,14 @@ namespace BizHawk.Client.EmuHawk { RecentSubMenu.DropDownItems.Clear(); RecentSubMenu.DropDownItems.AddRange( - ToolHelpers.GenerateRecentMenu(Global.Config.RecentTas, LoadFileFromRecent) + ToolHelpers.GenerateRecentMenu(Global.Config.RecentTas, LoadProject) ); } private void NewTasMenuItem_Click(object sender, EventArgs e) { GlobalWin.OSD.AddMessage("new TAStudio session started"); - StartNewSession(); + StartSessionFromTasMovie(); } private void OpenTasMenuItem_Click(object sender, EventArgs e)