From 398577245efa8aa0f0cdeb5ee8857f7d2905778e Mon Sep 17 00:00:00 2001 From: adelikat Date: Fri, 13 Jun 2014 00:43:55 +0000 Subject: [PATCH] Progress on Bk2 implementation --- BizHawk.Client.Common/movie/bk2/Bk2Header.cs | 38 ++++- .../movie/bk2/Bk2Movie.HeaderApi.cs | 160 ++++++++---------- .../movie/bk2/Bk2Movie.InputLog.cs | 2 + .../movie/bk2/Bk2Movie.ModeApi.cs | 29 +++- BizHawk.Client.Common/movie/bk2/Bk2Movie.cs | 15 +- BizHawk.Client.Common/movie/bkm/BkmHeader.cs | 4 +- BizHawk.Client.Common/movie/bkm/BkmLog.cs | 2 +- .../movie/bkm/BkmMovie.HeaderApi.cs | 1 - .../movie/bkm/BkmMovie.InputLog.cs | 4 +- BizHawk.Client.Common/movie/bkm/BkmMovie.cs | 4 +- .../movie/tasproj/TasMovie.cs | 4 +- 11 files changed, 148 insertions(+), 115 deletions(-) diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Header.cs b/BizHawk.Client.Common/movie/bk2/Bk2Header.cs index ffc072c37a..cc974dc359 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Header.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Header.cs @@ -5,8 +5,42 @@ using System.Text; namespace BizHawk.Client.Common { - public class MovieHeader2 + public class Bk2Header : Dictionary { - + public new string this[string key] + { + get + { + return this.ContainsKey(key) ? base[key] : string.Empty; + } + + set + { + if (ContainsKey(key)) + { + base[key] = value; + } + else + { + Add(key, value); + } + } + } + + public override string ToString() + { + var sb = new StringBuilder(); + + foreach (var kvp in this) + { + sb + .Append(kvp.Key) + .Append(' ') + .Append(kvp.Value) + .AppendLine(); + } + + return sb.ToString(); + } } } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs index 46411774cd..24aa41c1ed 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs @@ -7,47 +7,53 @@ namespace BizHawk.Client.Common { public partial class Bk2Movie : IMovie { + private readonly Bk2Header Header = new Bk2Header(); + public IDictionary HeaderEntries { - get - { - throw new NotImplementedException(); - } + get { return Header; } } public SubtitleList Subtitles { - get { throw new NotImplementedException(); } + get; + private set; } public IList Comments { - get { throw new NotImplementedException(); } + get; + private set; } public string SyncSettingsJson { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.SYNCSETTINGS]; } + set { Header[HeaderKeys.SYNCSETTINGS] = value; } } public string SavestateBinaryBase64Blob { get { - throw new NotImplementedException(); + if (Header.ContainsKey(HeaderKeys.SAVESTATEBINARYBASE64BLOB)) + { + return Header[HeaderKeys.SAVESTATEBINARYBASE64BLOB]; + } + + return null; } set { - throw new NotImplementedException(); + if (value == null) + { + Header.Remove(HeaderKeys.SAVESTATEBINARYBASE64BLOB); + } + else + { + Header.Add(HeaderKeys.SAVESTATEBINARYBASE64BLOB, value); + } } } @@ -55,12 +61,17 @@ namespace BizHawk.Client.Common { get { - throw new NotImplementedException(); + if (!Header.ContainsKey(HeaderKeys.RERECORDS)) + { + Header[HeaderKeys.RERECORDS] = "0"; + } + + return ulong.Parse(Header[HeaderKeys.RERECORDS]); } set { - throw new NotImplementedException(); + Header[HeaderKeys.RERECORDS] = value.ToString(); } } @@ -68,12 +79,24 @@ namespace BizHawk.Client.Common { get { - throw new NotImplementedException(); + if (Header.ContainsKey(HeaderKeys.STARTSFROMSAVESTATE)) + { + return bool.Parse(Header[HeaderKeys.STARTSFROMSAVESTATE]); + } + + return false; } set { - throw new NotImplementedException(); + if (value) + { + Header.Add(HeaderKeys.STARTSFROMSAVESTATE, "True"); + } + else + { + Header.Remove(HeaderKeys.STARTSFROMSAVESTATE); + } } } @@ -81,12 +104,17 @@ namespace BizHawk.Client.Common { get { - throw new NotImplementedException(); + if (Header.ContainsKey(HeaderKeys.GAMENAME)) + { + return Header[HeaderKeys.GAMENAME]; + } + + return string.Empty; } set { - throw new NotImplementedException(); + Header[HeaderKeys.GAMENAME] = value; } } @@ -94,104 +122,60 @@ namespace BizHawk.Client.Common { get { - throw new NotImplementedException(); + if (Header.ContainsKey(HeaderKeys.PLATFORM)) + { + return Header[HeaderKeys.PLATFORM]; + } + + return string.Empty; } set { - throw new NotImplementedException(); + Header[HeaderKeys.PLATFORM] = value; } } public string Hash { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.SHA1]; } + set { Header[HeaderKeys.SHA1] = value; } } public string Author { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.AUTHOR]; } + set { Header[HeaderKeys.AUTHOR] = value; } } public string Core { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.CORE]; } + set { Header[HeaderKeys.CORE] = value; } } public string Platform { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.PLATFORM]; } + set { Header[HeaderKeys.PLATFORM] = value; } } public string BoardName { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.BOARDNAME]; } + set { Header[HeaderKeys.BOARDNAME] = value; } } public string EmulatorVersion { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.EMULATIONVERSION]; } + set { Header[HeaderKeys.EMULATIONVERSION] = value; } } public string FirmwareHash { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } + get { return Header[HeaderKeys.FIRMWARESHA1]; } + set { Header[HeaderKeys.FIRMWARESHA1] = value; } } } } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs index ff9e91f814..c85733f1f1 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs @@ -8,6 +8,8 @@ namespace BizHawk.Client.Common { public partial class Bk2Movie : IMovie { + private readonly BkmLog _log = new BkmLog(); + public string GetInputLog() { throw new NotImplementedException(); diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs index 4c62a2f274..ae72189a74 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs @@ -22,7 +22,7 @@ namespace BizHawk.Client.Common public bool IsRecording { - get { throw new NotImplementedException(); } + get { return _mode == Moviemode.Record; } } public bool IsFinished @@ -32,27 +32,44 @@ namespace BizHawk.Client.Common public void StartNewRecording() { - throw new NotImplementedException(); + _mode = Moviemode.Record; + if (Global.Config.EnableBackupMovies && _makeBackup && _log.Any()) + { + SaveBackup(); + _makeBackup = false; + } + + _log.Clear(); } public void StartNewPlayback() { - throw new NotImplementedException(); + _mode = Moviemode.Play; } public void SwitchToRecord() { - throw new NotImplementedException(); + _mode = Moviemode.Record; } public void SwitchToPlay() { - throw new NotImplementedException(); + _mode = Moviemode.Play; + Save(); } public void Stop(bool saveChanges = true) { - throw new NotImplementedException(); + if (saveChanges) + { + if (_mode == Moviemode.Record || Changes) + { + Save(); + } + } + + Changes = false; + _mode = Moviemode.Inactive; } } } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs index 8145974f05..84ca467a96 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs @@ -11,14 +11,15 @@ namespace BizHawk.Client.Common { public partial class Bk2Movie : IMovie { - private readonly MovieLog _log = new MovieLog(); private readonly PlatformFrameRates _frameRates = new PlatformFrameRates(); - - private bool MakeBackup { get; set; } + private bool _makeBackup = true; public Bk2Movie(string filename, bool startsFromSavestate = false) : this(startsFromSavestate) { + Subtitles = new SubtitleList(); + Comments = new List(); + Rerecords = 0; Filename = filename; } @@ -30,7 +31,7 @@ namespace BizHawk.Client.Common IsCountingRerecords = true; _mode = Moviemode.Inactive; - MakeBackup = true; + _makeBackup = true; } #region Implementation @@ -38,11 +39,7 @@ namespace BizHawk.Client.Common public string PreferredExtension { get { return "bk2"; } } public bool IsCountingRerecords { get; set; } - public bool Changes - { - get { throw new NotImplementedException(); } - private set { throw new NotImplementedException(); } - } + public bool Changes { get; private set; } public double FrameCount { diff --git a/BizHawk.Client.Common/movie/bkm/BkmHeader.cs b/BizHawk.Client.Common/movie/bkm/BkmHeader.cs index 31d7a695b5..a88ce599ea 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmHeader.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmHeader.cs @@ -3,9 +3,9 @@ using System.Text; namespace BizHawk.Client.Common { - public class MovieHeader : Dictionary + public class BkmHeader : Dictionary { - public MovieHeader() + public BkmHeader() { Comments = new List(); Subtitles = new SubtitleList(); diff --git a/BizHawk.Client.Common/movie/bkm/BkmLog.cs b/BizHawk.Client.Common/movie/bkm/BkmLog.cs index 5809d4a132..562a8f6261 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmLog.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmLog.cs @@ -10,7 +10,7 @@ namespace BizHawk.Client.Common /// /// Represents the controller key presses of a movie /// - public class MovieLog : IEnumerable + public class BkmLog : IEnumerable { public IEnumerator GetEnumerator() { diff --git a/BizHawk.Client.Common/movie/bkm/BkmMovie.HeaderApi.cs b/BizHawk.Client.Common/movie/bkm/BkmMovie.HeaderApi.cs index d5edf5ce54..f132a913b2 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmMovie.HeaderApi.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmMovie.HeaderApi.cs @@ -91,7 +91,6 @@ namespace BizHawk.Client.Common public string EmulatorVersion { get { return Header[HeaderKeys.EMULATIONVERSION]; } - set { Header[HeaderKeys.EMULATIONVERSION] = value; } } diff --git a/BizHawk.Client.Common/movie/bkm/BkmMovie.InputLog.cs b/BizHawk.Client.Common/movie/bkm/BkmMovie.InputLog.cs index 96ae192bd6..64758037bb 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmMovie.InputLog.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmMovie.InputLog.cs @@ -6,7 +6,7 @@ namespace BizHawk.Client.Common { public partial class BkmMovie : IMovie { - private readonly MovieLog _log = new MovieLog(); + private readonly BkmLog _log = new BkmLog(); public string GetInputLog() { @@ -182,7 +182,7 @@ namespace BizHawk.Client.Common { // This function will compare the movie data to the savestate movie data to see if they match errorMessage = string.Empty; - var log = new MovieLog(); + var log = new BkmLog(); var stateFrame = 0; while (true) { diff --git a/BizHawk.Client.Common/movie/bkm/BkmMovie.cs b/BizHawk.Client.Common/movie/bkm/BkmMovie.cs index 6cb44a58a1..2e4c789809 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmMovie.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmMovie.cs @@ -20,7 +20,7 @@ namespace BizHawk.Client.Common public BkmMovie(bool startsFromSavestate = false) { - Header = new MovieHeader(); + Header = new BkmHeader(); Header[HeaderKeys.MOVIEVERSION] = "BizHawk v0.0.1"; Filename = string.Empty; _preloadFramecount = 0; @@ -34,7 +34,7 @@ namespace BizHawk.Client.Common #region Properties public string PreferredExtension { get { return "bkm"; } } - public MovieHeader Header { get; private set; } + public BkmHeader Header { get; private set; } public string Filename { get; set; } public bool IsCountingRerecords { get; set; } public bool Loaded { get; private set; } diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 82e9d87f39..51d605295e 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -81,7 +81,7 @@ namespace BizHawk.Client.Common { _mg = MnemonicGeneratorFactory.Generate(); Filename = string.Empty; - Header = new MovieHeader { StartsFromSavestate = startsFromSavestate }; + Header = new BkmHeader { StartsFromSavestate = startsFromSavestate }; Header[HeaderKeys.MOVIEVERSION] = "BizHawk v2.0"; _records = new MovieRecordList(); _mode = Moviemode.Inactive; @@ -287,7 +287,7 @@ namespace BizHawk.Client.Common public string Filename { get; set; } - public MovieHeader Header { get; private set; } + public BkmHeader Header { get; private set; } public bool IsActive {