diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs index 9e3eef00ad..94bc788293 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs @@ -184,35 +184,33 @@ namespace BizHawk.Client.Common Directory.CreateDirectory(file.Directory.ToString()); } - using (var bs = new BinaryStateSaver(fn, false)) + using var bs = new BinaryStateSaver(fn, false); + bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString())); + bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString())); + bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString())); + bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(_syncSettingsJson)); + + bs.PutLump(BinaryStateLump.Input, WriteInputLog); + + if (StartsFromSavestate) { - bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString())); - bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString())); - bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString())); - bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(_syncSettingsJson)); - - bs.PutLump(BinaryStateLump.Input, WriteInputLog); - - if (StartsFromSavestate) + if (TextSavestate != null) { - if (TextSavestate != null) - { - bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate)); - } - else - { - bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate)); - } - - if (SavestateFramebuffer != null) - { - bs.PutLump(BinaryStateLump.Framebuffer, (BinaryWriter bw) => bw.Write(SavestateFramebuffer)); - } + bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate)); } - else if (StartsFromSaveRam) + else { - bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam)); + bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate)); } + + if (SavestateFramebuffer != null) + { + bs.PutLump(BinaryStateLump.Framebuffer, (BinaryWriter bw) => bw.Write(SavestateFramebuffer)); + } + } + else if (StartsFromSaveRam) + { + bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam)); } if (!backup) diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs index 76c6c706e7..e755fcf853 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.ModeApi.cs @@ -18,20 +18,10 @@ namespace BizHawk.Client.Common Log.Clear(); } - public virtual void StartNewPlayback() - { - Mode = MovieMode.Play; - } - - public virtual void SwitchToRecord() - { - Mode = MovieMode.Record; - } - - public virtual void SwitchToPlay() - { - Mode = MovieMode.Play; - } + public void StartNewPlayback() => Mode = MovieMode.Play; + public void SwitchToRecord() => Mode = MovieMode.Record; + public void SwitchToPlay() => Mode = MovieMode.Play; + public void FinishedMode() => Mode = MovieMode.Finished; public virtual bool Stop(bool saveChanges = true) { @@ -50,10 +40,5 @@ namespace BizHawk.Client.Common return saved; } - - public void FinishedMode() - { - Mode = MovieMode.Finished; - } } } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs index 99c8342a8c..e990d88db8 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; - using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.Gameboy; diff --git a/BizHawk.Client.Common/movie/bk2/StringLogs.cs b/BizHawk.Client.Common/movie/bk2/StringLogs.cs index 01301e1884..baed4944b9 100644 --- a/BizHawk.Client.Common/movie/bk2/StringLogs.cs +++ b/BizHawk.Client.Common/movie/bk2/StringLogs.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; using System.Security.AccessControl; +using System.Text; using BizHawk.Common; namespace BizHawk.Client.Common @@ -30,6 +31,36 @@ namespace BizHawk.Client.Common return new ListStringLog(); } + + public static int? DivergentPoint(this IStringLog currentLog, IStringLog newLog) + { + int max = newLog.Count; + if (currentLog.Count < newLog.Count) + { + max = currentLog.Count; + } + + for (int i = 0; i < max; i++) + { + if (newLog[i] != currentLog[i]) + { + return i; + } + } + + return null; + } + + public static string ToInputLog(this IStringLog log) + { + var sb = new StringBuilder(); + foreach (var record in log) + { + sb.AppendLine(record); + } + + return sb.ToString(); + } } public interface IStringLog : IDisposable, IEnumerable diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs index c3b92de726..4f11929fc7 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs @@ -1,7 +1,6 @@ using System; using System.IO; using System.Linq; -using System.Text; using Newtonsoft.Json; namespace BizHawk.Client.Common @@ -19,59 +18,57 @@ namespace BizHawk.Client.Common Directory.CreateDirectory(file.Directory.ToString()); } - using (var bs = new BinaryStateSaver(fn, false)) + using var bs = new BinaryStateSaver(fn, false); + bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString())); + bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString())); + bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString())); + bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(SyncSettingsJson)); + bs.PutLump(BinaryStateLump.Input, WriteInputLog); + + // TasProj extras + var settings = JsonConvert.SerializeObject(TasStateManager.Settings); + bs.PutLump(BinaryStateLump.StateHistorySettings, tw => tw.WriteLine(settings)); + + bs.PutLump(BinaryStateLump.LagLog, tw => TasLagLog.Save(tw)); + bs.PutLump(BinaryStateLump.Markers, tw => tw.WriteLine(Markers.ToString())); + + if (StartsFromSavestate) { - bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString())); - bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString())); - bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString())); - bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(SyncSettingsJson)); - bs.PutLump(BinaryStateLump.Input, WriteInputLog); - - // TasProj extras - var settings = JsonConvert.SerializeObject(TasStateManager.Settings); - bs.PutLump(BinaryStateLump.StateHistorySettings, tw => tw.WriteLine(settings)); - - bs.PutLump(BinaryStateLump.LagLog, tw => TasLagLog.Save(tw)); - bs.PutLump(BinaryStateLump.Markers, tw => tw.WriteLine(Markers.ToString())); - - if (StartsFromSavestate) + if (TextSavestate != null) { - if (TextSavestate != null) - { - bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate)); - } - else - { - bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate)); - } + bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate)); } - else if (StartsFromSaveRam) + else { - bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam)); + bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate)); } + } + else if (StartsFromSaveRam) + { + bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam)); + } - if (ClientSettingsForSave != null) - { - var clientSettingsJson = ClientSettingsForSave(); - bs.PutLump(BinaryStateLump.ClientSettings, (TextWriter tw) => tw.Write(clientSettingsJson)); - } + if (ClientSettingsForSave != null) + { + var clientSettingsJson = ClientSettingsForSave(); + bs.PutLump(BinaryStateLump.ClientSettings, (TextWriter tw) => tw.Write(clientSettingsJson)); + } - if (VerificationLog.Any()) - { - bs.PutLump(BinaryStateLump.VerificationLog, tw => tw.WriteLine(InputLogToString(VerificationLog))); - } + if (VerificationLog.Any()) + { + bs.PutLump(BinaryStateLump.VerificationLog, tw => tw.WriteLine(VerificationLog.ToInputLog())); + } - if (Branches.Any()) - { - Branches.Save(bs); - } + if (Branches.Any()) + { + Branches.Save(bs); + } - bs.PutLump(BinaryStateLump.Session, tw => tw.WriteLine(JsonConvert.SerializeObject(Session))); + bs.PutLump(BinaryStateLump.Session, tw => tw.WriteLine(JsonConvert.SerializeObject(Session))); - if (TasStateManager.Settings.SaveStateHistory && !backup) - { - bs.PutLump(BinaryStateLump.StateHistory, bw => TasStateManager.Save(bw)); - } + if (TasStateManager.Settings.SaveStateHistory && !backup) + { + bs.PutLump(BinaryStateLump.StateHistory, bw => TasStateManager.Save(bw)); } if (!backup) @@ -293,16 +290,5 @@ namespace BizHawk.Client.Common Markers.Clear(); ChangeLog.ClearLog(); } - - private static string InputLogToString(IStringLog log) - { - var sb = new StringBuilder(); - foreach (var record in log) - { - sb.AppendLine(record); - } - - return sb.ToString(); - } } } diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 72e011e881..91e6c02c76 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -58,26 +58,6 @@ namespace BizHawk.Client.Common Markers.Add(0, startsFromSavestate ? "Savestate" : "Power on"); } - // TODO: use LogGenerators rather than string comparisons - private int? DivergentPoint(IStringLog currentLog, IStringLog newLog) - { - int max = newLog.Count; - if (currentLog.Count < newLog.Count) - { - max = currentLog.Count; - } - - for (int i = 0; i < max; i++) - { - if (newLog[i] != currentLog[i]) - { - return i; - } - } - - return null; - } - public override void StartNewRecording() { ClearTasprojExtras(); @@ -87,16 +67,6 @@ namespace BizHawk.Client.Common base.StartNewRecording(); } - public override void SwitchToPlay() - { - Mode = MovieMode.Play; - } - - public override void SwitchToRecord() - { - Mode = MovieMode.Record; - } - /// /// Removes lag log and greenzone after this frame /// @@ -202,10 +172,7 @@ namespace BizHawk.Client.Common } } - public IStringLog GetLogEntries() - { - return Log; - } + public IStringLog GetLogEntries() => Log; private int? _timelineBranchFrame; @@ -434,7 +401,7 @@ namespace BizHawk.Client.Common public void LoadBranch(TasBranch branch) { - int? divergentPoint = DivergentPoint(Log, branch.InputLog); + int? divergentPoint = Log.DivergentPoint(branch.InputLog); Log?.Dispose(); Log = branch.InputLog.Clone(); @@ -508,15 +475,8 @@ namespace BizHawk.Client.Common Changes = true; } - public void ClearChanges() - { - Changes = false; - } - - public void FlagChanges() - { - Changes = true; - } + public void ClearChanges() => Changes = false; + public void FlagChanges() => Changes = true; #endregion }