From fd149237ee3ed8c4eccbe8b4726070e13ac8d3a2 Mon Sep 17 00:00:00 2001 From: adelikat Date: Tue, 10 Dec 2013 01:45:45 +0000 Subject: [PATCH] TasMovie - implement saving of movie log into files, make header have the proper movie version (v2!), Change file "Movie" to "Header". TAStudio - implement Save and Save As menu items --- BizHawk.Client.Common/BinarySaveStates.cs | 2 +- BizHawk.Client.Common/movie/HeaderKeys.cs | 3 +- BizHawk.Client.Common/movie/MovieHeader.cs | 2 +- BizHawk.Client.Common/movie/MovieImport.cs | 2 +- BizHawk.Client.Common/movie/TasMovie.cs | 10 ++++-- BizHawk.Client.EmuHawk/movie/PlayMovie.cs | 2 +- BizHawk.Client.EmuHawk/movie/RecordMovie.cs | 2 +- .../tools/TAStudio/TAStudio.Designer.cs | 5 +-- .../tools/TAStudio/TAStudio.cs | 33 ++++++++++++++++--- BizHawk.Client.EmuHawk/tools/ToolHelpers.cs | 30 +++++++++++++++++ 10 files changed, 76 insertions(+), 15 deletions(-) diff --git a/BizHawk.Client.Common/BinarySaveStates.cs b/BizHawk.Client.Common/BinarySaveStates.cs index ff7439aee1..f69e55f9d7 100644 --- a/BizHawk.Client.Common/BinarySaveStates.cs +++ b/BizHawk.Client.Common/BinarySaveStates.cs @@ -11,7 +11,7 @@ namespace BizHawk.Client.Common public const string Framebuffer = "Framebuffer"; public const string Input = "Input Log"; public const string CorestateText = "CoreText"; - public const string Movieheader = "Movie"; + public const string Movieheader = "Header"; } /// diff --git a/BizHawk.Client.Common/movie/HeaderKeys.cs b/BizHawk.Client.Common/movie/HeaderKeys.cs index c8ee128689..bc5c803c2b 100644 --- a/BizHawk.Client.Common/movie/HeaderKeys.cs +++ b/BizHawk.Client.Common/movie/HeaderKeys.cs @@ -5,7 +5,8 @@ namespace BizHawk.Client.Common { public static class HeaderKeys { - public const string MovieVersion = "BizHawk v0.0.1"; + public const string MovieVersion1 = "BizHawk v0.0.1"; + public const string MovieVersion2 = "BizHawk v0.0.2"; public const string EMULATIONVERSION = "emuVersion"; public const string MOVIEVERSION = "MovieVersion"; diff --git a/BizHawk.Client.Common/movie/MovieHeader.cs b/BizHawk.Client.Common/movie/MovieHeader.cs index 7a96c6c826..a3c8fdd497 100644 --- a/BizHawk.Client.Common/movie/MovieHeader.cs +++ b/BizHawk.Client.Common/movie/MovieHeader.cs @@ -19,7 +19,7 @@ namespace BizHawk.Client.Common BoardProperties = new Dictionary(); this[HeaderKeys.EMULATIONVERSION] = VersionInfo.GetEmuVersion(); - this[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion; + this[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion1; this[HeaderKeys.PLATFORM] = Global.Emulator != null ? Global.Emulator.SystemId : String.Empty; this[HeaderKeys.GAMENAME] = String.Empty; this[HeaderKeys.AUTHOR] = String.Empty; diff --git a/BizHawk.Client.Common/movie/MovieImport.cs b/BizHawk.Client.Common/movie/MovieImport.cs index 52b095dfda..e65e6c2f7f 100644 --- a/BizHawk.Client.Common/movie/MovieImport.cs +++ b/BizHawk.Client.Common/movie/MovieImport.cs @@ -85,7 +85,7 @@ namespace BizHawk.Client.Common } if (errorMsg == String.Empty) { - m.Header[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion; + m.Header[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion1; } } catch (Exception except) diff --git a/BizHawk.Client.Common/movie/TasMovie.cs b/BizHawk.Client.Common/movie/TasMovie.cs index 2d5984c312..9efbc5fe2d 100644 --- a/BizHawk.Client.Common/movie/TasMovie.cs +++ b/BizHawk.Client.Common/movie/TasMovie.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; - +using System.Text; using BizHawk.Emulation.Common; namespace BizHawk.Client.Common @@ -80,6 +80,7 @@ namespace BizHawk.Client.Common { Filename = String.Empty; Header = new MovieHeader { StartsFromSavestate = startsFromSavestate }; + Header[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion2; _records = new MovieRecordList(); _mode = Moviemode.Inactive; IsCountingRerecords = true; @@ -166,7 +167,12 @@ namespace BizHawk.Client.Common public string GetInputLog() { - return _records.ToString(); + StringBuilder sb = new StringBuilder(); + foreach (var record in _records) + { + sb.AppendLine(_mg.GenerateMnemonicString(record.Buttons)); + } + return sb.ToString(); } public void SwitchToRecord() diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index 984f391fd7..8853376e88 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -349,7 +349,7 @@ namespace BizHawk.Client.EmuHawk } break; case HeaderKeys.MOVIEVERSION: - if (kvp.Value != HeaderKeys.MovieVersion) + if (kvp.Value != HeaderKeys.MovieVersion1) { item.BackColor = Color.Yellow; } diff --git a/BizHawk.Client.EmuHawk/movie/RecordMovie.cs b/BizHawk.Client.EmuHawk/movie/RecordMovie.cs index b1696074d4..421fd111e7 100644 --- a/BizHawk.Client.EmuHawk/movie/RecordMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/RecordMovie.cs @@ -96,7 +96,7 @@ namespace BizHawk.Client.EmuHawk //Header _movieToRecord.Header[HeaderKeys.AUTHOR] = AuthorBox.Text; _movieToRecord.Header[HeaderKeys.EMULATIONVERSION] = VersionInfo.GetEmuVersion(); - _movieToRecord.Header[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion; + _movieToRecord.Header[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion1; _movieToRecord.Header[HeaderKeys.PLATFORM] = Global.Game.System; if (Global.Game != null) { diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs index 140cd7f7f5..fded57ca2b 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs @@ -142,6 +142,7 @@ namespace BizHawk.Client.EmuHawk this.FileSubMenu.Name = "FileSubMenu"; this.FileSubMenu.Size = new System.Drawing.Size(37, 20); this.FileSubMenu.Text = "&File"; + this.FileSubMenu.DropDownOpened += new System.EventHandler(this.FileSubMenu_DropDownOpened); // // NewTASMenuItem // @@ -161,20 +162,20 @@ namespace BizHawk.Client.EmuHawk // // SaveTASMenuItem // - this.SaveTASMenuItem.Enabled = false; this.SaveTASMenuItem.Name = "SaveTASMenuItem"; this.SaveTASMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); this.SaveTASMenuItem.Size = new System.Drawing.Size(186, 22); this.SaveTASMenuItem.Text = "&Save"; + this.SaveTASMenuItem.Click += new System.EventHandler(this.SaveTASMenuItem_Click); // // SaveAsTASMenuItem // - this.SaveAsTASMenuItem.Enabled = false; this.SaveAsTASMenuItem.Name = "SaveAsTASMenuItem"; this.SaveAsTASMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.S))); this.SaveAsTASMenuItem.Size = new System.Drawing.Size(186, 22); this.SaveAsTASMenuItem.Text = "Save As"; + this.SaveAsTASMenuItem.Click += new System.EventHandler(this.SaveAsTASMenuItem_Click); // // RecentSubMenu // diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 43e5defbb4..b383937bb8 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -20,6 +20,10 @@ namespace BizHawk.Client.EmuHawk private int _defaultHeight; private TasMovie _tas; + // Input Painting + private string StartDrawColumn = String.Empty; + private bool StartOn = false; + #region API public TAStudio() @@ -206,6 +210,28 @@ namespace BizHawk.Client.EmuHawk #region File Menu + private void FileSubMenu_DropDownOpened(object sender, EventArgs e) + { + SaveTASMenuItem.Enabled = !String.IsNullOrWhiteSpace(_tas.Filename); + } + + private void SaveTASMenuItem_Click(object sender, EventArgs e) + { + _tas.Save(); + // TODO: inform the user it happened somehow + } + + private void SaveAsTASMenuItem_Click(object sender, EventArgs e) + { + var file = ToolHelpers.GetTasProjSaveFileFromUser(_tas.Filename); + if (DialogResult != null) + { + _tas.Filename = file.FullName; + _tas.Save(); + // TODO: inform the user it happened somehow + } + } + private void ExitMenuItem_Click(object sender, EventArgs e) { Close(); @@ -255,9 +281,6 @@ namespace BizHawk.Client.EmuHawk #region TASView Events - private string StartDrawColumn = String.Empty; //TODO: move me - private bool StartOn = false; //TODO: move me - private void TASView_MouseDown(object sender, MouseEventArgs e) { if (TASView.PointedCell.Row.HasValue && !String.IsNullOrEmpty(TASView.PointedCell.Column)) @@ -270,8 +293,6 @@ namespace BizHawk.Client.EmuHawk } } - #endregion - private void TASView_PointedCellChanged(object sender, TasListView.CellEventArgs e) { if (TASView.IsPaintDown && e.NewCell.Row.HasValue && !String.IsNullOrEmpty(StartDrawColumn)) @@ -282,5 +303,7 @@ namespace BizHawk.Client.EmuHawk } #endregion + + #endregion } } diff --git a/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs b/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs index 7eeba59bd2..d71b927d8f 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs @@ -11,6 +11,36 @@ namespace BizHawk.Client.EmuHawk { public static class ToolHelpers { + public static FileInfo GetTasProjSaveFileFromUser(string currentFile) + { + var sfd = new SaveFileDialog(); + if (!String.IsNullOrWhiteSpace(currentFile)) + { + sfd.FileName = Path.GetFileNameWithoutExtension(currentFile); + sfd.InitialDirectory = Path.GetDirectoryName(currentFile); + } + else if (!(Global.Emulator is NullEmulator)) + { + sfd.FileName = PathManager.FilesystemSafeName(Global.Game); + sfd.InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPath, null); + } + else + { + sfd.FileName = "NULL"; + sfd.InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPath, null); + } + + sfd.Filter = "Tas Project Files (*.tasproj)|*.tasproj|All Files|*.*"; + sfd.RestoreDirectory = true; + var result = sfd.ShowHawkDialog(); + if (result != DialogResult.OK) + { + return null; + } + + return new FileInfo(sfd.FileName); + } + public static FileInfo GetWatchFileFromUser(string currentFile) { var ofd = new OpenFileDialog();